diff options
663 files changed, 16626 insertions, 7865 deletions
@@ -487,3 +487,8 @@ a9f2d0cb11f73b06858e6083bb50083becc3f9cd 3.7.9-release 3b44ea8988cb902f0dda8429e8d5e4569e304532 3.7.12-release d86a7e1bc96d27b683f951d3701d5b7042158c68 3.7.13-release a7872554f3665588f1e8347d472cec3a299254b3 3.7.14-release +3f11f57f2b4d15a9f987d12bc70ef507eefb5018 3.7.15-release +562e7dace7465060ac9adb2e8eca800b699ff024 3.7.16-release +bcc2770e21c125e0bab59141c51db9145aec068d 3.7.17-release +2729c1daf0257d68a40bdbc4acf1a16184974bbd 3.7.18-release +82973b38a6c9a457333e3519e4f2b16bb5eedf47 3.7.19-release diff --git a/autobuild.xml b/autobuild.xml index b6586b25b7..2d7916e217 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -282,9 +282,9 @@ <key>archive</key> <map> <key>hash</key> - <string>f5a699c93beb1a854d0b51382b5cecc8</string> + <string>40b1c6b3727ebedafc2f1a172797ccd1</string> <key>url</key> - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/290664/arch/Darwin/installer/curl-7.37.0-darwin-20140605.tar.bz2</string> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/295367/arch/Darwin/installer/curl-7.38.0-darwin-20141010.tar.bz2</string> </map> <key>name</key> <string>darwin</string> @@ -294,9 +294,9 @@ <key>archive</key> <map> <key>hash</key> - <string>2bc285edffd0e55e0cd6290f39854a89</string> + <string>06149da3d7a34adf40853f813ae55328</string> <key>url</key> - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/290664/arch/Linux/installer/curl-7.37.0-linux-20140605.tar.bz2</string> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/295367/arch/Linux/installer/curl-7.38.0-linux-20141010.tar.bz2</string> </map> <key>name</key> <string>linux</string> @@ -306,9 +306,9 @@ <key>archive</key> <map> <key>hash</key> - <string>8d3b197d7a114d2b688d2831a0a59757</string> + <string>e4280eae792a5f13bc9d01d8cfb7c557</string> <key>url</key> - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/290664/arch/CYGWIN/installer/curl-7.37.0-windows-20140605.tar.bz2</string> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/295367/arch/CYGWIN/installer/curl-7.38.0-windows-20141010.tar.bz2</string> </map> <key>name</key> <string>windows</string> @@ -1444,9 +1444,9 @@ <key>archive</key> <map> <key>hash</key> - <string>79afb464255be2be7c02fdfac10bcd5c</string> + <string>3c2b6be4c78b2479c3fae612e1053d37</string> <key>url</key> - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-llqtwebkit2/rev/290663/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20140605.tar.bz2</string> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/canonical_3p-llqtwebkit2/rev/295522/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20141015.tar.bz2</string> </map> <key>name</key> <string>darwin</string> @@ -1456,9 +1456,9 @@ <key>archive</key> <map> <key>hash</key> - <string>090190a8dd80efe1f0933c7ed307e6f1</string> + <string>d31358176b9ba8c676458cc061767c0b</string> <key>url</key> - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-llqtwebkit2/rev/290663/arch/Linux/installer/llqtwebkit-4.7.1-linux-20140605.tar.bz2</string> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/canonical_3p-llqtwebkit2/rev/295522/arch/Linux/installer/llqtwebkit-4.7.1-linux-20141015.tar.bz2</string> </map> <key>name</key> <string>linux</string> @@ -1468,9 +1468,9 @@ <key>archive</key> <map> <key>hash</key> - <string>650f2a30a83eacde238fcc87ff161190</string> + <string>bb4e8c8006c8a7aef6d3e3c36a8cebbf</string> <key>url</key> - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-llqtwebkit2/rev/290663/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20140605.tar.bz2</string> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/canonical_3p-llqtwebkit2/rev/295522/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20141015.tar.bz2</string> </map> <key>name</key> <string>windows</string> diff --git a/doc/contributions.txt b/doc/contributions.txt index 7e8ab46b1a..2d27562e37 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -323,6 +323,7 @@ Cinder Roxley STORM-1951 STORM-2035 STORM-2036 + STORM-2037 Clara Young Coaldust Numbers VWR-1095 @@ -712,6 +713,9 @@ Jonathan Yap STORM-1986 STORM-1981 STORM-2015 + STORM-2031 + STORM-2030 + STORM-2034 STORM-2018 Kadah Coba STORM-1060 @@ -990,6 +994,38 @@ Nicky Perian STORM-1090 STORM-1828 Nicoladie Gymnast +NiranV Dean + STORM-2040 + STORM-2042 + STORM-2043 + STORM-2044 + STORM-2045 + STORM-2046 + STORM-2047 + STORM-2048 + STORM-2049 + STORM-2050 + STORM-2051 + STORM-2052 + STORM-2057 + STORM-2058 + STORM-2059 + STORM-2060 + STORM-2061 + STORM-2063 + STORM-2065 + STORM-2066 + STORM-2068 + STORM-2073 + STORM-2076 + BUG-372 + BUG-1179 + BUG-6835 + BUG-6837 + BUG-6839 + BUG-6840 + BUG-6958 + BUG-7020 Nounouch Hapmouche VWR-238 Ollie Kubrick @@ -1183,6 +1219,7 @@ Sovereign Engineer OPEN-189 STORM-1972 OPEN-195 + OPEN-217 SpacedOut Frye VWR-34 VWR-45 @@ -1358,6 +1395,7 @@ Whirly Fizzle VWR-29543 MAINT-873 STORM-1930 + BUG-6659 Whoops Babii VWR-631 VWR-1640 diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt index 410d25ad97..24ea59ca49 100755 --- a/indra/CMakeLists.txt +++ b/indra/CMakeLists.txt @@ -71,7 +71,6 @@ add_subdirectory(${LIBS_OPEN_PREFIX}media_plugins) if (LINUX) add_subdirectory(${VIEWER_PREFIX}linux_crash_logger) - add_subdirectory(${VIEWER_PREFIX}linux_updater) if (INSTALL_PROPRIETARY) include(LLAppearanceUtility) add_subdirectory(${LLAPPEARANCEUTILITY_SRC_DIR} ${LLAPPEARANCEUTILITY_BIN_DIR}) @@ -86,9 +85,8 @@ elseif (WINDOWS) if (EXISTS ${VIEWER_DIR}win_setup) add_subdirectory(${VIEWER_DIR}win_setup) endif (EXISTS ${VIEWER_DIR}win_setup) - add_subdirectory(${VIEWER_PREFIX}win_updater) - # add_dependencies(viewer windows-updater windows-setup windows-crash-logger) - add_dependencies(viewer windows-updater windows-crash-logger) + # add_dependencies(viewer windows-setup windows-crash-logger) + add_dependencies(viewer windows-crash-logger) elseif (SOLARIS) add_subdirectory(solaris_crash_logger) add_dependencies(viewer solaris-crash-logger) diff --git a/indra/cmake/00-COMPILE-LINK-RUN.txt b/indra/cmake/00-COMPILE-LINK-RUN.txt index d08cc2dc0c..49b899c50d 100644 --- a/indra/cmake/00-COMPILE-LINK-RUN.txt +++ b/indra/cmake/00-COMPILE-LINK-RUN.txt @@ -115,12 +115,12 @@ Compilation ---------------------------------------------------------------------------- Notes: - 1. We’re also building dylibs in a somewhat unusual way. They’re + 1. We're also building dylibs in a somewhat unusual way. They're currently being generated with a link path of - ‘@executable_path/../Resources/<library>’. If we were to follow - the recommendations in dyld’s man page, we’d instead reference - ‘@loader_path/<library>’, use -rpath on the executable link - (pointing to the ‘Resources’ subdir of the main executable), and + '@executable_path/../Resources/<library>'. If we were to follow + the recommendations in dyld's man page, we’d instead reference + '@loader_path/<library>', use -rpath on the executable link + (pointing to the 'Resources' subdir of the main executable), and be able to avoid some symlinking in the .app tree. 2. Use the -headerpad_max_install_names link option on all .dylibs. @@ -184,7 +184,7 @@ Linking second, incompatible version of the library. Switching colladadom to a static library ended the re-export problem. - * Preventing re-export is not sufficient. other libraries will + * Preventing re-export is not sufficient. Other libraries will still be shipped as shared and they can still have Singleton and Fragile Base Class issues. A DLL may be built with a static archive of a library that has global data. That same static diff --git a/indra/linux_updater/CMakeLists.txt b/indra/linux_updater/CMakeLists.txt deleted file mode 100644 index 4a9e82f9b6..0000000000 --- a/indra/linux_updater/CMakeLists.txt +++ /dev/null @@ -1,57 +0,0 @@ -# -*- cmake -*- - -project(linux_updater) - -include(00-Common) -include(CURL) -include(CARes) -include(OpenSSL) -include(UI) -include(LLCommon) -include(LLMessage) -include(LLVFS) -include(LLXML) -include(LLUI) -include(Linking) - -include_directories( - ${LLCOMMON_INCLUDE_DIRS} - ${LLVFS_INCLUDE_DIRS} - ${LLXML_INCLUDE_DIRS} - ${LLUI_INCLUDE_DIRS} - ${CURL_INCLUDE_DIRS} - ${CARES_INCLUDE_DIRS} - ${OPENSSL_INCLUDE_DIRS} - ${UI_INCLUDE_DIRS} - ) -include_directories(SYSTEM - ${LLCOMMON_SYSTEM_INCLUDE_DIRS} - ${LLXML_SYSTEM_INCLUDE_DIRS} - ) - -set(linux_updater_SOURCE_FILES linux_updater.cpp) - -set(linux_updater_HEADER_FILES CMakeLists.txt) - -set_source_files_properties(${linux_updater_HEADER_FILES} - PROPERTIES HEADER_FILES_ONLY TRUE) - -list(APPEND linux_updater_SOURCE_FILES ${linux_updater_HEADER_FILES}) - -add_executable(linux-updater ${linux_updater_SOURCE_FILES}) - -target_link_libraries(linux-updater - ${CURL_LIBRARIES} - ${CARES_LIBRARIES} - ${OPENSSL_LIBRARIES} - ${CRYPTO_LIBRARIES} - ${LLMESSAGE_LIBRARIES} - ${UI_LIBRARIES} - ${LLXML_LIBRARIES} - ${LLUI_LIBRARIES} - ${LLVFS_LIBRARIES} - ${LLCOMMON_LIBRARIES} - ) - -add_custom_target(linux-updater-target ALL - DEPENDS linux-updater) diff --git a/indra/linux_updater/linux_updater.cpp b/indra/linux_updater/linux_updater.cpp deleted file mode 100644 index 5c94deba02..0000000000 --- a/indra/linux_updater/linux_updater.cpp +++ /dev/null @@ -1,926 +0,0 @@ -/** - * @file linux_updater.cpp - * @author Kyle Ambroff <ambroff@lindenlab.com>, Tofu Linden - * @brief Viewer update program for unix platforms that support GTK+ - * - * $LicenseInfo:firstyear=2008&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#include <unistd.h> -#include <signal.h> -#include <errno.h> -#include <set> -#include <iostream> - -#include "linden_common.h" -#include "llerrorcontrol.h" -#include "llfile.h" -#include "lldir.h" -#include "lldiriterator.h" - -/*==========================================================================*| -// IQA-490: Use of LLTrans -- by this program at least -- appears to be buggy. -// With it, the 3.3.2 beta 1 linux-updater.bin crashes; without it seems stable. -#include "llxmlnode.h" -#include "lltrans.h" -|*==========================================================================*/ - -static class LLTrans -{ -public: - LLTrans(); - static std::string getString(const std::string& key); - -private: - std::string _getString(const std::string& key) const; - - typedef std::map<std::string, std::string> MessageMap; - MessageMap mMessages; -} sLLTransInstance; - -#include <curl/curl.h> -#include <map> -#include <boost/foreach.hpp> - -extern "C" { -#include <gtk/gtk.h> -} - -const guint UPDATE_PROGRESS_TIMEOUT = 100; -const guint UPDATE_PROGRESS_TEXT_TIMEOUT = 1000; -const guint ROTATE_IMAGE_TIMEOUT = 8000; - -typedef struct _updater_app_state { - std::string app_name; - std::string url; - std::string file; - std::string image_dir; - std::string dest_dir; - std::string strings_dirs; - std::string strings_file; - - LLDirIterator *image_dir_iter; - - GtkWidget *window; - GtkWidget *progress_bar; - GtkWidget *image; - - double progress_value; - bool activity_mode; - - guint image_rotation_timeout_id; - guint progress_update_timeout_id; - guint update_progress_text_timeout_id; - - bool failure; -} UpdaterAppState; - -// List of entries from strings.xml to always replace -static std::set<std::string> default_trans_args; -void init_default_trans_args() -{ - default_trans_args.insert("SECOND_LIFE"); // World - default_trans_args.insert("APP_NAME"); - default_trans_args.insert("SECOND_LIFE_GRID"); - default_trans_args.insert("SUPPORT_SITE"); -} - -bool translate_init(std::string comma_delim_path_list, - std::string base_xml_name) -{ - return true; -/*==========================================================================*| - init_default_trans_args(); - - // extract paths string vector from comma-delimited flat string - std::vector<std::string> paths; - LLStringUtil::getTokens(comma_delim_path_list, paths, ","); // split over ',' - - for(std::vector<std::string>::iterator it = paths.begin(), end_it = paths.end(); - it != end_it; - ++it) - { - (*it) = gDirUtilp->findSkinnedFilename(*it, base_xml_name); - } - - // suck the translation xml files into memory - LLXMLNodePtr root; - bool success = LLXMLNode::getLayeredXMLNode(root, paths); - if (!success) - { - // couldn't load string table XML - return false; - } - else - { - // get those strings out of the XML - LLTrans::parseStrings(root, default_trans_args); - return true; - } -|*==========================================================================*/ -} - - -void updater_app_ui_init(void); -void updater_app_quit(UpdaterAppState *app_state); -void parse_args_and_init(int argc, char **argv, UpdaterAppState *app_state); -std::string next_image_filename(std::string& image_path, LLDirIterator& iter); -void display_error(GtkWidget *parent, std::string title, std::string message); -BOOL install_package(std::string package_file, std::string destination); -BOOL spawn_viewer(UpdaterAppState *app_state); - -extern "C" { - void on_window_closed(GtkWidget *sender, GdkEvent *event, gpointer state); - gpointer worker_thread_cb(gpointer *data); - int download_progress_cb(gpointer data, double t, double d, double utotal, double ulnow); - gboolean rotate_image_cb(gpointer data); - gboolean progress_update_timeout(gpointer data); - gboolean update_progress_text_timeout(gpointer data); -} - -void updater_app_ui_init(UpdaterAppState *app_state) -{ - GtkWidget *vbox; - GtkWidget *summary_label; - GtkWidget *description_label; - GtkWidget *frame; - - llassert(app_state != NULL); - - // set up window and main container - std::string window_title = LLTrans::getString("UpdaterWindowTitle"); - app_state->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(app_state->window), - window_title.c_str()); - gtk_window_set_resizable(GTK_WINDOW(app_state->window), FALSE); - gtk_window_set_position(GTK_WINDOW(app_state->window), - GTK_WIN_POS_CENTER_ALWAYS); - - gtk_container_set_border_width(GTK_CONTAINER(app_state->window), 12); - g_signal_connect(G_OBJECT(app_state->window), "delete-event", - G_CALLBACK(on_window_closed), app_state); - - vbox = gtk_vbox_new(FALSE, 6); - gtk_container_add(GTK_CONTAINER(app_state->window), vbox); - - // set top label - std::ostringstream label_ostr; - label_ostr << "<big><b>" - << LLTrans::getString("UpdaterNowUpdating") - << "</b></big>"; - - summary_label = gtk_label_new(NULL); - gtk_label_set_use_markup(GTK_LABEL(summary_label), TRUE); - gtk_label_set_markup(GTK_LABEL(summary_label), - label_ostr.str().c_str()); - gtk_misc_set_alignment(GTK_MISC(summary_label), 0, 0.5); - gtk_box_pack_start(GTK_BOX(vbox), summary_label, FALSE, FALSE, 0); - - // create the description label - description_label = gtk_label_new(LLTrans::getString("UpdaterUpdatingDescriptive").c_str()); - gtk_label_set_line_wrap(GTK_LABEL(description_label), TRUE); - gtk_misc_set_alignment(GTK_MISC(description_label), 0, 0.5); - gtk_box_pack_start(GTK_BOX(vbox), description_label, FALSE, FALSE, 0); - - // If an image path has been set, load the background images - if (!app_state->image_dir.empty()) { - frame = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); - gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); - - // load the first image - app_state->image = gtk_image_new_from_file - (next_image_filename(app_state->image_dir, *app_state->image_dir_iter).c_str()); - gtk_widget_set_size_request(app_state->image, 340, 310); - gtk_container_add(GTK_CONTAINER(frame), app_state->image); - - // rotate the images every 5 seconds - app_state->image_rotation_timeout_id = g_timeout_add - (ROTATE_IMAGE_TIMEOUT, rotate_image_cb, app_state); - } - - // set up progress bar, and update it roughly every 1/10 of a second - app_state->progress_bar = gtk_progress_bar_new(); - gtk_progress_bar_set_text(GTK_PROGRESS_BAR(app_state->progress_bar), - LLTrans::getString("UpdaterProgressBarTextWithEllipses").c_str()); - gtk_box_pack_start(GTK_BOX(vbox), - app_state->progress_bar, FALSE, TRUE, 0); - app_state->progress_update_timeout_id = g_timeout_add - (UPDATE_PROGRESS_TIMEOUT, progress_update_timeout, app_state); - app_state->update_progress_text_timeout_id = g_timeout_add - (UPDATE_PROGRESS_TEXT_TIMEOUT, update_progress_text_timeout, app_state); - - gtk_widget_show_all(app_state->window); -} - -gboolean rotate_image_cb(gpointer data) -{ - UpdaterAppState *app_state; - std::string filename; - - llassert(data != NULL); - app_state = (UpdaterAppState *) data; - - filename = next_image_filename(app_state->image_dir, *app_state->image_dir_iter); - - gdk_threads_enter(); - gtk_image_set_from_file(GTK_IMAGE(app_state->image), filename.c_str()); - gdk_threads_leave(); - - return TRUE; -} - -std::string next_image_filename(std::string& image_path, LLDirIterator& iter) -{ - std::string image_filename; - iter.next(image_filename); - return gDirUtilp->add(image_path, image_filename); -} - -void on_window_closed(GtkWidget *sender, GdkEvent* event, gpointer data) -{ - UpdaterAppState *app_state; - - llassert(data != NULL); - app_state = (UpdaterAppState *) data; - - updater_app_quit(app_state); -} - -void updater_app_quit(UpdaterAppState *app_state) -{ - if (app_state != NULL) - { - g_source_remove(app_state->progress_update_timeout_id); - - if (!app_state->image_dir.empty()) - { - g_source_remove(app_state->image_rotation_timeout_id); - } - } - - gtk_main_quit(); -} - -void display_error(GtkWidget *parent, std::string title, std::string message) -{ - GtkWidget *dialog; - - dialog = gtk_message_dialog_new(GTK_WINDOW(parent), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_OK, - "%s", message.c_str()); - gtk_window_set_title(GTK_WINDOW(dialog), title.c_str()); - gtk_dialog_run(GTK_DIALOG(dialog)); - gtk_widget_destroy(dialog); -} - -gpointer worker_thread_cb(gpointer data) -{ - UpdaterAppState *app_state; - CURL *curl; - CURLcode result; - FILE *package_file; - GError *error = NULL; - int fd; - - //g_return_val_if_fail (data != NULL, NULL); - app_state = (UpdaterAppState *) data; - - try { - - if(!app_state->url.empty()) - { - char* tmp_local_filename = NULL; - // create temporary file to store the package. - fd = g_file_open_tmp - ("secondlife-update-XXXXXX", &tmp_local_filename, &error); - if (error != NULL) - { - LL_ERRS() << "Unable to create temporary file: " - << error->message - << LL_ENDL; - - g_error_free(error); - throw 0; - } - - if(tmp_local_filename != NULL) - { - app_state->file = tmp_local_filename; - g_free(tmp_local_filename); - } - - package_file = fdopen(fd, "wb"); - if (package_file == NULL) - { - LL_ERRS() << "Failed to create temporary file: " - << app_state->file.c_str() - << LL_ENDL; - - gdk_threads_enter(); - display_error(app_state->window, - LLTrans::getString("UpdaterFailDownloadTitle"), - LLTrans::getString("UpdaterFailUpdateDescriptive")); - gdk_threads_leave(); - throw 0; - } - - // initialize curl and start downloading the package - LL_INFOS() << "Downloading package: " << app_state->url << LL_ENDL; - - curl = curl_easy_init(); - if (curl == NULL) - { - LL_ERRS() << "Failed to initialize libcurl" << LL_ENDL; - - gdk_threads_enter(); - display_error(app_state->window, - LLTrans::getString("UpdaterFailDownloadTitle"), - LLTrans::getString("UpdaterFailUpdateDescriptive")); - gdk_threads_leave(); - throw 0; - } - - curl_easy_setopt(curl, CURLOPT_URL, app_state->url.c_str()); - curl_easy_setopt(curl, CURLOPT_NOSIGNAL, TRUE); - curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, TRUE); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, package_file); - curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE); - curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, - &download_progress_cb); - curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, app_state); - - result = curl_easy_perform(curl); - fclose(package_file); - curl_easy_cleanup(curl); - - if (result) - { - LL_ERRS() << "Failed to download update: " - << app_state->url - << LL_ENDL; - - gdk_threads_enter(); - display_error(app_state->window, - LLTrans::getString("UpdaterFailDownloadTitle"), - LLTrans::getString("UpdaterFailUpdateDescriptive")); - gdk_threads_leave(); - - throw 0; - } - } - - // now pulse the progres bar back and forth while the package is - // being unpacked - gdk_threads_enter(); - std::string installing_msg = LLTrans::getString("UpdaterNowInstalling"); - gtk_progress_bar_set_text( - GTK_PROGRESS_BAR(app_state->progress_bar), - installing_msg.c_str()); - app_state->activity_mode = TRUE; - gdk_threads_leave(); - - // *TODO: if the destination is not writable, terminate this - // thread and show file chooser? - if (!install_package(app_state->file.c_str(), app_state->dest_dir)) - { - LL_WARNS() << "Failed to install package to destination: " - << app_state->dest_dir - << LL_ENDL; - - gdk_threads_enter(); - display_error(app_state->window, - LLTrans::getString("UpdaterFailInstallTitle"), - LLTrans::getString("UpdaterFailUpdateDescriptive")); - //"Failed to update " + app_state->app_name, - gdk_threads_leave(); - throw 0; - } - - // try to spawn the new viewer - if (!spawn_viewer(app_state)) - { - LL_WARNS() << "Viewer was not installed properly in : " - << app_state->dest_dir - << LL_ENDL; - - gdk_threads_enter(); - display_error(app_state->window, - LLTrans::getString("UpdaterFailStartTitle"), - LLTrans::getString("UpdaterFailUpdateDescriptive")); - gdk_threads_leave(); - throw 0; - } - } - catch (...) - { - app_state->failure = TRUE; - } - - gdk_threads_enter(); - updater_app_quit(app_state); - gdk_threads_leave(); - - return NULL; -} - - -gboolean less_anal_gspawnsync(gchar **argv, - gchar **stderr_output, - gint *child_exit_status, - GError **spawn_error) -{ - // store current SIGCHLD handler if there is one, replace with default - // handler to make glib happy - struct sigaction sigchld_backup; - struct sigaction sigchld_appease_glib; - sigchld_appease_glib.sa_handler = SIG_DFL; - sigemptyset(&sigchld_appease_glib.sa_mask); - sigchld_appease_glib.sa_flags = 0; - sigaction(SIGCHLD, &sigchld_appease_glib, &sigchld_backup); - - gboolean rtn = g_spawn_sync(NULL, - argv, - NULL, - (GSpawnFlags) (G_SPAWN_STDOUT_TO_DEV_NULL), - NULL, - NULL, - NULL, - stderr_output, - child_exit_status, - spawn_error); - - // restore SIGCHLD handler - sigaction(SIGCHLD, &sigchld_backup, NULL); - - return rtn; -} - - -// perform a rename, or perform a (prompted) root rename if that fails -int -rename_with_sudo_fallback(const std::string& filename, const std::string& newname) -{ - int rtncode = ::rename(filename.c_str(), newname.c_str()); - LL_DEBUGS() << "rename result is: " << rtncode << " / " << errno << LL_ENDL; - if (rtncode && (EACCES == errno || EPERM == errno || EXDEV == errno)) - { - LL_INFOS() << "Permission problem in rename, or moving between different mount points. Retrying as a mv under a sudo." << LL_ENDL; - // failed due to permissions, try again as a gksudo or kdesu mv wrapper hack - char *sudo_cmd = NULL; - sudo_cmd = g_find_program_in_path("gksudo"); - if (!sudo_cmd) - { - sudo_cmd = g_find_program_in_path("kdesu"); - } - if (sudo_cmd) - { - char *mv_cmd = NULL; - mv_cmd = g_find_program_in_path("mv"); - if (mv_cmd) - { - char *src_string_copy = g_strdup(filename.c_str()); - char *dst_string_copy = g_strdup(newname.c_str()); - char* argv[] = - { - sudo_cmd, - mv_cmd, - src_string_copy, - dst_string_copy, - NULL - }; - - gchar *stderr_output = NULL; - gint child_exit_status = 0; - GError *spawn_error = NULL; - if (!less_anal_gspawnsync(argv, &stderr_output, - &child_exit_status, &spawn_error)) - { - LL_WARNS() << "Failed to spawn child process: " - << spawn_error->message - << LL_ENDL; - } - else if (child_exit_status) - { - LL_WARNS() << "mv command failed: " - << (stderr_output ? stderr_output : "(no reason given)") - << LL_ENDL; - } - else - { - // everything looks good, clear the error code - rtncode = 0; - } - - g_free(src_string_copy); - g_free(dst_string_copy); - if (spawn_error) g_error_free(spawn_error); - } - } - } - return rtncode; -} - -gboolean install_package(std::string package_file, std::string destination) -{ - char *tar_cmd = NULL; - std::ostringstream command; - - // Find the absolute path to the 'tar' command. - tar_cmd = g_find_program_in_path("tar"); - if (!tar_cmd) - { - LL_ERRS() << "`tar' was not found in $PATH" << LL_ENDL; - return FALSE; - } - LL_INFOS() << "Found tar command: " << tar_cmd << LL_ENDL; - - // Unpack the tarball in a temporary place first, then move it to - // its final destination - std::string tmp_dest_dir = gDirUtilp->getTempFilename(); - if (LLFile::mkdir(tmp_dest_dir, 0744)) - { - LL_ERRS() << "Failed to create directory: " - << destination - << LL_ENDL; - - return FALSE; - } - - char *package_file_string_copy = g_strdup(package_file.c_str()); - char *tmp_dest_dir_string_copy = g_strdup(tmp_dest_dir.c_str()); - gchar *argv[8] = { - tar_cmd, - const_cast<gchar*>("--strip"), const_cast<gchar*>("1"), - const_cast<gchar*>("-xjf"), - package_file_string_copy, - const_cast<gchar*>("-C"), tmp_dest_dir_string_copy, - NULL, - }; - - LL_INFOS() << "Untarring package: " << package_file << LL_ENDL; - - // store current SIGCHLD handler if there is one, replace with default - // handler to make glib happy - struct sigaction sigchld_backup; - struct sigaction sigchld_appease_glib; - sigchld_appease_glib.sa_handler = SIG_DFL; - sigemptyset(&sigchld_appease_glib.sa_mask); - sigchld_appease_glib.sa_flags = 0; - sigaction(SIGCHLD, &sigchld_appease_glib, &sigchld_backup); - - gchar *stderr_output = NULL; - gint child_exit_status = 0; - GError *untar_error = NULL; - if (!less_anal_gspawnsync(argv, &stderr_output, - &child_exit_status, &untar_error)) - { - LL_WARNS() << "Failed to spawn child process: " - << untar_error->message - << LL_ENDL; - return FALSE; - } - - if (child_exit_status) - { - LL_WARNS() << "Untar command failed: " - << (stderr_output ? stderr_output : "(no reason given)") - << LL_ENDL; - return FALSE; - } - - g_free(tar_cmd); - g_free(package_file_string_copy); - g_free(tmp_dest_dir_string_copy); - g_free(stderr_output); - if (untar_error) g_error_free(untar_error); - - // move the existing package out of the way if it exists - if (gDirUtilp->fileExists(destination)) - { - std::string backup_dir = destination + ".backup"; - int oldcounter = 1; - while (gDirUtilp->fileExists(backup_dir)) - { - // find a foo.backup.N folder name that isn't taken yet - backup_dir = destination + ".backup." + llformat("%d", oldcounter); - ++oldcounter; - } - - if (rename_with_sudo_fallback(destination, backup_dir)) - { - LL_WARNS() << "Failed to move directory: '" - << destination << "' -> '" << backup_dir - << LL_ENDL; - return FALSE; - } - } - - // The package has been unpacked in a staging directory, now we just - // need to move it to its destination. - if (rename_with_sudo_fallback(tmp_dest_dir, destination)) - { - LL_WARNS() << "Failed to move installation to the destination: " - << destination - << LL_ENDL; - return FALSE; - } - - // \0/ Success! - return TRUE; -} - -gboolean progress_update_timeout(gpointer data) -{ - UpdaterAppState *app_state; - - llassert(data != NULL); - - app_state = (UpdaterAppState *) data; - - gdk_threads_enter(); - if (app_state->activity_mode) - { - gtk_progress_bar_pulse - (GTK_PROGRESS_BAR(app_state->progress_bar)); - } - else - { - gtk_progress_set_value(GTK_PROGRESS(app_state->progress_bar), - app_state->progress_value); - } - gdk_threads_leave(); - - return TRUE; -} - -gboolean update_progress_text_timeout(gpointer data) -{ - UpdaterAppState *app_state; - - llassert(data != NULL); - app_state = (UpdaterAppState *) data; - - if (app_state->activity_mode == TRUE) - { - // We no longer need this timeout, it will be removed. - return FALSE; - } - - if (!app_state->progress_value) - { - return TRUE; - } - - std::string progress_text = llformat((LLTrans::getString("UpdaterProgressBarText")+" (%.0f%%)").c_str(), app_state->progress_value); - - gdk_threads_enter(); - gtk_progress_bar_set_text(GTK_PROGRESS_BAR(app_state->progress_bar), - progress_text.c_str()); - gdk_threads_leave(); - - return TRUE; -} - -int download_progress_cb(gpointer data, - double t, - double d, - double utotal, - double ulnow) -{ - UpdaterAppState *app_state; - - llassert(data != NULL); - app_state = (UpdaterAppState *) data; - - if (t <= 0.0) - { - app_state->progress_value = 0; - } - else - { - app_state->progress_value = d * 100.0 / t; - } - return 0; -} - -BOOL spawn_viewer(UpdaterAppState *app_state) -{ - llassert(app_state != NULL); - - std::string cmd = app_state->dest_dir + "/secondlife"; - GError *error = NULL; - - // We want to spawn the Viewer on the same display as the updater app - gboolean success = gdk_spawn_command_line_on_screen - (gtk_widget_get_screen(app_state->window), cmd.c_str(), &error); - - if (!success) - { - LL_WARNS() << "Failed to launch viewer: " << error->message - << LL_ENDL; - } - - if (error) g_error_free(error); - - return success; -} - -void show_usage_and_exit() -{ - std::cout << "Usage: linux-updater <--url URL | --file FILE> --name NAME --dest PATH --stringsdir PATH1,PATH2 --stringsfile FILE" - << "[--image-dir PATH]" - << std::endl; - exit(1); -} - -void parse_args_and_init(int argc, char **argv, UpdaterAppState *app_state) -{ - int i; - - for (i = 1; i < argc; i++) - { - if ((!strcmp(argv[i], "--url")) && (++i < argc)) - { - app_state->url = argv[i]; - } - else if ((!strcmp(argv[i], "--file")) && (++i < argc)) - { - app_state->file = argv[i]; - } - else if ((!strcmp(argv[i], "--name")) && (++i < argc)) - { - app_state->app_name = argv[i]; - } - else if ((!strcmp(argv[i], "--image-dir")) && (++i < argc)) - { - app_state->image_dir = argv[i]; - app_state->image_dir_iter = new LLDirIterator(argv[i], "*.jpg"); - } - else if ((!strcmp(argv[i], "--dest")) && (++i < argc)) - { - app_state->dest_dir = argv[i]; - } - else if ((!strcmp(argv[i], "--stringsdir")) && (++i < argc)) - { - app_state->strings_dirs = argv[i]; - } - else if ((!strcmp(argv[i], "--stringsfile")) && (++i < argc)) - { - app_state->strings_file = argv[i]; - } - else - { - // show usage, an invalid option was given. - show_usage_and_exit(); - } - } - - if (app_state->app_name.empty() - || (app_state->url.empty() && app_state->file.empty()) - || app_state->dest_dir.empty()) - { - show_usage_and_exit(); - } - - app_state->progress_value = 0.0; - app_state->activity_mode = FALSE; - app_state->failure = FALSE; - - translate_init(app_state->strings_dirs, app_state->strings_file); -} - -int main(int argc, char **argv) -{ - UpdaterAppState* app_state = new UpdaterAppState; - - parse_args_and_init(argc, argv, app_state); - - // Initialize logger, and rename old log file - gDirUtilp->initAppDirs("SecondLife"); - LLError::initForApplication - (gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "")); - std::string old_log_file = gDirUtilp->getExpandedFilename - (LL_PATH_LOGS, "updater.log.old"); - std::string log_file = - gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "updater.log"); - LLFile::rename(log_file, old_log_file); - LLError::logToFile(log_file); - - // initialize gthreads and gtk+ - if (!g_thread_supported()) - { - g_thread_init(NULL); - gdk_threads_init(); - } - - gtk_init(&argc, &argv); - - // create UI - updater_app_ui_init(app_state); - - //LL_INFOS() << "SAMPLE TRANSLATION IS: " << LLTrans::getString("LoginInProgress") << LL_ENDL; - - // create download thread - g_thread_create(GThreadFunc(worker_thread_cb), app_state, FALSE, NULL); - - gdk_threads_enter(); - gtk_main(); - gdk_threads_leave(); - - // Delete the file only if created from url download. - if(!app_state->url.empty() && !app_state->file.empty()) - { - if (gDirUtilp->fileExists(app_state->file)) - { - LLFile::remove(app_state->file); - } - } - - bool success = !app_state->failure; - delete app_state->image_dir_iter; - delete app_state; - return success ? 0 : 1; -} - -/***************************************************************************** -* Dummy LLTrans implementation (IQA-490) -*****************************************************************************/ -static LLTrans sStaticStrings; - -// lookup -std::string LLTrans::_getString(const std::string& key) const -{ - MessageMap::const_iterator found = mMessages.find(key); - if (found != mMessages.end()) - { - return found->second; - } - LL_WARNS("linux_updater") << "No message for key '" << key - << "' -- add to LLTrans::LLTrans() in linux_updater.cpp" - << LL_ENDL; - return key; -} - -// static lookup -std::string LLTrans::getString(const std::string& key) -{ - return sLLTransInstance._getString(key); -} - -// initialization -LLTrans::LLTrans() -{ - typedef std::pair<const char*, const char*> Pair; - static const Pair data[] = - { - Pair("UpdaterFailDownloadTitle", - "Failed to download update"), - Pair("UpdaterFailInstallTitle", - "Failed to install update"), - Pair("UpdaterFailStartTitle", - "Failed to start viewer"), - Pair("UpdaterFailUpdateDescriptive", - "An error occurred while updating Second Life. " - "Please download the latest version from www.secondlife.com."), - Pair("UpdaterNowInstalling", - "Installing Second Life..."), - Pair("UpdaterNowUpdating", - "Now updating Second Life..."), - Pair("UpdaterProgressBarText", - "Downloading update"), - Pair("UpdaterProgressBarTextWithEllipses", - "Downloading update..."), - Pair("UpdaterUpdatingDescriptive", - "Your Second Life Viewer is being updated to the latest release. " - "This may take some time, so please be patient."), - Pair("UpdaterWindowTitle", - "Second Life Update") - }; - - BOOST_FOREACH(Pair pair, data) - { - mMessages[pair.first] = pair.second; - } -} diff --git a/indra/llaudio/llaudiodecodemgr.h b/indra/llaudio/llaudiodecodemgr.h index 7a9b807d04..8228e20e8c 100755 --- a/indra/llaudio/llaudiodecodemgr.h +++ b/indra/llaudio/llaudiodecodemgr.h @@ -24,7 +24,7 @@ */ #ifndef LL_LLAUDIODECODEMGR_H -#define LL_LLAUDIODECODEMG_H +#define LL_LLAUDIODECODEMGR_H #include "stdtypes.h" diff --git a/indra/llcorehttp/README.Linden b/indra/llcorehttp/README.Linden index eb6ccab3bc..c3aaa9158d 100644 --- a/indra/llcorehttp/README.Linden +++ b/indra/llcorehttp/README.Linden @@ -529,6 +529,14 @@ HttpOperation::addAsReply: TRACE, ToReplyQueue, Handle: 086D3148 data = NULL; + There are now helper functions in llmessage/llcorehttputil.h to + assist with LLSD usage. requestPostWithLLSD(...) provides a + requestPost()-like interface that takes an LLSD object rather than + a BufferArray. And responseToLLSD(...) attempts to convert a + BufferArray received from a server into an LLSD object. You can + find examples in llmeshrepository.cpp, llinventorymodel.cpp, + llinventorymodelbackgroundfetch.cpp and lltexturefetch.cpp. + LLSD will often go hand-in-hand with BufferArray and data transport. But you can also do all the streaming I/O you'd expect of a std::iostream object: diff --git a/indra/llcorehttp/_httpinternal.h b/indra/llcorehttp/_httpinternal.h index f80d7f60f5..a2a60ca056 100755 --- a/indra/llcorehttp/_httpinternal.h +++ b/indra/llcorehttp/_httpinternal.h @@ -145,8 +145,11 @@ const int HTTP_CONNECTION_LIMIT_DEFAULT = 8; const int HTTP_CONNECTION_LIMIT_MIN = 1; const int HTTP_CONNECTION_LIMIT_MAX = 256; -// Miscellaneous defaults +// Pipelining limits const long HTTP_PIPELINING_DEFAULT = 0L; +const long HTTP_PIPELINING_MAX = 20L; + +// Miscellaneous defaults const bool HTTP_USE_RETRY_AFTER_DEFAULT = true; const long HTTP_THROTTLE_RATE_DEFAULT = 0L; diff --git a/indra/llcorehttp/_httplibcurl.cpp b/indra/llcorehttp/_httplibcurl.cpp index e56bc84174..81b44ab90b 100755 --- a/indra/llcorehttp/_httplibcurl.cpp +++ b/indra/llcorehttp/_httplibcurl.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2012&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2012-2013, Linden Research, Inc. + * Copyright (C) 2012-2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -33,6 +33,17 @@ #include "llhttpconstants.h" +namespace +{ + +// Error testing and reporting for libcurl status codes +void check_curl_multi_code(CURLMcode code); +void check_curl_multi_code(CURLMcode code, int curl_setopt_option); + +static const char * const LOG_CORE("CoreHttp"); + +} // end anonymous namespace + namespace LLCore { @@ -40,16 +51,18 @@ namespace LLCore HttpLibcurl::HttpLibcurl(HttpService * service) : mService(service), + mHandleCache(), mPolicyCount(0), mMultiHandles(NULL), - mActiveHandles(NULL) + mActiveHandles(NULL), + mDirtyPolicy(NULL) {} HttpLibcurl::~HttpLibcurl() { shutdown(); - + mService = NULL; } @@ -81,6 +94,9 @@ void HttpLibcurl::shutdown() delete [] mActiveHandles; mActiveHandles = NULL; + + delete [] mDirtyPolicy; + mDirtyPolicy = NULL; } mPolicyCount = 0; @@ -95,11 +111,18 @@ void HttpLibcurl::start(int policy_count) mPolicyCount = policy_count; mMultiHandles = new CURLM * [mPolicyCount]; mActiveHandles = new int [mPolicyCount]; + mDirtyPolicy = new bool [mPolicyCount]; for (int policy_class(0); policy_class < mPolicyCount; ++policy_class) { - mMultiHandles[policy_class] = curl_multi_init(); + if (NULL == (mMultiHandles[policy_class] = curl_multi_init())) + { + LL_ERRS(LOG_CORE) << "Failed to allocate multi handle in libcurl." + << LL_ENDL; + } mActiveHandles[policy_class] = 0; + mDirtyPolicy[policy_class] = false; + policyUpdated(policy_class); } } @@ -117,8 +140,19 @@ HttpService::ELoopSpeed HttpLibcurl::processTransport() // Give libcurl some cycles to do I/O & callbacks for (int policy_class(0); policy_class < mPolicyCount; ++policy_class) { - if (! mActiveHandles[policy_class] || ! mMultiHandles[policy_class]) + if (! mMultiHandles[policy_class]) + { + // No handle, nothing to do. + continue; + } + if (! mActiveHandles[policy_class]) { + // If we've gone quiet and there's a dirty update, apply it, + // otherwise we're done. + if (mDirtyPolicy[policy_class]) + { + policyUpdated(policy_class); + } continue; } @@ -153,9 +187,9 @@ HttpService::ELoopSpeed HttpLibcurl::processTransport() } else { - LL_WARNS_ONCE("CoreHttp") << "Unexpected message from libcurl. Msg code: " - << msg->msg - << LL_ENDL; + LL_WARNS_ONCE(LOG_CORE) << "Unexpected message from libcurl. Msg code: " + << msg->msg + << LL_ENDL; } msgs_in_queue = 0; } @@ -184,23 +218,28 @@ void HttpLibcurl::addOp(HttpOpRequest * op) } // Make the request live - curl_multi_add_handle(mMultiHandles[op->mReqPolicy], op->mCurlHandle); + CURLMcode code; + code = curl_multi_add_handle(mMultiHandles[op->mReqPolicy], op->mCurlHandle); + if (CURLM_OK != code) + { + // *TODO: Better cleanup and recovery but not much we can do here. + check_curl_multi_code(code); + return; + } op->mCurlActive = true; + mActiveOps.insert(op); + ++mActiveHandles[op->mReqPolicy]; if (op->mTracing > HTTP_TRACE_OFF) { HttpPolicy & policy(mService->getPolicy()); - LL_INFOS("CoreHttp") << "TRACE, ToActiveQueue, Handle: " - << static_cast<HttpHandle>(op) - << ", Actives: " << mActiveOps.size() - << ", Readies: " << policy.getReadyCount(op->mReqPolicy) - << LL_ENDL; + LL_INFOS(LOG_CORE) << "TRACE, ToActiveQueue, Handle: " + << static_cast<HttpHandle>(op) + << ", Actives: " << mActiveOps.size() + << ", Readies: " << policy.getReadyCount(op->mReqPolicy) + << LL_ENDL; } - - // On success, make operation active - mActiveOps.insert(op); - ++mActiveHandles[op->mReqPolicy]; } @@ -241,16 +280,16 @@ void HttpLibcurl::cancelRequest(HttpOpRequest * op) // Detach from multi and recycle handle curl_multi_remove_handle(mMultiHandles[op->mReqPolicy], op->mCurlHandle); - curl_easy_cleanup(op->mCurlHandle); + mHandleCache.freeHandle(op->mCurlHandle); op->mCurlHandle = NULL; // Tracing if (op->mTracing > HTTP_TRACE_OFF) { - LL_INFOS("CoreHttp") << "TRACE, RequestCanceled, Handle: " - << static_cast<HttpHandle>(op) - << ", Status: " << op->mStatus.toTerseString() - << LL_ENDL; + LL_INFOS(LOG_CORE) << "TRACE, RequestCanceled, Handle: " + << static_cast<HttpHandle>(op) + << ", Status: " << op->mStatus.toTerseString() + << LL_ENDL; } // Cancel op and deliver for notification @@ -267,18 +306,18 @@ bool HttpLibcurl::completeRequest(CURLM * multi_handle, CURL * handle, CURLcode if (handle != op->mCurlHandle || ! op->mCurlActive) { - LL_WARNS("CoreHttp") << "libcurl handle and HttpOpRequest handle in disagreement or inactive request." - << " Handle: " << static_cast<HttpHandle>(handle) - << LL_ENDL; + LL_WARNS(LOG_CORE) << "libcurl handle and HttpOpRequest handle in disagreement or inactive request." + << " Handle: " << static_cast<HttpHandle>(handle) + << LL_ENDL; return false; } active_set_t::iterator it(mActiveOps.find(op)); if (mActiveOps.end() == it) { - LL_WARNS("CoreHttp") << "libcurl completion for request not on active list. Continuing." - << " Handle: " << static_cast<HttpHandle>(handle) - << LL_ENDL; + LL_WARNS(LOG_CORE) << "libcurl completion for request not on active list. Continuing." + << " Handle: " << static_cast<HttpHandle>(handle) + << LL_ENDL; return false; } @@ -309,25 +348,25 @@ bool HttpLibcurl::completeRequest(CURLM * multi_handle, CURL * handle, CURLcode } else { - LL_WARNS("CoreHttp") << "Invalid HTTP response code (" - << http_status << ") received from server." - << LL_ENDL; + LL_WARNS(LOG_CORE) << "Invalid HTTP response code (" + << http_status << ") received from server." + << LL_ENDL; op->mStatus = HttpStatus(HttpStatus::LLCORE, HE_INVALID_HTTP_STATUS); } } // Detach from multi and recycle handle curl_multi_remove_handle(multi_handle, handle); - curl_easy_cleanup(handle); + mHandleCache.freeHandle(op->mCurlHandle); op->mCurlHandle = NULL; // Tracing if (op->mTracing > HTTP_TRACE_OFF) { - LL_INFOS("CoreHttp") << "TRACE, RequestComplete, Handle: " - << static_cast<HttpHandle>(op) - << ", Status: " << op->mStatus.toTerseString() - << LL_ENDL; + LL_INFOS(LOG_CORE) << "TRACE, RequestComplete, Handle: " + << static_cast<HttpHandle>(op) + << ", Status: " << op->mStatus.toTerseString() + << LL_ENDL; } // Dispatch to next stage @@ -351,6 +390,164 @@ int HttpLibcurl::getActiveCountInClass(int policy_class) const return mActiveHandles ? mActiveHandles[policy_class] : 0; } +void HttpLibcurl::policyUpdated(int policy_class) +{ + if (policy_class < 0 || policy_class >= mPolicyCount || ! mMultiHandles) + { + return; + } + + HttpPolicy & policy(mService->getPolicy()); + + if (! mActiveHandles[policy_class]) + { + // Clear to set options. As of libcurl 7.37.0, if a pipelining + // multi handle has active requests and you try to set the + // multi handle to non-pipelining, the library gets very angry + // and goes off the rails corrupting memory. A clue that you're + // about to crash is that you'll get a missing server response + // error (curl code 9). So, if options are to be set, we let + // the multi handle run out of requests, then set options, and + // re-enable request processing. + // + // All of this stall mechanism exists for this reason. If + // libcurl becomes more resilient later, it should be possible + // to remove all of this. The connection limit settings are fine, + // it's just that pipelined-to-non-pipelined transition that + // is fatal at the moment. + + HttpPolicyClass & options(policy.getClassOptions(policy_class)); + CURLM * multi_handle(mMultiHandles[policy_class]); + CURLMcode code; + + // Enable policy if stalled + policy.stallPolicy(policy_class, false); + mDirtyPolicy[policy_class] = false; + + if (options.mPipelining > 1) + { + // We'll try to do pipelining on this multihandle + code = curl_multi_setopt(multi_handle, + CURLMOPT_PIPELINING, + 1L); + check_curl_multi_code(code, CURLMOPT_PIPELINING); + code = curl_multi_setopt(multi_handle, + CURLMOPT_MAX_PIPELINE_LENGTH, + long(options.mPipelining)); + check_curl_multi_code(code, CURLMOPT_MAX_PIPELINE_LENGTH); + code = curl_multi_setopt(multi_handle, + CURLMOPT_MAX_HOST_CONNECTIONS, + long(options.mPerHostConnectionLimit)); + check_curl_multi_code(code, CURLMOPT_MAX_HOST_CONNECTIONS); + code = curl_multi_setopt(multi_handle, + CURLMOPT_MAX_TOTAL_CONNECTIONS, + long(options.mConnectionLimit)); + check_curl_multi_code(code, CURLMOPT_MAX_TOTAL_CONNECTIONS); + } + else + { + code = curl_multi_setopt(multi_handle, + CURLMOPT_PIPELINING, + 0L); + check_curl_multi_code(code, CURLMOPT_PIPELINING); + code = curl_multi_setopt(multi_handle, + CURLMOPT_MAX_HOST_CONNECTIONS, + 0L); + check_curl_multi_code(code, CURLMOPT_MAX_HOST_CONNECTIONS); + code = curl_multi_setopt(multi_handle, + CURLMOPT_MAX_TOTAL_CONNECTIONS, + long(options.mConnectionLimit)); + check_curl_multi_code(code, CURLMOPT_MAX_TOTAL_CONNECTIONS); + } + } + else if (! mDirtyPolicy[policy_class]) + { + // Mark policy dirty and request a stall in the policy. + // When policy goes idle, we'll re-invoke this method + // and perform the change. Don't allow this thread to + // sleep while we're waiting for quiescence, we'll just + // stop processing. + mDirtyPolicy[policy_class] = true; + policy.stallPolicy(policy_class, true); + } +} + +// --------------------------------------- +// HttpLibcurl::HandleCache +// --------------------------------------- + +HttpLibcurl::HandleCache::HandleCache() + : mHandleTemplate(NULL) +{ + mCache.reserve(50); +} + + +HttpLibcurl::HandleCache::~HandleCache() +{ + if (mHandleTemplate) + { + curl_easy_cleanup(mHandleTemplate); + mHandleTemplate = NULL; + } + + for (handle_cache_t::iterator it(mCache.begin()); mCache.end() != it; ++it) + { + curl_easy_cleanup(*it); + } + mCache.clear(); +} + + +CURL * HttpLibcurl::HandleCache::getHandle() +{ + CURL * ret(NULL); + + if (! mCache.empty()) + { + // Fastest path to handle + ret = mCache.back(); + mCache.pop_back(); + } + else if (mHandleTemplate) + { + // Still fast path + ret = curl_easy_duphandle(mHandleTemplate); + } + else + { + // When all else fails + ret = curl_easy_init(); + } + + return ret; +} + + +void HttpLibcurl::HandleCache::freeHandle(CURL * handle) +{ + if (! handle) + { + return; + } + + curl_easy_reset(handle); + if (! mHandleTemplate) + { + // Save the first freed handle as a template. + mHandleTemplate = handle; + } + else + { + // Otherwise add it to the cache + if (mCache.size() >= mCache.capacity()) + { + mCache.reserve(mCache.capacity() + 50); + } + mCache.push_back(handle); + } +} + // --------------------------------------- // Free functions @@ -376,3 +573,29 @@ struct curl_slist * append_headers_to_slist(const HttpHeaders * headers, struct } // end namespace LLCore + + +namespace +{ + +void check_curl_multi_code(CURLMcode code, int curl_setopt_option) +{ + if (CURLM_OK != code) + { + LL_WARNS(LOG_CORE) << "libcurl multi error detected: " << curl_multi_strerror(code) + << ", curl_multi_setopt option: " << curl_setopt_option + << LL_ENDL; + } +} + + +void check_curl_multi_code(CURLMcode code) +{ + if (CURLM_OK != code) + { + LL_WARNS(LOG_CORE) << "libcurl multi error detected: " << curl_multi_strerror(code) + << LL_ENDL; + } +} + +} // end anonymous namespace diff --git a/indra/llcorehttp/_httplibcurl.h b/indra/llcorehttp/_httplibcurl.h index 67f98dd4f0..ffc24c63a8 100755 --- a/indra/llcorehttp/_httplibcurl.h +++ b/indra/llcorehttp/_httplibcurl.h @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2012&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2012-2013, Linden Research, Inc. + * Copyright (C) 2012-2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -116,6 +116,31 @@ public: /// Threading: called by worker thread. bool cancel(HttpHandle handle); + /// Informs transport that a particular policy class has had + /// options changed and so should effect any transport state + /// change necessary to effect those changes. Used mainly for + /// initialization and dynamic option setting. + /// + /// Threading: called by worker thread. + void policyUpdated(int policy_class); + + /// Allocate a curl handle for caller. May be freed using + /// either the freeHandle() method or calling curl_easy_cleanup() + /// directly. + /// + /// @return Libcurl handle (CURL *) or NULL on allocation + /// problem. Handle will be in curl_easy_reset() + /// condition. + /// + /// Threading: callable by worker thread. + /// + /// Deprecation: Expect this to go away after _httpoprequest is + /// refactored bringing code into this class. + CURL * getHandle() + { + return mHandleCache.getHandle(); + } + protected: /// Invoked when libcurl has indicated a request has been processed /// to completion and we need to move the request to a new state. @@ -127,13 +152,68 @@ protected: protected: typedef std::set<HttpOpRequest *> active_set_t; + + /// Simple request handle cache for libcurl. + /// + /// Handle creation is somewhat slow and chunky in libcurl and there's + /// a pretty good speedup to be had from handle re-use. So, a simple + /// vector is kept of 'freed' handles to be reused as needed. When + /// that is empty, the first freed handle is kept as a template for + /// handle duplication. This is still faster than creation from nothing. + /// And when that fails, we init fresh from curl_easy_init(). + /// + /// Handles allocated with getHandle() may be freed with either + /// freeHandle() or curl_easy_cleanup(). Choice may be dictated + /// by thread constraints. + /// + /// Threading: Single-threaded. May only be used by a single thread, + /// typically the worker thread. If freeing requests' handles in an + /// unknown threading context, use curl_easy_cleanup() for safety. + + class HandleCache + { + public: + HandleCache(); + ~HandleCache(); + + private: + HandleCache(const HandleCache &); // Not defined + void operator=(const HandleCache &); // Not defined + + public: + /// Allocate a curl handle for caller. May be freed using + /// either the freeHandle() method or calling curl_easy_cleanup() + /// directly. + /// + /// @return Libcurl handle (CURL *) or NULL on allocation + /// problem. + /// + /// Threading: Single-thread (worker) only. + CURL * getHandle(); + + /// Free a libcurl handle acquired by whatever means. Thread + /// safety is left to the caller. + /// + /// Threading: Single-thread (worker) only. + void freeHandle(CURL * handle); + + protected: + typedef std::vector<CURL *> handle_cache_t; + + protected: + CURL * mHandleTemplate; // Template for duplicating new handles + handle_cache_t mCache; // Cache of old handles + }; // end class HandleCache protected: - HttpService * mService; // Simple reference, not owner + HttpService * mService; // Simple reference, not owner + HandleCache mHandleCache; // Handle allocator, owner active_set_t mActiveOps; int mPolicyCount; - CURLM ** mMultiHandles; // One handle per policy class - int * mActiveHandles; // Active count per policy class + CURLM ** mMultiHandles; // One handle per policy class + int * mActiveHandles; // Active count per policy class + bool * mDirtyPolicy; // Dirty policy update waiting for stall (per pc) + }; // end class HttpLibcurl } // end namespace LLCore diff --git a/indra/llcorehttp/_httpoperation.cpp b/indra/llcorehttp/_httpoperation.cpp index 5bb0654652..fefe561f80 100755 --- a/indra/llcorehttp/_httpoperation.cpp +++ b/indra/llcorehttp/_httpoperation.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2012&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2012-2013, Linden Research, Inc. + * Copyright (C) 2012-2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -38,6 +38,14 @@ #include "lltimer.h" +namespace +{ + +static const char * const LOG_CORE("CoreHttp"); + +} // end anonymous namespace + + namespace LLCore { @@ -94,8 +102,8 @@ void HttpOperation::stageFromRequest(HttpService *) // Default implementation should never be called. This // indicates an operation making a transition that isn't // defined. - LL_ERRS("CoreHttp") << "Default stageFromRequest method may not be called." - << LL_ENDL; + LL_ERRS(LOG_CORE) << "Default stageFromRequest method may not be called." + << LL_ENDL; } @@ -104,8 +112,8 @@ void HttpOperation::stageFromReady(HttpService *) // Default implementation should never be called. This // indicates an operation making a transition that isn't // defined. - LL_ERRS("CoreHttp") << "Default stageFromReady method may not be called." - << LL_ENDL; + LL_ERRS(LOG_CORE) << "Default stageFromReady method may not be called." + << LL_ENDL; } @@ -114,8 +122,8 @@ void HttpOperation::stageFromActive(HttpService *) // Default implementation should never be called. This // indicates an operation making a transition that isn't // defined. - LL_ERRS("CoreHttp") << "Default stageFromActive method may not be called." - << LL_ENDL; + LL_ERRS(LOG_CORE) << "Default stageFromActive method may not be called." + << LL_ENDL; } @@ -145,9 +153,9 @@ void HttpOperation::addAsReply() { if (mTracing > HTTP_TRACE_OFF) { - LL_INFOS("CoreHttp") << "TRACE, ToReplyQueue, Handle: " - << static_cast<HttpHandle>(this) - << LL_ENDL; + LL_INFOS(LOG_CORE) << "TRACE, ToReplyQueue, Handle: " + << static_cast<HttpHandle>(this) + << LL_ENDL; } if (mReplyQueue) diff --git a/indra/llcorehttp/_httpoprequest.cpp b/indra/llcorehttp/_httpoprequest.cpp index 43dd069bc6..fbbb1614fb 100755 --- a/indra/llcorehttp/_httpoprequest.cpp +++ b/indra/llcorehttp/_httpoprequest.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2012&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2012-2013, Linden Research, Inc. + * Copyright (C) 2012-2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -47,6 +47,19 @@ #include "llhttpconstants.h" #include "llproxy.h" +// *DEBUG: "[curl:bugs] #1420" problem and testing. +// +// A pipelining problem, https://sourceforge.net/p/curl/bugs/1420/, +// was a source of Core_9 failures. Code related to this can be +// identified and tested by: +// * Looking for '[curl:bugs]' strings in source and following +// instructions there. +// * Set 'QAModeHttpTrace' to 2 or 3 in settings.xml and look for +// 'timed out' events in the log. +// * Enable the HttpRangeRequestsDisable debug setting which causes +// full asset fetches. These slow the pipelines down a bit. +// + namespace { @@ -94,6 +107,8 @@ void os_strlower(char * str); void check_curl_easy_code(CURLcode code); void check_curl_easy_code(CURLcode code, int curl_setopt_option); +static const char * const LOG_CORE("CoreHttp"); + } // end anonymous namespace @@ -155,6 +170,8 @@ HttpOpRequest::~HttpOpRequest() if (mCurlHandle) { + // Uncertain of thread context so free using + // safest method. curl_easy_cleanup(mCurlHandle); mCurlHandle = NULL; } @@ -376,6 +393,7 @@ void HttpOpRequest::setupCommon(HttpRequest::policy_t policy_id, // Junk may be left around from a failed request and that // needs to be cleaned out. // +// *TODO: Move this to _httplibcurl where it belongs. HttpStatus HttpOpRequest::prepareRequest(HttpService * service) { CURLcode code; @@ -409,17 +427,19 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service) // *FIXME: better error handling later HttpStatus status; - // Get global policy options - HttpPolicyGlobal & policy(service->getPolicy().getGlobalOptions()); + // Get global and class policy options + HttpPolicyGlobal & gpolicy(service->getPolicy().getGlobalOptions()); + HttpPolicyClass & cpolicy(service->getPolicy().getClassOptions(mReqPolicy)); - mCurlHandle = LLCurl::createStandardCurlHandle(); + mCurlHandle = service->getTransport().getHandle(); if (! mCurlHandle) { // We're in trouble. We'll continue but it won't go well. - LL_WARNS("CoreHttp") << "Failed to allocate libcurl easy handle. Continuing." - << LL_ENDL; + LL_WARNS(LOG_CORE) << "Failed to allocate libcurl easy handle. Continuing." + << LL_ENDL; return HttpStatus(HttpStatus::LLCORE, HE_BAD_ALLOC); } + code = curl_easy_setopt(mCurlHandle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); check_curl_easy_code(code, CURLOPT_IPRESOLVE); code = curl_easy_setopt(mCurlHandle, CURLOPT_NOSIGNAL, 1); @@ -460,30 +480,30 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service) code = curl_easy_setopt(mCurlHandle, CURLOPT_SSL_VERIFYHOST, 0); check_curl_easy_code(code, CURLOPT_SSL_VERIFYHOST); - if (policy.mUseLLProxy) + if (gpolicy.mUseLLProxy) { // Use the viewer-based thread-safe API which has a // fast/safe check for proxy enable. Would like to // encapsulate this someway... LLProxy::getInstance()->applyProxySettings(mCurlHandle); } - else if (policy.mHttpProxy.size()) + else if (gpolicy.mHttpProxy.size()) { // *TODO: This is fine for now but get fuller socks5/ // authentication thing going later.... - code = curl_easy_setopt(mCurlHandle, CURLOPT_PROXY, policy.mHttpProxy.c_str()); + code = curl_easy_setopt(mCurlHandle, CURLOPT_PROXY, gpolicy.mHttpProxy.c_str()); check_curl_easy_code(code, CURLOPT_PROXY); code = curl_easy_setopt(mCurlHandle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); check_curl_easy_code(code, CURLOPT_PROXYTYPE); } - if (policy.mCAPath.size()) + if (gpolicy.mCAPath.size()) { - code = curl_easy_setopt(mCurlHandle, CURLOPT_CAPATH, policy.mCAPath.c_str()); + code = curl_easy_setopt(mCurlHandle, CURLOPT_CAPATH, gpolicy.mCAPath.c_str()); check_curl_easy_code(code, CURLOPT_CAPATH); } - if (policy.mCAFile.size()) + if (gpolicy.mCAFile.size()) { - code = curl_easy_setopt(mCurlHandle, CURLOPT_CAINFO, policy.mCAFile.c_str()); + code = curl_easy_setopt(mCurlHandle, CURLOPT_CAINFO, gpolicy.mCAFile.c_str()); check_curl_easy_code(code, CURLOPT_CAINFO); } @@ -538,9 +558,9 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service) break; default: - LL_ERRS("CoreHttp") << "Invalid HTTP method in request: " - << int(mReqMethod) << ". Can't recover." - << LL_ENDL; + LL_ERRS(LOG_CORE) << "Invalid HTTP method in request: " + << int(mReqMethod) << ". Can't recover." + << LL_ENDL; break; } @@ -592,6 +612,22 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service) { xfer_timeout = timeout; } + if (cpolicy.mPipelining > 1L) + { + // Pipelining affects both connection and transfer timeout values. + // Requests that are added to a pipeling immediately have completed + // their connection so the connection delay tends to be less than + // the non-pipelined value. Transfers are the opposite. Transfer + // timeout starts once the connection is established and completion + // can be delayed due to the pipelined requests ahead. So, it's + // a handwave but bump the transfer timeout up by the pipelining + // depth to give some room. + // + // *TODO: Find a better scheme than timeouts to guarantee liveness. + xfer_timeout *= cpolicy.mPipelining; + } + // *DEBUG: Enable following override for timeout handling and "[curl:bugs] #1420" tests + // xfer_timeout = 1L; code = curl_easy_setopt(mCurlHandle, CURLOPT_TIMEOUT, xfer_timeout); check_curl_easy_code(code, CURLOPT_TIMEOUT); code = curl_easy_setopt(mCurlHandle, CURLOPT_CONNECTTIMEOUT, timeout); @@ -652,8 +688,8 @@ size_t HttpOpRequest::readCallback(void * data, size_t size, size_t nmemb, void { // Warn but continue if the read position moves beyond end-of-body // for some reason. - LL_WARNS("CoreHttp") << "Request body position beyond body size. Truncating request body." - << LL_ENDL; + LL_WARNS(LOG_CORE) << "Request body position beyond body size. Truncating request body." + << LL_ENDL; } return 0; } @@ -790,10 +826,10 @@ size_t HttpOpRequest::headerCallback(void * data, size_t size, size_t nmemb, voi else { // Ignore the unparsable. - LL_INFOS_ONCE("CoreHttp") << "Problem parsing odd Content-Range header: '" - << std::string(hdr_data, wanted_hdr_size) - << "'. Ignoring." - << LL_ENDL; + LL_INFOS_ONCE(LOG_CORE) << "Problem parsing odd Content-Range header: '" + << std::string(hdr_data, wanted_hdr_size) + << "'. Ignoring." + << LL_ENDL; } } @@ -895,11 +931,11 @@ int HttpOpRequest::debugCallback(CURL * handle, curl_infotype info, char * buffe if (logit) { - LL_INFOS("CoreHttp") << "TRACE, LibcurlDebug, Handle: " - << static_cast<HttpHandle>(op) - << ", Type: " << tag - << ", Data: " << safe_line - << LL_ENDL; + LL_INFOS(LOG_CORE) << "TRACE, LibcurlDebug, Handle: " + << static_cast<HttpHandle>(op) + << ", Type: " << tag + << ", Data: " << safe_line + << LL_ENDL; } return 0; @@ -1094,9 +1130,9 @@ void check_curl_easy_code(CURLcode code, int curl_setopt_option) // // linux appears to throw a curl error once per session for a bad initialization // at a pretty random time (when enabling cookies). - LL_WARNS("CoreHttp") << "libcurl error detected: " << curl_easy_strerror(code) - << ", curl_easy_setopt option: " << curl_setopt_option - << LL_ENDL; + LL_WARNS(LOG_CORE) << "libcurl error detected: " << curl_easy_strerror(code) + << ", curl_easy_setopt option: " << curl_setopt_option + << LL_ENDL; } } @@ -1109,8 +1145,8 @@ void check_curl_easy_code(CURLcode code) // // linux appears to throw a curl error once per session for a bad initialization // at a pretty random time (when enabling cookies). - LL_WARNS("CoreHttp") << "libcurl error detected: " << curl_easy_strerror(code) - << LL_ENDL; + LL_WARNS(LOG_CORE) << "libcurl error detected: " << curl_easy_strerror(code) + << LL_ENDL; } } diff --git a/indra/llcorehttp/_httppolicy.cpp b/indra/llcorehttp/_httppolicy.cpp index fd5a93e192..e5d6321401 100755 --- a/indra/llcorehttp/_httppolicy.cpp +++ b/indra/llcorehttp/_httppolicy.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2012&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2012-2013, Linden Research, Inc. + * Copyright (C) 2012-2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -35,6 +35,13 @@ #include "lltimer.h" +namespace +{ + +static const char * const LOG_CORE("CoreHttp"); + +} // end anonymous namespace + namespace LLCore { @@ -51,7 +58,8 @@ public: ClassState() : mThrottleEnd(0), mThrottleLeft(0L), - mRequestCount(0L) + mRequestCount(0L), + mStallStaging(false) {} HttpReadyQueue mReadyQueue; @@ -61,6 +69,7 @@ public: HttpTime mThrottleEnd; long mThrottleLeft; long mRequestCount; + bool mStallStaging; }; @@ -128,7 +137,8 @@ void HttpPolicy::shutdown() void HttpPolicy::start() -{} +{ +} void HttpPolicy::addOp(HttpOpRequest * op) @@ -170,19 +180,19 @@ void HttpPolicy::retryOp(HttpOpRequest * op) { ++op->mPolicy503Retries; } - LL_DEBUGS("CoreHttp") << "HTTP request " << static_cast<HttpHandle>(op) - << " retry " << op->mPolicyRetries - << " scheduled in " << (delta / HttpTime(1000)) - << " mS (" << (external_delta ? "external" : "internal") - << "). Status: " << op->mStatus.toTerseString() - << LL_ENDL; + LL_DEBUGS(LOG_CORE) << "HTTP request " << static_cast<HttpHandle>(op) + << " retry " << op->mPolicyRetries + << " scheduled in " << (delta / HttpTime(1000)) + << " mS (" << (external_delta ? "external" : "internal") + << "). Status: " << op->mStatus.toTerseString() + << LL_ENDL; if (op->mTracing > HTTP_TRACE_OFF) { - LL_INFOS("CoreHttp") << "TRACE, ToRetryQueue, Handle: " - << static_cast<HttpHandle>(op) - << ", Delta: " << (delta / HttpTime(1000)) - << ", Retries: " << op->mPolicyRetries - << LL_ENDL; + LL_INFOS(LOG_CORE) << "TRACE, ToRetryQueue, Handle: " + << static_cast<HttpHandle>(op) + << ", Delta: " << (delta / HttpTime(1000)) + << ", Retries: " << op->mPolicyRetries + << LL_ENDL; } mClasses[policy_class]->mRetryQueue.push(op); } @@ -218,6 +228,15 @@ HttpService::ELoopSpeed HttpPolicy::processReadyQueue() HttpRetryQueue & retryq(state.mRetryQueue); HttpReadyQueue & readyq(state.mReadyQueue); + if (state.mStallStaging) + { + // Stalling but don't sleep. Need to complete operations + // and get back to servicing queues. Do this test before + // the retryq/readyq test or you'll get stalls until you + // click a setting or an asset request comes in. + result = HttpService::NORMAL; + continue; + } if (retryq.empty() && readyq.empty()) { continue; @@ -234,7 +253,11 @@ HttpService::ELoopSpeed HttpPolicy::processReadyQueue() } int active(transport.getActiveCountInClass(policy_class)); - int needed(state.mOptions.mConnectionLimit - active); // Expect negatives here + int active_limit(state.mOptions.mPipelining > 1L + ? (state.mOptions.mPerHostConnectionLimit + * state.mOptions.mPipelining) + : state.mOptions.mConnectionLimit); + int needed(active_limit - active); // Expect negatives here if (needed > 0) { @@ -257,9 +280,9 @@ HttpService::ELoopSpeed HttpPolicy::processReadyQueue() if (now >= state.mThrottleEnd) { // Throttle expired, move to next window - LL_DEBUGS("CoreHttp") << "Throttle expired with " << state.mThrottleLeft - << " requests to go and " << state.mRequestCount - << " requests issued." << LL_ENDL; + LL_DEBUGS(LOG_CORE) << "Throttle expired with " << state.mThrottleLeft + << " requests to go and " << state.mRequestCount + << " requests issued." << LL_ENDL; state.mThrottleLeft = state.mOptions.mThrottleRate; state.mThrottleEnd = now + HttpTime(1000000); } @@ -286,9 +309,9 @@ HttpService::ELoopSpeed HttpPolicy::processReadyQueue() if (now >= state.mThrottleEnd) { // Throttle expired, move to next window - LL_DEBUGS("CoreHttp") << "Throttle expired with " << state.mThrottleLeft - << " requests to go and " << state.mRequestCount - << " requests issued." << LL_ENDL; + LL_DEBUGS(LOG_CORE) << "Throttle expired with " << state.mThrottleLeft + << " requests to go and " << state.mRequestCount + << " requests issued." << LL_ENDL; state.mThrottleLeft = state.mOptions.mThrottleRate; state.mThrottleEnd = now + HttpTime(1000000); } @@ -391,6 +414,18 @@ bool HttpPolicy::stageAfterCompletion(HttpOpRequest * op) // Retry or finalize if (! op->mStatus) { + // *DEBUG: For "[curl:bugs] #1420" tests. This will interfere + // with unit tests due to allocation retention by logging code. + // But you won't be checking this in enabled. +#if 0 + if (op->mStatus == HttpStatus(HttpStatus::EXT_CURL_EASY, CURLE_OPERATION_TIMEDOUT)) + { + LL_WARNS(LOG_CORE) << "HTTP request " << static_cast<HttpHandle>(op) + << " timed out." + << LL_ENDL; + } +#endif + // If this failed, we might want to retry. if (op->mPolicyRetries < op->mPolicyRetryLimit && op->mStatus.isRetryable()) { @@ -403,17 +438,17 @@ bool HttpPolicy::stageAfterCompletion(HttpOpRequest * op) // This op is done, finalize it delivering it to the reply queue... if (! op->mStatus) { - LL_WARNS("CoreHttp") << "HTTP request " << static_cast<HttpHandle>(op) - << " failed after " << op->mPolicyRetries - << " retries. Reason: " << op->mStatus.toString() - << " (" << op->mStatus.toTerseString() << ")" - << LL_ENDL; + LL_WARNS(LOG_CORE) << "HTTP request " << static_cast<HttpHandle>(op) + << " failed after " << op->mPolicyRetries + << " retries. Reason: " << op->mStatus.toString() + << " (" << op->mStatus.toTerseString() << ")" + << LL_ENDL; } else if (op->mPolicyRetries) { - LL_DEBUGS("CoreHttp") << "HTTP request " << static_cast<HttpHandle>(op) - << " succeeded on retry " << op->mPolicyRetries << "." - << LL_ENDL; + LL_DEBUGS(LOG_CORE) << "HTTP request " << static_cast<HttpHandle>(op) + << " succeeded on retry " << op->mPolicyRetries << "." + << LL_ENDL; } op->stageFromActive(mService); @@ -441,4 +476,17 @@ int HttpPolicy::getReadyCount(HttpRequest::policy_t policy_class) const } +bool HttpPolicy::stallPolicy(HttpRequest::policy_t policy_class, bool stall) +{ + bool ret(false); + + if (policy_class < mClasses.size()) + { + ret = mClasses[policy_class]->mStallStaging; + mClasses[policy_class]->mStallStaging = stall; + } + return ret; +} + + } // end namespace LLCore diff --git a/indra/llcorehttp/_httppolicy.h b/indra/llcorehttp/_httppolicy.h index bf1aa74267..11cd89bbd1 100755 --- a/indra/llcorehttp/_httppolicy.h +++ b/indra/llcorehttp/_httppolicy.h @@ -158,6 +158,14 @@ public: /// Threading: called by worker thread int getReadyCount(HttpRequest::policy_t policy_class) const; + /// Stall (or unstall) a policy class preventing requests from + /// transitioning to an active state. Used to allow an HTTP + /// request policy to empty prior to changing settings or state + /// that isn't tolerant of changes when work is outstanding. + /// + /// Threading: called by worker thread + bool stallPolicy(HttpRequest::policy_t policy_class, bool stall); + protected: struct ClassState; typedef std::vector<ClassState *> class_list_t; diff --git a/indra/llcorehttp/_httppolicyclass.cpp b/indra/llcorehttp/_httppolicyclass.cpp index f34a8e9f1e..2c0f650155 100755 --- a/indra/llcorehttp/_httppolicyclass.cpp +++ b/indra/llcorehttp/_httppolicyclass.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2012&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2012-2013, Linden Research, Inc. + * Copyright (C) 2012-2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -78,8 +78,8 @@ HttpStatus HttpPolicyClass::set(HttpRequest::EPolicyOption opt, long value) mPerHostConnectionLimit = llclamp(value, long(HTTP_CONNECTION_LIMIT_MIN), mConnectionLimit); break; - case HttpRequest::PO_ENABLE_PIPELINING: - mPipelining = llclamp(value, 0L, 1L); + case HttpRequest::PO_PIPELINING_DEPTH: + mPipelining = llclamp(value, 0L, HTTP_PIPELINING_MAX); break; case HttpRequest::PO_THROTTLE_RATE: @@ -106,7 +106,7 @@ HttpStatus HttpPolicyClass::get(HttpRequest::EPolicyOption opt, long * value) co *value = mPerHostConnectionLimit; break; - case HttpRequest::PO_ENABLE_PIPELINING: + case HttpRequest::PO_PIPELINING_DEPTH: *value = mPipelining; break; diff --git a/indra/llcorehttp/_httpservice.cpp b/indra/llcorehttp/_httpservice.cpp index c94249dc2d..c673e1be1d 100755 --- a/indra/llcorehttp/_httpservice.cpp +++ b/indra/llcorehttp/_httpservice.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2012&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2012-2013, Linden Research, Inc. + * Copyright (C) 2012-2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -40,6 +40,14 @@ #include "llthread.h" +namespace +{ + +static const char * const LOG_CORE("CoreHttp"); + +} // end anonymous namespace + + namespace LLCore { @@ -87,8 +95,8 @@ HttpService::~HttpService() // Failed to join, expect problems ahead so do a hard termination. mThread->cancel(); - LL_WARNS("CoreHttp") << "Destroying HttpService with running thread. Expect problems." - << LL_ENDL; + LL_WARNS(LOG_CORE) << "Destroying HttpService with running thread. Expect problems." + << LL_ENDL; } } } @@ -328,9 +336,9 @@ HttpService::ELoopSpeed HttpService::processRequestQueue(ELoopSpeed loop) if (op->mTracing > HTTP_TRACE_OFF) { - LL_INFOS("CoreHttp") << "TRACE, FromRequestQueue, Handle: " - << static_cast<HttpHandle>(op) - << LL_ENDL; + LL_INFOS(LOG_CORE) << "TRACE, FromRequestQueue, Handle: " + << static_cast<HttpHandle>(op) + << LL_ENDL; } // Stage @@ -437,9 +445,13 @@ HttpStatus HttpService::setPolicyOption(HttpRequest::EPolicyOption opt, HttpRequ HttpPolicyClass & opts(mPolicy->getClassOptions(pclass)); status = opts.set(opt, value); - if (status && ret_value) + if (status) { - status = opts.get(opt, ret_value); + mTransport->policyUpdated(pclass); + if (ret_value) + { + status = opts.get(opt, ret_value); + } } } @@ -463,7 +475,7 @@ HttpStatus HttpService::setPolicyOption(HttpRequest::EPolicyOption opt, HttpRequ return status; } - // Only string values are global at this time + // String values are always global (at this time). if (pclass == HttpRequest::GLOBAL_POLICY_ID) { HttpPolicyGlobal & opts(mPolicy->getGlobalOptions()); diff --git a/indra/llcorehttp/examples/http_texture_load.cpp b/indra/llcorehttp/examples/http_texture_load.cpp index 73c49687d7..b76c874557 100755 --- a/indra/llcorehttp/examples/http_texture_load.cpp +++ b/indra/llcorehttp/examples/http_texture_load.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2012&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2012-2013, Linden Research, Inc. + * Copyright (C) 2012-2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -59,11 +59,13 @@ void usage(std::ostream & out); // Default command line settings static int concurrency_limit(40); static int highwater(100); +static int pipeline_depth(0); +static int tracing(0); static char url_format[1024] = "http://example.com/some/path?texture_id=%s.texture"; #if defined(WIN32) -#define strncpy(_a, _b, _c) strncpy_s(_a, _b, _c) +#define strncpy(_a, _b, _c) strncpy_s(_a, _b, _c) #define strtok_r(_a, _b, _c) strtok_s(_a, _b, _c) int getopt(int argc, char * const argv[], const char *optstring); @@ -100,6 +102,7 @@ public: public: bool mVerbose; bool mRandomRange; + bool mNoRange; int mRequestLowWater; int mRequestHighWater; handle_set_t mHandles; @@ -160,10 +163,11 @@ int main(int argc, char** argv) { LLCore::HttpStatus status; bool do_random(false); + bool do_whole(false); bool do_verbose(false); int option(-1); - while (-1 != (option = getopt(argc, argv, "u:c:h?RvH:"))) + while (-1 != (option = getopt(argc, argv, "u:c:h?RwvH:p:t:"))) { switch (option) { @@ -193,7 +197,7 @@ int main(int argc, char** argv) char * end; value = strtoul(optarg, &end, 10); - if (value < 1 || value > 100 || *end != '\0') + if (value < 1 || value > 200 || *end != '\0') { usage(std::cerr); return 1; @@ -202,8 +206,44 @@ int main(int argc, char** argv) } break; + case 'p': + { + unsigned long value; + char * end; + + value = strtoul(optarg, &end, 10); + if (value < 0 || value > 100 || *end != '\0') + { + usage(std::cerr); + return 1; + } + pipeline_depth = value; + } + break; + + case '5': + { + unsigned long value; + char * end; + + value = strtoul(optarg, &end, 10); + if (value < 0 || value > 3 || *end != '\0') + { + usage(std::cerr); + return 1; + } + tracing = value; + } + break; + case 'R': do_random = true; + do_whole = false; + break; + + case 'w': + do_whole = true; + do_random = false; break; case 'v': @@ -240,6 +280,24 @@ int main(int argc, char** argv) LLCore::HttpRequest::DEFAULT_POLICY_ID, concurrency_limit, NULL); + LLCore::HttpRequest::setStaticPolicyOption(LLCore::HttpRequest::PO_PER_HOST_CONNECTION_LIMIT, + LLCore::HttpRequest::DEFAULT_POLICY_ID, + concurrency_limit, + NULL); + if (pipeline_depth) + { + LLCore::HttpRequest::setStaticPolicyOption(LLCore::HttpRequest::PO_PIPELINING_DEPTH, + LLCore::HttpRequest::DEFAULT_POLICY_ID, + pipeline_depth, + NULL); + } + if (tracing) + { + LLCore::HttpRequest::setStaticPolicyOption(LLCore::HttpRequest::PO_TRACE, + LLCore::HttpRequest::DEFAULT_POLICY_ID, + tracing, + NULL); + } LLCore::HttpRequest::startThread(); // Get service point @@ -257,6 +315,7 @@ int main(int argc, char** argv) ws.mUrl = url_format; ws.loadAssetUuids(uuids); ws.mRandomRange = do_random; + ws.mNoRange = do_whole; ws.mVerbose = do_verbose; ws.mRequestHighWater = highwater; ws.mRequestLowWater = ws.mRequestHighWater / 2; @@ -331,10 +390,15 @@ void usage(std::ostream & out) " -u <url_format> printf-style format string for URL generation\n" " Default: " << url_format << "\n" " -R Issue GETs with random Range: headers\n" + " -w Issue GETs without Range: headers to get whole object\n" " -c <limit> Maximum connection concurrency. Range: [1..100]\n" " Default: " << concurrency_limit << "\n" " -H <limit> HTTP request highwater (requests fed to llcorehttp).\n" - " Range: [1..100] Default: " << highwater << "\n" + " Range: [1..200] Default: " << highwater << "\n" + " -p <depth> If <depth> is positive, enables and sets pipelineing\n" + " depth on HTTP requests. Default: " << pipeline_depth << "\n" + " -t <level> If <level> is positive ([1..3]), enables and sets HTTP\n" + " tracing on HTTP requests. Default: " << tracing << "\n" " -v Verbose mode. Issue some chatter while running\n" " -h print this help\n" "\n" @@ -346,6 +410,7 @@ WorkingSet::WorkingSet() : LLCore::HttpHandler(), mVerbose(false), mRandomRange(false), + mNoRange(false), mRemaining(200), mLimit(200), mAt(0), @@ -395,8 +460,12 @@ bool WorkingSet::reload(LLCore::HttpRequest * hr, LLCore::HttpOptions * opt) #else snprintf(buffer, sizeof(buffer), mUrl.c_str(), mAssets[mAt].mUuid.c_str()); #endif - int offset(mRandomRange ? ((unsigned long) rand()) % 1000000UL : mAssets[mAt].mOffset); - int length(mRandomRange ? ((unsigned long) rand()) % 1000000UL : mAssets[mAt].mLength); + int offset(mNoRange + ? 0 + : (mRandomRange ? ((unsigned long) rand()) % 1000000UL : mAssets[mAt].mOffset)); + int length(mNoRange + ? 0 + : (mRandomRange ? ((unsigned long) rand()) % 1000000UL : mAssets[mAt].mLength)); LLCore::HttpHandle handle; if (offset || length) diff --git a/indra/llcorehttp/httpcommon.cpp b/indra/llcorehttp/httpcommon.cpp index c2f15155ac..7907e958a4 100755 --- a/indra/llcorehttp/httpcommon.cpp +++ b/indra/llcorehttp/httpcommon.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2012&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2012-2013, Linden Research, Inc. + * Copyright (C) 2012-2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -219,6 +219,13 @@ std::string HttpStatus::toTerseString() const // Pass true on statuses that might actually be cleared by a // retry. Library failures, calling problems, etc. aren't // going to be fixed by squirting bits all over the Net. +// +// HE_INVALID_HTTP_STATUS is special. As of 7.37.0, there are +// some scenarios where response processing in libcurl appear +// to go wrong and response data is corrupted. A side-effect +// of this is that the HTTP status is read as 0 from the library. +// See libcurl bug report 1420 (https://sourceforge.net/p/curl/bugs/1420/) +// for details. bool HttpStatus::isRetryable() const { static const HttpStatus cant_connect(HttpStatus::EXT_CURL_EASY, CURLE_COULDNT_CONNECT); @@ -231,6 +238,11 @@ bool HttpStatus::isRetryable() const static const HttpStatus post_error(HttpStatus::EXT_CURL_EASY, CURLE_HTTP_POST_ERROR); static const HttpStatus partial_file(HttpStatus::EXT_CURL_EASY, CURLE_PARTIAL_FILE); static const HttpStatus inv_cont_range(HttpStatus::LLCORE, HE_INV_CONTENT_RANGE_HDR); + static const HttpStatus inv_status(HttpStatus::LLCORE, HE_INVALID_HTTP_STATUS); + + // *DEBUG: For "[curl:bugs] #1420" tests. + // Disable the '*this == inv_status' test and look for 'Core_9' + // failures in log files. return ((isHttpStatus() && mType >= 499 && mType <= 599) || // Include special 499 in retryables *this == cant_connect || // Connection reset/endpoint problems @@ -242,6 +254,8 @@ bool HttpStatus::isRetryable() const *this == op_timedout || // Timer expired *this == post_error || // Transport problem *this == partial_file || // Data inconsistency in response + // *DEBUG: Comment out 'inv_status' test for [curl:bugs] #1420 testing. + *this == inv_status || // Inv status can reflect internal state problem in libcurl *this == inv_cont_range); // Short data read disagrees with content-range } diff --git a/indra/llcorehttp/httprequest.h b/indra/llcorehttp/httprequest.h index 651654844a..7f23723b0b 100755 --- a/indra/llcorehttp/httprequest.h +++ b/indra/llcorehttp/httprequest.h @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2012&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2012-2013, Linden Research, Inc. + * Copyright (C) 2012-2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -183,11 +183,38 @@ public: /// Global only PO_TRACE, - /// Suitable requests are allowed to pipeline on their - /// connections when they ask for it. + /// If greater than 1, suitable requests are allowed to + /// pipeline on their connections when they ask for it. + /// Value gives the maximum number of outstanding requests + /// on a connection. + /// + /// There is some interaction between PO_CONNECTION_LIMIT, + /// PO_PER_HOST_CONNECTION_LIMIT, and PO_PIPELINING_DEPTH. + /// When PIPELINING_DEPTH is 0 or 1 (no pipelining), this + /// library manages connection lifecycle and honors the + /// PO_CONNECTION_LIMIT setting as the maximum in-flight + /// request limit. Libcurl itself may be caching additional + /// connections under its connection cache policy. + /// + /// When PIPELINING_DEPTH is 2 or more, libcurl performs + /// connection management and both PO_CONNECTION_LIMIT and + /// PO_PER_HOST_CONNECTION_LIMIT should be set and non-zero. + /// In this case (as of libcurl 7.37.0), libcurl will + /// open new connections in preference to pipelining, up + /// to the above limits at which time pipelining begins. + /// And as usual, an additional cache of open but inactive + /// connections may still be maintained within libcurl. + /// For SL, a good rule-of-thumb is to set + /// PO_PER_HOST_CONNECTION_LIMIT to the user-visible + /// concurrency value and PO_CONNECTION_LIMIT to twice + /// that for baked texture loads and region crossings where + /// additional connection load will be tolerated. If + /// either limit is 0, libcurl will prefer pipelining + /// over connection creation, which is still interesting, + /// but won't be pursued at this time. /// /// Per-class only - PO_ENABLE_PIPELINING, + PO_PIPELINING_DEPTH, /// Controls whether client-side throttling should be /// performed on this policy class. Positive values diff --git a/indra/llinventory/llfoldertype.cpp b/indra/llinventory/llfoldertype.cpp index 5f8aaae20b..23bf6da1f9 100755 --- a/indra/llinventory/llfoldertype.cpp +++ b/indra/llinventory/llfoldertype.cpp @@ -93,7 +93,7 @@ LLFolderDictionary::LLFolderDictionary() addEntry(LLFolderType::FT_MESH, new FolderEntry("mesh", TRUE)); addEntry(LLFolderType::FT_INBOX, new FolderEntry("inbox", TRUE)); - addEntry(LLFolderType::FT_OUTBOX, new FolderEntry("outbox", FALSE)); + addEntry(LLFolderType::FT_OUTBOX, new FolderEntry("outbox", TRUE)); addEntry(LLFolderType::FT_BASIC_ROOT, new FolderEntry("basic_rt", TRUE)); diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index e400877b3b..b24e14c72b 100755 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -793,8 +793,6 @@ BOOL LLParcel::addToAccessList(const LLUUID& agent_id, S32 time) } } - removeFromBanList(agent_id); - LLAccessEntry new_entry; new_entry.mID = agent_id; new_entry.mTime = time; @@ -838,8 +836,6 @@ BOOL LLParcel::addToBanList(const LLUUID& agent_id, S32 time) } } - removeFromAccessList(agent_id); - LLAccessEntry new_entry; new_entry.mID = agent_id; new_entry.mTime = time; diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt index 8bd134dc84..40eddcb0ab 100755 --- a/indra/llmessage/CMakeLists.txt +++ b/indra/llmessage/CMakeLists.txt @@ -6,6 +6,7 @@ include(00-Common) include(GoogleMock) include(LLAddBuildTest) include(LLCommon) +include(LLCoreHttp) include(LLMath) include(LLMessage) include(LLVFS) @@ -18,6 +19,7 @@ include_directories (${CMAKE_CURRENT_SOURCE_DIR}) include_directories( ${LLCOMMON_INCLUDE_DIRS} + ${LLCOREHTTP_INCLUDE_DIRS} ${LLMATH_INCLUDE_DIRS} ${LLMESSAGE_INCLUDE_DIRS} ${LLVFS_INCLUDE_DIRS} @@ -36,6 +38,7 @@ set(llmessage_SOURCE_FILES llchainio.cpp llcircuit.cpp llclassifiedflags.cpp + llcorehttputil.cpp llcurl.cpp lldatapacker.cpp lldispatcher.cpp @@ -124,6 +127,7 @@ set(llmessage_HEADER_FILES llcipher.h llcircuit.h llclassifiedflags.h + llcorehttputil.h llcurl.h lldatapacker.h lldbstrings.h diff --git a/indra/llmessage/llcorehttputil.cpp b/indra/llmessage/llcorehttputil.cpp new file mode 100644 index 0000000000..ee80b0fd94 --- /dev/null +++ b/indra/llmessage/llcorehttputil.cpp @@ -0,0 +1,139 @@ +/** + * @file llcorehttputil.cpp + * @date 2014-08-25 + * @brief Implementation of adapter and utility classes expanding the llcorehttp interfaces. + * + * $LicenseInfo:firstyear=2014&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2014, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "linden_common.h" + +#include <sstream> + +#include "llcorehttputil.h" +#include "llsdserialize.h" + + +using namespace LLCore; + + +namespace LLCoreHttpUtil +{ + +// *TODO: Currently converts only from XML content. A mode +// to convert using fromBinary() might be useful as well. Mesh +// headers could use it. +bool responseToLLSD(HttpResponse * response, bool log, LLSD & out_llsd) +{ + // Convert response to LLSD + BufferArray * body(response->getBody()); + if (! body || ! body->size()) + { + return false; + } + + LLCore::BufferArrayStream bas(body); + LLSD body_llsd; + S32 parse_status(LLSDSerialize::fromXML(body_llsd, bas, log)); + if (LLSDParser::PARSE_FAILURE == parse_status){ + return false; + } + out_llsd = body_llsd; + return true; +} + + +HttpHandle requestPostWithLLSD(HttpRequest * request, + HttpRequest::policy_t policy_id, + HttpRequest::priority_t priority, + const std::string & url, + const LLSD & body, + HttpOptions * options, + HttpHeaders * headers, + HttpHandler * handler) +{ + HttpHandle handle(LLCORE_HTTP_HANDLE_INVALID); + + BufferArray * ba = new BufferArray(); + BufferArrayStream bas(ba); + LLSDSerialize::toXML(body, bas); + + handle = request->requestPost(policy_id, + priority, + url, + ba, + options, + headers, + handler); + ba->release(); + return handle; +} + + +std::string responseToString(LLCore::HttpResponse * response) +{ + static const std::string empty("[Empty]"); + + if (! response) + { + return empty; + } + + BufferArray * body(response->getBody()); + if (! body || ! body->size()) + { + return empty; + } + + // Attempt to parse as LLSD regardless of content-type + LLSD body_llsd; + if (responseToLLSD(response, false, body_llsd)) + { + std::ostringstream tmp; + + LLSDSerialize::toPrettyNotation(body_llsd, tmp); + std::size_t temp_len(tmp.tellp()); + + if (temp_len) + { + return tmp.str().substr(0, std::min(temp_len, std::size_t(1024))); + } + } + else + { + // *TODO: More elaborate forms based on Content-Type as needed. + char content[1024]; + + size_t len(body->read(0, content, sizeof(content))); + if (len) + { + return std::string(content, 0, len); + } + } + + // Default + return empty; +} + + +} // end namespace LLCoreHttpUtil + diff --git a/indra/llmessage/llcorehttputil.h b/indra/llmessage/llcorehttputil.h new file mode 100644 index 0000000000..d40172bc7a --- /dev/null +++ b/indra/llmessage/llcorehttputil.h @@ -0,0 +1,115 @@ +/** + * @file llcorehttputil.h + * @date 2014-08-25 + * @brief Adapter and utility classes expanding the llcorehttp interfaces. + * + * $LicenseInfo:firstyear=2014&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2014, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLCOREHTTPUTIL_H +#define LL_LLCOREHTTPUTIL_H + +#include <string> + +#include "httpcommon.h" +#include "httprequest.h" +#include "httpresponse.h" +#include "httpheaders.h" +#include "httpoptions.h" +#include "httphandler.h" +#include "bufferarray.h" +#include "bufferstream.h" +#include "llsd.h" + +/// +/// The base llcorehttp library implements many HTTP idioms +/// used in the viewer but not all. That library intentionally +/// avoids the use of LLSD and its conventions which aren't +/// universally applicable. This module, using namespace +/// LLCoreHttpUtil, provides the additional helper functions +/// that support idiomatic LLSD transport via the newer +/// llcorehttp library. +/// +namespace LLCoreHttpUtil +{ + +/// Attempt to convert a response object's contents to LLSD. +/// It is expected that the response body will be of non-zero +/// length on input but basic checks will be performed and +/// and error (false status) returned if there is no data. +/// If there is data but it cannot be successfully parsed, +/// an error is also returned. If successfully parsed, +/// the output LLSD object, out_llsd, is written with the +/// result and true is returned. +/// +/// @arg response Response object as returned in +/// in an HttpHandler onCompleted() callback. +/// @arg log If true, LLSD parser will emit errors +/// as LL_INFOS-level messages as it parses. +/// Otherwise, it *should* be a quiet parse. +/// @arg out_llsd Output LLSD object written only upon +/// successful parse of the response object. +/// +/// @return Returns true (and writes to out_llsd) if +/// parse was successful. False otherwise. +/// +bool responseToLLSD(LLCore::HttpResponse * response, + bool log, + LLSD & out_llsd); + +/// Create a std::string representation of a response object +/// suitable for logging. Mainly intended for logging of +/// failures and debug information. This won't be fast, +/// just adequate. +std::string responseToString(LLCore::HttpResponse * response); + + +/// Issue a standard HttpRequest::requestPost() call but using +/// and LLSD object as the request body. Conventions are the +/// same as with that method. Caller is expected to provide +/// an HttpHeaders object with a correct 'Content-Type:' header. +/// One will not be provided by this call. You might look after +/// the 'Accept:' header as well. +/// +/// @return If request is successfully issued, the +/// HttpHandle representing the request. +/// On error, LLCORE_HTTP_HANDLE_INVALID +/// is returned and caller can fetch detailed +/// status with the getStatus() method on the +/// request object. In case of error, no +/// request is queued and caller may need to +/// perform additional cleanup such as freeing +/// a now-useless HttpHandler object. +/// +LLCore::HttpHandle requestPostWithLLSD(LLCore::HttpRequest * request, + LLCore::HttpRequest::policy_t policy_id, + LLCore::HttpRequest::priority_t priority, + const std::string & url, + const LLSD & body, + LLCore::HttpOptions * options, + LLCore::HttpHeaders * headers, + LLCore::HttpHandler * handler); + +} // end namespace LLCoreHttpUtil + + +#endif // LL_LLCOREHTTPUTIL_H diff --git a/indra/llmessage/llhttpconstants.cpp b/indra/llmessage/llhttpconstants.cpp index 01f4a080b0..32f76f0d70 100755 --- a/indra/llmessage/llhttpconstants.cpp +++ b/indra/llmessage/llhttpconstants.cpp @@ -3,11 +3,8 @@ * @brief Implementation of the HTTP request / response constant lookups * * $LicenseInfo:firstyear=2013&license=viewerlgpl$ - * - * Copyright (c) 2013, Linden Research, Inc. - * * Second Life Viewer Source Code - * Copyright (C) 2013, Linden Research, Inc. + * Copyright (C) 2013-2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -107,6 +104,7 @@ const std::string HTTP_IN_HEADER_X_FORWARDED_FOR("x-forwarded-for"); const std::string HTTP_CONTENT_LLSD_XML("application/llsd+xml"); const std::string HTTP_CONTENT_OCTET_STREAM("application/octet-stream"); +const std::string HTTP_CONTENT_VND_LL_MESH("application/vnd.ll.mesh"); const std::string HTTP_CONTENT_XML("application/xml"); const std::string HTTP_CONTENT_JSON("application/json"); const std::string HTTP_CONTENT_TEXT_HTML("text/html"); diff --git a/indra/llmessage/llhttpconstants.h b/indra/llmessage/llhttpconstants.h index 4aa3cc6394..d6bcbd3c19 100755 --- a/indra/llmessage/llhttpconstants.h +++ b/indra/llmessage/llhttpconstants.h @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2001&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2001-2013, Linden Research, Inc. + * Copyright (C) 2001-2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -203,6 +203,7 @@ extern const std::string HTTP_IN_HEADER_X_FORWARDED_FOR; extern const std::string HTTP_CONTENT_LLSD_XML; extern const std::string HTTP_CONTENT_OCTET_STREAM; +extern const std::string HTTP_CONTENT_VND_LL_MESH; extern const std::string HTTP_CONTENT_XML; extern const std::string HTTP_CONTENT_JSON; extern const std::string HTTP_CONTENT_TEXT_HTML; diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index 57a698b98f..b4963225dc 100755 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -191,7 +191,7 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa U32 tc_count = tc_source ? tc.getCount() : 0; U32 norm_count = norm_source ? n.getCount() : 0; - if (vertex_count == 0) + if ((vertex_count == 0) || (tc_count == 0)) { llwarns << "Unable to process mesh with empty position array; invalid model." << llendl; return LLModel::BAD_ELEMENT; diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index cca26f335a..474b545f00 100755 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -1371,7 +1371,8 @@ BOOL LLFolderView::search(LLFolderViewItem* first_item, const std::string &searc } } - const std::string current_item_label(search_item->getViewModelItem()->getSearchableName()); + std::string current_item_label(search_item->getViewModelItem()->getSearchableName()); + LLStringUtil::toUpper(current_item_label); S32 search_string_length = llmin(upper_case_string.size(), current_item_label.size()); if (!current_item_label.compare(0, search_string_length, upper_case_string)) { diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index 83254c2840..7c88f8fb9b 100644 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -256,6 +256,24 @@ BOOL LLFolderViewItem::passedFilter(S32 filter_generation) return getViewModelItem()->passedFilter(filter_generation); } +BOOL LLFolderViewItem::isPotentiallyVisible(S32 filter_generation) +{ + // Item should be visible if: + // 1. item passed current filter + // 2. item was updated (gen < 0) but has descendants that passed filter + // 3. item was recently updated and was visible before update + + LLFolderViewModelItem* model = getViewModelItem(); + if (model->getLastFilterGeneration() < 0 && !getFolderViewModel()->getFilter().isModified()) + { + return model->descendantsPassedFilter(filter_generation) || getVisible(); + } + else + { + return model->passedFilter(filter_generation); + } +} + void LLFolderViewItem::refresh() { LLFolderViewModelItem& vmi = *getViewModelItem(); @@ -655,7 +673,7 @@ void LLFolderViewItem::drawOpenFolderArrow(const Params& default_params, const L // const S32 TOP_PAD = default_params.item_top_pad; - if (hasVisibleChildren() || getViewModelItem()->hasChildren()) + if (hasVisibleChildren()) { LLUIImage* arrow_image = default_params.folder_arrow_image; gl_draw_scaled_rotated_image( @@ -968,7 +986,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height ) getRoot()->getFolderViewModel()->sort(this); LL_RECORD_BLOCK_TIME(FTM_ARRANGE); - + // evaluate mHasVisibleChildren mHasVisibleChildren = false; if (getViewModelItem()->descendantsPassedFilter()) @@ -979,7 +997,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height ) for (items_t::iterator iit = mItems.begin(); iit != mItems.end(); ++iit) { LLFolderViewItem* itemp = (*iit); - found = itemp->passedFilter(); + found = itemp->isPotentiallyVisible(); if (found) break; } @@ -989,7 +1007,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height ) for (folders_t::iterator fit = mFolders.begin(); fit != mFolders.end(); ++fit) { LLFolderViewFolder* folderp = (*fit); - found = folderp->passedFilter(); + found = folderp->isPotentiallyVisible(); if (found) break; } @@ -1022,7 +1040,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height ) for(folders_t::iterator fit = mFolders.begin(); fit != mFolders.end(); ++fit) { LLFolderViewFolder* folderp = (*fit); - folderp->setVisible(folderp->passedFilter()); // passed filter or has descendants that passed filter + folderp->setVisible(folderp->isPotentiallyVisible()); if (folderp->getVisible()) { @@ -1041,7 +1059,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height ) iit != mItems.end(); ++iit) { LLFolderViewItem* itemp = (*iit); - itemp->setVisible(itemp->passedFilter()); + itemp->setVisible(itemp->isPotentiallyVisible()); if (itemp->getVisible()) { diff --git a/indra/llui/llfolderviewitem.h b/indra/llui/llfolderviewitem.h index a9b0201236..0cd20a0f2d 100644 --- a/indra/llui/llfolderviewitem.h +++ b/indra/llui/llfolderviewitem.h @@ -254,6 +254,7 @@ public: S32 getIndentation() { return mIndentation; } virtual BOOL passedFilter(S32 filter_generation = -1); + virtual BOOL isPotentiallyVisible(S32 filter_generation = -1); // refresh information from the object being viewed. virtual void refresh(); diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index b09c927782..45f4272aa7 100755 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -254,6 +254,7 @@ void LLLineEditor::onCommit() setControlValue(getValue()); LLUICtrl::onCommit(); + resetDirty(); // Selection on commit needs to be turned off when evaluating maths // expressions, to allow indication of the error position diff --git a/indra/llui/llstatgraph.cpp b/indra/llui/llstatgraph.cpp index a44bc18733..98962aff9a 100755 --- a/indra/llui/llstatgraph.cpp +++ b/indra/llui/llstatgraph.cpp @@ -44,9 +44,10 @@ LLStatGraph::LLStatGraph(const Params& p) : LLView(p), mMin(p.min), mMax(p.max), - mPerSec(true), + mPerSec(p.per_sec), mPrecision(p.precision), mValue(p.value), + mUnits(p.units), mNewStatFloatp(p.stat.count_stat_float) { setToolTip(p.name()); diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 71db0ac030..9b125a85b9 100755 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1307,14 +1307,14 @@ void LLTextBase::replaceWithSuggestion(U32 index) if ( (it->first <= (U32)mCursorPos) && (it->second >= (U32)mCursorPos) ) { deselect(); - - // Delete the misspelled word - removeStringNoUndo(it->first, it->second - it->first); - // Insert the suggestion in its place LLWString suggestion = utf8str_to_wstring(mSuggestionList[index]); insertStringNoUndo(it->first, utf8str_to_wstring(mSuggestionList[index])); + // Delete the misspelled word + removeStringNoUndo(it->first + (S32)suggestion.length(), it->second - it->first); + + setCursorPos(it->first + (S32)suggestion.length()); break; @@ -2381,7 +2381,7 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round, // binary search for line that starts before local_y line_list_t::const_iterator line_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), doc_y, compare_bottom()); - if (line_iter == mLineInfoList.end()) + if (!mLineInfoList.size() || line_iter == mLineInfoList.end()) { return getLength(); // past the end } @@ -2473,7 +2473,6 @@ LLRect LLTextBase::getDocRectFromDocIndex(S32 pos) const // clamp pos to valid values pos = llclamp(pos, 0, mLineInfoList.back().mDocIndexEnd - 1); - // find line that contains cursor line_list_t::const_iterator line_iter = std::upper_bound(mLineInfoList.begin(), mLineInfoList.end(), pos, line_end_compare()); doc_rect.mLeft = line_iter->mRect.mLeft; @@ -2649,6 +2648,12 @@ void LLTextBase::changeLine( S32 delta ) LLRect visible_region = getVisibleDocumentRect(); S32 new_cursor_pos = getDocIndexFromLocalCoord(mDesiredXPixel, mLineInfoList[new_line].mRect.mBottom + mVisibleTextRect.mBottom - visible_region.mBottom, TRUE); + S32 actual_line = getLineNumFromDocIndex(new_cursor_pos); + if (actual_line != new_line) + { + // line edge, correcting position by 1 to move onto proper line + new_cursor_pos += new_line - actual_line; + } setCursorPos(new_cursor_pos, true); } } diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 576e8f7600..cf5fdef539 100755 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -1126,7 +1126,6 @@ void LLTextEditor::addChar(llwchar wc) } } - void LLTextEditor::addLineBreakChar(BOOL group_together) { if( !getEnabled() ) diff --git a/indra/llui/llui.h b/indra/llui/llui.h index b162f25887..c727f75c4f 100755 --- a/indra/llui/llui.h +++ b/indra/llui/llui.h @@ -86,6 +86,7 @@ enum EAcceptance { ACCEPT_POSTPONED, // we are asynchronously determining acceptance ACCEPT_NO, // Uninformative, general purpose denial. + ACCEPT_NO_CUSTOM, // Denial with custom message. ACCEPT_NO_LOCKED, // Operation would be valid, but permissions are set to disallow it. ACCEPT_YES_COPY_SINGLE, // We'll take a copy of a single item ACCEPT_YES_SINGLE, // Accepted. OK to drag and drop single item here. diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm index 017ea3769c..f7031341eb 100644 --- a/indra/llwindow/llopenglview-objc.mm +++ b/indra/llwindow/llopenglview-objc.mm @@ -398,9 +398,35 @@ attributedStringInfo getSegments(NSAttributedString *str) } } -- (void)flagsChanged:(NSEvent *)theEvent { +- (void)flagsChanged:(NSEvent *)theEvent +{ mModifiers = [theEvent modifierFlags]; callModifier([theEvent modifierFlags]); + + NSInteger mask = 0; + switch([theEvent keyCode]) + { + case 56: + mask = NSShiftKeyMask; + break; + case 58: + mask = NSAlternateKeyMask; + break; + case 59: + mask = NSControlKeyMask; + break; + default: + return; + } + + if (mModifiers & mask) + { + callKeyDown([theEvent keyCode], 0); + } + else + { + callKeyUp([theEvent keyCode], 0); + } } - (BOOL) acceptsFirstResponder diff --git a/indra/mac_updater/mac_updater.cpp b/indra/mac_updater/mac_updater.cpp deleted file mode 100644 index f533d47b18..0000000000 --- a/indra/mac_updater/mac_updater.cpp +++ /dev/null @@ -1,1266 +0,0 @@ -/** - * @file mac_updater.cpp - * @brief - * - * $LicenseInfo:firstyear=2006&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#include "linden_common.h" - -#include <boost/format.hpp> - -#include <libgen.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> - -#include <curl/curl.h> -#include <pthread.h> - -#include "llerror.h" -#include "lltimer.h" -#include "lldir.h" -#include "llfile.h" - -#include "llstring.h" - -#include <Carbon/Carbon.h> - -#include "llerrorcontrol.h" - -#if LL_DARWIN -// FSPathMakeRef, FSObjectCopy, deprecations... -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - -enum -{ - kEventClassCustom = 'Cust', - kEventCustomProgress = 'Prog', - kEventParamCustomCurValue = 'Cur ', - kEventParamCustomMaxValue = 'Max ', - kEventParamCustomText = 'Text', - kEventCustomDone = 'Done', -}; - -WindowRef gWindow = NULL; -EventHandlerRef gEventHandler = NULL; -OSStatus gFailure = noErr; -Boolean gCancelled = false; - -const char *gUpdateURL; -const char *gProductName; -const char *gBundleID; -const char *gDmgFile; -const char *gMarkerPath; - -void *updatethreadproc(void*); - -pthread_t updatethread; - -OSStatus setProgress(int cur, int max) -{ - OSStatus err; - ControlRef progressBar = NULL; - ControlID id; - - id.signature = 'prog'; - id.id = 0; - - err = GetControlByID(gWindow, &id, &progressBar); - if(err == noErr) - { - Boolean indeterminate; - - if(max == 0) - { - indeterminate = true; - err = SetControlData(progressBar, kControlEntireControl, kControlProgressBarIndeterminateTag, sizeof(Boolean), (Ptr)&indeterminate); - } - else - { - double percentage = (double)cur / (double)max; - SetControlMinimum(progressBar, 0); - SetControlMaximum(progressBar, 100); - SetControlValue(progressBar, (SInt16)(percentage * 100)); - - indeterminate = false; - err = SetControlData(progressBar, kControlEntireControl, kControlProgressBarIndeterminateTag, sizeof(Boolean), (Ptr)&indeterminate); - - Draw1Control(progressBar); - } - } - - return(err); -} - -OSStatus setProgressText(CFStringRef text) -{ - OSStatus err; - ControlRef progressText = NULL; - ControlID id; - - id.signature = 'what'; - id.id = 0; - - err = GetControlByID(gWindow, &id, &progressText); - if(err == noErr) - { - err = SetControlData(progressText, kControlEntireControl, kControlStaticTextCFStringTag, sizeof(CFStringRef), (Ptr)&text); - Draw1Control(progressText); - } - - return(err); -} - -OSStatus sendProgress(long cur, long max, CFStringRef text = NULL) -{ - OSStatus result; - EventRef evt; - - result = CreateEvent( - NULL, - kEventClassCustom, - kEventCustomProgress, - 0, - kEventAttributeNone, - &evt); - - // This event needs to be targeted at the window so it goes to the window's handler. - if(result == noErr) - { - EventTargetRef target = GetWindowEventTarget(gWindow); - result = SetEventParameter ( - evt, - kEventParamPostTarget, - typeEventTargetRef, - sizeof(target), - &target); - } - - if(result == noErr) - { - result = SetEventParameter ( - evt, - kEventParamCustomCurValue, - typeLongInteger, - sizeof(cur), - &cur); - } - - if(result == noErr) - { - result = SetEventParameter ( - evt, - kEventParamCustomMaxValue, - typeLongInteger, - sizeof(max), - &max); - } - - if(result == noErr) - { - if(text != NULL) - { - result = SetEventParameter ( - evt, - kEventParamCustomText, - typeCFStringRef, - sizeof(text), - &text); - } - } - - if(result == noErr) - { - // Send the event - PostEventToQueue( - GetMainEventQueue(), - evt, - kEventPriorityStandard); - - } - - return(result); -} - -OSStatus sendDone(void) -{ - OSStatus result; - EventRef evt; - - result = CreateEvent( - NULL, - kEventClassCustom, - kEventCustomDone, - 0, - kEventAttributeNone, - &evt); - - // This event needs to be targeted at the window so it goes to the window's handler. - if(result == noErr) - { - EventTargetRef target = GetWindowEventTarget(gWindow); - result = SetEventParameter ( - evt, - kEventParamPostTarget, - typeEventTargetRef, - sizeof(target), - &target); - } - - if(result == noErr) - { - // Send the event - PostEventToQueue( - GetMainEventQueue(), - evt, - kEventPriorityStandard); - - } - - return(result); -} - -OSStatus dialogHandler(EventHandlerCallRef handler, EventRef event, void *userdata) -{ - OSStatus result = eventNotHandledErr; - OSStatus err; - UInt32 evtClass = GetEventClass(event); - UInt32 evtKind = GetEventKind(event); - - if((evtClass == kEventClassCommand) && (evtKind == kEventCommandProcess)) - { - HICommand cmd; - err = GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof(cmd), NULL, &cmd); - - if(err == noErr) - { - switch(cmd.commandID) - { - case kHICommandCancel: - gCancelled = true; -// QuitAppModalLoopForWindow(gWindow); - result = noErr; - break; - } - } - } - else if((evtClass == kEventClassCustom) && (evtKind == kEventCustomProgress)) - { - // Request to update the progress dialog - long cur = 0; - long max = 0; - CFStringRef text = NULL; - (void) GetEventParameter(event, kEventParamCustomCurValue, typeLongInteger, NULL, sizeof(cur), NULL, &cur); - (void) GetEventParameter(event, kEventParamCustomMaxValue, typeLongInteger, NULL, sizeof(max), NULL, &max); - (void) GetEventParameter(event, kEventParamCustomText, typeCFStringRef, NULL, sizeof(text), NULL, &text); - - err = setProgress(cur, max); - if(err == noErr) - { - if(text != NULL) - { - setProgressText(text); - } - } - - result = noErr; - } - else if((evtClass == kEventClassCustom) && (evtKind == kEventCustomDone)) - { - // We're done. Exit the modal loop. - QuitAppModalLoopForWindow(gWindow); - result = noErr; - } - - return(result); -} - -#if 0 -size_t curl_download_callback(void *data, size_t size, size_t nmemb, - void *user_data) -{ - S32 bytes = size * nmemb; - char *cdata = (char *) data; - for (int i =0; i < bytes; i += 1) - { - gServerResponse.append(cdata[i]); - } - return bytes; -} -#endif - -int curl_progress_callback_func(void *clientp, - double dltotal, - double dlnow, - double ultotal, - double ulnow) -{ - int max = (int)(dltotal / 1024.0); - int cur = (int)(dlnow / 1024.0); - sendProgress(cur, max); - - if(gCancelled) - return(1); - - return(0); -} - -int parse_args(int argc, char **argv) -{ - int j; - - for (j = 1; j < argc; j++) - { - if ((!strcmp(argv[j], "-url")) && (++j < argc)) - { - gUpdateURL = argv[j]; - } - else if ((!strcmp(argv[j], "-name")) && (++j < argc)) - { - gProductName = argv[j]; - } - else if ((!strcmp(argv[j], "-bundleid")) && (++j < argc)) - { - gBundleID = argv[j]; - } - else if ((!strcmp(argv[j], "-dmg")) && (++j < argc)) - { - gDmgFile = argv[j]; - } - else if ((!strcmp(argv[j], "-marker")) && (++j < argc)) - { - gMarkerPath = argv[j];; - } - } - - return 0; -} - -int main(int argc, char **argv) -{ - // We assume that all the logs we're looking for reside on the current drive - gDirUtilp->initAppDirs("SecondLife"); - - LLError::initForApplication( gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "")); - - // Rename current log file to ".old" - std::string old_log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "updater.log.old"); - std::string log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "updater.log"); - LLFile::rename(log_file.c_str(), old_log_file.c_str()); - - // Set the log file to updater.log - LLError::logToFile(log_file); - - ///////////////////////////////////////// - // - // Process command line arguments - // - gUpdateURL = NULL; - gProductName = NULL; - gBundleID = NULL; - gDmgFile = NULL; - gMarkerPath = NULL; - parse_args(argc, argv); - if ((gUpdateURL == NULL) && (gDmgFile == NULL)) - { - llinfos << "Usage: mac_updater -url <url> | -dmg <dmg file> [-name <product_name>] [-program <program_name>]" << llendl; - exit(1); - } - else - { - llinfos << "Update url is: " << gUpdateURL << llendl; - if (gProductName) - { - llinfos << "Product name is: " << gProductName << llendl; - } - else - { - gProductName = "Second Life"; - } - if (gBundleID) - { - llinfos << "Bundle ID is: " << gBundleID << llendl; - } - else - { - gBundleID = "com.secondlife.indra.viewer"; - } - } - - llinfos << "Starting " << gProductName << " Updater" << llendl; - - // Real UI... - OSStatus err; - IBNibRef nib = NULL; - - err = CreateNibReference(CFSTR("AutoUpdater"), &nib); - - char windowTitle[MAX_PATH]; /* Flawfinder: ignore */ - snprintf(windowTitle, sizeof(windowTitle), "%s Updater", gProductName); - CFStringRef windowTitleRef = NULL; - windowTitleRef = CFStringCreateWithCString(NULL, windowTitle, kCFStringEncodingUTF8); - - if(err == noErr) - { - err = CreateWindowFromNib(nib, CFSTR("Updater"), &gWindow); - } - - if (err == noErr) - { - err = SetWindowTitleWithCFString(gWindow, windowTitleRef); - } - CFRelease(windowTitleRef); - - if(err == noErr) - { - // Set up an event handler for the window. - EventTypeSpec handlerEvents[] = - { - { kEventClassCommand, kEventCommandProcess }, - { kEventClassCustom, kEventCustomProgress }, - { kEventClassCustom, kEventCustomDone } - }; - InstallStandardEventHandler(GetWindowEventTarget(gWindow)); - InstallWindowEventHandler( - gWindow, - NewEventHandlerUPP(dialogHandler), - GetEventTypeCount (handlerEvents), - handlerEvents, - 0, - &gEventHandler); - } - - if(err == noErr) - { - ShowWindow(gWindow); - SelectWindow(gWindow); - } - - if(err == noErr) - { - pthread_create(&updatethread, - NULL, - &updatethreadproc, - NULL); - - } - - if(err == noErr) - { - RunAppModalLoopForWindow(gWindow); - } - - void *threadresult; - - pthread_join(updatethread, &threadresult); - - if(!gCancelled && (gFailure != noErr)) - { - // Something went wrong. Since we always just tell the user to download a new version, we don't really care what. - AlertStdCFStringAlertParamRec params; - SInt16 retval_mac = 1; - DialogRef alert = NULL; - OSStatus err; - - params.version = kStdCFStringAlertVersionOne; - params.movable = false; - params.helpButton = false; - params.defaultText = (CFStringRef)kAlertDefaultOKText; - params.cancelText = 0; - params.otherText = 0; - params.defaultButton = 1; - params.cancelButton = 0; - params.position = kWindowDefaultPosition; - params.flags = 0; - - err = CreateStandardAlert( - kAlertStopAlert, - CFSTR("Error"), - CFSTR("An error occurred while updating Second Life. Please download the latest version from www.secondlife.com."), - ¶ms, - &alert); - - if(err == noErr) - { - err = RunStandardAlert( - alert, - NULL, - &retval_mac); - } - - if(gMarkerPath != 0) - { - // Create a install fail marker that can be used by the viewer to - // detect install problems. - std::ofstream stream(gMarkerPath); - if(stream) stream << -1; - } - exit(-1); - } else { - exit(0); - } - - if(gWindow != NULL) - { - DisposeWindow(gWindow); - } - - if(nib != NULL) - { - DisposeNibReference(nib); - } - - return 0; -} - -bool isDirWritable(FSRef &dir) -{ - bool result = false; - - // Test for a writable directory by creating a directory, then deleting it again. - // This is kinda lame, but will pretty much always give the right answer. - - OSStatus err = noErr; - char temp[PATH_MAX] = ""; /* Flawfinder: ignore */ - - err = FSRefMakePath(&dir, (UInt8*)temp, sizeof(temp)); - - if(err == noErr) - { - strncat(temp, "/.test_XXXXXX", (sizeof(temp) - strlen(temp)) - 1); - - if(mkdtemp(temp) != NULL) - { - // We were able to make the directory. This means the directory is writable. - result = true; - - // Clean up. - rmdir(temp); - } - } - -#if 0 - // This seemed like a good idea, but won't tell us if we're on a volume mounted read-only. - UInt8 perm; - err = FSGetUserPrivilegesPermissions(&targetParentRef, &perm, NULL); - if(err == noErr) - { - if(perm & kioACUserNoMakeChangesMask) - { - // Parent directory isn't writable. - llinfos << "Target parent directory not writable." << llendl; - err = -1; - replacingTarget = false; - } - } -#endif - - return result; -} - -static std::string HFSUniStr255_to_utf8str(const HFSUniStr255* src) -{ - llutf16string string16((U16*)&(src->unicode), src->length); - std::string result = utf16str_to_utf8str(string16); - return result; -} - -int restoreObject(const char* aside, const char* target, const char* path, const char* object) -{ - char source[PATH_MAX] = ""; /* Flawfinder: ignore */ - char dest[PATH_MAX] = ""; /* Flawfinder: ignore */ - snprintf(source, sizeof(source), "%s/%s/%s", aside, path, object); - snprintf(dest, sizeof(dest), "%s/%s", target, path); - FSRef sourceRef; - FSRef destRef; - OSStatus err; - err = FSPathMakeRef((UInt8 *)source, &sourceRef, NULL); - if(err != noErr) return false; - err = FSPathMakeRef((UInt8 *)dest, &destRef, NULL); - if(err != noErr) return false; - - llinfos << "Copying " << source << " to " << dest << llendl; - - err = FSCopyObjectSync( - &sourceRef, - &destRef, - NULL, - NULL, - kFSFileOperationOverwrite); - - if(err != noErr) return false; - return true; -} - -// Replace any mention of "Second Life" with the product name. -void filterFile(const char* filename) -{ - char temp[PATH_MAX] = ""; /* Flawfinder: ignore */ - // First copy the target's version, so we can run it through sed. - snprintf(temp, sizeof(temp), "cp '%s' '%s.tmp'", filename, filename); - system(temp); /* Flawfinder: ignore */ - - // Now run it through sed. - snprintf(temp, sizeof(temp), - "sed 's/Second Life/%s/g' '%s.tmp' > '%s'", gProductName, filename, filename); - system(temp); /* Flawfinder: ignore */ -} - -static bool isFSRefViewerBundle(FSRef *targetRef) -{ - bool result = false; - CFURLRef targetURL = NULL; - CFBundleRef targetBundle = NULL; - CFStringRef targetBundleID = NULL; - CFStringRef sourceBundleID = NULL; - - targetURL = CFURLCreateFromFSRef(NULL, targetRef); - - if(targetURL == NULL) - { - llinfos << "Error creating target URL." << llendl; - } - else - { - targetBundle = CFBundleCreate(NULL, targetURL); - } - - if(targetBundle == NULL) - { - llinfos << "Failed to create target bundle." << llendl; - } - else - { - targetBundleID = CFBundleGetIdentifier(targetBundle); - } - - if(targetBundleID == NULL) - { - llinfos << "Couldn't retrieve target bundle ID." << llendl; - } - else - { - sourceBundleID = CFStringCreateWithCString(NULL, gBundleID, kCFStringEncodingUTF8); - if(CFStringCompare(sourceBundleID, targetBundleID, 0) == kCFCompareEqualTo) - { - // This is the bundle we're looking for. - result = true; - } - else - { - llinfos << "Target bundle ID mismatch." << llendl; - } - } - - // Don't release targetBundleID -- since we don't retain it, it's released when targetBundle is released. - if(targetURL != NULL) - CFRelease(targetURL); - if(targetBundle != NULL) - CFRelease(targetBundle); - - return result; -} - -// Search through the directory specified by 'parent' for an item that appears to be a Second Life viewer. -static OSErr findAppBundleOnDiskImage(FSRef *parent, FSRef *app) -{ - FSIterator iterator; - bool found = false; - - OSErr err = FSOpenIterator( parent, kFSIterateFlat, &iterator ); - if(!err) - { - do - { - ItemCount actualObjects = 0; - Boolean containerChanged = false; - FSCatalogInfo info; - FSRef ref; - HFSUniStr255 unicodeName; - err = FSGetCatalogInfoBulk( - iterator, - 1, - &actualObjects, - &containerChanged, - kFSCatInfoNodeFlags, - &info, - &ref, - NULL, - &unicodeName ); - - if(actualObjects == 0) - break; - - if(!err) - { - // Call succeeded and not done with the iteration. - std::string name = HFSUniStr255_to_utf8str(&unicodeName); - - llinfos << "Considering \"" << name << "\"" << llendl; - - if(info.nodeFlags & kFSNodeIsDirectoryMask) - { - // This is a directory. See if it's a .app - if(name.find(".app") != std::string::npos) - { - // Looks promising. Check to see if it has the right bundle identifier. - if(isFSRefViewerBundle(&ref)) - { - llinfos << name << " is the one" << llendl; - // This is the one. Return it. - *app = ref; - found = true; - break; - } else { - llinfos << name << " is not the bundle we are looking for; move along" << llendl; - } - - } - } - } - } - while(!err); - - llinfos << "closing the iterator" << llendl; - - FSCloseIterator(iterator); - - llinfos << "closed" << llendl; - } - - if(!err && !found) - err = fnfErr; - - return err; -} - -void *updatethreadproc(void*) -{ - char tempDir[PATH_MAX] = ""; /* Flawfinder: ignore */ - FSRef tempDirRef; - char temp[PATH_MAX] = ""; /* Flawfinder: ignore */ - // *NOTE: This buffer length is used in a scanf() below. - char deviceNode[1024] = ""; /* Flawfinder: ignore */ - LLFILE *downloadFile = NULL; - OSStatus err; - ProcessSerialNumber psn; - char target[PATH_MAX] = ""; /* Flawfinder: ignore */ - FSRef targetRef; - FSRef targetParentRef; - FSVolumeRefNum targetVol; - FSRef trashFolderRef; - Boolean replacingTarget = false; - - memset(&tempDirRef, 0, sizeof(tempDirRef)); - memset(&targetRef, 0, sizeof(targetRef)); - memset(&targetParentRef, 0, sizeof(targetParentRef)); - - try - { - // Attempt to get a reference to the Second Life application bundle containing this updater. - // Any failures during this process will cause us to default to updating /Applications/Second Life.app - { - FSRef myBundle; - - err = GetCurrentProcess(&psn); - if(err == noErr) - { - err = GetProcessBundleLocation(&psn, &myBundle); - } - - if(err == noErr) - { - // Sanity check: Make sure the name of the item referenced by targetRef is "Second Life.app". - FSRefMakePath(&myBundle, (UInt8*)target, sizeof(target)); - - llinfos << "Updater bundle location: " << target << llendl; - } - - // Our bundle should be in Second Life.app/Contents/Resources/AutoUpdater.app - // so we need to go up 3 levels to get the path to the main application bundle. - if(err == noErr) - { - err = FSGetCatalogInfo(&myBundle, kFSCatInfoNone, NULL, NULL, NULL, &targetRef); - } - if(err == noErr) - { - err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetRef); - } - if(err == noErr) - { - err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetRef); - } - - // And once more to get the parent of the target - if(err == noErr) - { - err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetParentRef); - } - - if(err == noErr) - { - FSRefMakePath(&targetRef, (UInt8*)target, sizeof(target)); - llinfos << "Path to target: " << target << llendl; - } - - // Sanity check: make sure the target is a bundle with the right identifier - if(err == noErr) - { - // Assume the worst... - err = -1; - - if(isFSRefViewerBundle(&targetRef)) - { - // This is the bundle we're looking for. - err = noErr; - replacingTarget = true; - } - } - - // Make sure the target's parent directory is writable. - if(err == noErr) - { - if(!isDirWritable(targetParentRef)) - { - // Parent directory isn't writable. - llinfos << "Target parent directory not writable." << llendl; - err = -1; - replacingTarget = false; - } - } - - if(err != noErr) - { - Boolean isDirectory; - llinfos << "Target search failed, defaulting to /Applications/" << gProductName << ".app." << llendl; - - // Set up the parent directory - err = FSPathMakeRef((UInt8*)"/Applications", &targetParentRef, &isDirectory); - if((err != noErr) || (!isDirectory)) - { - // We're so hosed. - llinfos << "Applications directory not found, giving up." << llendl; - throw 0; - } - - snprintf(target, sizeof(target), "/Applications/%s.app", gProductName); - - memset(&targetRef, 0, sizeof(targetRef)); - err = FSPathMakeRef((UInt8*)target, &targetRef, NULL); - if(err == fnfErr) - { - // This is fine, just means we're not replacing anything. - err = noErr; - replacingTarget = false; - } - else - { - replacingTarget = true; - } - - // Make sure the target's parent directory is writable. - if(err == noErr) - { - if(!isDirWritable(targetParentRef)) - { - // Parent directory isn't writable. - llinfos << "Target parent directory not writable." << llendl; - err = -1; - replacingTarget = false; - } - } - - } - - // If we haven't fixed all problems by this point, just bail. - if(err != noErr) - { - llinfos << "Unable to pick a target, giving up." << llendl; - throw 0; - } - } - - // Find the volID of the volume the target resides on - { - FSCatalogInfo info; - err = FSGetCatalogInfo( - &targetParentRef, - kFSCatInfoVolume, - &info, - NULL, - NULL, - NULL); - - if(err != noErr) - throw 0; - - targetVol = info.volume; - } - - // Find the temporary items and trash folders on that volume. - err = FSFindFolder( - targetVol, - kTrashFolderType, - true, - &trashFolderRef); - - if(err != noErr) - throw 0; - -#if 0 // *HACK for DEV-11935 see below for details. - - FSRef tempFolderRef; - - err = FSFindFolder( - targetVol, - kTemporaryFolderType, - true, - &tempFolderRef); - - if(err != noErr) - throw 0; - - err = FSRefMakePath(&tempFolderRef, (UInt8*)temp, sizeof(temp)); - - if(err != noErr) - throw 0; - -#else - - // *HACK for DEV-11935 the above kTemporaryFolderType query was giving - // back results with path names that seem to be too long to be used as - // mount points. I suspect this incompatibility was introduced in the - // Leopard 10.5.2 update, but I have not verified this. - char const HARDCODED_TMP[] = "/tmp"; - strncpy(temp, HARDCODED_TMP, sizeof(HARDCODED_TMP)); - -#endif // 0 *HACK for DEV-11935 - - // Skip downloading the file if the dmg was passed on the command line. - std::string dmgName; - if(gDmgFile != NULL) { - dmgName = basename((char *)gDmgFile); - char * dmgDir = dirname((char *)gDmgFile); - strncpy(tempDir, dmgDir, sizeof(tempDir)); - err = FSPathMakeRef((UInt8*)tempDir, &tempDirRef, NULL); - if(err != noErr) throw 0; - chdir(tempDir); - goto begin_install; - } else { - // Continue on to download file. - dmgName = "SecondLife.dmg"; - } - - - strncat(temp, "/SecondLifeUpdate_XXXXXX", (sizeof(temp) - strlen(temp)) - 1); - if(mkdtemp(temp) == NULL) - { - throw 0; - } - - strncpy(tempDir, temp, sizeof(tempDir)); - temp[sizeof(tempDir) - 1] = '\0'; - - llinfos << "tempDir is " << tempDir << llendl; - - err = FSPathMakeRef((UInt8*)tempDir, &tempDirRef, NULL); - - if(err != noErr) - throw 0; - - chdir(tempDir); - - snprintf(temp, sizeof(temp), "SecondLife.dmg"); - - downloadFile = LLFile::fopen(temp, "wb"); /* Flawfinder: ignore */ - if(downloadFile == NULL) - { - throw 0; - } - - { - CURL *curl = curl_easy_init(); - - curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); - // curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &curl_download_callback); - curl_easy_setopt(curl, CURLOPT_FILE, downloadFile); - curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0); - curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, &curl_progress_callback_func); - curl_easy_setopt(curl, CURLOPT_URL, gUpdateURL); - curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); - - sendProgress(0, 1, CFSTR("Downloading...")); - - CURLcode result = curl_easy_perform(curl); - - curl_easy_cleanup(curl); - - if(gCancelled) - { - llinfos << "User cancel, bailing out."<< llendl; - throw 0; - } - - if(result != CURLE_OK) - { - llinfos << "Error " << result << " while downloading disk image."<< llendl; - throw 0; - } - - fclose(downloadFile); - downloadFile = NULL; - } - - begin_install: - sendProgress(0, 0, CFSTR("Mounting image...")); - LLFile::mkdir("mnt", 0700); - - // NOTE: we could add -private at the end of this command line to keep the image from showing up in the Finder, - // but if our cleanup fails, this makes it much harder for the user to unmount the image. - std::string mountOutput; - boost::format cmdFormat("hdiutil attach %s -mountpoint mnt"); - cmdFormat % dmgName; - FILE* mounter = popen(cmdFormat.str().c_str(), "r"); /* Flawfinder: ignore */ - - if(mounter == NULL) - { - llinfos << "Failed to mount disk image, exiting."<< llendl; - throw 0; - } - - // We need to scan the output from hdiutil to find the device node it uses to attach the disk image. - // If we don't have this information, we can't detach it later. - while(mounter != NULL) - { - size_t len = fread(temp, 1, sizeof(temp)-1, mounter); - temp[len] = 0; - mountOutput.append(temp); - if(len < sizeof(temp)-1) - { - // End of file or error. - int result = pclose(mounter); - if(result != 0) - { - // NOTE: We used to abort here, but pclose() started returning - // -1, possibly when the size of the DMG passed a certain point - llinfos << "Unexpected result closing pipe: " << result << llendl; - } - mounter = NULL; - } - } - - if(!mountOutput.empty()) - { - const char *s = mountOutput.c_str(); - const char *prefix = "/dev/"; - char *sub = strstr(s, prefix); - - if(sub != NULL) - { - sub += strlen(prefix); /* Flawfinder: ignore */ - sscanf(sub, "%1023s", deviceNode); /* Flawfinder: ignore */ - } - } - - if(deviceNode[0] != 0) - { - llinfos << "Disk image attached on /dev/" << deviceNode << llendl; - } - else - { - llinfos << "Disk image device node not found!" << llendl; - throw 0; - } - - // Get an FSRef to the new application on the disk image - FSRef sourceRef; - FSRef mountRef; - snprintf(temp, sizeof(temp), "%s/mnt", tempDir); - - llinfos << "Disk image mount point is: " << temp << llendl; - - err = FSPathMakeRef((UInt8 *)temp, &mountRef, NULL); - if(err != noErr) - { - llinfos << "Couldn't make FSRef to disk image mount point." << llendl; - throw 0; - } - - sendProgress(0, 0, CFSTR("Searching for the app bundle...")); - err = findAppBundleOnDiskImage(&mountRef, &sourceRef); - if(err != noErr) - { - llinfos << "Couldn't find application bundle on mounted disk image." << llendl; - throw 0; - } - else - { - llinfos << "found the bundle." << llendl; - } - - sendProgress(0, 0, CFSTR("Preparing to copy files...")); - - FSRef asideRef; - char aside[MAX_PATH]; /* Flawfinder: ignore */ - - // this will hold the name of the destination target - CFStringRef appNameRef; - - if(replacingTarget) - { - // Get the name of the target we're replacing - HFSUniStr255 appNameUniStr; - err = FSGetCatalogInfo(&targetRef, 0, NULL, &appNameUniStr, NULL, NULL); - if(err != noErr) - throw 0; - appNameRef = FSCreateStringFromHFSUniStr(NULL, &appNameUniStr); - - // Move aside old version (into work directory) - err = FSMoveObject(&targetRef, &tempDirRef, &asideRef); - if(err != noErr) - { - llwarns << "failed to move aside old version (error code " << - err << ")" << llendl; - throw 0; - } - - // Grab the path for later use. - err = FSRefMakePath(&asideRef, (UInt8*)aside, sizeof(aside)); - } - else - { - // Construct the name of the target based on the product name - char appName[MAX_PATH]; /* Flawfinder: ignore */ - snprintf(appName, sizeof(appName), "%s.app", gProductName); - appNameRef = CFStringCreateWithCString(NULL, appName, kCFStringEncodingUTF8); - } - - sendProgress(0, 0, CFSTR("Copying files...")); - - llinfos << "Starting copy..." << llendl; - - // Copy the new version from the disk image to the target location. - err = FSCopyObjectSync( - &sourceRef, - &targetParentRef, - appNameRef, - &targetRef, - kFSFileOperationDefaultOptions); - - // Grab the path for later use. - err = FSRefMakePath(&targetRef, (UInt8*)target, sizeof(target)); - if(err != noErr) - throw 0; - - llinfos << "Copy complete. Target = " << target << llendl; - - if(err != noErr) - { - // Something went wrong during the copy. Attempt to put the old version back and bail. - (void)FSDeleteObject(&targetRef); - if(replacingTarget) - { - (void)FSMoveObject(&asideRef, &targetParentRef, NULL); - } - throw 0; - } - else - { - // The update has succeeded. Clear the cache directory. - - sendProgress(0, 0, CFSTR("Clearing cache...")); - - llinfos << "Clearing cache..." << llendl; - - gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,""), "*.*"); - - llinfos << "Clear complete." << llendl; - - } - } - catch(...) - { - if(!gCancelled) - if(gFailure == noErr) - gFailure = -1; - } - - // Failures from here on out are all non-fatal and not reported. - sendProgress(0, 3, CFSTR("Cleaning up...")); - - // Close disk image file if necessary - if(downloadFile != NULL) - { - llinfos << "Closing download file." << llendl; - - fclose(downloadFile); - downloadFile = NULL; - } - - sendProgress(1, 3); - // Unmount image - if(deviceNode[0] != 0) - { - llinfos << "Detaching disk image." << llendl; - - snprintf(temp, sizeof(temp), "hdiutil detach '%s'", deviceNode); - system(temp); /* Flawfinder: ignore */ - } - - sendProgress(2, 3); - - // Move work directory to the trash - if(tempDir[0] != 0) - { - llinfos << "Moving work directory to the trash." << llendl; - - FSRef trashRef; - OSStatus err = FSMoveObjectToTrashSync(&tempDirRef, &trashRef, 0); - if(err != noErr) { - llwarns << "failed to move files to trash, (error code " << - err << ")" << llendl; - } - } - - if(!gCancelled && !gFailure && (target[0] != 0)) - { - llinfos << "Touching application bundle." << llendl; - - snprintf(temp, sizeof(temp), "touch '%s'", target); - system(temp); /* Flawfinder: ignore */ - - llinfos << "Launching updated application." << llendl; - - snprintf(temp, sizeof(temp), "open '%s'", target); - system(temp); /* Flawfinder: ignore */ - } - - sendDone(); - - return(NULL); -} - -#if LL_DARWIN -#pragma GCC diagnostic warning "-Wdeprecated-declarations" -#endif diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp index 93d2a8fa6e..ff1ed8bfbc 100755 --- a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp +++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp @@ -28,26 +28,26 @@ #include "linden_common.h" -#if defined(LL_DARWIN) - #include <QuickTime/QuickTime.h> -#elif defined(LL_WINDOWS) - #include "llwin32headers.h" - #include "MacTypes.h" - #include "QTML.h" - #include "Movies.h" - #include "QDoffscreen.h" - #include "FixMath.h" - #include "QTLoadLibraryUtils.h" -#endif - #include "llgl.h" - + #include "llplugininstance.h" #include "llpluginmessage.h" #include "llpluginmessageclasses.h" #include "media_plugin_base.h" - + #if LL_QUICKTIME_ENABLED + +#if defined(LL_DARWIN) +#include <QuickTime/QuickTime.h> +#elif defined(LL_WINDOWS) +#include "llwin32headers.h" +#include "MacTypes.h" +#include "QTML.h" +#include "Movies.h" +#include "QDoffscreen.h" +#include "FixMath.h" +#include "QTLoadLibraryUtils.h" +#endif diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index eb7bddce33..5f4c1c5aa9 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -253,6 +253,7 @@ set(viewer_SOURCE_FILES llfloaterinspect.cpp llfloaterinventory.cpp llfloaterjoystick.cpp + llfloaterlagmeter.cpp llfloaterland.cpp llfloaterlandholdings.cpp llfloatermap.cpp @@ -861,6 +862,7 @@ set(viewer_HEADER_FILES llfloaterinspect.h llfloaterinventory.h llfloaterjoystick.h + llfloaterlagmeter.h llfloaterland.h llfloaterlandholdings.h llfloatermap.h @@ -1769,7 +1771,6 @@ if (WINDOWS) media_plugin_webkit winmm_shim windows-crash-logger - windows-updater ) if (FMODEX) @@ -1815,7 +1816,6 @@ if (WINDOWS) add_dependencies(${VIEWER_BINARY_NAME} SLPlugin - windows-updater windows-crash-logger ) diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 03d7b8fb9b..82a60c0bb1 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -3.7.15 +3.7.20 diff --git a/indra/newview/app_settings/filters/BlackAndWhite.xml b/indra/newview/app_settings/filters/BlackAndWhite.xml index 101ed8233a..7894628d29 100644 --- a/indra/newview/app_settings/filters/BlackAndWhite.xml +++ b/indra/newview/app_settings/filters/BlackAndWhite.xml @@ -1,20 +1,6 @@ <llsd> <array> <array> - <string>linearize</string> - <real>0.01</real> - <real>1.0</real> - <real>1.0</real> - <real>1.0</real> - </array> - <array> - <string>contrast</string> - <real>0.8</real> - <real>1.0</real> - <real>1.0</real> - <real>1.0</real> - </array> - <array> <string>grayscale</string> </array> </array> diff --git a/indra/newview/app_settings/filters/Sepia.xml b/indra/newview/app_settings/filters/Sepia.xml index 3d577b2998..81d7caf0eb 100644 --- a/indra/newview/app_settings/filters/Sepia.xml +++ b/indra/newview/app_settings/filters/Sepia.xml @@ -1,31 +1,6 @@ <llsd> <array> <array> - <string>linearize</string> - <real>0.01</real> - <real>1.0</real> - <real>1.0</real> - <real>1.0</real> - </array> - <array> - <string>contrast</string> - <real>0.8</real> - <real>1.0</real> - <real>1.0</real> - <real>1.0</real> - </array> - <array> - <string>stencil</string> - <string>vignette</string> - <string>fade</string> - <real>0.5</real> - <real>1.0</real> - <real>0.0</real> - <real>0.0</real> - <real>1.0</real> - <real>4.0</real> - </array> - <array> <string>sepia</string> </array> </array> diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini index 17c70ef1c5..4972472f67 100755 --- a/indra/newview/app_settings/keywords.ini +++ b/indra/newview/app_settings/keywords.ini @@ -628,22 +628,22 @@ RCERR_CAST_TIME_EXCEEDED TODO: add documentation RCERR_SIM_PERF_LOW TODO: add documentation RCERR_UNKNOWN TODO: add documentation -ESTATE_ACCESS_ALLOWED_AGENT_ADD TODO: add documentation -ESTATE_ACCESS_ALLOWED_AGENT_REMOVE TODO: add documentation -ESTATE_ACCESS_ALLOWED_GROUP_ADD TODO: add documentation -ESTATE_ACCESS_ALLOWED_GROUP_REMOVE TODO: add documentation -ESTATE_ACCESS_BANNED_AGENT_ADD TODO: add documentation -ESTATE_ACCESS_BANNED_AGENT_REMOVE TODO: add documentation +ESTATE_ACCESS_ALLOWED_AGENT_ADD Passed to llManageEstateAccess to add the agent to this estate's Allowed Residents list +ESTATE_ACCESS_ALLOWED_AGENT_REMOVE Passed to llManageEstateAccess to remove the agent from this estate's Allowed Residents list +ESTATE_ACCESS_ALLOWED_GROUP_ADD Passed to llManageEstateAccess to add the group to this estate's Allowed groups list +ESTATE_ACCESS_ALLOWED_GROUP_REMOVE Passed to llManageEstateAccess to remove the group from this estate's Allowed groups list +ESTATE_ACCESS_BANNED_AGENT_ADD Passed to llManageEstateAccess to add the agent to this estate's Banned residents list +ESTATE_ACCESS_BANNED_AGENT_REMOVE Passed to llManageEstateAccess to remove the agent from this estate's Banned residents list DENSITY TODO: add documentation FRICTION TODO: add documentation RESTITUTION TODO: add documentation GRAVITY_MULTIPLIER TODO: add documentation -KFM_COMMAND TODO: add documentation -KFM_CMD_PLAY TODO: add documentation -KFM_CMD_STOP TODO: add documentation -KFM_CMD_PAUSE TODO: add documentation +KFM_COMMAND Command used in the options parameter of llSetKeyframedMotion, followed by one of: KFM_CMD_STOP, KFM_CMD_PLAY, KFM_CMD_PAUSE to play, stop or pause the motion +KFM_CMD_PLAY Command used in the options parameter llSetKeyframedMotion. Resumes the animation previously stopped by KFM_CMD_STOP or KFM_CMD_PAUSE +KFM_CMD_STOP Command used in the options parameter llSetKeyframedMotion. Stops the animation and resets it at the start of motion +KFM_CMD_PAUSE Command used in the options parameter llSetKeyframedMotion. Stops the animation but doesn t reset it at the start of motion. KFM_CMD_SET_MODE TODO: add documentation KFM_MODE TODO: add documentation KFM_FORWARD TODO: add documentation @@ -657,18 +657,18 @@ KFM_TRANSLATION TODO: add documentation CHARACTER_CMD_STOP TODO: add documentation CHARACTER_CMD_JUMP TODO: add documentation -CHARACTER_DESIRED_SPEED TODO: add documentation -CHARACTER_RADIUS TODO: add documentation -CHARACTER_LENGTH TODO: add documentation -CHARACTER_ORIENTATION TODO: add documentation -CHARACTER_AVOIDANCE_MODE TODO: add documentation +CHARACTER_DESIRED_SPEED Constant used to indicate that the following argument is the desired speed for a Pathfinding character. +CHARACTER_RADIUS Constant used to indicate that the following argument is the radius of the capsule for a Pathfinding character. +CHARACTER_LENGTH Constant used to indicate that the following argument is the length of the capsule for a Pathfinding character. +CHARACTER_ORIENTATION Constant used to indicate that the following argument is the orientation of the capsule for a Pathfinding character. +CHARACTER_AVOIDANCE_MODE Allows you to specify that a character should not try to avoid other characters, should not try to avoid dynamic obstacles, or both. Is combined with a mask bit flags PURSUIT_OFFSET TODO: add documentation REQUIRE_LINE_OF_SIGHT TODO: add documentation PURSUIT_FUZZ_FACTOR TODO: add documentation PURSUIT_INTERCEPT TODO: add documentation FORCE_DIRECT_PATH TODO: add documentation -VERTICAL TODO: add documentation -HORIZONTAL TODO: add documentation +VERTICAL Constant to indicate that the orientation of the capsule for a Pathfinding character is vertical. +HORIZONTAL Constant to indicate that the orientation of the capsule for a Pathfinding character is horizontal. AVOID_CHARACTERS TODO: add documentation AVOID_DYNAMIC_OBSTACLES TODO: add documentation @@ -683,12 +683,12 @@ PU_FAILURE_UNREACHABLE Goal is no longer reachable for some reason - e PU_GOAL_REACHED Character has reached the goal and will stop or choose a new goal (if wandering). PU_SLOWDOWN_DISTANCE_REACHED Character is near current goal. -CHARACTER_TYPE TODO: add documentation -CHARACTER_TYPE_A TODO: add documentation -CHARACTER_TYPE_B TODO: add documentation -CHARACTER_TYPE_C TODO: add documentation -CHARACTER_TYPE_D TODO: add documentation -CHARACTER_TYPE_NONE TODO: add documentation +CHARACTER_TYPE Specifies which walkability coefficient will be used by this character. Used in combination with one of the character type flags. +CHARACTER_TYPE_A Used for character types that you prefer move in a way consistent with humanoids. +CHARACTER_TYPE_B Used for character types that you prefer move in a way consistent with wild animals or off road vehicles. +CHARACTER_TYPE_C Used for mechanical character types or road going vehicles. +CHARACTER_TYPE_D Used for character types that are not consistent with the A, B, or C type. +CHARACTER_TYPE_NONE Used to set no specific character type. TRAVERSAL_TYPE TODO: add documentation TRAVERSAL_TYPE_SLOW TODO: add documentation diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index bd035899d0..dfd8e80361 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -80,7 +80,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <integer>0</integer> + <integer>1</integer> </map> <key>AgentPause</key> <map> @@ -4196,6 +4196,17 @@ <key>Value</key> <integer>255</integer> </map> + <key>ForceLoginURL</key> + <map> + <key>Comment</key> + <string>Force a specified URL for login page content - used if exists</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>String</string> + <key>Value</key> + <string></string> + </map> <key>ForceShowGrid</key> <map> <key>Comment</key> @@ -4471,6 +4482,28 @@ <key>Value</key> <string /> </map> + <key>HttpPipelining</key> + <map> + <key>Comment</key> + <string>If true, viewer will attempt to pipeline HTTP requests.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>HttpRangeRequestsDisable</key> + <map> + <key>Comment</key> + <string>If true, viewer will not issue GET requests with 'Range:' headers for meshes and textures. May resolve problems with certain ISPs and networking gear.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>IMShowTimestamps</key> <map> <key>Comment</key> @@ -5329,6 +5362,18 @@ <key>Value</key> <integer>1</integer> </map> + <key>LoginContentVersion</key> + <map> + <key>Comment</key> + <string>Version of login page web based content to display</string> + <key>Persist</key> + <integer>0</integer> + <key>Type</key> + <string>String</string> + <key>Value</key> + <string>2</string> + </map> + <key>LoginSRVTimeout</key> <map> <key>Comment</key> @@ -6133,16 +6178,16 @@ <integer>0</integer> </map> <key>MemoryLogFrequency</key> - <map> - <key>Comment</key> - <string>Seconds between display of Memory in log (0 for never)</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>F32</string> - <key>Value</key> + <map> + <key>Comment</key> + <string>Seconds between display of Memory in log (0 for never)</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> <real>30.0</real> - </map> + </map> <key>MemoryPrivatePoolEnabled</key> <map> <key>Comment</key> @@ -11467,17 +11512,6 @@ <key>Value</key> <integer>0</integer> </map> - <key>SnapshotFiltersEnabled</key> - <map> - <key>Comment</key> - <string>Enable filters in the Snapshot Advanced panel (experimental).</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>0</integer> - </map> <key>SnapshotFormat</key> <map> <key>Comment</key> @@ -13227,7 +13261,7 @@ <key>Value</key> <string>Default</string> </map> - <key>UseExternalBrowser</key> + <key>UseExternalBrowser</key> <!-- deprecated (see MAINT-4127) --> <map> <key>Comment</key> <string>Use default browser when opening web pages instead of in-world browser.</string> @@ -13238,6 +13272,17 @@ <key>Value</key> <boolean>1</boolean> </map> + <key>PreferredBrowserBehavior</key> + <map> + <key>Comment</key> + <string>Use system browser for any links (0), use builtin browser for SL links and system one for others (1) or use builtin browser only (2).</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <integer>1</integer> + </map> <key>UseFreezeFrame</key> <map> <key>Comment</key> @@ -14228,6 +14273,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>LeaveMouselook</key> + <map> + <key>Comment</key> + <string>Exit Mouselook mode via S or Down Arrow keys while sitting </string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>TextureLoggingThreshold</key> <map> <key>Comment</key> @@ -15466,6 +15522,17 @@ <key>Value</key> <string /> </map> + <key>WearFolderLimit</key> + <map> + <key>Comment</key> + <string>Limits number of items in the folder that can be replaced/added to current outfit</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <integer>125</integer> + </map> <key>EveryoneCopy</key> <map> <key>Comment</key> diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index 500151c935..fc6f1f6395 100755 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -312,7 +312,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <integer>0</integer> + <integer>1</integer> </map> <!-- End of back compatibility settings --> </map> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index bd6025feea..e5a90e8a28 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -3712,6 +3712,12 @@ bool LLAgent::teleportCore(bool is_local) return false; } + // force stand up and stop a sitting animation (if any), see MAINT-3969 + if (isAgentAvatarValid() && gAgentAvatarp->getParent() && gAgentAvatarp->isSitting()) + { + gAgentAvatarp->getOffObject(); + } + #if 0 // This should not exist. It has been added, removed, added, and now removed again. // This change needs to come from the simulator. Otherwise, the agent ends up out of @@ -3887,7 +3893,7 @@ void LLAgent::teleportRequest( bool look_at_from_camera) { LLViewerRegion* regionp = getRegion(); - bool is_local = (region_handle == to_region_handle(getPositionGlobal())); + bool is_local = (region_handle == regionp->getHandle()); if(regionp && teleportCore(is_local)) { LL_INFOS("") << "TeleportLocationRequest: '" << region_handle << "':" @@ -4054,7 +4060,12 @@ void LLAgent::teleportViaLocationLookAt(const LLVector3d& pos_global) void LLAgent::doTeleportViaLocationLookAt(const LLVector3d& pos_global) { mbTeleportKeepsLookAt = true; - gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); // detach camera form avatar, so it keeps direction + + if(!gAgentCamera.isfollowCamLocked()) + { + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); // detach camera form avatar, so it keeps direction + } + U64 region_handle = to_region_handle(pos_global); LLVector3 pos_local = (LLVector3)(pos_global - from_region_handle(region_handle)); teleportRequest(region_handle, pos_local, getTeleportKeepsLookAt()); diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 7b0496ea45..2356a84688 100755 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -2721,6 +2721,11 @@ void LLAgentCamera::lookAtLastChat() } } +bool LLAgentCamera::isfollowCamLocked() +{ + return mFollowCam.getPositionLocked(); +} + BOOL LLAgentCamera::setPointAt(EPointAtType target_type, LLViewerObject *object, LLVector3 position) { // disallow pointing at attachments and avatars diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h index 00fa6ea189..4d0f9a80de 100755 --- a/indra/newview/llagentcamera.h +++ b/indra/newview/llagentcamera.h @@ -155,6 +155,7 @@ private: //-------------------------------------------------------------------- public: void setUsingFollowCam(bool using_follow_cam); + bool isfollowCamLocked(); private: LLFollowCam mFollowCam; // Ventrella diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 890fc9a8d9..49fedb8df8 100755 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1035,6 +1035,7 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it if (mismatched == 0) { LL_DEBUGS("Avatar") << "no changes, bailing out" << LL_ENDL; + mCOFChangeInProgress = false; return; } diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index da66ea357a..96de15bf75 100755 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -380,8 +380,15 @@ void AISUpdate::parseMeta(const LLSD& update) it != cat_ids.end(); ++it) { LLViewerInventoryCategory *cat = gInventory.getCategory(*it); - mCatDescendentDeltas[cat->getParentUUID()]--; - mObjectsDeletedIds.insert(*it); + if(cat) + { + mCatDescendentDeltas[cat->getParentUUID()]--; + mObjectsDeletedIds.insert(*it); + } + else + { + LL_WARNS("Inventory") << "removed category not found " << *it << LL_ENDL; + } } // parse _categories_items_removed -> mObjectsDeletedIds @@ -392,8 +399,15 @@ void AISUpdate::parseMeta(const LLSD& update) it != item_ids.end(); ++it) { LLViewerInventoryItem *item = gInventory.getItem(*it); - mCatDescendentDeltas[item->getParentUUID()]--; - mObjectsDeletedIds.insert(*it); + if(item) + { + mCatDescendentDeltas[item->getParentUUID()]--; + mObjectsDeletedIds.insert(*it); + } + else + { + LL_WARNS("Inventory") << "removed item not found " << *it << LL_ENDL; + } } // parse _broken_links_removed -> mObjectsDeletedIds @@ -403,8 +417,15 @@ void AISUpdate::parseMeta(const LLSD& update) it != broken_link_ids.end(); ++it) { LLViewerInventoryItem *item = gInventory.getItem(*it); - mCatDescendentDeltas[item->getParentUUID()]--; - mObjectsDeletedIds.insert(*it); + if(item) + { + mCatDescendentDeltas[item->getParentUUID()]--; + mObjectsDeletedIds.insert(*it); + } + else + { + LL_WARNS("Inventory") << "broken link not found " << *it << LL_ENDL; + } } // parse _created_items @@ -795,7 +816,7 @@ void AISUpdate::doUpdate() // Since this is a copy of the category *before* the accounting update, above, // we need to transfer back the updated version/descendent count. LLViewerInventoryCategory* curr_cat = gInventory.getCategory(new_category->getUUID()); - if (NULL == curr_cat) + if (!curr_cat) { LL_WARNS("Inventory") << "Failed to update unknown category " << new_category->getUUID() << LL_ENDL; } diff --git a/indra/newview/llappcorehttp.cpp b/indra/newview/llappcorehttp.cpp index 70dcffefb2..f5f224b83e 100755 --- a/indra/newview/llappcorehttp.cpp +++ b/indra/newview/llappcorehttp.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2012&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2012-2013, Linden Research, Inc. + * Copyright (C) 2012-2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -40,69 +40,79 @@ // be open at a time. const F64 LLAppCoreHttp::MAX_THREAD_WAIT_TIME(10.0); +const long LLAppCoreHttp::PIPELINING_DEPTH(5L); + +// Default and dynamic values for classes static const struct { - LLAppCoreHttp::EAppPolicy mPolicy; U32 mDefault; U32 mMin; U32 mMax; U32 mRate; + bool mPipelined; std::string mKey; const char * mUsage; -} init_data[] = // Default and dynamic values for classes +} init_data[LLAppCoreHttp::AP_COUNT] = { - { - LLAppCoreHttp::AP_DEFAULT, 8, 8, 8, 0, + { // AP_DEFAULT + 8, 8, 8, 0, false, "", "other" }, - { - LLAppCoreHttp::AP_TEXTURE, 8, 1, 12, 0, + { // AP_TEXTURE + 8, 1, 12, 0, true, "TextureFetchConcurrency", "texture fetch" }, - { - LLAppCoreHttp::AP_MESH1, 32, 1, 128, 100, + { // AP_MESH1 + 32, 1, 128, 0, false, "MeshMaxConcurrentRequests", "mesh fetch" }, - { - LLAppCoreHttp::AP_MESH2, 8, 1, 32, 100, + { // AP_MESH2 + 8, 1, 32, 0, true, "Mesh2MaxConcurrentRequests", "mesh2 fetch" }, - { - LLAppCoreHttp::AP_LARGE_MESH, 2, 1, 8, 0, + { // AP_LARGE_MESH + 2, 1, 8, 0, false, "", "large mesh fetch" }, - { - LLAppCoreHttp::AP_UPLOADS, 2, 1, 8, 0, + { // AP_UPLOADS + 2, 1, 8, 0, false, "", "asset upload" }, - { - LLAppCoreHttp::AP_LONG_POLL, 32, 32, 32, 0, + { // AP_LONG_POLL + 32, 32, 32, 0, false, "", "long poll" + }, + { // AP_INVENTORY + 4, 1, 4, 0, false, + "", + "inventory" } }; static void setting_changed(); +LLAppCoreHttp::HttpClass::HttpClass() + : mPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID), + mConnLimit(0U), + mPipelined(false) +{} + + LLAppCoreHttp::LLAppCoreHttp() : mRequest(NULL), mStopHandle(LLCORE_HTTP_HANDLE_INVALID), mStopRequested(0.0), - mStopped(false) -{ - for (int i(0); i < LL_ARRAY_SIZE(mPolicies); ++i) - { - mPolicies[i] = LLCore::HttpRequest::DEFAULT_POLICY_ID; - mSettings[i] = 0U; - } -} + mStopped(false), + mPipelined(true) +{} LLAppCoreHttp::~LLAppCoreHttp() @@ -157,27 +167,28 @@ void LLAppCoreHttp::init() } // Setup default policy and constrain if directed to - mPolicies[AP_DEFAULT] = LLCore::HttpRequest::DEFAULT_POLICY_ID; + mHttpClasses[AP_DEFAULT].mPolicy = LLCore::HttpRequest::DEFAULT_POLICY_ID; // Setup additional policies based on table and some special rules + llassert(LL_ARRAY_SIZE(init_data) == AP_COUNT); for (int i(0); i < LL_ARRAY_SIZE(init_data); ++i) { - const EAppPolicy policy(init_data[i].mPolicy); + const EAppPolicy app_policy(static_cast<EAppPolicy>(i)); - if (AP_DEFAULT == policy) + if (AP_DEFAULT == app_policy) { // Pre-created continue; } - mPolicies[policy] = LLCore::HttpRequest::createPolicyClass(); - if (! mPolicies[policy]) + mHttpClasses[app_policy].mPolicy = LLCore::HttpRequest::createPolicyClass(); + if (! mHttpClasses[app_policy].mPolicy) { // Use default policy (but don't accidentally modify default) LL_WARNS("Init") << "Failed to create HTTP policy class for " << init_data[i].mUsage << ". Using default policy." << LL_ENDL; - mPolicies[policy] = mPolicies[AP_DEFAULT]; + mHttpClasses[app_policy].mPolicy = mHttpClasses[AP_DEFAULT].mPolicy; continue; } } @@ -196,9 +207,27 @@ void LLAppCoreHttp::init() << LL_ENDL; } + // Signal for global pipelining preference from settings + static const std::string http_pipelining("HttpPipelining"); + if (gSavedSettings.controlExists(http_pipelining)) + { + LLPointer<LLControlVariable> cntrl_ptr = gSavedSettings.getControl(http_pipelining); + if (cntrl_ptr.isNull()) + { + LL_WARNS("Init") << "Unable to set signal on global setting '" << http_pipelining + << "'" << LL_ENDL; + } + else + { + mPipelinedSignal = cntrl_ptr->getCommitSignal()->connect(boost::bind(&setting_changed)); + } + } + // Register signals for settings and state changes for (int i(0); i < LL_ARRAY_SIZE(init_data); ++i) { + const EAppPolicy app_policy(static_cast<EAppPolicy>(i)); + if (! init_data[i].mKey.empty() && gSavedSettings.controlExists(init_data[i].mKey)) { LLPointer<LLControlVariable> cntrl_ptr = gSavedSettings.getControl(init_data[i].mKey); @@ -209,7 +238,7 @@ void LLAppCoreHttp::init() } else { - mSettingsSignal[i] = cntrl_ptr->getCommitSignal()->connect(boost::bind(&setting_changed)); + mHttpClasses[app_policy].mSettingsSignal = cntrl_ptr->getCommitSignal()->connect(boost::bind(&setting_changed)); } } } @@ -261,10 +290,11 @@ void LLAppCoreHttp::cleanup() } } - for (int i(0); i < LL_ARRAY_SIZE(init_data); ++i) + for (int i(0); i < LL_ARRAY_SIZE(mHttpClasses); ++i) { - mSettingsSignal[i].disconnect(); + mHttpClasses[i].mSettingsSignal.disconnect(); } + mPipelinedSignal.disconnect(); delete mRequest; mRequest = NULL; @@ -278,30 +308,84 @@ void LLAppCoreHttp::cleanup() } } + void LLAppCoreHttp::refreshSettings(bool initial) { LLCore::HttpStatus status; + + // Global pipelining setting + bool pipeline_changed(false); + static const std::string http_pipelining("HttpPipelining"); + if (gSavedSettings.controlExists(http_pipelining)) + { + // Default to true (in ctor) if absent. + bool pipelined(gSavedSettings.getBOOL(http_pipelining)); + if (pipelined != mPipelined) + { + mPipelined = pipelined; + pipeline_changed = true; + } + } for (int i(0); i < LL_ARRAY_SIZE(init_data); ++i) { - const EAppPolicy policy(init_data[i].mPolicy); + const EAppPolicy app_policy(static_cast<EAppPolicy>(i)); - // Set any desired throttle - if (initial && init_data[i].mRate) + if (initial) { - // Init-time only, can use the static setters here - status = LLCore::HttpRequest::setStaticPolicyOption(LLCore::HttpRequest::PO_THROTTLE_RATE, - mPolicies[policy], - init_data[i].mRate, - NULL); - if (! status) + // Init-time only settings, can use the static setters here + + if (init_data[i].mRate) { - LL_WARNS("Init") << "Unable to set " << init_data[i].mUsage - << " throttle rate. Reason: " << status.toString() - << LL_ENDL; + // Set any desired throttle + status = LLCore::HttpRequest::setStaticPolicyOption(LLCore::HttpRequest::PO_THROTTLE_RATE, + mHttpClasses[app_policy].mPolicy, + init_data[i].mRate, + NULL); + if (! status) + { + LL_WARNS("Init") << "Unable to set " << init_data[i].mUsage + << " throttle rate. Reason: " << status.toString() + << LL_ENDL; + } } + } + // Init- or run-time settings. Must use the queued request API. + + // Pipelining changes + if (initial || pipeline_changed) + { + const bool to_pipeline(mPipelined && init_data[i].mPipelined); + if (to_pipeline != mHttpClasses[app_policy].mPipelined) + { + // Pipeline election changing, set dynamic option via request + + LLCore::HttpHandle handle; + const long new_depth(to_pipeline ? PIPELINING_DEPTH : 0); + + handle = mRequest->setPolicyOption(LLCore::HttpRequest::PO_PIPELINING_DEPTH, + mHttpClasses[app_policy].mPolicy, + new_depth, + NULL); + if (LLCORE_HTTP_HANDLE_INVALID == handle) + { + status = mRequest->getStatus(); + LL_WARNS("Init") << "Unable to set " << init_data[i].mUsage + << " pipelining. Reason: " << status.toString() + << LL_ENDL; + } + else + { + LL_DEBUGS("Init") << "Changed " << init_data[i].mUsage + << " pipelining. New value: " << new_depth + << LL_ENDL; + mHttpClasses[app_policy].mPipelined = to_pipeline; + } + } + } + // Get target connection concurrency value U32 setting(init_data[i].mDefault); if (! init_data[i].mKey.empty() && gSavedSettings.controlExists(init_data[i].mKey)) @@ -314,38 +398,61 @@ void LLAppCoreHttp::refreshSettings(bool initial) } } - if (! initial && setting == mSettings[policy]) + if (initial || setting != mHttpClasses[app_policy].mConnLimit || pipeline_changed) { - // Unchanged, try next setting - continue; - } - - // Set it and report - // *TODO: These are intended to be per-host limits when we can - // support that in llcorehttp/libcurl. - LLCore::HttpHandle handle; - handle = mRequest->setPolicyOption(LLCore::HttpRequest::PO_CONNECTION_LIMIT, - mPolicies[policy], - setting, NULL); - if (LLCORE_HTTP_HANDLE_INVALID == handle) - { - status = mRequest->getStatus(); - LL_WARNS("Init") << "Unable to set " << init_data[i].mUsage - << " concurrency. Reason: " << status.toString() - << LL_ENDL; - } - else - { - LL_DEBUGS("Init") << "Changed " << init_data[i].mUsage - << " concurrency. New value: " << setting - << LL_ENDL; - mSettings[policy] = setting; - if (initial && setting != init_data[i].mDefault) + // Set it and report. Strategies depend on pipelining: + // + // No Pipelining. Llcorehttp manages connections itself based + // on the PO_CONNECTION_LIMIT setting. Set both limits to the + // same value for logical consistency. In the future, may + // hand over connection management to libcurl after the + // connection cache has been better vetted. + // + // Pipelining. Libcurl is allowed to manage connections to a + // great degree. Steady state will connection limit based on + // the per-host setting. Transitions (region crossings, new + // avatars, etc.) can request additional outbound connections + // to other servers via 2X total connection limit. + // + LLCore::HttpHandle handle; + handle = mRequest->setPolicyOption(LLCore::HttpRequest::PO_CONNECTION_LIMIT, + mHttpClasses[app_policy].mPolicy, + (mHttpClasses[app_policy].mPipelined ? 2 * setting : setting), + NULL); + if (LLCORE_HTTP_HANDLE_INVALID == handle) { - LL_INFOS("Init") << "Application settings overriding default " << init_data[i].mUsage - << " concurrency. New value: " << setting + status = mRequest->getStatus(); + LL_WARNS("Init") << "Unable to set " << init_data[i].mUsage + << " concurrency. Reason: " << status.toString() << LL_ENDL; } + else + { + handle = mRequest->setPolicyOption(LLCore::HttpRequest::PO_PER_HOST_CONNECTION_LIMIT, + mHttpClasses[app_policy].mPolicy, + setting, + NULL); + if (LLCORE_HTTP_HANDLE_INVALID == handle) + { + status = mRequest->getStatus(); + LL_WARNS("Init") << "Unable to set " << init_data[i].mUsage + << " per-host concurrency. Reason: " << status.toString() + << LL_ENDL; + } + else + { + LL_DEBUGS("Init") << "Changed " << init_data[i].mUsage + << " concurrency. New value: " << setting + << LL_ENDL; + mHttpClasses[app_policy].mConnLimit = setting; + if (initial && setting != init_data[i].mDefault) + { + LL_INFOS("Init") << "Application settings overriding default " << init_data[i].mUsage + << " concurrency. New value: " << setting + << LL_ENDL; + } + } + } } } } diff --git a/indra/newview/llappcorehttp.h b/indra/newview/llappcorehttp.h index 40e3042b84..37d7a737e7 100755 --- a/indra/newview/llappcorehttp.h +++ b/indra/newview/llappcorehttp.h @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2012&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2012-2013, Linden Research, Inc. + * Copyright (C) 2012-2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -41,6 +41,8 @@ class LLAppCoreHttp : public LLCore::HttpHandler { public: + static const long PIPELINING_DEPTH; + typedef LLCore::HttpRequest::policy_t policy_t; enum EAppPolicy @@ -62,15 +64,15 @@ public: /// Texture fetching policy class. Used to /// download textures via capability or SSA /// baking service. Deep queueing of requests. - /// Do not share. + /// Do not share. GET requests only. /// - /// Destination: simhost:12046 & bake-texture:80 + /// Destination: simhost:12046 & {bake-texture,cdn}:80 /// Protocol: http: /// Transfer size: KB-MB /// Long poll: no /// Concurrency: high /// Request rate: high - /// Pipelined: soon + /// Pipelined: yes AP_TEXTURE, /// Legacy mesh fetching policy class. Used to @@ -90,15 +92,16 @@ public: /// download textures via 'GetMesh2' capability. /// Used when fetch request (typically one LOD) /// is 'small', currently defined as 2MB. - /// Very deeply queued. Do not share. + /// Very deeply queued. Do not share. GET + /// requests only. /// - /// Destination: simhost:12046 + /// Destination: simhost:12046 & cdn:80 /// Protocol: http: /// Transfer size: KB-MB /// Long poll: no /// Concurrency: high /// Request rate: high - /// Pipelined: soon + /// Pipelined: yes AP_MESH2, /// Large mesh fetching policy class. Used to @@ -110,13 +113,13 @@ public: /// traffic that can wait for longish stalls /// (default timeout 600S). /// - /// Destination: simhost:12046 + /// Destination: simhost:12046 & cdn:80 /// Protocol: http: /// Transfer size: MB /// Long poll: no /// Concurrency: low /// Request rate: low - /// Pipelined: soon + /// Pipelined: no AP_LARGE_MESH, /// Asset upload policy class. Used to store @@ -148,6 +151,20 @@ public: /// Pipelined: no AP_LONG_POLL, + /// Inventory operations (really Capabilities- + /// related operations). Mix of high-priority + /// and low-priority operations. + /// + /// Destination: simhost:12043 + /// Protocol: https: + /// Transfer size: KB-MB + /// Long poll: no + /// Concurrency: high + /// Request rate: high + /// Pipelined: no + AP_INVENTORY, + AP_REPORTING = AP_INVENTORY, // Piggy-back on inventory + AP_COUNT // Must be last }; @@ -180,7 +197,13 @@ public: // application function. policy_t getPolicy(EAppPolicy policy) const { - return mPolicies[policy]; + return mHttpClasses[policy].mPolicy; + } + + // Return whether a policy is using pipelined operations. + bool isPipelined(EAppPolicy policy) const + { + return mHttpClasses[policy].mPipelined; } // Apply initial or new settings from the environment. @@ -190,13 +213,27 @@ private: static const F64 MAX_THREAD_WAIT_TIME; private: - LLCore::HttpRequest * mRequest; // Request queue to issue shutdowns + + // PODish container for per-class settings and state. + struct HttpClass + { + public: + HttpClass(); + + public: + policy_t mPolicy; // Policy class id for the class + U32 mConnLimit; + bool mPipelined; + boost::signals2::connection mSettingsSignal; // Signal to global setting that affect this class (if any) + }; + + LLCore::HttpRequest * mRequest; // Request queue to issue shutdowns LLCore::HttpHandle mStopHandle; F64 mStopRequested; bool mStopped; - policy_t mPolicies[AP_COUNT]; // Policy class id for each connection set - U32 mSettings[AP_COUNT]; - boost::signals2::connection mSettingsSignal[AP_COUNT]; // Signals to global settings that affect us + HttpClass mHttpClasses[AP_COUNT]; + bool mPipelined; // Global setting + boost::signals2::connection mPipelinedSignal; // Signal for 'HttpPipelining' setting }; diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 9451a30341..29534a4382 100755 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1710,8 +1710,16 @@ bool LLAppearanceMgr::getCanAddToCOF(const LLUUID& outfit_cat_id) return false; } + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false); - return gInventory.hasMatchingDirectDescendent(outfit_cat_id, not_worn); + gInventory.collectDescendentsIf(outfit_cat_id, + cats, + items, + LLInventoryModel::EXCLUDE_TRASH, + not_worn); + + return items.size() > 0; } bool LLAppearanceMgr::getCanReplaceCOF(const LLUUID& outfit_cat_id) @@ -1729,8 +1737,16 @@ bool LLAppearanceMgr::getCanReplaceCOF(const LLUUID& outfit_cat_id) } // Check whether the outfit contains any wearables we aren't wearing already (STORM-702). - LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ true); - return gInventory.hasMatchingDirectDescendent(outfit_cat_id, not_worn); + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + LLFindWearablesEx is_worn(/*is_worn=*/ false, /*include_body_parts=*/ true); + gInventory.collectDescendentsIf(outfit_cat_id, + cats, + items, + LLInventoryModel::EXCLUDE_TRASH, + is_worn); + + return items.size() > 0; } void LLAppearanceMgr::purgeBaseOutfitLink(const LLUUID& category, LLPointer<LLInventoryCallback> cb) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 24150daea4..3a5008507a 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3368,11 +3368,11 @@ LLSD LLAppViewer::getViewerInfo() const // TODO: Implement media plugin version query info["QT_WEBKIT_VERSION"] = "4.7.1 (version number hard-coded)"; - if (gPacketsIn > 0) + S32 packets_in = LLViewerStats::instance().getRecording().getSum(LLStatViewer::PACKETS_IN); + if (packets_in > 0) { - LLTrace::Recording& last_frame = LLTrace::get_frame_recording().getLastRecording(); - info["PACKETS_LOST"] = last_frame.getSum(LLStatViewer::PACKETS_LOST); - info["PACKETS_IN"] = last_frame.getSum(LLStatViewer::PACKETS_IN); + info["PACKETS_LOST"] = LLViewerStats::instance().getRecording().getSum(LLStatViewer::PACKETS_LOST); + info["PACKETS_IN"] = packets_in; info["PACKETS_PCT"] = 100.f*info["PACKETS_LOST"].asReal() / info["PACKETS_IN"].asReal(); } diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index dad85a016c..8235b13118 100755 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -143,7 +143,7 @@ void LLAvatarActions::removeFriendsDialog(const uuid_vec_t& ids) LLAvatarName av_name; if(LLAvatarNameCache::get(agent_id, &av_name)) { - args["NAME"] = av_name.getDisplayName(); + args["NAME"] = av_name.getCompleteName(); } msgType = "RemoveFromFriends"; @@ -381,7 +381,7 @@ void LLAvatarActions::showOnMap(const LLUUID& id) } gFloaterWorldMap->trackAvatar(id, av_name.getDisplayName()); - LLFloaterReg::showInstance("world_map"); + LLFloaterReg::showInstance("world_map", "center"); } // static @@ -533,6 +533,14 @@ void LLAvatarActions::share(const LLUUID& id) { // we should always get here, but check to verify anyways LLIMModel::getInstance()->addMessage(session_id, SYSTEM_FROM, LLUUID::null, LLTrans::getString("share_alert"), false); + + LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::findConversation(session_id); + if (session_floater && session_floater->isMinimized()) + { + session_floater->setMinimized(false); + } + LLFloaterIMContainer *im_container = LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container"); + im_container->selectConversationPair(session_id, true); } } diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index 1b3cfb5ebd..6c5b5be720 100755 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -40,7 +40,6 @@ #include "llagent.h" #include "llavatarnamecache.h" #include "llclipboard.h" -#include "llclipboard.h" #include "llinventorybridge.h" #include "llinventoryfunctions.h" #include "llfloatersidepanelcontainer.h" @@ -51,7 +50,7 @@ #include "lltoggleablemenu.h" #include "llviewerinventory.h" #include "llviewermenu.h" -#include "llviewermenu.h" +#include "llviewernetwork.h" #include "lltooldraganddrop.h" #include "llsdserialize.h" @@ -327,6 +326,7 @@ public: gInventory.updateItem(item); gInventory.notifyObservers(); + LLFavoritesOrderStorage::instance().saveOrder(); } LLView::getWindow()->setCursor(UI_CURSOR_ARROW); @@ -1452,6 +1452,18 @@ void LLFavoritesOrderStorage::getSLURL(const LLUUID& asset_id) void LLFavoritesOrderStorage::destroyClass() { LLFavoritesOrderStorage::instance().cleanup(); + + + std::string old_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml"); + llifstream file; + file.open(old_filename); + if (file.is_open()) + { + std::string new_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml"); + LLFile::copy(old_filename,new_filename); + LLFile::remove(old_filename); + } + if (gSavedPerAccountSettings.getBOOL("ShowFavoritesOnLogin")) { LLFavoritesOrderStorage::instance().saveFavoritesSLURLs(); @@ -1498,7 +1510,7 @@ void LLFavoritesOrderStorage::saveFavoritesSLURLs() return; } - std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml"); + std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml"); llifstream in_file; in_file.open(filename); LLSD fav_llsd; @@ -1546,7 +1558,7 @@ void LLFavoritesOrderStorage::saveFavoritesSLURLs() void LLFavoritesOrderStorage::removeFavoritesRecordOfUser() { - std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml"); + std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml"); LLSD fav_llsd; llifstream file; file.open(filename); @@ -1641,6 +1653,16 @@ void LLFavoritesOrderStorage::cleanup() mSortIndexes.swap(aTempMap); } +void LLFavoritesOrderStorage::saveOrder() +{ + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + LLIsType is_type(LLAssetType::AT_LANDMARK); + LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); + gInventory.collectDescendentsIf(favorites_id, cats, items, LLInventoryModel::EXCLUDE_TRASH, is_type); + saveItemsOrder(items); +} + void LLFavoritesOrderStorage::saveItemsOrder( const LLInventoryModel::item_array_t& items ) { int sortField = 0; diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h index 211d3c4ce3..5ca1d3e8ed 100755 --- a/indra/newview/llfavoritesbar.h +++ b/indra/newview/llfavoritesbar.h @@ -203,6 +203,8 @@ public: // Is used to save order for Favorites folder. void saveItemsOrder(const LLInventoryModel::item_array_t& items); + void saveOrder(); + void rearrangeFavoriteLandmarks(const LLUUID& source_item_id, const LLUUID& target_item_id); /** diff --git a/indra/newview/llfloateravatar.cpp b/indra/newview/llfloateravatar.cpp index bdc5b581a9..31adf5b61e 100755 --- a/indra/newview/llfloateravatar.cpp +++ b/indra/newview/llfloateravatar.cpp @@ -34,6 +34,7 @@ #include "llfloateravatar.h" #include "lluictrlfactory.h" +#include "llmediactrl.h" LLFloaterAvatar::LLFloaterAvatar(const LLSD& key) @@ -43,6 +44,13 @@ LLFloaterAvatar::LLFloaterAvatar(const LLSD& key) LLFloaterAvatar::~LLFloaterAvatar() { + LLMediaCtrl* avatar_picker = findChild<LLMediaCtrl>("avatar_picker_contents"); + if (avatar_picker) + { + avatar_picker->navigateStop(); + avatar_picker->clearCache(); //images are reloading each time already + avatar_picker->unloadMediaSource(); + } } BOOL LLFloaterAvatar::postBuild() diff --git a/indra/newview/llfloaterfacebook.cpp b/indra/newview/llfloaterfacebook.cpp index 9e3f917eae..6888e076aa 100644 --- a/indra/newview/llfloaterfacebook.cpp +++ b/indra/newview/llfloaterfacebook.cpp @@ -58,7 +58,6 @@ static LLPanelInjector<LLFacebookStatusPanel> t_panel_status("llfacebookstatuspa static LLPanelInjector<LLFacebookPhotoPanel> t_panel_photo("llfacebookphotopanel"); static LLPanelInjector<LLFacebookCheckinPanel> t_panel_checkin("llfacebookcheckinpanel"); static LLPanelInjector<LLFacebookFriendsPanel> t_panel_friends("llfacebookfriendspanel"); -static LLPanelInjector<LLFacebookAccountPanel> t_panel_account("llfacebookaccountpanel"); const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte const std::string DEFAULT_CHECKIN_LOCATION_URL = "http://maps.secondlife.com/"; @@ -99,13 +98,29 @@ S32 compute_jpeg_quality(S32 width, S32 height) LLFacebookStatusPanel::LLFacebookStatusPanel() : mMessageTextEditor(NULL), mPostButton(NULL), - mCancelButton(NULL) + mCancelButton(NULL), + mAccountCaptionLabel(NULL), + mAccountNameLabel(NULL), + mPanelButtons(NULL), + mConnectButton(NULL), + mDisconnectButton(NULL) { + mCommitCallbackRegistrar.add("SocialSharing.Connect", boost::bind(&LLFacebookStatusPanel::onConnect, this)); + mCommitCallbackRegistrar.add("SocialSharing.Disconnect", boost::bind(&LLFacebookStatusPanel::onDisconnect, this)); + + setVisibleCallback(boost::bind(&LLFacebookStatusPanel::onVisibilityChange, this, _2)); + mCommitCallbackRegistrar.add("SocialSharing.SendStatus", boost::bind(&LLFacebookStatusPanel::onSend, this)); } BOOL LLFacebookStatusPanel::postBuild() { + mAccountCaptionLabel = getChild<LLTextBox>("account_caption_label"); + mAccountNameLabel = getChild<LLTextBox>("account_name_label"); + mPanelButtons = getChild<LLUICtrl>("panel_buttons"); + mConnectButton = getChild<LLUICtrl>("connect_btn"); + mDisconnectButton = getChild<LLUICtrl>("disconnect_btn"); + mMessageTextEditor = getChild<LLUICtrl>("status_message"); mPostButton = getChild<LLUICtrl>("post_status_btn"); mCancelButton = getChild<LLUICtrl>("cancel_status_btn"); @@ -115,6 +130,16 @@ BOOL LLFacebookStatusPanel::postBuild() void LLFacebookStatusPanel::draw() { + LLFacebookConnect::EConnectionState connection_state = LLFacebookConnect::instance().getConnectionState(); + + //Disable the 'disconnect' button and the 'use another account' button when disconnecting in progress + bool disconnecting = connection_state == LLFacebookConnect::FB_DISCONNECTING; + mDisconnectButton->setEnabled(!disconnecting); + + //Disable the 'connect' button when a connection is in progress + bool connecting = connection_state == LLFacebookConnect::FB_CONNECTION_IN_PROGRESS; + mConnectButton->setEnabled(!connecting); + if (mMessageTextEditor && mPostButton && mCancelButton) { bool no_ongoing_connection = !(LLFacebookConnect::instance().isTransactionOngoing()); @@ -131,7 +156,7 @@ void LLFacebookStatusPanel::onSend() { LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookStatusPanel"); // just in case it is already listening LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookStatusPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectStateChange, this, _1)); - + // Connect to Facebook if necessary and then post if (LLFacebookConnect::instance().isConnected()) { @@ -160,6 +185,24 @@ bool LLFacebookStatusPanel::onFacebookConnectStateChange(const LLSD& data) return false; } +bool LLFacebookStatusPanel::onFacebookConnectAccountStateChange(const LLSD& data) +{ + if(LLFacebookConnect::instance().isConnected()) + { + //In process of disconnecting so leave the layout as is + if(data.get("enum").asInteger() != LLFacebookConnect::FB_DISCONNECTING) + { + showConnectedLayout(); + } + } + else + { + showDisconnectedLayout(); + } + + return false; +} + void LLFacebookStatusPanel::sendStatus() { std::string message = mMessageTextEditor->getValue().asString(); @@ -169,6 +212,103 @@ void LLFacebookStatusPanel::sendStatus() } } +void LLFacebookStatusPanel::onVisibilityChange(BOOL visible) +{ + if(visible) + { + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel"); + LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectAccountStateChange, this, _1)); + + LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel"); + LLEventPumps::instance().obtain("FacebookConnectInfo").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookStatusPanel::onFacebookConnectInfoChange, this)); + + //Connected + if(LLFacebookConnect::instance().isConnected()) + { + showConnectedLayout(); + } + //Check if connected (show disconnected layout in meantime) + else + { + showDisconnectedLayout(); + } + if ((LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_NOT_CONNECTED) || + (LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_CONNECTION_FAILED)) + { + LLFacebookConnect::instance().checkConnectionToFacebook(); + } + } + else + { + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel"); + LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel"); + } +} + +bool LLFacebookStatusPanel::onFacebookConnectInfoChange() +{ + LLSD info = LLFacebookConnect::instance().getInfo(); + std::string clickable_name; + + //Strings of format [http://www.somewebsite.com Click Me] become clickable text + if(info.has("link") && info.has("name")) + { + clickable_name = "[" + info["link"].asString() + " " + info["name"].asString() + "]"; + } + + mAccountNameLabel->setText(clickable_name); + + return false; +} + +void LLFacebookStatusPanel::showConnectButton() +{ + if(!mConnectButton->getVisible()) + { + mConnectButton->setVisible(TRUE); + mDisconnectButton->setVisible(FALSE); + } +} + +void LLFacebookStatusPanel::hideConnectButton() +{ + if(mConnectButton->getVisible()) + { + mConnectButton->setVisible(FALSE); + mDisconnectButton->setVisible(TRUE); + } +} + +void LLFacebookStatusPanel::showDisconnectedLayout() +{ + mAccountCaptionLabel->setText(getString("facebook_disconnected")); + mAccountNameLabel->setText(std::string("")); + showConnectButton(); +} + +void LLFacebookStatusPanel::showConnectedLayout() +{ + LLFacebookConnect::instance().loadFacebookInfo(); + + mAccountCaptionLabel->setText(getString("facebook_connected")); + hideConnectButton(); +} + +void LLFacebookStatusPanel::onConnect() +{ + LLFacebookConnect::instance().checkConnectionToFacebook(true); + + //Clear only the facebook browser cookies so that the facebook login screen appears + LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com"); +} + +void LLFacebookStatusPanel::onDisconnect() +{ + LLFacebookConnect::instance().disconnectFromFacebook(); + + LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com"); +} + void LLFacebookStatusPanel::clearAndClose() { mMessageTextEditor->setValue(""); @@ -185,7 +325,6 @@ void LLFacebookStatusPanel::clearAndClose() /////////////////////////// LLFacebookPhotoPanel::LLFacebookPhotoPanel() : -mSnapshotPanel(NULL), mResolutionComboBox(NULL), mRefreshBtn(NULL), mBtnPreview(NULL), @@ -213,7 +352,6 @@ BOOL LLFacebookPhotoPanel::postBuild() { setVisibleCallback(boost::bind(&LLFacebookPhotoPanel::onVisibilityChange, this, _2)); - mSnapshotPanel = getChild<LLUICtrl>("snapshot_panel"); mResolutionComboBox = getChild<LLUICtrl>("resolution_combobox"); mResolutionComboBox->setValue("[i1200,i630]"); // hardcoded defaults ftw! mResolutionComboBox->setCommitCallback(boost::bind(&LLFacebookPhotoPanel::updateResolution, this, TRUE)); @@ -300,16 +438,9 @@ void LLFacebookPhotoPanel::draw() // calc preview offset within the preview rect const S32 local_offset_x = (thumbnail_rect.getWidth() - thumbnail_w) / 2 ; const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2 ; + S32 offset_x = thumbnail_rect.mLeft + local_offset_x; + S32 offset_y = thumbnail_rect.mBottom + local_offset_y; - // calc preview offset within the floater rect - // Hack : To get the full offset, we need to take into account each and every offset of each widgets up to the floater. - // This is almost as arbitrary as using a fixed offset so that's what we do here for the sake of simplicity. - // *TODO : Get the offset looking through the hierarchy of widgets, should be done in postBuild() so to avoid traversing the hierarchy each time. - S32 offset_x = thumbnail_rect.mLeft + local_offset_x - 1; - S32 offset_y = thumbnail_rect.mBottom + local_offset_y - 39; - - mSnapshotPanel->localPointToOtherView(offset_x, offset_y, &offset_x, &offset_y, getParentByType<LLFloater>()); - gGL.matrixMode(LLRender::MM_MODELVIEW); // Apply floater transparency to the texture unless the floater is focused. F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); @@ -344,7 +475,7 @@ void LLFacebookPhotoPanel::onVisibilityChange(BOOL visible) LLSnapshotLivePreview* preview = getPreviewView(); if(preview) { - lldebugs << "opened, updating snapshot" << llendl; + LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL; preview->updateSnapshot(TRUE); } } @@ -477,7 +608,7 @@ void LLFacebookPhotoPanel::updateControls() BOOL got_snap = previewp && previewp->getSnapshotUpToDate(); // *TODO: Separate maximum size for Web images from postcards - lldebugs << "Is snapshot up-to-date? " << got_snap << llendl; + LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL; updateResolution(FALSE); } @@ -507,13 +638,13 @@ void LLFacebookPhotoPanel::updateResolution(BOOL do_update) if (width == 0 || height == 0) { // take resolution from current window size - lldebugs << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl; + LL_DEBUGS() << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL; previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); } else { // use the resolution from the selected pre-canned drop-down choice - lldebugs << "Setting preview res selected from combo: " << width << "x" << height << llendl; + LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL; previewp->setSize(width, height); } @@ -887,164 +1018,6 @@ bool LLFacebookFriendsPanel::onConnectedToFacebook(const LLSD& data) return false; } -/////////////////////////// -//LLFacebookAccountPanel////// -/////////////////////////// - -LLFacebookAccountPanel::LLFacebookAccountPanel() : -mAccountCaptionLabel(NULL), -mAccountNameLabel(NULL), -mPanelButtons(NULL), -mConnectButton(NULL), -mDisconnectButton(NULL) -{ - mCommitCallbackRegistrar.add("SocialSharing.Connect", boost::bind(&LLFacebookAccountPanel::onConnect, this)); - mCommitCallbackRegistrar.add("SocialSharing.Disconnect", boost::bind(&LLFacebookAccountPanel::onDisconnect, this)); - - setVisibleCallback(boost::bind(&LLFacebookAccountPanel::onVisibilityChange, this, _2)); -} - -BOOL LLFacebookAccountPanel::postBuild() -{ - mAccountCaptionLabel = getChild<LLTextBox>("account_caption_label"); - mAccountNameLabel = getChild<LLTextBox>("account_name_label"); - mPanelButtons = getChild<LLUICtrl>("panel_buttons"); - mConnectButton = getChild<LLUICtrl>("connect_btn"); - mDisconnectButton = getChild<LLUICtrl>("disconnect_btn"); - - return LLPanel::postBuild(); -} - -void LLFacebookAccountPanel::draw() -{ - LLFacebookConnect::EConnectionState connection_state = LLFacebookConnect::instance().getConnectionState(); - - //Disable the 'disconnect' button and the 'use another account' button when disconnecting in progress - bool disconnecting = connection_state == LLFacebookConnect::FB_DISCONNECTING; - mDisconnectButton->setEnabled(!disconnecting); - - //Disable the 'connect' button when a connection is in progress - bool connecting = connection_state == LLFacebookConnect::FB_CONNECTION_IN_PROGRESS; - mConnectButton->setEnabled(!connecting); - - LLPanel::draw(); -} - -void LLFacebookAccountPanel::onVisibilityChange(BOOL visible) -{ - if(visible) - { - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel"); - LLEventPumps::instance().obtain("FacebookConnectState").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookAccountPanel::onFacebookConnectStateChange, this, _1)); - - LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel"); - LLEventPumps::instance().obtain("FacebookConnectInfo").listen("LLFacebookAccountPanel", boost::bind(&LLFacebookAccountPanel::onFacebookConnectInfoChange, this)); - - //Connected - if(LLFacebookConnect::instance().isConnected()) - { - showConnectedLayout(); - } - //Check if connected (show disconnected layout in meantime) - else - { - showDisconnectedLayout(); - } - if ((LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_NOT_CONNECTED) || - (LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_CONNECTION_FAILED)) - { - LLFacebookConnect::instance().checkConnectionToFacebook(); - } - } - else - { - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLFacebookAccountPanel"); - LLEventPumps::instance().obtain("FacebookConnectInfo").stopListening("LLFacebookAccountPanel"); - } -} - -bool LLFacebookAccountPanel::onFacebookConnectStateChange(const LLSD& data) -{ - if(LLFacebookConnect::instance().isConnected()) - { - //In process of disconnecting so leave the layout as is - if(data.get("enum").asInteger() != LLFacebookConnect::FB_DISCONNECTING) - { - showConnectedLayout(); - } - } - else - { - showDisconnectedLayout(); - } - - return false; -} - -bool LLFacebookAccountPanel::onFacebookConnectInfoChange() -{ - LLSD info = LLFacebookConnect::instance().getInfo(); - std::string clickable_name; - - //Strings of format [http://www.somewebsite.com Click Me] become clickable text - if(info.has("link") && info.has("name")) - { - clickable_name = "[" + info["link"].asString() + " " + info["name"].asString() + "]"; - } - - mAccountNameLabel->setText(clickable_name); - - return false; -} - -void LLFacebookAccountPanel::showConnectButton() -{ - if(!mConnectButton->getVisible()) - { - mConnectButton->setVisible(TRUE); - mDisconnectButton->setVisible(FALSE); - } -} - -void LLFacebookAccountPanel::hideConnectButton() -{ - if(mConnectButton->getVisible()) - { - mConnectButton->setVisible(FALSE); - mDisconnectButton->setVisible(TRUE); - } -} - -void LLFacebookAccountPanel::showDisconnectedLayout() -{ - mAccountCaptionLabel->setText(getString("facebook_disconnected")); - mAccountNameLabel->setText(std::string("")); - showConnectButton(); -} - -void LLFacebookAccountPanel::showConnectedLayout() -{ - LLFacebookConnect::instance().loadFacebookInfo(); - - mAccountCaptionLabel->setText(getString("facebook_connected")); - hideConnectButton(); -} - -void LLFacebookAccountPanel::onConnect() -{ - LLFacebookConnect::instance().checkConnectionToFacebook(true); - - //Clear only the facebook browser cookies so that the facebook login screen appears - LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com"); -} - -void LLFacebookAccountPanel::onDisconnect() -{ - LLFacebookConnect::instance().disconnectFromFacebook(); - - LLViewerMedia::getCookieStore()->removeCookiesByDomain(".facebook.com"); -} - //////////////////////// //LLFloaterFacebook/////// //////////////////////// @@ -1094,7 +1067,7 @@ void LLFloaterFacebook::showPhotoPanel() LLTabContainer* parent = dynamic_cast<LLTabContainer*>(mFacebookPhotoPanel->getParent()); if (!parent) { - llwarns << "Cannot find panel container" << llendl; + LL_WARNS() << "Cannot find panel container" << LL_ENDL; return; } diff --git a/indra/newview/llfloaterfacebook.h b/indra/newview/llfloaterfacebook.h index 34356412d6..a4ca666b20 100644 --- a/indra/newview/llfloaterfacebook.h +++ b/indra/newview/llfloaterfacebook.h @@ -46,11 +46,28 @@ public: void draw(); void onSend(); bool onFacebookConnectStateChange(const LLSD& data); + bool onFacebookConnectAccountStateChange(const LLSD& data); void sendStatus(); void clearAndClose(); private: + void onVisibilityChange(BOOL new_visibility); + bool onFacebookConnectInfoChange(); + void onConnect(); + void onUseAnotherAccount(); + void onDisconnect(); + + void showConnectButton(); + void hideConnectButton(); + void showDisconnectedLayout(); + void showConnectedLayout(); + + LLTextBox * mAccountCaptionLabel; + LLTextBox * mAccountNameLabel; + LLUICtrl * mPanelButtons; + LLUICtrl * mConnectButton; + LLUICtrl * mDisconnectButton; LLUICtrl* mMessageTextEditor; LLUICtrl* mPostButton; LLUICtrl* mCancelButton; @@ -87,7 +104,6 @@ private: LLHandle<LLView> mPreviewHandle; - LLUICtrl * mSnapshotPanel; LLUICtrl * mResolutionComboBox; LLUICtrl * mFilterComboBox; LLUICtrl * mRefreshBtn; @@ -147,33 +163,6 @@ private: LLAvatarList* mSuggestedFriends; }; -class LLFacebookAccountPanel : public LLPanel -{ -public: - LLFacebookAccountPanel(); - BOOL postBuild(); - void draw(); - -private: - void onVisibilityChange(BOOL new_visibility); - bool onFacebookConnectStateChange(const LLSD& data); - bool onFacebookConnectInfoChange(); - void onConnect(); - void onUseAnotherAccount(); - void onDisconnect(); - - void showConnectButton(); - void hideConnectButton(); - void showDisconnectedLayout(); - void showConnectedLayout(); - - LLTextBox * mAccountCaptionLabel; - LLTextBox * mAccountNameLabel; - LLUICtrl * mPanelButtons; - LLUICtrl * mConnectButton; - LLUICtrl * mDisconnectButton; -}; - class LLFloaterFacebook : public LLFloater { public: diff --git a/indra/newview/llfloaterflickr.cpp b/indra/newview/llfloaterflickr.cpp index 4e6d98ecfa..36afab86b7 100644 --- a/indra/newview/llfloaterflickr.cpp +++ b/indra/newview/llfloaterflickr.cpp @@ -65,7 +65,6 @@ const std::string FLICKR_MACHINE_TAGS_NAMESPACE = "secondlife"; /////////////////////////// LLFlickrPhotoPanel::LLFlickrPhotoPanel() : -mSnapshotPanel(NULL), mResolutionComboBox(NULL), mRefreshBtn(NULL), mBtnPreview(NULL), @@ -96,7 +95,6 @@ BOOL LLFlickrPhotoPanel::postBuild() { setVisibleCallback(boost::bind(&LLFlickrPhotoPanel::onVisibilityChange, this, _2)); - mSnapshotPanel = getChild<LLUICtrl>("snapshot_panel"); mResolutionComboBox = getChild<LLUICtrl>("resolution_combobox"); mResolutionComboBox->setCommitCallback(boost::bind(&LLFlickrPhotoPanel::updateResolution, this, TRUE)); mFilterComboBox = getChild<LLUICtrl>("filters_combobox"); @@ -191,16 +189,9 @@ void LLFlickrPhotoPanel::draw() // calc preview offset within the preview rect const S32 local_offset_x = (thumbnail_rect.getWidth() - thumbnail_w) / 2 ; const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2 ; + S32 offset_x = thumbnail_rect.mLeft + local_offset_x; + S32 offset_y = thumbnail_rect.mBottom + local_offset_y; - // calc preview offset within the floater rect - // Hack : To get the full offset, we need to take into account each and every offset of each widgets up to the floater. - // This is almost as arbitrary as using a fixed offset so that's what we do here for the sake of simplicity. - // *TODO : Get the offset looking through the hierarchy of widgets, should be done in postBuild() so to avoid traversing the hierarchy each time. - S32 offset_x = thumbnail_rect.mLeft + local_offset_x - 1; - S32 offset_y = thumbnail_rect.mBottom + local_offset_y - 39; - - mSnapshotPanel->localPointToOtherView(offset_x, offset_y, &offset_x, &offset_y, getParentByType<LLFloater>()); - gGL.matrixMode(LLRender::MM_MODELVIEW); // Apply floater transparency to the texture unless the floater is focused. F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); @@ -235,7 +226,7 @@ void LLFlickrPhotoPanel::onVisibilityChange(BOOL visible) LLSnapshotLivePreview* preview = getPreviewView(); if(preview) { - lldebugs << "opened, updating snapshot" << llendl; + LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL; preview->updateSnapshot(TRUE); } } @@ -427,7 +418,7 @@ void LLFlickrPhotoPanel::updateControls() BOOL got_snap = previewp && previewp->getSnapshotUpToDate(); // *TODO: Separate maximum size for Web images from postcards - lldebugs << "Is snapshot up-to-date? " << got_snap << llendl; + LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL; updateResolution(FALSE); } @@ -457,13 +448,13 @@ void LLFlickrPhotoPanel::updateResolution(BOOL do_update) if (width == 0 || height == 0) { // take resolution from current window size - lldebugs << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl; + LL_DEBUGS() << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL; previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); } else { // use the resolution from the selected pre-canned drop-down choice - lldebugs << "Setting preview res selected from combo: " << width << "x" << height << llendl; + LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL; previewp->setSize(width, height); } @@ -726,7 +717,7 @@ void LLFloaterFlickr::showPhotoPanel() LLTabContainer* parent = dynamic_cast<LLTabContainer*>(mFlickrPhotoPanel->getParent()); if (!parent) { - llwarns << "Cannot find panel container" << llendl; + LL_WARNS() << "Cannot find panel container" << LL_ENDL; return; } diff --git a/indra/newview/llfloaterflickr.h b/indra/newview/llfloaterflickr.h index ba27c9a3d8..74da3bcea9 100644 --- a/indra/newview/llfloaterflickr.h +++ b/indra/newview/llfloaterflickr.h @@ -67,7 +67,6 @@ private: LLHandle<LLView> mPreviewHandle; - LLUICtrl * mSnapshotPanel; LLUICtrl * mResolutionComboBox; LLUICtrl * mFilterComboBox; LLUICtrl * mRefreshBtn; diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp index be8195b5ee..ab57e8c170 100755 --- a/indra/newview/llfloaterimcontainer.cpp +++ b/indra/newview/llfloaterimcontainer.cpp @@ -229,7 +229,9 @@ BOOL LLFloaterIMContainer::postBuild() mStubCollapseBtn = getChild<LLButton>("stub_collapse_btn"); mStubCollapseBtn->setClickedCallback(boost::bind(&LLFloaterIMContainer::onStubCollapseButtonClicked, this)); mSpeakBtn = getChild<LLButton>("speak_btn"); - mSpeakBtn->setClickedCallback(boost::bind(&LLFloaterIMContainer::onSpeakButtonClicked, this)); + + mSpeakBtn->setMouseDownCallback(boost::bind(&LLFloaterIMContainer::onSpeakButtonPressed, this)); + mSpeakBtn->setMouseUpCallback(boost::bind(&LLFloaterIMContainer::onSpeakButtonReleased, this)); childSetAction("add_btn", boost::bind(&LLFloaterIMContainer::onAddButtonClicked, this)); @@ -352,11 +354,18 @@ void LLFloaterIMContainer::onStubCollapseButtonClicked() collapseMessagesPane(true); } -void LLFloaterIMContainer::onSpeakButtonClicked() +void LLFloaterIMContainer::onSpeakButtonPressed() +{ + LLVoiceClient::getInstance()->inputUserControlState(true); + updateSpeakBtnState(); +} + +void LLFloaterIMContainer::onSpeakButtonReleased() { - LLAgent::toggleMicrophone("speak"); + LLVoiceClient::getInstance()->inputUserControlState(false); updateSpeakBtnState(); } + void LLFloaterIMContainer::onExpandCollapseButtonClicked() { if (mConversationsPane->isCollapsed() && mMessagesPane->isCollapsed() @@ -1401,6 +1410,10 @@ bool LLFloaterIMContainer::enableContextMenuItem(const std::string& item, uuid_v { return is_single_select && LLAvatarActions::canCall(); } + else if ("can_open_voice_conversation" == item) + { + return is_single_select && LLAvatarActions::canCall(); + } else if ("can_zoom_in" == item) { return is_single_select && gObjectList.findObject(single_id); diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h index 5ea9fd399b..f21c0b9947 100755 --- a/indra/newview/llfloaterimcontainer.h +++ b/indra/newview/llfloaterimcontainer.h @@ -135,7 +135,8 @@ private: void onExpandCollapseButtonClicked(); void onStubCollapseButtonClicked(); void processParticipantsStyleUpdate(); - void onSpeakButtonClicked(); + void onSpeakButtonPressed(); + void onSpeakButtonReleased(); /*virtual*/ void onClickCloseBtn(bool app_quitting = false); /*virtual*/ void closeHostedFloater(); diff --git a/indra/newview/llfloaterimsession.cpp b/indra/newview/llfloaterimsession.cpp index 7852a1f7b3..9def253ba5 100755 --- a/indra/newview/llfloaterimsession.cpp +++ b/indra/newview/llfloaterimsession.cpp @@ -927,8 +927,7 @@ void LLFloaterIMSession::onInputEditorFocusReceived( LLFocusableElement* caller, // Allow enabling the LLFloaterIMSession input editor only if session can accept text LLIMModel::LLIMSession* im_session = LLIMModel::instance().findIMSession(self->mSessionID); - //TODO: While disabled lllineeditor can receive focus we need to check if it is enabled (EK) - if( im_session && im_session->mTextIMPossible && self->mInputEditor->getEnabled()) + if( im_session && im_session->mTextIMPossible && !self->mInputEditor->getReadOnly()) { //in disconnected state IM input editor should be disabled self->mInputEditor->setEnabled(!gDisconnected); diff --git a/indra/newview/llfloaterlagmeter.cpp b/indra/newview/llfloaterlagmeter.cpp new file mode 100644 index 0000000000..f72f2631a1 --- /dev/null +++ b/indra/newview/llfloaterlagmeter.cpp @@ -0,0 +1,378 @@ +/** + * @file llfloaterlagmeter.cpp + * @brief The "Lag-o-Meter" floater used to tell users what is causing lag. + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloaterlagmeter.h" + +#include "lluictrlfactory.h" +#include "llviewerstats.h" +#include "llviewertexture.h" +#include "llviewercontrol.h" +#include "llappviewer.h" + +#include "lltexturefetch.h" + +#include "llbutton.h" +#include "llfocusmgr.h" +#include "lltextbox.h" + +const std::string LAG_CRITICAL_IMAGE_NAME = "lag_status_critical.tga"; +const std::string LAG_WARNING_IMAGE_NAME = "lag_status_warning.tga"; +const std::string LAG_GOOD_IMAGE_NAME = "lag_status_good.tga"; + +LLFloaterLagMeter::LLFloaterLagMeter(const LLSD& key) + : LLFloater(key) +{ + mCommitCallbackRegistrar.add("LagMeter.ClickShrink", boost::bind(&LLFloaterLagMeter::onClickShrink, this)); +} + +BOOL LLFloaterLagMeter::postBuild() +{ + // Don't let this window take keyboard focus -- it's confusing to + // lose arrow-key driving when testing lag. + setIsChrome(TRUE); + + // were we shrunk last time? + if (isShrunk()) + { + onClickShrink(); + } + + mClientButton = getChild<LLButton>("client_lagmeter"); + mClientText = getChild<LLTextBox>("client_text"); + mClientCause = getChild<LLTextBox>("client_lag_cause"); + + mNetworkButton = getChild<LLButton>("network_lagmeter"); + mNetworkText = getChild<LLTextBox>("network_text"); + mNetworkCause = getChild<LLTextBox>("network_lag_cause"); + + mServerButton = getChild<LLButton>("server_lagmeter"); + mServerText = getChild<LLTextBox>("server_text"); + mServerCause = getChild<LLTextBox>("server_lag_cause"); + + std::string config_string = getString("client_frame_rate_critical_fps", mStringArgs); + mClientFrameTimeCritical = F32Seconds(1.0f / (float)atof( config_string.c_str() )); + config_string = getString("client_frame_rate_warning_fps", mStringArgs); + mClientFrameTimeWarning = F32Seconds(1.0f / (float)atof( config_string.c_str() )); + + config_string = getString("network_packet_loss_critical_pct", mStringArgs); + mNetworkPacketLossCritical = F32Percent((float)atof( config_string.c_str() )); + config_string = getString("network_packet_loss_warning_pct", mStringArgs); + mNetworkPacketLossWarning = F32Percent((float)atof( config_string.c_str() )); + + config_string = getString("network_ping_critical_ms", mStringArgs); + mNetworkPingCritical = F32Milliseconds((float)atof( config_string.c_str() )); + config_string = getString("network_ping_warning_ms", mStringArgs); + mNetworkPingWarning = F32Milliseconds((float)atof( config_string.c_str() )); + config_string = getString("server_frame_rate_critical_fps", mStringArgs); + + mServerFrameTimeCritical = F32Seconds(1.0f / (float)atof( config_string.c_str() )); + config_string = getString("server_frame_rate_warning_fps", mStringArgs); + mServerFrameTimeWarning = F32Seconds(1.0f / (float)atof( config_string.c_str() )); + config_string = getString("server_single_process_max_time_ms", mStringArgs); + mServerSingleProcessMaxTime = F32Seconds((float)atof( config_string.c_str() )); + +// mShrunk = false; + config_string = getString("max_width_px", mStringArgs); + mMaxWidth = atoi( config_string.c_str() ); + config_string = getString("min_width_px", mStringArgs); + mMinWidth = atoi( config_string.c_str() ); + + mStringArgs["[CLIENT_FRAME_RATE_CRITICAL]"] = getString("client_frame_rate_critical_fps"); + mStringArgs["[CLIENT_FRAME_RATE_WARNING]"] = getString("client_frame_rate_warning_fps"); + + mStringArgs["[NETWORK_PACKET_LOSS_CRITICAL]"] = getString("network_packet_loss_critical_pct"); + mStringArgs["[NETWORK_PACKET_LOSS_WARNING]"] = getString("network_packet_loss_warning_pct"); + + mStringArgs["[NETWORK_PING_CRITICAL]"] = getString("network_ping_critical_ms"); + mStringArgs["[NETWORK_PING_WARNING]"] = getString("network_ping_warning_ms"); + + mStringArgs["[SERVER_FRAME_RATE_CRITICAL]"] = getString("server_frame_rate_critical_fps"); + mStringArgs["[SERVER_FRAME_RATE_WARNING]"] = getString("server_frame_rate_warning_fps"); + +// childSetAction("minimize", onClickShrink, this); + updateControls(isShrunk()); // if expanded append colon to the labels (EXT-4079) + + return TRUE; +} +LLFloaterLagMeter::~LLFloaterLagMeter() +{ + // save shrunk status for next time +// gSavedSettings.setBOOL("LagMeterShrunk", mShrunk); + // expand so we save the large window rectangle + if (isShrunk()) + { + onClickShrink(); + } +} + +void LLFloaterLagMeter::draw() +{ + determineClient(); + determineNetwork(); + determineServer(); + + LLFloater::draw(); +} + +void LLFloaterLagMeter::determineClient() +{ + F32Milliseconds client_frame_time = LLTrace::get_frame_recording().getPeriodMean(LLStatViewer::FRAME_STACKTIME); + bool find_cause = false; + + if (!gFocusMgr.getAppHasFocus()) + { + mClientButton->setImageUnselected(LLUI::getUIImage(LAG_GOOD_IMAGE_NAME)); + mClientText->setText( getString("client_frame_time_window_bg_msg", mStringArgs) ); + mClientCause->setText( LLStringUtil::null ); + } + else if(client_frame_time >= mClientFrameTimeCritical) + { + mClientButton->setImageUnselected(LLUI::getUIImage(LAG_CRITICAL_IMAGE_NAME)); + mClientText->setText( getString("client_frame_time_critical_msg", mStringArgs) ); + find_cause = true; + } + else if(client_frame_time >= mClientFrameTimeWarning) + { + mClientButton->setImageUnselected(LLUI::getUIImage(LAG_WARNING_IMAGE_NAME)); + mClientText->setText( getString("client_frame_time_warning_msg", mStringArgs) ); + find_cause = true; + } + else + { + mClientButton->setImageUnselected(LLUI::getUIImage(LAG_GOOD_IMAGE_NAME)); + mClientText->setText( getString("client_frame_time_normal_msg", mStringArgs) ); + mClientCause->setText( LLStringUtil::null ); + } + + if(find_cause) + { + if(gSavedSettings.getF32("RenderFarClip") > 128) + { + mClientCause->setText( getString("client_draw_distance_cause_msg", mStringArgs) ); + } + else if(LLAppViewer::instance()->getTextureFetch()->getNumRequests() > 2) + { + mClientCause->setText( getString("client_texture_loading_cause_msg", mStringArgs) ); + } + else if(LLViewerTexture::sBoundTextureMemory > LLViewerTexture::sMaxBoundTextureMemory) + { + mClientCause->setText( getString("client_texture_memory_cause_msg", mStringArgs) ); + } + else + { + mClientCause->setText( getString("client_complex_objects_cause_msg", mStringArgs) ); + } + } +} + +void LLFloaterLagMeter::determineNetwork() +{ + LLTrace::PeriodicRecording& frame_recording = LLTrace::get_frame_recording(); + F32Percent packet_loss = frame_recording.getPeriodMean(LLStatViewer::PACKETS_LOST_PERCENT); + F32Milliseconds ping_time = frame_recording.getPeriodMean(LLStatViewer::SIM_PING); + bool find_cause_loss = false; + bool find_cause_ping = false; + + // *FIXME: We can't blame a large ping time on anything in + // particular if the frame rate is low, because a low frame + // rate is a sure recipe for bad ping times right now until + // the network handlers are de-synched from the rendering. + F32Milliseconds client_frame_time = frame_recording.getPeriodMean(LLStatViewer::FRAME_STACKTIME); + + if(packet_loss >= mNetworkPacketLossCritical) + { + mNetworkButton->setImageUnselected(LLUI::getUIImage(LAG_CRITICAL_IMAGE_NAME)); + mNetworkText->setText( getString("network_packet_loss_critical_msg", mStringArgs) ); + find_cause_loss = true; + } + else if(ping_time >= mNetworkPingCritical) + { + mNetworkButton->setImageUnselected(LLUI::getUIImage(LAG_CRITICAL_IMAGE_NAME)); + if (client_frame_time < mNetworkPingCritical) + { + mNetworkText->setText( getString("network_ping_critical_msg", mStringArgs) ); + find_cause_ping = true; + } + } + else if(packet_loss >= mNetworkPacketLossWarning) + { + mNetworkButton->setImageUnselected(LLUI::getUIImage(LAG_WARNING_IMAGE_NAME)); + mNetworkText->setText( getString("network_packet_loss_warning_msg", mStringArgs) ); + find_cause_loss = true; + } + else if(ping_time >= mNetworkPingWarning) + { + mNetworkButton->setImageUnselected(LLUI::getUIImage(LAG_WARNING_IMAGE_NAME)); + if (client_frame_time < mNetworkPingWarning) + { + mNetworkText->setText( getString("network_ping_warning_msg", mStringArgs) ); + find_cause_ping = true; + } + } + else + { + mNetworkButton->setImageUnselected(LLUI::getUIImage(LAG_GOOD_IMAGE_NAME)); + mNetworkText->setText( getString("network_performance_normal_msg", mStringArgs) ); + } + + if(find_cause_loss) + { + mNetworkCause->setText( getString("network_packet_loss_cause_msg", mStringArgs) ); + } + else if(find_cause_ping) + { + mNetworkCause->setText( getString("network_ping_cause_msg", mStringArgs) ); + } + else + { + mNetworkCause->setText( LLStringUtil::null ); + } +} + +void LLFloaterLagMeter::determineServer() +{ + F32Milliseconds sim_frame_time = LLTrace::get_frame_recording().getLastRecording().getLastValue(LLStatViewer::SIM_FRAME_TIME); + bool find_cause = false; + + if(sim_frame_time >= mServerFrameTimeCritical) + { + mServerButton->setImageUnselected(LLUI::getUIImage(LAG_CRITICAL_IMAGE_NAME)); + mServerText->setText( getString("server_frame_time_critical_msg", mStringArgs) ); + find_cause = true; + } + else if(sim_frame_time >= mServerFrameTimeWarning) + { + mServerButton->setImageUnselected(LLUI::getUIImage(LAG_WARNING_IMAGE_NAME)); + mServerText->setText( getString("server_frame_time_warning_msg", mStringArgs) ); + find_cause = true; + } + else + { + mServerButton->setImageUnselected(LLUI::getUIImage(LAG_GOOD_IMAGE_NAME)); + mServerText->setText( getString("server_frame_time_normal_msg", mStringArgs) ); + mServerCause->setText( LLStringUtil::null ); + } + + if(find_cause) + { + LLTrace::Recording& last_recording = LLTrace::get_frame_recording().getLastRecording(); + + if(last_recording.getLastValue(LLStatViewer::SIM_PHYSICS_TIME) > mServerSingleProcessMaxTime) + { + mServerCause->setText( getString("server_physics_cause_msg", mStringArgs) ); + } + else if(last_recording.getLastValue(LLStatViewer::SIM_SCRIPTS_TIME) > mServerSingleProcessMaxTime) + { + mServerCause->setText( getString("server_scripts_cause_msg", mStringArgs) ); + } + else if(last_recording.getLastValue(LLStatViewer::SIM_NET_TIME) > mServerSingleProcessMaxTime) + { + mServerCause->setText( getString("server_net_cause_msg", mStringArgs) ); + } + else if(last_recording.getLastValue(LLStatViewer::SIM_AGENTS_TIME) > mServerSingleProcessMaxTime) + { + mServerCause->setText( getString("server_agent_cause_msg", mStringArgs) ); + } + else if(last_recording.getLastValue(LLStatViewer::SIM_IMAGES_TIME) > mServerSingleProcessMaxTime) + { + mServerCause->setText( getString("server_images_cause_msg", mStringArgs) ); + } + else + { + mServerCause->setText( getString("server_generic_cause_msg", mStringArgs) ); + } + } +} + +void LLFloaterLagMeter::updateControls(bool shrink) +{ +// LLFloaterLagMeter * self = (LLFloaterLagMeter*)data; + + LLButton * button = getChild<LLButton>("minimize"); + S32 delta_width = mMaxWidth -mMinWidth; + LLRect r = getRect(); + + if(!shrink) + { + setTitle(getString("max_title_msg", mStringArgs) ); + // make left edge appear to expand + r.translate(-delta_width, 0); + setRect(r); + reshape(mMaxWidth, getRect().getHeight()); + + getChild<LLUICtrl>("client")->setValue(getString("client_text_msg", mStringArgs) + ":"); + getChild<LLUICtrl>("network")->setValue(getString("network_text_msg",mStringArgs) + ":"); + getChild<LLUICtrl>("server")->setValue(getString("server_text_msg", mStringArgs) + ":"); + + // usually "<<" + button->setLabel( getString("smaller_label", mStringArgs) ); + } + else + { + setTitle( getString("min_title_msg", mStringArgs) ); + // make left edge appear to collapse + r.translate(delta_width, 0); + setRect(r); + reshape(mMinWidth, getRect().getHeight()); + + getChild<LLUICtrl>("client")->setValue(getString("client_text_msg", mStringArgs) ); + getChild<LLUICtrl>("network")->setValue(getString("network_text_msg",mStringArgs) ); + getChild<LLUICtrl>("server")->setValue(getString("server_text_msg", mStringArgs) ); + + // usually ">>" + button->setLabel( getString("bigger_label", mStringArgs) ); + } + // Don't put keyboard focus on the button + button->setFocus(FALSE); + +// self->mClientText->setVisible(self->mShrunk); +// self->mClientCause->setVisible(self->mShrunk); +// self->getChildView("client_help")->setVisible( self->mShrunk); + +// self->mNetworkText->setVisible(self->mShrunk); +// self->mNetworkCause->setVisible(self->mShrunk); +// self->getChildView("network_help")->setVisible( self->mShrunk); + +// self->mServerText->setVisible(self->mShrunk); +// self->mServerCause->setVisible(self->mShrunk); +// self->getChildView("server_help")->setVisible( self->mShrunk); + +// self->mShrunk = !self->mShrunk; +} + +BOOL LLFloaterLagMeter::isShrunk() +{ + return gSavedSettings.getBOOL("LagMeterShrunk"); +} + +void LLFloaterLagMeter::onClickShrink() // toggle "LagMeterShrunk" +{ + bool shrunk = isShrunk(); + updateControls(!shrunk); + gSavedSettings.setBOOL("LagMeterShrunk", !shrunk); +} diff --git a/indra/newview/llfloaterlagmeter.h b/indra/newview/llfloaterlagmeter.h new file mode 100644 index 0000000000..929ea40629 --- /dev/null +++ b/indra/newview/llfloaterlagmeter.h @@ -0,0 +1,80 @@ +/** + * @file llfloaterlagmeter.h + * @brief The "Lag-o-Meter" floater used to tell users what is causing lag. + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LLFLOATERLAGMETER_H +#define LLFLOATERLAGMETER_H + +#include "llfloater.h" + +class LLTextBox; + +class LLFloaterLagMeter : public LLFloater +{ + friend class LLFloaterReg; + +public: + /*virtual*/ void draw(); + /*virtual*/ BOOL postBuild(); +private: + + LLFloaterLagMeter(const LLSD& key); + /*virtual*/ ~LLFloaterLagMeter(); + void determineClient(); + void determineNetwork(); + void determineServer(); + void updateControls(bool shrink); + BOOL isShrunk(); + + void onClickShrink(); + + bool mShrunk; + S32 mMaxWidth, mMinWidth; + + F32Milliseconds mClientFrameTimeCritical; + F32Milliseconds mClientFrameTimeWarning; + LLButton* mClientButton; + LLTextBox* mClientText; + LLTextBox* mClientCause; + + F32Percent mNetworkPacketLossCritical; + F32Percent mNetworkPacketLossWarning; + F32Milliseconds mNetworkPingCritical; + F32Milliseconds mNetworkPingWarning; + LLButton* mNetworkButton; + LLTextBox* mNetworkText; + LLTextBox* mNetworkCause; + + F32Milliseconds mServerFrameTimeCritical; + F32Milliseconds mServerFrameTimeWarning; + F32Milliseconds mServerSingleProcessMaxTime; + LLButton* mServerButton; + LLTextBox* mServerText; + LLTextBox* mServerCause; + + LLStringUtil::format_map_t mStringArgs; +}; + +#endif diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 7213064746..7621c35ed2 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -1517,6 +1517,8 @@ void LLPanelLandObjects::onClickRefresh(void* userdata) LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); if (!region) return; + self->mBtnRefresh->setEnabled(false); + // ready the list for results self->mOwnerList->deleteAllItems(); self->mOwnerList->setCommentText(LLTrans::getString("Searching")); @@ -1576,6 +1578,7 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo { msg->getU32("DataExtended", "TimeStamp", most_recent_time, i); } + if (owner_id.isNull()) { continue; @@ -1611,10 +1614,10 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo item_params.columns.add().value(LLDate((time_t)most_recent_time)).font(FONT).column("mostrecent").type("date"); self->mOwnerList->addNameItemRow(item_params); - LL_DEBUGS() << "object owner " << owner_id << " (" << (is_group_owned ? "group" : "agent") << ") owns " << object_count << " objects." << LL_ENDL; } + // check for no results if (0 == self->mOwnerList->getItemCount()) { @@ -1624,6 +1627,8 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo { self->mOwnerList->setEnabled(TRUE); } + + self->mBtnRefresh->setEnabled(true); } // static @@ -2776,10 +2781,16 @@ void LLPanelLandAccess::callbackAvatarCBAccess(const uuid_vec_t& ids) { LLUUID id = ids[0]; LLParcel* parcel = mParcel->getParcel(); - if (parcel) + if (parcel && parcel->addToAccessList(id, 0)) { - parcel->addToAccessList(id, 0); - LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(AL_ACCESS); + U32 lists_to_update = AL_ACCESS; + // agent was successfully added to access list + // but we also need to check ban list to ensure that agent will not be in two lists simultaneously + if(parcel->removeFromBanList(id)) + { + lists_to_update |= AL_BAN; + } + LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(lists_to_update); refresh(); } } @@ -2828,10 +2839,16 @@ void LLPanelLandAccess::callbackAvatarCBBanned(const uuid_vec_t& ids) { LLUUID id = ids[0]; LLParcel* parcel = mParcel->getParcel(); - if (parcel) + if (parcel && parcel->addToBanList(id, 0)) { - parcel->addToBanList(id, 0); - LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(AL_BAN); + U32 lists_to_update = AL_BAN; + // agent was successfully added to ban list + // but we also need to check access list to ensure that agent will not be in two lists simultaneously + if (parcel->removeFromAccessList(id)) + { + lists_to_update |= AL_ACCESS; + } + LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(lists_to_update); refresh(); } } diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp index c21e4ff7e8..fd03efa061 100755 --- a/indra/newview/llfloaternotificationsconsole.cpp +++ b/indra/newview/llfloaternotificationsconsole.cpp @@ -41,6 +41,7 @@ class LLNotificationChannelPanel : public LLLayoutPanel { public: LLNotificationChannelPanel(const Params& p); + ~LLNotificationChannelPanel(); BOOL postBuild(); private: @@ -57,6 +58,20 @@ LLNotificationChannelPanel::LLNotificationChannelPanel(const LLNotificationChann buildFromFile( "panel_notifications_channel.xml"); } +LLNotificationChannelPanel::~LLNotificationChannelPanel() +{ + // Userdata for all records is a LLNotification* we need to clean up + std::vector<LLScrollListItem*> data_list = getChild<LLScrollListCtrl>("notifications_list")->getAllData(); + std::vector<LLScrollListItem*>::iterator data_itor; + for (data_itor = data_list.begin(); data_itor != data_list.end(); ++data_itor) + { + LLScrollListItem* item = *data_itor; + LLNotification* notification = (LLNotification*)item->getUserdata(); + delete notification; + notification = NULL; + } +} + BOOL LLNotificationChannelPanel::postBuild() { LLButton* header_button = getChild<LLButton>("header"); @@ -124,7 +139,7 @@ bool LLNotificationChannelPanel::update(const LLSD& payload) row["columns"][2]["type"] = "date"; LLScrollListItem* sli = getChild<LLScrollListCtrl>("notifications_list")->addElement(row); - sli->setUserdata(&(*notification)); + sli->setUserdata(new LLNotification(notification->asLLSD())); } return false; diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 6e47cbb09f..d3773767d0 100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -756,6 +756,16 @@ void LLFloaterPreference::initDoNotDisturbResponse() } } +//static +void LLFloaterPreference::updateShowFavoritesCheckbox(bool val) +{ + LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences"); + if (instance) + { + instance->getChild<LLUICtrl>("favorites_on_login_check")->setValue(val); + } +} + void LLFloaterPreference::setHardwareDefaults() { LLFeatureManager::getInstance()->applyRecommendedSettings(); @@ -1609,6 +1619,7 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im getChildView("chat_font_size")->setEnabled(TRUE); } + void LLFloaterPreference::refreshUI() { refresh(); @@ -1901,6 +1912,8 @@ BOOL LLPanelPreference::postBuild() if (hasChild("favorites_on_login_check", TRUE)) { getChild<LLCheckBoxCtrl>("favorites_on_login_check")->setCommitCallback(boost::bind(&showFavoritesOnLoginWarning, _1, _2)); + bool show_favorites_at_login = LLPanelLogin::getShowFavorites(); + getChild<LLCheckBoxCtrl>("favorites_on_login_check")->setValue(show_favorites_at_login); } //////////////////////PanelAdvanced /////////////////// diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index e287631b1a..7bf6ae7d79 100755 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -84,6 +84,9 @@ public: // translate user's do not disturb response message according to current locale if message is default, otherwise do nothing static void initDoNotDisturbResponse(); + // update Show Favorites checkbox + static void updateShowFavoritesCheckbox(bool val); + void processProperties( void* pData, EAvatarProcessorType type ); void processProfileProperties(const LLAvatarData* pAvatarData ); void storeAvatarProperties( const LLAvatarData* pAvatarData ); diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 5e9b25b474..a2af9da670 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -481,6 +481,17 @@ void LLFloaterRegionInfo::refresh() } } +void LLFloaterRegionInfo::enableTopButtons() +{ + getChildView("top_colliders_btn")->setEnabled(true); + getChildView("top_scripts_btn")->setEnabled(true); +} + +void LLFloaterRegionInfo::disableTopButtons() +{ + getChildView("top_colliders_btn")->setEnabled(false); + getChildView("top_scripts_btn")->setEnabled(false); +} ///---------------------------------------------------------------------------- /// Local class implementation @@ -1033,6 +1044,11 @@ void LLPanelRegionDebugInfo::onClickTopColliders(void* data) if(!instance) return; LLFloaterReg::showInstance("top_objects"); instance->clearList(); + instance->disableRefreshBtn(); + + self->getChildView("top_colliders_btn")->setEnabled(false); + self->getChildView("top_scripts_btn")->setEnabled(false); + self->sendEstateOwnerMessage(gMessageSystem, "colliders", invoice, strings); } @@ -1047,6 +1063,11 @@ void LLPanelRegionDebugInfo::onClickTopScripts(void* data) if(!instance) return; LLFloaterReg::showInstance("top_objects"); instance->clearList(); + instance->disableRefreshBtn(); + + self->getChildView("top_colliders_btn")->setEnabled(false); + self->getChildView("top_scripts_btn")->setEnabled(false); + self->sendEstateOwnerMessage(gMessageSystem, "scripts", invoice, strings); } diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index 5bc4273d5f..792f60ebc8 100755 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -96,6 +96,8 @@ public: void requestRegionInfo(); void requestMeshRezInfo(); + void enableTopButtons(); + void disableTopButtons(); private: diff --git a/indra/newview/llfloatersidepanelcontainer.cpp b/indra/newview/llfloatersidepanelcontainer.cpp index c5248719e9..aee20ff706 100755 --- a/indra/newview/llfloatersidepanelcontainer.cpp +++ b/indra/newview/llfloatersidepanelcontainer.cpp @@ -57,7 +57,7 @@ void LLFloaterSidePanelContainer::onOpen(const LLSD& key) getChild<LLPanel>(sMainPanelName)->onOpen(key); } -void LLFloaterSidePanelContainer::onClickCloseBtn(bool) +void LLFloaterSidePanelContainer::closeFloater(bool app_quitting) { LLPanelOutfitEdit* panel_outfit_edit = dynamic_cast<LLPanelOutfitEdit*>(LLFloaterSidePanelContainer::getPanel("appearance", "panel_outfit_edit")); @@ -75,7 +75,7 @@ void LLFloaterSidePanelContainer::onClickCloseBtn(bool) } } - LLFloater::onClickCloseBtn(); + LLFloater::closeFloater(app_quitting); } LLPanel* LLFloaterSidePanelContainer::openChildPanel(const std::string& panel_name, const LLSD& params) diff --git a/indra/newview/llfloatersidepanelcontainer.h b/indra/newview/llfloatersidepanelcontainer.h index 13b17e8867..d7ecd52e57 100755 --- a/indra/newview/llfloatersidepanelcontainer.h +++ b/indra/newview/llfloatersidepanelcontainer.h @@ -51,7 +51,7 @@ public: /*virtual*/ void onOpen(const LLSD& key); - /*virtual*/ void onClickCloseBtn(bool app_quitting = false); + /*virtual*/ void closeFloater(bool app_quitting = false); LLPanel* openChildPanel(const std::string& panel_name, const LLSD& params); diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 960d3f35dd..8677028942 100755 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -62,7 +62,6 @@ const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512 static LLDefaultChildRegistry::Register<LLSnapshotFloaterView> r("snapshot_floater_view"); - ///---------------------------------------------------------------------------- /// Class LLFloaterSnapshot::Impl ///---------------------------------------------------------------------------- @@ -96,7 +95,6 @@ public: static void onClickAutoSnap(LLUICtrl *ctrl, void* data); static void onClickFilter(LLUICtrl *ctrl, void* data); //static void onClickAdvanceSnap(LLUICtrl *ctrl, void* data); - static void onClickMore(void* data) ; static void onClickUICheck(LLUICtrl *ctrl, void* data); static void onClickHUDCheck(LLUICtrl *ctrl, void* data); static void applyKeepAspectCheck(LLFloaterSnapshot* view, BOOL checked); @@ -264,29 +262,34 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp) BOOL advanced = gSavedSettings.getBOOL("AdvanceSnapshot"); - // Show/hide advanced options. - LLPanel* advanced_options_panel = floaterp->getChild<LLPanel>("advanced_options_panel"); - floaterp->getChild<LLButton>("advanced_options_btn")->setImageOverlay(advanced ? "TabIcon_Open_Off" : "TabIcon_Close_Off"); - if (advanced != advanced_options_panel->getVisible()) + //BD - Automatically calculate the size of our snapshot window to enlarge + // the snapshot preview to its maximum size, this is especially helpfull + // for pretty much every aspect ratio other than 1:1. + F32 panel_width = 400.f * gViewerWindow->getWorldViewAspectRatio(); + + //BD - Make sure we clamp at 700 here because 700 would be for 16:9 which we + // consider the maximum. Everything bigger will be clamped and will have + // a slightly smaller preview window which most likely won't fill up the + // whole snapshot floater as it should. + if(panel_width > 700.f) { - S32 panel_width = advanced_options_panel->getRect().getWidth(); - floaterp->getChild<LLPanel>("advanced_options_panel")->setVisible(advanced); - S32 floater_width = floaterp->getRect().getWidth(); - floater_width += (advanced ? panel_width : -panel_width); - floaterp->reshape(floater_width, floaterp->getRect().getHeight()); + panel_width = 700.f; } - if(!advanced) //set to original window resolution + S32 floater_width = 224.f; + if(advanced) { - previewp->mKeepAspectRatio = TRUE; - - floaterp->getChild<LLComboBox>("profile_size_combo")->setCurrentByIndex(0); - floaterp->getChild<LLComboBox>("postcard_size_combo")->setCurrentByIndex(0); - floaterp->getChild<LLComboBox>("texture_size_combo")->setCurrentByIndex(0); - floaterp->getChild<LLComboBox>("local_size_combo")->setCurrentByIndex(0); + floater_width = floater_width + panel_width; + } - LLSnapshotLivePreview* previewp = getPreviewView(floaterp); - previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); + LLUICtrl* thumbnail_placeholder = floaterp->getChild<LLUICtrl>("thumbnail_placeholder"); + thumbnail_placeholder->setVisible(advanced); + thumbnail_placeholder->reshape(panel_width, thumbnail_placeholder->getRect().getHeight()); + floaterp->getChild<LLUICtrl>("image_res_text")->setVisible(advanced); + floaterp->getChild<LLUICtrl>("file_size_label")->setVisible(advanced); + if(!floaterp->isMinimized()) + { + floaterp->reshape(floater_width, floaterp->getRect().getHeight()); } bool use_freeze_frame = floaterp->getChild<LLUICtrl>("freeze_frame_check")->getValue().asBoolean(); @@ -388,7 +391,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) height_ctrl->setValue(h); } - // Сlamp snapshot resolution to window size when showing UI or HUD in snapshot. + // Clamp snapshot resolution to window size when showing UI or HUD in snapshot. if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot")) { S32 width = gViewerWindow->getWindowWidthRaw(); @@ -576,25 +579,11 @@ void LLFloaterSnapshot::Impl::onClickFilter(LLUICtrl *ctrl, void* data) LLComboBox* filterbox = static_cast<LLComboBox *>(view->getChild<LLComboBox>("filters_combobox")); std::string filter_name = (filterbox->getCurrentIndex() ? filterbox->getSimple() : ""); previewp->setFilter(filter_name); - previewp->updateSnapshot(FALSE, TRUE); + previewp->updateSnapshot(TRUE); } } } -void LLFloaterSnapshot::Impl::onClickMore(void* data) -{ - BOOL visible = gSavedSettings.getBOOL("AdvanceSnapshot"); - - LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; - if (view) - { - view->impl.setStatus(Impl::STATUS_READY); - gSavedSettings.setBOOL("AdvanceSnapshot", !visible); - updateControls(view) ; - updateLayout(view) ; - } -} - // static void LLFloaterSnapshot::Impl::onClickUICheck(LLUICtrl *ctrl, void* data) { @@ -772,6 +761,12 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL S32 original_width = 0 , original_height = 0 ; previewp->getSize(original_width, original_height) ; + if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot")) + { //clamp snapshot resolution to window size when showing UI or HUD in snapshot + width = llmin(width, gViewerWindow->getWindowWidthRaw()); + height = llmin(height, gViewerWindow->getWindowHeightRaw()); + } + if (width == 0 || height == 0) { // take resolution from current window size @@ -817,14 +812,12 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL checkAspectRatio(view, width) ; previewp->getSize(width, height); - - if (gSavedSettings.getBOOL("RenderUIInSnapshot") || gSavedSettings.getBOOL("RenderHUDInSnapshot")) - { //clamp snapshot resolution to window size when showing UI or HUD in snapshot - width = llmin(width, gViewerWindow->getWindowWidthRaw()); - height = llmin(height, gViewerWindow->getWindowHeightRaw()); - } - updateSpinners(view, previewp, width, height, TRUE); // may change width and height + // We use the height spinner here because we come here via the aspect ratio + // checkbox as well and we want height always changing to width by default. + // If we use the width spinner we would change width according to height by + // default, that is not what we want. + updateSpinners(view, previewp, width, height, !getHeightSpinner(view)->isDirty()); // may change width and height if(getWidthSpinner(view)->getValue().asInteger() != width || getHeightSpinner(view)->getValue().asInteger() != height) { @@ -839,12 +832,11 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL // hide old preview as the aspect ratio could be wrong checkAutoSnapshot(previewp, FALSE); LL_DEBUGS() << "updating thumbnail" << LL_ENDL; - getPreviewView(view)->updateSnapshot(FALSE, TRUE); + getPreviewView(view)->updateSnapshot(TRUE); if(do_update) { LL_DEBUGS() << "Will update controls" << LL_ENDL; updateControls(view); - setNeedRefresh(view, true); } } } @@ -887,7 +879,6 @@ void LLFloaterSnapshot::Impl::onImageFormatChange(LLFloaterSnapshot* view) LL_DEBUGS() << "image format changed, updating snapshot" << LL_ENDL; getPreviewView(view)->updateSnapshot(TRUE); updateControls(view); - setNeedRefresh(view, false); // we're refreshing } } @@ -956,6 +947,8 @@ void LLFloaterSnapshot::Impl::setImageSizeSpinnersValues(LLFloaterSnapshot *view // static void LLFloaterSnapshot::Impl::updateSpinners(LLFloaterSnapshot* view, LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL is_width_changed) { + getWidthSpinner(view)->resetDirty(); + getHeightSpinner(view)->resetDirty(); if (checkImageSize(previewp, width, height, is_width_changed, previewp->getMaxImageSize())) { setImageSizeSpinnersValues(view, width, height); @@ -965,8 +958,6 @@ void LLFloaterSnapshot::Impl::updateSpinners(LLFloaterSnapshot* view, LLSnapshot // static void LLFloaterSnapshot::Impl::applyCustomResolution(LLFloaterSnapshot* view, S32 w, S32 h) { - bool need_refresh = false; - LL_DEBUGS() << "applyCustomResolution(" << w << ", " << h << ")" << LL_ENDL; if (!view) return; @@ -981,25 +972,16 @@ void LLFloaterSnapshot::Impl::applyCustomResolution(LLFloaterSnapshot* view, S32 //if to upload a snapshot, process spinner input in a special way. previewp->setMaxImageSize((S32) getWidthSpinner(view)->getMaxValue()) ; - updateSpinners(view, previewp, w, h, w != curw); // may change w and h - previewp->setSize(w,h); checkAutoSnapshot(previewp, FALSE); - LL_DEBUGS() << "applied custom resolution, updating thumbnail" << LL_ENDL; - previewp->updateSnapshot(FALSE, TRUE); comboSetCustom(view, "profile_size_combo"); comboSetCustom(view, "postcard_size_combo"); comboSetCustom(view, "texture_size_combo"); comboSetCustom(view, "local_size_combo"); - need_refresh = true; + LL_DEBUGS() << "applied custom resolution, updating thumbnail" << LL_ENDL; + previewp->updateSnapshot(TRUE); } } - - updateControls(view); - if (need_refresh) - { - setNeedRefresh(view, true); // need to do this after updateControls() - } } // static @@ -1055,8 +1037,6 @@ BOOL LLFloaterSnapshot::postBuild() mSucceessLblPanel = getChild<LLUICtrl>("succeeded_panel"); mFailureLblPanel = getChild<LLUICtrl>("failed_panel"); - childSetAction("advanced_options_btn", Impl::onClickMore, this); - childSetCommitCallback("ui_check", Impl::onClickUICheck, this); getChild<LLUICtrl>("ui_check")->setValue(gSavedSettings.getBOOL("RenderUIInSnapshot")); @@ -1075,24 +1055,15 @@ BOOL LLFloaterSnapshot::postBuild() getChild<LLUICtrl>("auto_snapshot_check")->setValue(gSavedSettings.getBOOL("AutoSnapshot")); childSetCommitCallback("auto_snapshot_check", Impl::onClickAutoSnap, this); + // Filters LLComboBox* filterbox = getChild<LLComboBox>("filters_combobox"); - if (gSavedSettings.getBOOL("SnapshotFiltersEnabled")) - { - // Update filter list if setting is on (experimental) - std::vector<std::string> filter_list = LLImageFiltersManager::getInstance()->getFiltersList(); - for (U32 i = 0; i < filter_list.size(); i++) - { - filterbox->add(filter_list[i]); - } - childSetCommitCallback("filters_combobox", Impl::onClickFilter, this); - } - else + std::vector<std::string> filter_list = LLImageFiltersManager::getInstance()->getFiltersList(); + for (U32 i = 0; i < filter_list.size(); i++) { - // Hide Filter UI if setting is off (default) - getChild<LLUICtrl>("filter_list_label")->setVisible(FALSE); - filterbox->setVisible(FALSE); + filterbox->add(filter_list[i]); } + childSetCommitCallback("filters_combobox", Impl::onClickFilter, this); LLWebProfile::setImageUploadResultCallback(boost::bind(&LLFloaterSnapshot::Impl::onSnapshotUploadFinished, _1)); LLPostCard::setPostResultCallback(boost::bind(&LLFloaterSnapshot::Impl::onSendingPostcardFinished, _1)); @@ -1119,7 +1090,7 @@ BOOL LLFloaterSnapshot::postBuild() getChild<LLComboBox>("profile_size_combo")->selectNthItem(0); getChild<LLComboBox>("postcard_size_combo")->selectNthItem(0); getChild<LLComboBox>("texture_size_combo")->selectNthItem(0); - getChild<LLComboBox>("local_size_combo")->selectNthItem(0); + getChild<LLComboBox>("local_size_combo")->selectNthItem(8); getChild<LLComboBox>("local_format_combo")->selectNthItem(0); impl.mPreviewHandle = previewp->getHandle(); @@ -1145,7 +1116,7 @@ void LLFloaterSnapshot::draw() LLFloater::draw(); - if (previewp && !isMinimized()) + if (previewp && !isMinimized() && sThumbnailPlaceholder->getVisible()) { if(previewp->getThumbnailImage()) { @@ -1172,44 +1143,13 @@ void LLFloaterSnapshot::draw() previewp->drawPreviewRect(offset_x, offset_y) ; - // Draw some controls on top of the preview thumbnail. - static const S32 PADDING = 5; - static const S32 REFRESH_LBL_BG_HEIGHT = 32; - - // Reshape and position the posting result message panels at the top of the thumbnail. - // Do this regardless of current posting status (finished or not) to avoid flicker - // when the result message is displayed for the first time. - // if (impl.getStatus() == Impl::STATUS_FINISHED) - { - LLRect result_lbl_rect = mSucceessLblPanel->getRect(); - const S32 result_lbl_h = result_lbl_rect.getHeight(); - result_lbl_rect.setLeftTopAndSize(local_offset_x, local_offset_y + thumbnail_h, thumbnail_w - 1, result_lbl_h); - mSucceessLblPanel->reshape(result_lbl_rect.getWidth(), result_lbl_h); - mSucceessLblPanel->setRect(result_lbl_rect); - mFailureLblPanel->reshape(result_lbl_rect.getWidth(), result_lbl_h); - mFailureLblPanel->setRect(result_lbl_rect); - } - - // Position the refresh button in the bottom left corner of the thumbnail. - mRefreshBtn->setOrigin(local_offset_x + PADDING, local_offset_y + PADDING); - - if (impl.mNeedRefresh) - { - // Place the refresh hint text to the right of the refresh button. - const LLRect& refresh_btn_rect = mRefreshBtn->getRect(); - mRefreshLabel->setOrigin(refresh_btn_rect.mLeft + refresh_btn_rect.getWidth() + PADDING, refresh_btn_rect.mBottom); - - // Draw the refresh hint background. - LLRect refresh_label_bg_rect(offset_x, offset_y + REFRESH_LBL_BG_HEIGHT, offset_x + thumbnail_w - 1, offset_y); - gl_rect_2d(refresh_label_bg_rect, LLColor4::white % 0.9f, TRUE); - } - gGL.pushUIMatrix(); LLUI::translate((F32) thumbnail_rect.mLeft, (F32) thumbnail_rect.mBottom); sThumbnailPlaceholder->draw(); gGL.popUIMatrix(); } } + impl.updateLayout(this); } void LLFloaterSnapshot::onOpen(const LLSD& key) @@ -1225,6 +1165,9 @@ void LLFloaterSnapshot::onOpen(const LLSD& key) gSnapshotFloaterView->setVisible(TRUE); gSnapshotFloaterView->adjustToFitScreen(this, FALSE); + impl.updateControls(this); + impl.updateLayout(this); + // Initialize default tab. getChild<LLSideTrayPanelContainer>("panel_container")->getCurrentPanel()->onOpen(LLSD()); } @@ -1293,8 +1236,6 @@ S32 LLFloaterSnapshot::notify(const LLSD& info) { // Disable the send/post/save buttons until snapshot is ready. impl.updateControls(this); - // Force hiding the "Refresh to save" hint because we know we've just started refresh. - impl.setNeedRefresh(this, false); return 1; } diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index bd5d2207b4..7477b02867 100755 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -888,6 +888,9 @@ void LLFloaterTools::onClose(bool app_quitting) // hide the advanced object weights floater LLFloaterReg::hideInstance("object_weights"); + + // prepare content for next call + mPanelContents->clearContents(); } void click_popup_info(void*) diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp index 7530c72dd2..d604b8619a 100755 --- a/indra/newview/llfloatertopobjects.cpp +++ b/indra/newview/llfloatertopobjects.cpp @@ -50,6 +50,7 @@ #include "llviewerregion.h" #include "lluictrlfactory.h" #include "llviewerwindow.h" +#include "llfloaterregioninfo.h" //LLFloaterTopObjects* LLFloaterTopObjects::sInstance = NULL; @@ -207,7 +208,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data) columns[column_num++]["font"] = "SANSSERIF"; columns[column_num]["column"] = "location"; - columns[column_num]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z); + columns[column_num]["value"] = llformat("<%0.f, %0.f, %0.f>", location_x, location_y, location_z); columns[column_num++]["font"] = "SANSSERIF"; columns[column_num]["column"] = "parcel"; @@ -257,6 +258,8 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data) format.setArg("[COUNT]", llformat("%d", total_count)); format.setArg("[TIME]", llformat("%0.3f", mtotalScore)); getChild<LLUICtrl>("title_text")->setValue(LLSD(format)); + list->setColumnLabel("URLs", getString("URLs")); + list->setColumnLabel("memory", getString("memory")); } else { @@ -268,6 +271,13 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data) format.setArg("[COUNT]", llformat("%d", total_count)); getChild<LLUICtrl>("title_text")->setValue(LLSD(format)); } + + LLFloaterRegionInfo* region_info_floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info"); + if(region_info_floater) + { + region_info_floater->enableTopButtons(); + } + getChildView("refresh_btn")->setEnabled(true); } void LLFloaterTopObjects::onCommitObjectsList() @@ -453,12 +463,24 @@ void LLFloaterTopObjects::onRefresh() msg->addStringFast(_PREHASH_Filter, filter); msg->addS32Fast(_PREHASH_ParcelLocalID, 0); + LLFloaterRegionInfo* region_info_floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info"); + if(region_info_floater) + { + region_info_floater->disableTopButtons(); + } + disableRefreshBtn(); + msg->sendReliable(gAgent.getRegionHost()); mFilter.clear(); mFlags = 0; } +void LLFloaterTopObjects::disableRefreshBtn() +{ + getChildView("refresh_btn")->setEnabled(false); +} + void LLFloaterTopObjects::onGetByObjectName() { mFlags = STAT_FILTER_BY_OBJECT; diff --git a/indra/newview/llfloatertopobjects.h b/indra/newview/llfloatertopobjects.h index 28d2aa58e2..dbbe9ac521 100755 --- a/indra/newview/llfloatertopobjects.h +++ b/indra/newview/llfloatertopobjects.h @@ -66,6 +66,7 @@ public: void onRefresh(); static void setMode(U32 mode); + void disableRefreshBtn(); private: LLFloaterTopObjects(const LLSD& key); diff --git a/indra/newview/llfloatertwitter.cpp b/indra/newview/llfloatertwitter.cpp index 78e9259919..868d623d57 100644 --- a/indra/newview/llfloatertwitter.cpp +++ b/indra/newview/llfloatertwitter.cpp @@ -64,7 +64,6 @@ const std::string DEFAULT_STATUS_TEXT = " #SecondLife"; /////////////////////////// LLTwitterPhotoPanel::LLTwitterPhotoPanel() : -mSnapshotPanel(NULL), mResolutionComboBox(NULL), mRefreshBtn(NULL), mBtnPreview(NULL), @@ -94,7 +93,6 @@ BOOL LLTwitterPhotoPanel::postBuild() { setVisibleCallback(boost::bind(&LLTwitterPhotoPanel::onVisibilityChange, this, _2)); - mSnapshotPanel = getChild<LLUICtrl>("snapshot_panel"); mResolutionComboBox = getChild<LLUICtrl>("resolution_combobox"); mResolutionComboBox->setValue("[i800,i600]"); // hardcoded defaults ftw! mResolutionComboBox->setCommitCallback(boost::bind(&LLTwitterPhotoPanel::updateResolution, this, TRUE)); @@ -194,15 +192,8 @@ void LLTwitterPhotoPanel::draw() // calc preview offset within the preview rect const S32 local_offset_x = (thumbnail_rect.getWidth() - thumbnail_w) / 2 ; const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2 ; - - // calc preview offset within the floater rect - // Hack : To get the full offset, we need to take into account each and every offset of each widgets up to the floater. - // This is almost as arbitrary as using a fixed offset so that's what we do here for the sake of simplicity. - // *TODO : Get the offset looking through the hierarchy of widgets, should be done in postBuild() so to avoid traversing the hierarchy each time. - S32 offset_x = thumbnail_rect.mLeft + local_offset_x - 1; - S32 offset_y = thumbnail_rect.mBottom + local_offset_y - 39; - - mSnapshotPanel->localPointToOtherView(offset_x, offset_y, &offset_x, &offset_y, getParentByType<LLFloater>()); + S32 offset_x = thumbnail_rect.mLeft + local_offset_x; + S32 offset_y = thumbnail_rect.mBottom + local_offset_y; gGL.matrixMode(LLRender::MM_MODELVIEW); // Apply floater transparency to the texture unless the floater is focused. @@ -238,7 +229,7 @@ void LLTwitterPhotoPanel::onVisibilityChange(BOOL visible) LLSnapshotLivePreview* preview = getPreviewView(); if(preview) { - lldebugs << "opened, updating snapshot" << llendl; + LL_DEBUGS() << "opened, updating snapshot" << LL_ENDL; preview->updateSnapshot(TRUE); } } @@ -455,7 +446,7 @@ void LLTwitterPhotoPanel::updateControls() BOOL got_snap = previewp && previewp->getSnapshotUpToDate(); // *TODO: Separate maximum size for Web images from postcards - lldebugs << "Is snapshot up-to-date? " << got_snap << llendl; + LL_DEBUGS() << "Is snapshot up-to-date? " << got_snap << LL_ENDL; updateResolution(FALSE); } @@ -485,13 +476,13 @@ void LLTwitterPhotoPanel::updateResolution(BOOL do_update) if (width == 0 || height == 0) { // take resolution from current window size - lldebugs << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl; + LL_DEBUGS() << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << LL_ENDL; previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); } else { // use the resolution from the selected pre-canned drop-down choice - lldebugs << "Setting preview res selected from combo: " << width << "x" << height << llendl; + LL_DEBUGS() << "Setting preview res selected from combo: " << width << "x" << height << LL_ENDL; previewp->setSize(width, height); } @@ -755,7 +746,7 @@ void LLFloaterTwitter::showPhotoPanel() LLTabContainer* parent = dynamic_cast<LLTabContainer*>(mTwitterPhotoPanel->getParent()); if (!parent) { - llwarns << "Cannot find panel container" << llendl; + LL_WARNS() << "Cannot find panel container" << LL_ENDL; return; } diff --git a/indra/newview/llfloatertwitter.h b/indra/newview/llfloatertwitter.h index f07ec2ca2f..d586799d18 100644 --- a/indra/newview/llfloatertwitter.h +++ b/indra/newview/llfloatertwitter.h @@ -70,7 +70,6 @@ private: LLHandle<LLView> mPreviewHandle; - LLUICtrl * mSnapshotPanel; LLUICtrl * mResolutionComboBox; LLUICtrl * mFilterComboBox; LLUICtrl * mRefreshBtn; diff --git a/indra/newview/llfloaterurlentry.cpp b/indra/newview/llfloaterurlentry.cpp index e26f1e9ea5..e02e8eeb5a 100755 --- a/indra/newview/llfloaterurlentry.cpp +++ b/indra/newview/llfloaterurlentry.cpp @@ -204,6 +204,10 @@ void LLFloaterURLEntry::onBtnOK( void* userdata ) LLURLHistory::addURL("parcel", media_url); } + // show progress bar here? + getWindow()->incBusyCount(); + self->getChildView("loading_label")->setVisible( true); + // leading whitespace causes problems with the MIME-type detection so strip it LLStringUtil::trim( media_url ); @@ -233,10 +237,6 @@ void LLFloaterURLEntry::onBtnOK( void* userdata ) self->getChildView("ok_btn")->setEnabled(false); self->getChildView("cancel_btn")->setEnabled(false); self->getChildView("media_entry")->setEnabled(false); - - // show progress bar here? - getWindow()->incBusyCount(); - self->getChildView("loading_label")->setVisible( true); } // static diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp index 7f599073d5..3f3d87b564 100755 --- a/indra/newview/llfloaterwebcontent.cpp +++ b/indra/newview/llfloaterwebcontent.cpp @@ -293,7 +293,7 @@ void LLFloaterWebContent::onOpen(const LLSD& key) void LLFloaterWebContent::onClose(bool app_quitting) { // If we close the web browsing window showing the facebook login, we need to signal to this object that the connection will not happen - LLFloater* fbc_web = LLFloaterReg::getInstance("fbc_web"); + LLFloater* fbc_web = LLFloaterReg::findInstance("fbc_web"); if (fbc_web == this) { if (!LLFacebookConnect::instance().isConnected()) diff --git a/indra/newview/llfolderviewmodelinventory.cpp b/indra/newview/llfolderviewmodelinventory.cpp index 7339398fa5..7615c12043 100755 --- a/indra/newview/llfolderviewmodelinventory.cpp +++ b/indra/newview/llfolderviewmodelinventory.cpp @@ -133,9 +133,9 @@ void LLFolderViewModelItemInventory::setPassedFilter(bool passed, S32 filter_gen bool before = mPrevPassedAllFilters; mPrevPassedAllFilters = passedFilter(filter_generation); - if (before != mPrevPassedAllFilters) + if (before != mPrevPassedAllFilters) { - // Need to rearrange the folder if the filtered state of the item changed + // Need to rearrange the folder if the filtered state of the item changed LLFolderViewFolder* parent_folder = mFolderViewItem->getParentFolder(); if (parent_folder) { diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp index b15556d73d..119872ec29 100755 --- a/indra/newview/llgesturemgr.cpp +++ b/indra/newview/llgesturemgr.cpp @@ -1406,7 +1406,7 @@ BOOL LLGestureMgr::matchPrefix(const std::string& in_str, std::string* out_str) } if (rest_of_match.compare("") == 0) { - return FALSE; + return TRUE; } if (buf.compare("") != 0) { diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 87335cd5e6..33e557cddd 100755 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -103,6 +103,7 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response bool confirm_attachment_rez(const LLSD& notification, const LLSD& response); void teleport_via_landmark(const LLUUID& asset_id); static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit); +static BOOL can_move_to_landmarks(LLInventoryItem* inv_item); static bool check_category(LLInventoryModel* model, const LLUUID& cat_id, LLInventoryPanel* active_panel, @@ -2216,13 +2217,18 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, && (LLToolDragAndDrop::SOURCE_AGENT == source); BOOL accept = FALSE; + U64 filter_types = filter->getFilterTypes(); + BOOL use_filter = filter_types && (filter_types&LLInventoryFilter::FILTERTYPE_DATE || (filter_types&LLInventoryFilter::FILTERTYPE_OBJECT)==0); + if (is_agent_inventory) { const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false); const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false); + const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false); const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id); - const BOOL move_is_into_outfit = getCategory() && (getCategory()->getPreferredType() == LLFolderType::FT_OUTFIT); + const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id); + const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id); //-------------------------------------------------------------------------------- @@ -2273,6 +2279,29 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, } } } + U32 max_items_to_wear = gSavedSettings.getU32("WearFolderLimit"); + if (is_movable + && move_is_into_current_outfit + && descendent_items.size() > max_items_to_wear) + { + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false); + gInventory.collectDescendentsIf(cat_id, + cats, + items, + LLInventoryModel::EXCLUDE_TRASH, + not_worn); + + if (items.size() > max_items_to_wear) + { + // Can't move 'large' folders into current outfit: MAINT-4086 + is_movable = FALSE; + LLStringUtil::format_map_t args; + args["AMOUNT"] = llformat("%d", max_items_to_wear); + tooltip_msg = LLTrans::getString("TooltipTooManyWearables",args); + } + } if (is_movable && move_is_into_trash) { for (S32 i=0; i < descendent_items.size(); ++i) @@ -2414,7 +2443,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, is_movable = active_folder_view != NULL; } - if (is_movable) + if (is_movable && use_filter) { // Check whether the folder being dragged from active inventory panel // passes the filter of the destination panel. @@ -2552,6 +2581,12 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id, BOOL accept = FALSE; BOOL is_move = FALSE; + BOOL use_filter = FALSE; + if (filter) + { + U64 filter_types = filter->getFilterTypes(); + use_filter = filter_types && (filter_types&LLInventoryFilter::FILTERTYPE_DATE || (filter_types&LLInventoryFilter::FILTERTYPE_OBJECT)==0); + } // coming from a task. Need to figure out if the person can // move/copy this item. @@ -2584,7 +2619,7 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id, accept = TRUE; } - if (filter && accept) + if (accept && use_filter) { accept = filter->check(item); } @@ -2797,7 +2832,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask) mContentsCount) { gInventory.removeObserver(this); - LLAppearanceMgr::instance().wearInventoryCategory(category, FALSE, FALSE); + LLAppearanceMgr::instance().wearInventoryCategory(category, FALSE, TRUE); delete this; } } @@ -2815,7 +2850,7 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action) LLFolderViewFolder *f = dynamic_cast<LLFolderViewFolder *>(mInventoryPanel.get()->getItemByID(mUUID)); if (f) { - f->setOpen(TRUE); + f->toggleOpen(); } return; @@ -3097,10 +3132,14 @@ void LLFolderBridge::pasteFromClipboard() { const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false); const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false); + const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false); + const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false); const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); - const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); + const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id); + const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id); + const BOOL move_is_into_favorites = (mUUID == favorites_id); std::vector<LLUUID> objects; LLClipboard::instance().pasteFromClipboard(objects); @@ -3158,11 +3197,18 @@ void LLFolderBridge::pasteFromClipboard() { if (move_is_into_current_outfit || move_is_into_outfit) { - if (can_move_to_outfit(item, move_is_into_current_outfit)) + if (item && can_move_to_outfit(item, move_is_into_current_outfit)) { dropToOutfit(item, move_is_into_current_outfit); } } + else if (move_is_into_favorites) + { + if (item && can_move_to_landmarks(item)) + { + dropToFavorites(item); + } + } else if (LLClipboard::instance().isCutMode()) { // Do a move to "paste" a "cut" @@ -3225,9 +3271,11 @@ void LLFolderBridge::pasteLinkFromClipboard() { const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false); const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false); + const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false); const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); - const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); + const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id); + const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id); if (move_is_into_outbox) @@ -3729,6 +3777,28 @@ void LLFolderBridge::modifyOutfit(BOOL append) LLViewerInventoryCategory* cat = getCategory(); if(!cat) return; + // checking amount of items to wear + U32 max_items = gSavedSettings.getU32("WearFolderLimit"); + if (cat->getDescendentCount() > max_items) + { + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false); + gInventory.collectDescendentsIf(cat->getUUID(), + cats, + items, + LLInventoryModel::EXCLUDE_TRASH, + not_worn); + + if (items.size() > max_items) + { + LLSD args; + args["AMOUNT"] = llformat("%d", max_items); + LLNotificationsUtil::add("TooManyWearables", args); + return; + } + } + LLAppearanceMgr::instance().wearInventoryCategory( cat, FALSE, append ); } @@ -3783,6 +3853,12 @@ static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_curr return FALSE; } + U32 flags = inv_item->getFlags(); + if(flags & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS) + { + return FALSE; + } + if (move_is_into_current_outfit && get_is_item_worn(inv_item->getUUID())) { return FALSE; @@ -3868,16 +3944,22 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false); const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false); const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false); + const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false); const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); const BOOL move_is_into_favorites = (mUUID == favorites_id); - const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); + const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id); + const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id); const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id); const BOOL move_is_from_outbox = model->isObjectDescendentOf(inv_item->getUUID(), outbox_id); LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource(); BOOL accept = FALSE; + U64 filter_types = filter->getFilterTypes(); + // We shouldn't allow to drop non recent items into recent tab (or some similar transactions) + // while we are allowing to interact with regular filtered inventory + BOOL use_filter = filter_types && (filter_types&LLInventoryFilter::FILTERTYPE_DATE || (filter_types&LLInventoryFilter::FILTERTYPE_OBJECT)==0); LLViewerObject* object = NULL; if(LLToolDragAndDrop::SOURCE_AGENT == source) { @@ -3976,7 +4058,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, // Check whether the item being dragged from active inventory panel // passes the filter of the destination panel. - if (accept && active_panel) + if (accept && active_panel && use_filter) { LLFolderViewItem* fv_item = active_panel->getItemByID(inv_item->getUUID()); if (!fv_item) return false; @@ -4114,7 +4196,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, // Check whether the item being dragged from in world // passes the filter of the destination panel. - if (accept) + if (accept && use_filter) { accept = filter->check(inv_item); } @@ -4158,7 +4240,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, // Check whether the item being dragged from notecard // passes the filter of the destination panel. - if (accept) + if (accept && use_filter) { accept = filter->check(inv_item); } @@ -4198,7 +4280,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, // Check whether the item being dragged from the library // passes the filter of the destination panel. - if (accept && active_panel) + if (accept && active_panel && use_filter) { LLFolderViewItem* fv_item = active_panel->getItemByID(inv_item->getUUID()); if (!fv_item) return false; diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 7dac830098..833fbbadbb 100755 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -158,7 +158,7 @@ protected: BOOL isAgentInventory() const; // false if lost or in the inventory library BOOL isCOFFolder() const; // true if COF or descendant of BOOL isInboxFolder() const; // true if COF or descendant of marketplace inbox - BOOL isOutboxFolder() const; // true if COF or descendant of marketplace outbox + BOOL isOutboxFolderDirectParent() const; const LLUUID getOutboxFolder() const; @@ -172,6 +172,10 @@ protected: const LLUUID& new_parent, BOOL restamp); void removeBatchNoCheck(std::vector<LLFolderViewModelItem*>& batch); + +public: + BOOL isOutboxFolder() const; // true if COF or descendant of marketplace outbox + protected: LLHandle<LLInventoryPanel> mInventoryPanel; LLFolderView* mRoot; diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index 000eee3317..f211acedf0 100755 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -37,6 +37,7 @@ #include "llfolderview.h" #include "llinventorybridge.h" #include "llviewerfoldertype.h" +#include "llradiogroup.h" // linden library includes #include "llclipboard.h" @@ -51,6 +52,7 @@ LLInventoryFilter::FilterOps::FilterOps(const Params& p) mMinDate(p.date_range.min_date), mMaxDate(p.date_range.max_date), mHoursAgo(p.hours_ago), + mDateSearchDirection(p.date_search_direction), mShowFolderState(p.show_folder_state), mPermissions(p.permissions), mFilterTypes(p.types), @@ -177,6 +179,7 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent // Pass if this item's type is of the correct filter type if (filterTypes & FILTERTYPE_OBJECT) { + // If it has no type, pass it, unless it's a link. if (object_type == LLInventoryType::IT_NONE) { @@ -209,6 +212,7 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent { const U16 HOURS_TO_SECONDS = 3600; time_t earliest = time_corrected() - mFilterOps.mHoursAgo * HOURS_TO_SECONDS; + if (mFilterOps.mMinDate > time_min() && mFilterOps.mMinDate < earliest) { earliest = mFilterOps.mMinDate; @@ -217,9 +221,19 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent { earliest = 0; } - if (listener->getCreationDate() < earliest || - listener->getCreationDate() > mFilterOps.mMaxDate) - return FALSE; + + if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection || isSinceLogoff()) + { + if (listener->getCreationDate() < earliest || + listener->getCreationDate() > mFilterOps.mMaxDate) + return FALSE; + } + else + { + if (listener->getCreationDate() > earliest || + listener->getCreationDate() > mFilterOps.mMaxDate) + return FALSE; + } } //////////////////////////////////////////////////////////////////////////////// @@ -244,13 +258,25 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent bool is_hidden_if_empty = LLViewerFolderType::lookupIsHiddenIfEmpty(listener->getPreferredType()); if (is_hidden_if_empty) { - // Force the fetching of those folders so they are hidden iff they really are empty... + // Force the fetching of those folders so they are hidden if they really are empty... gInventory.fetchDescendentsOf(object_id); - return FALSE; + + LLInventoryModel::cat_array_t* cat_array = NULL; + LLInventoryModel::item_array_t* item_array = NULL; + gInventory.getDirectDescendentsOf(object_id,cat_array,item_array); + S32 descendents_actual = 0; + if(cat_array && item_array) + { + descendents_actual = cat_array->size() + item_array->size(); + } + if (descendents_actual == 0) + { + return FALSE; + } } } } - + return TRUE; } @@ -629,11 +655,22 @@ void LLInventoryFilter::setHoursAgo(U32 hours) bool are_date_limits_valid = mFilterOps.mMinDate == time_min() && mFilterOps.mMaxDate == time_max(); bool is_increasing = hours > mFilterOps.mHoursAgo; + bool is_decreasing = hours < mFilterOps.mHoursAgo; bool is_increasing_from_zero = is_increasing && !mFilterOps.mHoursAgo && !isSinceLogoff(); // *NOTE: need to cache last filter time, in case filter goes stale - BOOL less_restrictive = (are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo)) || !hours); - BOOL more_restrictive = (are_date_limits_valid && (!is_increasing && hours) || is_increasing_from_zero); + BOOL less_restrictive; + BOOL more_restrictive; + if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection) + { + less_restrictive = (are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo)) || !hours); + more_restrictive = (are_date_limits_valid && (!is_increasing && hours) || is_increasing_from_zero); + } + else + { + less_restrictive = (are_date_limits_valid && ((is_decreasing && mFilterOps.mHoursAgo)) || !hours); + more_restrictive = (are_date_limits_valid && (!is_decreasing && hours) || is_increasing_from_zero); + } mFilterOps.mHoursAgo = hours; mFilterOps.mMinDate = time_min(); @@ -662,6 +699,20 @@ void LLInventoryFilter::setHoursAgo(U32 hours) } } +void LLInventoryFilter::setDateSearchDirection(U32 direction) +{ + if (direction != mFilterOps.mDateSearchDirection) + { + mFilterOps.mDateSearchDirection = direction; + setModified(FILTER_RESTART); + } +} + +U32 LLInventoryFilter::getDateSearchDirection() const +{ + return mFilterOps.mDateSearchDirection; +} + void LLInventoryFilter::setFilterLinks(U64 filter_links) { if (mFilterOps.mFilterLinks != filter_links) @@ -926,6 +977,7 @@ LLInventoryFilter& LLInventoryFilter::operator=( const LLInventoryFilter& othe setFilterObjectTypes(other.getFilterObjectTypes()); setDateRange(other.getMinDate(), other.getMaxDate()); setHoursAgo(other.getHoursAgo()); + setDateSearchDirection(other.getDateSearchDirection()); setShowFolderState(other.getShowFolderState()); setFilterPermissions(other.getFilterPermissions()); setFilterSubString(other.getFilterSubString()); @@ -945,6 +997,7 @@ void LLInventoryFilter::toParams(Params& params) const params.filter_ops.date_range.min_date = getMinDate(); params.filter_ops.date_range.max_date = getMaxDate(); params.filter_ops.hours_ago = getHoursAgo(); + params.filter_ops.date_search_direction = getDateSearchDirection(); params.filter_ops.show_folder_state = getShowFolderState(); params.filter_ops.permissions = getFilterPermissions(); params.substring = getFilterSubString(); @@ -966,12 +1019,18 @@ void LLInventoryFilter::fromParams(const Params& params) } setDateRange(params.filter_ops.date_range.min_date, params.filter_ops.date_range.max_date); setHoursAgo(params.filter_ops.hours_ago); + setDateSearchDirection(params.filter_ops.date_search_direction); setShowFolderState(params.filter_ops.show_folder_state); setFilterPermissions(params.filter_ops.permissions); setFilterSubString(params.substring); setDateRangeLastLogoff(params.since_logoff); } +U64 LLInventoryFilter::getFilterTypes() const +{ + return mFilterOps.mFilterTypes; +} + U64 LLInventoryFilter::getFilterObjectTypes() const { return mFilterOps.mFilterObjectTypes; diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h index ce516af0b9..5e18ad4d20 100755 --- a/indra/newview/llinventoryfilter.h +++ b/indra/newview/llinventoryfilter.h @@ -55,6 +55,12 @@ public: FILTERTYPE_EMPTYFOLDERS = 0x1 << 5 // pass if folder is not a system folder to be hidden if }; + enum EFilterDateDirection + { + FILTERDATEDIRECTION_NEWER, + FILTERDATEDIRECTION_OLDER + }; + enum EFilterLink { FILTERLINK_INCLUDE_LINKS, // show links too @@ -94,7 +100,8 @@ public: Optional<EFilterLink> links; Optional<LLUUID> uuid; Optional<DateRange> date_range; - Optional<S32> hours_ago; + Optional<U32> hours_ago; + Optional<U32> date_search_direction; Optional<EFolderShow> show_folder_state; Optional<PermissionMask> permissions; @@ -107,6 +114,7 @@ public: uuid("uuid"), date_range("date_range"), hours_ago("hours_ago", 0), + date_search_direction("date_search_direction", FILTERDATEDIRECTION_NEWER), show_folder_state("show_folder_state", SHOW_NON_EMPTY_FOLDERS), permissions("permissions", PERM_NONE) {} @@ -124,6 +132,7 @@ public: time_t mMinDate, mMaxDate; U32 mHoursAgo; + U32 mDateSearchDirection; EFolderShow mShowFolderState; PermissionMask mPermissions; @@ -151,6 +160,7 @@ public: // +-------------------------------------------------------------------+ // + Parameters // +-------------------------------------------------------------------+ + U64 getFilterTypes() const; U64 getFilterObjectTypes() const; U64 getFilterCategoryTypes() const; U64 getFilterWearableTypes() const; @@ -177,6 +187,8 @@ public: void setHoursAgo(U32 hours); U32 getHoursAgo() const; + void setDateSearchDirection(U32 direction); + U32 getDateSearchDirection() const; void setFilterLinks(U64 filter_link); U64 getFilterLinks() const; diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 1e7825a13e..1abc09bf3b 100755 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -881,7 +881,7 @@ bool LLFindWearablesEx::operator()(LLInventoryCategory* cat, LLInventoryItem* it if (!vitem) return false; // Skip non-wearables. - if (!vitem->isWearableType() && vitem->getType() != LLAssetType::AT_OBJECT) + if (!vitem->isWearableType() && vitem->getType() != LLAssetType::AT_OBJECT && vitem->getType() != LLAssetType::AT_GESTURE) { return false; } diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 14ca0095ae..f92332dea5 100755 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2002&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,6 +25,9 @@ */ #include "llviewerprecompiledheaders.h" + +#include <typeinfo> + #include "llinventorymodel.h" #include "llaisapi.h" @@ -50,7 +53,9 @@ #include "llvoavatarself.h" #include "llgesturemgr.h" #include "llsdutil.h" -#include <typeinfo> +#include "bufferarray.h" +#include "bufferstream.h" +#include "llcorehttputil.h" //#define DIFF_INVENTORY_FILES #ifdef DIFF_INVENTORY_FILES @@ -67,7 +72,8 @@ BOOL LLInventoryModel::sFirstTimeInViewer2 = TRUE; ///---------------------------------------------------------------------------- //BOOL decompress_file(const char* src_filename, const char* dst_filename); -const char CACHE_FORMAT_STRING[] = "%s.inv"; +static const char CACHE_FORMAT_STRING[] = "%s.inv"; +static const char * const LOG_INV("Inventory"); struct InventoryIDPtrLess { @@ -125,24 +131,32 @@ LLInventoryModel gInventory; // Default constructor LLInventoryModel::LLInventoryModel() -: mModifyMask(LLInventoryObserver::ALL), - mChangedItemIDs(), +: // These are now ordered, keep them that way. mBacklinkMMap(), + mIsAgentInvUsable(false), + mRootFolderID(), + mLibraryRootFolderID(), + mLibraryOwnerID(), mCategoryMap(), mItemMap(), - mCategoryLock(), - mItemLock(), - mLastItem(NULL), mParentChildCategoryTree(), mParentChildItemTree(), - mObservers(), - mRootFolderID(), - mLibraryRootFolderID(), - mLibraryOwnerID(), + mLastItem(NULL), mIsNotifyObservers(FALSE), - mIsAgentInvUsable(false) -{ -} + mModifyMask(LLInventoryObserver::ALL), + mChangedItemIDs(), + mObservers(), + mHttpRequestFG(NULL), + mHttpRequestBG(NULL), + mHttpOptions(NULL), + mHttpHeaders(NULL), + mHttpPolicyClass(LLCore::HttpRequest::DEFAULT_POLICY_ID), + mHttpPriorityFG(0), + mHttpPriorityBG(0), + mCategoryLock(), + mItemLock() +{} + // Destroys the object LLInventoryModel::~LLInventoryModel() @@ -162,6 +176,22 @@ void LLInventoryModel::cleanupInventory() delete observer; } mObservers.clear(); + + // Run down HTTP transport + if (mHttpHeaders) + { + mHttpHeaders->release(); + mHttpHeaders = NULL; + } + if (mHttpOptions) + { + mHttpOptions->release(); + mHttpOptions = NULL; + } + delete mHttpRequestFG; + mHttpRequestFG = NULL; + delete mHttpRequestBG; + mHttpRequestBG = NULL; } // This is a convenience function to check if one object has a parent @@ -253,7 +283,7 @@ bool LLInventoryModel::getObjectTopmostAncestor(const LLUUID& object_id, LLUUID& LLInventoryObject *parent_object = getObject(object->getParentUUID()); if (!parent_object) { - LL_WARNS() << "unable to trace topmost ancestor, missing item for uuid " << object->getParentUUID() << LL_ENDL; + LL_WARNS(LOG_INV) << "unable to trace topmost ancestor, missing item for uuid " << object->getParentUUID() << LL_ENDL; return false; } object = parent_object; @@ -508,7 +538,7 @@ public: protected: virtual void httpFailure() { - LL_WARNS("InvAPI") << dumpResponse() << LL_ENDL; + LL_WARNS(LOG_INV) << dumpResponse() << LL_ENDL; } virtual void httpSuccess() @@ -522,7 +552,7 @@ protected: } LLUUID category_id = content["folder_id"].asUUID(); - LL_DEBUGS("Avatar") << ll_pretty_print_sd(content) << LL_ENDL; + LL_DEBUGS(LOG_INV) << ll_pretty_print_sd(content) << LL_ENDL; // Add the category to the internal representation LLPointer<LLViewerInventoryCategory> cat = new LLViewerInventoryCategory( category_id, @@ -560,13 +590,13 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, LLUUID id; if(!isInventoryUsable()) { - LL_WARNS() << "Inventory is broken." << LL_ENDL; + LL_WARNS(LOG_INV) << "Inventory is broken." << LL_ENDL; return id; } if(LLFolderType::lookup(preferred_type) == LLFolderType::badLookup()) { - LL_DEBUGS() << "Attempt to create undefined category." << LL_ENDL; + LL_DEBUGS(LOG_INV) << "Attempt to create undefined category." << LL_ENDL; return id; } @@ -599,7 +629,7 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, request["message"] = "CreateInventoryCategory"; request["payload"] = body; - LL_DEBUGS("Avatar") << "create category request: " << ll_pretty_print_sd(request) << LL_ENDL; + LL_DEBUGS(LOG_INV) << "create category request: " << ll_pretty_print_sd(request) << LL_ENDL; // viewer_region->getCapAPI().post(request); LLHTTPClient::post( url, @@ -820,7 +850,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item, U32 mask) if(!isInventoryUsable()) { - LL_WARNS() << "Inventory is broken." << LL_ENDL; + LL_WARNS(LOG_INV) << "Inventory is broken." << LL_ENDL; return mask; } @@ -883,7 +913,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item, U32 mask) } else { - LL_WARNS() << "Couldn't find parent-child item tree for " << new_item->getName() << LL_ENDL; + LL_WARNS(LOG_INV) << "Couldn't find parent-child item tree for " << new_item->getName() << LL_ENDL; } } else @@ -912,8 +942,8 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item, U32 mask) else { // Whoops! No such parent, make one. - LL_INFOS() << "Lost item: " << new_item->getUUID() << " - " - << new_item->getName() << LL_ENDL; + LL_INFOS(LOG_INV) << "Lost item: " << new_item->getUUID() << " - " + << new_item->getName() << LL_ENDL; parent_id = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); new_item->setParent(parent_id); item_array = get_ptr_in_map(mParentChildItemTree, parent_id); @@ -926,7 +956,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item, U32 mask) } else { - LL_WARNS() << "Lost and found Not there!!" << LL_ENDL; + LL_WARNS(LOG_INV) << "Lost and found Not there!!" << LL_ENDL; } } } @@ -1000,7 +1030,7 @@ void LLInventoryModel::updateCategory(const LLViewerInventoryCategory* cat, U32 if(!isInventoryUsable()) { - LL_WARNS() << "Inventory is broken." << LL_ENDL; + LL_WARNS(LOG_INV) << "Inventory is broken." << LL_ENDL; return; } @@ -1062,17 +1092,17 @@ void LLInventoryModel::updateCategory(const LLViewerInventoryCategory* cat, U32 void LLInventoryModel::moveObject(const LLUUID& object_id, const LLUUID& cat_id) { - LL_DEBUGS() << "LLInventoryModel::moveObject()" << LL_ENDL; + LL_DEBUGS(LOG_INV) << "LLInventoryModel::moveObject()" << LL_ENDL; if(!isInventoryUsable()) { - LL_WARNS() << "Inventory is broken." << LL_ENDL; + LL_WARNS(LOG_INV) << "Inventory is broken." << LL_ENDL; return; } if((object_id == cat_id) || !is_in_map(mCategoryMap, cat_id)) { - LL_WARNS() << "Could not move inventory object " << object_id << " to " - << cat_id << LL_ENDL; + LL_WARNS(LOG_INV) << "Could not move inventory object " << object_id << " to " + << cat_id << LL_ENDL; return; } LLPointer<LLViewerInventoryCategory> cat = getCategory(object_id); @@ -1108,14 +1138,14 @@ void LLInventoryModel::changeItemParent(LLViewerInventoryItem* item, { if (item->getParentUUID() == new_parent_id) { - LL_DEBUGS("Inventory") << "'" << item->getName() << "' (" << item->getUUID() - << ") is already in folder " << new_parent_id << LL_ENDL; + LL_DEBUGS(LOG_INV) << "'" << item->getName() << "' (" << item->getUUID() + << ") is already in folder " << new_parent_id << LL_ENDL; } else { - LL_INFOS("Inventory") << "Moving '" << item->getName() << "' (" << item->getUUID() - << ") from " << item->getParentUUID() << " to folder " - << new_parent_id << LL_ENDL; + LL_INFOS(LOG_INV) << "Moving '" << item->getName() << "' (" << item->getUUID() + << ") from " << item->getParentUUID() << " to folder " + << new_parent_id << LL_ENDL; LLInventoryModel::update_list_t update; LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1); update.push_back(old_folder); @@ -1171,7 +1201,7 @@ void LLInventoryModel::onAISUpdateReceived(const std::string& context, const LLS AISUpdate ais_update(update); // parse update llsd into stuff to do. ais_update.doUpdate(); // execute the updates in the appropriate order. - LL_INFOS() << "elapsed: " << timer.getElapsedTimeF32() << LL_ENDL; + LL_INFOS(LOG_INV) << "elapsed: " << timer.getElapsedTimeF32() << LL_ENDL; } // Does not appear to be used currently. @@ -1180,7 +1210,7 @@ void LLInventoryModel::onItemUpdated(const LLUUID& item_id, const LLSD& updates, U32 mask = LLInventoryObserver::NONE; LLPointer<LLViewerInventoryItem> item = gInventory.getItem(item_id); - LL_DEBUGS("Inventory") << "item_id: [" << item_id << "] name " << (item ? item->getName() : "(NOT FOUND)") << LL_ENDL; + LL_DEBUGS(LOG_INV) << "item_id: [" << item_id << "] name " << (item ? item->getName() : "(NOT FOUND)") << LL_ENDL; if(item) { for (LLSD::map_const_iterator it = updates.beginMap(); @@ -1188,19 +1218,19 @@ void LLInventoryModel::onItemUpdated(const LLUUID& item_id, const LLSD& updates, { if (it->first == "name") { - LL_INFOS() << "Updating name from " << item->getName() << " to " << it->second.asString() << LL_ENDL; + LL_INFOS(LOG_INV) << "Updating name from " << item->getName() << " to " << it->second.asString() << LL_ENDL; item->rename(it->second.asString()); mask |= LLInventoryObserver::LABEL; } else if (it->first == "desc") { - LL_INFOS() << "Updating description from " << item->getActualDescription() - << " to " << it->second.asString() << LL_ENDL; + LL_INFOS(LOG_INV) << "Updating description from " << item->getActualDescription() + << " to " << it->second.asString() << LL_ENDL; item->setDescription(it->second.asString()); } else { - LL_ERRS() << "unhandled updates for field: " << it->first << LL_ENDL; + LL_ERRS(LOG_INV) << "unhandled updates for field: " << it->first << LL_ENDL; } } mask |= LLInventoryObserver::INTERNAL; @@ -1211,7 +1241,7 @@ void LLInventoryModel::onItemUpdated(const LLUUID& item_id, const LLSD& updates, LLInventoryModel::LLCategoryUpdate up(item->getParentUUID(), 0); accountForUpdate(up); } - gInventory.notifyObservers(); // do we want to be able to make this optional? + notifyObservers(); // do we want to be able to make this optional? } } @@ -1221,7 +1251,7 @@ void LLInventoryModel::onCategoryUpdated(const LLUUID& cat_id, const LLSD& updat U32 mask = LLInventoryObserver::NONE; LLPointer<LLViewerInventoryCategory> cat = gInventory.getCategory(cat_id); - LL_DEBUGS("Inventory") << "cat_id: [" << cat_id << "] name " << (cat ? cat->getName() : "(NOT FOUND)") << LL_ENDL; + LL_DEBUGS(LOG_INV) << "cat_id: [" << cat_id << "] name " << (cat ? cat->getName() : "(NOT FOUND)") << LL_ENDL; if(cat) { for (LLSD::map_const_iterator it = updates.beginMap(); @@ -1229,18 +1259,18 @@ void LLInventoryModel::onCategoryUpdated(const LLUUID& cat_id, const LLSD& updat { if (it->first == "name") { - LL_INFOS() << "Updating name from " << cat->getName() << " to " << it->second.asString() << LL_ENDL; + LL_INFOS(LOG_INV) << "Updating name from " << cat->getName() << " to " << it->second.asString() << LL_ENDL; cat->rename(it->second.asString()); mask |= LLInventoryObserver::LABEL; } else { - LL_ERRS() << "unhandled updates for field: " << it->first << LL_ENDL; + LL_ERRS(LOG_INV) << "unhandled updates for field: " << it->first << LL_ENDL; } } mask |= LLInventoryObserver::INTERNAL; addChangedMask(mask, cat->getUUID()); - gInventory.notifyObservers(); // do we want to be able to make this optional? + notifyObservers(); // do we want to be able to make this optional? } } @@ -1317,8 +1347,8 @@ void LLInventoryModel::onDescendentsPurgedFromServer(const LLUUID& object_id, bo while (deleted_count > 0); if (total_deleted_count != count) { - LL_WARNS() << "Unexpected count of categories deleted, got " - << total_deleted_count << " expected " << count << LL_ENDL; + LL_WARNS(LOG_INV) << "Unexpected count of categories deleted, got " + << total_deleted_count << " expected " << count << LL_ENDL; } //gInventory.validate(); } @@ -1355,15 +1385,15 @@ void LLInventoryModel::onObjectDeletedFromServer(const LLUUID& object_id, bool f // Delete a particular inventory object by ID. void LLInventoryModel::deleteObject(const LLUUID& id, bool fix_broken_links, bool do_notify_observers) { - LL_DEBUGS() << "LLInventoryModel::deleteObject()" << LL_ENDL; + LL_DEBUGS(LOG_INV) << "LLInventoryModel::deleteObject()" << LL_ENDL; LLPointer<LLInventoryObject> obj = getObject(id); if (!obj) { - LL_WARNS() << "Deleting non-existent object [ id: " << id << " ] " << LL_ENDL; + LL_WARNS(LOG_INV) << "Deleting non-existent object [ id: " << id << " ] " << LL_ENDL; return; } - LL_DEBUGS() << "Deleting inventory object " << id << LL_ENDL; + LL_DEBUGS(LOG_INV) << "Deleting inventory object " << id << LL_ENDL; mLastItem = NULL; LLUUID parent_id = obj->getParentUUID(); mCategoryMap.erase(id); @@ -1386,7 +1416,7 @@ void LLInventoryModel::deleteObject(const LLUUID& id, bool fix_broken_links, boo { if (item_list->size()) { - LL_WARNS() << "Deleting cat " << id << " while it still has child items" << LL_ENDL; + LL_WARNS(LOG_INV) << "Deleting cat " << id << " while it still has child items" << LL_ENDL; } delete item_list; mParentChildItemTree.erase(id); @@ -1396,7 +1426,7 @@ void LLInventoryModel::deleteObject(const LLUUID& id, bool fix_broken_links, boo { if (cat_list->size()) { - LL_WARNS() << "Deleting cat " << id << " while it still has child cats" << LL_ENDL; + LL_WARNS(LOG_INV) << "Deleting cat " << id << " while it still has child cats" << LL_ENDL; } delete cat_list; mParentChildCategoryTree.erase(id); @@ -1431,7 +1461,7 @@ void LLInventoryModel::updateLinkedObjectsFromPurge(const LLUUID &baseobj_id) // everything else on the changelist will also get rebuilt. if (item_array.size() > 0) { - gInventory.notifyObservers(); + notifyObservers(); for (LLInventoryModel::item_array_t::const_iterator iter = item_array.begin(); iter != item_array.end(); iter++) @@ -1441,7 +1471,7 @@ void LLInventoryModel::updateLinkedObjectsFromPurge(const LLUUID &baseobj_id) if (item_id == baseobj_id) continue; addChangedMask(LLInventoryObserver::REBUILD, item_id); } - gInventory.notifyObservers(); + notifyObservers(); } } @@ -1464,6 +1494,9 @@ BOOL LLInventoryModel::containsObserver(LLInventoryObserver* observer) const void LLInventoryModel::idleNotifyObservers() { + // *FIX: Think I want this conditional or moved elsewhere... + handleResponses(true); + if (mModifyMask == LLInventoryObserver::NONE && (mChangedItemIDs.size() == 0)) { return; @@ -1479,7 +1512,7 @@ void LLInventoryModel::notifyObservers() // Within notifyObservers, something called notifyObservers // again. This type of recursion is unsafe because it causes items to be // processed twice, and this can easily lead to infinite loops. - LL_WARNS() << "Call was made to notifyObservers within notifyObservers!" << LL_ENDL; + LL_WARNS(LOG_INV) << "Call was made to notifyObservers within notifyObservers!" << LL_ENDL; return; } @@ -1509,18 +1542,18 @@ void LLInventoryModel::addChangedMask(U32 mask, const LLUUID& referent) // Something marked an item for change within a call to notifyObservers // (which is in the process of processing the list of items marked for change). // This means the change may fail to be processed. - LL_WARNS() << "Adding changed mask within notify observers! Change will likely be lost." << LL_ENDL; + LL_WARNS(LOG_INV) << "Adding changed mask within notify observers! Change will likely be lost." << LL_ENDL; LLViewerInventoryItem *item = getItem(referent); if (item) { - LL_WARNS() << "Item " << item->getName() << LL_ENDL; + LL_WARNS(LOG_INV) << "Item " << item->getName() << LL_ENDL; } else { LLViewerInventoryCategory *cat = getCategory(referent); if (cat) { - LL_WARNS() << "Category " << cat->getName() << LL_ENDL; + LL_WARNS(LOG_INV) << "Category " << cat->getName() << LL_ENDL; } } } @@ -1544,91 +1577,18 @@ void LLInventoryModel::addChangedMask(U32 mask, const LLUUID& referent) } } -// If we get back a normal response, handle it here -void LLInventoryModel::fetchInventoryResponder::httpSuccess() -{ - const LLSD& content = getContent(); - if (!content.isMap()) - { - failureResult(HTTP_INTERNAL_ERROR, "Malformed response contents", content); - return; - } - start_new_inventory_observer(); - - /*LLUUID agent_id; - agent_id = content["agent_id"].asUUID(); - if(agent_id != gAgent.getID()) - { - LL_WARNS() << "Got a inventory update for the wrong agent: " << agent_id - << LL_ENDL; - return; - }*/ - item_array_t items; - update_map_t update; - S32 count = content["items"].size(); - LLUUID folder_id; - // Does this loop ever execute more than once? - for(S32 i = 0; i < count; ++i) - { - LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem; - titem->unpackMessage(content["items"][i]); - - LL_DEBUGS() << "LLInventoryModel::fetchInventoryResponder item id: " - << titem->getUUID() << LL_ENDL; - items.push_back(titem); - // examine update for changes. - LLViewerInventoryItem* itemp = gInventory.getItem(titem->getUUID()); - if(itemp) - { - if(titem->getParentUUID() == itemp->getParentUUID()) - { - update[titem->getParentUUID()]; - } - else - { - ++update[titem->getParentUUID()]; - --update[itemp->getParentUUID()]; - } - } - else - { - ++update[titem->getParentUUID()]; - } - if (folder_id.isNull()) - { - folder_id = titem->getParentUUID(); - } - } - - U32 changes = 0x0; - //as above, this loop never seems to loop more than once per call - for (item_array_t::iterator it = items.begin(); it != items.end(); ++it) - { - changes |= gInventory.updateItem(*it); - } - gInventory.notifyObservers(); - gViewerWindow->getWindow()->decBusyCount(); -} - -//If we get back an error (not found, etc...), handle it here -void LLInventoryModel::fetchInventoryResponder::httpFailure() -{ - LL_WARNS() << dumpResponse() << LL_ENDL; - gInventory.notifyObservers(); -} - bool LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id) const { if(folder_id.isNull()) { - LL_WARNS() << "Calling fetch descendents on NULL folder id!" << LL_ENDL; + LL_WARNS(LOG_INV) << "Calling fetch descendents on NULL folder id!" << LL_ENDL; return false; } LLViewerInventoryCategory* cat = getCategory(folder_id); if(!cat) { - LL_WARNS() << "Asked to fetch descendents of non-existent folder: " - << folder_id << LL_ENDL; + LL_WARNS(LOG_INV) << "Asked to fetch descendents of non-existent folder: " + << folder_id << LL_ENDL; return false; } //S32 known_descendents = 0; @@ -1649,8 +1609,8 @@ void LLInventoryModel::cache( const LLUUID& parent_folder_id, const LLUUID& agent_id) { - LL_DEBUGS() << "Caching " << parent_folder_id << " for " << agent_id - << LL_ENDL; + LL_DEBUGS(LOG_INV) << "Caching " << parent_folder_id << " for " << agent_id + << LL_ENDL; LLViewerInventoryCategory* root_cat = getCategory(parent_folder_id); if(!root_cat) return; cat_array_t categories; @@ -1675,19 +1635,19 @@ void LLInventoryModel::cache( gzip_filename.append(".gz"); if(gzip_file(inventory_filename, gzip_filename)) { - LL_DEBUGS() << "Successfully compressed " << inventory_filename << LL_ENDL; + LL_DEBUGS(LOG_INV) << "Successfully compressed " << inventory_filename << LL_ENDL; LLFile::remove(inventory_filename); } else { - LL_WARNS() << "Unable to compress " << inventory_filename << LL_ENDL; + LL_WARNS(LOG_INV) << "Unable to compress " << inventory_filename << LL_ENDL; } } void LLInventoryModel::addCategory(LLViewerInventoryCategory* category) { - //LL_INFOS() << "LLInventoryModel::addCategory()" << LL_ENDL; + //LL_INFOS(LOG_INV) << "LLInventoryModel::addCategory()" << LL_ENDL; if(category) { // We aren't displaying the Meshes folder @@ -1757,7 +1717,9 @@ void LLInventoryModel::addItem(LLViewerInventoryItem* item) if ((item->getType() == LLAssetType::AT_NONE) || LLAssetType::lookup(item->getType()) == LLAssetType::badLookup()) { - LL_WARNS() << "Got bad asset type for item [ name: " << item->getName() << " type: " << item->getType() << " inv-type: " << item->getInventoryType() << " ], ignoring." << LL_ENDL; + LL_WARNS(LOG_INV) << "Got bad asset type for item [ name: " << item->getName() + << " type: " << item->getType() + << " inv-type: " << item->getInventoryType() << " ], ignoring." << LL_ENDL; return; } @@ -1765,7 +1727,9 @@ void LLInventoryModel::addItem(LLViewerInventoryItem* item) // The item will show up as a broken link. if (item->getIsBrokenLink()) { - LL_INFOS() << "Adding broken link [ name: " << item->getName() << " itemID: " << item->getUUID() << " assetID: " << item->getAssetUUID() << " ) parent: " << item->getParentUUID() << LL_ENDL; + LL_INFOS(LOG_INV) << "Adding broken link [ name: " << item->getName() + << " itemID: " << item->getUUID() + << " assetID: " << item->getAssetUUID() << " ) parent: " << item->getParentUUID() << LL_ENDL; } if (item->getIsLinkType()) { @@ -1781,7 +1745,7 @@ void LLInventoryModel::addItem(LLViewerInventoryItem* item) // Empty the entire contents void LLInventoryModel::empty() { -// LL_INFOS() << "LLInventoryModel::empty()" << LL_ENDL; +// LL_INFOS(LOG_INV) << "LLInventoryModel::empty()" << LL_ENDL; std::for_each( mParentChildCategoryTree.begin(), mParentChildCategoryTree.end(), @@ -1814,29 +1778,29 @@ void LLInventoryModel::accountForUpdate(const LLCategoryUpdate& update) const descendents_actual += update.mDescendentDelta; cat->setDescendentCount(descendents_actual); cat->setVersion(++version); - LL_DEBUGS("Inventory") << "accounted: '" << cat->getName() << "' " - << version << " with " << descendents_actual - << " descendents." << LL_ENDL; + LL_DEBUGS(LOG_INV) << "accounted: '" << cat->getName() << "' " + << version << " with " << descendents_actual + << " descendents." << LL_ENDL; } else { // Error condition, this means that the category did not register that // it got new descendents (perhaps because it is still being loaded) // which means its descendent count will be wrong. - LL_WARNS() << "Accounting failed for '" << cat->getName() << "' version:" - << version << " due to mismatched descendent count: server == " - << descendents_server << ", viewer == " << descendents_actual << LL_ENDL; + LL_WARNS(LOG_INV) << "Accounting failed for '" << cat->getName() << "' version:" + << version << " due to mismatched descendent count: server == " + << descendents_server << ", viewer == " << descendents_actual << LL_ENDL; } } else { - LL_WARNS() << "Accounting failed for '" << cat->getName() << "' version: unknown (" - << version << ")" << LL_ENDL; + LL_WARNS(LOG_INV) << "Accounting failed for '" << cat->getName() << "' version: unknown (" + << version << ")" << LL_ENDL; } } else { - LL_WARNS() << "No category found for update " << update.mCategoryID << LL_ENDL; + LL_WARNS(LOG_INV) << "No category found for update " << update.mCategoryID << LL_ENDL; } } @@ -1918,7 +1882,7 @@ bool LLInventoryModel::loadSkeleton( const LLSD& options, const LLUUID& owner_id) { - LL_DEBUGS() << "importing inventory skeleton for " << owner_id << LL_ENDL; + LL_DEBUGS(LOG_INV) << "importing inventory skeleton for " << owner_id << LL_ENDL; typedef std::set<LLPointer<LLViewerInventoryCategory>, InventoryIDPtrLess> cat_set_t; cat_set_t temp_cats; @@ -1955,7 +1919,7 @@ bool LLInventoryModel::loadSkeleton( } else { - LL_WARNS() << "Unable to import near " << name.asString() << LL_ENDL; + LL_WARNS(LOG_INV) << "Unable to import near " << name.asString() << LL_ENDL; rv = false; } } @@ -1992,7 +1956,7 @@ bool LLInventoryModel::loadSkeleton( } else { - LL_INFOS() << "Unable to gunzip " << gzip_filename << LL_ENDL; + LL_INFOS(LOG_INV) << "Unable to gunzip " << gzip_filename << LL_ENDL; } } bool is_cache_obsolete = false; @@ -2073,10 +2037,10 @@ bool LLInventoryModel::loadSkeleton( if (item->getIsBrokenLink()) { //bad_link_count++; - LL_DEBUGS() << "Attempted to add cached link item without baseobj present ( name: " - << item->getName() << " itemID: " << item->getUUID() - << " assetID: " << item->getAssetUUID() - << " ). Ignoring and invalidating " << cat->getName() << " . " << LL_ENDL; + LL_DEBUGS(LOG_INV) << "Attempted to add cached link item without baseobj present ( name: " + << item->getName() << " itemID: " << item->getUUID() + << " assetID: " << item->getAssetUUID() + << " ). Ignoring and invalidating " << cat->getName() << " . " << LL_ENDL; possible_broken_links.push_back(item); continue; } @@ -2103,7 +2067,7 @@ bool LLInventoryModel::loadSkeleton( { bad_link_count++; invalid_categories.insert(cit->second); - //LL_INFOS() << "link still broken: " << item->getName() << " in folder " << cat->getName() << LL_ENDL; + //LL_INFOS(LOG_INV) << "link still broken: " << item->getName() << " in folder " << cat->getName() << LL_ENDL; } else { @@ -2115,11 +2079,11 @@ bool LLInventoryModel::loadSkeleton( } } - LL_INFOS() << "Attempted to add " << bad_link_count - << " cached link items without baseobj present. " - << good_link_count << " link items were successfully added. " - << recovered_link_count << " links added in recovery. " - << "The corresponding categories were invalidated." << LL_ENDL; + LL_INFOS(LOG_INV) << "Attempted to add " << bad_link_count + << " cached link items without baseobj present. " + << good_link_count << " link items were successfully added. " + << recovered_link_count << " links added in recovery. " + << "The corresponding categories were invalidated." << LL_ENDL; } } @@ -2143,9 +2107,9 @@ bool LLInventoryModel::loadSkeleton( { LLViewerInventoryCategory* cat = (*invalid_cat_it).get(); cat->setVersion(NO_VERSION); - LL_DEBUGS("Inventory") << "Invalidating category name: " << cat->getName() << " UUID: " << cat->getUUID() << " due to invalid descendents cache" << LL_ENDL; + LL_DEBUGS(LOG_INV) << "Invalidating category name: " << cat->getName() << " UUID: " << cat->getUUID() << " due to invalid descendents cache" << LL_ENDL; } - LL_INFOS("Inventory") << "Invalidated " << invalid_categories.size() << " categories due to invalid descendents cache" << LL_ENDL; + LL_INFOS(LOG_INV) << "Invalidated " << invalid_categories.size() << " categories due to invalid descendents cache" << LL_ENDL; // At this point, we need to set the known descendents for each // category which successfully cached so that we do not @@ -2177,15 +2141,15 @@ bool LLInventoryModel::loadSkeleton( if(is_cache_obsolete) { // If out of date, remove the gzipped file too. - LL_WARNS() << "Inv cache out of date, removing" << LL_ENDL; + LL_WARNS(LOG_INV) << "Inv cache out of date, removing" << LL_ENDL; LLFile::remove(gzip_filename); } categories.clear(); // will unref and delete entries } - LL_INFOS() << "Successfully loaded " << cached_category_count - << " categories and " << cached_item_count << " items from cache." - << LL_ENDL; + LL_INFOS(LOG_INV) << "Successfully loaded " << cached_category_count + << " categories and " << cached_item_count << " items from cache." + << LL_ENDL; return rv; } @@ -2195,7 +2159,7 @@ bool LLInventoryModel::loadSkeleton( // should be sufficient for our needs. void LLInventoryModel::buildParentChildMap() { - LL_INFOS() << "LLInventoryModel::buildParentChildMap()" << LL_ENDL; + LL_INFOS(LOG_INV) << "LLInventoryModel::buildParentChildMap()" << LL_ENDL; // *NOTE: I am skipping the logic around folder version // synchronization here because it seems if a folder is lost, we @@ -2264,15 +2228,15 @@ void LLInventoryModel::buildParentChildMap() // implement it, we would need a set or map of uuid pairs // which would be (folder_id, new_parent_id) to be sent up // to the server. - LL_INFOS() << "Lost category: " << cat->getUUID() << " - " - << cat->getName() << LL_ENDL; + LL_INFOS(LOG_INV) << "Lost category: " << cat->getUUID() << " - " + << cat->getName() << LL_ENDL; ++lost; lost_cats.push_back(cat); } } if(lost) { - LL_WARNS() << "Found " << lost << " lost categories." << LL_ENDL; + LL_WARNS(LOG_INV) << "Found " << lost << " lost categories." << LL_ENDL; } // Do moves in a separate pass to make sure we've properly filed @@ -2307,7 +2271,7 @@ void LLInventoryModel::buildParentChildMap() } else { - LL_WARNS() << "Lost and found Not there!!" << LL_ENDL; + LL_WARNS(LOG_INV) << "Lost and found Not there!!" << LL_ENDL; } } @@ -2342,8 +2306,8 @@ void LLInventoryModel::buildParentChildMap() } else { - LL_INFOS() << "Lost item: " << item->getUUID() << " - " - << item->getName() << LL_ENDL; + LL_INFOS(LOG_INV) << "Lost item: " << item->getUUID() << " - " + << item->getName() << LL_ENDL; ++lost; // plop it into the lost & found. // @@ -2359,13 +2323,13 @@ void LLInventoryModel::buildParentChildMap() } else { - LL_WARNS() << "Lost and found Not there!!" << LL_ENDL; + LL_WARNS(LOG_INV) << "Lost and found Not there!!" << LL_ENDL; } } } if(lost) { - LL_WARNS() << "Found " << lost << " lost items." << LL_ENDL; + LL_WARNS(LOG_INV) << "Found " << lost << " lost items." << LL_ENDL; LLMessageSystem* msg = gMessageSystem; BOOL start_new_message = TRUE; const LLUUID lnf = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); @@ -2443,10 +2407,82 @@ void LLInventoryModel::buildParentChildMap() if (!gInventory.validate()) { - LL_WARNS() << "model failed validity check!" << LL_ENDL; + LL_WARNS(LOG_INV) << "model failed validity check!" << LL_ENDL; } } +// Would normally do this at construction but that's too early +// in the process for gInventory. Have the first requestPost() +// call set things up. +void LLInventoryModel::initHttpRequest() +{ + if (! mHttpRequestFG) + { + // Haven't initialized, get to it + LLAppCoreHttp & app_core_http(LLAppViewer::instance()->getAppCoreHttp()); + + mHttpRequestFG = new LLCore::HttpRequest; + mHttpRequestBG = new LLCore::HttpRequest; + mHttpOptions = new LLCore::HttpOptions; + mHttpOptions->setTransferTimeout(300); + mHttpOptions->setUseRetryAfter(true); + // mHttpOptions->setTrace(2); // Do tracing of requests + mHttpHeaders = new LLCore::HttpHeaders; + mHttpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_LLSD_XML); + mHttpHeaders->append(HTTP_OUT_HEADER_ACCEPT, HTTP_CONTENT_LLSD_XML); + mHttpPolicyClass = app_core_http.getPolicy(LLAppCoreHttp::AP_INVENTORY); + } +} + +void LLInventoryModel::handleResponses(bool foreground) +{ + if (foreground && mHttpRequestFG) + { + mHttpRequestFG->update(0); + } + else if (! foreground && mHttpRequestBG) + { + mHttpRequestBG->update(50000L); + } +} + +LLCore::HttpHandle LLInventoryModel::requestPost(bool foreground, + const std::string & url, + const LLSD & body, + LLCore::HttpHandler * handler, + const char * const message) +{ + if (! mHttpRequestFG) + { + // We do the initialization late and lazily as this class is + // statically-constructed and not all the bits are ready at + // that time. + initHttpRequest(); + } + + LLCore::HttpRequest * request(foreground ? mHttpRequestFG : mHttpRequestBG); + LLCore::HttpHandle handle(LLCORE_HTTP_HANDLE_INVALID); + + handle = LLCoreHttpUtil::requestPostWithLLSD(request, + mHttpPolicyClass, + (foreground ? mHttpPriorityFG : mHttpPriorityBG), + url, + body, + mHttpOptions, + mHttpHeaders, + handler); + if (LLCORE_HTTP_HANDLE_INVALID == handle) + { + LLCore::HttpStatus status(request->getStatus()); + LL_WARNS(LOG_INV) << "HTTP POST request failed for " << message + << ", Status: " << status.toTerseString() + << " Reason: '" << status.toString() << "'" + << LL_ENDL; + delete handler; + } + return handle; +} + void LLInventoryModel::createCommonSystemCategories() { gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH,true); @@ -2495,14 +2531,14 @@ bool LLInventoryModel::loadFromFile(const std::string& filename, { if(filename.empty()) { - LL_ERRS() << "Filename is Null!" << LL_ENDL; + LL_ERRS(LOG_INV) << "Filename is Null!" << LL_ENDL; return false; } - LL_INFOS() << "LLInventoryModel::loadFromFile(" << filename << ")" << LL_ENDL; + LL_INFOS(LOG_INV) << "LLInventoryModel::loadFromFile(" << filename << ")" << LL_ENDL; LLFILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/ if(!file) { - LL_INFOS() << "unable to load inventory from: " << filename << LL_ENDL; + LL_INFOS(LOG_INV) << "unable to load inventory from: " << filename << LL_ENDL; return false; } // *NOTE: This buffer size is hard coded into scanf() below. @@ -2541,7 +2577,7 @@ bool LLInventoryModel::loadFromFile(const std::string& filename, } else { - LL_WARNS() << "loadInventoryFromFile(). Ignoring invalid inventory category: " << inv_cat->getName() << LL_ENDL; + LL_WARNS(LOG_INV) << "loadInventoryFromFile(). Ignoring invalid inventory category: " << inv_cat->getName() << LL_ENDL; //delete inv_cat; // automatic when inv_cat is reassigned or destroyed } } @@ -2559,8 +2595,8 @@ bool LLInventoryModel::loadFromFile(const std::string& filename, if(inv_item->getUUID().isNull()) { //delete inv_item; // automatic when inv_cat is reassigned or destroyed - LL_WARNS() << "Ignoring inventory with null item id: " - << inv_item->getName() << LL_ENDL; + LL_WARNS(LOG_INV) << "Ignoring inventory with null item id: " + << inv_item->getName() << LL_ENDL; } else @@ -2570,14 +2606,14 @@ bool LLInventoryModel::loadFromFile(const std::string& filename, } else { - LL_WARNS() << "loadInventoryFromFile(). Ignoring invalid inventory item: " << inv_item->getName() << LL_ENDL; + LL_WARNS(LOG_INV) << "loadInventoryFromFile(). Ignoring invalid inventory item: " << inv_item->getName() << LL_ENDL; //delete inv_item; // automatic when inv_cat is reassigned or destroyed } } else { - LL_WARNS() << "Unknown token in inventory file '" << keyword << "'" - << LL_ENDL; + LL_WARNS(LOG_INV) << "Unknown token in inventory file '" << keyword << "'" + << LL_ENDL; } } fclose(file); @@ -2593,14 +2629,14 @@ bool LLInventoryModel::saveToFile(const std::string& filename, { if(filename.empty()) { - LL_ERRS() << "Filename is Null!" << LL_ENDL; + LL_ERRS(LOG_INV) << "Filename is Null!" << LL_ENDL; return false; } - LL_INFOS() << "LLInventoryModel::saveToFile(" << filename << ")" << LL_ENDL; + LL_INFOS(LOG_INV) << "LLInventoryModel::saveToFile(" << filename << ")" << LL_ENDL; LLFILE* file = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/ if(!file) { - LL_WARNS() << "unable to save inventory to: " << filename << LL_ENDL; + LL_WARNS(LOG_INV) << "unable to save inventory to: " << filename << LL_ENDL; return false; } @@ -2705,8 +2741,8 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account, U32 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id); if(agent_id != gAgent.getID()) { - LL_WARNS() << "Got a inventory update for the wrong agent: " << agent_id - << LL_ENDL; + LL_WARNS(LOG_INV) << "Got a inventory update for the wrong agent: " << agent_id + << LL_ENDL; return false; } item_array_t items; @@ -2718,8 +2754,8 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account, U32 { LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem; titem->unpackMessage(msg, _PREHASH_InventoryData, i); - LL_DEBUGS() << "LLInventoryModel::messageUpdateCore() item id:" - << titem->getUUID() << LL_ENDL; + LL_DEBUGS(LOG_INV) << "LLInventoryModel::messageUpdateCore() item id: " + << titem->getUUID() << LL_ENDL; items.push_back(titem); // examine update for changes. LLViewerInventoryItem* itemp = gInventory.getItem(titem->getUUID()); @@ -2770,17 +2806,17 @@ void LLInventoryModel::removeInventoryItem(LLUUID agent_id, LLMessageSystem* msg { LLUUID item_id; S32 count = msg->getNumberOfBlocksFast(msg_label); - LL_DEBUGS() << "Message has " << count << " item blocks" << LL_ENDL; + LL_DEBUGS(LOG_INV) << "Message has " << count << " item blocks" << LL_ENDL; uuid_vec_t item_ids; update_map_t update; for(S32 i = 0; i < count; ++i) { msg->getUUIDFast(msg_label, _PREHASH_ItemID, item_id, i); - LL_DEBUGS() << "Checking for item-to-be-removed " << item_id << LL_ENDL; + LL_DEBUGS(LOG_INV) << "Checking for item-to-be-removed " << item_id << LL_ENDL; LLViewerInventoryItem* itemp = gInventory.getItem(item_id); if(itemp) { - LL_DEBUGS() << "Item will be removed " << item_id << LL_ENDL; + LL_DEBUGS(LOG_INV) << "Item will be removed " << item_id << LL_ENDL; // we only bother with the delete and account if we found // the item - this is usually a back-up for permissions, // so frequently the item will already be gone. @@ -2791,7 +2827,7 @@ void LLInventoryModel::removeInventoryItem(LLUUID agent_id, LLMessageSystem* msg gInventory.accountForUpdate(update); for(uuid_vec_t::iterator it = item_ids.begin(); it != item_ids.end(); ++it) { - LL_DEBUGS() << "Calling deleteObject " << *it << LL_ENDL; + LL_DEBUGS(LOG_INV) << "Calling deleteObject " << *it << LL_ENDL; gInventory.deleteObject(*it); } } @@ -2799,13 +2835,13 @@ void LLInventoryModel::removeInventoryItem(LLUUID agent_id, LLMessageSystem* msg // static void LLInventoryModel::processRemoveInventoryItem(LLMessageSystem* msg, void**) { - LL_DEBUGS() << "LLInventoryModel::processRemoveInventoryItem()" << LL_ENDL; + LL_DEBUGS(LOG_INV) << "LLInventoryModel::processRemoveInventoryItem()" << LL_ENDL; LLUUID agent_id, item_id; msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id); if(agent_id != gAgent.getID()) { - LL_WARNS() << "Got a RemoveInventoryItem for the wrong agent." - << LL_ENDL; + LL_WARNS(LOG_INV) << "Got a RemoveInventoryItem for the wrong agent." + << LL_ENDL; return; } LLInventoryModel::removeInventoryItem(agent_id, msg, _PREHASH_InventoryData); @@ -2816,14 +2852,14 @@ void LLInventoryModel::processRemoveInventoryItem(LLMessageSystem* msg, void**) void LLInventoryModel::processUpdateInventoryFolder(LLMessageSystem* msg, void**) { - LL_DEBUGS() << "LLInventoryModel::processUpdateInventoryFolder()" << LL_ENDL; + LL_DEBUGS(LOG_INV) << "LLInventoryModel::processUpdateInventoryFolder()" << LL_ENDL; LLUUID agent_id, folder_id, parent_id; //char name[DB_INV_ITEM_NAME_BUF_SIZE]; msg->getUUIDFast(_PREHASH_FolderData, _PREHASH_AgentID, agent_id); if(agent_id != gAgent.getID()) { - LL_WARNS() << "Got an UpdateInventoryFolder for the wrong agent." - << LL_ENDL; + LL_WARNS(LOG_INV) << "Got an UpdateInventoryFolder for the wrong agent." + << LL_ENDL; return; } LLPointer<LLViewerInventoryCategory> lastfolder; // hack @@ -3881,7 +3917,7 @@ bool LLInventoryModel::validate() const ///---------------------------------------------------------------------------- -/* +#if 0 BOOL decompress_file(const char* src_filename, const char* dst_filename) { BOOL rv = FALSE; @@ -3920,4 +3956,177 @@ BOOL decompress_file(const char* src_filename, const char* dst_filename) if(dst != NULL) fclose(dst); return rv; } -*/ +#endif + + +///---------------------------------------------------------------------------- +/// Class LLInventoryModel::FetchItemHttpHandler +///---------------------------------------------------------------------------- + +LLInventoryModel::FetchItemHttpHandler::FetchItemHttpHandler(const LLSD & request_sd) + : LLCore::HttpHandler(), + mRequestSD(request_sd) +{} + +LLInventoryModel::FetchItemHttpHandler::~FetchItemHttpHandler() +{} + +void LLInventoryModel::FetchItemHttpHandler::onCompleted(LLCore::HttpHandle handle, + LLCore::HttpResponse * response) +{ + do // Single-pass do-while used for common exit handling + { + LLCore::HttpStatus status(response->getStatus()); + // status = LLCore::HttpStatus(404); // Dev tool to force error handling + if (! status) + { + processFailure(status, response); + break; // Goto common exit + } + + LLCore::BufferArray * body(response->getBody()); + // body = NULL; // Dev tool to force error handling + if (! body || ! body->size()) + { + LL_WARNS(LOG_INV) << "Missing data in inventory item query." << LL_ENDL; + processFailure("HTTP response for inventory item query missing body", response); + break; // Goto common exit + } + + // body->write(0, "Garbage Response", 16); // Dev tool to force error handling + LLSD body_llsd; + if (! LLCoreHttpUtil::responseToLLSD(response, true, body_llsd)) + { + // INFOS-level logging will occur on the parsed failure + processFailure("HTTP response for inventory item query has malformed LLSD", response); + break; // Goto common exit + } + + // Expect top-level structure to be a map + // body_llsd = LLSD::emptyArray(); // Dev tool to force error handling + if (! body_llsd.isMap()) + { + processFailure("LLSD response for inventory item not a map", response); + break; // Goto common exit + } + + // Check for 200-with-error failures + // + // Original Responder-based serivce model didn't check for these errors. + // It may be more robust to ignore this condition. With aggregated requests, + // an error in one inventory item might take down the entire request. + // So if this instead broke up the aggregated items into single requests, + // maybe that would make progress. Or perhaps there's structured information + // that can tell us what went wrong. Need to dig into this and firm up + // the API. + // + // body_llsd["error"] = LLSD::emptyMap(); // Dev tool to force error handling + // body_llsd["error"]["identifier"] = "Development"; + // body_llsd["error"]["message"] = "You left development code in the viewer"; + if (body_llsd.has("error")) + { + processFailure("Inventory application error (200-with-error)", response); + break; // Goto common exit + } + + // Okay, process data if possible + processData(body_llsd, response); + } + while (false); + + // Must delete on completion. + delete this; +} + +void LLInventoryModel::FetchItemHttpHandler::processData(LLSD & content, LLCore::HttpResponse * response) +{ + start_new_inventory_observer(); + +#if 0 + LLUUID agent_id; + agent_id = content["agent_id"].asUUID(); + if (agent_id != gAgent.getID()) + { + LL_WARNS(LOG_INV) << "Got a inventory update for the wrong agent: " << agent_id + << LL_ENDL; + return; + } +#endif + + LLInventoryModel::item_array_t items; + LLInventoryModel::update_map_t update; + LLUUID folder_id; + LLSD content_items(content["items"]); + const S32 count(content_items.size()); + + // Does this loop ever execute more than once? + for (S32 i(0); i < count; ++i) + { + LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem; + titem->unpackMessage(content_items[i]); + + LL_DEBUGS(LOG_INV) << "ItemHttpHandler::httpSuccess item id: " + << titem->getUUID() << LL_ENDL; + items.push_back(titem); + + // examine update for changes. + LLViewerInventoryItem * itemp(gInventory.getItem(titem->getUUID())); + + if (itemp) + { + if (titem->getParentUUID() == itemp->getParentUUID()) + { + update[titem->getParentUUID()]; + } + else + { + ++update[titem->getParentUUID()]; + --update[itemp->getParentUUID()]; + } + } + else + { + ++update[titem->getParentUUID()]; + } + + if (folder_id.isNull()) + { + folder_id = titem->getParentUUID(); + } + } + + // as above, this loop never seems to loop more than once per call + U32 changes(0U); + for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); ++it) + { + changes |= gInventory.updateItem(*it); + } + // *HUH: Have computed 'changes', nothing uses it. + + gInventory.notifyObservers(); + gViewerWindow->getWindow()->decBusyCount(); +} + + +void LLInventoryModel::FetchItemHttpHandler::processFailure(LLCore::HttpStatus status, LLCore::HttpResponse * response) +{ + const std::string & ct(response->getContentType()); + LL_WARNS(LOG_INV) << "Inventory item fetch failure\n" + << "[Status: " << status.toTerseString() << "]\n" + << "[Reason: " << status.toString() << "]\n" + << "[Content-type: " << ct << "]\n" + << "[Content (abridged): " + << LLCoreHttpUtil::responseToString(response) << "]" << LL_ENDL; + gInventory.notifyObservers(); +} + +void LLInventoryModel::FetchItemHttpHandler::processFailure(const char * const reason, LLCore::HttpResponse * response) +{ + LL_WARNS(LOG_INV) << "Inventory item fetch failure\n" + << "[Status: internal error]\n" + << "[Reason: " << reason << "]\n" + << "[Content (abridged): " + << LLCoreHttpUtil::responseToString(response) << "]" << LL_ENDL; + gInventory.notifyObservers(); +} + diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index 2e957809be..ac336e347c 100755 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -27,6 +27,11 @@ #ifndef LL_LLINVENTORYMODEL_H #define LL_LLINVENTORYMODEL_H +#include <map> +#include <set> +#include <string> +#include <vector> + #include "llassettype.h" #include "llfoldertype.h" #include "llframetimer.h" @@ -36,10 +41,11 @@ #include "llviewerinventory.h" #include "llstring.h" #include "llmd5.h" -#include <map> -#include <set> -#include <string> -#include <vector> +#include "httpcommon.h" +#include "httprequest.h" +#include "httpoptions.h" +#include "httpheaders.h" +#include "httphandler.h" class LLInventoryObserver; class LLInventoryObject; @@ -60,9 +66,8 @@ class LLInventoryCollectFunctor; class LLInventoryModel { LOG_CLASS(LLInventoryModel); -public: - friend class LLInventoryModelFetchDescendentsResponder; +public: enum EHasChildren { CHILDREN_NO, @@ -74,14 +79,31 @@ public: typedef std::vector<LLPointer<LLViewerInventoryItem> > item_array_t; typedef std::set<LLUUID> changed_items_t; - class fetchInventoryResponder : public LLCurl::Responder + // HTTP handler for individual item requests (inventory or library). + // Background item requests are derived from this in the background + // inventory system. All folder requests are also located there + // but have their own handler derived from HttpHandler. + class FetchItemHttpHandler : public LLCore::HttpHandler { - LOG_CLASS(fetchInventoryResponder); public: - fetchInventoryResponder(const LLSD& request_sd) : mRequestSD(request_sd) {}; + LOG_CLASS(FetchItemHttpHandler); + + FetchItemHttpHandler(const LLSD & request_sd); + virtual ~FetchItemHttpHandler(); + protected: - virtual void httpSuccess(); - virtual void httpFailure(); + FetchItemHttpHandler(const FetchItemHttpHandler &); // Not defined + void operator=(const FetchItemHttpHandler &); // Not defined + + public: + virtual void onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response); + + private: + void processData(LLSD & body, LLCore::HttpResponse * response); + void processFailure(LLCore::HttpStatus status, LLCore::HttpResponse * response); + void processFailure(const char * const reason, LLCore::HttpResponse * response); + + private: LLSD mRequestSD; }; @@ -109,6 +131,9 @@ public: private: bool mIsAgentInvUsable; // used to handle an invalid inventory state + // One-time initialization of HTTP system. + void initHttpRequest(); + //-------------------------------------------------------------------- // Root Folders //-------------------------------------------------------------------- @@ -520,6 +545,41 @@ private: /******************************************************************************** ** ** + ** HTTP Transport + **/ +public: + // Invoke handler completion method (onCompleted) for all + // requests that are ready. + void handleResponses(bool foreground); + + // Request an inventory HTTP operation to either the + // foreground or background processor. These are actually + // the same service queue but the background requests are + // seviced more slowly effectively de-prioritizing new + // requests. + LLCore::HttpHandle requestPost(bool foreground, + const std::string & url, + const LLSD & body, + LLCore::HttpHandler * handler, + const char * const message); + +private: + // Usual plumbing for LLCore:: HTTP operations. + LLCore::HttpRequest * mHttpRequestFG; + LLCore::HttpRequest * mHttpRequestBG; + LLCore::HttpOptions * mHttpOptions; + LLCore::HttpHeaders * mHttpHeaders; + LLCore::HttpRequest::policy_t mHttpPolicyClass; + LLCore::HttpRequest::priority_t mHttpPriorityFG; + LLCore::HttpRequest::priority_t mHttpPriorityBG; + +/** HTTP Transport + ** ** + *******************************************************************************/ + + +/******************************************************************************** + ** ** ** MISCELLANEOUS **/ diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index 2de37b0790..f18832fe95 100755 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2002&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -37,31 +37,180 @@ #include "llviewermessage.h" #include "llviewerregion.h" #include "llviewerwindow.h" +#include "llhttpconstants.h" +#include "bufferarray.h" +#include "bufferstream.h" +#include "llcorehttputil.h" + +// History (may be apocryphal) +// +// Around V2, an HTTP inventory download mechanism was added +// along with inventory LINK items referencing other inventory +// items. As part of this, at login, the entire inventory +// structure is downloaded 'in the background' using the +// backgroundFetch()/bulkFetch() methods. The UDP path can +// still be used and is found in the 'DEPRECATED OLD CODE' +// section. +// +// The old UDP path implemented a throttle that adapted +// itself during running. The mechanism survived info HTTP +// somewhat but was pinned to poll the HTTP plumbing at +// 0.5S intervals. The reasons for this particular value +// have been lost. It's possible to switch between UDP +// and HTTP while this is happening but there may be +// surprises in what happens in that case. +// +// Conversion to llcorehttp reduced the number of connections +// used but batches more data and queues more requests (but +// doesn't due pipelining due to libcurl restrictions). The +// poll interval above was re-examined and reduced to get +// inventory into the viewer more quickly. +// +// Possible future work: +// +// * Don't download the entire heirarchy in one go (which +// might have been how V1 worked). Implications for +// links (which may not have a valid target) and search +// which would then be missing data. +// +// * Review the download rate throttling. Slow then fast? +// Detect bandwidth usage and speed up when it drops? +// +// * A lot of calls to notifyObservers(). It looks like +// these could be collapsed by maintaining a 'dirty' +// bit and there appears to be an attempt to do this. +// But it isn't used or is used in a limited fashion. +// Are there semanic issues requiring a call after certain +// updateItem() calls? +// +// * An error on a fetch could be due to one item in the batch. +// If the batch were broken up, perhaps more of the inventory +// would download. (Handwave here, not certain this is an +// issue in practice.) +// +// * Conversion to AISv3. +// + + +namespace +{ + +///---------------------------------------------------------------------------- +/// Class <anonymous>::BGItemHttpHandler +///---------------------------------------------------------------------------- + +// +// Http request handler class for single inventory item requests. +// +// We'll use a handler-per-request pattern here rather than +// a shared handler. Mainly convenient as this was converted +// from a Responder class model. +// +// Derives from and is identical to the normal FetchItemHttpHandler +// except that: 1) it uses the background request object which is +// updated more slowly than the foreground and 2) keeps a count of +// active requests on the LLInventoryModelBackgroundFetch object +// to indicate outstanding operations are in-flight. +// +class BGItemHttpHandler : public LLInventoryModel::FetchItemHttpHandler +{ + LOG_CLASS(BGItemHttpHandler); + +public: + BGItemHttpHandler(const LLSD & request_sd) + : LLInventoryModel::FetchItemHttpHandler(request_sd) + { + LLInventoryModelBackgroundFetch::instance().incrFetchCount(1); + } + + virtual ~BGItemHttpHandler() + { + LLInventoryModelBackgroundFetch::instance().incrFetchCount(-1); + } + +protected: + BGItemHttpHandler(const BGItemHttpHandler &); // Not defined + void operator=(const BGItemHttpHandler &); // Not defined +}; + + +///---------------------------------------------------------------------------- +/// Class <anonymous>::BGFolderHttpHandler +///---------------------------------------------------------------------------- + +// Http request handler class for folders. +// +// Handler for FetchInventoryDescendents2 and FetchLibDescendents2 +// caps requests for folders. +// +class BGFolderHttpHandler : public LLCore::HttpHandler +{ + LOG_CLASS(BGFolderHttpHandler); + +public: + BGFolderHttpHandler(const LLSD & request_sd, const uuid_vec_t & recursive_cats) + : LLCore::HttpHandler(), + mRequestSD(request_sd), + mRecursiveCatUUIDs(recursive_cats) + { + LLInventoryModelBackgroundFetch::instance().incrFetchCount(1); + } + + virtual ~BGFolderHttpHandler() + { + LLInventoryModelBackgroundFetch::instance().incrFetchCount(-1); + } + +protected: + BGFolderHttpHandler(const BGFolderHttpHandler &); // Not defined + void operator=(const BGFolderHttpHandler &); // Not defined + +public: + virtual void onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response); + + bool getIsRecursive(const LLUUID & cat_id) const; + +private: + void processData(LLSD & body, LLCore::HttpResponse * response); + void processFailure(LLCore::HttpStatus status, LLCore::HttpResponse * response); + void processFailure(const char * const reason, LLCore::HttpResponse * response); + +private: + LLSD mRequestSD; + const uuid_vec_t mRecursiveCatUUIDs; // hack for storing away which cat fetches are recursive +}; + -const F32 MAX_TIME_FOR_SINGLE_FETCH = 10.f; const S32 MAX_FETCH_RETRIES = 10; -LLInventoryModelBackgroundFetch::LLInventoryModelBackgroundFetch() : +const char * const LOG_INV("Inventory"); + +} // end of namespace anonymous + + +///---------------------------------------------------------------------------- +/// Class LLInventoryModelBackgroundFetch +///---------------------------------------------------------------------------- + +LLInventoryModelBackgroundFetch::LLInventoryModelBackgroundFetch(): mBackgroundFetchActive(FALSE), mFolderFetchActive(false), + mFetchCount(0), mAllFoldersFetched(FALSE), mRecursiveInventoryFetchStarted(FALSE), mRecursiveLibraryFetchStarted(FALSE), mNumFetchRetries(0), mMinTimeBetweenFetches(0.3f), mMaxTimeBetweenFetches(10.f), - mTimelyFetchPending(FALSE), - mFetchCount(0) -{ -} + mTimelyFetchPending(FALSE) +{} LLInventoryModelBackgroundFetch::~LLInventoryModelBackgroundFetch() -{ -} +{} bool LLInventoryModelBackgroundFetch::isBulkFetchProcessingComplete() const { - return mFetchQueue.empty() && mFetchCount<=0; + return mFetchQueue.empty() && mFetchCount <= 0; } bool LLInventoryModelBackgroundFetch::libraryFetchStarted() const @@ -91,7 +240,7 @@ bool LLInventoryModelBackgroundFetch::inventoryFetchCompleted() const bool LLInventoryModelBackgroundFetch::inventoryFetchInProgress() const { - return inventoryFetchStarted() && !inventoryFetchCompleted(); + return inventoryFetchStarted() && ! inventoryFetchCompleted(); } bool LLInventoryModelBackgroundFetch::isEverythingFetched() const @@ -104,24 +253,36 @@ BOOL LLInventoryModelBackgroundFetch::folderFetchActive() const return mFolderFetchActive; } +void LLInventoryModelBackgroundFetch::addRequestAtFront(const LLUUID & id, BOOL recursive, bool is_category) +{ + mFetchQueue.push_front(FetchQueueInfo(id, recursive, is_category)); +} + +void LLInventoryModelBackgroundFetch::addRequestAtBack(const LLUUID & id, BOOL recursive, bool is_category) +{ + mFetchQueue.push_back(FetchQueueInfo(id, recursive, is_category)); +} + void LLInventoryModelBackgroundFetch::start(const LLUUID& id, BOOL recursive) { - LLViewerInventoryCategory* cat = gInventory.getCategory(id); - if (cat || (id.isNull() && !isEverythingFetched())) - { // it's a folder, do a bulk fetch - LL_DEBUGS("InventoryFetch") << "Start fetching category: " << id << ", recursive: " << recursive << LL_ENDL; + LLViewerInventoryCategory * cat(gInventory.getCategory(id)); + + if (cat || (id.isNull() && ! isEverythingFetched())) + { + // it's a folder, do a bulk fetch + LL_DEBUGS(LOG_INV) << "Start fetching category: " << id << ", recursive: " << recursive << LL_ENDL; mBackgroundFetchActive = TRUE; mFolderFetchActive = true; if (id.isNull()) { - if (!mRecursiveInventoryFetchStarted) + if (! mRecursiveInventoryFetchStarted) { mRecursiveInventoryFetchStarted |= recursive; mFetchQueue.push_back(FetchQueueInfo(gInventory.getRootFolderID(), recursive)); gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL); } - if (!mRecursiveLibraryFetchStarted) + if (! mRecursiveLibraryFetchStarted) { mRecursiveLibraryFetchStarted |= recursive; mFetchQueue.push_back(FetchQueueInfo(gInventory.getLibraryRootFolderID(), recursive)); @@ -146,9 +307,9 @@ void LLInventoryModelBackgroundFetch::start(const LLUUID& id, BOOL recursive) } } } - else if (LLViewerInventoryItem* itemp = gInventory.getItem(id)) + else if (LLViewerInventoryItem * itemp = gInventory.getItem(id)) { - if (!itemp->mIsComplete && (mFetchQueue.empty() || mFetchQueue.front().mUUID != id)) + if (! itemp->mIsComplete && (mFetchQueue.empty() || mFetchQueue.front().mUUID != id)) { mBackgroundFetchActive = TRUE; @@ -172,11 +333,12 @@ void LLInventoryModelBackgroundFetch::setAllFoldersFetched() mRecursiveLibraryFetchStarted) { mAllFoldersFetched = TRUE; - //LL_INFOS() << "All folders fetched, validating" << LL_ENDL; + //LL_INFOS(LOG_INV) << "All folders fetched, validating" << LL_ENDL; //gInventory.validate(); } mFolderFetchActive = false; mBackgroundFetchActive = false; + LL_INFOS(LOG_INV) << "Inventory background fetch completed" << LL_ENDL; } void LLInventoryModelBackgroundFetch::backgroundFetchCB(void *) @@ -203,12 +365,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch() // No more categories to fetch, stop fetch process. if (mFetchQueue.empty()) { - LL_INFOS() << "Inventory fetch completed" << LL_ENDL; - setAllFoldersFetched(); - mBackgroundFetchActive = false; - mFolderFetchActive = false; - return; } @@ -219,7 +376,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch() // Double timeouts on failure. mMinTimeBetweenFetches = llmin(mMinTimeBetweenFetches * 2.f, 10.f); mMaxTimeBetweenFetches = llmin(mMaxTimeBetweenFetches * 2.f, 120.f); - LL_DEBUGS() << "Inventory fetch times grown to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << LL_ENDL; + LL_DEBUGS(LOG_INV) << "Inventory fetch times grown to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << LL_ENDL; // fetch is no longer considered "timely" although we will wait for full time-out. mTimelyFetchPending = FALSE; } @@ -231,7 +388,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch() break; } - if(gDisconnected) + if (gDisconnected) { // Just bail if we are disconnected. break; @@ -292,7 +449,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch() // Shrink timeouts based on success. mMinTimeBetweenFetches = llmax(mMinTimeBetweenFetches * 0.8f, 0.3f); mMaxTimeBetweenFetches = llmax(mMaxTimeBetweenFetches * 0.8f, 10.f); - LL_DEBUGS() << "Inventory fetch times shrunk to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << LL_ENDL; + LL_DEBUGS(LOG_INV) << "Inventory fetch times shrunk to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << LL_ENDL; } mTimelyFetchPending = FALSE; @@ -355,258 +512,61 @@ void LLInventoryModelBackgroundFetch::backgroundFetch() } } -void LLInventoryModelBackgroundFetch::incrFetchCount(S16 fetching) +void LLInventoryModelBackgroundFetch::incrFetchCount(S32 fetching) { mFetchCount += fetching; if (mFetchCount < 0) { + LL_WARNS_ONCE(LOG_INV) << "Inventory fetch count fell below zero (0)." << LL_ENDL; mFetchCount = 0; } } -class LLInventoryModelFetchItemResponder : public LLInventoryModel::fetchInventoryResponder -{ - LOG_CLASS(LLInventoryModelFetchItemResponder); -public: - LLInventoryModelFetchItemResponder(const LLSD& request_sd) : - LLInventoryModel::fetchInventoryResponder(request_sd) - { - LLInventoryModelBackgroundFetch::instance().incrFetchCount(1); - } -private: - /* virtual */ void httpCompleted() - { - LLInventoryModelBackgroundFetch::instance().incrFetchCount(-1); - LLInventoryModel::fetchInventoryResponder::httpCompleted(); - } -}; - -class LLInventoryModelFetchDescendentsResponder: public LLHTTPClient::Responder -{ - LOG_CLASS(LLInventoryModelFetchDescendentsResponder); -public: - LLInventoryModelFetchDescendentsResponder(const LLSD& request_sd, uuid_vec_t recursive_cats) : - mRequestSD(request_sd), - mRecursiveCatUUIDs(recursive_cats) - { - LLInventoryModelBackgroundFetch::instance().incrFetchCount(1); - } - //LLInventoryModelFetchDescendentsResponder() {}; -private: - /* virtual */ void httpCompleted() - { - LLInventoryModelBackgroundFetch::instance().incrFetchCount(-1); - LLHTTPClient::Responder::httpCompleted(); - } - /* virtual */ void httpSuccess(); - /* virtual */ void httpFailure(); -protected: - BOOL getIsRecursive(const LLUUID& cat_id) const; -private: - LLSD mRequestSD; - uuid_vec_t mRecursiveCatUUIDs; // hack for storing away which cat fetches are recursive -}; - -// If we get back a normal response, handle it here. -void LLInventoryModelFetchDescendentsResponder::httpSuccess() +// Bundle up a bunch of requests to send all at once. +void LLInventoryModelBackgroundFetch::bulkFetch() { - const LLSD& content = getContent(); - if (!content.isMap()) + //Background fetch is called from gIdleCallbacks in a loop until background fetch is stopped. + //If there are items in mFetchQueue, we want to check the time since the last bulkFetch was + //sent. If it exceeds our retry time, go ahead and fire off another batch. + LLViewerRegion * region(gAgent.getRegion()); + if (! region || gDisconnected) { - failureResult(HTTP_INTERNAL_ERROR, "Malformed response contents", content); return; } - LLInventoryModelBackgroundFetch *fetcher = LLInventoryModelBackgroundFetch::getInstance(); - if (content.has("folders")) - { - - for(LLSD::array_const_iterator folder_it = content["folders"].beginArray(); - folder_it != content["folders"].endArray(); - ++folder_it) - { - LLSD folder_sd = *folder_it; - - - //LLUUID agent_id = folder_sd["agent_id"]; - - //if(agent_id != gAgent.getID()) //This should never happen. - //{ - // LL_WARNS() << "Got a UpdateInventoryItem for the wrong agent." - // << LL_ENDL; - // break; - //} - - LLUUID parent_id = folder_sd["folder_id"]; - LLUUID owner_id = folder_sd["owner_id"]; - S32 version = (S32)folder_sd["version"].asInteger(); - S32 descendents = (S32)folder_sd["descendents"].asInteger(); - LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id); - if (parent_id.isNull()) - { - LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem; - for(LLSD::array_const_iterator item_it = folder_sd["items"].beginArray(); - item_it != folder_sd["items"].endArray(); - ++item_it) - { - const LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); - if (lost_uuid.notNull()) - { - LLSD item = *item_it; - titem->unpackMessage(item); - - LLInventoryModel::update_list_t update; - LLInventoryModel::LLCategoryUpdate new_folder(lost_uuid, 1); - update.push_back(new_folder); - gInventory.accountForUpdate(update); - - titem->setParent(lost_uuid); - titem->updateParentOnServer(FALSE); - gInventory.updateItem(titem); - gInventory.notifyObservers(); - - } - } - } - - LLViewerInventoryCategory* pcat = gInventory.getCategory(parent_id); - if (!pcat) - { - continue; - } - - for(LLSD::array_const_iterator category_it = folder_sd["categories"].beginArray(); - category_it != folder_sd["categories"].endArray(); - ++category_it) - { - LLSD category = *category_it; - tcategory->fromLLSD(category); - - const BOOL recursive = getIsRecursive(tcategory->getUUID()); - - if (recursive) - { - fetcher->mFetchQueue.push_back(LLInventoryModelBackgroundFetch::FetchQueueInfo(tcategory->getUUID(), recursive)); - } - else if ( !gInventory.isCategoryComplete(tcategory->getUUID()) ) - { - gInventory.updateCategory(tcategory); - } - - } - LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem; - for(LLSD::array_const_iterator item_it = folder_sd["items"].beginArray(); - item_it != folder_sd["items"].endArray(); - ++item_it) - { - LLSD item = *item_it; - titem->unpackMessage(item); - - gInventory.updateItem(titem); - } - - // Set version and descendentcount according to message. - LLViewerInventoryCategory* cat = gInventory.getCategory(parent_id); - if(cat) - { - cat->setVersion(version); - cat->setDescendentCount(descendents); - cat->determineFolderType(); - } - - } - } - - if (content.has("bad_folders")) - { - for(LLSD::array_const_iterator folder_it = content["bad_folders"].beginArray(); - folder_it != content["bad_folders"].endArray(); - ++folder_it) - { - // *TODO: Stop copying data - LLSD folder_sd = *folder_it; - - // These folders failed on the dataserver. We probably don't want to retry them. - LL_WARNS() << "Folder " << folder_sd["folder_id"].asString() - << "Error: " << folder_sd["error"].asString() << LL_ENDL; - } - } + // *TODO: These values could be tweaked at runtime to effect + // a fast/slow fetch throttle. Once login is complete and the scene + // is mostly loaded, we could turn up the throttle and fill missing + // inventory more quickly. + static const U32 max_batch_size(10); + static const S32 max_concurrent_fetches(12); // Outstanding requests, not connections + static const F32 new_min_time(0.05f); // *HACK: Clean this up when old code goes away entirely. - if (fetcher->isBulkFetchProcessingComplete()) + mMinTimeBetweenFetches = new_min_time; + if (mMinTimeBetweenFetches < new_min_time) { - LL_INFOS() << "Inventory fetch completed" << LL_ENDL; - fetcher->setAllFoldersFetched(); + mMinTimeBetweenFetches = new_min_time; // *HACK: See above. } - - gInventory.notifyObservers(); -} - -// If we get back an error (not found, etc...), handle it here. -void LLInventoryModelFetchDescendentsResponder::httpFailure() -{ - LL_WARNS() << dumpResponse() << LL_ENDL; - LLInventoryModelBackgroundFetch *fetcher = LLInventoryModelBackgroundFetch::getInstance(); - LL_INFOS() << dumpResponse() << LL_ENDL; - - fetcher->incrFetchCount(-1); - - if (getStatus()==HTTP_INTERNAL_ERROR) // timed out or curl failure - { - for(LLSD::array_const_iterator folder_it = mRequestSD["folders"].beginArray(); - folder_it != mRequestSD["folders"].endArray(); - ++folder_it) - { - LLSD folder_sd = *folder_it; - LLUUID folder_id = folder_sd["folder_id"]; - const BOOL recursive = getIsRecursive(folder_id); - fetcher->mFetchQueue.push_front(LLInventoryModelBackgroundFetch::FetchQueueInfo(folder_id, recursive)); - } - } - else + if (mFetchCount) { - if (fetcher->isBulkFetchProcessingComplete()) - { - fetcher->setAllFoldersFetched(); - } - } - gInventory.notifyObservers(); -} - -BOOL LLInventoryModelFetchDescendentsResponder::getIsRecursive(const LLUUID& cat_id) const -{ - return (std::find(mRecursiveCatUUIDs.begin(),mRecursiveCatUUIDs.end(), cat_id) != mRecursiveCatUUIDs.end()); -} -// Bundle up a bunch of requests to send all at once. -// static -void LLInventoryModelBackgroundFetch::bulkFetch() -{ - //Background fetch is called from gIdleCallbacks in a loop until background fetch is stopped. - //If there are items in mFetchQueue, we want to check the time since the last bulkFetch was - //sent. If it exceeds our retry time, go ahead and fire off another batch. - LLViewerRegion* region = gAgent.getRegion(); - if (!region) return; - - S16 max_concurrent_fetches=8; - F32 new_min_time = 0.5f; //HACK! Clean this up when old code goes away entirely. - if (mMinTimeBetweenFetches < new_min_time) - { - mMinTimeBetweenFetches=new_min_time; //HACK! See above. + // Process completed background HTTP requests + gInventory.handleResponses(false); } - if (gDisconnected || - (mFetchCount > max_concurrent_fetches) || + if ((mFetchCount > max_concurrent_fetches) || (mFetchTimer.getElapsedTimeF32() < mMinTimeBetweenFetches)) { - return; // just bail if we are disconnected + return; } - U32 item_count=0; - U32 folder_count=0; - U32 max_batch_size=5; + U32 item_count(0); + U32 folder_count(0); - U32 sort_order = gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER) & 0x1; + const U32 sort_order(gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER) & 0x1); + // *TODO: Think I'd like to get a shared pointer to this and share it + // among all the folder requests. uuid_vec_t recursive_cats; LLSD folder_request_body; @@ -614,27 +574,27 @@ void LLInventoryModelBackgroundFetch::bulkFetch() LLSD item_request_body; LLSD item_request_body_lib; - while (!mFetchQueue.empty() + while (! mFetchQueue.empty() && (item_count + folder_count) < max_batch_size) { - const FetchQueueInfo& fetch_info = mFetchQueue.front(); + const FetchQueueInfo & fetch_info(mFetchQueue.front()); if (fetch_info.mIsCategory) { - const LLUUID &cat_id = fetch_info.mUUID; + const LLUUID & cat_id(fetch_info.mUUID); if (cat_id.isNull()) //DEV-17797 { LLSD folder_sd; folder_sd["folder_id"] = LLUUID::null.asString(); folder_sd["owner_id"] = gAgent.getID(); - folder_sd["sort_order"] = (LLSD::Integer)sort_order; - folder_sd["fetch_folders"] = (LLSD::Boolean)FALSE; - folder_sd["fetch_items"] = (LLSD::Boolean)TRUE; + folder_sd["sort_order"] = LLSD::Integer(sort_order); + folder_sd["fetch_folders"] = LLSD::Boolean(FALSE); + folder_sd["fetch_items"] = LLSD::Boolean(TRUE); folder_request_body["folders"].append(folder_sd); folder_count++; } else { - const LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id); + const LLViewerInventoryCategory * cat(gInventory.getCategory(cat_id)); if (cat) { @@ -643,21 +603,26 @@ void LLInventoryModelBackgroundFetch::bulkFetch() LLSD folder_sd; folder_sd["folder_id"] = cat->getUUID(); folder_sd["owner_id"] = cat->getOwnerID(); - folder_sd["sort_order"] = (LLSD::Integer)sort_order; - folder_sd["fetch_folders"] = TRUE; //(LLSD::Boolean)sFullFetchStarted; - folder_sd["fetch_items"] = (LLSD::Boolean)TRUE; + folder_sd["sort_order"] = LLSD::Integer(sort_order); + folder_sd["fetch_folders"] = LLSD::Boolean(TRUE); //(LLSD::Boolean)sFullFetchStarted; + folder_sd["fetch_items"] = LLSD::Boolean(TRUE); if (ALEXANDRIA_LINDEN_ID == cat->getOwnerID()) + { folder_request_body_lib["folders"].append(folder_sd); + } else + { folder_request_body["folders"].append(folder_sd); + } folder_count++; } + // May already have this folder, but append child folders to list. if (fetch_info.mRecursive) { - LLInventoryModel::cat_array_t* categories; - LLInventoryModel::item_array_t* items; + LLInventoryModel::cat_array_t * categories(NULL); + LLInventoryModel::item_array_t * items(NULL); gInventory.getDirectDescendentsOf(cat->getUUID(), categories, items); for (LLInventoryModel::cat_array_t::const_iterator it = categories->begin(); it != categories->end(); @@ -669,11 +634,14 @@ void LLInventoryModelBackgroundFetch::bulkFetch() } } if (fetch_info.mRecursive) + { recursive_cats.push_back(cat_id); + } } else { - LLViewerInventoryItem* itemp = gInventory.getItem(fetch_info.mUUID); + LLViewerInventoryItem * itemp(gInventory.getItem(fetch_info.mUUID)); + if (itemp) { LLSD item_sd; @@ -694,72 +662,80 @@ void LLInventoryModelBackgroundFetch::bulkFetch() mFetchQueue.pop_front(); } - + + // Issue HTTP POST requests to fetch folders and items + if (item_count + folder_count > 0) { if (folder_count) { - std::string url = region->getCapability("FetchInventoryDescendents2"); - if ( !url.empty() ) + if (folder_request_body["folders"].size()) { - if (folder_request_body["folders"].size()) + const std::string url(region->getCapability("FetchInventoryDescendents2")); + + if (! url.empty()) { - LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(folder_request_body, recursive_cats); - LLHTTPClient::post(url, folder_request_body, fetcher, 300.0); + BGFolderHttpHandler * handler(new BGFolderHttpHandler(folder_request_body, recursive_cats)); + gInventory.requestPost(false, url, folder_request_body, handler, "Inventory Folder"); } - if (folder_request_body_lib["folders"].size()) - { - std::string url_lib = gAgent.getRegion()->getCapability("FetchLibDescendents2"); + } + + if (folder_request_body_lib["folders"].size()) + { + const std::string url(region->getCapability("FetchLibDescendents2")); - LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(folder_request_body_lib, recursive_cats); - LLHTTPClient::post(url_lib, folder_request_body_lib, fetcher, 300.0); + if (! url.empty()) + { + BGFolderHttpHandler * handler(new BGFolderHttpHandler(folder_request_body_lib, recursive_cats)); + gInventory.requestPost(false, url, folder_request_body_lib, handler, "Library Folder"); } } - } + } // if (folder_count) + if (item_count) { - std::string url; - if (item_request_body.size()) { - url = region->getCapability("FetchInventory2"); - if (!url.empty()) + const std::string url(region->getCapability("FetchInventory2")); + + if (! url.empty()) { LLSD body; body["items"] = item_request_body; - - LLHTTPClient::post(url, body, new LLInventoryModelFetchItemResponder(body)); + BGItemHttpHandler * handler(new BGItemHttpHandler(body)); + gInventory.requestPost(false, url, body, handler, "Inventory Item"); } } if (item_request_body_lib.size()) { + const std::string url(region->getCapability("FetchLib2")); - url = region->getCapability("FetchLib2"); - if (!url.empty()) + if (! url.empty()) { LLSD body; body["items"] = item_request_body_lib; - - LLHTTPClient::post(url, body, new LLInventoryModelFetchItemResponder(body)); + BGItemHttpHandler * handler(new BGItemHttpHandler(body)); + gInventory.requestPost(false, url, body, handler, "Library Item"); } } - } + } // if (item_count) + mFetchTimer.reset(); } - else if (isBulkFetchProcessingComplete()) { setAllFoldersFetched(); } } -bool LLInventoryModelBackgroundFetch::fetchQueueContainsNoDescendentsOf(const LLUUID& cat_id) const +bool LLInventoryModelBackgroundFetch::fetchQueueContainsNoDescendentsOf(const LLUUID & cat_id) const { for (fetch_queue_t::const_iterator it = mFetchQueue.begin(); - it != mFetchQueue.end(); ++it) + it != mFetchQueue.end(); + ++it) { - const LLUUID& fetch_id = (*it).mUUID; + const LLUUID & fetch_id = (*it).mUUID; if (gInventory.isObjectDescendentOf(fetch_id, cat_id)) return false; } @@ -767,3 +743,304 @@ bool LLInventoryModelBackgroundFetch::fetchQueueContainsNoDescendentsOf(const LL } +namespace +{ + +///---------------------------------------------------------------------------- +/// Class <anonymous>::BGFolderHttpHandler +///---------------------------------------------------------------------------- + +void BGFolderHttpHandler::onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response) +{ + do // Single-pass do-while used for common exit handling + { + LLCore::HttpStatus status(response->getStatus()); + // status = LLCore::HttpStatus(404); // Dev tool to force error handling + if (! status) + { + processFailure(status, response); + break; // Goto common exit + } + + // Response body should be present. + LLCore::BufferArray * body(response->getBody()); + // body = NULL; // Dev tool to force error handling + if (! body || ! body->size()) + { + LL_WARNS(LOG_INV) << "Missing data in inventory folder query." << LL_ENDL; + processFailure("HTTP response missing expected body", response); + break; // Goto common exit + } + + // Could test 'Content-Type' header but probably unreliable. + + // Convert response to LLSD + // body->write(0, "Garbage Response", 16); // Dev tool to force error handling + LLSD body_llsd; + if (! LLCoreHttpUtil::responseToLLSD(response, true, body_llsd)) + { + // INFOS-level logging will occur on the parsed failure + processFailure("HTTP response contained malformed LLSD", response); + break; // goto common exit + } + + // Expect top-level structure to be a map + // body_llsd = LLSD::emptyArray(); // Dev tool to force error handling + if (! body_llsd.isMap()) + { + processFailure("LLSD response not a map", response); + break; // goto common exit + } + + // Check for 200-with-error failures + // + // See comments in llinventorymodel.cpp about this mode of error. + // + // body_llsd["error"] = LLSD::emptyMap(); // Dev tool to force error handling + // body_llsd["error"]["identifier"] = "Development"; + // body_llsd["error"]["message"] = "You left development code in the viewer"; + if (body_llsd.has("error")) + { + processFailure("Inventory application error (200-with-error)", response); + break; // goto common exit + } + + // Okay, process data if possible + processData(body_llsd, response); + } + while (false); + + // Must delete on completion. + delete this; +} + + +void BGFolderHttpHandler::processData(LLSD & content, LLCore::HttpResponse * response) +{ + LLInventoryModelBackgroundFetch * fetcher(LLInventoryModelBackgroundFetch::getInstance()); + + // API V2 and earlier should probably be testing for "error" map + // in response as an application-level error. + + // Instead, we assume success and attempt to extract information. + if (content.has("folders")) + { + LLSD folders(content["folders"]); + + for (LLSD::array_const_iterator folder_it = folders.beginArray(); + folder_it != folders.endArray(); + ++folder_it) + { + LLSD folder_sd(*folder_it); + + //LLUUID agent_id = folder_sd["agent_id"]; + + //if(agent_id != gAgent.getID()) //This should never happen. + //{ + // LL_WARNS(LOG_INV) << "Got a UpdateInventoryItem for the wrong agent." + // << LL_ENDL; + // break; + //} + + LLUUID parent_id(folder_sd["folder_id"].asUUID()); + LLUUID owner_id(folder_sd["owner_id"].asUUID()); + S32 version(folder_sd["version"].asInteger()); + S32 descendents(folder_sd["descendents"].asInteger()); + LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id); + + if (parent_id.isNull()) + { + LLSD items(folder_sd["items"]); + LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem; + + for (LLSD::array_const_iterator item_it = items.beginArray(); + item_it != items.endArray(); + ++item_it) + { + const LLUUID lost_uuid(gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND)); + + if (lost_uuid.notNull()) + { + LLSD item(*item_it); + + titem->unpackMessage(item); + + LLInventoryModel::update_list_t update; + LLInventoryModel::LLCategoryUpdate new_folder(lost_uuid, 1); + update.push_back(new_folder); + gInventory.accountForUpdate(update); + + titem->setParent(lost_uuid); + titem->updateParentOnServer(FALSE); + gInventory.updateItem(titem); + gInventory.notifyObservers(); + } + } + } + + LLViewerInventoryCategory * pcat(gInventory.getCategory(parent_id)); + if (! pcat) + { + continue; + } + + LLSD categories(folder_sd["categories"]); + for (LLSD::array_const_iterator category_it = categories.beginArray(); + category_it != categories.endArray(); + ++category_it) + { + LLSD category(*category_it); + tcategory->fromLLSD(category); + + const bool recursive(getIsRecursive(tcategory->getUUID())); + if (recursive) + { + fetcher->addRequestAtBack(tcategory->getUUID(), recursive, true); + } + else if (! gInventory.isCategoryComplete(tcategory->getUUID())) + { + gInventory.updateCategory(tcategory); + } + } + + LLSD items(folder_sd["items"]); + LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem; + for (LLSD::array_const_iterator item_it = items.beginArray(); + item_it != items.endArray(); + ++item_it) + { + LLSD item(*item_it); + titem->unpackMessage(item); + + gInventory.updateItem(titem); + } + + // Set version and descendentcount according to message. + LLViewerInventoryCategory * cat(gInventory.getCategory(parent_id)); + if (cat) + { + cat->setVersion(version); + cat->setDescendentCount(descendents); + cat->determineFolderType(); + } + } + } + + if (content.has("bad_folders")) + { + LLSD bad_folders(content["bad_folders"]); + for (LLSD::array_const_iterator folder_it = bad_folders.beginArray(); + folder_it != bad_folders.endArray(); + ++folder_it) + { + // *TODO: Stop copying data [ed: this isn't copying data] + LLSD folder_sd(*folder_it); + + // These folders failed on the dataserver. We probably don't want to retry them. + LL_WARNS(LOG_INV) << "Folder " << folder_sd["folder_id"].asString() + << "Error: " << folder_sd["error"].asString() << LL_ENDL; + } + } + + if (fetcher->isBulkFetchProcessingComplete()) + { + fetcher->setAllFoldersFetched(); + } + + gInventory.notifyObservers(); +} + + +void BGFolderHttpHandler::processFailure(LLCore::HttpStatus status, LLCore::HttpResponse * response) +{ + const std::string & ct(response->getContentType()); + LL_WARNS(LOG_INV) << "Inventory folder fetch failure\n" + << "[Status: " << status.toTerseString() << "]\n" + << "[Reason: " << status.toString() << "]\n" + << "[Content-type: " << ct << "]\n" + << "[Content (abridged): " + << LLCoreHttpUtil::responseToString(response) << "]" << LL_ENDL; + + // Could use a 404 test here to try to detect revoked caps... + + // This was originally the request retry logic for the inventory + // request which tested on HTTP_INTERNAL_ERROR status. This + // retry logic was unbounded and lacked discrimination as to the + // cause of the retry. The new http library should be doing + // adquately on retries but I want to keep the structure of a + // retry for reference. + LLInventoryModelBackgroundFetch *fetcher = LLInventoryModelBackgroundFetch::getInstance(); + if (false) + { + // timed out or curl failure + for (LLSD::array_const_iterator folder_it = mRequestSD["folders"].beginArray(); + folder_it != mRequestSD["folders"].endArray(); + ++folder_it) + { + LLSD folder_sd(*folder_it); + LLUUID folder_id(folder_sd["folder_id"].asUUID()); + const BOOL recursive = getIsRecursive(folder_id); + fetcher->addRequestAtFront(folder_id, recursive, true); + } + } + else + { + if (fetcher->isBulkFetchProcessingComplete()) + { + fetcher->setAllFoldersFetched(); + } + } + gInventory.notifyObservers(); +} + + +void BGFolderHttpHandler::processFailure(const char * const reason, LLCore::HttpResponse * response) +{ + LL_WARNS(LOG_INV) << "Inventory folder fetch failure\n" + << "[Status: internal error]\n" + << "[Reason: " << reason << "]\n" + << "[Content (abridged): " + << LLCoreHttpUtil::responseToString(response) << "]" << LL_ENDL; + + // Reverse of previous processFailure() method, this is invoked + // when response structure is found to be invalid. Original + // always re-issued the request (without limit). This does + // the same but be aware that this may be a source of problems. + // Philosophy is that inventory folders are so essential to + // operation that this is a reasonable action. + LLInventoryModelBackgroundFetch *fetcher = LLInventoryModelBackgroundFetch::getInstance(); + if (true) + { + for (LLSD::array_const_iterator folder_it = mRequestSD["folders"].beginArray(); + folder_it != mRequestSD["folders"].endArray(); + ++folder_it) + { + LLSD folder_sd(*folder_it); + LLUUID folder_id(folder_sd["folder_id"].asUUID()); + const BOOL recursive = getIsRecursive(folder_id); + fetcher->addRequestAtFront(folder_id, recursive, true); + } + } + else + { + if (fetcher->isBulkFetchProcessingComplete()) + { + fetcher->setAllFoldersFetched(); + } + } + gInventory.notifyObservers(); +} + + +bool BGFolderHttpHandler::getIsRecursive(const LLUUID & cat_id) const +{ + return std::find(mRecursiveCatUUIDs.begin(), mRecursiveCatUUIDs.end(), cat_id) != mRecursiveCatUUIDs.end(); +} + +///---------------------------------------------------------------------------- +/// Class <anonymous>::BGItemHttpHandler +///---------------------------------------------------------------------------- + +// Nothing to implement here. All ctor/dtor changes. + +} // end namespace anonymous diff --git a/indra/newview/llinventorymodelbackgroundfetch.h b/indra/newview/llinventorymodelbackgroundfetch.h index 9dfedddd6d..2139f85519 100755 --- a/indra/newview/llinventorymodelbackgroundfetch.h +++ b/indra/newview/llinventorymodelbackgroundfetch.h @@ -29,6 +29,11 @@ #include "llsingleton.h" #include "lluuid.h" +#include "httpcommon.h" +#include "httprequest.h" +#include "httpoptions.h" +#include "httpheaders.h" +#include "httphandler.h" //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLInventoryModelBackgroundFetch @@ -38,8 +43,6 @@ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class LLInventoryModelBackgroundFetch : public LLSingleton<LLInventoryModelBackgroundFetch> { - friend class LLInventoryModelFetchDescendentsResponder; - public: LLInventoryModelBackgroundFetch(); ~LLInventoryModelBackgroundFetch(); @@ -60,16 +63,22 @@ public: bool inventoryFetchInProgress() const; void findLostItems(); - void incrFetchCount(S16 fetching); -protected: + void incrFetchCount(S32 fetching); + bool isBulkFetchProcessingComplete() const; + void setAllFoldersFetched(); + + void addRequestAtFront(const LLUUID & id, BOOL recursive, bool is_category); + void addRequestAtBack(const LLUUID & id, BOOL recursive, bool is_category); + +protected: void bulkFetch(); void backgroundFetch(); static void backgroundFetchCB(void*); // background fetch idle function - void setAllFoldersFetched(); bool fetchQueueContainsNoDescendentsOf(const LLUUID& cat_id) const; + private: BOOL mRecursiveInventoryFetchStarted; BOOL mRecursiveLibraryFetchStarted; @@ -77,7 +86,7 @@ private: BOOL mBackgroundFetchActive; bool mFolderFetchActive; - S16 mFetchCount; + S32 mFetchCount; BOOL mTimelyFetchPending; S32 mNumFetchRetries; @@ -87,9 +96,12 @@ private: struct FetchQueueInfo { - FetchQueueInfo(const LLUUID& id, BOOL recursive, bool is_category = true) : - mUUID(id), mRecursive(recursive), mIsCategory(is_category) + FetchQueueInfo(const LLUUID& id, BOOL recursive, bool is_category = true) + : mUUID(id), + mIsCategory(is_category), + mRecursive(recursive) {} + LLUUID mUUID; bool mIsCategory; BOOL mRecursive; diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp index 2dd8dce42f..d81401b59b 100755 --- a/indra/newview/llinventoryobserver.cpp +++ b/indra/newview/llinventoryobserver.cpp @@ -237,7 +237,8 @@ void fetch_items_from_llsd(const LLSD& items_llsd) if (!url.empty()) { body[i]["agent_id"] = gAgent.getID(); - LLHTTPClient::post(url, body[i], new LLInventoryModel::fetchInventoryResponder(body[i])); + LLInventoryModel::FetchItemHttpHandler * handler(new LLInventoryModel::FetchItemHttpHandler(body[i])); + gInventory.requestPost(true, url, body[i], handler, (i ? "Library Item" : "Inventory Item")); continue; } diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index a4a85e2e8d..e18ecd2e2a 100755 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -336,7 +336,9 @@ LLInventoryFilter& LLInventoryPanel::getFilter() void LLInventoryPanel::setFilterTypes(U64 types, LLInventoryFilter::EFilterType filter_type) { if (filter_type == LLInventoryFilter::FILTERTYPE_OBJECT) + { getFilter().setFilterObjectTypes(types); + } if (filter_type == LLInventoryFilter::FILTERTYPE_CATEGORY) getFilter().setFilterCategoryTypes(types); } @@ -400,6 +402,11 @@ void LLInventoryPanel::setHoursAgo(U32 hours) getFilter().setHoursAgo(hours); } +void LLInventoryPanel::setDateSearchDirection(U32 direction) +{ + getFilter().setDateSearchDirection(direction); +} + void LLInventoryPanel::setFilterLinks(U64 filter_links) { getFilter().setFilterLinks(filter_links); @@ -581,6 +588,22 @@ void LLInventoryPanel::modelChanged(U32 mask) } } } + + if (mask & (LLInventoryObserver::STRUCTURE | LLInventoryObserver::REMOVE)) + { + // STRUCTURE and REMOVE model changes usually fail to update (clean) + // mMostFilteredDescendantGeneration of parent folder and dirtyFilter() + // is not sufficient for successful filter update, so we need to check + // all already passed element over again to remove obsolete elements. + // New items or moved items should be sufficiently covered by + // dirtyFilter(). + LLInventoryFilter& filter = getFilter(); + if (filter.getFilterTypes() & LLInventoryFilter::FILTERTYPE_DATE + || filter.isNotDefault()) + { + filter.setModified(LLFolderViewFilter::FILTER_MORE_RESTRICTIVE); + } + } } LLUUID LLInventoryPanel::getRootFolderID() @@ -1390,6 +1413,17 @@ BOOL LLInventoryPanel::handleKeyHere( KEY key, MASK mask ) // Open selected items if enter key hit on the inventory panel if (mask == MASK_NONE) { + //Don't allow attaching or opening items from Merchant Outbox + LLFolderViewItem* folder_item = mFolderRoot.get()->getCurSelectedItem(); + if(folder_item) + { + LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getViewModelItem(); + if(bridge && bridge->isOutboxFolder() && (bridge->getInventoryType() != LLInventoryType::IT_CATEGORY)) + { + return handled; + } + } + LLInventoryAction::doToSelected(mInventory, mFolderRoot.get(), "open"); handled = TRUE; } diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index 91c3efd8f0..a490dfce5d 100755 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -173,6 +173,7 @@ public: const std::string getFilterSubString(); void setSinceLogoff(BOOL sl); void setHoursAgo(U32 hours); + void setDateSearchDirection(U32 direction); BOOL getSinceLogoff(); void setFilterLinks(U64 filter_links); diff --git a/indra/newview/lllocalbitmaps.cpp b/indra/newview/lllocalbitmaps.cpp index b91e37d596..897ee8429a 100755 --- a/indra/newview/lllocalbitmaps.cpp +++ b/indra/newview/lllocalbitmaps.cpp @@ -61,7 +61,9 @@ #include "llnotificationsutil.h" #include "pipeline.h" #include "llmaterialmgr.h" - +#include "llimagedimensionsinfo.h" +#include "llviewercontrol.h" +#include "lltrans.h" /*=======================================*/ /* Formal declarations, constants, etc. */ /*=======================================*/ @@ -845,6 +847,12 @@ bool LLLocalBitmapMgr::addUnit() std::string filename = picker.getFirstFile(); while(!filename.empty()) { + if(!checkTextureDimensions(filename)) + { + filename = picker.getNextFile(); + continue; + } + LLLocalBitmap* unit = new LLLocalBitmap(filename); if (unit->getValid()) @@ -874,6 +882,37 @@ bool LLLocalBitmapMgr::addUnit() return add_successful; } +bool LLLocalBitmapMgr::checkTextureDimensions(std::string filename) +{ + std::string exten = gDirUtilp->getExtension(filename); + U32 codec = LLImageBase::getCodecFromExtension(exten); + std::string mImageLoadError; + LLImageDimensionsInfo image_info; + if (!image_info.load(filename,codec)) + { + return false; + } + + S32 max_width = gSavedSettings.getS32("max_texture_dimension_X"); + S32 max_height = gSavedSettings.getS32("max_texture_dimension_Y"); + + if ((image_info.getWidth() > max_width) || (image_info.getHeight() > max_height)) + { + LLStringUtil::format_map_t args; + args["WIDTH"] = llformat("%d", max_width); + args["HEIGHT"] = llformat("%d", max_height); + mImageLoadError = LLTrans::getString("texture_load_dimensions_error", args); + + LLSD notif_args; + notif_args["REASON"] = mImageLoadError; + LLNotificationsUtil::add("CannotUploadTexture", notif_args); + + return false; + } + + return true; +} + void LLLocalBitmapMgr::delUnit(LLUUID tracking_id) { if (!sBitmapList.empty()) diff --git a/indra/newview/lllocalbitmaps.h b/indra/newview/lllocalbitmaps.h index a15ea10801..59467922b4 100755 --- a/indra/newview/lllocalbitmaps.h +++ b/indra/newview/lllocalbitmaps.h @@ -120,6 +120,7 @@ class LLLocalBitmapMgr static void cleanupClass(); static bool addUnit(); static void delUnit(LLUUID tracking_id); + static bool checkTextureDimensions(std::string filename); static LLUUID getWorldID(LLUUID tracking_id); static std::string getFilename(LLUUID tracking_id); diff --git a/indra/newview/llloginhandler.cpp b/indra/newview/llloginhandler.cpp index 9b4f146332..39f3c0f113 100755 --- a/indra/newview/llloginhandler.cpp +++ b/indra/newview/llloginhandler.cpp @@ -96,33 +96,6 @@ bool LLLoginHandler::handle(const LLSD& tokens, return true; } - if (tokens.size() == 1 - && tokens[0].asString() == "show") - { - // We're using reg-in-client, so show the XUI login widgets - LLPanelLogin::showLoginWidgets(); - return true; - } - - if (tokens.size() == 1 - && tokens[0].asString() == "reg") - { - LLWindow* window = gViewerWindow->getWindow(); - window->incBusyCount(); - window->setCursor(UI_CURSOR_ARROW); - - // Do this first, as it may be slow and we want to keep something - // on the user's screen as long as possible - LLWeb::loadURLExternal( "http://join.eniac15.lindenlab.com/" ); - - window->decBusyCount(); - window->setCursor(UI_CURSOR_ARROW); - - // Then hide the window - window->minimize(); - return true; - } - // Make sure window is visible LLWindow* window = gViewerWindow->getWindow(); if (window->getMinimized()) diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp index bbcdcb126d..0935691ebc 100755 --- a/indra/newview/llmanip.cpp +++ b/indra/newview/llmanip.cpp @@ -62,7 +62,7 @@ F32 LLManip::sHelpTextFadeTime = 2.f; S32 LLManip::sNumTimesHelpTextShown = 0; S32 LLManip::sMaxTimesShowHelpText = 5; F32 LLManip::sGridMaxSubdivisionLevel = 32.f; -F32 LLManip::sGridMinSubdivisionLevel = 1.f; +F32 LLManip::sGridMinSubdivisionLevel = 1.f / 32.f; LLVector2 LLManip::sTickLabelSpacing(60.f, 25.f); @@ -176,7 +176,7 @@ BOOL LLManip::getManipAxis(LLViewerObject* object, EManipPart manip, LLVector3 & return TRUE; } -F32 LLManip::getSubdivisionLevel(const LLVector3 &reference_point, const LLVector3 &translate_axis, F32 grid_scale, S32 min_pixel_spacing) +F32 LLManip::getSubdivisionLevel(const LLVector3 &reference_point, const LLVector3 &translate_axis, F32 grid_scale, S32 min_pixel_spacing, F32 min_subdivisions, F32 max_subdivisions) { //update current snap subdivision level LLVector3 cam_to_reference; @@ -192,7 +192,8 @@ F32 LLManip::getSubdivisionLevel(const LLVector3 &reference_point, const LLVecto F32 projected_translation_axis_length = (translate_axis % cam_to_reference).magVec(); F32 subdivisions = llmax(projected_translation_axis_length * grid_scale / (current_range / LLViewerCamera::getInstance()->getPixelMeterRatio() * min_pixel_spacing), 0.f); - subdivisions = llclamp((F32)pow(2.f, llfloor(log(subdivisions) / log(2.f))), 1.f / 32.f, 32.f); + // figure out nearest power of 2 that subdivides grid_scale with result > min_pixel_spacing + subdivisions = llclamp((F32)pow(2.f, llfloor(log(subdivisions) / log(2.f))), min_subdivisions, max_subdivisions); return subdivisions; } @@ -548,37 +549,31 @@ void LLManip::renderTickValue(const LLVector3& pos, F32 value, const std::string BOOL hud_selection = mObjectSelection->getSelectType() == SELECT_TYPE_HUD; gGL.matrixMode(LLRender::MM_MODELVIEW); gGL.pushMatrix(); - LLVector3 render_pos = pos; - if (hud_selection) { - F32 zoom_amt = gAgentCamera.mHUDCurZoom; - F32 inv_zoom_amt = 1.f / zoom_amt; - // scale text back up to counter-act zoom level - render_pos = pos * zoom_amt; - gGL.scalef(inv_zoom_amt, inv_zoom_amt, inv_zoom_amt); - } - - LLColor4 shadow_color = LLColor4::black; - shadow_color.mV[VALPHA] = color.mV[VALPHA] * 0.5f; + LLVector3 render_pos = pos; + if (hud_selection) + { + F32 zoom_amt = gAgentCamera.mHUDCurZoom; + F32 inv_zoom_amt = 1.f / zoom_amt; + // scale text back up to counter-act zoom level + render_pos = pos * zoom_amt; + gGL.scalef(inv_zoom_amt, inv_zoom_amt, inv_zoom_amt); + } - if (fractional_portion != 0) - { - fraction_string = llformat("%c%02d%s", LLResMgr::getInstance()->getDecimalPoint(), fractional_portion, suffix.c_str()); + LLColor4 shadow_color = LLColor4::black; + shadow_color.mV[VALPHA] = color.mV[VALPHA] * 0.5f; - gViewerWindow->setup3DViewport(1, -1); - hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -1.f * big_fontp->getWidthF32(val_string), 3.f, shadow_color, hud_selection); - hud_render_utf8text(fraction_string, render_pos, *small_fontp, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, 1.f, 3.f, shadow_color, hud_selection); + if (fractional_portion != 0) + { + fraction_string = llformat("%c%02d%s", LLResMgr::getInstance()->getDecimalPoint(), fractional_portion, suffix.c_str()); - gViewerWindow->setup3DViewport(); - hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -1.f * big_fontp->getWidthF32(val_string), 3.f, color, hud_selection); - hud_render_utf8text(fraction_string, render_pos, *small_fontp, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, 1.f, 3.f, color, hud_selection); - } - else - { - gViewerWindow->setup3DViewport(1, -1); - hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -0.5f * big_fontp->getWidthF32(val_string), 3.f, shadow_color, hud_selection); - gViewerWindow->setup3DViewport(); - hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -0.5f * big_fontp->getWidthF32(val_string), 3.f, color, hud_selection); + hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, LLFontGL::DROP_SHADOW, -1.f * big_fontp->getWidthF32(val_string), 3.f, color, hud_selection); + hud_render_utf8text(fraction_string, render_pos, *small_fontp, LLFontGL::NORMAL, LLFontGL::DROP_SHADOW, 1.f, 3.f, color, hud_selection); + } + else + { + hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, LLFontGL::DROP_SHADOW, -0.5f * big_fontp->getWidthF32(val_string), 3.f, color, hud_selection); + } } gGL.popMatrix(); } diff --git a/indra/newview/llmanip.h b/indra/newview/llmanip.h index 6263e4244f..1fb05e047a 100755 --- a/indra/newview/llmanip.h +++ b/indra/newview/llmanip.h @@ -137,7 +137,7 @@ protected: LLVector3 getPivotPoint(); void getManipNormal(LLViewerObject* object, EManipPart manip, LLVector3 &normal); BOOL getManipAxis(LLViewerObject* object, EManipPart manip, LLVector3 &axis); - F32 getSubdivisionLevel(const LLVector3 &reference_point, const LLVector3 &translate_axis, F32 grid_scale, S32 min_pixel_spacing = MIN_DIVISION_PIXEL_WIDTH); + F32 getSubdivisionLevel(const LLVector3 &reference_point, const LLVector3 &translate_axis, F32 grid_scale, S32 min_pixel_spacing = MIN_DIVISION_PIXEL_WIDTH, F32 min_subdivisions = sGridMinSubdivisionLevel, F32 max_subdivisions = sGridMaxSubdivisionLevel); void renderTickValue(const LLVector3& pos, F32 value, const std::string& suffix, const LLColor4 &color); void renderTickText(const LLVector3& pos, const std::string& suffix, const LLColor4 &color); void updateGridSettings(); diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index 8a89131c43..d22672bc16 100755 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -374,7 +374,7 @@ BOOL LLManipTranslate::handleMouseDownOnPart( S32 x, S32 y, MASK mask ) //LLVector3 select_center_agent = gAgent.getPosAgentFromGlobal(LLSelectMgr::getInstance()->getSelectionCenterGlobal()); // TomY: The above should (?) be identical to the below LLVector3 select_center_agent = getPivotPoint(); - mSubdivisions = llclamp(getSubdivisionLevel(select_center_agent, axis_exists ? axis : LLVector3::z_axis, getMinGridScale()), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel); + mSubdivisions = getSubdivisionLevel(select_center_agent, axis_exists ? axis : LLVector3::z_axis, getMinGridScale()); // if we clicked on a planar manipulator, recenter mouse cursor if (mManipPart >= LL_YZ_PLANE && mManipPart <= LL_XY_PLANE) @@ -516,7 +516,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask) LLSelectMgr::getInstance()->updateSelectionCenter(); LLVector3d current_pos_global = gAgent.getPosGlobalFromAgent(getPivotPoint()); - mSubdivisions = llclamp(getSubdivisionLevel(getPivotPoint(), axis_f, getMinGridScale()), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel); + mSubdivisions = getSubdivisionLevel(getPivotPoint(), axis_f, getMinGridScale()); // Project the cursor onto that plane LLVector3d relative_move; @@ -606,7 +606,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask) max_grid_scale = mGridScale.mV[VZ]; } - F32 num_subdivisions = llclamp(getSubdivisionLevel(getPivotPoint(), camera_projected_dir, max_grid_scale), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel); + F32 num_subdivisions = getSubdivisionLevel(getPivotPoint(), camera_projected_dir, max_grid_scale); F32 grid_scale_a; F32 grid_scale_b; @@ -1254,6 +1254,7 @@ void LLManipTranslate::renderSnapGuides() for (S32 pass = 0; pass < 3; pass++) { LLColor4 line_color = setupSnapGuideRenderPass(pass); + LLGLDepthTest gls_depth(pass != 1); gGL.begin(LLRender::LINES); { @@ -1285,7 +1286,7 @@ void LLManipTranslate::renderSnapGuides() { tick_start = selection_center + (translate_axis * (smallest_grid_unit_scale * (F32)i - offset_nearest_grid_unit)); - F32 cur_subdivisions = llclamp(getSubdivisionLevel(tick_start, translate_axis, getMinGridScale()), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel); + F32 cur_subdivisions = getSubdivisionLevel(tick_start, translate_axis, getMinGridScale()); if (fmodf((F32)(i + sub_div_offset), (max_subdivisions / cur_subdivisions)) != 0.f) { @@ -1383,7 +1384,7 @@ void LLManipTranslate::renderSnapGuides() tick_scale *= 0.7f; } - if (fmodf((F32)(i + sub_div_offset), (max_subdivisions / llmin(sGridMaxSubdivisionLevel, getSubdivisionLevel(tick_pos, translate_axis, getMinGridScale(), tick_label_spacing)))) == 0.f) + if (fmodf((F32)(i + sub_div_offset), (max_subdivisions / getSubdivisionLevel(tick_pos, translate_axis, getMinGridScale(), tick_label_spacing))) == 0.f) { F32 snap_offset_meters; diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 086bc1c186..f4e08dc790 100755 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -509,6 +509,16 @@ void LLMediaCtrl::navigateForward() //////////////////////////////////////////////////////////////////////////////// // +void LLMediaCtrl::navigateStop() +{ + if (mMediaSource && mMediaSource->hasMedia()) + { + mMediaSource->getMediaPlugin()->browse_stop(); + } +} + +//////////////////////////////////////////////////////////////////////////////// +// bool LLMediaCtrl::canNavigateBack() { if (mMediaSource) diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h index b6ed0f3fab..785c57b78a 100755 --- a/indra/newview/llmediactrl.h +++ b/indra/newview/llmediactrl.h @@ -99,6 +99,7 @@ public: void navigateBack(); void navigateHome(); void navigateForward(); + void navigateStop(); void navigateToLocalPage( const std::string& subdir, const std::string& filename_in ); bool canNavigateBack(); bool canNavigateForward(); diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 8f50555a73..648056484e 100755 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -1,4 +1,3 @@ - /** * @file llmeshrepository.cpp * @brief Mesh repository implementation. @@ -72,6 +71,7 @@ #include "bufferarray.h" #include "bufferstream.h" #include "llfasttimer.h" +#include "llcorehttputil.h" #include "boost/lexical_cast.hpp" @@ -338,14 +338,17 @@ static LLFastTimer::DeclareTimer FTM_MESH_FETCH("Mesh Fetch"); LLMeshRepository gMeshRepo; const S32 MESH_HEADER_SIZE = 4096; // Important: assumption is that headers fit in this space + const S32 REQUEST_HIGH_WATER_MIN = 32; // Limits for GetMesh regions const S32 REQUEST_HIGH_WATER_MAX = 150; // Should remain under 2X throttle const S32 REQUEST_LOW_WATER_MIN = 16; const S32 REQUEST_LOW_WATER_MAX = 75; + const S32 REQUEST2_HIGH_WATER_MIN = 32; // Limits for GetMesh2 regions -const S32 REQUEST2_HIGH_WATER_MAX = 80; +const S32 REQUEST2_HIGH_WATER_MAX = 100; const S32 REQUEST2_LOW_WATER_MIN = 16; -const S32 REQUEST2_LOW_WATER_MAX = 40; +const S32 REQUEST2_LOW_WATER_MAX = 50; + const U32 LARGE_MESH_FETCH_THRESHOLD = 1U << 21; // Size at which requests goes to narrow/slow queue const long SMALL_MESH_XFER_TIMEOUT = 120L; // Seconds to complete xfer, small mesh downloads const long LARGE_MESH_XFER_TIMEOUT = 600L; // Seconds to complete xfer, large downloads @@ -518,11 +521,13 @@ class LLMeshHandlerBase : public LLCore::HttpHandler { public: LOG_CLASS(LLMeshHandlerBase); - LLMeshHandlerBase() + LLMeshHandlerBase(U32 offset, U32 requested_bytes) : LLCore::HttpHandler(), mMeshParams(), mProcessed(false), - mHttpHandle(LLCORE_HTTP_HANDLE_INVALID) + mHttpHandle(LLCORE_HTTP_HANDLE_INVALID), + mOffset(offset), + mRequestedBytes(requested_bytes) {} virtual ~LLMeshHandlerBase() @@ -534,13 +539,15 @@ protected: public: virtual void onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response); - virtual void processData(LLCore::BufferArray * body, U8 * data, S32 data_size) = 0; + virtual void processData(LLCore::BufferArray * body, S32 body_offset, U8 * data, S32 data_size) = 0; virtual void processFailure(LLCore::HttpStatus status) = 0; public: LLVolumeParams mMeshParams; bool mProcessed; - LLCore::HttpHandle mHttpHandle; + LLCore::HttpHandle mHttpHandle; + U32 mOffset; + U32 mRequestedBytes; }; @@ -551,8 +558,8 @@ class LLMeshHeaderHandler : public LLMeshHandlerBase { public: LOG_CLASS(LLMeshHeaderHandler); - LLMeshHeaderHandler(const LLVolumeParams & mesh_params) - : LLMeshHandlerBase() + LLMeshHeaderHandler(const LLVolumeParams & mesh_params, U32 offset, U32 requested_bytes) + : LLMeshHandlerBase(offset, requested_bytes) { mMeshParams = mesh_params; LLMeshRepoThread::incActiveHeaderRequests(); @@ -564,7 +571,7 @@ protected: void operator=(const LLMeshHeaderHandler &); // Not defined public: - virtual void processData(LLCore::BufferArray * body, U8 * data, S32 data_size); + virtual void processData(LLCore::BufferArray * body, S32 body_offset, U8 * data, S32 data_size); virtual void processFailure(LLCore::HttpStatus status); }; @@ -573,17 +580,16 @@ public: // // Thread: repo class LLMeshLODHandler : public LLMeshHandlerBase - { +{ public: + LOG_CLASS(LLMeshLODHandler); LLMeshLODHandler(const LLVolumeParams & mesh_params, S32 lod, U32 offset, U32 requested_bytes) - : LLMeshHandlerBase(), - mLOD(lod), - mRequestedBytes(requested_bytes), - mOffset(offset) + : LLMeshHandlerBase(offset, requested_bytes), + mLOD(lod) { - mMeshParams = mesh_params; - LLMeshRepoThread::incActiveLODRequests(); - } + mMeshParams = mesh_params; + LLMeshRepoThread::incActiveLODRequests(); + } virtual ~LLMeshLODHandler(); protected: @@ -591,13 +597,11 @@ protected: void operator=(const LLMeshLODHandler &); // Not defined public: - virtual void processData(LLCore::BufferArray * body, U8 * data, S32 data_size); + virtual void processData(LLCore::BufferArray * body, S32 body_offset, U8 * data, S32 data_size); virtual void processFailure(LLCore::HttpStatus status); public: S32 mLOD; - U32 mRequestedBytes; - U32 mOffset; }; @@ -605,14 +609,12 @@ public: // // Thread: repo class LLMeshSkinInfoHandler : public LLMeshHandlerBase - { +{ public: LOG_CLASS(LLMeshSkinInfoHandler); - LLMeshSkinInfoHandler(const LLUUID& id, U32 offset, U32 size) - : LLMeshHandlerBase(), - mMeshID(id), - mRequestedBytes(size), - mOffset(offset) + LLMeshSkinInfoHandler(const LLUUID& id, U32 offset, U32 requested_bytes) + : LLMeshHandlerBase(offset, requested_bytes), + mMeshID(id) {} virtual ~LLMeshSkinInfoHandler(); @@ -621,13 +623,11 @@ protected: void operator=(const LLMeshSkinInfoHandler &); // Not defined public: - virtual void processData(LLCore::BufferArray * body, U8 * data, S32 data_size); + virtual void processData(LLCore::BufferArray * body, S32 body_offset, U8 * data, S32 data_size); virtual void processFailure(LLCore::HttpStatus status); public: LLUUID mMeshID; - U32 mRequestedBytes; - U32 mOffset; }; @@ -635,14 +635,12 @@ public: // // Thread: repo class LLMeshDecompositionHandler : public LLMeshHandlerBase - { +{ public: LOG_CLASS(LLMeshDecompositionHandler); - LLMeshDecompositionHandler(const LLUUID& id, U32 offset, U32 size) - : LLMeshHandlerBase(), - mMeshID(id), - mRequestedBytes(size), - mOffset(offset) + LLMeshDecompositionHandler(const LLUUID& id, U32 offset, U32 requested_bytes) + : LLMeshHandlerBase(offset, requested_bytes), + mMeshID(id) {} virtual ~LLMeshDecompositionHandler(); @@ -651,13 +649,11 @@ protected: void operator=(const LLMeshDecompositionHandler &); // Not defined public: - virtual void processData(LLCore::BufferArray * body, U8 * data, S32 data_size); + virtual void processData(LLCore::BufferArray * body, S32 body_offset, U8 * data, S32 data_size); virtual void processFailure(LLCore::HttpStatus status); public: LLUUID mMeshID; - U32 mRequestedBytes; - U32 mOffset; }; @@ -665,14 +661,12 @@ public: // // Thread: repo class LLMeshPhysicsShapeHandler : public LLMeshHandlerBase - { +{ public: LOG_CLASS(LLMeshPhysicsShapeHandler); - LLMeshPhysicsShapeHandler(const LLUUID& id, U32 offset, U32 size) - : LLMeshHandlerBase(), - mMeshID(id), - mRequestedBytes(size), - mOffset(offset) + LLMeshPhysicsShapeHandler(const LLUUID& id, U32 offset, U32 requested_bytes) + : LLMeshHandlerBase(offset, requested_bytes), + mMeshID(id) {} virtual ~LLMeshPhysicsShapeHandler(); @@ -681,13 +675,11 @@ protected: void operator=(const LLMeshPhysicsShapeHandler &); // Not defined public: - virtual void processData(LLCore::BufferArray * body, U8 * data, S32 data_size); + virtual void processData(LLCore::BufferArray * body, S32 body_offset, U8 * data, S32 data_size); virtual void processFailure(LLCore::HttpStatus status); public: LLUUID mMeshID; - U32 mRequestedBytes; - U32 mOffset; }; @@ -713,8 +705,8 @@ void log_upload_error(LLCore::HttpStatus status, const LLSD& content, LL_WARNS(LOG_MESH) << "error: " << err << LL_ENDL; LL_WARNS(LOG_MESH) << " mesh upload failed, stage '" << stage << "', error '" << err["error"].asString() - << "', message '" << err["message"].asString() - << "', id '" << err["identifier"].asString() + << "', message '" << err["message"].asString() + << "', id '" << err["identifier"].asString() << "'" << LL_ENDL; if (err.has("errors")) { @@ -754,7 +746,9 @@ LLMeshRepoThread::LLMeshRepoThread() mHttpLargePolicyClass(LLCore::HttpRequest::DEFAULT_POLICY_ID), mHttpPriority(0), mGetMeshVersion(2) - { +{ + LLAppCoreHttp & app_core_http(LLAppViewer::instance()->getAppCoreHttp()); + mMutex = new LLMutex(NULL); mHeaderMutex = new LLMutex(NULL); mSignal = new LLCondition(NULL); @@ -766,15 +760,15 @@ LLMeshRepoThread::LLMeshRepoThread() mHttpLargeOptions->setTransferTimeout(LARGE_MESH_XFER_TIMEOUT); mHttpLargeOptions->setUseRetryAfter(gSavedSettings.getBOOL("MeshUseHttpRetryAfter")); mHttpHeaders = new LLCore::HttpHeaders; - mHttpHeaders->append("Accept", "application/vnd.ll.mesh"); - mHttpPolicyClass = LLAppViewer::instance()->getAppCoreHttp().getPolicy(LLAppCoreHttp::AP_MESH2); - mHttpLegacyPolicyClass = LLAppViewer::instance()->getAppCoreHttp().getPolicy(LLAppCoreHttp::AP_MESH1); - mHttpLargePolicyClass = LLAppViewer::instance()->getAppCoreHttp().getPolicy(LLAppCoreHttp::AP_LARGE_MESH); - } + mHttpHeaders->append(HTTP_OUT_HEADER_ACCEPT, HTTP_CONTENT_VND_LL_MESH); + mHttpPolicyClass = app_core_http.getPolicy(LLAppCoreHttp::AP_MESH2); + mHttpLegacyPolicyClass = app_core_http.getPolicy(LLAppCoreHttp::AP_MESH1); + mHttpLargePolicyClass = app_core_http.getPolicy(LLAppCoreHttp::AP_LARGE_MESH); +} LLMeshRepoThread::~LLMeshRepoThread() - { +{ LL_INFOS(LOG_MESH) << "Small GETs issued: " << LLMeshRepository::sHTTPRequestCount << ", Large GETs issued: " << LLMeshRepository::sHTTPLargeRequestCount << ", Max Lock Holdoffs: " << LLMeshRepository::sMaxLockHoldoffs @@ -785,23 +779,23 @@ LLMeshRepoThread::~LLMeshRepoThread() ++iter) { delete *iter; - } + } mHttpRequestSet.clear(); if (mHttpHeaders) - { + { mHttpHeaders->release(); mHttpHeaders = NULL; - } + } if (mHttpOptions) - { + { mHttpOptions->release(); mHttpOptions = NULL; - } + } if (mHttpLargeOptions) -{ + { mHttpLargeOptions->release(); mHttpLargeOptions = NULL; -} + } delete mHttpRequest; mHttpRequest = NULL; delete mMutex; @@ -846,48 +840,49 @@ void LLMeshRepoThread::run() { // Dispatch all HttpHandler notifications mHttpRequest->update(0L); - } + } sRequestWaterLevel = mHttpRequestSet.size(); // Stats data update // NOTE: order of queue processing intentionally favors LOD requests over header requests while (!mLODReqQ.empty() && mHttpRequestSet.size() < sRequestHighWater) - { + { if (! mMutex) - { + { break; } - mMutex->lock(); - LODRequest req = mLODReqQ.front(); - mLODReqQ.pop(); - LLMeshRepository::sLODProcessing--; - mMutex->unlock(); + mMutex->lock(); + LODRequest req = mLODReqQ.front(); + mLODReqQ.pop(); + LLMeshRepository::sLODProcessing--; + mMutex->unlock(); + if (!fetchMeshLOD(req.mMeshParams, req.mLOD)) // failed, resubmit - { - mMutex->lock(); - mLODReqQ.push(req); + { + mMutex->lock(); + mLODReqQ.push(req); ++LLMeshRepository::sLODProcessing; - mMutex->unlock(); - } - } + mMutex->unlock(); + } + } while (!mHeaderReqQ.empty() && mHttpRequestSet.size() < sRequestHighWater) - { + { if (! mMutex) - { + { break; } - mMutex->lock(); - HeaderRequest req = mHeaderReqQ.front(); - mHeaderReqQ.pop(); - mMutex->unlock(); + mMutex->lock(); + HeaderRequest req = mHeaderReqQ.front(); + mHeaderReqQ.pop(); + mMutex->unlock(); if (!fetchMeshHeader(req.mMeshParams))//failed, resubmit - { - mMutex->lock(); - mHeaderReqQ.push(req) ; - mMutex->unlock(); - } - } + { + mMutex->lock(); + mHeaderReqQ.push(req) ; + mMutex->unlock(); + } + } // For the final three request lists, similar goal to above but // slightly different queue structures. Stay off the mutex when @@ -983,7 +978,7 @@ void LLMeshRepoThread::run() } } mMutex->unlock(); - } + } // For dev purposes only. A dynamic change could make this false // and that shouldn't assert. @@ -1131,6 +1126,9 @@ LLCore::HttpHandle LLMeshRepoThread::getByteRange(const std::string & url, int c size_t offset, size_t len, LLCore::HttpHandler * handler) { + // Also used in lltexturefetch.cpp + static LLCachedControl<bool> disable_range_req(gSavedSettings, "HttpRangeRequestsDisable", false); + LLCore::HttpHandle handle(LLCORE_HTTP_HANDLE_INVALID); if (len < LARGE_MESH_FETCH_THRESHOLD) @@ -1140,8 +1138,8 @@ LLCore::HttpHandle LLMeshRepoThread::getByteRange(const std::string & url, int c : mHttpLegacyPolicyClass), mHttpPriority, url, - offset, - len, + (disable_range_req ? size_t(0) : offset), + (disable_range_req ? size_t(0) : len), mHttpOptions, mHttpHeaders, handler); @@ -1155,8 +1153,8 @@ LLCore::HttpHandle LLMeshRepoThread::getByteRange(const std::string & url, int c handle = mHttpRequest->requestGetByteRange(mHttpLargePolicyClass, mHttpPriority, url, - offset, - len, + (disable_range_req ? size_t(0) : offset), + (disable_range_req ? size_t(0) : len), mHttpLargeOptions, mHttpHeaders, handler); @@ -1250,7 +1248,6 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id) << LL_ENDL; delete handler; ret = false; - } else { @@ -1527,7 +1524,7 @@ bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params) //within the first 4KB //NOTE -- this will break of headers ever exceed 4KB - LLMeshHeaderHandler * handler = new LLMeshHeaderHandler(mesh_params); + LLMeshHeaderHandler * handler = new LLMeshHeaderHandler(mesh_params, 0, MESH_HEADER_SIZE); LLCore::HttpHandle handle = getByteRange(http_url, cap_version, 0, MESH_HEADER_SIZE, handler); if (LLCORE_HTTP_HANDLE_INVALID == handle) { @@ -1860,7 +1857,7 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data, bool upload_skin, bool upload_joints, const std::string & upload_url, bool do_upload, LLHandle<LLWholeModelFeeObserver> fee_observer, LLHandle<LLWholeModelUploadObserver> upload_observer) -: LLThread("mesh upload"), + : LLThread("mesh upload"), LLCore::HttpHandler(), mDiscarded(false), mDoUpload(do_upload), @@ -1890,7 +1887,7 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data, mHttpOptions->setUseRetryAfter(gSavedSettings.getBOOL("MeshUseHttpRetryAfter")); mHttpOptions->setRetries(UPLOAD_RETRY_LIMIT); mHttpHeaders = new LLCore::HttpHeaders; - mHttpHeaders->append("Content-Type", "application/llsd+xml"); + mHttpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_LLSD_XML); mHttpPolicyClass = LLAppViewer::instance()->getAppCoreHttp().getPolicy(LLAppCoreHttp::AP_UPLOADS); mHttpPriority = 0; } @@ -2240,21 +2237,17 @@ void LLMeshUploadThread::doWholeModelUpload() mModelData = LLSD::emptyMap(); wholeModelToLLSD(mModelData, true); LLSD body = mModelData["asset_resources"]; - dump_llsd_to_file(body,make_dump_name("whole_model_body_",dump_num)); - - LLCore::BufferArray * ba = new LLCore::BufferArray; - LLCore::BufferArrayStream bas(ba); - LLSDSerialize::toXML(body, bas); - // LLSDSerialize::toXML(mModelData, bas); // <- Enabling this will generate a convenient upload error - LLCore::HttpHandle handle = mHttpRequest->requestPost(mHttpPolicyClass, - mHttpPriority, - mWholeModelUploadURL, - ba, - mHttpOptions, - mHttpHeaders, - this); - ba->release(); - + + dump_llsd_to_file(body, make_dump_name("whole_model_body_", dump_num)); + + LLCore::HttpHandle handle = LLCoreHttpUtil::requestPostWithLLSD(mHttpRequest, + mHttpPolicyClass, + mHttpPriority, + mWholeModelUploadURL, + body, + mHttpOptions, + mHttpHeaders, + this); if (LLCORE_HTTP_HANDLE_INVALID == handle) { mHttpStatus = mHttpRequest->getStatus(); @@ -2271,7 +2264,7 @@ void LLMeshUploadThread::doWholeModelUpload() mHttpRequest->update(0); while (! LLApp::isQuitting() && ! finished() && ! isDiscarded()) - { + { ms_sleep(sleep_time); sleep_time = llmin(250U, sleep_time + sleep_time); mHttpRequest->update(0); @@ -2287,7 +2280,7 @@ void LLMeshUploadThread::doWholeModelUpload() } } } - } +} void LLMeshUploadThread::requestWholeModelFee() { @@ -2298,19 +2291,14 @@ void LLMeshUploadThread::requestWholeModelFee() mModelData = LLSD::emptyMap(); wholeModelToLLSD(mModelData, false); dump_llsd_to_file(mModelData, make_dump_name("whole_model_fee_request_", dump_num)); - - LLCore::BufferArray * ba = new LLCore::BufferArray; - LLCore::BufferArrayStream bas(ba); - LLSDSerialize::toXML(mModelData, bas); - - LLCore::HttpHandle handle = mHttpRequest->requestPost(mHttpPolicyClass, - mHttpPriority, - mWholeModelFeeCapability, - ba, - mHttpOptions, - mHttpHeaders, - this); - ba->release(); + LLCore::HttpHandle handle = LLCoreHttpUtil::requestPostWithLLSD(mHttpRequest, + mHttpPolicyClass, + mHttpPriority, + mWholeModelFeeCapability, + mModelData, + mHttpOptions, + mHttpHeaders, + this); if (LLCORE_HTTP_HANDLE_INVALID == handle) { mHttpStatus = mHttpRequest->getStatus(); @@ -2318,7 +2306,7 @@ void LLMeshUploadThread::requestWholeModelFee() LL_WARNS(LOG_MESH) << "Couldn't issue request for model fee. Reason: " << mHttpStatus.toString() << " (" << mHttpStatus.toTerseString() << ")" << LL_ENDL; - } + } else { U32 sleep_time(10); @@ -2335,7 +2323,7 @@ void LLMeshUploadThread::requestWholeModelFee() LL_DEBUGS(LOG_MESH) << "Mesh fee query operation discarded." << LL_ENDL; } } - } +} // Does completion duty for both fee queries and actual uploads. @@ -2383,17 +2371,13 @@ void LLMeshUploadThread::onCompleted(LLCore::HttpHandle handle, LLCore::HttpResp } else { - LLCore::BufferArray * ba(response->getBody()); - if (ba && ba->size()) - { - LLCore::BufferArrayStream bas(ba); - LLSDSerialize::fromXML(body, bas); -} + // *TODO: handle error in conversion process + LLCoreHttpUtil::responseToLLSD(response, true, body); } dump_llsd_to_file(body, make_dump_name("whole_model_upload_response_", dump_num)); if (body["state"].asString() == "complete") -{ + { // requested "mesh" asset type isn't actually the type // of the resultant object, fix it up here. mModelData["asset_type"] = "object"; @@ -2446,18 +2430,14 @@ void LLMeshUploadThread::onCompleted(LLCore::HttpHandle handle, LLCore::HttpResp body = llsd_from_file("fake_upload_error.xml"); } else - { - LLCore::BufferArray * ba(response->getBody()); - if (ba && ba->size()) - { - LLCore::BufferArrayStream bas(ba); - LLSDSerialize::fromXML(body, bas); - } - } + { + // *TODO: handle error in conversion process + LLCoreHttpUtil::responseToLLSD(response, true, body); + } dump_llsd_to_file(body, make_dump_name("whole_model_fee_response_", dump_num)); if (body["state"].asString() == "upload") - { + { mWholeModelUploadURL = body["uploader"].asString(); if (observer) @@ -2543,18 +2523,18 @@ void LLMeshRepoThread::notifyLoadedMeshes() skin_info_q.swap(mSkinInfoQ); } if (! mDecompositionQ.empty()) - { + { decomp_q.swap(mDecompositionQ); - } + } mMutex->unlock(); // Process the elements free of the lock while (! skin_info_q.empty()) - { + { gMeshRepo.notifySkinInfoReceived(skin_info_q.front()); skin_info_q.pop_front(); - } + } while (! decomp_q.empty()) { @@ -2648,6 +2628,17 @@ void LLMeshRepository::cacheOutgoingMesh(LLMeshUploadData& data, LLSD& header) } +// Handle failed or successful requests for mesh assets. +// +// Support for 200 responses was added for several reasons. One, +// a service or cache can ignore range headers and give us a +// 200 with full asset should it elect to. We also support +// a debug flag which disables range requests for those very +// few users that have some sort of problem with their networking +// services. But the 200 response handling is suboptimal: rather +// than cache the whole asset, we just extract the part that would +// have been sent in a 206 and process that. Inefficient but these +// are cases far off the norm. void LLMeshHandlerBase::onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response) { mProcessed = true; @@ -2676,35 +2667,78 @@ void LLMeshHandlerBase::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRespo // rather than partial) and 416 (request completely unsatisfyable). // Always been exposed to these but are less likely here where // speculative loads aren't done. - static const LLCore::HttpStatus par_status(HTTP_PARTIAL_CONTENT); + LLCore::BufferArray * body(response->getBody()); + S32 body_offset(0); + U8 * data(NULL); + S32 data_size(body ? body->size() : 0); - if (par_status != status) + if (data_size > 0) { - LL_WARNS_ONCE(LOG_MESH) << "Non-206 successful status received for fetch: " - << status.toTerseString() << LL_ENDL; - } + static const LLCore::HttpStatus par_status(HTTP_PARTIAL_CONTENT); + + unsigned int offset(0), length(0), full_length(0); + + if (par_status == status) + { + // 206 case + response->getRange(&offset, &length, &full_length); + if (! offset && ! length) + { + // This is the case where we receive a 206 status but + // there wasn't a useful Content-Range header in the response. + // This could be because it was badly formatted but is more + // likely due to capabilities services which scrub headers + // from responses. Assume we got what we asked for...` + // length = data_size; + offset = mOffset; + } + } + else + { + // 200 case, typically + offset = 0; + } - LLCore::BufferArray * body(response->getBody()); - S32 data_size(body ? body->size() : 0); - U8 * data(NULL); + // *DEBUG: To test validation below + // offset += 1; - if (data_size > 0) - { + // Validate that what we think we received is consistent with + // what we've asked for. I.e. first byte we wanted lies somewhere + // in the response. + if (offset > mOffset + || (offset + data_size) <= mOffset + || (mOffset - offset) >= data_size) + { + // No overlap with requested range. Fail request with + // suitable error. Shouldn't happen unless server/cache/ISP + // is doing something awful. + LL_WARNS(LOG_MESH) << "Mesh response (bytes [" + << offset << ".." << (offset + length - 1) + << "]) didn't overlap with request's origin (bytes [" + << mOffset << ".." << (mOffset + mRequestedBytes - 1) + << "])." << LL_ENDL; + processFailure(LLCore::HttpStatus(LLCore::HttpStatus::LLCORE, LLCore::HE_INV_CONTENT_RANGE_HDR)); + ++LLMeshRepository::sHTTPErrorCount; + goto common_exit; + } + // *TODO: Try to get rid of data copying and add interfaces // that support BufferArray directly. Introduce a two-phase // handler, optional first that takes a body, fallback second // that requires a temporary allocation and data copy. - data = new U8[data_size]; - body->read(0, (char *) data, data_size); + body_offset = mOffset - offset; + data = new U8[data_size - body_offset]; + body->read(body_offset, (char *) data, data_size - body_offset); LLMeshRepository::sBytesReceived += data_size; } - processData(body, data, data_size); + processData(body, body_offset, data, data_size - body_offset); delete [] data; } // Release handler +common_exit: gMeshRepo.mThread->mHttpRequestSet.erase(this); delete this; // Must be last statement } @@ -2739,9 +2773,10 @@ void LLMeshHeaderHandler::processFailure(LLCore::HttpStatus status) { gMeshRepo.mThread->mUnavailableQ.push(LLMeshRepoThread::LODRequest(mMeshParams, i)); } - } +} -void LLMeshHeaderHandler::processData(LLCore::BufferArray * body, U8 * data, S32 data_size) +void LLMeshHeaderHandler::processData(LLCore::BufferArray * /* body */, S32 /* body_offset */, + U8 * data, S32 data_size) { LLUUID mesh_id = mMeshParams.getSculptID(); bool success = (! MESH_HEADER_PROCESS_FAILED) && gMeshRepo.mThread->headerReceived(mMeshParams, data, data_size); @@ -2756,12 +2791,12 @@ void LLMeshHeaderHandler::processData(LLCore::BufferArray * body, U8 * data, S32 // Can't get the header so none of the LODs will be available LLMutexLock lock(gMeshRepo.mThread->mMutex); for (int i(0); i < 4; ++i) - { + { gMeshRepo.mThread->mUnavailableQ.push(LLMeshRepoThread::LODRequest(mMeshParams, i)); - } } + } else if (data && data_size > 0) - { + { // header was successfully retrieved from sim, cache in vfs LLSD header = gMeshRepo.mThread->mMeshHeader[mesh_id]; @@ -2774,11 +2809,11 @@ void LLMeshHeaderHandler::processData(LLCore::BufferArray * body, U8 * data, S32 S32 lod_bytes = 0; for (U32 i = 0; i < LLModel::LOD_PHYSICS; ++i) - { + { // figure out how many bytes we'll need to reserve in the file const std::string & lod_name = header_lod[i]; lod_bytes = llmax(lod_bytes, header[lod_name]["offset"].asInteger()+header[lod_name]["size"].asInteger()); - } + } // just in case skin info or decomposition is at the end of the file (which it shouldn't be) lod_bytes = llmax(lod_bytes, header["skin"]["offset"].asInteger() + header["skin"]["size"].asInteger()); @@ -2794,7 +2829,7 @@ void LLMeshHeaderHandler::processData(LLCore::BufferArray * body, U8 * data, S32 LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH, LLVFile::WRITE); if (file.getMaxSize() >= bytes || file.setMaxSize(bytes)) - { + { LLMeshRepository::sCacheBytesWritten += data_size; ++LLMeshRepository::sCacheWrites; @@ -2805,19 +2840,19 @@ void LLMeshHeaderHandler::processData(LLCore::BufferArray * body, U8 * data, S32 memset(block, 0, sizeof(block)); while (bytes-file.tell() > sizeof(block)) - { + { file.write(block, sizeof(block)); - } + } S32 remaining = bytes-file.tell(); if (remaining > 0) - { + { file.write(block, remaining); } } } } - } +} LLMeshLODHandler::~LLMeshLODHandler() { @@ -2843,8 +2878,9 @@ void LLMeshLODHandler::processFailure(LLCore::HttpStatus status) gMeshRepo.mThread->mUnavailableQ.push(LLMeshRepoThread::LODRequest(mMeshParams, mLOD)); } -void LLMeshLODHandler::processData(LLCore::BufferArray * body, U8 * data, S32 data_size) - { +void LLMeshLODHandler::processData(LLCore::BufferArray * /* body */, S32 /* body_offset */, + U8 * data, S32 data_size) +{ if ((! MESH_LOD_PROCESS_FAILED) && gMeshRepo.mThread->lodReceived(mMeshParams, mLOD, data, data_size)) { //good fetch from sim, write to VFS for caching @@ -2860,7 +2896,7 @@ void LLMeshLODHandler::processData(LLCore::BufferArray * body, U8 * data, S32 da LLMeshRepository::sCacheBytesWritten += size; ++LLMeshRepository::sCacheWrites; } - } + } else { LL_WARNS(LOG_MESH) << "Error during mesh LOD processing. ID: " << mMeshParams.getSculptID() @@ -2872,12 +2908,12 @@ void LLMeshLODHandler::processData(LLCore::BufferArray * body, U8 * data, S32 da } LLMeshSkinInfoHandler::~LLMeshSkinInfoHandler() - { - llassert(mProcessed); - } +{ + llassert(mProcessed); +} void LLMeshSkinInfoHandler::processFailure(LLCore::HttpStatus status) - { +{ LL_WARNS(LOG_MESH) << "Error during mesh skin info handling. ID: " << mMeshID << ", Reason: " << status.toString() << " (" << status.toTerseString() << "). Not retrying." @@ -2885,10 +2921,11 @@ void LLMeshSkinInfoHandler::processFailure(LLCore::HttpStatus status) // *TODO: Mark mesh unavailable on error. For now, simply leave // request unfulfilled rather than retry forever. - } +} -void LLMeshSkinInfoHandler::processData(LLCore::BufferArray * body, U8 * data, S32 data_size) - { +void LLMeshSkinInfoHandler::processData(LLCore::BufferArray * /* body */, S32 /* body_offset */, + U8 * data, S32 data_size) +{ if ((! MESH_SKIN_INFO_PROCESS_FAILED) && gMeshRepo.mThread->skinInfoReceived(mMeshID, data, data_size)) { //good fetch from sim, write to VFS for caching @@ -2916,20 +2953,21 @@ void LLMeshSkinInfoHandler::processData(LLCore::BufferArray * body, U8 * data, S LLMeshDecompositionHandler::~LLMeshDecompositionHandler() { - llassert(mProcessed); + llassert(mProcessed); } void LLMeshDecompositionHandler::processFailure(LLCore::HttpStatus status) - { +{ LL_WARNS(LOG_MESH) << "Error during mesh decomposition handling. ID: " << mMeshID << ", Reason: " << status.toString() << " (" << status.toTerseString() << "). Not retrying." << LL_ENDL; // *TODO: Mark mesh unavailable on error. For now, simply leave // request unfulfilled rather than retry forever. - } +} -void LLMeshDecompositionHandler::processData(LLCore::BufferArray * body, U8 * data, S32 data_size) +void LLMeshDecompositionHandler::processData(LLCore::BufferArray * /* body */, S32 /* body_offset */, + U8 * data, S32 data_size) { if ((! MESH_DECOMP_PROCESS_FAILED) && gMeshRepo.mThread->decompositionReceived(mMeshID, data, data_size)) { @@ -2946,34 +2984,35 @@ void LLMeshDecompositionHandler::processData(LLCore::BufferArray * body, U8 * da file.seek(offset); file.write(data, size); } - } - else - { + } + else + { LL_WARNS(LOG_MESH) << "Error during mesh decomposition processing. ID: " << mMeshID << ", Unknown reason. Not retrying." << LL_ENDL; // *TODO: Mark mesh unavailable on error - } } +} LLMeshPhysicsShapeHandler::~LLMeshPhysicsShapeHandler() - { - llassert(mProcessed); - } +{ + llassert(mProcessed); +} void LLMeshPhysicsShapeHandler::processFailure(LLCore::HttpStatus status) - { +{ LL_WARNS(LOG_MESH) << "Error during mesh physics shape handling. ID: " << mMeshID << ", Reason: " << status.toString() << " (" << status.toTerseString() << "). Not retrying." << LL_ENDL; // *TODO: Mark mesh unavailable on error - } +} -void LLMeshPhysicsShapeHandler::processData(LLCore::BufferArray * body, U8 * data, S32 data_size) - { +void LLMeshPhysicsShapeHandler::processData(LLCore::BufferArray * /* body */, S32 /* body_offset */, + U8 * data, S32 data_size) +{ if ((! MESH_PHYS_SHAPE_PROCESS_FAILED) && gMeshRepo.mThread->physicsShapeReceived(mMeshID, data, data_size)) - { + { // good fetch from sim, write to VFS for caching LLVFile file(gVFS, mMeshID, LLAssetType::AT_MESH, LLVFile::WRITE); @@ -2981,13 +3020,13 @@ void LLMeshPhysicsShapeHandler::processData(LLCore::BufferArray * body, U8 * dat S32 size = mRequestedBytes; if (file.getSize() >= offset+size) - { + { LLMeshRepository::sCacheBytesWritten += size; ++LLMeshRepository::sCacheWrites; file.seek(offset); file.write(data, size); - } } + } else { LL_WARNS(LOG_MESH) << "Error during mesh physics shape processing. ID: " << mMeshID @@ -3187,7 +3226,7 @@ void LLMeshRepository::notifyLoadedMeshes() if (1 == mGetMeshVersion) { // Legacy GetMesh operation with high connection concurrency - LLMeshRepoThread::sMaxConcurrentRequests = gSavedSettings.getU32("MeshMaxConcurrentRequests"); + LLMeshRepoThread::sMaxConcurrentRequests = gSavedSettings.getU32("MeshMaxConcurrentRequests"); LLMeshRepoThread::sRequestHighWater = llclamp(2 * S32(LLMeshRepoThread::sMaxConcurrentRequests), REQUEST_HIGH_WATER_MIN, REQUEST_HIGH_WATER_MAX); @@ -3198,9 +3237,15 @@ void LLMeshRepository::notifyLoadedMeshes() else { // GetMesh2 operation with keepalives, etc. With pipelining, - // we'll increase this. + // we'll increase this. See llappcorehttp and llcorehttp for + // discussion on connection strategies. + LLAppCoreHttp & app_core_http(LLAppViewer::instance()->getAppCoreHttp()); + S32 scale(app_core_http.isPipelined(LLAppCoreHttp::AP_MESH2) + ? (2 * LLAppCoreHttp::PIPELINING_DEPTH) + : 5); + LLMeshRepoThread::sMaxConcurrentRequests = gSavedSettings.getU32("Mesh2MaxConcurrentRequests"); - LLMeshRepoThread::sRequestHighWater = llclamp(5 * S32(LLMeshRepoThread::sMaxConcurrentRequests), + LLMeshRepoThread::sRequestHighWater = llclamp(scale * S32(LLMeshRepoThread::sMaxConcurrentRequests), REQUEST2_HIGH_WATER_MIN, REQUEST2_HIGH_WATER_MAX); LLMeshRepoThread::sRequestLowWater = llclamp(LLMeshRepoThread::sRequestHighWater / 2, @@ -3300,18 +3345,18 @@ void LLMeshRepository::notifyLoadedMeshes() // If we can't get the locks, skip and pick this up later. ++hold_offs; sMaxLockHoldoffs = llmax(sMaxLockHoldoffs, hold_offs); - return; - } + return; + } hold_offs = 0; if (gAgent.getRegion()) { // Update capability urls - static std::string region_name("never name a region this"); + static std::string region_name("never name a region this"); - if (gAgent.getRegion()->getName() != region_name && gAgent.getRegion()->capabilitiesReceived()) - { - region_name = gAgent.getRegion()->getName(); + if (gAgent.getRegion()->getName() != region_name && gAgent.getRegion()->capabilitiesReceived()) + { + region_name = gAgent.getRegion()->getName(); const bool use_v1(gSavedSettings.getBOOL("MeshUseGetMesh1")); const std::string mesh1(gAgent.getRegion()->getCapability("GetMesh")); const std::string mesh2(gAgent.getRegion()->getCapability("GetMesh2")); @@ -3322,8 +3367,8 @@ void LLMeshRepository::notifyLoadedMeshes() << ", GetMesh: " << mesh1 << ", using version: " << mGetMeshVersion << LL_ENDL; + } } - } //popup queued error messages from background threads while (!mUploadErrorQ.empty()) @@ -3338,46 +3383,46 @@ void LLMeshRepository::notifyLoadedMeshes() S32 push_count = LLMeshRepoThread::sRequestHighWater - active_count; if (mPendingRequests.size() > push_count) - { + { // More requests than the high-water limit allows so // sort and forward the most important. - //calculate "score" for pending requests + //calculate "score" for pending requests - //create score map - std::map<LLUUID, F32> score_map; + //create score map + std::map<LLUUID, F32> score_map; - for (U32 i = 0; i < 4; ++i) - { - for (mesh_load_map::iterator iter = mLoadingMeshes[i].begin(); iter != mLoadingMeshes[i].end(); ++iter) + for (U32 i = 0; i < 4; ++i) { - F32 max_score = 0.f; - for (std::set<LLUUID>::iterator obj_iter = iter->second.begin(); obj_iter != iter->second.end(); ++obj_iter) + for (mesh_load_map::iterator iter = mLoadingMeshes[i].begin(); iter != mLoadingMeshes[i].end(); ++iter) { - LLViewerObject* object = gObjectList.findObject(*obj_iter); - - if (object) + F32 max_score = 0.f; + for (std::set<LLUUID>::iterator obj_iter = iter->second.begin(); obj_iter != iter->second.end(); ++obj_iter) { - LLDrawable* drawable = object->mDrawable; - if (drawable) + LLViewerObject* object = gObjectList.findObject(*obj_iter); + + if (object) { - F32 cur_score = drawable->getRadius()/llmax(drawable->mDistanceWRTCamera, 1.f); - max_score = llmax(max_score, cur_score); + LLDrawable* drawable = object->mDrawable; + if (drawable) + { + F32 cur_score = drawable->getRadius()/llmax(drawable->mDistanceWRTCamera, 1.f); + max_score = llmax(max_score, cur_score); + } } } - } - score_map[iter->first.getSculptID()] = max_score; + score_map[iter->first.getSculptID()] = max_score; + } } - } - //set "score" for pending requests - for (std::vector<LLMeshRepoThread::LODRequest>::iterator iter = mPendingRequests.begin(); iter != mPendingRequests.end(); ++iter) - { - iter->mScore = score_map[iter->mMeshParams.getSculptID()]; - } + //set "score" for pending requests + for (std::vector<LLMeshRepoThread::LODRequest>::iterator iter = mPendingRequests.begin(); iter != mPendingRequests.end(); ++iter) + { + iter->mScore = score_map[iter->mMeshParams.getSculptID()]; + } - //sort by "score" + //sort by "score" std::partial_sort(mPendingRequests.begin(), mPendingRequests.begin() + push_count, mPendingRequests.end(), LLMeshRepoThread::CompareScoreGreater()); } @@ -3588,7 +3633,6 @@ void LLMeshRepository::fetchPhysicsShape(const LLUUID& mesh_id) } } } - } LLModel::Decomposition* LLMeshRepository::getDecomposition(const LLUUID& mesh_id) diff --git a/indra/newview/llnotificationstorage.cpp b/indra/newview/llnotificationstorage.cpp index 2923221c90..e9970de58c 100755 --- a/indra/newview/llnotificationstorage.cpp +++ b/indra/newview/llnotificationstorage.cpp @@ -103,19 +103,21 @@ bool LLNotificationStorage::writeNotifications(const LLSD& pNotificationData) co return didFileOpen; } -bool LLNotificationStorage::readNotifications(LLSD& pNotificationData) const +bool LLNotificationStorage::readNotifications(LLSD& pNotificationData, bool is_new_filename) const { - LL_INFOS("LLNotificationStorage") << "starting read '" << mFileName << "'" << LL_ENDL; + std::string filename = is_new_filename? mFileName : mOldFileName; + + LL_INFOS("LLNotificationStorage") << "starting read '" << filename << "'" << LL_ENDL; bool didFileRead; pNotificationData.clear(); - llifstream notifyFile(mFileName.c_str()); + llifstream notifyFile(filename.c_str()); didFileRead = notifyFile.is_open(); if (!didFileRead) { - LL_WARNS("LLNotificationStorage") << "Failed to open file '" << mFileName << "'" << LL_ENDL; + LL_WARNS("LLNotificationStorage") << "Failed to open file '" << filename << "'" << LL_ENDL; } else { @@ -128,7 +130,19 @@ bool LLNotificationStorage::readNotifications(LLSD& pNotificationData) const } } - LL_INFOS("LLNotificationStorage") << "ending read '" << mFileName << "'" << LL_ENDL; + LL_INFOS("LLNotificationStorage") << "ending read '" << filename << "'" << LL_ENDL; + if (!didFileRead) + { + if(is_new_filename) + { + didFileRead = readNotifications(pNotificationData, false); + if(didFileRead) + { + writeNotifications(pNotificationData); + LLFile::remove(mOldFileName); + } + } + } return didFileRead; } diff --git a/indra/newview/llnotificationstorage.h b/indra/newview/llnotificationstorage.h index 53fd898ea4..21d7123747 100755 --- a/indra/newview/llnotificationstorage.h +++ b/indra/newview/llnotificationstorage.h @@ -43,13 +43,15 @@ public: protected: bool writeNotifications(const LLSD& pNotificationData) const; - bool readNotifications(LLSD& pNotificationData) const; + bool readNotifications(LLSD& pNotificationData, bool is_new_filename = true) const; void setFileName(std::string pFileName) {mFileName = pFileName;} + void setOldFileName(std::string pFileName) {mOldFileName = pFileName;} LLNotificationResponderInterface* createResponder(const std::string& pNotificationName, const LLSD& pParams) const; private: std::string mFileName; + std::string mOldFileName; }; #endif // LL_NOTIFICATIONSTORAGE_H diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp index 89a9e0dc16..407cbfc47b 100755 --- a/indra/newview/llpanelcontents.cpp +++ b/indra/newview/llpanelcontents.cpp @@ -142,6 +142,13 @@ void LLPanelContents::refresh() } } +void LLPanelContents::clearContents() +{ + if (mPanelInventoryObject) + { + mPanelInventoryObject->clearInventoryTask(); + } +} // diff --git a/indra/newview/llpanelcontents.h b/indra/newview/llpanelcontents.h index ad62e13bc2..6ecc78afa0 100755 --- a/indra/newview/llpanelcontents.h +++ b/indra/newview/llpanelcontents.h @@ -48,6 +48,7 @@ public: virtual ~LLPanelContents(); void refresh(); + void clearContents(); static void onClickNewScript(void*); diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index ac00c5d986..19a86cdcea 100755 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -860,10 +860,8 @@ void LLPanelEditWearable::draw() void LLPanelEditWearable::onClose() { - if ( isDirty() ) - { - revertChanges(); - } + // any unsaved changes should be reverted at this point + revertChanges(); } void LLPanelEditWearable::setVisible(BOOL visible) @@ -951,7 +949,7 @@ void LLPanelEditWearable::onCommitSexChange() gAgentAvatarp->updateSexDependentLayerSets(); gAgentAvatarp->updateVisualParams(); - + showWearable(mWearablePtr, TRUE, TRUE); updateScrollingPanelUI(); } diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 1d7ba4d741..c3a10b3fa0 100755 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -1961,7 +1961,7 @@ bool LLPanelGroupRolesSubTab::needsApply(std::string& mesg) LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); if(!gdatap) { - llwarns << "Unable to get group data for group " << mGroupID << llendl; + LL_WARNS() << "Unable to get group data for group " << mGroupID << LL_ENDL; return false; } @@ -2389,8 +2389,8 @@ void LLPanelGroupRolesSubTab::handleActionCheck(LLUICtrl* ctrl, bool force) } else { - llwarns << "Unable to look up role information for role id: " - << role_id << llendl; + LL_WARNS() << "Unable to look up role information for role id: " + << role_id << LL_ENDL; } ////////////////////////////////////////////////////////////////////////// @@ -2835,7 +2835,7 @@ void LLPanelGroupActionsSubTab::setGroupID(const LLUUID& id) if(mActionMembers) mActionMembers->deleteAllItems(); if(mActionDescription) mActionDescription->clear(); - + LLPanelGroupSubTab::setGroupID(id); } diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 088eaa8e0d..bbc3b85bf0 100755 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -81,20 +81,86 @@ const S32 MAX_PASSWORD = 16; LLPanelLogin *LLPanelLogin::sInstance = NULL; BOOL LLPanelLogin::sCapslockDidNotification = FALSE; -class LLLoginRefreshHandler : public LLCommandHandler +class LLLoginLocationAutoHandler : public LLCommandHandler { public: // don't allow from external browsers - LLLoginRefreshHandler() : LLCommandHandler("login_refresh", UNTRUSTED_BLOCK) { } + LLLoginLocationAutoHandler() : LLCommandHandler("location_login", UNTRUSTED_BLOCK) { } bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web) { if (LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP) { - LLPanelLogin::loadLoginPage(); + if ( tokens.size() == 0 || tokens.size() > 4 ) + return false; + + // unescape is important - uris with spaces are escaped in this code path + // (e.g. space -> %20) and the code to log into a region doesn't support that. + const std::string region = LLURI::unescape( tokens[0].asString() ); + + // just region name as payload + if ( tokens.size() == 1 ) + { + // region name only - slurl will end up as center of region + LLSLURL slurl(region); + LLPanelLogin::autologinToLocation(slurl); + } + else + // region name and x coord as payload + if ( tokens.size() == 2 ) + { + // invalid to only specify region and x coordinate + // slurl code will revert to same as region only, so do this anyway + LLSLURL slurl(region); + LLPanelLogin::autologinToLocation(slurl); + } + else + // region name and x/y coord as payload + if ( tokens.size() == 3 ) + { + // region and x/y specified - default z to 0 + F32 xpos; + std::istringstream codec(tokens[1].asString()); + codec >> xpos; + + F32 ypos; + codec.clear(); + codec.str(tokens[2].asString()); + codec >> ypos; + + const LLVector3 location(xpos, ypos, 0.0f); + LLSLURL slurl(region, location); + + LLPanelLogin::autologinToLocation(slurl); + } + else + // region name and x/y/z coord as payload + if ( tokens.size() == 4 ) + { + // region and x/y/z specified - ok + F32 xpos; + std::istringstream codec(tokens[1].asString()); + codec >> xpos; + + F32 ypos; + codec.clear(); + codec.str(tokens[2].asString()); + codec >> ypos; + + F32 zpos; + codec.clear(); + codec.str(tokens[3].asString()); + codec >> zpos; + + const LLVector3 location(xpos, ypos, zpos); + LLSLURL slurl(region, location); + + LLPanelLogin::autologinToLocation(slurl); + }; } return true; } }; +LLLoginLocationAutoHandler gLoginLocationAutoHandler; //--------------------------------------------------------------------------- // Public methods @@ -103,10 +169,14 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, void (*callback)(S32 option, void* user_data), void *cb_data) : LLPanel(), - mLogoImage(), mCallback(callback), mCallbackData(cb_data), - mListener(new LLPanelLoginListener(this)) + mListener(new LLPanelLoginListener(this)), + mUsernameLength(0), + mPasswordLength(0), + mLocationLength(0), + mFavoriteSelected(false), + mShowFavorites(false) { setBackgroundVisible(FALSE); setBackgroundOpaque(TRUE); @@ -120,28 +190,37 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, login_holder->addChild(this); } - // Logo - mLogoImage = LLUI::getUIImage("startup_logo"); - + if (gSavedSettings.getBOOL("FirstLoginThisInstall")) + { + buildFromFile( "panel_login_first.xml"); + } + else + { buildFromFile( "panel_login.xml"); + } reshape(rect.getWidth(), rect.getHeight()); LLLineEditor* password_edit(getChild<LLLineEditor>("password_edit")); password_edit->setKeystrokeCallback(onPassKey, this); // STEAM-14: When user presses Enter with this field in focus, initiate login - password_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnect, this)); + password_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnectLast, this)); // change z sort of clickable text to be behind buttons sendChildToBack(getChildView("forgot_password_text")); - LLComboBox* location_combo = getChild<LLComboBox>("start_location_combo"); + LLComboBox* favorites_combo = getChild<LLComboBox>("start_location_combo"); updateLocationSelectorsVisibility(); // separate so that it can be called from preferences - location_combo->setFocusLostCallback(boost::bind(&LLPanelLogin::onLocationSLURL, this)); + favorites_combo->setFocusLostCallback(boost::bind(&LLPanelLogin::onLocationSLURL, this)); + favorites_combo->setCommitCallback(boost::bind(&LLPanelLogin::onSelectFavorite, this)); LLComboBox* server_choice_combo = getChild<LLComboBox>("server_combo"); server_choice_combo->setCommitCallback(boost::bind(&LLPanelLogin::onSelectServer, this)); + LLLineEditor* location_edit = sInstance->getChild<LLLineEditor>("location_edit"); + location_edit->setKeystrokeCallback(boost::bind(&LLPanelLogin::onLocationEditChanged, this, _1), NULL); + location_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnectLocation, this)); + // Load all of the grids, sorted, and then add a bar and the current grid at the top server_choice_combo->removeall(); @@ -188,9 +267,12 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, LLPanelLogin::onUpdateStartSLURL(start_slurl); // updates grid if needed } - childSetAction("connect_btn", onClickConnect, this); + childSetAction("connect_btn", onClickConnectLast, this); + childSetAction("connect_favorite_btn", onClickConnectFavorite, this); + childSetAction("connect_location_btn", onClickConnectLocation, this); - getChild<LLPanel>("links_login_panel")->setDefaultBtn("connect_btn"); + LLButton* def_btn = getChild<LLButton>("connect_btn"); + setDefaultBtn(def_btn); std::string channel = LLVersionInfo::getChannel(); std::string version = llformat("%s (%d)", @@ -200,8 +282,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, LLTextBox* forgot_password_text = getChild<LLTextBox>("forgot_password_text"); forgot_password_text->setClickedCallback(onClickForgotPassword, NULL); - childSetAction("create_new_account_btn", onClickNewAccount, NULL); - LLTextBox* need_help_text = getChild<LLTextBox>("login_help"); need_help_text->setClickedCallback(onClickHelp, NULL); @@ -209,8 +289,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html"); web_browser->addObserver(this); - reshapeBrowser(); - loadLoginPage(); // Show last logged in user favorites in "Start at" combo. @@ -225,16 +303,23 @@ void LLPanelLogin::addUsersWithFavoritesToUsername() { LLComboBox* combo = getChild<LLComboBox>("username_combo"); if (!combo) return; - std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml"); + std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml"); + std::string old_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml"); LLSD fav_llsd; llifstream file; file.open(filename); - if (!file.is_open()) return; + if (!file.is_open()) + { + file.open(old_filename); + if (!file.is_open()) return; + } LLSDSerialize::fromXML(fav_llsd, file); for (LLSD::map_const_iterator iter = fav_llsd.beginMap(); iter != fav_llsd.endMap(); ++iter) { combo->add(iter->first); + mUsernameLength = iter->first.length(); + updateLoginButtons(); } } @@ -244,19 +329,29 @@ void LLPanelLogin::addFavoritesToStartLocation() LLComboBox* combo = getChild<LLComboBox>("start_location_combo"); if (!combo) return; int num_items = combo->getItemCount(); - for (int i = num_items - 1; i > 2; i--) + for (int i = num_items - 1; i > 0; i--) { combo->remove(i); } // Load favorites into the combo. std::string user_defined_name = getChild<LLComboBox>("username_combo")->getSimple(); - std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml"); + std::replace(user_defined_name.begin(), user_defined_name.end(), '.', ' '); + std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml"); + std::string old_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml"); + mUsernameLength = user_defined_name.length(); + updateLoginButtons(); + LLSD fav_llsd; llifstream file; file.open(filename); - if (!file.is_open()) return; + if (!file.is_open()) + { + file.open(old_filename); + if (!file.is_open()) return; + } LLSDSerialize::fromXML(fav_llsd, file); + for (LLSD::map_const_iterator iter = fav_llsd.beginMap(); iter != fav_llsd.endMap(); ++iter) { @@ -280,6 +375,7 @@ void LLPanelLogin::addFavoritesToStartLocation() std::string value = (*iter1)["slurl"].asString(); if(label != "" && value != "") { + mShowFavorites = true; combo->add(label, value); } } @@ -287,21 +383,6 @@ void LLPanelLogin::addFavoritesToStartLocation() } } -// force the size to be correct (XML doesn't seem to be sufficient to do this) -// (with some padding so the other login screen doesn't show through) -void LLPanelLogin::reshapeBrowser() -{ - LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html"); - LLRect rect = gViewerWindow->getWindowRectScaled(); - LLRect html_rect; - html_rect.setCenterAndSize( - rect.getCenterX() - 2, rect.getCenterY() + 40, - rect.getWidth() + 6, rect.getHeight() - 78 ); - web_browser->setRect( html_rect ); - web_browser->reshape( html_rect.getWidth(), html_rect.getHeight(), TRUE ); - reshape( rect.getWidth(), rect.getHeight(), 1 ); -} - LLPanelLogin::~LLPanelLogin() { LLPanelLogin::sInstance = NULL; @@ -312,50 +393,6 @@ LLPanelLogin::~LLPanelLogin() } // virtual -void LLPanelLogin::draw() -{ - gGL.pushMatrix(); - { - F32 image_aspect = 1.333333f; - F32 view_aspect = (F32)getRect().getWidth() / (F32)getRect().getHeight(); - // stretch image to maintain aspect ratio - if (image_aspect > view_aspect) - { - gGL.translatef(-0.5f * (image_aspect / view_aspect - 1.f) * getRect().getWidth(), 0.f, 0.f); - gGL.scalef(image_aspect / view_aspect, 1.f, 1.f); - } - - S32 width = getRect().getWidth(); - S32 height = getRect().getHeight(); - - if (getChild<LLView>("login_widgets")->getVisible()) - { - // draw a background box in black - gl_rect_2d( 0, height - 264, width, 264, LLColor4::black ); - // draw the bottom part of the background image - // just the blue background to the native client UI - mLogoImage->draw(0, -264, width + 8, mLogoImage->getHeight()); - }; - } - gGL.popMatrix(); - - LLPanel::draw(); -} - -// virtual -BOOL LLPanelLogin::handleKeyHere(KEY key, MASK mask) -{ - if ( KEY_F1 == key ) - { - LLViewerHelp* vhelp = LLViewerHelp::getInstance(); - vhelp->showTopic(vhelp->f1HelpTopic()); - return TRUE; - } - - return LLPanel::handleKeyHere(key, mask); -} - -// virtual void LLPanelLogin::setFocus(BOOL b) { if(b != hasFocus()) @@ -418,10 +455,10 @@ void LLPanelLogin::showLoginWidgets() // It seems to be part of the defunct? reg-in-client project. sInstance->getChildView("login_widgets")->setVisible( true); LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html"); - sInstance->reshapeBrowser(); + // *TODO: Append all the usual login parameters, like first_login=Y etc. std::string splash_screen_url = LLGridManager::getInstance()->getLoginPage(); - web_browser->navigateTo( splash_screen_url, HTTP_CONTENT_TEXT_HTML ); + web_browser->navigateTo( splash_screen_url, "text/html" ); LLUICtrl* username_combo = sInstance->getChild<LLUICtrl>("username_combo"); username_combo->setFocus(TRUE); } @@ -500,9 +537,11 @@ void LLPanelLogin::setFields(LLPointer<LLCredential> credential, // This is a MD5 hex digest of a password. // We don't actually use the password input field, // fill it with MAX_PASSWORD characters so we get a - // nice row of asterixes. + // nice row of asterisks. const std::string filler("123456789!123456"); - sInstance->getChild<LLUICtrl>("password_edit")->setValue(std::string("123456789!123456")); + sInstance->getChild<LLUICtrl>("password_edit")->setValue(filler); + sInstance->mPasswordLength = filler.length(); + sInstance->updateLoginButtons(); } else { @@ -635,11 +674,12 @@ void LLPanelLogin::updateLocationSelectorsVisibility() { if (sInstance) { - BOOL show_start = gSavedSettings.getBOOL("ShowStartLocation"); - sInstance->getChild<LLLayoutPanel>("start_location_panel")->setVisible(show_start); - BOOL show_server = gSavedSettings.getBOOL("ForceShowGrid"); - sInstance->getChild<LLLayoutPanel>("grid_panel")->setVisible(show_server); + LLComboBox* server_combo = sInstance->getChild<LLComboBox>("server_combo"); + if ( server_combo ) + { + server_combo->setVisible(show_server); + } } } @@ -651,6 +691,7 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl) LL_DEBUGS("AppInit")<<new_start_slurl.asString()<<LL_ENDL; LLComboBox* location_combo = sInstance->getChild<LLComboBox>("start_location_combo"); + LLLineEditor* location_edit = sInstance->getChild<LLLineEditor>("location_edit"); /* * Determine whether or not the new_start_slurl modifies the grid. * @@ -680,7 +721,12 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl) updateServer(); // to change the links and splash screen } - location_combo->setTextEntry(new_start_slurl.getLocationString()); + if ( new_start_slurl.getLocationString().length() ) + { + location_edit->setValue(new_start_slurl.getLocationString()); + sInstance->mLocationLength = new_start_slurl.getLocationString().length(); + sInstance->updateLoginButtons(); + } } else { @@ -693,16 +739,12 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl) break; case LLSLURL::HOME_LOCATION: - location_combo->setCurrentByIndex(1); // home location - break; - - case LLSLURL::LAST_LOCATION: - location_combo->setCurrentByIndex(0); // last location + //location_combo->setCurrentByIndex(0); // home location break; default: LL_WARNS("AppInit")<<"invalid login slurl, using home"<<LL_ENDL; - location_combo->setCurrentByIndex(1); // home location + //location_combo->setCurrentByIndex(0); // home location break; } } @@ -713,6 +755,19 @@ void LLPanelLogin::setLocation(const LLSLURL& slurl) LLStartUp::setStartSLURL(slurl); // calls onUpdateStartSLURL, above } +void LLPanelLogin::autologinToLocation(const LLSLURL& slurl) +{ + LL_DEBUGS("AppInit")<<"automatically logging into Location "<<slurl.asString()<<LL_ENDL; + LLStartUp::setStartSLURL(slurl); // calls onUpdateStartSLURL, above + + if ( LLPanelLogin::sInstance != NULL ) + { + void* unused_parameter = 0; + LLPanelLogin::sInstance->onClickConnect(unused_parameter); + } +} + + // static void LLPanelLogin::closePanel() { @@ -750,6 +805,13 @@ void LLPanelLogin::loadLoginPage() LL_DEBUGS("AppInit") << "login_page: " << login_page << LL_ENDL; + // allow users (testers really) to specify a different login content URL + std::string force_login_url = gSavedSettings.getString("ForceLoginURL"); + if ( force_login_url.length() > 0 ) + { + login_page = LLURI(force_login_url); + } + // Language params["lang"] = LLUI::getLanguage(); @@ -774,6 +836,9 @@ void LLPanelLogin::loadLoginPage() // sourceid params["sourceid"] = gSavedSettings.getString("sourceid"); + // login page (web) content version + params["login_content_version"] = gSavedSettings.getString("LoginContentVersion"); + // Make an LLURI with this augmented info LLURI login_uri(LLURI::buildHTTP(login_page.authority(), login_page.path(), @@ -785,7 +850,7 @@ void LLPanelLogin::loadLoginPage() if (web_browser->getCurrentNavUrl() != login_uri.asString()) { LL_DEBUGS("AppInit") << "loading: " << login_uri << LL_ENDL; - web_browser->navigateTo( login_uri.asString(), HTTP_CONTENT_TEXT_HTML ); + web_browser->navigateTo( login_uri.asString(), "text/html" ); } } @@ -796,6 +861,32 @@ void LLPanelLogin::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent ev //--------------------------------------------------------------------------- // Protected methods //--------------------------------------------------------------------------- +// static +void LLPanelLogin::onClickConnectLast(void *) +{ + std::string location = LLSLURL::SIM_LOCATION_LAST; + LLStartUp::setStartSLURL(location); + + void* unused_parameter = 0; + LLPanelLogin::sInstance->onClickConnect(unused_parameter); +} + +void LLPanelLogin::onClickConnectFavorite(void *) +{ + LLPanelLogin::sInstance->onLocationSLURL(); + + void* unused_parameter = 0; + LLPanelLogin::sInstance->onClickConnect(unused_parameter); +} + +void LLPanelLogin::onClickConnectLocation(void *) +{ + std::string location = sInstance->getChild<LLUICtrl>("location_edit")->getValue().asString(); + LLStartUp::setStartSLURL(location); + + void* unused_parameter = 0; + LLPanelLogin::sInstance->onClickConnect(unused_parameter); +} // static void LLPanelLogin::onClickConnect(void *) @@ -865,16 +956,6 @@ void LLPanelLogin::onClickConnect(void *) } // static -void LLPanelLogin::onClickNewAccount(void*) -{ - if (sInstance) - { - LLWeb::loadURLExternal(LLTrans::getString("create_account_url")); - } -} - - -// static void LLPanelLogin::onClickVersion(void*) { LLFloaterReg::showInstance("sl_about"); @@ -902,13 +983,17 @@ void LLPanelLogin::onClickHelp(void*) // static void LLPanelLogin::onPassKey(LLLineEditor* caller, void* user_data) { - LLPanelLogin *This = (LLPanelLogin *) user_data; - This->mPasswordModified = TRUE; + LLPanelLogin *self = (LLPanelLogin *)user_data; + self->mPasswordModified = TRUE; if (gKeyboard->getKeyDown(KEY_CAPSLOCK) && sCapslockDidNotification == FALSE) { // *TODO: use another way to notify user about enabled caps lock, see EXT-6858 sCapslockDidNotification = TRUE; } + + LLLineEditor* password_edit(self->getChild<LLLineEditor>("password_edit")); + self->mPasswordLength = password_edit->getText().length(); + self->updateLoginButtons(); } @@ -949,16 +1034,75 @@ void LLPanelLogin::updateServer() } } +void LLPanelLogin::updateLoginButtons() +{ + LLButton* last_login_btn = getChild<LLButton>("connect_btn"); + LLButton* loc_btn = getChild<LLButton>("connect_location_btn"); + LLButton* fav_btn = getChild<LLButton>("connect_favorite_btn"); + + // no username or no password - turn all buttons off + if ( mUsernameLength == 0 || mPasswordLength == 0 ) + { + last_login_btn->setEnabled(false); + loc_btn->setEnabled(false); + fav_btn->setEnabled(false); + }; + + // we have a username and a password + if ( mUsernameLength != 0 && mPasswordLength != 0 ) + { + // last login button always enabled for this case + last_login_btn->setEnabled(true); + + // double check status of favorites combo (must be items there and one must be selected to enable button) + LLComboBox* favorites_combo = getChild<LLComboBox>("start_location_combo"); + int num_items = favorites_combo->getItemCount(); + int selected_index = favorites_combo->getCurrentIndex(); + if ( num_items > 0 && selected_index >=0 ) + mFavoriteSelected = true; + else + mFavoriteSelected = false; + + // only turn on favorites login button if one is selected + fav_btn->setEnabled( mFavoriteSelected ); + + // only enable location login if there is content there + if ( mLocationLength > 0 ) + loc_btn->setEnabled(true); + else + loc_btn->setEnabled(false); + } +} + +void LLPanelLogin::onLocationEditChanged(LLUICtrl* ctrl) +{ + LLLineEditor* self = (LLLineEditor*)ctrl; + if (self ) + { + mLocationLength = self->getText().length(); + updateLoginButtons(); + } +} + +void LLPanelLogin::onSelectFavorite() +{ + // no way to unselect a favorite once it's selected (i think) + mFavoriteSelected = true; + + updateLoginButtons(); +} + void LLPanelLogin::onSelectServer() { // The user twiddled with the grid choice ui. // apply the selection to the grid setting. LLPointer<LLCredential> credential; - + LLComboBox* server_combo = getChild<LLComboBox>("server_combo"); LLSD server_combo_val = server_combo->getSelectedValue(); LL_INFOS("AppInit") << "grid "<<server_combo_val.asString()<< LL_ENDL; LLGridManager::getInstance()->setGridChoice(server_combo_val.asString()); + addFavoritesToStartLocation(); /* * Determine whether or not the value in the start_location_combo makes sense @@ -990,6 +1134,7 @@ void LLPanelLogin::onSelectServer() // the grid specified by the location is not this one, so clear the combo location_combo->setCurrentByIndex(0); // last location on the new grid location_combo->setTextEntry(LLStringUtil::null); + mFavoriteSelected = true; } } break; @@ -1006,3 +1151,9 @@ void LLPanelLogin::onLocationSLURL() LLStartUp::setStartSLURL(location); // calls onUpdateStartSLURL, above } + +// static +bool LLPanelLogin::getShowFavorites() +{ + return gSavedPerAccountSettings.getBOOL("ShowFavoritesOnLogin"); +} diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h index c71cfc3783..aa63ffabfc 100755 --- a/indra/newview/llpanellogin.h +++ b/indra/newview/llpanellogin.h @@ -49,14 +49,8 @@ public: void *callback_data); ~LLPanelLogin(); - virtual BOOL handleKeyHere(KEY key, MASK mask); - virtual void draw(); virtual void setFocus( BOOL b ); - // Show the XUI first name, last name, and password widgets. They are - // hidden on startup for reg-in-client - static void showLoginWidgets(); - static void show(const LLRect &rect, void (*callback)(S32 option, void* user_data), void* callback_data); @@ -67,6 +61,7 @@ public: static BOOL areCredentialFieldsDirty(); static void setLocation(const LLSLURL& slurl); + static void autologinToLocation(const LLSLURL& slurl); /// Call when preferences that control visibility may have changed static void updateLocationSelectorsVisibility(); @@ -75,6 +70,8 @@ public: void setSiteIsAlive( bool alive ); + void showLoginWidgets(); + static void loadLoginPage(); static void giveFocus(); static void setAlwaysRefresh(bool refresh); @@ -86,14 +83,21 @@ public: /// to be called from LLStartUp::setStartSLURL static void onUpdateStartSLURL(const LLSLURL& new_start_slurl); + // called from prefs when initializing panel + static bool getShowFavorites(); + private: friend class LLPanelLoginListener; - void reshapeBrowser(); void addFavoritesToStartLocation(); void addUsersWithFavoritesToUsername(); + void onLocationEditChanged(LLUICtrl* ctrl); + void onSelectFavorite(); void onSelectServer(); void onLocationSLURL(); + static void onClickConnectLast(void*); + static void onClickConnectFavorite(void*); + static void onClickConnectLocation(void*); static void onClickConnect(void*); static void onClickNewAccount(void*); static void onClickVersion(void*); @@ -103,16 +107,23 @@ private: static void updateServerCombo(); private: - LLPointer<LLUIImage> mLogoImage; boost::scoped_ptr<LLPanelLoginListener> mListener; + void updateLoginButtons(); + void (*mCallback)(S32 option, void *userdata); void* mCallbackData; BOOL mPasswordModified; + bool mShowFavorites; static LLPanelLogin* sInstance; static BOOL sCapslockDidNotification; + bool mFirstLoginThisInstall; + bool mFavoriteSelected; + unsigned int mUsernameLength; + unsigned int mPasswordLength; + unsigned int mLocationLength; }; #endif diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index b02298090a..a7c9dbdf7b 100755 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -55,6 +55,7 @@ #include "llviewertexturelist.h" #include "llsidepanelinventory.h" #include "llfolderview.h" +#include "llradiogroup.h" const std::string FILTERS_FILENAME("filters.xml"); @@ -82,6 +83,7 @@ public: void updateElementsFromFilter(); BOOL getCheckShowEmpty(); BOOL getCheckSinceLogoff(); + U32 getDateSearchDirection(); static void onTimeAgo(LLUICtrl*, void *); static void onCloseBtn(void* user_data); @@ -382,9 +384,11 @@ BOOL LLPanelMainInventory::filtersVisible(void* user_data) void LLPanelMainInventory::onClearSearch() { + BOOL initially_active = FALSE; LLFloater *finder = getFinder(); if (mActivePanel) { + initially_active = mActivePanel->getFilter().isNotDefault(); mActivePanel->setFilterSubString(LLStringUtil::null); mActivePanel->setFilterTypes(0xffffffffffffffffULL); mActivePanel->setFilterLinks(LLInventoryFilter::FILTERLINK_INCLUDE_LINKS); @@ -395,8 +399,8 @@ void LLPanelMainInventory::onClearSearch() LLFloaterInventoryFinder::selectAllTypes(finder); } - // re-open folders that were initially open - if (mActivePanel) + // re-open folders that were initially open in case filter was active + if (mActivePanel && (mFilterSubString.size() || initially_active)) { mSavedFolderState->setApply(TRUE); mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState); @@ -700,6 +704,30 @@ void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data) if ( self->mSpinSinceDays->get() || self->mSpinSinceHours->get() ) { self->getChild<LLUICtrl>("check_since_logoff")->setValue(false); + + U32 days = (U32)self->mSpinSinceDays->get(); + U32 hours = (U32)self->mSpinSinceHours->get(); + if (hours >= 24) + { + // Try to handle both cases of spinner clicking and text input in a sensible fashion as best as possible. + // There is no way to tell if someone has clicked the spinner to get to 24 or input 24 manually, so in + // this case add to days. Any value > 24 means they have input the hours manually, so do not add to the + // current day value. + if (24 == hours) // Got to 24 via spinner clicking or text input of 24 + { + days = days + hours / 24; + } + else // Text input, so do not add to days + { + days = hours / 24; + } + hours = (U32)hours % 24; + self->mSpinSinceHours->setFocus(false); + self->mSpinSinceDays->setFocus(false); + self->mSpinSinceDays->set((F32)days); + self->mSpinSinceHours->set((F32)hours); + self->mSpinSinceHours->setFocus(true); + } } } @@ -719,6 +747,7 @@ void LLFloaterInventoryFinder::updateElementsFromFilter() std::string filter_string = mFilter->getFilterSubString(); LLInventoryFilter::EFolderShow show_folders = mFilter->getShowFolderState(); U32 hours = mFilter->getHoursAgo(); + U32 date_search_direction = mFilter->getDateSearchDirection(); // update the ui elements setTitle(mFilter->getName()); @@ -740,6 +769,7 @@ void LLFloaterInventoryFinder::updateElementsFromFilter() getChild<LLUICtrl>("check_since_logoff")->setValue(mFilter->isSinceLogoff()); mSpinSinceHours->set((F32)(hours % 24)); mSpinSinceDays->set((F32)(hours / 24)); + getChild<LLRadioGroup>("date_search_direction")->setSelectedIndex(date_search_direction); } void LLFloaterInventoryFinder::draw() @@ -840,17 +870,23 @@ void LLFloaterInventoryFinder::draw() } U32 days = (U32)mSpinSinceDays->get(); U32 hours = (U32)mSpinSinceHours->get(); - if (hours > 24) + if (hours >= 24) { - days += hours / 24; + days = hours / 24; hours = (U32)hours % 24; + // A UI element that has focus will not display a new value set to it + mSpinSinceHours->setFocus(false); + mSpinSinceDays->setFocus(false); mSpinSinceDays->set((F32)days); mSpinSinceHours->set((F32)hours); + mSpinSinceHours->setFocus(true); } hours += days * 24; + mPanelMainInventory->getPanel()->setHoursAgo(hours); mPanelMainInventory->getPanel()->setSinceLogoff(getCheckSinceLogoff()); mPanelMainInventory->setFilterTextFromFilter(); + mPanelMainInventory->getPanel()->setDateSearchDirection(getDateSearchDirection()); LLPanel::draw(); } @@ -865,6 +901,11 @@ BOOL LLFloaterInventoryFinder::getCheckSinceLogoff() return getChild<LLUICtrl>("check_since_logoff")->getValue(); } +U32 LLFloaterInventoryFinder::getDateSearchDirection() +{ + return getChild<LLRadioGroup>("date_search_direction")->getSelectedIndex(); +} + void LLFloaterInventoryFinder::onCloseBtn(void* user_data) { LLFloaterInventoryFinder* finderp = (LLFloaterInventoryFinder*)user_data; diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 665b9ab294..6b74d90708 100755 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -1862,14 +1862,19 @@ void LLPanelObjectInventory::refresh() } if(!has_inventory) { - mTaskUUID = LLUUID::null; - removeVOInventoryListener(); - clearContents(); + clearInventoryTask(); } mInventoryViewModel.setTaskID(mTaskUUID); //LL_INFOS() << "LLPanelObjectInventory::refresh() " << mTaskUUID << LL_ENDL; } +void LLPanelObjectInventory::clearInventoryTask() +{ + mTaskUUID = LLUUID::null; + removeVOInventoryListener(); + clearContents(); +} + void LLPanelObjectInventory::removeSelectedItem() { if(mFolders) diff --git a/indra/newview/llpanelobjectinventory.h b/indra/newview/llpanelobjectinventory.h index 9559f7e886..3de49242ac 100755 --- a/indra/newview/llpanelobjectinventory.h +++ b/indra/newview/llpanelobjectinventory.h @@ -62,6 +62,7 @@ public: void refresh(); const LLUUID& getTaskUUID() { return mTaskUUID;} + void clearInventoryTask(); void removeSelectedItem(); void startRenamingSelectedItem(); diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index 6979ae06e0..a5f59dbf4a 100755 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -90,7 +90,7 @@ LLContextMenu* PeopleContextMenu::createMenu() // Set up for multi-selected People // registrar.add("Avatar.AddFriend", boost::bind(&LLAvatarActions::requestFriendshipDialog, mUUIDs)); // *TODO: unimplemented - registrar.add("Avatar.IM", boost::bind(&LLAvatarActions::startConference, mUUIDs, LLUUID::null)); + registrar.add("Avatar.IM", boost::bind(&PeopleContextMenu::startConference, this)); registrar.add("Avatar.Call", boost::bind(&LLAvatarActions::startAdhocCall, mUUIDs, LLUUID::null)); registrar.add("Avatar.OfferTeleport", boost::bind(&PeopleContextMenu::offerTeleport, this)); registrar.add("Avatar.RemoveFriend", boost::bind(&LLAvatarActions::removeFriendsDialog, mUUIDs)); @@ -272,6 +272,19 @@ void PeopleContextMenu::offerTeleport() LLAvatarActions::offerTeleport(mUUIDs); } +void PeopleContextMenu::startConference() +{ + uuid_vec_t uuids; + for (uuid_vec_t::const_iterator it = mUUIDs.begin(); it != mUUIDs.end(); ++it) + { + if(*it != gAgentID) + { + uuids.push_back(*it); + } + } + LLAvatarActions::startConference(uuids); +} + //== NearbyPeopleContextMenu =============================================================== void NearbyPeopleContextMenu::buildContextMenu(class LLMenuGL& menu, U32 flags) diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h index 945382ebc5..9767bab89f 100755 --- a/indra/newview/llpanelpeoplemenus.h +++ b/indra/newview/llpanelpeoplemenus.h @@ -47,6 +47,7 @@ private: bool enableContextMenuItem(const LLSD& userdata); bool checkContextMenuItem(const LLSD& userdata); void offerTeleport(); + void startConference(); void requestTeleport(); }; diff --git a/indra/newview/llpanelsnapshot.cpp b/indra/newview/llpanelsnapshot.cpp index 5924448671..56569e3207 100755 --- a/indra/newview/llpanelsnapshot.cpp +++ b/indra/newview/llpanelsnapshot.cpp @@ -65,8 +65,6 @@ void LLPanelSnapshot::onOpen(const LLSD& key) { LLFloaterSnapshot::getInstance()->notify(LLSD().with("image-format-change", true)); } - - updateCustomResControls(); } LLFloaterSnapshot::ESnapshotFormat LLPanelSnapshot::getImageFormat() const @@ -77,11 +75,6 @@ LLFloaterSnapshot::ESnapshotFormat LLPanelSnapshot::getImageFormat() const void LLPanelSnapshot::enableControls(BOOL enable) { setCtrlsEnabled(enable); - if (enable) - { - // Make sure only relevant controls are enabled/shown. - updateCustomResControls(); - } } LLSpinCtrl* LLPanelSnapshot::getWidthSpinner() @@ -121,16 +114,6 @@ LLSideTrayPanelContainer* LLPanelSnapshot::getParentContainer() return parent; } -// virtual -void LLPanelSnapshot::updateCustomResControls() -{ - // Only show width/height spinners and the aspect ratio checkbox - // when a custom resolution is chosen. - LLComboBox* combo = getChild<LLComboBox>(getImageSizeComboName()); - const bool show = combo->getFirstSelectedIndex() == (combo->getItemCount() - 1); - getChild<LLUICtrl>(getImageSizePanelName())->setVisible(show); -} - void LLPanelSnapshot::updateImageQualityLevel() { LLSliderCtrl* quality_slider = getChild<LLSliderCtrl>("image_quality_slider"); @@ -188,8 +171,6 @@ void LLPanelSnapshot::onCustomResolutionCommit() void LLPanelSnapshot::onResolutionComboCommit(LLUICtrl* ctrl) { - updateCustomResControls(); - LLSD info; info["combo-res-change"]["control-name"] = ctrl->getName(); LLFloaterSnapshot::getInstance()->notify(info); diff --git a/indra/newview/llpanelsnapshot.h b/indra/newview/llpanelsnapshot.h index f3274cf594..42ad798d60 100755 --- a/indra/newview/llpanelsnapshot.h +++ b/indra/newview/llpanelsnapshot.h @@ -57,7 +57,6 @@ public: protected: LLSideTrayPanelContainer* getParentContainer(); - virtual void updateCustomResControls(); void updateImageQualityLevel(); void goBack(); ///< Switch to the default (Snapshot Options) panel void cancel(); diff --git a/indra/newview/llpanelsnapshotinventory.cpp b/indra/newview/llpanelsnapshotinventory.cpp index 47e46a968f..c8a201a5c8 100755 --- a/indra/newview/llpanelsnapshotinventory.cpp +++ b/indra/newview/llpanelsnapshotinventory.cpp @@ -49,7 +49,6 @@ public: /*virtual*/ void onOpen(const LLSD& key); private: - /*virtual*/ void updateCustomResControls(); ///< Show/hide custom resolution controls (spinners and checkbox) /*virtual*/ std::string getWidthSpinnerName() const { return "inventory_snapshot_width"; } /*virtual*/ std::string getHeightSpinnerName() const { return "inventory_snapshot_height"; } /*virtual*/ std::string getAspectRatioCBName() const { return "inventory_keep_aspect_check"; } @@ -73,7 +72,6 @@ BOOL LLPanelSnapshotInventory::postBuild() { getChild<LLSpinCtrl>(getWidthSpinnerName())->setAllowEdit(FALSE); getChild<LLSpinCtrl>(getHeightSpinnerName())->setAllowEdit(FALSE); - getChild<LLUICtrl>(getAspectRatioCBName())->setVisible(FALSE); // we don't keep aspect ratio for inventory textures return LLPanelSnapshot::postBuild(); } @@ -85,17 +83,6 @@ void LLPanelSnapshotInventory::onOpen(const LLSD& key) } // virtual -void LLPanelSnapshotInventory::updateCustomResControls() -{ - LLComboBox* combo = getChild<LLComboBox>(getImageSizeComboName()); - S32 selected_idx = combo->getFirstSelectedIndex(); - const bool show = selected_idx == (combo->getItemCount() - 1); // Custom selected - - getChild<LLUICtrl>(getWidthSpinnerName())->setVisible(show); - getChild<LLUICtrl>(getHeightSpinnerName())->setVisible(show); -} - -// virtual void LLPanelSnapshotInventory::updateControls(const LLSD& info) { const bool have_snapshot = info.has("have-snapshot") ? info["have-snapshot"].asBoolean() : true; diff --git a/indra/newview/llpanelsnapshotoptions.cpp b/indra/newview/llpanelsnapshotoptions.cpp index 743ef3e329..0fc9ceec83 100755 --- a/indra/newview/llpanelsnapshotoptions.cpp +++ b/indra/newview/llpanelsnapshotoptions.cpp @@ -72,7 +72,9 @@ LLPanelSnapshotOptions::LLPanelSnapshotOptions() mCommitCallbackRegistrar.add("Snapshot.SaveToEmail", boost::bind(&LLPanelSnapshotOptions::onSaveToEmail, this)); mCommitCallbackRegistrar.add("Snapshot.SaveToInventory", boost::bind(&LLPanelSnapshotOptions::onSaveToInventory, this)); mCommitCallbackRegistrar.add("Snapshot.SaveToComputer", boost::bind(&LLPanelSnapshotOptions::onSaveToComputer, this)); - + mCommitCallbackRegistrar.add("Snapshot.SendToFacebook", boost::bind(&LLPanelSnapshotOptions::onSendToFacebook, this)); + mCommitCallbackRegistrar.add("Snapshot.SendToTwitter", boost::bind(&LLPanelSnapshotOptions::onSendToTwitter, this)); + mCommitCallbackRegistrar.add("Snapshot.SendToFlickr", boost::bind(&LLPanelSnapshotOptions::onSendToFlickr, this)); LLGlobalEconomy::Singleton::getInstance()->addObserver(this); } @@ -84,13 +86,6 @@ LLPanelSnapshotOptions::~LLPanelSnapshotOptions() // virtual BOOL LLPanelSnapshotOptions::postBuild() { - LLTextBox* sendToFacebookTextBox = getChild<LLTextBox>("send_to_facebook_textbox"); - sendToFacebookTextBox->setURLClickedCallback(boost::bind(&LLPanelSnapshotOptions::onSendToFacebook, this)); - LLTextBox* sendToTwitterTextBox = getChild<LLTextBox>("send_to_twitter_textbox"); - sendToTwitterTextBox->setURLClickedCallback(boost::bind(&LLPanelSnapshotOptions::onSendToTwitter, this)); - LLTextBox* sendToFlickrTextBox = getChild<LLTextBox>("send_to_flickr_textbox"); - sendToFlickrTextBox->setURLClickedCallback(boost::bind(&LLPanelSnapshotOptions::onSendToFlickr, this)); - return LLPanel::postBuild(); } diff --git a/indra/newview/llpanelsnapshotpostcard.cpp b/indra/newview/llpanelsnapshotpostcard.cpp index 95c443b826..8e37b1418c 100755 --- a/indra/newview/llpanelsnapshotpostcard.cpp +++ b/indra/newview/llpanelsnapshotpostcard.cpp @@ -72,7 +72,6 @@ private: void onMsgFormFocusRecieved(); void onFormatComboCommit(LLUICtrl* ctrl); void onQualitySliderCommit(LLUICtrl* ctrl); - void onTabButtonPress(S32 btn_idx); void onSend(); bool mHasFirstMsgFocus; @@ -86,8 +85,6 @@ LLPanelSnapshotPostcard::LLPanelSnapshotPostcard() { mCommitCallbackRegistrar.add("Postcard.Send", boost::bind(&LLPanelSnapshotPostcard::onSend, this)); mCommitCallbackRegistrar.add("Postcard.Cancel", boost::bind(&LLPanelSnapshotPostcard::cancel, this)); - mCommitCallbackRegistrar.add("Postcard.Message", boost::bind(&LLPanelSnapshotPostcard::onTabButtonPress, this, 0)); - mCommitCallbackRegistrar.add("Postcard.Settings", boost::bind(&LLPanelSnapshotPostcard::onTabButtonPress, this, 1)); } @@ -108,8 +105,6 @@ BOOL LLPanelSnapshotPostcard::postBuild() getChild<LLUICtrl>("image_quality_slider")->setCommitCallback(boost::bind(&LLPanelSnapshotPostcard::onQualitySliderCommit, this, _1)); - getChild<LLButton>("message_btn")->setToggleState(TRUE); - return LLPanelSnapshot::postBuild(); } @@ -218,27 +213,6 @@ void LLPanelSnapshotPostcard::onQualitySliderCommit(LLUICtrl* ctrl) LLFloaterSnapshot::getInstance()->notify(info); // updates the "SnapshotQuality" setting } -void LLPanelSnapshotPostcard::onTabButtonPress(S32 btn_idx) -{ - LLButton* buttons[2] = { - getChild<LLButton>("message_btn"), - getChild<LLButton>("settings_btn"), - }; - - // Switch between Message and Settings tabs. - LLButton* clicked_btn = buttons[btn_idx]; - LLButton* other_btn = buttons[!btn_idx]; - LLSideTrayPanelContainer* container = - getChild<LLSideTrayPanelContainer>("postcard_panel_container"); - - container->selectTab(clicked_btn->getToggleState() ? btn_idx : !btn_idx); - //clicked_btn->setEnabled(FALSE); - other_btn->toggleState(); - //other_btn->setEnabled(TRUE); - - LL_DEBUGS() << "Button #" << btn_idx << " (" << clicked_btn->getName() << ") clicked" << LL_ENDL; -} - void LLPanelSnapshotPostcard::onSend() { // Validate input. diff --git a/indra/newview/llpersistentnotificationstorage.cpp b/indra/newview/llpersistentnotificationstorage.cpp index 8658921dc4..9e4f50b7a7 100755 --- a/indra/newview/llpersistentnotificationstorage.cpp +++ b/indra/newview/llpersistentnotificationstorage.cpp @@ -35,7 +35,7 @@ #include "llscreenchannel.h" #include "llscriptfloater.h" #include "llviewermessage.h" - +#include "llviewernetwork.h" LLPersistentNotificationStorage::LLPersistentNotificationStorage() : LLSingleton<LLPersistentNotificationStorage>() , LLNotificationStorage("") @@ -158,7 +158,10 @@ void LLPersistentNotificationStorage::loadNotifications() void LLPersistentNotificationStorage::initialize() { - setFileName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "open_notifications.xml")); + std::string file_name = "open_notifications_" + LLGridManager::getInstance()->getGrid() + ".xml"; + setFileName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, file_name)); + setOldFileName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "open_notifications.xml")); + LLNotifications::instance().getChannel("Persistent")-> connectChanged(boost::bind(&LLPersistentNotificationStorage::onPersistentChannelChanged, this, _1)); } diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp index c4858e241e..337a63e627 100755 --- a/indra/newview/llpreviewnotecard.cpp +++ b/indra/newview/llpreviewnotecard.cpp @@ -474,12 +474,17 @@ bool LLPreviewNotecard::saveIfNeeded(LLInventoryItem* copyitem) &onSaveComplete, (void*)info, FALSE); + return true; } else // !gAssetStorage { LL_WARNS() << "Not connected to an asset storage system." << LL_ENDL; return false; } + if(mCloseAfterSave) + { + closeFloater(); + } } } return true; diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 9411b8265b..8eea5ea73e 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1166,7 +1166,7 @@ void LLScriptEdCore::onBtnSaveToFile( void* userdata ) if( self->mSaveCallback ) { LLFilePicker& file_picker = LLFilePicker::instance(); - if( file_picker.getSaveFile( LLFilePicker::FFSAVE_SCRIPT ) ) + if( file_picker.getSaveFile( LLFilePicker::FFSAVE_SCRIPT, self->mScriptName ) ) { std::string filename = file_picker.getFirstFile(); std::string scriptText=self->mEditor->getText(); @@ -1948,6 +1948,7 @@ void LLLiveLSLEditor::loadScriptText(LLVFS *vfs, const LLUUID &uuid, LLAssetType mScriptEd->setScriptText(LLStringExplicit(&buffer[0]), TRUE); mScriptEd->mEditor->makePristine(); + mScriptEd->setScriptName(getItem()->getName()); } diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index 9ea191e928..515f277c4a 100755 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -114,6 +114,8 @@ public: virtual bool hasAccelerators() const { return true; } + void setScriptName(const std::string& name){mScriptName = name;}; + private: void onBtnHelp(); void onBtnDynamicHelp(); @@ -138,6 +140,7 @@ protected: private: std::string mSampleText; + std::string mScriptName; LLScriptEditor* mEditor; void (*mLoadCallback)(void* userdata); void (*mSaveCallback)(void* userdata, BOOL close_after_save); diff --git a/indra/newview/llpreviewsound.cpp b/indra/newview/llpreviewsound.cpp index 11b81a58fc..105c5e8cbe 100755 --- a/indra/newview/llpreviewsound.cpp +++ b/indra/newview/llpreviewsound.cpp @@ -95,7 +95,6 @@ void LLPreviewSound::auditionSound( void *userdata ) if(item && gAudiop) { - LLVector3d lpos_global = gAgent.getPositionGlobal(); - gAudiop->triggerSound(item->getAssetUUID(), gAgent.getID(), SOUND_GAIN, LLAudioEngine::AUDIO_TYPE_SFX, lpos_global); + gAudiop->triggerSound(item->getAssetUUID(), gAgent.getID(), SOUND_GAIN, LLAudioEngine::AUDIO_TYPE_SFX); } } diff --git a/indra/newview/llscenemonitor.cpp b/indra/newview/llscenemonitor.cpp index 7f705e44d2..179a73413e 100644 --- a/indra/newview/llscenemonitor.cpp +++ b/indra/newview/llscenemonitor.cpp @@ -709,9 +709,20 @@ void LLSceneMonitorView::onClose(bool app_quitting) setVisible(false); } +void LLSceneMonitorView::onClickCloseBtn(bool app_quitting) +{ + setVisible(false); +} + void LLSceneMonitorView::onVisibilityChange(BOOL visible) { - visible = visible && LLGLSLShader::sNoFixedFunction; + if (!LLGLSLShader::sNoFixedFunction && visible) + { + visible = false; + // keep Scene monitor and its view in sycn + setVisible(false); + LL_WARNS("SceneMonitor") << "Incompatible graphical settings, Scene Monitor can't be turned on" << LL_ENDL; + } LLSceneMonitor::getInstance()->setDebugViewerVisible(visible); } diff --git a/indra/newview/llscenemonitor.h b/indra/newview/llscenemonitor.h index e9ceb2aa2a..5bde3b5aab 100644 --- a/indra/newview/llscenemonitor.h +++ b/indra/newview/llscenemonitor.h @@ -116,6 +116,7 @@ public: protected: virtual void onClose(bool app_quitting=false); + virtual void onClickCloseBtn(bool app_quitting=false); }; extern LLSceneMonitorView* gSceneMonitorView; diff --git a/indra/newview/llsceneview.cpp b/indra/newview/llsceneview.cpp index 32f327b762..112fa5b4e1 100755 --- a/indra/newview/llsceneview.cpp +++ b/indra/newview/llsceneview.cpp @@ -56,6 +56,10 @@ void LLSceneView::onClose(bool) setVisible(false); } +void LLSceneView::onClickCloseBtn(bool) +{ + setVisible(false); +} void LLSceneView::draw() { diff --git a/indra/newview/llsceneview.h b/indra/newview/llsceneview.h index 6d839bcf08..e077c358b4 100755 --- a/indra/newview/llsceneview.h +++ b/indra/newview/llsceneview.h @@ -39,6 +39,7 @@ public: protected: virtual void onClose(bool app_qutting = false); + virtual void onClickCloseBtn(bool app_qutting = false); }; diff --git a/indra/newview/llsnapshotlivepreview.cpp b/indra/newview/llsnapshotlivepreview.cpp index f61db77169..600ebf5914 100644 --- a/indra/newview/llsnapshotlivepreview.cpp +++ b/indra/newview/llsnapshotlivepreview.cpp @@ -5,7 +5,7 @@ * * $LicenseInfo:firstyear=2013&license=viewerlgpl$ * Second Life Viewer Source Code -* Copyright (C) 2013, Linden Research, Inc. +* Copyright (C) 2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -151,7 +151,7 @@ F32 LLSnapshotLivePreview::getImageAspect() void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail, F32 delay) { - lldebugs << "updateSnapshot: mSnapshotUpToDate = " << getSnapshotUpToDate() << llendl; + LL_DEBUGS() << "updateSnapshot: mSnapshotUpToDate = " << getSnapshotUpToDate() << LL_ENDL; // Update snapshot if requested. if (new_snapshot) @@ -195,6 +195,8 @@ void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail mSnapshotDelayTimer.start(); mSnapshotDelayTimer.setTimerExpirySec(delay); + mPosTakenGlobal = gAgentCamera.getCameraPositionGlobal(); + // Tell the floater container that the snapshot is in the process of updating itself if (mViewContainer) { @@ -594,7 +596,7 @@ void LLSnapshotLivePreview::generateThumbnailImage(BOOL force_update) } else { - llwarns << "Couldn't find a path to the following filter : " << getFilter() << llendl; + LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL; } } // Scale to a power of 2 so it can be mapped to a texture @@ -642,7 +644,7 @@ LLViewerTexture* LLSnapshotLivePreview::getBigThumbnailImage() } else { - llwarns << "Couldn't find a path to the following filter : " << getFilter() << llendl; + LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL; } } // Scale to a power of 2 so it can be mapped to a texture @@ -695,7 +697,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview ) // time to produce a snapshot if(!previewp->getSnapshotUpToDate()) { - lldebugs << "producing snapshot" << llendl; + LL_DEBUGS() << "producing snapshot" << LL_ENDL; if (!previewp->mPreviewImage) { previewp->mPreviewImage = new LLImageRaw; @@ -760,7 +762,6 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview ) curr_preview_image->setFilteringOption(previewp->getSnapshotType() == SNAPSHOT_TEXTURE ? LLTexUnit::TFO_ANISOTROPIC : LLTexUnit::TFO_POINT); curr_preview_image->setAddressMode(LLTexUnit::TAM_CLAMP); - previewp->mPosTakenGlobal = gAgentCamera.getCameraPositionGlobal(); previewp->mShineCountdown = 4; // wait a few frames to avoid animation glitch due to readback this frame } } @@ -775,7 +776,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview ) previewp->setVisible(gSavedSettings.getBOOL("UseFreezeFrame") && previewp->mAllowFullScreenPreview); // only show fullscreen preview when in freeze frame mode previewp->mSnapshotDelayTimer.stop(); previewp->mSnapshotActive = FALSE; - lldebugs << "done creating snapshot" << llendl; + LL_DEBUGS() << "done creating snapshot" << LL_ENDL; } if (!previewp->getThumbnailUpToDate()) @@ -910,13 +911,13 @@ LLPointer<LLImageFormatted> LLSnapshotLivePreview::getFormattedImage() } else { - llwarns << "Couldn't find a path to the following filter : " << getFilter() << llendl; + LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL; } } // Create the new formatted image of the appropriate format. LLFloaterSnapshot::ESnapshotFormat format = getSnapshotFormat(); - lldebugs << "Encoding new image of format " << format << llendl; + LL_DEBUGS() << "Encoding new image of format " << format << LL_ENDL; switch (format) { @@ -975,6 +976,21 @@ void LLSnapshotLivePreview::saveTexture() mPreviewImage->getHeight(), mPreviewImage->getComponents()); + // Apply the filter to mPreviewImage + if (getFilter() != "") + { + std::string filter_path = LLImageFiltersManager::getInstance()->getFilterPath(getFilter()); + if (filter_path != "") + { + LLImageFilter filter(filter_path); + filter.executeFilter(scaled); + } + else + { + LL_WARNS() << "Couldn't find a path to the following filter : " << getFilter() << LL_ENDL; + } + } + scaled->biasedScaleToPowerOfTwo(MAX_TEXTURE_SIZE); LL_DEBUGS() << "scaled texture to " << scaled->getWidth() << "x" << scaled->getHeight() << LL_ENDL; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 0c282a19a5..9da7717b74 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1891,19 +1891,6 @@ bool idle_startup() display_startup(); - // based on the comments, we've successfully logged in so we can delete the 'forced' - // URL that the updater set in settings.ini (in a mostly paranoid fashion) - std::string nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" ); - if ( nextLoginLocation.length() ) - { - // clear it - gSavedSettings.setString( "NextLoginLocation", "" ); - - // and make sure it's saved - gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile") , TRUE ); - LLUIColorTable::instance().saveUserSettings(); - }; - display_startup(); // JC: Initializing audio requests many sounds for download. init_audio(); @@ -2226,7 +2213,6 @@ bool idle_startup() return TRUE; } - LL_WARNS("AppInit") << "Reached end of idle_startup for state " << LLStartUp::getStartupState() << LL_ENDL; return TRUE; } diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 047538a32a..eedb829b48 100755 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -200,6 +200,7 @@ BOOL LLStatusBar::postBuild() sgp.stat.count_stat_float(&LLStatViewer::ACTIVE_MESSAGE_DATA_RECEIVED); sgp.units("Kbps"); sgp.precision(0); + sgp.per_sec(true); mSGBandwidth = LLUICtrlFactory::create<LLStatGraph>(sgp); addChild(mSGBandwidth); x -= SIM_STAT_WIDTH + 2; diff --git a/indra/newview/llsyntaxid.cpp b/indra/newview/llsyntaxid.cpp index b1194dcd1b..a763d42a8d 100644 --- a/indra/newview/llsyntaxid.cpp +++ b/indra/newview/llsyntaxid.cpp @@ -47,23 +47,22 @@ public: LL_DEBUGS("SyntaxLSL") << "Instantiating with file saving to: '" << filespec << "'" << LL_ENDL; } - virtual void errorWithContent(U32 status, - const std::string& reason, - const LLSD& content) + /* virtual */ void httpFailure() { - LL_WARNS("SyntaxLSL") << "failed to fetch syntax file [status:" << status << "]: " << content << LL_ENDL; + LL_WARNS("SyntaxLSL") << "failed to fetch syntax file [status:" << getStatus() << "]: " << getContent() << LL_ENDL; } - virtual void result(const LLSD& content_ref) + /* virtual */ void httpSuccess() { // Continue only if a valid LLSD object was returned. - if (content_ref.isMap()) + const LLSD& content = getContent(); + if (content.isMap()) { - if (LLSyntaxIdLSL::getInstance()->isSupportedVersion(content_ref)) + if (LLSyntaxIdLSL::getInstance()->isSupportedVersion(content)) { - LLSyntaxIdLSL::getInstance()->setKeywordsXml(content_ref); + LLSyntaxIdLSL::getInstance()->setKeywordsXml(content); - cacheFile(content_ref); + cacheFile(content); LLSyntaxIdLSL::getInstance()->handleFileFetched(mFileSpec); } else diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 425e339713..acd4cf2d8d 100755 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -56,13 +56,13 @@ #include "llsdparam.h" #include "llsdutil.h" #include "llstartup.h" -#include "llsdserialize.h" #include "httprequest.h" #include "httphandler.h" #include "httpresponse.h" #include "bufferarray.h" #include "bufferstream.h" +#include "llcorehttputil.h" #include "llhttpretrypolicy.h" @@ -241,8 +241,10 @@ LLTrace::EventStatHandle<F64Milliseconds > LLTextureFetch::sCacheReadLatency("te // Tuning/Parameterization Constants -static const S32 HTTP_REQUESTS_IN_QUEUE_HIGH_WATER = 40; // Maximum requests to have active in HTTP -static const S32 HTTP_REQUESTS_IN_QUEUE_LOW_WATER = 20; // Active level at which to refill +static const S32 HTTP_PIPE_REQUESTS_HIGH_WATER = 100; // Maximum requests to have active in HTTP (pipelined) +static const S32 HTTP_PIPE_REQUESTS_LOW_WATER = 50; // Active level at which to refill +static const S32 HTTP_NONPIPE_REQUESTS_HIGH_WATER = 40; +static const S32 HTTP_NONPIPE_REQUESTS_LOW_WATER = 20; // BUG-3323/SH-4375 // *NOTE: This is a heuristic value. Texture fetches have a habit of using a @@ -481,12 +483,12 @@ private: bool acquireHttpSemaphore() { llassert(! mHttpHasResource); - if (mFetcher->mHttpSemaphore <= 0) + if (mFetcher->mHttpSemaphore >= mFetcher->mHttpHighWater) { return false; } mHttpHasResource = true; - mFetcher->mHttpSemaphore--; + mFetcher->mHttpSemaphore++; return true; } @@ -496,7 +498,8 @@ private: { llassert(mHttpHasResource); mHttpHasResource = false; - mFetcher->mHttpSemaphore++; + mFetcher->mHttpSemaphore--; + llassert_always(mFetcher->mHttpSemaphore >= 0); } private: @@ -608,16 +611,16 @@ private: LLCore::HttpHandle mHttpHandle; // Handle of any active request LLCore::BufferArray * mHttpBufferArray; // Refcounted pointer to response data - S32 mHttpPolicyClass; + S32 mHttpPolicyClass; bool mHttpActive; // Active request to http library - U32 mHttpReplySize, // Actual received data size - mHttpReplyOffset; // Actual received data offset + U32 mHttpReplySize, // Actual received data size + mHttpReplyOffset; // Actual received data offset bool mHttpHasResource; // Counts against Fetcher's mHttpSemaphore // State history - U32 mCacheReadCount, - mCacheWriteCount, - mResourceWaitCount; // Requests entering WAIT_HTTP_RESOURCE2 + U32 mCacheReadCount, + mCacheWriteCount, + mResourceWaitCount; // Requests entering WAIT_HTTP_RESOURCE2 }; ////////////////////////////////////////////////////////////////////////////// @@ -1325,7 +1328,7 @@ bool LLTextureFetchWorker::doWork(S32 param) } } - static LLCachedControl<bool> use_http(gSavedSettings,"ImagePipelineUseHTTP", true); + static LLCachedControl<bool> use_http(gSavedSettings, "ImagePipelineUseHTTP", true); // if (mHost != LLHost::invalid) get_url = false; if ( use_http && mCanUseHTTP && mUrl.empty())//get http url. @@ -1346,17 +1349,20 @@ bool LLTextureFetchWorker::doWork(S32 param) LL_WARNS(LOG_TXT) << "trying to seek a non-default texture on the sim. Bad!" << LL_ENDL; } setUrl(http_url + "/?texture_id=" + mID.asString().c_str()); + LL_DEBUGS(LOG_TXT) << "Texture URL: " << mUrl << LL_ENDL; mWriteToCacheState = CAN_WRITE ; //because this texture has a fixed texture id. } else { mCanUseHTTP = false ; + LL_DEBUGS(LOG_TXT) << "Texture not available via HTTP: empty URL." << LL_ENDL; } } else { // This will happen if not logged in or if a region deoes not have HTTP Texture enabled //LL_WARNS(LOG_TXT) << "Region not found for host: " << mHost << LL_ENDL; + LL_DEBUGS(LOG_TXT) << "Texture not available via HTTP: no region " << mUrl << LL_ENDL; mCanUseHTTP = false; } } @@ -1470,6 +1476,9 @@ bool LLTextureFetchWorker::doWork(S32 param) if (mState == SEND_HTTP_REQ) { + // Also used in llmeshrepository + static LLCachedControl<bool> disable_range_req(gSavedSettings, "HttpRangeRequestsDisable", false); + if (! mCanUseHTTP) { releaseHttpSemaphore(); @@ -1525,22 +1534,47 @@ bool LLTextureFetchWorker::doWork(S32 param) mRequestedOffset -= 1; mRequestedSize += 1; } - mHttpHandle = LLCORE_HTTP_HANDLE_INVALID; - if (!mUrl.empty()) - { - mRequestedTimer.reset(); - mLoaded = FALSE; - mGetStatus = LLCore::HttpStatus(); - mGetReason.clear(); - LL_DEBUGS(LOG_TXT) << "HTTP GET: " << mID << " Offset: " << mRequestedOffset - << " Bytes: " << mRequestedSize - << " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << mFetcher->mMaxBandwidth - << LL_ENDL; - // Will call callbackHttpGet when curl request completes - // Only server bake images use the returned headers currently, for getting retry-after field. - LLCore::HttpOptions *options = (mFTType == FTT_SERVER_BAKE) ? mFetcher->mHttpOptionsWithHeaders: mFetcher->mHttpOptions; + if (mUrl.empty()) + { + // *FIXME: This should not be reachable except it has become + // so after some recent 'work'. Need to track this down + // and illuminate the unenlightened. + LL_WARNS(LOG_TXT) << "HTTP GET request failed for " << mID + << " on empty URL." << LL_ENDL; + resetFormattedData(); + releaseHttpSemaphore(); + return true; // failed + } + + mRequestedTimer.reset(); + mLoaded = FALSE; + mGetStatus = LLCore::HttpStatus(); + mGetReason.clear(); + LL_DEBUGS(LOG_TXT) << "HTTP GET: " << mID << " Offset: " << mRequestedOffset + << " Bytes: " << mRequestedSize + << " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << mFetcher->mMaxBandwidth + << LL_ENDL; + + // Will call callbackHttpGet when curl request completes + // Only server bake images use the returned headers currently, for getting retry-after field. + LLCore::HttpOptions *options = (mFTType == FTT_SERVER_BAKE) ? mFetcher->mHttpOptionsWithHeaders: mFetcher->mHttpOptions; + if (disable_range_req) + { + // 'Range:' requests may be disabled in which case all HTTP + // texture fetches result in full fetches. This can be used + // by people with questionable ISPs or networking gear that + // doesn't handle these well. + mHttpHandle = mFetcher->mHttpRequest->requestGet(mHttpPolicyClass, + mWorkPriority, + mUrl, + options, + mFetcher->mHttpHeaders, + this); + } + else + { mHttpHandle = mFetcher->mHttpRequest->requestGetByteRange(mHttpPolicyClass, mWorkPriority, mUrl, @@ -1554,7 +1588,11 @@ bool LLTextureFetchWorker::doWork(S32 param) } if (LLCORE_HTTP_HANDLE_INVALID == mHttpHandle) { - LL_WARNS(LOG_TXT) << "HTTP GET request failed for " << mID << LL_ENDL; + LLCore::HttpStatus status(mFetcher->mHttpRequest->getStatus()); + LL_WARNS(LOG_TXT) << "HTTP GET request failed for " << mID + << ", Status: " << status.toTerseString() + << " Reason: '" << status.toString() << "'" + << LL_ENDL; resetFormattedData(); releaseHttpSemaphore(); return true; // failed @@ -1610,10 +1648,6 @@ bool LLTextureFetchWorker::doWork(S32 param) else if (http_service_unavail == mGetStatus) { LL_INFOS_ONCE(LOG_TXT) << "Texture server busy (503): " << mUrl << LL_ENDL; - LL_INFOS(LOG_TXT) << "503: HTTP GET failed for: " << mUrl - << " Status: " << mGetStatus.toHex() - << " Reason: '" << mGetReason << "'" - << LL_ENDL; } else if (http_not_sat == mGetStatus) { @@ -1771,7 +1805,7 @@ bool LLTextureFetchWorker::doWork(S32 param) if (mState == DECODE_IMAGE) { - static LLCachedControl<bool> textures_decode_disabled(gSavedSettings,"TextureDecodeDisabled", false); + static LLCachedControl<bool> textures_decode_disabled(gSavedSettings, "TextureDecodeDisabled", false); setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it if (textures_decode_disabled) @@ -2480,9 +2514,9 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image mHttpOptions(NULL), mHttpOptionsWithHeaders(NULL), mHttpHeaders(NULL), - mHttpMetricsHeaders(NULL), mHttpPolicyClass(LLCore::HttpRequest::DEFAULT_POLICY_ID), - mHttpSemaphore(HTTP_REQUESTS_IN_QUEUE_HIGH_WATER), + mHttpMetricsHeaders(NULL), + mHttpMetricsPolicyClass(LLCore::HttpRequest::DEFAULT_POLICY_ID), mTotalCacheReadCount(0U), mTotalCacheWriteCount(0U), mTotalResourceWaitCount(0U), @@ -2494,6 +2528,23 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS"); mTextureInfo.setUpLogging(gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog"), gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"), U32Bytes(gSavedSettings.getU32("TextureLoggingThreshold"))); + LLAppCoreHttp & app_core_http(LLAppViewer::instance()->getAppCoreHttp()); + mHttpRequest = new LLCore::HttpRequest; + mHttpOptions = new LLCore::HttpOptions; + mHttpOptionsWithHeaders = new LLCore::HttpOptions; + mHttpOptionsWithHeaders->setWantHeaders(true); + mHttpHeaders = new LLCore::HttpHeaders; + mHttpHeaders->append(HTTP_OUT_HEADER_ACCEPT, HTTP_CONTENT_IMAGE_X_J2C); + mHttpPolicyClass = app_core_http.getPolicy(LLAppCoreHttp::AP_TEXTURE); + mHttpMetricsHeaders = new LLCore::HttpHeaders; + mHttpMetricsHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_LLSD_XML); + mHttpMetricsPolicyClass = app_core_http.getPolicy(LLAppCoreHttp::AP_REPORTING); + mHttpHighWater = HTTP_NONPIPE_REQUESTS_HIGH_WATER; + mHttpLowWater = HTTP_NONPIPE_REQUESTS_LOW_WATER; + mHttpSemaphore = 0; + + // Conditionally construct debugger object after 'this' is + // fully initialized. LLTextureFetchDebugger::sDebuggerEnabled = gSavedSettings.getBOOL("TextureFetchDebuggerEnabled"); if(LLTextureFetchDebugger::isEnabled()) { @@ -2506,16 +2557,6 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image } mOriginFetchSource = mFetchSource; } - - mHttpRequest = new LLCore::HttpRequest; - mHttpOptions = new LLCore::HttpOptions; - mHttpOptionsWithHeaders = new LLCore::HttpOptions; - mHttpOptionsWithHeaders->setWantHeaders(true); - mHttpHeaders = new LLCore::HttpHeaders; - mHttpHeaders->append("Accept", "image/x-j2c"); - mHttpMetricsHeaders = new LLCore::HttpHeaders; - mHttpMetricsHeaders->append("Content-Type", "application/llsd+xml"); - mHttpPolicyClass = LLAppViewer::instance()->getAppCoreHttp().getPolicy(LLAppCoreHttp::AP_TEXTURE); } LLTextureFetch::~LLTextureFetch() @@ -2987,6 +3028,20 @@ bool LLTextureFetch::runCondition() // Threads: Ttf void LLTextureFetch::commonUpdate() { + // Update low/high water levels based on pipelining. We pick + // up setting eventually, so the semaphore/request level can + // fall outside the [0..HIGH_WATER] range. Expect that. + if (LLAppViewer::instance()->getAppCoreHttp().isPipelined(LLAppCoreHttp::AP_TEXTURE)) + { + mHttpHighWater = HTTP_PIPE_REQUESTS_HIGH_WATER; + mHttpLowWater = HTTP_PIPE_REQUESTS_LOW_WATER; + } + else + { + mHttpHighWater = HTTP_NONPIPE_REQUESTS_HIGH_WATER; + mHttpLowWater = HTTP_NONPIPE_REQUESTS_LOW_WATER; + } + // Release waiters releaseHttpWaiters(); @@ -3648,8 +3703,16 @@ void LLTextureFetch::releaseHttpWaiters() { // Use mHttpSemaphore rather than mHTTPTextureQueue.size() // to avoid a lock. - if (mHttpSemaphore < (HTTP_REQUESTS_IN_QUEUE_HIGH_WATER - HTTP_REQUESTS_IN_QUEUE_LOW_WATER)) + if (mHttpSemaphore >= mHttpLowWater) return; + S32 needed(mHttpHighWater - mHttpSemaphore); + if (needed <= 0) + { + // Would only happen if High/LowWater were changed behind + // our back. In that case, defer fill until usage falls within + // limits. + return; + } // Quickly make a copy of all the LLUIDs. Get off the // mutex as early as possible. @@ -3698,10 +3761,10 @@ void LLTextureFetch::releaseHttpWaiters() tids.clear(); // Sort into priority order, if necessary and only as much as needed - if (tids2.size() > mHttpSemaphore) + if (tids2.size() > needed) { LLTextureFetchWorker::Compare compare; - std::partial_sort(tids2.begin(), tids2.begin() + mHttpSemaphore, tids2.end(), compare); + std::partial_sort(tids2.begin(), tids2.begin() + needed, tids2.end(), compare); } // Release workers up to the high water mark. Since we aren't @@ -3965,7 +4028,9 @@ TFReqSendMetrics::doWork(LLTextureFetch * fetcher) // Update sequence number if (S32_MAX == ++report_sequence) + { report_sequence = 0; + } reporting_started = true; // Limit the size of the stats report if necessary. @@ -3974,18 +4039,15 @@ TFReqSendMetrics::doWork(LLTextureFetch * fetcher) if (! mCapsURL.empty()) { - LLCore::BufferArray * ba = new LLCore::BufferArray; - LLCore::BufferArrayStream bas(ba); - LLSDSerialize::toXML(sd, bas); - - fetcher->getHttpRequest().requestPost(fetcher->getPolicyClass(), - report_priority, - mCapsURL, - ba, - NULL, - fetcher->getMetricsHeaders(), - handler); - ba->release(); + // Don't care about handle, this is a fire-and-forget operation. + LLCoreHttpUtil::requestPostWithLLSD(&fetcher->getHttpRequest(), + fetcher->getMetricsPolicyClass(), + report_priority, + mCapsURL, + sd, + NULL, + fetcher->getMetricsHeaders(), + handler); LLTextureFetch::svMetricsDataBreak = false; } else @@ -3996,7 +4058,7 @@ TFReqSendMetrics::doWork(LLTextureFetch * fetcher) // In QA mode, Metrics submode, log the result for ease of testing if (fetcher->isQAMode()) { - LL_INFOS("Textures") << ll_pretty_print_sd(sd) << LL_ENDL; + LL_INFOS(LOG_TXT) << ll_pretty_print_sd(sd) << LL_ENDL; } return true; @@ -4166,7 +4228,7 @@ void LLTextureFetchDebugger::init() if (! mHttpHeaders) { mHttpHeaders = new LLCore::HttpHeaders; - mHttpHeaders->append("Accept", "image/x-j2c"); + mHttpHeaders->append(HTTP_OUT_HEADER_ACCEPT, HTTP_CONTENT_IMAGE_X_J2C); } } @@ -4541,7 +4603,7 @@ S32 LLTextureFetchDebugger::fillCurlQueue() mNbCurlCompleted = mFetchingHistory.size(); return 0; } - if (mNbCurlRequests > HTTP_REQUESTS_IN_QUEUE_LOW_WATER) + if (mNbCurlRequests > HTTP_NONPIPE_REQUESTS_LOW_WATER) { return mNbCurlRequests; } @@ -4574,7 +4636,7 @@ S32 LLTextureFetchDebugger::fillCurlQueue() mFetchingHistory[i].mHttpHandle = handle; mFetchingHistory[i].mCurlState = FetchEntry::CURL_IN_PROGRESS; mNbCurlRequests++; - if (mNbCurlRequests >= HTTP_REQUESTS_IN_QUEUE_HIGH_WATER) // emulate normal pipeline + if (mNbCurlRequests >= HTTP_NONPIPE_REQUESTS_HIGH_WATER) // emulate normal pipeline { break; } diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h index c4da2e8685..27779a31e0 100755 --- a/indra/newview/lltexturefetch.h +++ b/indra/newview/lltexturefetch.h @@ -179,6 +179,9 @@ public: // Threads: T* LLCore::HttpHeaders * getMetricsHeaders() const { return mHttpMetricsHeaders; } + // Threads: T* + LLCore::HttpRequest::policy_t getMetricsPolicyClass() const { return mHttpMetricsPolicyClass; } + bool isQAMode() const { return mQAMode; } // ---------------------------------- @@ -354,9 +357,12 @@ private: LLCore::HttpOptions * mHttpOptions; // Ttf LLCore::HttpOptions * mHttpOptionsWithHeaders; // Ttf LLCore::HttpHeaders * mHttpHeaders; // Ttf - LLCore::HttpHeaders * mHttpMetricsHeaders; // Ttf LLCore::HttpRequest::policy_t mHttpPolicyClass; // T* - + LLCore::HttpHeaders * mHttpMetricsHeaders; // Ttf + LLCore::HttpRequest::policy_t mHttpMetricsPolicyClass; // T* + S32 mHttpHighWater; // Ttf + S32 mHttpLowWater; // Ttf + // We use a resource semaphore to keep HTTP requests in // WAIT_HTTP_RESOURCE2 if there aren't sufficient slots in the // transport. This keeps them near where they can be cheaply @@ -364,7 +370,11 @@ private: // where it's more expensive to get at them. Requests in either // SEND_HTTP_REQ or WAIT_HTTP_REQ charge against the semaphore // and tracking state transitions is critical to liveness. - LLAtomicS32 mHttpSemaphore; // Ttf + Tmain + // + // Originally implemented as a traditional semaphore (heading towards + // zero), it now is an outstanding request count that is allowed to + // exceed the high water level (but not go below zero). + LLAtomicS32 mHttpSemaphore; // Ttf typedef std::set<LLUUID> wait_http_res_queue_t; wait_http_res_queue_t mHttpWaitResource; // Mfnq diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index 4f0413a2e4..b7786bcdd7 100755 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -501,7 +501,7 @@ private: void LLGLTexMemBar::draw() { S32Megabytes bound_mem = LLViewerTexture::sBoundTextureMemory; - S32Megabytes max_bound_mem = LLViewerTexture::sMaxBoundTextureMem; + S32Megabytes max_bound_mem = LLViewerTexture::sMaxBoundTextureMemory; S32Megabytes total_mem = LLViewerTexture::sTotalTextureMemory; S32Megabytes max_total_mem = LLViewerTexture::sMaxTotalTextureMem; F32 discard_bias = LLViewerTexture::sDesiredDiscardBias; diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index 1b5b44423f..63ede7f8ac 100755 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -234,6 +234,8 @@ void LLToast::closeToast() { mOnDeleteToastSignal(this); + setSoundFlags(SILENT); + closeFloater(); } diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp index 8fd0eb5931..c82894a5cc 100755 --- a/indra/newview/lltoastalertpanel.cpp +++ b/indra/newview/lltoastalertpanel.cpp @@ -266,6 +266,11 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal mLineEditor->setMaxTextChars(edit_text_max_chars); mLineEditor->setText(edit_text_contents); + if("SaveOutfitAs" == mNotification->getName()) + { + mLineEditor->setPrevalidate(&LLTextValidate::validateASCII); + } + // decrease limit of line editor of teleport offer dialog to avoid truncation of // location URL in invitation message, see EXT-6891 if ("OfferTeleport" == mNotification->getName()) diff --git a/indra/newview/lltoolbrush.cpp b/indra/newview/lltoolbrush.cpp index 56f0f8be25..e3eb8ba7af 100755 --- a/indra/newview/lltoolbrush.cpp +++ b/indra/newview/lltoolbrush.cpp @@ -52,7 +52,7 @@ #include "llworld.h" #include "llappviewer.h" #include "llparcel.h" - +#include "roles_constants.h" #include "llglheaders.h" const std::string REGION_BLOCKS_TERRAFORM_MSG = "This region does not allow terraforming.\n" @@ -239,9 +239,9 @@ void LLToolBrushLand::modifyLandInSelectionGlobal() iter != mLastAffectedRegions.end(); ++iter) { LLViewerRegion* regionp = *iter; - if (!canTerraform(regionp)) + if (!canTerraformRegion(regionp)) { - alertNoTerraform(regionp); + alertNoTerraformRegion(regionp); return; } } @@ -376,12 +376,17 @@ BOOL LLToolBrushLand::handleMouseDown(S32 x, S32 y, MASK mask) LLRegionPosition region_position( spot ); LLViewerRegion* regionp = region_position.getRegion(); - if (!canTerraform(regionp)) + if (!canTerraformRegion(regionp)) { - alertNoTerraform(regionp); + alertNoTerraformRegion(regionp); return TRUE; } + if (!canTerraformParcel(regionp)) + { + alertNoTerraformParcel(); + } + LLVector3 pos_region = region_position.getPositionRegion(); U32 grids = regionp->getLand().mGridsPerEdge; S32 i = llclamp( (S32)pos_region.mV[VX], 0, (S32)grids ); @@ -408,6 +413,16 @@ BOOL LLToolBrushLand::handleHover( S32 x, S32 y, MASK mask ) mMouseY = y; mGotHover = TRUE; gViewerWindow->setCursor(UI_CURSOR_TOOLLAND); + + LLVector3d spot; + if( gViewerWindow->mousePointOnLandGlobal( mMouseX, mMouseY, &spot ) ) + { + + spot.mdV[VX] = floor( spot.mdV[VX] + 0.5 ); + spot.mdV[VY] = floor( spot.mdV[VY] + 0.5 ); + + LLViewerParcelMgr::getInstance()->setHoverParcel(spot); + } return TRUE; } @@ -653,7 +668,7 @@ void LLToolBrushLand::redo() }*/ // static -bool LLToolBrushLand::canTerraform(LLViewerRegion* regionp) const +bool LLToolBrushLand::canTerraformRegion(LLViewerRegion* regionp) const { if (!regionp) return false; if (regionp->canManageEstate()) return true; @@ -661,7 +676,22 @@ bool LLToolBrushLand::canTerraform(LLViewerRegion* regionp) const } // static -void LLToolBrushLand::alertNoTerraform(LLViewerRegion* regionp) +bool LLToolBrushLand::canTerraformParcel(LLViewerRegion* regionp) const +{ + LLParcel* selected_parcel = LLViewerParcelMgr::getInstance()->getHoverParcel(); + bool is_terraform_allowed = false; + if (selected_parcel) + { + BOOL owner_release = LLViewerParcelMgr::isParcelOwnedByAgent(selected_parcel, GP_LAND_ALLOW_EDIT_LAND); + is_terraform_allowed = ( gAgent.canManageEstate() || (selected_parcel->getOwnerID() == regionp->getOwner()) || owner_release); + } + + return is_terraform_allowed; +} + + +// static +void LLToolBrushLand::alertNoTerraformRegion(LLViewerRegion* regionp) { if (!regionp) return; @@ -671,6 +701,19 @@ void LLToolBrushLand::alertNoTerraform(LLViewerRegion* regionp) } +// static +void LLToolBrushLand::alertNoTerraformParcel() +{ + LLParcel* selected_parcel = LLViewerParcelMgr::getInstance()->getHoverParcel(); + if (selected_parcel) + { + LLSD args; + args["PARCEL"] = selected_parcel->getName(); + LLNotificationsUtil::add("ParcelNoTerraforming", args); + } + +} + ///============================================================================ /// Local function definitions ///============================================================================ diff --git a/indra/newview/lltoolbrush.h b/indra/newview/lltoolbrush.h index 1c7f198900..2ec6911de9 100755 --- a/indra/newview/lltoolbrush.h +++ b/indra/newview/lltoolbrush.h @@ -81,10 +81,14 @@ protected: const LLVector3& pos_world); // Does region allow terraform, or are we a god? - bool canTerraform(LLViewerRegion* regionp) const; + bool canTerraformRegion(LLViewerRegion* regionp) const; + + bool canTerraformParcel(LLViewerRegion* regionp) const; // Modal dialog that you can't terraform the region - void alertNoTerraform(LLViewerRegion* regionp); + void alertNoTerraformRegion(LLViewerRegion* regionp); + + void alertNoTerraformParcel(); protected: F32 mStartingZ; diff --git a/indra/newview/lltoolcomp.cpp b/indra/newview/lltoolcomp.cpp index b75d6b3dcb..4bda9072d0 100755 --- a/indra/newview/lltoolcomp.cpp +++ b/indra/newview/lltoolcomp.cpp @@ -126,12 +126,20 @@ void LLToolComposite::handleSelect() mSelected = TRUE; } +void LLToolComposite::handleDeselect() +{ + mCur->handleDeselect(); + mCur = mDefault; + mSelected = FALSE; +} + //---------------------------------------------------------------------------- // LLToolCompInspect //---------------------------------------------------------------------------- LLToolCompInspect::LLToolCompInspect() -: LLToolComposite(std::string("Inspect")) +: LLToolComposite(std::string("Inspect")), + mIsToolCameraActive(FALSE) { mSelectRect = new LLToolSelectRect(this); mDefault = mSelectRect; @@ -146,42 +154,87 @@ LLToolCompInspect::~LLToolCompInspect() BOOL LLToolCompInspect::handleMouseDown(S32 x, S32 y, MASK mask) { - mMouseDown = TRUE; - gViewerWindow->pickAsync(x, y, mask, pickCallback); - return TRUE; + BOOL handled = FALSE; + + if (mCur == LLToolCamera::getInstance()) + { + handled = mCur->handleMouseDown(x, y, mask); + } + else + { + mMouseDown = TRUE; + gViewerWindow->pickAsync(x, y, mask, pickCallback); + handled = TRUE; + } + + return handled; +} + +BOOL LLToolCompInspect::handleMouseUp(S32 x, S32 y, MASK mask) +{ + BOOL handled = LLToolComposite::handleMouseUp(x, y, mask); + mIsToolCameraActive = getCurrentTool() == LLToolCamera::getInstance(); + return handled; } void LLToolCompInspect::pickCallback(const LLPickInfo& pick_info) { LLViewerObject* hit_obj = pick_info.getObject(); + LLToolCompInspect * tool_inspectp = LLToolCompInspect::getInstance(); - if (!LLToolCompInspect::getInstance()->mMouseDown) + if (!tool_inspectp->mMouseDown) { // fast click on object, but mouse is already up...just do select - LLToolCompInspect::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), FALSE); + tool_inspectp->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), FALSE); return; } - if( hit_obj ) - { - if (LLSelectMgr::getInstance()->getSelection()->getObjectCount()) - { - LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance(); - } - LLToolCompInspect::getInstance()->setCurrentTool( LLToolCompInspect::getInstance()->mSelectRect ); - LLToolCompInspect::getInstance()->mSelectRect->handlePick( pick_info ); + LLSelectMgr * mgr_selectp = LLSelectMgr::getInstance(); + if( hit_obj && mgr_selectp->getSelection()->getObjectCount()) { + LLEditMenuHandler::gEditMenuHandler = mgr_selectp; + } + + tool_inspectp->setCurrentTool( tool_inspectp->mSelectRect ); + tool_inspectp->mIsToolCameraActive = FALSE; + tool_inspectp->mSelectRect->handlePick( pick_info ); +} + +BOOL LLToolCompInspect::handleDoubleClick(S32 x, S32 y, MASK mask) +{ + return TRUE; +} + +BOOL LLToolCompInspect::handleKey(KEY key, MASK mask) +{ + BOOL handled = FALSE; + if(KEY_ALT == key) + { + setCurrentTool(LLToolCamera::getInstance()); + mIsToolCameraActive = TRUE; + handled = TRUE; } else { - LLToolCompInspect::getInstance()->setCurrentTool( LLToolCompInspect::getInstance()->mSelectRect ); - LLToolCompInspect::getInstance()->mSelectRect->handlePick( pick_info ); + handled = LLToolComposite::handleKey(key, mask); } + + return handled; } -BOOL LLToolCompInspect::handleDoubleClick(S32 x, S32 y, MASK mask) +void LLToolCompInspect::onMouseCaptureLost() { - return TRUE; + LLToolComposite::onMouseCaptureLost(); + mIsToolCameraActive = FALSE; +} + +void LLToolCompInspect::keyUp(KEY key, MASK mask) +{ + if (KEY_ALT == key && mCur == LLToolCamera::getInstance()) + { + setCurrentTool(mDefault); + mIsToolCameraActive = FALSE; + } } //---------------------------------------------------------------------------- diff --git a/indra/newview/lltoolcomp.h b/indra/newview/lltoolcomp.h index bbb5ed5797..e75d3c22e2 100755 --- a/indra/newview/lltoolcomp.h +++ b/indra/newview/lltoolcomp.h @@ -62,7 +62,7 @@ public: virtual BOOL clipMouseWhenDown() { return mCur->clipMouseWhenDown(); } virtual void handleSelect(); - virtual void handleDeselect() { mCur->handleDeselect(); mCur = mDefault; mSelected = FALSE; } + virtual void handleDeselect(); virtual void render() { mCur->render(); } virtual void draw() { mCur->draw(); } @@ -78,9 +78,10 @@ public: { mCur->localPointToScreen(local_x, local_y, screen_x, screen_y); } BOOL isSelecting(); + LLTool* getCurrentTool() { return mCur; } + protected: void setCurrentTool( LLTool* new_tool ); - LLTool* getCurrentTool() { return mCur; } // In hover handler, call this to auto-switch tools void setToolFromMask( MASK mask, LLTool *normal ); @@ -108,9 +109,18 @@ public: // Overridden from LLToolComposite virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); + virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); + virtual BOOL handleKey(KEY key, MASK mask); + virtual void onMouseCaptureLost(); + void keyUp(KEY key, MASK mask); static void pickCallback(const LLPickInfo& pick_info); + + BOOL isToolCameraActive() const { return mIsToolCameraActive; } + +private: + BOOL mIsToolCameraActive; }; //----------------------------------------------------------------------- diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index eabf6f0497..575e5c5c52 100755 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -513,6 +513,7 @@ void LLToolDragAndDrop::onMouseCaptureLost() mSource = SOURCE_AGENT; mSourceID.setNull(); mObjectID.setNull(); + mCustomMsg.clear(); } BOOL LLToolDragAndDrop::handleMouseUp( S32 x, S32 y, MASK mask ) @@ -556,6 +557,12 @@ ECursorType LLToolDragAndDrop::acceptanceToCursor( EAcceptance acceptance ) mCursor = UI_CURSOR_NOLOCKED; break; + case ACCEPT_NO_CUSTOM: + mToolTipMsg = mCustomMsg; + mCursor = UI_CURSOR_NO; + break; + + case ACCEPT_NO: mCursor = UI_CURSOR_NO; break; @@ -630,6 +637,7 @@ BOOL LLToolDragAndDrop::handleToolTip(S32 x, S32 y, MASK mask) void LLToolDragAndDrop::handleDeselect() { mToolTipMsg.clear(); + mCustomMsg.clear(); LLToolTipMgr::instance().blockToolTips(); } @@ -2164,6 +2172,26 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory( // TODO: investigate wearables may not be loaded at this point EXT-8231 } + U32 max_items = gSavedSettings.getU32("WearFolderLimit"); + if (category->getDescendentCount()>max_items) + { + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false); + gInventory.collectDescendentsIf(category->getUUID(), + cats, + items, + LLInventoryModel::EXCLUDE_TRASH, + not_worn); + if (items.size() > max_items) + { + LLStringUtil::format_map_t args; + args["AMOUNT"] = llformat("%d", max_items); + mCustomMsg = LLTrans::getString("TooltipTooManyWearables",args); + return ACCEPT_NO_CUSTOM; + } + } + if(mSource == SOURCE_AGENT) { const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h index 99b794ce58..de501ea32a 100755 --- a/indra/newview/lltooldraganddrop.h +++ b/indra/newview/lltooldraganddrop.h @@ -149,6 +149,7 @@ protected: BOOL mDrop; S32 mCurItemIndex; std::string mToolTipMsg; + std::string mCustomMsg; enddrag_signal_t mEndDragSignal; diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp index ee4ec112f8..58073d1186 100755 --- a/indra/newview/lltoolfocus.cpp +++ b/indra/newview/lltoolfocus.cpp @@ -53,6 +53,7 @@ #include "llmorphview.h" #include "llfloaterreg.h" #include "llfloatercamera.h" +#include "llmenugl.h" // Globals BOOL gCameraBtnZoom = TRUE; @@ -75,6 +76,7 @@ LLToolCamera::LLToolCamera() mOutsideSlopX(FALSE), mOutsideSlopY(FALSE), mValidClickPoint(FALSE), + mValidSelection(FALSE), mMouseSteering(FALSE), mMouseUpX(0), mMouseUpY(0), @@ -91,6 +93,8 @@ void LLToolCamera::handleSelect() if (gFloaterTools) { gFloaterTools->setStatusText("camera"); + // in case we start from tools floater, we count any selection as valid + mValidSelection = gFloaterTools->getVisible(); } } @@ -98,6 +102,14 @@ void LLToolCamera::handleSelect() void LLToolCamera::handleDeselect() { // gAgent.setLookingAtAvatar(FALSE); + + // Make sure that temporary selection won't pass anywhere except pie tool. + MASK override_mask = gKeyboard ? gKeyboard->currentMask(TRUE) : 0; + if (!mValidSelection && (override_mask != MASK_NONE || (gFloaterTools && gFloaterTools->getVisible()))) + { + LLMenuGL::sMenuContainer->hideMenus(); + LLSelectMgr::getInstance()->validateSelection(); + } } BOOL LLToolCamera::handleMouseDown(S32 x, S32 y, MASK mask) diff --git a/indra/newview/lltoolfocus.h b/indra/newview/lltoolfocus.h index b1ac42e33f..d23eb2cce6 100755 --- a/indra/newview/lltoolfocus.h +++ b/indra/newview/lltoolfocus.h @@ -65,6 +65,7 @@ protected: BOOL mOutsideSlopX; BOOL mOutsideSlopY; BOOL mValidClickPoint; + BOOL mValidSelection; BOOL mMouseSteering; S32 mMouseUpX; // needed for releaseMouse() S32 mMouseUpY; diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp index 493c970141..fa6694b93b 100755 --- a/indra/newview/lltoolgrab.cpp +++ b/indra/newview/lltoolgrab.cpp @@ -56,6 +56,7 @@ #include "llviewerregion.h" #include "llvoavatarself.h" #include "llworld.h" +#include "llmenugl.h" const S32 SLOP_DIST_SQ = 4; @@ -83,6 +84,7 @@ LLToolGrab::LLToolGrab( LLToolComposite* composite ) mLastFace(0), mSpinGrabbing( FALSE ), mSpinRotation(), + mClickedInMouselook( FALSE ), mHideBuildHighlight(FALSE) { } @@ -97,6 +99,8 @@ void LLToolGrab::handleSelect() { // viewer can crash during startup if we don't check. gFloaterTools->setStatusText("grab"); + // in case we start from tools floater, we count any selection as valid + mValidSelection = gFloaterTools->getVisible(); } gGrabBtnVertical = FALSE; gGrabBtnSpin = FALSE; @@ -109,6 +113,14 @@ void LLToolGrab::handleDeselect() setMouseCapture( FALSE ); } + // Make sure that temporary(invalid) selection won't pass anywhere except pie tool. + MASK override_mask = gKeyboard ? gKeyboard->currentMask(TRUE) : 0; + if (!mValidSelection && (override_mask != MASK_NONE || (gFloaterTools && gFloaterTools->getVisible()))) + { + LLMenuGL::sMenuContainer->hideMenus(); + LLSelectMgr::getInstance()->validateSelection(); + } + } BOOL LLToolGrab::handleDoubleClick(S32 x, S32 y, MASK mask) @@ -136,6 +148,7 @@ BOOL LLToolGrab::handleMouseDown(S32 x, S32 y, MASK mask) // can grab transparent objects (how touch event propagates, scripters rely on this) gViewerWindow->pickAsync(x, y, mask, pickCallback, TRUE); } + mClickedInMouselook = gAgentCamera.cameraMouselook(); return TRUE; } @@ -926,13 +939,21 @@ BOOL LLToolGrab::handleMouseUp(S32 x, S32 y, MASK mask) { setMouseCapture( FALSE ); } + mMode = GRAB_INACTIVE; - // HACK: Make some grabs temporary - if (gGrabTransientTool) + if(mClickedInMouselook && !gAgentCamera.cameraMouselook()) { - gBasicToolset->selectTool( gGrabTransientTool ); - gGrabTransientTool = NULL; + mClickedInMouselook = FALSE; + } + else + { + // HACK: Make some grabs temporary + if (gGrabTransientTool) + { + gBasicToolset->selectTool( gGrabTransientTool ); + gGrabTransientTool = NULL; + } } //gAgent.setObjectTracking(gSavedSettings.getBOOL("TrackFocusObject")); diff --git a/indra/newview/lltoolgrab.h b/indra/newview/lltoolgrab.h index 06a3b662c8..4e22732124 100755 --- a/indra/newview/lltoolgrab.h +++ b/indra/newview/lltoolgrab.h @@ -119,6 +119,7 @@ private: BOOL mHasMoved; // has mouse moved off center at all? BOOL mOutsideSlop; // has mouse moved outside center 5 pixels? BOOL mDeselectedThisClick; + BOOL mValidSelection; S32 mLastFace; LLVector2 mLastUVCoords; @@ -133,6 +134,8 @@ private: LLQuaternion mSpinRotation; BOOL mHideBuildHighlight; + + BOOL mClickedInMouselook; }; extern BOOL gGrabBtnVertical; diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp index aa55caf7ec..175227173f 100755 --- a/indra/newview/lltoolmgr.cpp +++ b/indra/newview/lltoolmgr.cpp @@ -34,6 +34,7 @@ //#include "llfirstuse.h" // tools and manipulators +#include "llfloaterinspect.h" #include "lltool.h" #include "llmanipscale.h" #include "llselectmgr.h" @@ -218,7 +219,20 @@ LLTool* LLToolMgr::getCurrentTool() } if (cur_tool) { - cur_tool->handleSelect(); + if ( LLToolCompInspect::getInstance()->isToolCameraActive() + && prev_tool == LLToolCamera::getInstance() + && cur_tool == LLToolPie::getInstance() ) + { + LLFloaterInspect * inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect"); + if(inspect_instance && inspect_instance->getVisible()) + { + setTransientTool(LLToolCompInspect::getInstance()); + } + } + else + { + cur_tool->handleSelect(); + } } } diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 6881ec4563..e4353aafaa 100755 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -439,8 +439,12 @@ ECursorType LLToolPie::cursorFromObject(LLViewerObject* object) break; case CLICK_ACTION_BUY: if ( mClickActionBuyEnabled ) - { - cursor = UI_CURSOR_TOOLBUY; + { + LLSelectNode* node = LLSelectMgr::getInstance()->getHoverNode(); + if (!node || node->mSaleInfo.isForSale()) + { + cursor = UI_CURSOR_TOOLBUY; + } } break; case CLICK_ACTION_OPEN: @@ -544,6 +548,7 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) mHoverPick = gViewerWindow->pickImmediate(x, y, FALSE); LLViewerObject *parent = NULL; LLViewerObject *object = mHoverPick.getObject(); + LLSelectMgr::getInstance()->setHoverObject(object, mHoverPick.mObjectFace); if (object) { parent = object->getRootEdit(); @@ -1306,7 +1311,16 @@ void LLToolPie::handleDeselect() } // remove temporary selection for pie menu LLSelectMgr::getInstance()->setHoverObject(NULL); - LLSelectMgr::getInstance()->validateSelection(); + + // Menu may be still up during transfer to different tool. + // toolfocus and toolgrab should retain menu, they will clear it if needed + MASK override_mask = gKeyboard ? gKeyboard->currentMask(TRUE) : 0; + if (gMenuHolder && (!gMenuHolder->getVisible() || (override_mask & (MASK_ALT | MASK_CONTROL)) == 0)) + { + // in most cases menu is useless without correct selection, so either keep both or discard both + gMenuHolder->hideMenus(); + LLSelectMgr::getInstance()->validateSelection(); + } } LLTool* LLToolPie::getOverrideTool(MASK mask) @@ -1686,6 +1700,12 @@ BOOL LLToolPie::handleRightClickPick() } } + // non UI object - put focus back "in world" + if (gFocusMgr.getKeyboardFocus()) + { + gFocusMgr.setKeyboardFocus(NULL); + } + LLTool::handleRightMouseDown(x, y, mask); // We handled the event. return TRUE; diff --git a/indra/newview/lltoolselect.cpp b/indra/newview/lltoolselect.cpp index 0a9153eecb..812abe9dbd 100755 --- a/indra/newview/lltoolselect.cpp +++ b/indra/newview/lltoolselect.cpp @@ -36,6 +36,7 @@ #include "llmanip.h" #include "llmenugl.h" #include "llselectmgr.h" +#include "llviewermediafocus.h" #include "lltoolmgr.h" #include "llfloaterscriptdebug.h" #include "llviewercamera.h" @@ -110,6 +111,21 @@ LLObjectSelectionHandle LLToolSelect::handleObjectSelection(const LLPickInfo& pi { BOOL already_selected = object->isSelected(); + if (already_selected && + object->getNumTEs() > 0 && + !LLSelectMgr::getInstance()->getSelection()->contains(object,SELECT_ALL_TES)) + { + const LLTextureEntry* tep = object->getTE(pick.mObjectFace); + if (tep && !tep->isSelected() && !LLViewerMediaFocus::getInstance()->getFocusedObjectID().isNull()) + { + // we were interacting with media and clicked on non selected face, drop media focus + LLViewerMediaFocus::getInstance()->clearFocus(); + // selection was removed and zoom preserved by clearFocus(), continue with regular selection + already_selected = false; + extend_select = true; + } + } + if ( extend_select ) { if ( already_selected ) diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp index 615064c782..78268944fc 100755 --- a/indra/newview/llurldispatcher.cpp +++ b/indra/newview/llurldispatcher.cpp @@ -278,13 +278,13 @@ public: tokens[2].asReal(), tokens[3].asReal()); } - - LLSD args; - args["LOCATION"] = tokens[0]; // Region names may be %20 escaped. std::string region_name = LLURI::unescape(tokens[0]); + LLSD args; + args["LOCATION"] = region_name; + LLSD payload; payload["region_name"] = region_name; payload["callback_url"] = LLSLURL(region_name, coords).getSLURLString(); diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 7c98e6ef74..fc18b20758 100755 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -77,6 +77,7 @@ #include "llfloaterinspect.h" #include "llfloaterinventory.h" #include "llfloaterjoystick.h" +#include "llfloaterlagmeter.h" #include "llfloaterland.h" #include "llfloaterlandholdings.h" #include "llfloatermap.h" @@ -239,6 +240,7 @@ void LLViewerFloaterReg::registerFloaters() LLNotificationsUI::registerFloater(); LLFloaterDisplayNameUtil::registerFloater(); + LLFloaterReg::add("lagmeter", "floater_lagmeter.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLagMeter>); LLFloaterReg::add("land_holdings", "floater_land_holdings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLandHoldings>); LLFloaterReg::add("mem_leaking", "floater_mem_leaking.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMemLeak>); diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 4e4c3471be..d364fce45a 100755 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2002&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -75,6 +75,10 @@ void no_op_inventory_func(const LLUUID&) {} void no_op_llsd_func(const LLSD&) {} void no_op() {} +static const char * const LOG_INV("Inventory"); +static const char * const LOG_LOCAL("InventoryLocalize"); +static const char * const LOG_NOTECARD("copy_inventory_from_notecard"); + ///---------------------------------------------------------------------------- /// Helper class to store special inventory item names and their localized values. ///---------------------------------------------------------------------------- @@ -189,7 +193,7 @@ public: */ bool localizeInventoryObjectName(std::string& object_name) { - LL_DEBUGS("InventoryLocalize") << "Searching for localization: " << object_name << LL_ENDL; + LL_DEBUGS(LOG_LOCAL) << "Searching for localization: " << object_name << LL_ENDL; std::map<std::string, std::string>::const_iterator dictionary_iter = mInventoryItemsDict.find(object_name); @@ -197,7 +201,7 @@ public: if(found) { object_name = dictionary_iter->second; - LL_DEBUGS("InventoryLocalize") << "Found, new name is: " << object_name << LL_ENDL; + LL_DEBUGS(LOG_LOCAL) << "Found, new name is: " << object_name << LL_ENDL; } return found; } @@ -307,8 +311,8 @@ LLViewerInventoryItem::LLViewerInventoryItem(const LLViewerInventoryItem* other) copyViewerItem(other); if (!mIsComplete) { - LL_WARNS() << "LLViewerInventoryItem copy constructor for incomplete item" - << mUUID << LL_ENDL; + LL_WARNS(LOG_INV) << "LLViewerInventoryItem copy constructor for incomplete item" + << mUUID << LL_ENDL; } } @@ -355,16 +359,16 @@ void LLViewerInventoryItem::updateServer(BOOL is_new) const { // *FIX: deal with this better. // If we're crashing here then the UI is incorrectly enabled. - LL_ERRS() << "LLViewerInventoryItem::updateServer() - for incomplete item" - << LL_ENDL; + LL_ERRS(LOG_INV) << "LLViewerInventoryItem::updateServer() - for incomplete item" + << LL_ENDL; return; } if(gAgent.getID() != mPermissions.getOwner()) { // *FIX: deal with this better. - LL_WARNS() << "LLViewerInventoryItem::updateServer() - for unowned item " - << ll_pretty_print_sd(this->asLLSD()) - << LL_ENDL; + LL_WARNS(LOG_INV) << "LLViewerInventoryItem::updateServer() - for unowned item " + << ll_pretty_print_sd(this->asLLSD()) + << LL_ENDL; return; } LLInventoryModel::LLCategoryUpdate up(mParentUUID, is_new ? 1 : 0); @@ -392,18 +396,18 @@ void LLViewerInventoryItem::fetchFromServer(void) const // we have to check region. It can be null after region was destroyed. See EXT-245 if (region) { - if(gAgent.getID() != mPermissions.getOwner()) - { + if (gAgent.getID() != mPermissions.getOwner()) + { url = region->getCapability("FetchLib2"); - } + } else - { + { url = region->getCapability("FetchInventory2"); - } + } } else { - LL_WARNS() << "Agent Region is absent" << LL_ENDL; + LL_WARNS(LOG_INV) << "Agent Region is absent" << LL_ENDL; } if (!url.empty()) @@ -413,7 +417,8 @@ void LLViewerInventoryItem::fetchFromServer(void) const body["items"][0]["owner_id"] = mPermissions.getOwner(); body["items"][0]["item_id"] = mUUID; - LLHTTPClient::post(url, body, new LLInventoryModel::fetchInventoryResponder(body)); + LLInventoryModel::FetchItemHttpHandler * handler(new LLInventoryModel::FetchItemHttpHandler(body)); + gInventory.requestPost(true, url, body, handler, "Inventory Item"); } else { @@ -649,7 +654,7 @@ bool LLViewerInventoryCategory::fetch() if((VERSION_UNKNOWN == getVersion()) && mDescendentsRequested.hasExpired()) //Expired check prevents multiple downloads. { - LL_DEBUGS("InventoryFetch") << "Fetching category children: " << mName << ", UUID: " << mUUID << LL_ENDL; + LL_DEBUGS(LOG_INV) << "Fetching category children: " << mName << ", UUID: " << mUUID << LL_ENDL; const F32 FETCH_TIMER_EXPIRY = 10.0f; mDescendentsRequested.reset(); mDescendentsRequested.setTimerExpirySec(FETCH_TIMER_EXPIRY); @@ -674,7 +679,7 @@ bool LLViewerInventoryCategory::fetch() } else { - LL_WARNS() << "agent region is null" << LL_ENDL; + LL_WARNS(LOG_INV) << "agent region is null" << LL_ENDL; } if (!url.empty()) //Capability found. Build up LLSD and use it. { @@ -682,7 +687,8 @@ bool LLViewerInventoryCategory::fetch() } else { //Deprecated, but if we don't have a capability, use the old system. - LL_INFOS() << "FetchInventoryDescendents2 capability not found. Using deprecated UDP message." << LL_ENDL; + LL_INFOS(LOG_INV) << "FetchInventoryDescendents2 capability not found. Using deprecated UDP message." << LL_ENDL; + LLMessageSystem* msg = gMessageSystem; msg->newMessage("FetchInventoryDescendents"); msg->nextBlock("AgentData"); @@ -777,8 +783,8 @@ bool LLViewerInventoryCategory::importFileLocal(LLFILE* fp) } else { - LL_WARNS() << "unknown keyword '" << keyword - << "' in inventory import category " << mUUID << LL_ENDL; + LL_WARNS(LOG_INV) << "unknown keyword '" << keyword + << "' in inventory import category " << mUUID << LL_ENDL; } } return true; @@ -906,7 +912,7 @@ LLInventoryCallbackManager::LLInventoryCallbackManager() : { if( sInstance != NULL ) { - LL_WARNS() << "LLInventoryCallbackManager::LLInventoryCallbackManager: unexpected multiple instances" << LL_ENDL; + LL_WARNS(LOG_INV) << "LLInventoryCallbackManager::LLInventoryCallbackManager: unexpected multiple instances" << LL_ENDL; return; } sInstance = this; @@ -916,7 +922,7 @@ LLInventoryCallbackManager::~LLInventoryCallbackManager() { if( sInstance != this ) { - LL_WARNS() << "LLInventoryCallbackManager::~LLInventoryCallbackManager: unexpected multiple instances" << LL_ENDL; + LL_WARNS(LOG_INV) << "LLInventoryCallbackManager::~LLInventoryCallbackManager: unexpected multiple instances" << LL_ENDL; return; } sInstance = NULL; @@ -1144,7 +1150,7 @@ void link_inventory_object(const LLUUID& category, { if (!baseobj) { - LL_WARNS() << "Attempt to link to non-existent object" << LL_ENDL; + LL_WARNS(LOG_INV) << "Attempt to link to non-existent object" << LL_ENDL; return; } @@ -1178,7 +1184,7 @@ void link_inventory_array(const LLUUID& category, const LLInventoryObject* baseobj = *it; if (!baseobj) { - LL_WARNS() << "attempt to link to unknown object" << LL_ENDL; + LL_WARNS(LOG_INV) << "attempt to link to unknown object" << LL_ENDL; continue; } @@ -1187,7 +1193,7 @@ void link_inventory_array(const LLUUID& category, // Fail if item can be found but is of a type that can't be linked. // Arguably should fail if the item can't be found too, but that could // be a larger behavioral change. - LL_WARNS() << "attempt to link an unlinkable object, type = " << baseobj->getActualType() << LL_ENDL; + LL_WARNS(LOG_INV) << "attempt to link an unlinkable object, type = " << baseobj->getActualType() << LL_ENDL; continue; } @@ -1223,7 +1229,7 @@ void link_inventory_array(const LLUUID& category, } else { - LL_WARNS() << "could not convert object into an item or category: " << baseobj->getUUID() << LL_ENDL; + LL_WARNS(LOG_INV) << "could not convert object into an item or category: " << baseobj->getUUID() << LL_ENDL; continue; } } @@ -1237,10 +1243,10 @@ void link_inventory_array(const LLUUID& category, links.append(link); #ifndef LL_RELEASE_FOR_DOWNLOAD - LL_DEBUGS("Inventory") << "Linking Object [ name:" << baseobj->getName() - << " UUID:" << baseobj->getUUID() - << " ] into Category [ name:" << cat_name - << " UUID:" << category << " ] " << LL_ENDL; + LL_DEBUGS(LOG_INV) << "Linking Object [ name:" << baseobj->getName() + << " UUID:" << baseobj->getUUID() + << " ] into Category [ name:" << cat_name + << " UUID:" << category << " ] " << LL_ENDL; #endif } @@ -1331,7 +1337,7 @@ void update_inventory_item( if (!ais_ran) { LLPointer<LLViewerInventoryItem> obj = gInventory.getItem(item_id); - LL_DEBUGS("Inventory") << "item_id: [" << item_id << "] name " << (update_item ? update_item->getName() : "(NOT FOUND)") << LL_ENDL; + LL_DEBUGS(LOG_INV) << "item_id: [" << item_id << "] name " << (update_item ? update_item->getName() : "(NOT FOUND)") << LL_ENDL; if(obj) { LLMessageSystem* msg = gMessageSystem; @@ -1373,7 +1379,7 @@ void update_inventory_item( if (!ais_ran) { LLPointer<LLViewerInventoryItem> obj = gInventory.getItem(item_id); - LL_DEBUGS("Inventory") << "item_id: [" << item_id << "] name " << (obj ? obj->getName() : "(NOT FOUND)") << LL_ENDL; + LL_DEBUGS(LOG_INV) << "item_id: [" << item_id << "] name " << (obj ? obj->getName() : "(NOT FOUND)") << LL_ENDL; if(obj) { LLPointer<LLViewerInventoryItem> new_item(new LLViewerInventoryItem); @@ -1408,7 +1414,7 @@ void update_inventory_category( LLPointer<LLInventoryCallback> cb) { LLPointer<LLViewerInventoryCategory> obj = gInventory.getCategory(cat_id); - LL_DEBUGS("Inventory") << "cat_id: [" << cat_id << "] name " << (obj ? obj->getName() : "(NOT FOUND)") << LL_ENDL; + LL_DEBUGS(LOG_INV) << "cat_id: [" << cat_id << "] name " << (obj ? obj->getName() : "(NOT FOUND)") << LL_ENDL; if(obj) { if (LLFolderType::lookupIsProtectedType(obj->getPreferredType())) @@ -1471,7 +1477,7 @@ void remove_inventory_item( } else { - LL_DEBUGS("Inventory") << "item_id: [" << item_id << "] name " << "(NOT FOUND)" << LL_ENDL; + LL_DEBUGS(LOG_INV) << "item_id: [" << item_id << "] name " << "(NOT FOUND)" << LL_ENDL; } } @@ -1482,7 +1488,7 @@ void remove_inventory_item( if(obj) { const LLUUID item_id(obj->getUUID()); - LL_DEBUGS("Inventory") << "item_id: [" << item_id << "] name " << obj->getName() << LL_ENDL; + LL_DEBUGS(LOG_INV) << "item_id: [" << item_id << "] name " << obj->getName() << LL_ENDL; if (AISCommand::isAPIAvailable()) { LLPointer<AISCommand> cmd_ptr = new RemoveItemCommand(item_id, cb); @@ -1511,7 +1517,7 @@ void remove_inventory_item( else { // *TODO: Clean up callback? - LL_WARNS() << "remove_inventory_item called for invalid or nonexistent item." << LL_ENDL; + LL_WARNS(LOG_INV) << "remove_inventory_item called for invalid or nonexistent item." << LL_ENDL; } } @@ -1529,7 +1535,7 @@ public: LLInventoryModel::EHasChildren children = gInventory.categoryHasChildren(mID); if(children != LLInventoryModel::CHILDREN_NO) { - LL_WARNS() << "remove descendents failed, cannot remove category " << LL_ENDL; + LL_WARNS(LOG_INV) << "remove descendents failed, cannot remove category " << LL_ENDL; } else { @@ -1545,7 +1551,7 @@ void remove_inventory_category( const LLUUID& cat_id, LLPointer<LLInventoryCallback> cb) { - LL_DEBUGS("Inventory") << "cat_id: [" << cat_id << "] " << LL_ENDL; + LL_DEBUGS(LOG_INV) << "cat_id: [" << cat_id << "] " << LL_ENDL; LLPointer<LLViewerInventoryCategory> obj = gInventory.getCategory(cat_id); if(obj) { @@ -1566,7 +1572,7 @@ void remove_inventory_category( LLInventoryModel::EHasChildren children = gInventory.categoryHasChildren(cat_id); if(children != LLInventoryModel::CHILDREN_NO) { - LL_DEBUGS("Inventory") << "Will purge descendents first before deleting category " << cat_id << LL_ENDL; + LL_DEBUGS(LOG_INV) << "Will purge descendents first before deleting category " << cat_id << LL_ENDL; LLPointer<LLInventoryCallback> wrap_cb = new LLRemoveCategoryOnDestroy(cat_id, cb); purge_descendents_of(cat_id, wrap_cb); return; @@ -1592,7 +1598,7 @@ void remove_inventory_category( } else { - LL_WARNS() << "remove_inventory_category called for invalid or nonexistent item " << cat_id << LL_ENDL; + LL_WARNS(LOG_INV) << "remove_inventory_category called for invalid or nonexistent item " << cat_id << LL_ENDL; } } @@ -1620,7 +1626,7 @@ void purge_descendents_of(const LLUUID& id, LLPointer<LLInventoryCallback> cb) LLInventoryModel::EHasChildren children = gInventory.categoryHasChildren(id); if(children == LLInventoryModel::CHILDREN_NO) { - LL_DEBUGS("Inventory") << "No descendents to purge for " << id << LL_ENDL; + LL_DEBUGS(LOG_INV) << "No descendents to purge for " << id << LL_ENDL; return; } LLPointer<LLViewerInventoryCategory> cat = gInventory.getCategory(id); @@ -1629,8 +1635,8 @@ void purge_descendents_of(const LLUUID& id, LLPointer<LLInventoryCallback> cb) if (LLClipboard::instance().hasContents() && LLClipboard::instance().isCutMode()) { // Something on the clipboard is in "cut mode" and needs to be preserved - LL_DEBUGS("Inventory") << "purge_descendents_of clipboard case " << cat->getName() - << " iterate and purge non hidden items" << LL_ENDL; + LL_DEBUGS(LOG_INV) << "purge_descendents_of clipboard case " << cat->getName() + << " iterate and purge non hidden items" << LL_ENDL; LLInventoryModel::cat_array_t* categories; LLInventoryModel::item_array_t* items; // Get the list of direct descendants in tha categoy passed as argument @@ -1665,7 +1671,7 @@ void purge_descendents_of(const LLUUID& id, LLPointer<LLInventoryCallback> cb) else // no cap { // Fast purge - LL_DEBUGS("Inventory") << "purge_descendents_of fast case " << cat->getName() << LL_ENDL; + LL_DEBUGS(LOG_INV) << "purge_descendents_of fast case " << cat->getName() << LL_ENDL; // send it upstream LLMessageSystem* msg = gMessageSystem; @@ -1708,9 +1714,9 @@ void copy_inventory_from_notecard(const LLUUID& destination_id, { if (NULL == src) { - LL_WARNS("copy_inventory_from_notecard") << "Null pointer to item was passed for object_id " - << object_id << " and notecard_inv_id " - << notecard_inv_id << LL_ENDL; + LL_WARNS(LOG_NOTECARD) << "Null pointer to item was passed for object_id " + << object_id << " and notecard_inv_id " + << notecard_inv_id << LL_ENDL; return; } @@ -1730,9 +1736,9 @@ void copy_inventory_from_notecard(const LLUUID& destination_id, if (! viewer_region) { - LL_WARNS("copy_inventory_from_notecard") << "Can't find region from object_id " - << object_id << " or gAgent" - << LL_ENDL; + LL_WARNS(LOG_NOTECARD) << "Can't find region from object_id " + << object_id << " or gAgent" + << LL_ENDL; return; } @@ -1740,9 +1746,9 @@ void copy_inventory_from_notecard(const LLUUID& destination_id, std::string url = viewer_region->getCapability("CopyInventoryFromNotecard"); if (url.empty()) { - LL_WARNS("copy_inventory_from_notecard") << "There is no 'CopyInventoryFromNotecard' capability" - << " for region: " << viewer_region->getName() - << LL_ENDL; + LL_WARNS(LOG_NOTECARD) << "There is no 'CopyInventoryFromNotecard' capability" + << " for region: " << viewer_region->getName() + << LL_ENDL; return; } @@ -1816,15 +1822,15 @@ void slam_inventory_folder(const LLUUID& folder_id, { if (AISCommand::isAPIAvailable()) { - LL_DEBUGS("Avatar") << "using AISv3 to slam folder, id " << folder_id - << " new contents: " << ll_pretty_print_sd(contents) << LL_ENDL; + LL_DEBUGS(LOG_INV) << "using AISv3 to slam folder, id " << folder_id + << " new contents: " << ll_pretty_print_sd(contents) << LL_ENDL; LLPointer<AISCommand> cmd_ptr = new SlamFolderCommand(folder_id, contents, cb); cmd_ptr->run_command(); } else // no cap { - LL_DEBUGS("Avatar") << "using item-by-item calls to slam folder, id " << folder_id - << " new contents: " << ll_pretty_print_sd(contents) << LL_ENDL; + LL_DEBUGS(LOG_INV) << "using item-by-item calls to slam folder, id " << folder_id + << " new contents: " << ll_pretty_print_sd(contents) << LL_ENDL; for (LLSD::array_const_iterator it = contents.beginArray(); it != contents.endArray(); ++it) @@ -1926,7 +1932,7 @@ void menu_create_inventory_item(LLInventoryPanel* panel, LLFolderBridge *bridge, } else { - LL_WARNS() << "Can't create unrecognized type " << type_name << LL_ENDL; + LL_WARNS(LOG_INV) << "Can't create unrecognized type " << type_name << LL_ENDL; } } panel->getRootFolder()->setNeedsAutoRename(TRUE); @@ -2161,7 +2167,7 @@ LLViewerInventoryItem *LLViewerInventoryItem::getLinkedItem() const LLViewerInventoryItem *linked_item = gInventory.getItem(mAssetUUID); if (linked_item && linked_item->getIsLinkType()) { - LL_WARNS() << "Warning: Accessing link to link" << LL_ENDL; + LL_WARNS(LOG_INV) << "Warning: Accessing link to link" << LL_ENDL; return NULL; } return linked_item; diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp index 160478788c..b0f4802e20 100755 --- a/indra/newview/llviewerkeyboard.cpp +++ b/indra/newview/llviewerkeyboard.cpp @@ -162,7 +162,7 @@ void agent_push_backward( EKeystate s ) { camera_move_backward(s); } - else if (!gAgent.backwardGrabbed() && gAgentAvatarp->isSitting()) + else if (!gAgent.backwardGrabbed() && gAgentAvatarp->isSitting() && gSavedSettings.getBOOL("LeaveMouselook")) { gAgentCamera.changeCameraToThirdPerson(); } diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 885c85d6c5..01a36597e6 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -4,7 +4,7 @@ * * $LicenseInfo:firstyear=2002&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -64,6 +64,7 @@ #include "llfloaterinventory.h" #include "llfloaterimcontainer.h" #include "llfloaterland.h" +#include "llfloaterimnearbychat.h" #include "llfloaterpathfindingcharacters.h" #include "llfloaterpathfindinglinksets.h" #include "llfloaterpay.h" @@ -92,6 +93,7 @@ #include "llparcel.h" #include "llrootview.h" #include "llsceneview.h" +#include "llscenemonitor.h" #include "llselectmgr.h" #include "llspellcheckmenuhandler.h" #include "llstatusbar.h" @@ -533,6 +535,10 @@ class LLAdvancedToggleConsole : public view_listener_t { toggle_visibility( (void*)gSceneView); } + else if ("scene monitor" == console_type) + { + toggle_visibility( (void*)gSceneMonitorView); + } return true; } @@ -559,6 +565,10 @@ class LLAdvancedCheckConsole : public view_listener_t { new_value = get_visibility( (void*) gSceneView); } + else if ("scene monitor" == console_type) + { + new_value = get_visibility( (void*) gSceneMonitorView); + } return new_value; } @@ -5668,6 +5678,25 @@ void toggle_debug_menus(void*) // gExportDialog = LLUploadDialog::modalUploadDialog("Exporting selected objects..."); // } // + +class LLCommunicateNearbyChat : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + LLFloaterIMContainer* im_box = LLFloaterIMContainer::getInstance(); + bool nearby_visible = LLFloaterReg::getTypedInstance<LLFloaterIMNearbyChat>("nearby_chat")->isInVisibleChain(); + if(nearby_visible && im_box->getSelectedSession() == LLUUID() && im_box->getConversationListItemSize() > 1) + { + im_box->selectNextorPreviousConversation(false); + } + else + { + LLFloaterReg::toggleInstanceOrBringToFront("nearby_chat"); + } + return true; + } +}; + class LLWorldSetHomeLocation : public view_listener_t { bool handleEvent(const LLSD& userdata) @@ -6189,7 +6218,7 @@ class LLPromptShowURL : public view_listener_t std::string alert = param.substr(0, offset); std::string url = param.substr(offset+1); - if(gSavedSettings.getBOOL("UseExternalBrowser")) + if (LLWeb::useExternalBrowser(url)) { LLSD payload; payload["url"] = url; @@ -7809,7 +7838,7 @@ void handle_web_content_test(const LLSD& param) void handle_show_url(const LLSD& param) { std::string url = param.asString(); - if(gSavedSettings.getBOOL("UseExternalBrowser")) + if (LLWeb::useExternalBrowser(url)) { LLWeb::loadURLExternal(url); } @@ -8246,9 +8275,9 @@ class LLWorldEnableEnvSettings : public view_listener_t bool result = false; std::string tod = userdata.asString(); - if (tod == "region") + if (LLEnvManagerNew::instance().getUseRegionSettings()) { - return LLEnvManagerNew::instance().getUseRegionSettings(); + return (tod == "region"); } if (LLEnvManagerNew::instance().getUseFixedSky()) @@ -8271,7 +8300,7 @@ class LLWorldEnableEnvSettings : public view_listener_t } else { - llwarns << "Unknown item" << llendl; + LL_WARNS() << "Unknown time-of-day item: " << tod << LL_ENDL; } } return result; @@ -8593,6 +8622,9 @@ void initialize_menus() // Me > Movement view_listener_t::addMenu(new LLAdvancedAgentFlyingInfo(), "Agent.getFlying"); + //Communicate Nearby chat + view_listener_t::addMenu(new LLCommunicateNearbyChat(), "Communicate.NearbyChat"); + // Communicate > Voice morphing > Subscribe... commit.add("Communicate.VoiceMorphing.Subscribe", boost::bind(&handle_voice_morphing_subscribe)); LLVivoxVoiceClient * voice_clientp = LLVivoxVoiceClient::getInstance(); diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 80f47ecab2..b2a37694fe 100755 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -477,8 +477,10 @@ class LLFileEnableCloseWindow : public view_listener_t { bool handleEvent(const LLSD& userdata) { - bool new_value = NULL != gFloaterView->getFrontmostClosableFloater(); - return new_value; + bool frontmost_fl_exists = (NULL != gFloaterView->getFrontmostClosableFloater()); + bool frontmost_snapshot_fl_exists = (NULL != gSnapshotFloaterView->getFrontmostClosableFloater()); + + return frontmost_fl_exists || frontmost_snapshot_fl_exists; } }; @@ -486,7 +488,21 @@ class LLFileCloseWindow : public view_listener_t { bool handleEvent(const LLSD& userdata) { - LLFloater::closeFrontmostFloater(); + bool frontmost_fl_exists = (NULL != gFloaterView->getFrontmostClosableFloater()); + LLFloater* snapshot_floater = gSnapshotFloaterView->getFrontmostClosableFloater(); + + if(snapshot_floater && (!frontmost_fl_exists || snapshot_floater->hasFocus())) + { + snapshot_floater->closeFloater(); + if (gFocusMgr.getKeyboardFocus() == NULL) + { + gFloaterView->focusFrontFloater(); + } + } + else + { + LLFloater::closeFrontmostFloater(); + } return true; } }; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 9d5c3c4d4a..44eb4361f1 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -3767,6 +3767,15 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) LLNotificationsUI::LLNotificationManager::instance().onChat(chat, args); } + // don't call notification for debug messages from not owned objects + if (chat.mChatType == CHAT_TYPE_DEBUG_MSG) + { + if (gAgentID != chat.mOwnerID) + { + return; + } + } + LLSD msg_notify = LLSD(LLSD::emptyMap()); msg_notify["session_id"] = LLUUID(); msg_notify["from_id"] = chat.mFromID; @@ -5747,83 +5756,101 @@ bool handle_special_notification(std::string notificationID, LLSD& llsdBlock) } // some of the server notifications need special handling. This is where we do that. -bool handle_teleport_access_blocked(LLSD& llsdBlock) +bool handle_teleport_access_blocked(LLSD& llsdBlock, const std::string & notificationID, const std::string & defaultMessage) { - std::string notificationID("TeleportEntryAccessBlocked"); U8 regionAccess = static_cast<U8>(llsdBlock["_region_access"].asInteger()); std::string regionMaturity = LLViewerRegion::accessToString(regionAccess); LLStringUtil::toLower(regionMaturity); llsdBlock["REGIONMATURITY"] = regionMaturity; bool returnValue = false; - LLNotificationPtr maturityLevelNotification; - std::string notifySuffix = "_Notify"; - if (regionAccess == SIM_ACCESS_MATURE) - { - if (gAgent.isTeen()) - { - gAgent.clearTeleportRequest(); - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock); - returnValue = true; + LLNotificationPtr tp_failure_notification; + std::string notifySuffix; - notifySuffix = "_NotifyAdultsOnly"; - } - else if (gAgent.prefersPG()) + if (notificationID == std::string("TeleportEntryAccessBlocked")) + { + notifySuffix = "_Notify"; + if (regionAccess == SIM_ACCESS_MATURE) { - if (gAgent.hasRestartableFailedTeleportRequest()) + if (gAgent.isTeen()) { - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback); + gAgent.clearTeleportRequest(); + tp_failure_notification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock); returnValue = true; + + notifySuffix = "_NotifyAdultsOnly"; + } + else if (gAgent.prefersPG()) + { + if (gAgent.hasRestartableFailedTeleportRequest()) + { + tp_failure_notification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback); + returnValue = true; + } + else + { + gAgent.clearTeleportRequest(); + tp_failure_notification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); + returnValue = true; + } } else { gAgent.clearTeleportRequest(); - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); + tp_failure_notification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); returnValue = true; } } - else - { - gAgent.clearTeleportRequest(); - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); - returnValue = true; - } - } - else if (regionAccess == SIM_ACCESS_ADULT) - { - if (!gAgent.isAdult()) - { - gAgent.clearTeleportRequest(); - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock); - returnValue = true; - - notifySuffix = "_NotifyAdultsOnly"; - } - else if (gAgent.prefersPG() || gAgent.prefersMature()) + else if (regionAccess == SIM_ACCESS_ADULT) { - if (gAgent.hasRestartableFailedTeleportRequest()) + if (!gAgent.isAdult()) { - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback); + gAgent.clearTeleportRequest(); + tp_failure_notification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock); returnValue = true; + + notifySuffix = "_NotifyAdultsOnly"; + } + else if (gAgent.prefersPG() || gAgent.prefersMature()) + { + if (gAgent.hasRestartableFailedTeleportRequest()) + { + tp_failure_notification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback); + returnValue = true; + } + else + { + gAgent.clearTeleportRequest(); + tp_failure_notification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); + returnValue = true; + } } else { gAgent.clearTeleportRequest(); - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); + tp_failure_notification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); returnValue = true; } + } + } // End of special handling for "TeleportEntryAccessBlocked" + else + { // Normal case, no message munging + gAgent.clearTeleportRequest(); + if (LLNotifications::getInstance()->templateExists(notificationID)) + { + tp_failure_notification = LLNotificationsUtil::add(notificationID, llsdBlock, llsdBlock); } else { - gAgent.clearTeleportRequest(); - maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback); - returnValue = true; - } + llsdBlock["MESSAGE"] = defaultMessage; + tp_failure_notification = LLNotificationsUtil::add("GenericAlertOK", llsdBlock); } + returnValue = true; + } - if ((maturityLevelNotification == NULL) || maturityLevelNotification->isIgnored()) + if ((tp_failure_notification == NULL) || tp_failure_notification->isIgnored()) { - // Given a simple notification if no maturityLevelNotification is set or it is ignore + // Given a simple notification if no tp_failure_notification is set or it is ignore LLNotificationsUtil::add(notificationID + notifySuffix, llsdBlock); } @@ -6039,8 +6066,8 @@ void process_alert_core(const std::string& message, BOOL modal) std::string alert_name(message.substr(ALERT_PREFIX.length())); if (!handle_special_alerts(alert_name)) { - LLNotificationsUtil::add(alert_name); - } + LLNotificationsUtil::add(alert_name); + } } else if (message.find(NOTIFY_PREFIX) == 0) { @@ -6062,10 +6089,10 @@ void process_alert_core(const std::string& message, BOOL modal) LLFloaterRegionRestarting::close(); } - std::string new_msg =LLNotifications::instance().getGlobalString(text); - args["MESSAGE"] = new_msg; - LLNotificationsUtil::add("SystemMessage", args); - } + std::string new_msg =LLNotifications::instance().getGlobalString(text); + args["MESSAGE"] = new_msg; + LLNotificationsUtil::add("SystemMessage", args); + } else if (modal) { LLSD args; @@ -6648,8 +6675,8 @@ std::string formatted_time(const time_t& the_time) void process_teleport_failed(LLMessageSystem *msg, void**) { - std::string reason; - std::string big_reason; + std::string message_id; // Tag from server, like "RegionEntryAccessBlocked" + std::string big_reason; // Actual message to display LLSD args; // Let the interested parties know that teleport failed. @@ -6659,16 +6686,16 @@ void process_teleport_failed(LLMessageSystem *msg, void**) if (msg->has(_PREHASH_AlertInfo) && msg->getSizeFast(_PREHASH_AlertInfo, _PREHASH_Message) > 0) { // Get the message ID - msg->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, reason); - big_reason = LLAgent::sTeleportErrorMessages[reason]; + msg->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, message_id); + big_reason = LLAgent::sTeleportErrorMessages[message_id]; if ( big_reason.size() > 0 ) { // Substitute verbose reason from the local map args["REASON"] = big_reason; } else { // Nothing found in the map - use what the server returned in the original message block - msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, reason); - args["REASON"] = reason; + msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, big_reason); + args["REASON"] = big_reason; } LLSD llsd_block; @@ -6684,7 +6711,7 @@ void process_teleport_failed(LLMessageSystem *msg, void**) else { // change notification name in this special case - if (handle_teleport_access_blocked(llsd_block)) + if (handle_teleport_access_blocked(llsd_block, message_id, args["REASON"])) { if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE ) { @@ -6697,17 +6724,17 @@ void process_teleport_failed(LLMessageSystem *msg, void**) } else - { - msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, reason); + { // Extra message payload not found - use what the simulator sent + msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, message_id); - big_reason = LLAgent::sTeleportErrorMessages[reason]; + big_reason = LLAgent::sTeleportErrorMessages[message_id]; if ( big_reason.size() > 0 ) { // Substitute verbose reason from the local map args["REASON"] = big_reason; } else { // Nothing found in the map - use what the server returned - args["REASON"] = reason; + args["REASON"] = message_id; } } diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 80592f01ce..4f992fc184 100755 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2792,8 +2792,8 @@ void LLViewerObject::dirtyInventory() mInventory->clear(); // will deref and delete entries delete mInventory; mInventory = NULL; - mInventoryDirty = TRUE; } + mInventoryDirty = TRUE; } void LLViewerObject::registerInventoryListener(LLVOInventoryListener* listener, void* user_data) @@ -2830,12 +2830,15 @@ void LLViewerObject::clearInventoryListeners() void LLViewerObject::requestInventory() { - mInventoryDirty = FALSE; + if(mInventoryDirty && mInventory && !mInventoryCallbacks.empty()) + { + mInventory->clear(); // will deref and delete entries + delete mInventory; + mInventory = NULL; + mInventoryDirty = FALSE; //since we are going to request it now + } if(mInventory) { - //mInventory->clear() // will deref and delete it - //delete mInventory; - //mInventory = NULL; doInventoryCallback(); } // throw away duplicate requests diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index cdb08f4707..7c94442f09 100755 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -117,6 +117,7 @@ LLViewerParcelMgr::LLViewerParcelMgr() mHoverRequestResult(0), mHoverWestSouth(), mHoverEastNorth(), + mTeleportInProgressPosition(), mRenderCollision(FALSE), mRenderSelection(TRUE), mCollisionBanned(0), @@ -1320,12 +1321,6 @@ void LLViewerParcelMgr::setHoverParcel(const LLVector3d& pos) static U32 last_west, last_south; - // only request parcel info when tooltip is shown - if (!gSavedSettings.getBOOL("ShowLandHoverTip")) - { - return; - } - // only request parcel info if position has changed outside of the // last parcel grid step U32 west_parcel_step = (U32) floor( pos.mdV[VX] / PARCEL_GRID_STEP_METERS ); @@ -1585,7 +1580,15 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use if (instance->mTeleportInProgress) { instance->mTeleportInProgress = FALSE; - instance->mTeleportFinishedSignal(gAgent.getPositionGlobal(), false); + if(instance->mTeleportInProgressPosition.isNull()) + { + //initial update + instance->mTeleportFinishedSignal(gAgent.getPositionGlobal(), false); + } + else + { + instance->mTeleportFinishedSignal(instance->mTeleportInProgressPosition, false); + } } } } @@ -2494,6 +2497,7 @@ void LLViewerParcelMgr::onTeleportFinished(bool local, const LLVector3d& new_pos // Non-local teleport (inter-region or between different parcels of the same region). // The agent parcel data has not been updated yet. // Let's wait for the update and then emit the signal. + mTeleportInProgressPosition = new_pos; mTeleportInProgress = TRUE; } } diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h index 58d398e141..b5b269abdf 100755 --- a/indra/newview/llviewerparcelmgr.h +++ b/indra/newview/llviewerparcelmgr.h @@ -335,6 +335,7 @@ private: std::vector<LLParcelObserver*> mObservers; BOOL mTeleportInProgress; + LLVector3d mTeleportInProgressPosition; teleport_finished_signal_t mTeleportFinishedSignal; teleport_failed_signal_t mTeleportFailedSignal; diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index cd5f64b9ca..11cbf3fc24 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -285,8 +285,8 @@ private: { regionp->setCapability(iter->first, iter->second); - LL_DEBUGS("AppInit", "Capabilities") << "got capability for " - << iter->first << LL_ENDL; + LL_DEBUGS("AppInit", "Capabilities") + << "Capability '" << iter->first << "' is '" << iter->second << "'" << LL_ENDL; /* HACK we're waiting for the ServerReleaseNotes */ if (iter->first == "ServerReleaseNotes" && regionp->getReleaseNotesRequested()) diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index ba89aafc84..4e2eef39d6 100755 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -88,7 +88,7 @@ F32 LLViewerTexture::sDesiredDiscardBias = 0.f; F32 LLViewerTexture::sDesiredDiscardScale = 1.1f; S32Bytes LLViewerTexture::sBoundTextureMemory; S32Bytes LLViewerTexture::sTotalTextureMemory; -S32Megabytes LLViewerTexture::sMaxBoundTextureMem; +S32Megabytes LLViewerTexture::sMaxBoundTextureMemory; S32Megabytes LLViewerTexture::sMaxTotalTextureMem; S32Bytes LLViewerTexture::sMaxDesiredTextureMem; S8 LLViewerTexture::sCameraMovingDiscardBias = 0; @@ -534,11 +534,11 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity sBoundTextureMemory = LLImageGL::sBoundTextureMemory; sTotalTextureMemory = LLImageGL::sGlobalTextureMemory; - sMaxBoundTextureMem = gTextureList.getMaxResidentTexMem(); + sMaxBoundTextureMemory = gTextureList.getMaxResidentTexMem(); sMaxTotalTextureMem = gTextureList.getMaxTotalTextureMem(); sMaxDesiredTextureMem = sMaxTotalTextureMem; //in Bytes, by default and when total used texture memory is small. - if (sBoundTextureMemory >= sMaxBoundTextureMem || + if (sBoundTextureMemory >= sMaxBoundTextureMemory || sTotalTextureMemory >= sMaxTotalTextureMem) { //when texture memory overflows, lower down the threshold to release the textures more aggressively. @@ -558,7 +558,7 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity sEvaluationTimer.reset(); } else if (sDesiredDiscardBias > 0.0f && - sBoundTextureMemory < sMaxBoundTextureMem * texmem_lower_bound_scale && + sBoundTextureMemory < sMaxBoundTextureMemory * texmem_lower_bound_scale && sTotalTextureMemory < sMaxTotalTextureMem * texmem_lower_bound_scale) { // If we are using less texture memory than we should, @@ -576,7 +576,7 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity sCameraMovingBias = llmax(0.2f * camera_moving_speed, 2.0f * camera_angular_speed - 1); sCameraMovingDiscardBias = (S8)(sCameraMovingBias); - LLViewerTexture::sFreezeImageScalingDown = (sBoundTextureMemory < 0.75f * sMaxBoundTextureMem * texmem_middle_bound_scale) && + LLViewerTexture::sFreezeImageScalingDown = (sBoundTextureMemory < 0.75f * sMaxBoundTextureMemory * texmem_middle_bound_scale) && (sTotalTextureMemory < 0.75f * sMaxTotalTextureMem * texmem_middle_bound_scale); } @@ -3074,7 +3074,7 @@ void LLViewerLODTexture::processTextureStats() scaleDown(); } // Limit the amount of GL memory bound each frame - else if ( sBoundTextureMemory > sMaxBoundTextureMem * texmem_middle_bound_scale && + else if ( sBoundTextureMemory > sMaxBoundTextureMemory * texmem_middle_bound_scale && (!getBoundRecently() || mDesiredDiscardLevel >= mCachedRawDiscardLevel)) { scaleDown(); diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index 307204da60..05912404e4 100755 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -210,7 +210,7 @@ public: static F32 sDesiredDiscardScale; static S32Bytes sBoundTextureMemory; static S32Bytes sTotalTextureMemory; - static S32Megabytes sMaxBoundTextureMem; + static S32Megabytes sMaxBoundTextureMemory; static S32Megabytes sMaxTotalTextureMem; static S32Bytes sMaxDesiredTextureMem ; static S8 sCameraMovingDiscardBias; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 4d263c118b..9dcd0b81e0 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1392,6 +1392,13 @@ BOOL LLViewerWindow::handleTranslatedKeyUp(KEY key, MASK mask) // Let the voice chat code check for its PTT key. Note that this never affects event processing. LLVoiceClient::getInstance()->keyUp(key, mask); + // Let the inspect tool code check for ALT key to set LLToolSelectRect active instead LLToolCamera + LLToolCompInspect * tool_inspectp = LLToolCompInspect::getInstance(); + if (LLToolMgr::getInstance()->getCurrentTool() == tool_inspectp) + { + tool_inspectp->keyUp(key, mask); + } + return FALSE; } @@ -1962,7 +1969,7 @@ void LLViewerWindow::initWorldUI() // Force gFloaterTools to initialize LLFloaterReg::getInstance("build"); - LLFloaterReg::hideInstance("build"); + // Status bar LLPanel* status_bar_container = getRootView()->getChild<LLPanel>("status_bar_container"); @@ -3216,6 +3223,8 @@ void LLViewerWindow::updateUI() } append_xui_tooltip(tooltip_view, params); + params.styled_message.add().text("\n"); + screen_sticky_rect.intersectWith(tooltip_view->calcScreenRect()); params.sticky_rect = screen_sticky_rect; @@ -3265,7 +3274,7 @@ void LLViewerWindow::updateUI() updateLayout(); - saveLastMouse(mCurrentMousePoint); + mLastMousePoint = mCurrentMousePoint; // cleanup unused selections when no modal dialogs are open if (LLModalDialog::activeCount() == 0) @@ -3505,8 +3514,6 @@ void LLViewerWindow::saveLastMouse(const LLCoordGL &point) // Store last mouse location. // If mouse leaves window, pretend last point was on edge of window - mLastMousePoint = mCurrentMousePoint; - if (point.mX < 0) { mCurrentMousePoint.mX = 0; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index dd7d42ee25..b527f36d61 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2068,7 +2068,7 @@ void LLVOAvatar::idleUpdate(LLAgent &agent, const F64 &time) } if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_AVATAR)) - && !(gSavedSettings.getBOOL("DisableAllRenderTypes"))) + && !(gSavedSettings.getBOOL("DisableAllRenderTypes")) && !isSelf()) { return; } diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index 3c3dc33772..9a84cae403 100755 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -280,14 +280,14 @@ void LLVoiceChannel::deactivate() if (callStarted()) { setState(STATE_HUNG_UP); - + //Default mic is OFF when leaving voice calls - if (gSavedSettings.getBOOL("AutoDisengageMic") && + if (gSavedSettings.getBOOL("AutoDisengageMic") && sCurrentVoiceChannel == this && LLVoiceClient::getInstance()->getUserPTTState()) { gSavedSettings.setBOOL("PTTCurrentlyEnabled", true); - LLVoiceClient::getInstance()->inputUserControlState(true); + LLVoiceClient::getInstance()->setUserPTTState(false); } } LLVoiceClient::getInstance()->removeObserver(this); diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 815965fb0a..0bf373f478 100755 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -36,6 +36,7 @@ #include "llsdserialize.h" #include "llui.h" #include "llkeyboard.h" +#include "llagent.h" const F32 LLVoiceClient::OVERDRIVEN_POWER_LEVEL = 0.7f; @@ -635,7 +636,7 @@ void LLVoiceClient::keyDown(KEY key, MASK mask) return; } - if(!mPTTIsMiddleMouse) + if(!mPTTIsMiddleMouse && LLAgent::isActionAllowed("speak")) { bool down = (mPTTKey != KEY_NONE) && gKeyboard->getKeyDown(mPTTKey); @@ -654,12 +655,9 @@ void LLVoiceClient::keyUp(KEY key, MASK mask) } void LLVoiceClient::middleMouseState(bool down) { - if(mPTTIsMiddleMouse) + if(mPTTIsMiddleMouse && LLAgent::isActionAllowed("speak")) { - if(mPTTIsMiddleMouse) - { - inputUserControlState(down); - } + inputUserControlState(down); } } diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index 665671a38f..0312972a22 100755 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -50,6 +50,8 @@ #include "llviewerwindow.h" #include "llnotificationsutil.h" +#include <boost/regex.hpp> + bool on_load_url_external_response(const LLSD& notification, const LLSD& response, bool async ); @@ -87,7 +89,8 @@ void LLWeb::loadURL(const std::string& url, const std::string& target, const std // Force load in the internal browser, as if with a blank target. loadURLInternal(url, "", uuid); } - else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external")) + + else if (useExternalBrowser(url) || (target == "_external")) { loadURLExternal(url); } @@ -225,3 +228,19 @@ std::string LLWeb::expandURLSubstitutions(const std::string &url, return LLWeb::escapeURL(expanded_url); } + +//static +bool LLWeb::useExternalBrowser(const std::string &url) +{ + if (gSavedSettings.getU32("PreferredBrowserBehavior") == BROWSER_EXTERNAL_ONLY) + { + return true; + } + else if (gSavedSettings.getU32("PreferredBrowserBehavior") == BROWSER_INT_LL_EXT_OTHERS) + { + boost::regex pattern = boost::regex("\\b(lindenlab.com|secondlife.com)\\b", boost::regex::perl|boost::regex::icase); + boost::match_results<std::string::const_iterator> matches; + return !(boost::regex_search(url, matches, pattern)); + } + return false; +} diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h index 0b95f664d6..7c90badbfe 100755 --- a/indra/newview/llweb.h +++ b/indra/newview/llweb.h @@ -40,6 +40,13 @@ class LLWeb { public: + enum PreferredBrowser + { + BROWSER_EXTERNAL_ONLY = 0, + BROWSER_INT_LL_EXT_OTHERS = 1, + BROWSER_INTERNAL_ONLY = 2 + }; + static void initClass(); /// Load the given url in the operating system's web browser, async if we want to return immediately @@ -57,6 +64,7 @@ public: /// Expands various strings like [LANG], [VERSION], etc. in a URL static std::string expandURLSubstitutions(const std::string &url, const LLSD &default_subs); + static bool useExternalBrowser(const std::string &url); }; #endif diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index a770352f86..7cb53a0706 100755 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -1694,6 +1694,8 @@ BOOL LLWorldMapView::handleHover( S32 x, S32 y, MASK mask ) sPanY += delta_y; sTargetPanX = sPanX; sTargetPanY = sPanY; + + gViewerWindow->moveCursorToCenter(); } // doesn't matter, cursor should be hidden diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 46698b3949..1f10d966d5 100755 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -489,6 +489,11 @@ with the same filename but different name <texture name="PushButton_Selected_Press" file_name="widgets/PushButton_Selected_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> <texture name="PushButton_Selected_Disabled" file_name="widgets/PushButton_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> + <texture name="PushButton_Login" file_name="widgets/PushButton_Login.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> + <texture name="PushButton_Login_Over" file_name="widgets/PushButton_Login_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> + <texture name="PushButton_Login_Pressed" file_name="widgets/PushButton_Login_Pressed.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> + + <texture name="RadioButton_Press" file_name="widgets/RadioButton_Press.png" preload="true" /> <texture name="RadioButton_On_Press" file_name="widgets/RadioButton_On_Press.png" preload="true" /> <texture name="RadioButton_Off" file_name="widgets/RadioButton_Off.png" preload="true" /> @@ -577,6 +582,11 @@ with the same filename but different name <texture name="startup_logo" file_name="windows/startup_logo.png" preload="true" /> + <texture name="login_sl_logo" file_name="windows/login_sl_logo.png" preload="true" /> + <texture name="login_sl_logo_small" file_name="windows/login_sl_logo_small.png" preload="true" /> + <texture name="first_login_image_left" file_name="windows/first_login_image_left.png" preload="true" /> + <texture name="first_login_image_right" file_name="windows/first_login_image_right.png" preload="true" /> + <texture name="Stepper_Down_Off" file_name="widgets/Stepper_Down_Off.png" preload="false" /> <texture name="Stepper_Down_Press" file_name="widgets/Stepper_Down_Press.png" preload="false" /> <texture name="Stepper_Up_Off" file_name="widgets/Stepper_Up_Off.png" preload="false" /> diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Login.png b/indra/newview/skins/default/textures/widgets/PushButton_Login.png Binary files differnew file mode 100644 index 0000000000..6f8b5a0770 --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/PushButton_Login.png diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Login_Over.png b/indra/newview/skins/default/textures/widgets/PushButton_Login_Over.png Binary files differnew file mode 100644 index 0000000000..e9e8af13d4 --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/PushButton_Login_Over.png diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Login_Pressed.png b/indra/newview/skins/default/textures/widgets/PushButton_Login_Pressed.png Binary files differnew file mode 100644 index 0000000000..4a9f1052b3 --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/PushButton_Login_Pressed.png diff --git a/indra/newview/skins/default/textures/windows/first_login_image_left.png b/indra/newview/skins/default/textures/windows/first_login_image_left.png Binary files differnew file mode 100644 index 0000000000..b405a88245 --- /dev/null +++ b/indra/newview/skins/default/textures/windows/first_login_image_left.png diff --git a/indra/newview/skins/default/textures/windows/first_login_image_right.png b/indra/newview/skins/default/textures/windows/first_login_image_right.png Binary files differnew file mode 100644 index 0000000000..22a6dd8a53 --- /dev/null +++ b/indra/newview/skins/default/textures/windows/first_login_image_right.png diff --git a/indra/newview/skins/default/textures/windows/login_sl_logo.png b/indra/newview/skins/default/textures/windows/login_sl_logo.png Binary files differnew file mode 100644 index 0000000000..9810d00237 --- /dev/null +++ b/indra/newview/skins/default/textures/windows/login_sl_logo.png diff --git a/indra/newview/skins/default/textures/windows/login_sl_logo_small.png b/indra/newview/skins/default/textures/windows/login_sl_logo_small.png Binary files differnew file mode 100644 index 0000000000..0a245442d5 --- /dev/null +++ b/indra/newview/skins/default/textures/windows/login_sl_logo_small.png diff --git a/indra/newview/skins/default/xui/da/floater_lagmeter.xml b/indra/newview/skins/default/xui/da/floater_lagmeter.xml new file mode 100644 index 0000000000..149d174c34 --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_lagmeter.xml @@ -0,0 +1,151 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_lagmeter" title="LAG METER"> + <floater.string name="max_title_msg"> + Lag måler + </floater.string> + <floater.string name="max_width_px"> + 360 + </floater.string> + <floater.string name="min_title_msg"> + Lag + </floater.string> + <floater.string name="min_width_px"> + 90 + </floater.string> + <floater.string name="client_text_msg"> + Klient + </floater.string> + <floater.string name="client_frame_rate_critical_fps"> + 10 + </floater.string> + <floater.string name="client_frame_rate_warning_fps"> + 15 + </floater.string> + <floater.string name="client_frame_time_window_bg_msg"> + Normal, vindue i baggrund + </floater.string> + <floater.string name="client_frame_time_critical_msg"> + Klients billeder/sek under [CLIENT_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="client_frame_time_warning_msg"> + Klients billeder/sek mellem [CLIENT_FRAME_RATE_CRITICAL] og [CLIENT_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="client_frame_time_normal_msg"> + Normal + </floater.string> + <floater.string name="client_draw_distance_cause_msg"> + Mulig årsag: 'Vis afstand' sat for højt i grafik indstillinger + </floater.string> + <floater.string name="client_texture_loading_cause_msg"> + Mulig årsag: Billeder hentes + </floater.string> + <floater.string name="client_texture_memory_cause_msg"> + Mulig årsag: For mange billeder i hukommelse + </floater.string> + <floater.string name="client_complex_objects_cause_msg"> + Mulig årsag: For mange komplekse objekter i scenariet + </floater.string> + <floater.string name="network_text_msg"> + Netværk + </floater.string> + <floater.string name="network_packet_loss_critical_pct"> + 10 + </floater.string> + <floater.string name="network_packet_loss_warning_pct"> + 5 + </floater.string> + <floater.string name="network_packet_loss_critical_msg"> + Forbindelsen mister over [NETWORK_PACKET_LOSS_CRITICAL]% pakker + </floater.string> + <floater.string name="network_packet_loss_warning_msg"> + Forbindelsen mister [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% pakker + </floater.string> + <floater.string name="network_performance_normal_msg"> + Normal + </floater.string> + <floater.string name="network_ping_critical_ms"> + 600 + </floater.string> + <floater.string name="network_ping_warning_ms"> + 300 + </floater.string> + <floater.string name="network_ping_critical_msg"> + Forbindelsens ping tider er over [NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_ping_warning_msg"> + Forbindelsens ping tider er [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_packet_loss_cause_msg"> + Muligvis dårlig forbindelse eller 'båndbredde' sat for højt i netværksopsætning. + </floater.string> + <floater.string name="network_ping_cause_msg"> + Muligvis dårlig forbindelse eller fil delings program. + </floater.string> + <floater.string name="server_text_msg"> + Server + </floater.string> + <floater.string name="server_frame_rate_critical_fps"> + 20 + </floater.string> + <floater.string name="server_frame_rate_warning_fps"> + 30 + </floater.string> + <floater.string name="server_single_process_max_time_ms"> + 20 + </floater.string> + <floater.string name="server_frame_time_critical_msg"> + Simulator framerate er under [SERVER_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="server_frame_time_warning_msg"> + Simulator framerate er mellem [SERVER_FRAME_RATE_CRITICAL] og [SERVER_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="server_frame_time_normal_msg"> + Normal + </floater.string> + <floater.string name="server_physics_cause_msg"> + Mulig årsag: For mange fysiske objekter + </floater.string> + <floater.string name="server_scripts_cause_msg"> + Mulig årsag: For mange objekter med script + </floater.string> + <floater.string name="server_net_cause_msg"> + Mulig årsag: For meget netværks trafik + </floater.string> + <floater.string name="server_agent_cause_msg"> + Mulig årsag: For mange avatarer i bevægelse i regionen + </floater.string> + <floater.string name="server_images_cause_msg"> + Mulig årsag: For mange billed udregninger + </floater.string> + <floater.string name="server_generic_cause_msg"> + Mulig årsag: Simulator belastning for stor + </floater.string> + <floater.string name="smaller_label"> + >> + </floater.string> + <floater.string name="bigger_label"> + << + </floater.string> + <button label="" label_selected="" name="client_lagmeter" tool_tip="Status for klient lag"/> + <text name="client"> + Klient + </text> + <text name="client_text"> + Normal + </text> + <button label="" label_selected="" name="network_lagmeter" tool_tip="Network lag status"/> + <text name="network"> + Netværk + </text> + <text name="network_text"> + Normal + </text> + <button label="" label_selected="" name="server_lagmeter" tool_tip="Status for server lag"/> + <text name="server"> + Server + </text> + <text name="server_text"> + Normal + </text> + <button label=">>" name="minimize" tool_tip="Ændre størrelse"/> +</floater> diff --git a/indra/newview/skins/default/xui/de/floater_big_preview.xml b/indra/newview/skins/default/xui/de/floater_big_preview.xml new file mode 100644 index 0000000000..c5ce56d1d9 --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_big_preview.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_big_preview" title="VORSCHAU"/> diff --git a/indra/newview/skins/default/xui/de/floater_facebook.xml b/indra/newview/skins/default/xui/de/floater_facebook.xml new file mode 100644 index 0000000000..25b11536eb --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_facebook.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_facebook" title="AUF FACEBOOK POSTEN"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="STATUS" name="panel_facebook_status"/> + <panel label="FOTO" name="panel_facebook_photo"/> + <panel label="EINCHECKEN" name="panel_facebook_place"/> + <panel label="FREUNDE" name="panel_facebook_friends"/> + <panel label="KONTO" name="panel_facebook_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Fehler + </text> + <text name="connection_loading_text"> + Laden... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/de/floater_flickr.xml b/indra/newview/skins/default/xui/de/floater_flickr.xml new file mode 100644 index 0000000000..b50fa19ec8 --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_flickr.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_flickr" title="AUF FLICKR HOCHLADEN"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="FOTO" name="panel_flickr_photo"/> + <panel label="KONTO" name="panel_flickr_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Fehler + </text> + <text name="connection_loading_text"> + Laden... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/de/floater_lagmeter.xml b/indra/newview/skins/default/xui/de/floater_lagmeter.xml new file mode 100644 index 0000000000..45ff37c147 --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_lagmeter.xml @@ -0,0 +1,151 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_lagmeter" title="LAG METER"> + <floater.string name="max_title_msg"> + Lag-Anzeige + </floater.string> + <floater.string name="max_width_px"> + 350 + </floater.string> + <floater.string name="min_title_msg"> + Lag + </floater.string> + <floater.string name="min_width_px"> + 90 + </floater.string> + <floater.string name="client_text_msg"> + Client + </floater.string> + <floater.string name="client_frame_rate_critical_fps"> + 10 + </floater.string> + <floater.string name="client_frame_rate_warning_fps"> + 15 + </floater.string> + <floater.string name="client_frame_time_window_bg_msg"> + Normal, Fenster im Hintergrund + </floater.string> + <floater.string name="client_frame_time_critical_msg"> + Client-Frame-Rate unter [CLIENT_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="client_frame_time_warning_msg"> + Client-Frame-Rate zwischen [CLIENT_FRAME_RATE_CRITICAL] und [CLIENT_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="client_frame_time_normal_msg"> + Normal + </floater.string> + <floater.string name="client_draw_distance_cause_msg"> + Mögliche Ursache: Sichtweite zu groß + </floater.string> + <floater.string name="client_texture_loading_cause_msg"> + Mögliche Ursache: Bilder werden geladen + </floater.string> + <floater.string name="client_texture_memory_cause_msg"> + Mögliche Ursache: Zu viele Bilder im Speicher + </floater.string> + <floater.string name="client_complex_objects_cause_msg"> + Mögliche Ursache: Zu viele komplexe Objekte in der Szene + </floater.string> + <floater.string name="network_text_msg"> + Netzwerk + </floater.string> + <floater.string name="network_packet_loss_critical_pct"> + 10 + </floater.string> + <floater.string name="network_packet_loss_warning_pct"> + 5 + </floater.string> + <floater.string name="network_packet_loss_critical_msg"> + Paketverlust der Verbindung übersteigt [NETWORK_PACKET_LOSS_CRITICAL]% + </floater.string> + <floater.string name="network_packet_loss_warning_msg"> + Paketverlust der Verbindung liegt bei [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% + </floater.string> + <floater.string name="network_performance_normal_msg"> + Normal + </floater.string> + <floater.string name="network_ping_critical_ms"> + 600 + </floater.string> + <floater.string name="network_ping_warning_ms"> + 300 + </floater.string> + <floater.string name="network_ping_critical_msg"> + Ping-Zeit der Verbindung übersteigt [NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_ping_warning_msg"> + Ping-Zeit der Verbindung liegt bei [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_packet_loss_cause_msg"> + Möglicherweise schlechte Verbindung oder zu hoher Wert für „Bandbreite“. + </floater.string> + <floater.string name="network_ping_cause_msg"> + Möglicherweise schlechte Verbindung oder File-Sharing-Anwendung. + </floater.string> + <floater.string name="server_text_msg"> + Server + </floater.string> + <floater.string name="server_frame_rate_critical_fps"> + 20 + </floater.string> + <floater.string name="server_frame_rate_warning_fps"> + 30 + </floater.string> + <floater.string name="server_single_process_max_time_ms"> + 20 + </floater.string> + <floater.string name="server_frame_time_critical_msg"> + Simulator-Frame-Rate liegt unter [SERVER_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="server_frame_time_warning_msg"> + Simulator-Frame-Rate liegt zwischen [SERVER_FRAME_RATE_CRITICAL] und [SERVER_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="server_frame_time_normal_msg"> + Normal + </floater.string> + <floater.string name="server_physics_cause_msg"> + Mögliche Ursache: Zu viele physische Objekte + </floater.string> + <floater.string name="server_scripts_cause_msg"> + Mögliche Ursache: Zu viele geskriptete Objekte + </floater.string> + <floater.string name="server_net_cause_msg"> + Mögliche Ursache: Zu viel Netzwerktraffic + </floater.string> + <floater.string name="server_agent_cause_msg"> + Mögliche Ursache: Zu viele Personen in Bewegung in der Region + </floater.string> + <floater.string name="server_images_cause_msg"> + Mögliche Ursache: Zu viele Bildberechnungen + </floater.string> + <floater.string name="server_generic_cause_msg"> + Mögliche Ursache: Zu hohe Simulator-Last + </floater.string> + <floater.string name="smaller_label"> + >> + </floater.string> + <floater.string name="bigger_label"> + << + </floater.string> + <button name="client_lagmeter" tool_tip="Client-Lag-Status"/> + <text name="client"> + Client + </text> + <text name="client_text"> + Normal + </text> + <button name="network_lagmeter" tool_tip="Netzwerk-Lag-Status"/> + <text name="network"> + Netzwerk + </text> + <text name="network_text"> + Normal + </text> + <button name="server_lagmeter" tool_tip="Server-Lag-Status"/> + <text name="server"> + Server + </text> + <text name="server_text"> + Normal + </text> + <button label=">> " name="minimize" tool_tip="Fenstergröße ändern"/> +</floater> diff --git a/indra/newview/skins/default/xui/de/floater_perms_default.xml b/indra/newview/skins/default/xui/de/floater_perms_default.xml new file mode 100644 index 0000000000..6d6c89172d --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_perms_default.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="perms default" title="STANDARD-ERSTELLUNGSBERECHTIGUNGEN"> + <panel label="Standardberechtigungen" name="default permissions"/> + <button label="OK" label_selected="OK" name="ok"/> + <button label="Abbrechen" label_selected="Abbrechen" name="cancel"/> +</floater> diff --git a/indra/newview/skins/default/xui/de/floater_region_restarting.xml b/indra/newview/skins/default/xui/de/floater_region_restarting.xml new file mode 100644 index 0000000000..890391c508 --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_region_restarting.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="region_restarting" title="REGION WIRD NEU GESTARTET"> + <string name="RegionName"> + Die Region, in der Sie sich gerade befinden ([NAME]), wird gleich neu gestartet. + +Wenn Sie in dieser Region bleiben, werden Sie abgemeldet. + </string> + <string name="RestartSeconds"> + Sekunden bis Neustart +[SECONDS] + </string> + <panel name="layout_panel_1"> + <text name="region_name"> + Die Region, in der Sie sich gerade befinden (-längster Regionsname-), wird gleich neu gestartet. + +Wenn Sie in dieser Region bleiben, werden Sie abgemeldet. + </text> + <text name="restart_seconds"> + Sekunden bis Neustart + 32767 + </text> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/de/floater_report_abuse.xml b/indra/newview/skins/default/xui/de/floater_report_abuse.xml index e37e298478..34cb3d1cc2 100755 --- a/indra/newview/skins/default/xui/de/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/de/floater_report_abuse.xml @@ -45,7 +45,7 @@ Objekt: <combo_box.item label="Alter > Erwachsener Einwohner in Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/> <combo_box.item label="Alter > Minderjähriger Einwohner außerhalb Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/> <combo_box.item label="Angriff > Kampf-Sandbox / unsichere Region" name="Assault__Combat_sandbox___unsafe_area"/> - <combo_box.item label="Angriff > Sichere Region" name="Assault__Safe_area"/> + <combo_box.item label="Angriff > Anschießen, Schubsen oder Anrempeln eines anderen Einwohners in einer sicheren Gegend" name="Assault__Safe_area"/> <combo_box.item label="Angriff > Sandbox für Waffentest" name="Assault__Weapons_testing_sandbox"/> <combo_box.item label="Handel > Produkt nicht geliefert oder Dienstleistung nicht erbracht" name="Commerce__Failure_to_deliver_product_or_service"/> <combo_box.item label="Offenlegung > Informationen aus realer Welt" name="Disclosure__Real_world_information"/> @@ -59,22 +59,22 @@ Objekt: <combo_box.item label="Betrug > L$" name="Fraud__L$"/> <combo_box.item label="Betrug > Land" name="Fraud__Land"/> <combo_box.item label="Betrug > Schneeballsystem oder Kettenbrief" name="Fraud__Pyramid_scheme_or_chain_letter"/> - <combo_box.item label="Betrug > US$" name="Fraud__US$"/> + <combo_box.item label="Betrug > L$ oder US$" name="Fraud__US$"/> <combo_box.item label="Belästigung > Werbefarmen / visueller Spam" name="Harassment__Advert_farms___visual_spam"/> <combo_box.item label="Belästigung > Diffamieren von Einzelpersonen/Gruppen" name="Harassment__Defaming_individuals_or_groups"/> <combo_box.item label="Belästigung > Bewegungseinschränkung" name="Harassment__Impeding_movement"/> <combo_box.item label="Belästigung > Sexuelle Belästigung" name="Harassment__Sexual_harassment"/> - <combo_box.item label="Belästigung > Anstiften Dritter zur Missachtung der Nutzungsbedingungen" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> + <combo_box.item label="Nötigung > Böswilliges Störverhalten" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> <combo_box.item label="Belästigung > Beschimpfung" name="Harassment__Verbal_abuse"/> <combo_box.item label="Unanständigkeit > Anstößige Inhalte oder Handlungen in der Öffentlichkeit" name="Indecency__Broadly_offensive_content_or_conduct"/> <combo_box.item label="Unanständigkeit > Anstößiger Avatarname" name="Indecency__Inappropriate_avatar_name"/> - <combo_box.item label="Unanständigkeit > Unangemessener Inhalt oder unangemessenes Verhalten in PG-Region" name="Indecency__Mature_content_in_PG_region"/> + <combo_box.item label="Unsittliches Verhalten > Für Regionseinstufung unpassende Inhalte/Verhaltensweisen" name="Indecency__Mature_content_in_PG_region"/> <combo_box.item label="Unanständigkeit > Unangemessener Inhalt oder unangemessenes Verhalten in moderater Region" name="Indecency__Inappropriate_content_in_Mature_region"/> <combo_box.item label="Urheberrechtsverletzung > Entfernen von Inhalten" name="Intellectual_property_infringement_Content_Removal"/> <combo_box.item label="Urheberrechtsverletzung > CopyBot oder Berechtigungs-Exploit" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/> <combo_box.item label="Intoleranz" name="Intolerance"/> <combo_box.item label="Land > Missbrauch der Sandbox-Ressourcen" name="Land__Abuse_of_sandbox_resources"/> - <combo_box.item label="Land > Unbefugte Nutzung > Objekte/Texturen" name="Land__Encroachment__Objects_textures"/> + <combo_box.item label="Land > Unbefugte Nutzung > Objekte oder Texturen" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="Land > Unbefugte Nutzung > Partikel" name="Land__Encroachment__Particles"/> <combo_box.item label="Land > Unbefugte Nutzung > Bäume/Pflanzen" name="Land__Encroachment__Trees_plants"/> <combo_box.item label="Wetten/Glücksspiel" name="Wagering_gambling"/> diff --git a/indra/newview/skins/default/xui/de/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/de/floater_scene_load_stats.xml new file mode 100644 index 0000000000..dff462a594 --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_scene_load_stats.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Scene Load Statistics" title="STATISTIKEN ZUM LADEN VON SZENEN"> + <button label="Anhalten" name="playpause"/> + <scroll_container name="statistics_scroll"> + <container_view name="statistics_view"> + <stat_view label="Standard" name="basic"> + <stat_bar label="Frame-Pixel-Differenz" name="frame difference"/> + <stat_bar label="Empfangene UDP-Daten" name="bandwidth"/> + <stat_bar label="Paketverlust" name="packet_loss"/> + </stat_view> + <stat_view label="Erweitert" name="advanced"> + <stat_view label="Darstellung" name="render"> + <stat_bar label="Objektanzahl" name="objs"/> + <stat_bar label="Neue Objekte" name="newobjs"/> + <stat_bar label="Objektcache-Trefferrate" name="object_cache_hits"/> + </stat_view> + <stat_view label="Textur" name="texture"> + <stat_bar label="Cache-Trefferrate" name="texture_cache_hits"/> + <stat_bar label="Cache-Leselatenz" name="texture_cache_read_latency"/> + <stat_bar label="Anzahl" name="numimagesstat"/> + <stat_bar label="Rohanzahl" name="numrawimagesstat"/> + </stat_view> + <stat_view label="Netzwerk" name="network"> + <stat_bar label="Paketeingang" name="packetsinstat"/> + <stat_bar label="Paketausgang" name="packetsoutstat"/> + <stat_bar label="Objekte" name="objectdatareceived"/> + <stat_bar label="Textur" name="texturedatareceived"/> + <stat_bar label="Asset" name="assetudpdatareceived"/> + <stat_bar label="Ebenen" name="layersdatareceived"/> + <stat_bar label="Tatsächlicher Eingang" name="messagedatain"/> + <stat_bar label="Tatsächlicher Ausgang" name="messagedataout"/> + <stat_bar label="Ausstehende Vorgänge im VFS" name="vfspendingoperations"/> + </stat_view> + </stat_view> + <stat_view label="Simulator" name="sim"> + <stat_bar label="Objekte" name="simobjects"/> + <stat_bar label="Aktive Objekte" name="simactiveobjects"/> + <stat_bar label="Aktive Skripts" name="simactivescripts"/> + <stat_bar label="Paketeingang" name="siminpps"/> + <stat_bar label="Paketausgang" name="simoutpps"/> + <stat_bar label="Ausstehende Downloads" name="simpendingdownloads"/> + <stat_bar label="Ausstehende Uploads" name="simpendinguploads"/> + <stat_bar label="Gesamtanzahl nicht bestätigter Bytes" name="simtotalunackedbytes"/> + <stat_view label="Zeit (ms)" name="simperf"> + <stat_bar label="Gesamt-Framezeit" name="simframemsec"/> + <stat_bar label="Nettozeit" name="simnetmsec"/> + <stat_bar label="Physikzeit" name="simsimphysicsmsec"/> + <stat_bar label="Simulationszeit" name="simsimothermsec"/> + <stat_bar label="Agentenzeit" name="simagentmsec"/> + <stat_bar label="Bilderzeit" name="simimagesmsec"/> + <stat_bar label="Skriptzeit" name="simscriptmsec"/> + <stat_bar label="Verbleib. Zeit" name="simsparemsec"/> + <stat_view label="Zeitdetails (ms)" name="timedetails"> + <stat_bar label="Physikschritt" name="simsimphysicsstepmsec"/> + <stat_bar label="Phys. Formen aktualisieren" name="simsimphysicsshapeupdatemsec"/> + <stat_bar label="Physik – andere" name="simsimphysicsothermsec"/> + <stat_bar label="Schlafzeit" name="simsleepmsec"/> + <stat_bar label="Pump IO" name="simpumpiomsec"/> + </stat_view> + </stat_view> + </stat_view> + </container_view> + </scroll_container> +</floater> diff --git a/indra/newview/skins/default/xui/de/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/de/floater_script_ed_prefs.xml new file mode 100644 index 0000000000..2f9182980b --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_script_ed_prefs.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_script_colors" title="SKRIPTFARBEN"> + <text name="color_pickers_label"> + Gewünschte Farben auswählen: + </text> + <text name="text_label"> + Text + </text> + <text name="cursor_label"> + Cursor + </text> + <text name="background_label"> + Hintergrund + </text> + <text name="datatype_label"> + Datentypen + </text> + <text name="event_label"> + Events + </text> + <text name="string_literal_label"> + String-Literale + </text> + <text name="constant_label"> + Konstante + </text> + <text name="flow_control_label"> + Flusskontrolle + </text> + <text name="function_label"> + Funktion + </text> + <text name="comment_label"> + Kommentar + </text> + <script_editor name="Script Preview"> + /* Ein Beispielskript */ +default +{ + state_entry() + { + // Kommentar + string greeting = "Hallo"; + llSay(PUBLIC_CHANNEL, greeting); + } +} + </script_editor> +</floater> diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml index 798461c007..51614f1e8d 100755 --- a/indra/newview/skins/default/xui/de/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="FOTO-ANZEIGE"> +<floater name="Snapshot" title="SCHNAPPSCHUSS"> <floater.string name="unknown"> unbekannt </floater.string> @@ -41,25 +41,28 @@ </string> <button name="advanced_options_btn" tool_tip="Erweiterte Optionen"/> <text name="image_res_text"> - [WIDTH] x [HEIGHT] px + [WIDTH]px (Breite) x [HEIGHT]px (Höhe) </text> <text name="file_size_label"> [SIZE] KB </text> <panel name="advanced_options_panel"> - <text name="advanced_options_label"> - ERWEITERTE OPTIONEN - </text> <text name="layer_type_label"> - Aufnahme: + Aufnehmen: </text> <combo_box label="Bildebenen" name="layer_types"> <combo_box.item label="Farben" name="Colors"/> <combo_box.item label="Tiefe" name="Depth"/> </combo_box> - <check_box label="Schnittstelle" name="ui_check"/> + <check_box label="Benutzeroberfläche" name="ui_check"/> <check_box label="HUDs" name="hud_check"/> <check_box label="Standbild (Vollbild)" name="freeze_frame_check"/> <check_box label="Automatisch aktualisieren" name="auto_snapshot_check"/> + <text name="filter_list_label"> + Filter: + </text> + <combo_box label="Filter" name="filters_combobox" tool_tip="Bildfilter"> + <combo_box.item label="Kein Filter" name="NoFilter"/> + </combo_box> </panel> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_stats.xml b/indra/newview/skins/default/xui/de/floater_stats.xml index f3239f73c7..993316134a 100755 --- a/indra/newview/skins/default/xui/de/floater_stats.xml +++ b/indra/newview/skins/default/xui/de/floater_stats.xml @@ -4,17 +4,21 @@ <container_view name="statistics_view" width="280"> <stat_view label="Basic" name="basic"> <stat_bar label="FPS" name="fps"/> - <stat_bar label="Bandbreite" name="bandwidth"/> + <stat_bar label="Empfangene UDP-Daten" name="bandwidth"/> <stat_bar label="Paketverlust" name="packet_loss"/> <stat_bar label="Ping Sim" name="ping"/> </stat_view> <stat_view label="Erweitert" name="advanced"> <stat_view label="Darstellung" name="render"> - <stat_bar label="Pro Frame gezeichnete KTris" name="ktrisframe"/> - <stat_bar label="Pro Sek. gezeichnete KTris" name="ktrissec"/> - <stat_bar label="Objektanzahl" name="objs"/> + <stat_bar label="KTris pro Frame" name="ktrisframe"/> + <stat_bar label="KTris pro Sekunden" name="ktrissec"/> + <stat_bar label="Objekte gesamt" name="totalobjs"/> + <stat_bar label="Zwischengespeicherte Objekte" name="cachedobjs"/> <stat_bar label="Neue Objekte" name="newobjs"/> <stat_bar label="Objektcache-Trefferrate" name="object_cache_hits"/> + <stat_bar label="Durchgeführte Okklusionsabfragen" name="occlusion_queries"/> + <stat_bar label="Okkludierte Objekte" name="occluded"/> + <stat_bar label="Nicht okkludierte Objekte" name="unoccluded"/> </stat_view> <stat_view label="Textur" name="texture"> <stat_bar label="Cache-Trefferrate" name="texture_cache_hits"/> @@ -26,15 +30,32 @@ <stat_bar label="Rohsp" name="rawmemstat"/> <stat_bar label="Zugeteilter Sp" name="glboundmemstat"/> </stat_view> + <stat_view label="Speichernutzung" name="memory"> + <stat_bar label="LLTrace" name="LLTrace"/> + <stat_bar label="UI" name="LLView"/> + <stat_bar label="Schriftarten" name="LLFontFreetype"/> + <stat_bar label="Inventar" name="LLInventoryObject"/> + <stat_bar label="Viewer-Objekte" name="LLViewerObject"/> + <stat_bar label="Octree-Gruppendaten" name="LLViewerOctreeGroup"/> + <stat_bar label="Octree-Daten" name="LLViewerOctreeEntry"/> + <stat_bar label="Viewer-Objekt-Cache" name="LLVOCacheEntry"/> + <stat_bar label="Zeichnungsobjekte" name="LLDrawable"/> + <stat_bar label="Gesichtsdaten" name="LLFace"/> + <stat_bar label="Zeichnungsinfos" name="LLDrawInfo"/> + <stat_bar label="Texturdaten" name="LLTexture"/> + <stat_bar label="Bilddaten" name="LLImage"/> + <stat_bar label="GL-Bilddaten" name="LLImageGL"/> + <stat_bar label="Vertex-Buffer" name="LLVertexBuffer"/> + </stat_view> <stat_view label="Netzwerk" name="network"> <stat_bar label="Paketeingang" name="packetsinstat"/> <stat_bar label="Paketausgang" name="packetsoutstat"/> - <stat_bar label="Objekte" name="objectkbitstat"/> - <stat_bar label="Textur" name="texturekbitstat"/> - <stat_bar label="Bestand" name="assetkbitstat"/> - <stat_bar label="Ebenen" name="layerskbitstat"/> - <stat_bar label="Tatsächlicher Eingang" name="actualinkbitstat"/> - <stat_bar label="Tatsächlicher Ausgang" name="actualoutkbitstat"/> + <stat_bar label="Objekte" name="objectdatareceived"/> + <stat_bar label="Textur" name="texturedatareceived"/> + <stat_bar label="Asset" name="assetudpdatareceived"/> + <stat_bar label="Ebenen" name="layersdatareceived"/> + <stat_bar label="Tatsächlicher Eingang" name="messagedatain"/> + <stat_bar label="Tatsächlicher Ausgang" name="messagedataout"/> <stat_bar label="Ausstehende Vorgänge im VFS" name="vfspendingoperations"/> </stat_view> </stat_view> @@ -64,8 +85,8 @@ <stat_bar label="Paketausgang" name="simoutpps"/> <stat_bar label="Ausstehende Downloads" name="simpendingdownloads"/> <stat_bar label="Ausstehende Uploads" name="simpendinguploads"/> - <stat_bar label="Gesamtanzahl „Unacked" Bytes" name="simtotalunackedbytes"/> - <stat_view label="Zeit (ms)" name="simperf"> + <stat_bar label="Gesamtmenge unbestätigter Daten" name="simtotalunackedbytes"/> + <stat_view label="Zeit" name="simperf"> <stat_bar label="Gesamtzeit Frame" name="simframemsec"/> <stat_bar label="Netto-Zeit" name="simnetmsec"/> <stat_bar label="Physik-Zeit" name="simsimphysicsmsec"/> @@ -74,7 +95,7 @@ <stat_bar label="Bilder-Zeit" name="simimagesmsec"/> <stat_bar label="Skript-Zeit" name="simscriptmsec"/> <stat_bar label="Verbleib. Zeit" name="simsparemsec"/> - <stat_view label="Zeitdetails (ms)" name="timedetails"> + <stat_view label="Zeitdetails" name="timedetails"> <stat_bar label="Physik-Schritt" name="simsimphysicsstepmsec"/> <stat_bar label="Phys. Formen aktualisieren" name="simsimphysicsshapeupdatemsec"/> <stat_bar label="Physik – andere" name="simsimphysicsothermsec"/> diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml index 6634a4bd90..7dd5938601 100755 --- a/indra/newview/skins/default/xui/de/floater_tools.xml +++ b/indra/newview/skins/default/xui/de/floater_tools.xml @@ -72,7 +72,7 @@ <check_box label="Verknüpfte Teile bearbeiten" name="checkbox edit linked parts"/> <button label="Link" name="link_btn" width="30"/> <button label="Verknüpfung auflösen" name="unlink_btn" width="126"/> - <check_box label="" name="checkbox uniform"/> + <check_box label="Beide Seiten dehnen" name="checkbox uniform"/> <text label="Beide Seiten dehnen" name="checkbox uniform label"> Beide Seiten dehnen </text> diff --git a/indra/newview/skins/default/xui/de/floater_twitter.xml b/indra/newview/skins/default/xui/de/floater_twitter.xml new file mode 100644 index 0000000000..a79a5d3cac --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_twitter.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_twitter" title="TWITTER"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="ERSTELLEN" name="panel_twitter_photo"/> + <panel label="KONTO" name="panel_twitter_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Fehler + </text> + <text name="connection_loading_text"> + Laden... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/de/menu_avatar_icon.xml b/indra/newview/skins/default/xui/de/menu_avatar_icon.xml index c036cf5515..ad47f1d37d 100755 --- a/indra/newview/skins/default/xui/de/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/de/menu_avatar_icon.xml @@ -2,6 +2,7 @@ <menu name="Avatar Icon Menu"> <menu_item_call label="Profil anzeigen" name="Show Profile"/> <menu_item_call label="IM senden..." name="Send IM"/> + <menu_item_call label="Teleport anfordern" name="Request Teleport"/> <menu_item_call label="Freund hinzufügen..." name="Add Friend"/> <menu_item_call label="Freund entfernen..." name="Remove Friend"/> </menu> diff --git a/indra/newview/skins/default/xui/de/menu_conversation.xml b/indra/newview/skins/default/xui/de/menu_conversation.xml index bdfa66c23b..0a7995198e 100644 --- a/indra/newview/skins/default/xui/de/menu_conversation.xml +++ b/indra/newview/skins/default/xui/de/menu_conversation.xml @@ -29,4 +29,5 @@ <menu_item_call label="Alle stummschalten" name="ModerateVoiceMute"/> <menu_item_call label="Stummschaltung für alle aufheben" name="ModerateVoiceUnmute"/> </context_menu> + <menu_item_call label="Mitglied verbannen" name="BanMember"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/de/menu_inventory.xml b/indra/newview/skins/default/xui/de/menu_inventory.xml index cd2fca313e..d838f736f8 100755 --- a/indra/newview/skins/default/xui/de/menu_inventory.xml +++ b/indra/newview/skins/default/xui/de/menu_inventory.xml @@ -70,6 +70,7 @@ <menu_item_call label="Wiedergeben/Abspielen" name="Sound Play"/> <menu_item_call label="SLurl kopieren" name="url_copy"/> <menu_item_call label="Landmarken-Info" name="About Landmark"/> + <menu_item_call label="Auf Karte anzeigen" name="show_on_map"/> <menu_item_call label="Inworld abspielen" name="Animation Play"/> <menu_item_call label="Lokal abspielen" name="Animation Audition"/> <menu_item_call label="Instant Message senden" name="Send Instant Message"/> diff --git a/indra/newview/skins/default/xui/de/menu_login.xml b/indra/newview/skins/default/xui/de/menu_login.xml index 62358cc5a8..329ea20179 100755 --- a/indra/newview/skins/default/xui/de/menu_login.xml +++ b/indra/newview/skins/default/xui/de/menu_login.xml @@ -5,7 +5,15 @@ <menu_item_call label="[APP_NAME] schließen" name="Quit"/> </menu> <menu label="Hilfe" name="Help"> - <menu_item_call label="[SECOND_LIFE]-Hilfe" name="Second Life Help"/> + <menu_item_call label="Anweisungen..." name="How To"/> + <menu_item_call label="Kurzanleitung" name="Quickstart"/> + <menu_item_call label="Knowledge Base" name="Knowledge Base"/> + <menu_item_call label="Wiki" name="Wiki"/> + <menu_item_call label="Community-Foren" name="Community Forums"/> + <menu_item_call label="Support-Portal" name="Support portal"/> + <menu_item_call label="[SECOND_LIFE]-Neuigkeiten" name="Second Life News"/> + <menu_item_call label="[SECOND_LIFE]-Blogs" name="Second Life Blogs"/> + <menu_item_call label="Fehler melden" name="Report Bug"/> <menu_item_call label="INFO ÜBER [APP_NAME]" name="About Second Life"/> </menu> <menu_item_check label="Debug-Menü anzeigen" name="Show Debug Menu"/> diff --git a/indra/newview/skins/default/xui/de/menu_object.xml b/indra/newview/skins/default/xui/de/menu_object.xml index de2b409678..dbf78f406b 100755 --- a/indra/newview/skins/default/xui/de/menu_object.xml +++ b/indra/newview/skins/default/xui/de/menu_object.xml @@ -21,6 +21,7 @@ <context_menu label="Verwalten" name="Remove"> <menu_item_call label="Missbrauch melden" name="Report Abuse..."/> <menu_item_call label="Ignorieren" name="Object Mute"/> + <menu_item_call label="Freischalten" name="Object Unmute"/> <menu_item_call label="Zurückgeben" name="Return..."/> </context_menu> <menu_item_call label="Nehmen" name="Pie Object Take"/> diff --git a/indra/newview/skins/default/xui/de/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/de/menu_teleport_history_item.xml index ff8fb0b181..1d7e3059c0 100755 --- a/indra/newview/skins/default/xui/de/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/de/menu_teleport_history_item.xml @@ -2,5 +2,5 @@ <context_menu name="Teleport History Item Context Menu"> <menu_item_call label="Teleportieren" name="Teleport"/> <menu_item_call label="Weitere Informationen" name="More Information"/> - <menu_item_call label="In Zwischenablage kopieren" name="CopyToClipboard"/> + <menu_item_call label="SLurl kopieren" name="CopyToClipboard"/> </context_menu> diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml index be5d4891d7..c9fad9c9d3 100755 --- a/indra/newview/skins/default/xui/de/menu_viewer.xml +++ b/indra/newview/skins/default/xui/de/menu_viewer.xml @@ -36,6 +36,9 @@ <menu_item_check label="Chat in der Nähe..." name="Nearby Chat"/> <menu_item_check label="Sprechen" name="Speak"/> <menu_item_check label="Unterhaltungsprotokoll..." name="Conversation Log..."/> + <menu_item_call label="Facebook..." name="Facebook"/> + <menu_item_call label="Twitter..." name="Twitter"/> + <menu_item_call label="Flickr..." name="Flickr"/> <menu label="Voice-Morphing" name="VoiceMorphing"> <menu_item_check label="Kein Voice-Morphing" name="NoVoiceMorphing"/> <menu_item_check label="Vorschau..." name="Preview"/> @@ -72,11 +75,11 @@ <menu_item_check label="Menü „Erweitert“" name="Show Advanced Menu"/> </menu> <menu label="Sonne" name="Sun"> - <menu_item_call label="Sonnenaufgang" name="Sunrise"/> - <menu_item_call label="Mittag" name="Noon"/> - <menu_item_call label="Sonnenuntergang" name="Sunset"/> - <menu_item_call label="Mitternacht" name="Midnight"/> - <menu_item_call label="Regionseinstellungen verwenden" name="Use Region Settings"/> + <menu_item_check label="Sonnenaufgang" name="Sunrise"/> + <menu_item_check label="Mittag" name="Noon"/> + <menu_item_check label="Sonnenuntergang" name="Sunset"/> + <menu_item_check label="Mitternacht" name="Midnight"/> + <menu_item_check label="Regionseinstellungen verwenden" name="Use Region Settings"/> </menu> <menu label="Umwelt-Editor" name="Environment Editor"> <menu_item_call label="Umwelt-Einstellungen..." name="Environment Settings"/> @@ -150,7 +153,8 @@ <menu_item_check label="An Raster ausrichten" name="Snap to Grid"/> <menu_item_call label="Objekt-XY an Raster ausrichten" name="Snap Object XY to Grid"/> <menu_item_call label="Auswahl für Raster verwenden" name="Use Selection for Grid"/> - <menu_item_call label="Rasteroptionen" name="Grid Options"/> + <menu_item_call label="Rasteroptionen..." name="Grid Options"/> + <menu_item_call label="Standard-Berechtigungen einstellen..." name="Set default permissions"/> </menu> <menu label="Hochladen" name="Upload"> <menu_item_call label="Bild ([COST] L$)..." name="Upload Image"/> @@ -158,15 +162,12 @@ <menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/> <menu_item_call label="Modell..." name="Upload Model"/> <menu_item_call label="Mehrfach-Upload ([COST] L$ pro Datei)..." name="Bulk Upload"/> - <menu_item_call label="Hochlade-Berechtigungen (Standard) festlegen" name="perm prefs"/> </menu> <menu_item_call label="Rückgängig" name="Undo"/> <menu_item_call label="Wiederholen" name="Redo"/> </menu> <menu label="Hilfe" name="Help"> <menu_item_call label="Anweisungen..." name="How To"/> - <menu_item_call label="[SECOND_LIFE]-Hilfe" name="Second Life Help"/> - <menu_item_call label="Benutzerhandbuch" name="User’s guide"/> <menu_item_call label="Knowledge Base" name="Knowledge Base"/> <menu_item_call label="Wiki" name="Wiki"/> <menu_item_call label="Community-Foren" name="Community Forums"/> @@ -188,6 +189,7 @@ <menu label="Performance Tools" name="Performance Tools"> <menu_item_call label="Lag-Anzeige" name="Lag Meter"/> <menu_item_check label="Statistikleiste" name="Statistics Bar"/> + <menu_item_call label="Statistiken zum Laden von Szenen" name="Scene Load Statistics"/> <menu_item_check label="Zuggewicht für Avatare anzeigen" name="Avatar Rendering Cost"/> </menu> <menu label="Hervorhebung und Sichtbarkeit" name="Highlighting and Visibility"> @@ -250,6 +252,7 @@ <menu_item_check label="Schnelle Timer" name="Fast Timers"/> <menu_item_check label="Speicher" name="Memory"/> <menu_item_check label="Szenestatistiken" name="Scene Statistics"/> + <menu_item_check label="Monitor zum Laden von Szenen" name="Scene Loading Monitor"/> <menu_item_call label="Debug-Konsole für Texturabruffehler" name="Texture Fetch Debug Console"/> <menu_item_call label="Info zu Region in Fenster Fehler beseitigen" name="Region Info to Debug Console"/> <menu_item_call label="Gruppeninfo in Fenster Fehler beseitigen" name="Group Info to Debug Console"/> @@ -286,6 +289,7 @@ <menu_item_check label="Periodic Slow Frame" name="Periodic Slow Frame"/> <menu_item_check label="Frame-Test" name="Frame Test"/> <menu_item_call label="Rahmenprofil" name="Frame Profile"/> + <menu_item_call label="Benchmark" name="Benchmark"/> </menu> <menu label="Metadaten darstellen" name="Render Metadata"> <menu_item_check label="Bonding Boxes" name="Bounding Boxes"/> @@ -303,7 +307,9 @@ <menu_item_check label="Detailstufeninfos" name="LOD Info"/> <menu_item_check label="Konstruktionswarteschlange" name="Build Queue"/> <menu_item_check label="Lichter" name="Lights"/> + <menu_item_check label="Partikel" name="Particles"/> <menu_item_check label="Gelenkpunkte" name="Collision Skeleton"/> + <menu_item_check label="Gelenke" name="Joints"/> <menu_item_check label="Raycast" name="Raycast"/> <menu_item_check label="Windvektoren" name="Wind Vectors"/> <menu_item_check label="Komplexität beim Rendern" name="rendercomplexity"/> @@ -336,6 +342,7 @@ <menu_item_check label="Angehängte Lichter rendern" name="Render Attached Lights"/> <menu_item_check label="Angehängte Partikel rendern" name="Render Attached Particles"/> <menu_item_check label="Leucht-Objekte schweben lassen" name="Hover Glow Objects"/> + <menu_item_call label="Cache sofort leeren" name="Cache Clear"/> </menu> <menu label="Netzwerk" name="Network"> <menu_item_check label="Agent pausieren" name="AgentPause"/> @@ -368,7 +375,6 @@ <menu_item_call label="Fokus ausgeben" name="Dump Focus Holder"/> <menu_item_call label="Ausgewählte Objektinfo drucken" name="Print Selected Object Info"/> <menu_item_call label="Agent-Info drucken" name="Print Agent Info"/> - <menu_item_check label="Regions-Debug-Konsole" name="Region Debug Console"/> <menu_item_check label="Fehler in SelectMgr beseitigen" name="Debug SelectMgr"/> <menu_item_check label="Fehler in Klicks beseitigen" name="Debug Clicks"/> <menu_item_check label="Debug-Ansichten" name="Debug Views"/> diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index b3ae98f633..2fa5005d15 100755 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -114,13 +114,13 @@ Weitere Informationen finden Sie im [[MARKETPLACE_IMPORTS_URL] Fehlerprotokoll]. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="OutboxImportFailed"> - Übertragung fehlgeschlagen + Übertragung fehlgeschlagen mit Fehler „[ERROR_CODE]“ Aufgrund eines System- oder Netzwerkfehlers wurden keine Ordner an den Marktplatz übertragen. Versuchen Sie es später erneut. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="OutboxInitFailed"> - Marktplatzinitialisierung fehlgeschlagen + Marktplatzinitialisierung fehlgeschlagen mit Fehler „[ERROR_CODE]“ Marktplatzinitialisierung aufgrund eines System- oder Netzwerkfehlers fehlgeschlagen. Versuchen Sie es später erneut. <usetemplate name="okbutton" yestext="OK"/> @@ -216,6 +216,22 @@ Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen? Der Rolle „[ROLE_NAME]“ diese Fähigkeit zuweisen? <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/> </notification> + <notification name="AssignBanAbilityWarning"> + Sie sind im Begriff, der Rolle „[ROLE_NAME]“ die Fähigkeit „[ACTION_NAME]“ zuzuweisen. + + *ACHTUNG* +Jedem Mitglied in einer Rolle mit dieser Fähigkeit werden auch die Fähigkeiten „[ACTION_NAME_2]“ und „[ACTION_NAME_3]“ zugewiesen. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="RemoveBanAbilityWarning"> + Sie sind im Begriff, die Fähigkeit „[ACTION_NAME]“ aus der Rolle „[ROLE_NAME]“ zu entfernen. + + *ACHTUNG* +Durch Entfernen dieser Fähigkeit werden die Fähigkeiten „[ACTION_NAME_2]“ und „[ACTION_NAME_3]“ NICHT entfernt. + +Wenn diese Rolle nicht mehr diese Fähigkeiten haben soll, deaktivieren Sie sie bitte umgehend. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="EjectGroupMemberWarning"> Sie sind dabei, [AVATAR_NAME] aus der Gruppe hinauszuwerfen. <usetemplate ignoretext="Hinauswerfen eines einzelnen Gruppenmitglieds bestätigen" name="okcancelignore" notext="Abbrechen" yestext="Hinauswerfen"/> @@ -1591,6 +1607,14 @@ Diese Gruppe verlassen? Sie können die Gruppe nicht verlassen, da Sie der letzte Besitzer der Gruppe sind. Weisen Sie die Besitzerrolle zuerst einem anderen Mitglied zu. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="GroupDepartError"> + Kann Gruppe nicht verlassen: [reason]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="GroupDepart"> + Sie haben die Gruppe „[group_name]“ verlassen. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="ConfirmKick"> Möchten Sie WIRKLICH alle Benutzer aus dem Grid werfen? <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Alle Benutzer hinauswerfen"/> @@ -1744,6 +1768,10 @@ womit Sie die Höchstgrenze von [LIMIT] überschreiten. Sind Sie sicher, dass Sie zu <nolink>[LOCATION]</nolink> teleportieren möchten? <usetemplate ignoretext="Bestätigen, dass ich zu einer Landmarke teleportieren möchte" name="okcancelignore" notext="Abbrechen" yestext="Teleportieren"/> </notification> + <notification name="TeleportViaSLAPP"> + Möchten Sie wirklich zu <nolink>[LOCATION]</nolink> teleportieren? + <usetemplate ignoretext="Bestätigen, dass ich via SLAPP teleportieren möchte" name="okcancelignore" notext="Abbrechen" yestext="Teleportieren"/> + </notification> <notification name="TeleportToPick"> Nach [PICK] teleportieren? <usetemplate ignoretext="Bestätigen, dass ich zu einer Position in Auswahl teleportieren möchte" name="okcancelignore" notext="Abbrechen" yestext="Teleportieren"/> @@ -1954,6 +1982,9 @@ Tausende Regionen werden verändert und der Spaceserver wird dadurch stark belas <notification name="ProblemAddingEstateManager"> Es gibt Probleme beim Hinzufügen eines neuen Grundbesitzverwalters. Bei mindestens einem Grundbesitz ist die Verwalterliste voll. </notification> + <notification name="ProblemAddingEstateBanManager"> + Grundbesitzer oder Grundstücksverwalter kann nicht auf die Bannliste gesetzt werden. + </notification> <notification name="ProblemAddingEstateGeneric"> Problem beim Hinzufügen zu dieser Grundbesitzliste. Bei mindestens einem Grundbesitz ist die Liste voll. </notification> @@ -2467,6 +2498,12 @@ Wählen Sie eine kleinere Landfläche. <notification name="SystemMessage"> [MESSAGE] </notification> + <notification name="FlickrConnect"> + [MESSAGE] + </notification> + <notification name="TwitterConnect"> + [MESSAGE] + </notification> <notification name="PaymentReceived"> [MESSAGE] </notification> @@ -3038,13 +3075,13 @@ Details finden Sie in der Protokolldatei. Regionsfähigkeit „[CAPABILITY]“ konnte nicht abgerufen werden. </notification> <notification name="ShareItemsConfirmation"> - Möchten Sie wirklich die folgenden Objekte: + Möchten Sie wirklich die folgenden Artikel: <nolink>[ITEMS]</nolink> -für folgende Einwohner freigeben: +mit den folgenden Einwohnern teilen: -[RESIDENTS] +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> </notification> <notification name="ShareFolderConfirmation"> @@ -3056,7 +3093,7 @@ Möchten Sie wirklich die folgenden Artikel: mit den folgenden Einwohnern teilen: -[RESIDENTS] +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> </notification> <notification name="ItemsShared"> @@ -3510,10 +3547,6 @@ Warten Sie kurz und versuchen Sie es noch einmal. <notification name="EjectComingSoon"> Sie nicht hier nicht mehr zugelassen und haben [EJECT_TIME] Sekunden Zeit, um zu gehen. </notification> - <notification name="NoEnterServerFull"> - Sie können diese Region nicht betreten, da -der Server voll ist. - </notification> <notification name="SaveBackToInvDisabled"> Erneutes Speichern im Inventar ist deaktiviert. </notification> @@ -3703,6 +3736,9 @@ der Server voll ist. <notification name="LinkFailedTooMuchPhysics"> Objekt verwendet zu viele Physikressourcen – seine Dynamik wurde deaktiviert. </notification> + <notification name="EstateManagerFailedllTeleportHome"> + Das Objekt „[OBJECT_NAME]“ auf [SLURL] kann Grundstücksverwalter nicht nach Hause teleportieren. + </notification> <notification name="TeleportedHomeByObjectOnParcel"> Sie wurden vom Objekt „[OBJECT_NAME]“ auf der Parzelle „[PARCEL_NAME]“ nach Hause teleportiert </notification> @@ -3893,13 +3929,18 @@ der Server voll ist. Auswahl enthält nicht genügend gemietete Parzellen zum Zusammenlegen. </notification> <notification name="CantDivideLandMultipleParcelsSelected"> - Land kann nicht geteilt werden.\nMehr als eine Parzelle ist ausgewählt.\nWählen Sie ein kleineres Stück Land aus. + Land kann nicht geteilt werden. +Mehr als eine Parzelle ist ausgewählt. +Wählen Sie eine kleinere Landfläche aus. </notification> <notification name="CantDivideLandCantFindParcel"> - Land kann nicht geteilt werden.\nParzelle nicht auffindbar.\nMelden Sie das Problem über „Hilfe“ -> „Fehler melden“... + Land kann nicht geteilt werden. +Parzelle kann nicht gefunden werden. +Bitte melden Sie den Fehler über „Hilfe“ -> „Fehler melden“. </notification> <notification name="CantDivideLandWholeParcelSelected"> - Land kann nicht geteilt werden. Die gesamte Parzelle ist ausgewählt.\nWählen Sie ein kleineres Stück Land aus. + Land kann nicht geteilt werden. Die gesamte Parzelle ist ausgewählt. +Wählen Sie eine kleinere Landfläche aus. </notification> <notification name="LandHasBeenDivided"> Land wurde geteilt. @@ -4039,4 +4080,12 @@ der Server voll ist. Dateien können nicht verschoben werden. Vorheriger Pfad wurde wiederhergestellt. <usetemplate ignoretext="Dateien können nicht verschoben werden. Vorheriger Pfad wurde wiederhergestellt." name="okignore" yestext="OK"/> </notification> + <notification name="DefaultObjectPermissions"> + Die Standardberechtigungen konnten aus folgendem Grund nicht gespeichert werden: [REASON]. Versuchen Sie später, die Standardberechtigungen einzustellen. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="ChatHistoryIsBusyAlert"> + Chatverlaufsdatei ist noch mit vorheriger Operation beschäftigt. Versuchen Sie es in ein paar Minuten noch einmal oder chatten Sie mit einer anderen Person. + <usetemplate name="okbutton" yestext="OK"/> + </notification> </notifications> diff --git a/indra/newview/skins/default/xui/de/panel_facebook_account.xml b/indra/newview/skins/default/xui/de/panel_facebook_account.xml new file mode 100644 index 0000000000..caa5f55186 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_facebook_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_account"> + <string name="facebook_connected" value="Sie sind mit Facebook verbunden als:"/> + <string name="facebook_disconnected" value="Nicht mit Facebook verbunden"/> + <text name="account_caption_label"> + Nicht mit Facebook verbunden. + </text> + <panel name="panel_buttons"> + <button label="Verbinden..." name="connect_btn"/> + <button label="Trennen" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Anweisungen zum Posten auf Facebook] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_facebook_friends.xml b/indra/newview/skins/default/xui/de/panel_facebook_friends.xml new file mode 100644 index 0000000000..9712d681c7 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_facebook_friends.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_friends"> + <string name="facebook_friends_empty" value="Sie haben gegenwärtig keine Facebook-Freunde, die gleichzeitig Einwohner von Second Life sind. Laden Sie Ihre Facebook-Freunde ein, Second Life beizutreten!"/> + <string name="facebook_friends_no_connected" value="Sie sind gegenwärtig nicht mit Facebook verbunden. Um eine Verbindung herzustellen und diese Funktion zu aktivieren, gehen Sie zur Registerkarte „Konto“."/> + <accordion name="friends_accordion"> + <accordion_tab name="tab_second_life_friends" title="SL-Freunde"/> + <accordion_tab name="tab_suggested_friends" title="Diese Personen als SL-Freunde hinzufügen"/> + </accordion> + <text name="facebook_friends_status"> + Nicht mit Facebook verbunden. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_facebook_photo.xml b/indra/newview/skins/default/xui/de/panel_facebook_photo.xml new file mode 100644 index 0000000000..a1aabcd29c --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_facebook_photo.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Bildauflösung"> + <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1200x630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Bildfilter"> + <combo_box.item label="Kein Filter" name="NoFilter"/> + </combo_box> + <button label="Aktualisieren" name="new_snapshot_btn" tool_tip="Zum Aktualisieren klicken"/> + <button label="Vorschau" name="big_preview_btn" tool_tip="Klicken, um Vorschau ein-/auszuschalten"/> + <text name="caption_label"> + Kommentar (optional): + </text> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Posten" name="post_photo_btn"/> + <button label="Abbrechen" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_facebook_place.xml b/indra/newview/skins/default/xui/de/panel_facebook_place.xml new file mode 100644 index 0000000000..0f556565b4 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_facebook_place.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_place"> + <layout_stack name="stack_place"> + <layout_panel name="place_detail_panel"> + <text name="place_caption_label"> + Details zu Ihrem aktuellen Standort: + </text> + </layout_panel> + <layout_panel name="place_map_panel"> + <check_box initial_value="false" label="" name="add_place_view_cb"/> + </layout_panel> + <layout_panel name="place_button_panel"> + <button label="Posten" name="post_place_btn"/> + <button label="Abbrechen" name="cancel_place_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_facebook_status.xml b/indra/newview/skins/default/xui/de/panel_facebook_status.xml new file mode 100644 index 0000000000..437243c360 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_facebook_status.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_status"> + <layout_stack name="stack_status"> + <layout_panel name="status_detail_panel"> + <text name="status_caption_label"> + Was machst du gerade? + </text> + </layout_panel> + <layout_panel name="status_button_panel"> + <button label="Posten" name="post_status_btn"/> + <button label="Abbrechen" name="cancel_status_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_flickr_account.xml b/indra/newview/skins/default/xui/de/panel_flickr_account.xml new file mode 100644 index 0000000000..416761f0da --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_flickr_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_account"> + <string name="flickr_connected" value="Sie sind mit Flickr verbunden als:"/> + <string name="flickr_disconnected" value="Nicht mit Flickr verbunden"/> + <text name="account_caption_label"> + Nicht mit Flickr verbunden. + </text> + <panel name="panel_buttons"> + <button label="Verbinden..." name="connect_btn"/> + <button label="Trennen" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Anweisungen zum Posten auf Flickr] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_flickr_photo.xml b/indra/newview/skins/default/xui/de/panel_flickr_photo.xml new file mode 100644 index 0000000000..1627f405c5 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_flickr_photo.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Bildauflösung"> + <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Bildfilter"> + <combo_box.item label="Kein Filter" name="NoFilter"/> + </combo_box> + <button label="Aktualisieren" name="new_snapshot_btn" tool_tip="Zum Aktualisieren klicken"/> + <button label="Vorschau" name="big_preview_btn" tool_tip="Klicken, um Vorschau ein-/auszuschalten"/> + <text name="title_label"> + Titel: + </text> + <text name="description_label"> + Beschreibung: + </text> + <check_box initial_value="true" label="SL-Standort am Ende der Beschreibung hinzufügen" name="add_location_cb"/> + <text name="tags_label"> + Markierungen: + </text> + <text name="tags_help_label"> + Markierungen durch Leerzeichen trennen. +Für Markierungen, die aus mehreren Wörtern bestehen, "" verwenden. + </text> + <combo_box name="rating_combobox" tool_tip="Flickr-Inhaltseinstufung"> + <combo_box.item label="Sichere Flickr-Einstufung" name="SafeRating"/> + <combo_box.item label="Moderate Flickr-Einstufung" name="ModerateRating"/> + <combo_box.item label="Beschränkte Flickr-Einstufung" name="RestrictedRating"/> + </combo_box> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Hochladen" name="post_photo_btn"/> + <button label="Abbrechen" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/de/panel_group_bulk_ban.xml new file mode 100644 index 0000000000..fb1d89f08a --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_group_bulk_ban.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Einwohner verbannen" name="bulk_ban_panel"> + <panel.string name="loading"> + (wird geladen...) + </panel.string> + <panel.string name="ban_selection_too_large"> + Gruppenverbannungen nicht gesendet: zu viele Einwohner ausgewählt. Gruppenverbannungen sind auf 100 pro Anfrage beschränkt. + </panel.string> + <panel.string name="ban_not_permitted"> + Gruppenverbannung nicht gesendet: Sie sind nicht zur Verwaltung der Bannliste berechtigt. + </panel.string> + <panel.string name="ban_limit_fail"> + Gruppenverbannung nicht gesendet: Ihre Gruppe hat die Höchstzahl möglicher Verbannungen erreicht. + </panel.string> + <panel.string name="partial_ban"> + Einige Gruppenverbannungen wurden nicht gesendet: +[REASONS] + </panel.string> + <panel.string name="ban_failed"> + Gruppenverbannungen nicht gesendet: +[REASONS] + </panel.string> + <panel.string name="residents_already_banned"> + - Folgende(r) Einwohner ist/sind bereits verbannt: [RESIDENTS] + </panel.string> + <panel.string name="ban_limit_reached"> + - Höchstzahl Verbannungen erreicht; folgende Agenten wurden nicht verbannt: [RESIDENTS]. + </panel.string> + <panel.string name="cant_ban_yourself"> + - Sie können sich nicht selbst aus einer Gruppe verbannen. + </panel.string> + <text name="help_text"> + Sie können mehrere Einwohner auswählen, um sie aus Ihrer Gruppe zu verbannen. Klicken Sie hierzu auf „Einwohnerliste öffnen“. + </text> + <button label="Einwohnerliste öffnen" name="add_button"/> + <name_list name="banned_agent_list" tool_tip="Halten Sie zur Mehrfachauswahl die Strg-Taste gedrückt und klicken Sie auf die Namen."/> + <button label="Ausgewählte Einwohner aus Liste entfernen" name="remove_button" tool_tip="Dadurch werden die oben ausgewählten Einwohner aus der Bannliste entfernt."/> + <button label="Einwohner verbannen" name="ban_button"/> + <button label="Abbrechen" name="cancel_button"/> + <string name="GroupBulkBan"> + Gruppenverbannung + </string> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml index bf4d44af52..1775394ecd 100755 --- a/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml @@ -20,7 +20,7 @@ <layout_panel name="group_accordions"> <accordion name="groups_accordion"> <accordion_tab name="group_general_tab" title="Allgemein"/> - <accordion_tab name="group_roles_tab" title="Rollen"/> + <accordion_tab name="group_roles_tab" title="Rollen und Mitglieder"/> <accordion_tab name="group_notices_tab" title="Mitteilungen"/> <accordion_tab name="group_land_tab" title="Land/Kapital"/> </accordion> diff --git a/indra/newview/skins/default/xui/de/panel_group_invite.xml b/indra/newview/skins/default/xui/de/panel_group_invite.xml index c32d2fe4bf..d67eaa662c 100755 --- a/indra/newview/skins/default/xui/de/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/de/panel_group_invite.xml @@ -22,7 +22,7 @@ Wählen Sie eine Rolle aus: </text> <combo_box name="role_name" tool_tip="Wählen Sie aus der Liste der Rollen, die Sie an Mitglieder vergeben dürfen."/> - <button label="Einladungen versenden" name="ok_button"/> + <button label="Einladungen versenden" name="invite_button"/> <button label="Abbrechen" name="cancel_button"/> <string name="GroupInvitation"> Gruppeneinladung diff --git a/indra/newview/skins/default/xui/de/panel_group_roles.xml b/indra/newview/skins/default/xui/de/panel_group_roles.xml index f297d32a91..2f3268164c 100755 --- a/indra/newview/skins/default/xui/de/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/de/panel_group_roles.xml @@ -21,16 +21,18 @@ um mehrere Mitglieder auszuwählen. <name_list.columns label="Mitglied" name="name" relative_width="0.30"/> <name_list.columns label="Übereignung" name="donated" relative_width="0.33"/> <name_list.columns label="Status" name="online"/> + <name_list.columns label="Titel" name="title"/> </name_list> <button label="Einladen" name="member_invite"/> <button label="Hinauswerfen" name="member_eject"/> + <button label="Mitglied(er) verbannen" name="member_ban"/> </panel> <panel label="ROLLEN" name="roles_sub_tab"> <panel.string name="help_text"> Rollen haben einen Titel und umfassen bestimmte -Fähigkeiten. Mitglieder können mehrere -Rollen innehaben. Eine Gruppe kann bis zu 10 Rollen -definieren, darunter 'Jeder ' und 'Eigentümer '. + Fähigkeiten. Mitglieder können mehrere + Rollen innehaben. Eine Gruppe kann bis zu 10 Rollen + aufweisen, darunter „Jeder“ und „Eigentümer“. </panel.string> <panel.string name="cant_delete_role"> Die Rollen „Jeder" und „Eigentuemer" sind besondere Rollen und können nicht gelöscht werden. @@ -56,13 +58,28 @@ definieren, darunter 'Jeder ' und 'Eigentümer '. <panel label="FÄHIGKEITEN" name="actions_sub_tab" tool_tip="Sie können eine Beschreibung der Fähigkeit anzeigen und welche Rollen bzw. Mitglieder über diese Fähigkeit verfügen."> <panel.string name="help_text"> Fähigkeiten verleihen Mitgliedern in Rollen bestimmte -Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten. + Rechte in einer Gruppe. Es gibt viele verschiedene Fähigkeiten. </panel.string> <filter_editor label="Fähigkeiten filtern" name="filter_input"/> <scroll_list name="action_list" tool_tip="Eine Fähigkeit auswählen, um mehr Details anzuzeigen."> <scroll_list.columns label="" name="action"/> </scroll_list> </panel> + <panel label="VERBANNTE EINWOHNER" name="banlist_sub_tab" tool_tip="Verbannte Einwohner in dieser Gruppe anzeigen."> + <panel.string name="help_text"> + Einwohner auf der Bannliste können nicht der Gruppe beitreten. + </panel.string> + <panel.string name="ban_count_template"> + Anzahl Verbannungen: [COUNT]/[LIMIT] + </panel.string> + <name_list name="ban_list"> + <name_list.columns label="Einwohner" name="name"/> + <name_list.columns label="Datum der Verbannung" name="ban_date"/> + </name_list> + <button label="Einwohner verbannen" name="ban_create" tool_tip="Einwohner Ihrer Gruppe verbannen"/> + <button label="Verbannung(en) entfernen" name="ban_delete" tool_tip="Verbannung für bestimmte Einwohner in Ihrer Gruppe aufheben"/> + <button name="ban_refresh" tool_tip="Bannliste aktualisieren"/> + </panel> </tab_container> <panel name="members_footer"> <text name="static"> diff --git a/indra/newview/skins/default/xui/de/panel_login.xml b/indra/newview/skins/default/xui/de/panel_login.xml index 8cc467185c..816f22178c 100755 --- a/indra/newview/skins/default/xui/de/panel_login.xml +++ b/indra/newview/skins/default/xui/de/panel_login.xml @@ -1,46 +1,27 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php?lang=de </panel.string> - <layout_stack name="login_widgets"> - <layout_panel name="login"> - <text name="log_in_text"> - ANMELDEN - </text> - <text name="username_text"> - Benutzername: - </text> - <combo_box name="username_combo" tool_tip="Bei der Registrierung gewählter Benutzername wie „berndschmidt12“ oder „Liebe Sonne“"/> - <text name="password_text"> - Kennwort: - </text> - </layout_panel> - <layout_panel name="start_location_panel"> - <text name="start_location_text"> - Hier starten: - </text> - <combo_box name="start_location_combo"> - <combo_box.item label="Mein letzter Standort" name="MyLastLocation"/> - <combo_box.item label="Mein Zuhause" name="MyHome"/> - <combo_box.item label="<Region eingeben>" name="Typeregionname"/> - </combo_box> - </layout_panel> - <layout_panel name="links_login_panel"> - <text name="login_help"> - Brauchen Sie Hilfe beim Anmelden? - </text> + <layout_stack name="ui_stack"> + <layout_panel name="ui_container"> + <combo_box label="Benutzername" name="username_combo" tool_tip="Bei der Registrierung gewählter Benutzername wie „berndschmidt12“ oder „Liebe Sonne“"/> + <line_editor label="Kennwort" name="password_edit"/> + <check_box label="Details speichern" name="remember_check"/> <text name="forgot_password_text"> - Benutzernamen oder Kennwort vergessen? + Kennwort vergessen </text> <button label="Anmelden" name="connect_btn"/> - <check_box label="Kennwort speichern" name="remember_check"/> - </layout_panel> - <layout_panel name="links"> - <text name="create_account_text"> - IHR KONTO ERSTELLEN + <text name="At_My_Last_Location_Label"> + bei letztem Ort </text> - <button label="Jetzt starten" name="create_new_account_btn"/> + <combo_box label="Meine Lieblingsorte" name="start_location_combo"> + <combo_box.item label="Mein Zuhause" name="MyHome"/> + </combo_box> + <button label="Anmelden" name="connect_favorite_btn"/> + <line_editor label="Ort eingeben" name="location_edit"/> + <button label="Anmelden" name="connect_location_btn"/> + <combo_box label="Grid auswählen" name="server_combo"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_login_first.xml b/indra/newview/skins/default/xui/de/panel_login_first.xml new file mode 100644 index 0000000000..44637d5159 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_login_first.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_login"> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php?lang=de + </panel.string> + <layout_stack name="logo_stack"> + <layout_panel name="parent_panel2"> + <layout_stack name="widget_stack"> + <layout_panel name="widget_container"> + <combo_box label="Benutzername" name="username_combo" tool_tip="Bei der Registrierung gewählter Benutzername wie „berndschmidt12“ oder „Liebe Sonne“"/> + <line_editor label="Kennwort" name="password_edit"/> + <button label="Anmelden" name="connect_btn"/> + <check_box label="Details speichern" name="remember_check"/> + <text name="forgot_password_text"> + Kennwort vergessen + </text> + </layout_panel> + </layout_stack> + </layout_panel> + <layout_panel name="parent_panel3"> + <layout_stack name="images_stack"> + <layout_panel name="images_container"> + <text name="image_caption_left"> + Ihr erster Schritt ist Learning Island. Suchen Sie die Pforte! + </text> + <text name="image_caption_right"> + Erkunden Sie dann Social Island und lernen Sie andere Einwohner kennen! + </text> + </layout_panel> + </layout_stack> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_postcard_message.xml b/indra/newview/skins/default/xui/de/panel_postcard_message.xml index 6eeef8af71..b34dc776de 100755 --- a/indra/newview/skins/default/xui/de/panel_postcard_message.xml +++ b/indra/newview/skins/default/xui/de/panel_postcard_message.xml @@ -9,13 +9,11 @@ <text name="subject_label"> Betreff: </text> - <line_editor label="Betreff hier eingeben." name="subject_form"/> + <line_editor label="Betreff hier rein." name="subject_form"/> <text name="msg_label"> Nachricht: </text> <text_editor name="msg_form"> Nachricht hier eingeben. </text_editor> - <button label="Abbrechen" name="cancel_btn"/> - <button label="Senden" name="send_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_postcard_settings.xml b/indra/newview/skins/default/xui/de/panel_postcard_settings.xml index c1a1c0cc46..e6d3b7de66 100755 --- a/indra/newview/skins/default/xui/de/panel_postcard_settings.xml +++ b/indra/newview/skins/default/xui/de/panel_postcard_settings.xml @@ -7,17 +7,10 @@ <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="Benutzerdefiniert" name="Custom"/> </combo_box> - <layout_stack name="postcard_image_params_ls"> - <layout_panel name="postcard_image_size_lp"> - <spinner label="Breite" name="postcard_snapshot_width"/> - <spinner label="Höhe" name="postcard_snapshot_height"/> - <check_box label="Seitenverhältnis beibehalten" name="postcard_keep_aspect_check"/> - </layout_panel> - <layout_panel name="postcard_image_format_quality_lp"> - <slider label="Bildqualität" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="Breite x Höhe" name="postcard_snapshot_width"/> + <check_box label="Seitenverhältnis beibehalten" name="postcard_keep_aspect_check"/> + <slider label="Qualität" name="image_quality_slider"/> + <text name="image_quality_level"> + ([QLVL]) + </text> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml index 8a5c175f2f..60e4fb19a7 100755 --- a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml @@ -28,4 +28,5 @@ <check_box label="Bei Anmeldung Rasterauswahl anzeigen" name="show_grid_selection_check"/> <check_box label="Menü „Erweitert“ anzeigen" name="show_advanced_menu_check"/> <check_box label="Menü „Entwickler“ anzeigen" name="show_develop_menu_check"/> + <button label="Standard-Erstellungsberechtigungen" name="default_creation_permissions"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_general.xml b/indra/newview/skins/default/xui/de/panel_preferences_general.xml index 4e453b6969..2587ea0ced 100755 --- a/indra/newview/skins/default/xui/de/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_general.xml @@ -30,14 +30,10 @@ <combo_box.item label="Generell und Moderat" name="Desired_Mature"/> <combo_box.item label="Generell" name="Desired_PG"/> </combo_box> - <text name="start_location_textbox"> - Startstandort: + <check_box label="Lieblingsstandorte auf dem Anmeldebildschirm anzeigen" name="favorites_on_login_check"/> + <text name="favorites_check_extra_text"> + (Andere, die Ihren Computer benutzen, sehen sie ebenfalls) </text> - <combo_box name="start_location_combo"> - <combo_box.item label="Mein letzter Standort" name="MyLastLocation" tool_tip="Als Standardeinstellung in letztem Standort anmelden."/> - <combo_box.item label="Mein Zuhause" name="MyHome" tool_tip="Als Standardeinstellung in Zuhauseposition anmelden."/> - </combo_box> - <check_box initial_value="true" label="Beim Anmelden anzeigen" name="show_location_checkbox"/> <text name="name_tags_textbox"> Avatarnamen: </text> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml index afde50b981..7ac6708321 100755 --- a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml @@ -7,11 +7,11 @@ <text name="cache_size_label_l"> (Standorte, Bilder, Web, Suchverlauf) </text> - <check_box label="Zeigen Sie mein Profil Informationen in Suchergebnisse" name="online_searchresults"/> + <check_box label="Meine Profilinfos in Suchergebnissen anzeigen" name="online_searchresults"/> <check_box label="Nur Freunde und Gruppen wissen, dass ich online bin" name="online_visibility"/> <check_box label="Nur Freunde und Gruppen können mich anrufen oder mir eine IM schicken" name="voice_call_friends_only_check"/> <check_box label="Mikrofon ausschalten, wenn Anrufe beendet werden" name="auto_disengage_mic_check"/> - <check_box label="Meine Lieblingslandmarken bei Anmeldung anzeigen (im Dropdown-Menü „Hier anfangen“)" name="favorites_on_login_check" top_pad="15"/> + <check_box label="Meine Lieblingslandmarken bei Anmeldung anzeigen (im Dropdown-Menü „Hier anfangen“)" name="favorites_on_login_check" top_pad="15"/> <text name="Logs:"> Chatprotokolle: </text> diff --git a/indra/newview/skins/default/xui/de/panel_region_debug.xml b/indra/newview/skins/default/xui/de/panel_region_debug.xml index a03a0b8b7b..d4b0ed907e 100755 --- a/indra/newview/skins/default/xui/de/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/de/panel_region_debug.xml @@ -7,11 +7,8 @@ unbekannt </text> <check_box label="Skripts deaktivieren" name="disable_scripts_check" tool_tip="Skripts in dieser Region deaktivieren"/> - <button label="?" name="disable_scripts_help"/> <check_box label="Kollisionen deaktivieren" name="disable_collisions_check" tool_tip="Nicht-Avatar-Kollisionen in dieser Region deaktivieren"/> - <button label="?" name="disable_collisions_help"/> <check_box label="Physik deaktivieren" name="disable_physics_check" tool_tip="Physik in dieser Region deaktivieren"/> - <button label="?" name="disable_physics_help"/> <button label="Übernehmen" name="apply_btn"/> <text name="objret_text_lbl" width="110"> Objekt zurückgeben @@ -31,10 +28,8 @@ <check_box label="In jeder Region auf diesem Grundbesitz" name="return_estate_wide" tool_tip="Es werden die Objekte in allen Regionen dieses Grundbesitzes zurückgegeben"/> <button label="Zurückgeben" name="return_btn" width="90"/> <button label="Top-Kollisionsobjekte..." name="top_colliders_btn" tool_tip="Liste der Objekte mit den meisten potenziellen Kollisionen"/> - <button label="?" name="top_colliders_help"/> - <button label="Top-Skripts..." name="top_scripts_btn" tool_tip="Zeigt eine Liste der Objekte an, die die meiste Zeit benötigen, um Skripts auszuführen."/> - <button label="?" name="top_scripts_help"/> <button label="Region neu starten" name="restart_btn" tool_tip="2-Minuten-Countdown und Region neu starten"/> - <button label="?" name="restart_help"/> + <button label="Top-Skripts..." name="top_scripts_btn" tool_tip="Zeigt eine Liste der Objekte an, die die meiste Zeit benötigen, um Skripts auszuführen."/> <button label="Neustart abbrechen" name="cancel_restart_btn" tool_tip="Regionsneustart abbrechen"/> + <button label="Regions-Debug-Konsole" name="region_debug_console_btn" tool_tip="Regions-Debug-Konsole öffnen"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_region_general.xml b/indra/newview/skins/default/xui/de/panel_region_general.xml index f383be992b..6324e90029 100755 --- a/indra/newview/skins/default/xui/de/panel_region_general.xml +++ b/indra/newview/skins/default/xui/de/panel_region_general.xml @@ -20,12 +20,12 @@ </text> <check_box label="Terraformen blockieren" name="block_terraform_check"/> <check_box label="Fliegen blockieren" name="block_fly_check"/> + <check_box label="Überfliegen von Parzellen blockieren" name="block_fly_over_check" tool_tip="Zugangsprüfungen nach oben ausdehnen, um Überfliegen einer Parzelle zu verhindern"/> <check_box label="Schaden zulassen" name="allow_damage_check"/> <check_box label="Stoßen beschränken" name="restrict_pushobject"/> <check_box label="Landwiederverkauf zulassen" name="allow_land_resell_check"/> <check_box label="Landumverteilung zulassen" name="allow_parcel_changes_check"/> <check_box label="Landanzeige in Suche blockieren" name="block_parcel_search_check" tool_tip="Diese Region und ihre Parzellen in Suchergebnissen anzeigen"/> - <check_box label="Netzobjekte zulassen" name="mesh_rez_enabled_check" tool_tip="Anderen das Rezzen von Netzobjekten in dieser Region gestatten"/> <spinner label="Avatar-Limit" name="agent_limit_spin"/> <spinner label="Objektbonus" name="object_bonus_spin"/> <text label="Inhaltseinstufung" name="access_text"> diff --git a/indra/newview/skins/default/xui/de/panel_script_ed.xml b/indra/newview/skins/default/xui/de/panel_script_ed.xml index d688bedd5c..8975cd40f8 100755 --- a/indra/newview/skins/default/xui/de/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/de/panel_script_ed.xml @@ -24,6 +24,7 @@ <menu_item_call label="Alle Änderungen zurücksetzen" name="Revert All Changes"/> <menu_item_call label="Aus Datei laden..." name="LoadFromFile"/> <menu_item_call label="In Datei speichern..." name="SaveToFile"/> + <menu_item_call label="Farben..." name="Colors"/> </menu> <menu label="Bearbeiten" name="Edit"> <menu_item_call label="Rückgängig" name="Undo"/> @@ -41,9 +42,9 @@ <menu_item_call label="Schlüsselwort-Hilfe" name="Keyword Help..."/> </menu> </menu_bar> - <text_editor name="Script Editor"> + <script_editor name="Script Editor"> Wird geladen... - </text_editor> + </script_editor> <combo_box label="Einfügen..." name="Insert..."/> <button label="Speichern" label_selected="Speichern" name="Save_btn"/> <button label="Bearbeiten..." name="Edit_btn"/> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml index 10827ce6f2..d13f56ed3d 100755 --- a/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_inventory"> <text name="title"> - In meinem Inventar speichern + Inventar </text> <text name="hint_lbl"> Das Speichern eines Bilds in Ihrem Inventar kostet [UPLOAD_COST] L$. Um das Bild als Textur zu speichern, wählen Sie eines der quadratischen Formate aus. @@ -13,8 +13,7 @@ <combo_box.item label="Groß (512x512)" name="Large(512x512)"/> <combo_box.item label="Benutzerdefiniert" name="Custom"/> </combo_box> - <spinner label="Breite" name="inventory_snapshot_width"/> - <spinner label="Höhe" name="inventory_snapshot_height"/> + <spinner label="Breite x Höhe" name="inventory_snapshot_width"/> <check_box label="Seitenverhältnis beibehalten" name="inventory_keep_aspect_check"/> <button label="Abbrechen" name="cancel_btn"/> <button label="Speichern" name="save_btn"/> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_local.xml b/indra/newview/skins/default/xui/de/panel_snapshot_local.xml index 3aeae80388..53e78ba290 100755 --- a/indra/newview/skins/default/xui/de/panel_snapshot_local.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_local.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_local"> <text name="title"> - Auf meinem Computer speichern + Festplatte </text> <combo_box label="Auflösung" name="local_size_combo"> <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> @@ -13,24 +13,17 @@ <combo_box.item label="1600x1200" name="1600x1200"/> <combo_box.item label="Benutzerdefiniert" name="Custom"/> </combo_box> - <layout_stack name="local_image_params_ls"> - <layout_panel name="local_image_size_lp"> - <spinner label="Breite" name="local_snapshot_width"/> - <spinner label="Höhe" name="local_snapshot_height"/> - <check_box label="Seitenverhältnis beibehalten" name="local_keep_aspect_check"/> - </layout_panel> - <layout_panel name="local_image_format_quality_lp"> - <combo_box label="Format" name="local_format_combo"> - <combo_box.item label="PNG (verlustfrei)" name="PNG"/> - <combo_box.item label="JPEG" name="JPEG"/> - <combo_box.item label="BMP (verlustfrei)" name="BMP"/> - </combo_box> - <slider label="Bildqualität" name="image_quality_slider"/> - <text name="image_quality_level"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner label="Breite x Höhe" name="local_snapshot_width"/> + <check_box label="Seitenverhältnis beibehalten" name="local_keep_aspect_check"/> + <combo_box label="Format" name="local_format_combo"> + <combo_box.item label="PNG (verlustfrei)" name="PNG"/> + <combo_box.item label="JPEG" name="JPEG"/> + <combo_box.item label="BMP (verlustfrei)" name="BMP"/> + </combo_box> + <slider label="Qualität" name="image_quality_slider"/> + <text name="image_quality_level"> + ([QLVL]) + </text> <button label="Abbrechen" name="cancel_btn"/> <flyout_button label="Speichern" name="save_btn" tool_tip="Bild als Datei speichern"> <flyout_button.item label="Speichern" name="save_item"/> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml index e1d8a5dc6d..7ec22adc4c 100755 --- a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml @@ -1,7 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_options"> - <button label="In meinem Profil posten" name="save_to_profile_btn"/> - <button label="E-Mail" name="save_to_email_btn"/> - <button label="In meinem Inventar speichern ([AMOUNT] L$)" name="save_to_inventory_btn"/> - <button label="Auf meinem Computer speichern" name="save_to_computer_btn"/> + <button label="Ins Profil hochladen" name="save_to_profile_btn"/> + <button label="Per E-Mail senden" name="save_to_email_btn"/> + <button label="Im Inventar speichern" name="save_to_inventory_btn"/> + <button label="Auf Festplatte speichern" name="save_to_computer_btn"/> + <text name="send_to_facebook_textbox"> + Senden an: [secondlife:/// Facebook] + </text> + <text name="send_to_twitter_textbox"> + [secondlife:/// Twitter] + </text> + <text name="send_to_flickr_textbox"> + [secondlife:/// Flickr] + </text> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml index c9afe86d7f..ead56f2885 100755 --- a/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml @@ -12,6 +12,10 @@ <text name="title"> E-Mail </text> - <button label="Nachricht" name="message_btn"/> - <button label="Einstellungen" name="settings_btn"/> + <tab_container name="postcard_tabs"> + <panel name="panel_postcard_message" label="Nachricht"/> + <panel name="panel_postcard_settings" label="Einstellungen"/> + </tab_container> + <button name="cancel_btn" label="Abbrechen"/> + <button name="send_btn" label="Absenden"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml index 8d1c52dea8..0f21edd1b6 100755 --- a/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml @@ -1,28 +1,21 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_profile"> <text name="title"> - In meinem Profil posten + Profil </text> <combo_box label="Auflösung" name="profile_size_combo"> - <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> - <combo_box.item label="640x480" name="640x480"/> - <combo_box.item label="800x600" name="800x600"/> - <combo_box.item label="1024x768" name="1024x768"/> - <combo_box.item label="Benutzerdefiniert" name="Custom"/> + <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="Benutzerdefiniert" name="Custom"/> </combo_box> - <layout_stack name="profile_image_params_ls"> - <layout_panel name="profile_image_size_lp"> - <spinner label="Breite" name="profile_snapshot_width"/> - <spinner label="Höhe" name="profile_snapshot_height"/> - <check_box label="Seitenverhältnis beibehalten" name="profile_keep_aspect_check"/> - </layout_panel> - <layout_panel name="profile_image_metadata_lp"> - <text name="caption_label"> - Bildunterschrift: - </text> - <check_box initial_value="true" label="Ort einschließen" name="add_location_cb"/> - </layout_panel> - </layout_stack> + <spinner label="Breite x Höhe" name="profile_snapshot_width"/> + <check_box label="Seitenverhältnis beibehalten" name="profile_keep_aspect_check"/> + <text name="caption_label"> + Bildunterschrift: + </text> + <check_box initial_value="true" label="Ort einschließen" name="add_location_cb"/> <button label="Abbrechen" name="cancel_btn"/> <button label="Posten" name="post_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/de/panel_teleport_history_item.xml index 4b57aa69b6..5a402d02a1 100755 --- a/indra/newview/skins/default/xui/de/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/de/panel_teleport_history_item.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="teleport_history_item"> <text name="region" value="..."/> + <text name="timestamp" value="..."/> <button name="profile_btn" tool_tip="Objektinfo anzeigen"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_twitter_account.xml b/indra/newview/skins/default/xui/de/panel_twitter_account.xml new file mode 100644 index 0000000000..f2cbf3eb55 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_twitter_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_account"> + <string name="twitter_connected" value="Sie sind mit Twitter verbunden als:"/> + <string name="twitter_disconnected" value="Nicht mit Twitter verbunden"/> + <text name="account_caption_label"> + Nicht mit Twitter verbunden. + </text> + <panel name="panel_buttons"> + <button label="Verbinden..." name="connect_btn"/> + <button label="Trennen" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Anweisungen zum Posten auf Twitter] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_twitter_photo.xml b/indra/newview/skins/default/xui/de/panel_twitter_photo.xml new file mode 100644 index 0000000000..89c4b98ffc --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_twitter_photo.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="text_panel"> + <text name="status_label"> + Was ist los? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="SL-Standort hinzufügen" name="add_location_cb"/> + <check_box initial_value="true" label="Foto hinzufügen" name="add_photo_cb"/> + </layout_panel> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Bildauflösung"> + <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Bildfilter"> + <combo_box.item label="Kein Filter" name="NoFilter"/> + </combo_box> + <button label="Aktualisieren" name="new_snapshot_btn" tool_tip="Zum Aktualisieren klicken"/> + <button label="Vorschau" name="big_preview_btn" tool_tip="Klicken, um Vorschau ein-/auszuschalten"/> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Tweeten" name="post_photo_btn"/> + <button label="Abbrechen" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/de/role_actions.xml b/indra/newview/skins/default/xui/de/role_actions.xml index 3e9d406e5f..d834fc57ca 100755 --- a/indra/newview/skins/default/xui/de/role_actions.xml +++ b/indra/newview/skins/default/xui/de/role_actions.xml @@ -3,6 +3,7 @@ <action_set description="Diese Fähigkeiten ermöglichen das Hinzufügen und Entfernen von Mitgliedern sowie den Beitritt ohne Einladung." name="Membership"> <action description="Personen in diese Gruppe einladen" longdescription="Leute in diese Gruppe mit der Schaltfläche „Einladen“ im Abschnitt „Rollen“ > Registerkarte „Mitglieder“ in die Gruppe einladen." name="member invite" value="1"/> <action description="Mitglieder aus dieser Gruppe werfen" longdescription="Leute aus dieser Gruppe mit der Schaltfläche „Hinauswerfen“ im Abschnitt „Rollen“ > Registerkarte „Mitglieder“ aus der Gruppe werfen. Ein Eigentümer kann jeden, außer einen anderen Eigentümer, ausschließen. Wenn Sie kein Eigentümer sind, können Sie ein Mitglied nur dann aus der Gruppe werfen, wenn es die Rolle Jeder inne hat, jedoch KEINE andere Rolle. Um Mitgliedern Rollen entziehen zu können, müssen Sie über die Fähigkeit „Mitgliedern Rollen entziehen“ verfügen." name="member eject" value="2"/> + <action description="Bannliste verwalten" longdescription="Gruppenmitglied das Verbannen/Zulassen von Einwohnern aus dieser Gruppe gestatten." name="allow ban" value="51"/> <action description="„Registrierung offen“ aktivieren/deaktivieren und „Beitrittsgebühr“ ändern." longdescription="„Registrierung offen“ aktivieren, um damit neue Mitglieder ohne Einladung beitreten können, und die „Beitrittsgebühr“ im Abschnitt „Allgemein“ ändern." name="member options" value="3"/> </action_set> <action_set description="Diese Fähigkeiten ermöglichen das Hinzufügen, Entfernen und Ändern von Gruppenrollen, das Zuweisen und Entfernen von Rollen und das Zuweisen von Fähigkeiten zu Rollen." name="Roles"> diff --git a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml index 2585c5dc90..94c3c75254 100755 --- a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml @@ -28,12 +28,12 @@ <button label="Profil" name="info_btn" tool_tip="Objektprofil anzeigen"/> </layout_panel> <layout_panel name="share_btn_lp"> - <button label="Teilen" name="share_btn" tool_tip="Inventarobjekt teilen"/> + <button label="Freigeben" name="share_btn" tool_tip="Inventarobjekt freigeben"/> </layout_panel> <layout_panel name="shop_btn_lp"> <button label="Einkaufen" name="shop_btn" tool_tip="Marktplatz-Webseite öffnen"/> <button label="Anziehen" name="wear_btn" tool_tip="Ausgewähltes Outfit tragen"/> - <button label="Wiedergeben" name="play_btn"/> + <button label="Spielen" name="play_btn"/> <button label="Teleportieren" name="teleport_btn" tool_tip="Zu ausgewähltem Standort teleportieren"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index 082febd709..d4ce7b3fc3 100755 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -37,6 +37,45 @@ <string name="StartupRequireDriverUpdate"> Grafikinitialisierung fehlgeschlagen. Bitte aktualisieren Sie Ihren Grafiktreiber. </string> + <string name="AboutHeader"> + [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL]) +[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]] + </string> + <string name="AboutCompiler"> + Kompiliert mit [COMPILER], Version [COMPILER_VERSION] + </string> + <string name="AboutPosition"> + Sie befinden sich an [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] in [REGION] auf <nolink>[HOSTNAME]</nolink> ([HOSTIP]) +SLURL: <nolink>[SLURL]</nolink> +(globale Koordinaten [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1]) +[SERVER_VERSION] +[SERVER_RELEASE_NOTES_URL] + </string> + <string name="AboutSystem"> + CPU: [CPU] +Speicher: [MEMORY_MB] MB +Betriebssystemversion: [OS_VERSION] +Grafikkartenhersteller: [GRAPHICS_CARD_VENDOR] +Grafikkarte: [GRAPHICS_CARD] + </string> + <string name="AboutDriver"> + Windows-Grafiktreiberversion: [GRAPHICS_DRIVER_VERSION] + </string> + <string name="AboutLibs"> + OpenGL-Version: [OPENGL_VERSION] + +libcurl-Version: [LIBCURL_VERSION] +J2C-Decoderversion: [J2C_VERSION] +Audiotreiberversion: [AUDIO_DRIVER_VERSION] +Qt-Webkit-Version: [QT_WEBKIT_VERSION] +Voice-Server-Version: [VOICE_VERSION] + </string> + <string name="AboutTraffic"> + Paketverlust: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1] %) + </string> + <string name="ErrorFetchingServerReleaseNotesURL"> + Fehler beim Abrufen der URL für die Server-Versionshinweise. + </string> <string name="ProgressRestoring"> Wird wiederhergestellt... </string> @@ -296,6 +335,75 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. <string name="TestingDisconnect"> Verbindungsabbruch wird getestet </string> + <string name="SocialFlickrConnecting"> + Verbinden mit Flickr... + </string> + <string name="SocialFlickrPosting"> + Posten... + </string> + <string name="SocialFlickrDisconnecting"> + Flickr-Verbindung wird getrennt... + </string> + <string name="SocialFlickrErrorConnecting"> + Problem beim Verbinden mit Flickr + </string> + <string name="SocialFlickrErrorPosting"> + Problem beim Posten auf Flickr + </string> + <string name="SocialFlickrErrorDisconnecting"> + Problem beim Trennen der Flickr-Verbindung + </string> + <string name="SocialTwitterConnecting"> + Verbinden mit Twitter... + </string> + <string name="SocialTwitterPosting"> + Posten... + </string> + <string name="SocialTwitterDisconnecting"> + Twitter-Verbindung wird getrennt... + </string> + <string name="SocialTwitterErrorConnecting"> + Problem beim Verbinden mit Twitter + </string> + <string name="SocialTwitterErrorPosting"> + Problem beim Posten auf Twitter + </string> + <string name="SocialTwitterErrorDisconnecting"> + Problem beim Trennen der Twitter-Verbindung + </string> + <string name="BlackAndWhite"> + Schwarzweiß + </string> + <string name="Colors1970"> + Farben der Siebziger Jahre + </string> + <string name="Intense"> + Intensiv + </string> + <string name="Newspaper"> + Zeitungspapier + </string> + <string name="Sepia"> + Sepia + </string> + <string name="Spotlight"> + Spotlight + </string> + <string name="Video"> + Video + </string> + <string name="Autocontrast"> + Autokontrast + </string> + <string name="LensFlare"> + Blendenfleck + </string> + <string name="Miniature"> + Miniatur + </string> + <string name="Toycamera"> + Spielzeugkamera + </string> <string name="TooltipPerson"> Person </string> @@ -847,6 +955,12 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. <string name="use_texture"> Textur verwenden </string> + <string name="manip_hint1"> + Zum Einrasten Mauscursor + </string> + <string name="manip_hint2"> + über Lineal bewegen + </string> <string name="texture_loading"> Wird geladen... </string> @@ -937,15 +1051,15 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. <string name="ControlYourCamera"> Kamerasteuerung </string> + <string name="TeleportYourAgent"> + Sie teleportieren + </string> <string name="NotConnected"> Nicht verbunden </string> <string name="AgentNameSubst"> (Sie) </string> - <string name="TeleportYourAgent"> - Sie teleportieren - </string> <string name="JoinAnExperience"> Bei einem Erlebnis mitmachen </string> @@ -1267,8 +1381,7 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. <string name="InventoryNoTexture"> Sie haben keine Kopie dieser Textur in Ihrem Inventar. </string> - <string name="Unconstrained">keines</string> - <string name="InventoryInboxNoItems"> + <string name="InventoryInboxNoItems"> Einkäufe aus dem Marktplatz erscheinen hier. Sie können diese dann zur Verwendung in Ihr Inventar ziehen. </string> <string name="MarketplaceURL"> @@ -1300,6 +1413,18 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. <string name="InventoryOutboxNoItems"> Ziehen Sie Ordner in dien Bereich und klicken Sie auf „In Marktplatz übertragen“, um sie im [[MARKETPLACE_DASHBOARD_URL] Marktplatz] zum Verkauf anzubieten. </string> + <string name="InventoryOutboxInitializingTitle"> + Marktplatz wird initialisiert. + </string> + <string name="InventoryOutboxInitializing"> + Wir greifen auf Ihr Konto im [[MARKETPLACE_CREATE_STORE_URL] Marktplatz-Laden] zu. + </string> + <string name="InventoryOutboxErrorTitle"> + Marktplatzfehler. + </string> + <string name="InventoryOutboxError"> + Der [[MARKETPLACE_CREATE_STORE_URL] Marktplatz-Laden] gibt Fehler zurück. + </string> <string name="Marketplace Error None"> Keine Fehler </string> @@ -1327,6 +1452,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. <string name="Open landmarks"> Landmarken öffnen </string> + <string name="Unconstrained"> + Variabel + </string> <string name="no_transfer" value=" (kein Transferieren)"/> <string name="no_modify" value=" (kein Bearbeiten)"/> <string name="no_copy" value=" (kein Kopieren)"/> @@ -1727,6 +1855,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. <string name="CompileQueueDownloadedCompiling"> Heruntergeladen, wird kompiliert </string> + <string name="CompileQueueServiceUnavailable"> + Kein Skriptkompilierungsdienst verfügbar + </string> <string name="CompileQueueScriptNotFound"> Skript wurde auf Server nicht gefunden. </string> @@ -4027,6 +4158,12 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_ <string name="share_alert"> Objekte aus dem Inventar hier her ziehen </string> + <string name="flickr_post_success"> + Sie haben auf Flickr gepostet. + </string> + <string name="twitter_post_success"> + Sie haben auf Twitter gepostet. + </string> <string name="no_session_message"> (IM-Session nicht vorhanden) </string> @@ -4483,6 +4620,9 @@ Missbrauchsbericht <string name="LocalEstimateUSD"> [AMOUNT] US$ </string> + <string name="Group Ban"> + Gruppenverbannung + </string> <string name="Membership"> Mitgliedschaft </string> @@ -4905,6 +5045,12 @@ Setzen Sie den Editorpfad in Anführungszeichen <string name="Command_Destinations_Label"> Ziele </string> + <string name="Command_Facebook_Label"> + Facebook + </string> + <string name="Command_Flickr_Label"> + Flickr + </string> <string name="Command_Gestures_Label"> Gesten </string> @@ -4953,6 +5099,9 @@ Setzen Sie den Editorpfad in Anführungszeichen <string name="Command_Speak_Label"> Sprechen </string> + <string name="Command_Twitter_Label"> + Twitter + </string> <string name="Command_View_Label"> Kamerasteuerungen </string> @@ -4983,6 +5132,12 @@ Setzen Sie den Editorpfad in Anführungszeichen <string name="Command_Destinations_Tooltip"> Ziele von Interesse </string> + <string name="Command_Facebook_Tooltip"> + Auf Facebook posten + </string> + <string name="Command_Flickr_Tooltip"> + Auf Flickr hochladen + </string> <string name="Command_Gestures_Tooltip"> Gesten für Ihren Avatar </string> @@ -5031,6 +5186,9 @@ Setzen Sie den Editorpfad in Anführungszeichen <string name="Command_Speak_Tooltip"> Über Ihr Mikrofon mit Leuten in der Nähe sprechen </string> + <string name="Command_Twitter_Tooltip"> + Twitter + </string> <string name="Command_View_Tooltip"> Kamerawinkel ändern </string> diff --git a/indra/newview/skins/default/xui/en/floater_facebook.xml b/indra/newview/skins/default/xui/en/floater_facebook.xml index 4535b9084e..2ea34fb751 100644 --- a/indra/newview/skins/default/xui/en/floater_facebook.xml +++ b/indra/newview/skins/default/xui/en/floater_facebook.xml @@ -2,7 +2,6 @@ <floater positioning="cascading" can_close="true" - can_resize="true" help_topic="floater_facebook" layout="topleft" name="floater_facebook" @@ -10,23 +9,15 @@ single_instance="true" reuse_instance="true" title="POST TO FACEBOOK" - min_height="501" + min_height="462" min_width="304" - height="482" - width="304"> - <panel - height="482" - width="304" - visible="true" - name="background" - follows="all" - top="0" - left="0"> + height="462" + width="272"> <tab_container name="tabs" tab_group="1" - tab_min_width="70" - tab_height="30" + tab_min_width="64" + tab_height="21" tab_position="top" top="7" height="437" @@ -57,23 +48,19 @@ follows="all" label="FRIENDS" name="panel_facebook_friends"/> - <panel + <!--<panel filename="panel_facebook_account.xml" class="llfacebookaccountpanel" follows="all" label="ACCOUNT" - name="panel_facebook_account"/> + name="panel_facebook_account"/>--> </tab_container> - <panel - name="connection_status_panel" - follows="left|bottom|right" - height="24"> <text name="connection_error_text" type="string" follows="left|bottom|right" - top="5" - left="9" + bottom="-5" + left="10" width="250" height="20" wrap="true" @@ -88,14 +75,14 @@ height="24" width="24" name="connection_loading_indicator" - top="2" - left="9" + top_delta="-2" + left="10" visible="true"/> <text name="connection_loading_text" type="string" follows="left|bottom|right" - top="5" + top_delta="2" left_pad="5" width="250" height="20" @@ -106,6 +93,4 @@ font="SansSerif"> Loading... </text> - </panel> - </panel> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_flickr.xml b/indra/newview/skins/default/xui/en/floater_flickr.xml index 1a9ffd0489..24de3ddd8d 100644 --- a/indra/newview/skins/default/xui/en/floater_flickr.xml +++ b/indra/newview/skins/default/xui/en/floater_flickr.xml @@ -10,11 +10,11 @@ single_instance="true" reuse_instance="true" title="UPLOAD TO FLICKR" - height="622" - width="304"> + height="590" + width="272"> <panel - height="622" - width="304" + height="590" + width="272" visible="true" name="background" follows="all" @@ -24,10 +24,11 @@ name="tabs" tab_group="1" tab_min_width="70" - tab_height="30" + tab_height="21" tab_position="top" top="7" - height="577" + height="555" + follows="all" halign="center" use_highlighting_on_hover="true"> <panel @@ -51,8 +52,8 @@ name="connection_error_text" type="string" follows="left|bottom|right" - top="5" - left="9" + bottom="-5" + left="10" width="250" height="20" wrap="true" @@ -67,14 +68,14 @@ height="24" width="24" name="connection_loading_indicator" - top="2" - left="9" + top_delta="-2" + left="10" visible="true"/> <text name="connection_loading_text" type="string" follows="left|bottom|right" - top="5" + top_delta="2" left_pad="5" width="250" height="20" diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index dad81aca4f..c64ee5565a 100755 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -209,7 +209,7 @@ default_tab_group="3" tab_group="2" name="right_part_holder" - min_width="230"> + min_width="207"> <layout_stack animate="true" follows="all" diff --git a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml index c86ed595a7..17bc818cc1 100755 --- a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml @@ -2,7 +2,7 @@ <floater legacy_header_height="18" can_minimize="false" - height="408" + height="440" layout="topleft" name="Inventory Finder" help_topic="inventory_finder" @@ -95,36 +95,36 @@ width="126" /> <icon height="16" - image_name="Inv_Mesh" + image_name="Inv_Notecard" layout="topleft" left="8" mouse_opaque="true" - name="icon_mesh" - top="142" + name="icon_notecard" + top="122" width="16" /> <check_box height="16" - label="Meshes" + label="Notecards" layout="topleft" left_pad="2" - name="check_mesh" + name="check_notecard" top_delta="0" width="126" /> <icon height="16" - image_name="Inv_Notecard" + image_name="Inv_Mesh" layout="topleft" left="8" mouse_opaque="true" - name="icon_notecard" - top="122" + name="icon_mesh" + top="142" width="16" /> <check_box height="16" - label="Notecards" + label="Meshes" layout="topleft" left_pad="2" - name="check_notecard" + name="check_mesh" top_delta="0" width="126" /> <icon @@ -223,25 +223,33 @@ top="262" width="100" /> <button - follows="left|top" height="20" label="None" label_selected="None" - layout="topleft" left_delta="0" name="None" - top_pad="4" + left_pad="10" width="100" /> <check_box height="16" label="Always show folders" layout="topleft" - left_delta="0" + left="8" name="check_show_empty" - top_pad="4" + top_pad="6" width="144" /> + <view_border + bevel_style="none" + follows="top|left" + height="0" + layout="topleft" + left="10" + name="horiz_separator" + top_pad="8" + width="260"/> <check_box height="16" + top="324" label="Since Logoff" layout="topleft" left_delta="0" @@ -257,36 +265,74 @@ layout="topleft" left_delta="0" name="- OR -" - top_delta="16" + top="342" width="144"> - OR - </text> + <radio_group + height="16" + layout="topleft" + name="date_search_direction" + top="360" + left="8" + width="270"> + <radio_item + label="Newer than" + layout="topleft" + name="newer" + top_pad="6" + left="0" /> + <radio_item + label="Older than" + layout="topleft" + name="older" + top_delta="0" + left="120" /> + </radio_group> <spinner follows="left|top" height="16" increment="1" initial_value="0" - label="Hours Ago" - label_width="64" layout="topleft" left_delta="0" max_val="240000" name="spin_hours_ago" top_pad="4" - width="144" /> + width="64" /> + <text + type="string" + length="1" + follows="left|top" + height="16" + layout="topleft" + left_pad="3" + top_delta="4" + width="80"> + Hours + </text> <spinner follows="left|top" height="16" increment="1" initial_value="0" - label="Days Ago" - label_width="64" layout="topleft" - left_delta="0" max_val="10000" name="spin_days_ago" top_pad="4" - width="144" /> + left="8" + width="64" /> + <text + type="string" + length="1" + follows="left|top" + height="16" + layout="topleft" + left_pad="3" + top_delta="4" + width="80"> + Days + </text> <button follows="top|right" height="20" @@ -295,6 +341,6 @@ layout="topleft" name="Close" right="-6" - top="382" + top="406" width="76" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_lagmeter.xml b/indra/newview/skins/default/xui/en/floater_lagmeter.xml new file mode 100644 index 0000000000..b24c745bdd --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_lagmeter.xml @@ -0,0 +1,336 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + legacy_header_height="18" + height="170" + layout="topleft" + name="floater_lagmeter" + help_topic="floater_lagmeter" + save_rect="true" + title="LAG METER" + width="350"> + <floater.string + name="max_title_msg"> + Lag Meter + </floater.string> + <floater.string + name="max_width_px"> + 360 + </floater.string> + <floater.string + name="min_title_msg"> + Lag + </floater.string> + <floater.string + name="min_width_px"> + 90 + </floater.string> + <floater.string + name="client_text_msg"> + Client + </floater.string> + <floater.string + name="client_frame_rate_critical_fps"> + 10 + </floater.string> + <floater.string + name="client_frame_rate_warning_fps"> + 15 + </floater.string> + <floater.string + name="client_frame_time_window_bg_msg"> + Normal, window in background + </floater.string> + <floater.string + name="client_frame_time_critical_msg"> + Client frame rate below [CLIENT_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string + name="client_frame_time_warning_msg"> + Client frame rate between [CLIENT_FRAME_RATE_CRITICAL] and [CLIENT_FRAME_RATE_WARNING] + </floater.string> + <floater.string + name="client_frame_time_normal_msg"> + Normal + </floater.string> + <floater.string + name="client_draw_distance_cause_msg"> + Possible cause: Draw distance set too high + </floater.string> + <floater.string + name="client_texture_loading_cause_msg"> + Possible cause: Images loading + </floater.string> + <floater.string + name="client_texture_memory_cause_msg"> + Possible cause: Too many images in memory + </floater.string> + <floater.string + name="client_complex_objects_cause_msg"> + Possible cause: Too many complex objects in scene + </floater.string> + <floater.string + name="network_text_msg"> + Network + </floater.string> + <floater.string + name="network_packet_loss_critical_pct"> + 10 + </floater.string> + <floater.string + name="network_packet_loss_warning_pct"> + 5 + </floater.string> + <floater.string + name="network_packet_loss_critical_msg"> + Connection is dropping over [NETWORK_PACKET_LOSS_CRITICAL]% of packets + </floater.string> + <floater.string + name="network_packet_loss_warning_msg"> + Connection is dropping [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% of packets + </floater.string> + <floater.string + name="network_performance_normal_msg"> + Normal + </floater.string> + <floater.string + name="network_ping_critical_ms"> + 600 + </floater.string> + <floater.string + name="network_ping_warning_ms"> + 300 + </floater.string> + <floater.string + name="network_ping_critical_msg"> + Connection ping time is over [NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string + name="network_ping_warning_msg"> + Connection ping time is [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string + name="network_packet_loss_cause_msg"> + Possible bad connection or 'Bandwidth' pref too high. + </floater.string> + <floater.string + name="network_ping_cause_msg"> + Possible bad connection or file-sharing app. + </floater.string> + <floater.string + name="server_text_msg"> + Server + </floater.string> + <floater.string + name="server_frame_rate_critical_fps"> + 20 + </floater.string> + <floater.string + name="server_frame_rate_warning_fps"> + 30 + </floater.string> + <floater.string + name="server_single_process_max_time_ms"> + 20 + </floater.string> + <floater.string + name="server_frame_time_critical_msg"> + Simulator framerate below [SERVER_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string + name="server_frame_time_warning_msg"> + Simulator framerate between [SERVER_FRAME_RATE_CRITICAL] and [SERVER_FRAME_RATE_WARNING] + </floater.string> + <floater.string + name="server_frame_time_normal_msg"> + Normal + </floater.string> + <floater.string + name="server_physics_cause_msg"> + Possible Cause: Too many physical objects + </floater.string> + <floater.string + name="server_scripts_cause_msg"> + Possible Cause: Too many scripted objects + </floater.string> + <floater.string + name="server_net_cause_msg"> + Possible Cause: Too much network traffic + </floater.string> + <floater.string + name="server_agent_cause_msg"> + Possible Cause: Too many moving people in region + </floater.string> + <floater.string + name="server_images_cause_msg"> + Possible Cause: Too many image calculations + </floater.string> + <floater.string + name="server_generic_cause_msg"> + Possible Cause: Simulator load too heavy + </floater.string> + <floater.string + name="smaller_label"> + >> + </floater.string> + <floater.string + name="bigger_label"> + << + </floater.string> + <button + follows="top|left" + height="16" + image_selected="lag_status_good.tga" + image_unselected="lag_status_good.tga" + layout="topleft" + left="8" + name="client_lagmeter" + tab_stop="false" + tool_tip="Client lag status" + top="24" + width="16" /> + <text + type="string" + length="1" + follows="left|top" + font="SansSerif" + height="16" + layout="topleft" + left_pad="3" + name="client" + top_delta="0" + width="128"> + Client + </text> + <text + invisiblity_control="LagMeterShrunk" + type="string" + length="1" + bottom="40" + follows="left|top" + font="SansSerif" + height="16" + layout="topleft" + left="110" + name="client_text" + right="-10"> + Normal + </text> + <text + invisiblity_control="LagMeterShrunk" + bottom="56" + follows="left|top" + height="16" + layout="topleft" + left="40" + name="client_lag_cause" + right="-32" /> + <button + follows="top|left" + height="16" + image_selected="lag_status_good.tga" + image_unselected="lag_status_good.tga" + layout="topleft" + left="8" + name="network_lagmeter" + tab_stop="false" + tool_tip="Network lag status" + top="64" + width="16" /> + <text + type="string" + length="1" + follows="left|top" + font="SansSerif" + height="16" + layout="topleft" + left_pad="3" + name="network" + top_delta="0" + width="128"> + Network + </text> + <text + invisiblity_control="LagMeterShrunk" + type="string" + length="1" + bottom="80" + follows="left|top" + font="SansSerif" + height="16" + layout="topleft" + left="110" + name="network_text" + right="-10"> + Normal + </text> + <text + invisiblity_control="LagMeterShrunk" + bottom="96" + follows="left|top" + height="16" + layout="topleft" + left="40" + name="network_lag_cause" + right="-32" /> + <button + follows="top|left" + height="16" + image_selected="lag_status_good.tga" + image_unselected="lag_status_good.tga" + layout="topleft" + left="8" + name="server_lagmeter" + tab_stop="false" + tool_tip="Server lag status" + top="104" + width="16" /> + <text + type="string" + length="1" + follows="left|top" + font="SansSerif" + height="16" + layout="topleft" + left_pad="3" + name="server" + top_delta="0" + width="60"> + Server + </text> + <text + invisiblity_control="LagMeterShrunk" + type="string" + length="1" + bottom="120" + follows="left|top" + font="SansSerif" + height="16" + layout="topleft" + left="110" + name="server_text" + right="-10"> + Normal + </text> + <text + invisiblity_control="LagMeterShrunk" + bottom="136" + follows="left|top" + height="16" + layout="topleft" + left="40" + name="server_lag_cause" + right="-32" /> + <button + follows="left|top" + height="20" + label=">>" + layout="topleft" + left="10" + name="minimize" + tool_tip="Toggle floater size" + top_delta="24" + width="40"> + <button.commit_callback + function="LagMeter.ClickShrink" /> + </button> +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml index f526970ad0..bf6e0c4917 100755 --- a/indra/newview/skins/default/xui/en/floater_openobject.xml +++ b/indra/newview/skins/default/xui/en/floater_openobject.xml @@ -6,7 +6,7 @@ height="350" layout="topleft" min_height="160" - min_width="270" + min_width="280" name="objectcontents" help_topic="objectcontents" save_rect="true" @@ -40,10 +40,10 @@ <button follows="bottom|left" height="23" - label="Copy To Inventory" - label_selected="Copy To Inventory" + label="Copy to inventory" + label_selected="Copy to inventory" layout="topleft" - left="20" + left="15" name="copy_to_inventory_button" tab_group="1" top_pad="5" @@ -54,12 +54,12 @@ <button follows="bottom|left" height="23" - label="Copy And Wear" - label_selected="Copy And Wear" + label="Copy and add to outfit" + label_selected="Copy and add to outfit" layout="topleft" - left_pad="10" + left_pad="5" name="copy_and_wear_button" - width="120"> + width="135"> <button.commit_callback function="OpenObject.MoveAndWear" /> </button> diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml index c50c8c02fe..af62c7a9bc 100755 --- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml @@ -253,7 +253,7 @@ name="Land__Encroachment__Objects_textures" value="63" /> <combo_box.item - label="Wagering or Gambling" + label="Gaming Policy Violation" name="Wagering_gambling" value="67" /> </combo_box> diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml index 771035b40d..76adaad57c 100755 --- a/indra/newview/skins/default/xui/en/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml @@ -3,15 +3,18 @@ positioning="cascading" legacy_header_height="18" can_minimize="true" + can_resize="false" can_close="true" - height="500" + height="455" layout="topleft" name="Snapshot" + single_instance="true" help_topic="snapshot" save_rect="true" save_visibility="false" title="SNAPSHOT" - width="470"> + width="624" + min_height="455"> <floater.string name="unknown"> unknown @@ -57,11 +60,11 @@ Saved to Computer! </string> <string - name="facebook_failed_str"> + name="facebook_failed_str"> Failed to upload image to your Facebook timeline. </string> <string - name="profile_failed_str"> + name="profile_failed_str"> Failed to upload image to your Profile Feed. </string> <string @@ -78,35 +81,231 @@ </string> <button follows="left|top" - height="23" - image_overlay="TabIcon_Close_Off" + height="25" + image_overlay="Refresh_Off" + image_hover_unselected="Toolbar_Middle_Over" + image_selected="Toolbar_Middle_Selected" + image_unselected="Toolbar_Middle_Off" + image_overlay_alignment="left" + imgoverlay_label_space="5" + pad_bottom="0" + halign="left" layout="topleft" - left="236" - name="advanced_options_btn" - tool_tip="Advanced options" - top="25" - width="23" /> - <ui_ctrl - height="160" - width="250" - layout="topleft" - name="thumbnail_placeholder" - top="50" - follows="left|top" - left="10"> + left="10" + label="REFRESH" + name="new_snapshot_btn" + top_pad="26" + width="167" /> + <button + follows="left|top" + control_name="AdvanceSnapshot" + invisibility_control="AdvanceSnapshot" + height="25" + is_toggle="true" + layout="topleft" + image_hover_unselected="Toolbar_Middle_Over" + image_selected="Toolbar_Middle_Off" + image_unselected="Toolbar_Middle_Off" + image_overlay="Conv_toolbar_expand" + name="retract_btn" + left_pad="1" + top_delta="0" + width="31" /> + <button + follows="left|top" + control_name="AdvanceSnapshot" + visibility_control="AdvanceSnapshot" + height="25" + is_toggle="true" + layout="topleft" + image_overlay="Conv_toolbar_collapse" + image_hover_unselected="Toolbar_Middle_Over" + image_selected="Toolbar_Middle_Off" + image_unselected="Toolbar_Middle_Off" + name="extend_btn" + left_delta="0" + top_delta="0" + width="31" /> + <panel + height="154" + layout="topleft" + follows="top|left" + left="0" + name="advanced_options_panel" + top_pad="-6" + width="210"> + <view_border + bevel_style="in" + follows="left|top|right" + height="1" + left="10" + layout="topleft" + name="advanced_options_hr" + right="-1" + top_pad="5" + /> + <text + type="string" + length="1" + follows="left|top" + height="13" + layout="topleft" + left="10" + name="layer_type_label" + top_pad="10" + width="100"> + Capture: + </text> + <combo_box + follows="left|top|right" + height="23" + label="Image Layers" + layout="topleft" + left="30" + name="layer_types" + right="-2"> + <combo_box.item + label="Colors" + name="Colors" + value="colors" /> + <combo_box.item + label="Depth" + name="Depth" + value="depth" /> + </combo_box> + <check_box + label="Interface" + layout="topleft" + left="30" + height="16" + top_pad="8" + width="180" + name="ui_check" /> + <check_box + label="HUDs" + layout="topleft" + height="16" + left="30" + top_pad="1" + width="180" + name="hud_check" /> + <check_box + label="Freeze frame (fullscreen)" + layout="topleft" + height="16" + left="10" + top_pad="1" + width="180" + name="freeze_frame_check" /> + <check_box + label="Auto-refresh" + layout="topleft" + height="16" + left="10" + top_pad="1" + width="180" + name="auto_snapshot_check" /> + <text + type="string" + length="1" + follows="left|top" + height="13" + layout="topleft" + left="10" + name="filter_list_label" + top_pad="10" + width="50"> + Filter: + </text> + <combo_box + control_name="PhotoFilters" + follows="left|right|top" + name="filters_combobox" + tool_tip="Image filters" + top_delta="-3" + left="50" + right="-1" + height="21" + width="135"> + <combo_box.item + label="No Filter" + name="NoFilter" + value="NoFilter" /> + </combo_box> + <view_border + bevel_style="in" + follows="left|top|right" + height="1" + left="10" + layout="topleft" + name="advanced_options_hr" + right="-1" + top_pad="7" + /> + </panel> + <panel_container + follows="left|top" + height="230" + layout="topleft" + left="0" + name="panel_container" + default_panel_name="panel_snapshot_options" + top_pad="10" + width="215"> + <panel + class="llpanelsnapshotoptions" + filename="panel_snapshot_options.xml" + follows="all" + layout="topleft" + left="0" + name="panel_snapshot_options" + top="0" /> <panel - background_visible="true" - bg_alpha_color="0.9 1 0.9 1" + class="llpanelsnapshotprofile" + follows="all" + layout="topleft" + name="panel_snapshot_profile" + filename="panel_snapshot_profile.xml" /> + <panel + class="llpanelsnapshotpostcard" + follows="all" + layout="topleft" + name="panel_snapshot_postcard" + filename="panel_snapshot_postcard.xml" /> + <panel + class="llpanelsnapshotinventory" + follows="all" + layout="topleft" + name="panel_snapshot_inventory" + filename="panel_snapshot_inventory.xml" /> + <panel + class="llpanelsnapshotlocal" + follows="all" + layout="topleft" + name="panel_snapshot_local" + filename="panel_snapshot_local.xml" /> + </panel_container> + <view_border + bevel_style="in" + follows="left|top" + height="1" + left="10" + layout="topleft" + name="status_hr" + width="199" + top_pad="-16"/> + <panel + background_visible="false" follows="left|top" font="SansSerifLarge" halign="center" height="20" layout="topleft" - left="0" + left="10" length="1" name="succeeded_panel" - right="-1" - top="0" + width="198" + top_pad="1" type="string" visible="false"> <text @@ -119,7 +318,7 @@ length="1" name="succeeded_lbl" right="-1" - text_color="0.2 0.5 0.2 1" + text_color="0.2 0.85 0.2 1" top="4" translate="false" type="string"> @@ -127,18 +326,17 @@ </text> </panel> <panel - background_visible="true" - bg_alpha_color="1 0.9 0.9 1" + background_visible="false" follows="left|top" font="SansSerifLarge" halign="center" height="20" layout="topleft" - left_delta="0" + left="10" length="1" name="failed_panel" - right="-1" - top="0" + width="198" + top_delta="0" type="string" visible="false"> <text @@ -151,7 +349,7 @@ length="1" name="failed_lbl" right="-1" - text_color="0.5 0.2 0.2 1" + text_color="0.95 0.4 0.4 1" top="4" translate="false" type="string"> @@ -160,51 +358,39 @@ </panel> <loading_indicator follows="left|top" - height="48" + height="24" layout="topleft" name="working_indicator" - left="101" - top="46" + left="10" + top_delta="0" visible="false" - width="48" /> + width="24" /> <text - follows="left|top|right" + follows="left|top" font="SansSerifBold" height="14" layout="topleft" - left="5" + left_pad="3" length="1" - halign="center" + halign="left" name="working_lbl" - right="-5" - top="98" + top_delta="5" translate="false" type="string" visible="false" - width="130"> + width="162"> Working </text> - <button - follows="left|top" - height="22" - image_overlay="Refresh_Off" - layout="topleft" - left="20" - name="new_snapshot_btn" - bottom="-20" - visible="false" - width="22" /> <text follows="left|top" font="SansSerifBold" halign="left" height="18" layout="topleft" - left_pad="10" + left="10" length="1" name="refresh_lbl" - right="-5" - text_color="red" + text_color="0.95 0.4 0.4 1" top_delta="0" translate="false" type="string" @@ -212,37 +398,44 @@ width="130"> Refresh to save. </text> - </ui_ctrl> + <ui_ctrl + layout="topleft" + name="thumbnail_placeholder" + top="23" + left="215" + width="400" + height="400" + follows="top|left"/> <view_border bevel_style="in" height="21" - width="250" layout="topleft" name="img_info_border" - top_pad="3" - follows="left|top" - left_delta="0" - /> + top_pad="0" + right="-10" + follows="left|top|right" + left_delta="0"/> <text type="string" font="SansSerifSmall" length="1" - follows="left|top" + follows="left|top|right" height="14" layout="topleft" - left_delta="5" + left="220" + right="-20" halign="left" name="image_res_text" top_delta="5" - width="100"> - [WIDTH] x [HEIGHT] px + width="200"> + [WIDTH]px (width) x [HEIGHT]px (height) </text> <text - follows="left|top" + follows="right|top" font="SansSerifSmall" height="14" layout="topleft" - left="200" + left="-65" length="1" halign="right" name="file_size_label" @@ -251,161 +444,4 @@ width="50"> [SIZE] KB </text> - <panel_container - follows="left|top" - height="260" - layout="topleft" - left="0" - name="panel_container" - default_panel_name="panel_snapshot_options" - top_pad="10" - width="270"> - <panel - class="llpanelsnapshotoptions" - filename="panel_snapshot_options.xml" - follows="all" - layout="topleft" - left="0" - name="panel_snapshot_options" - top="0" /> - <panel - class="llpanelsnapshotprofile" - follows="all" - layout="topleft" - name="panel_snapshot_profile" - filename="panel_snapshot_profile.xml" /> - <panel - class="llpanelsnapshotpostcard" - follows="all" - layout="topleft" - name="panel_snapshot_postcard" - filename="panel_snapshot_postcard.xml" /> - <panel - class="llpanelsnapshotinventory" - follows="all" - layout="topleft" - name="panel_snapshot_inventory" - filename="panel_snapshot_inventory.xml" /> - <panel - class="llpanelsnapshotlocal" - follows="all" - layout="topleft" - name="panel_snapshot_local" - filename="panel_snapshot_local.xml" /> - </panel_container> - <panel - height="295" - layout="topleft" - left="270" - name="advanced_options_panel" - top="20" - width="200"> - <text - type="string" - font="SansSerifSmall" - length="1" - follows="left|top" - height="14" - layout="topleft" - left="10" - halign="left" - name="advanced_options_label" - right="-10" - top="10"> - ADVANCED OPTIONS - </text> - <view_border - bevel_style="in" - follows="left|top|right" - height="1" - left="10" - layout="topleft" - name="advanced_options_hr" - right="-10" - top_pad="5" - /> - <text - type="string" - length="1" - follows="left|top" - height="13" - layout="topleft" - left="10" - name="layer_type_label" - top_pad="10" - width="50"> - Capture: - </text> - <combo_box - follows="left|top|right" - height="23" - label="Image Layers" - layout="topleft" - left="30" - name="layer_types" - right="-10"> - <combo_box.item - label="Colors" - name="Colors" - value="colors" /> - <combo_box.item - label="Depth" - name="Depth" - value="depth" /> - </combo_box> - <check_box - label="Interface" - layout="topleft" - left="30" - top_pad="10" - width="180" - name="ui_check" /> - <check_box - label="HUDs" - layout="topleft" - left="30" - top_pad="10" - width="180" - name="hud_check" /> - <check_box - label="Freeze frame (fullscreen)" - layout="topleft" - left="10" - top_pad="8" - width="180" - name="freeze_frame_check" /> - <check_box - label="Auto-refresh" - layout="topleft" - left="10" - top_pad="8" - width="180" - name="auto_snapshot_check" /> - <text - type="string" - length="1" - follows="left|top" - height="13" - layout="topleft" - left="10" - name="filter_list_label" - top_pad="10" - width="50"> - Filter: - </text> - <combo_box - control_name="PhotoFilters" - follows="left|right|top" - name="filters_combobox" - tool_tip="Image filters" - top_pad="8" - left="30" - height="21" - width="135"> - <combo_box.item - label="No Filter" - name="NoFilter" - value="NoFilter" /> - </combo_box> - </panel> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_stats.xml b/indra/newview/skins/default/xui/en/floater_stats.xml index bee570d5d0..fbf262441f 100755 --- a/indra/newview/skins/default/xui/en/floater_stats.xml +++ b/indra/newview/skins/default/xui/en/floater_stats.xml @@ -59,10 +59,10 @@ <stat_bar name="ktrissec" label="KTris per Sec" stat="trianglesdrawnstat"/> - <stat_bar name="objs" + <stat_bar name="totalobjs" label="Total Objects" stat="numobjectsstat"/> - <stat_bar name="objs" + <stat_bar name="cachedobjs" label="Cached Objects" stat="numactivecachedobjects"/> <stat_bar name="newobjs" @@ -267,7 +267,9 @@ stat="simsimskippedsilhouettesteps" unit_label="/sec"/> <stat_bar name="simsimpctsteppedcharacters" + label="Characters Updated" stat="simsimpctsteppedcharacters" + unit_label="%" decimal_digits="1"/> </stat_view> <stat_bar name="siminpps" diff --git a/indra/newview/skins/default/xui/en/floater_top_objects.xml b/indra/newview/skins/default/xui/en/floater_top_objects.xml index 0b71177345..36ceddd305 100755 --- a/indra/newview/skins/default/xui/en/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/en/floater_top_objects.xml @@ -38,6 +38,18 @@ name="none_descriptor"> None found. </floater.string> + <floater.string + name="URLs"> + URLs + </floater.string> + <floater.string + name="memory"> + Memory (KB) + </floater.string> + + + + <text type="string" length="1" @@ -82,7 +94,7 @@ name="parcel" width="120" /> <scroll_list.columns - label="Time" + label="Date" name="time" width="130" /> <scroll_list.columns diff --git a/indra/newview/skins/default/xui/en/floater_twitter.xml b/indra/newview/skins/default/xui/en/floater_twitter.xml index aa5bfce2e9..3e1a91e58d 100644 --- a/indra/newview/skins/default/xui/en/floater_twitter.xml +++ b/indra/newview/skins/default/xui/en/floater_twitter.xml @@ -10,21 +10,13 @@ single_instance="true" reuse_instance="true" title="TWITTER" - height="502" - width="304"> - <panel - height="502" - width="304" - visible="true" - name="background" - follows="all" - top="0" - left="0"> + height="462" + width="272"> <tab_container name="tabs" tab_group="1" tab_min_width="70" - tab_height="30" + tab_height="21" tab_position="top" top="7" height="457" @@ -43,17 +35,13 @@ label="ACCOUNT" name="panel_twitter_account"/> </tab_container> - <panel - name="connection_status_panel" - follows="left|bottom|right" - height="24"> <text name="connection_error_text" type="string" follows="left|bottom|right" - top="5" - left="9" - width="250" + bottom="-5" + left="10" + width="252" height="20" wrap="true" halign="left" @@ -67,16 +55,16 @@ height="24" width="24" name="connection_loading_indicator" - top="2" - left="9" + top_delta="-2" + left="10" visible="true"/> <text name="connection_loading_text" type="string" follows="left|bottom|right" - top="5" + top_delta="2" left_pad="5" - width="250" + width="223" height="20" wrap="true" halign="left" @@ -85,6 +73,4 @@ font="SansSerif"> Loading... </text> - </panel> - </panel> </floater> diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml index a87027a113..9885e37cea 100755 --- a/indra/newview/skins/default/xui/en/main_view.xml +++ b/indra/newview/skins/default/xui/en/main_view.xml @@ -68,6 +68,7 @@ left="0" follows="all" height="500" + layout="topleft" mouse_opaque="false" name="login_panel_holder" width="1024"/> diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml index d2519a5aa4..06d0b849a3 100755 --- a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml @@ -63,7 +63,7 @@ <menu_item_separator layout="topleft" /> <menu_item_call - label="Show Filters" + label="Show Filters..." layout="topleft" name="show_filters"> <on_click diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index c8fcda9858..de441983d0 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -251,8 +251,7 @@ function="Floater.Visible" parameter="nearby_chat" /> <menu_item_check.on_click - function="Floater.ToggleOrBringToFront" - parameter="nearby_chat" /> + function="Communicate.NearbyChat"/> </menu_item_check> <menu_item_check label="Speak" @@ -377,13 +376,16 @@ function="SideTray.PanelPeopleTab" parameter="nearby_panel" /> </menu_item_check> - <menu_item_call + <menu_item_check label="Block List" name="Block List"> - <menu_item_call.on_click + <menu_item_check.on_check + function="SideTray.CheckPanelPeopleTab" + parameter="blocked_panel" /> + <menu_item_check.on_click function="SideTray.PanelPeopleTab" parameter="blocked_panel" /> - </menu_item_call> + </menu_item_check> <menu_item_separator/> <menu_item_check name="Do Not Disturb" @@ -1222,7 +1224,7 @@ name="Grid Options" shortcut="control|shift|B"> <menu_item_call.on_click - function="Floater.Show" + function="Floater.Toggle" parameter="build_options" /> <menu_item_call.on_enable function="Tools.EnableToolNotPie" /> diff --git a/indra/newview/skins/default/xui/en/mime_types.xml b/indra/newview/skins/default/xui/en/mime_types.xml index a585069faa..f5f2223330 100755 --- a/indra/newview/skins/default/xui/en/mime_types.xml +++ b/indra/newview/skins/default/xui/en/mime_types.xml @@ -101,6 +101,27 @@ true </allow_looping> </widgetset> + <widgetset name="none"> + <label name="none_label"> + No Content + </label> + <default_type> + none/none + </default_type> + <icon> + icn_media_web.tga + </icon> + <tooltip name="none_tooltip"> + No media here + </tooltip> + <playtip name="none_playtip" /> + <allow_resize> + false + </allow_resize> + <allow_looping> + false + </allow_looping> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Real Time Streaming diff --git a/indra/newview/skins/default/xui/en/mime_types_linux.xml b/indra/newview/skins/default/xui/en/mime_types_linux.xml index e95b371d00..84aeaf3b54 100755 --- a/indra/newview/skins/default/xui/en/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/en/mime_types_linux.xml @@ -101,6 +101,27 @@ true </allow_looping> </widgetset> + <widgetset name="none"> + <label name="none_label"> + No Content + </label> + <default_type> + none/none + </default_type> + <icon> + icn_media_web.tga + </icon> + <tooltip name="none_tooltip"> + No media here + </tooltip> + <playtip name="none_playtip" /> + <allow_resize> + false + </allow_resize> + <allow_looping> + false + </allow_looping> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Real Time Streaming diff --git a/indra/newview/skins/default/xui/en/mime_types_mac.xml b/indra/newview/skins/default/xui/en/mime_types_mac.xml index 7931e55c0a..90230f12dd 100755 --- a/indra/newview/skins/default/xui/en/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/en/mime_types_mac.xml @@ -101,6 +101,27 @@ true </allow_looping> </widgetset> + <widgetset name="none"> + <label name="none_label"> + No Content + </label> + <default_type> + none/none + </default_type> + <icon> + icn_media_web.tga + </icon> + <tooltip name="none_tooltip"> + No media here + </tooltip> + <playtip name="none_playtip" /> + <allow_resize> + false + </allow_resize> + <allow_looping> + false + </allow_looping> + </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> Real Time Streaming diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 772d81c448..f1d34a1449 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -169,6 +169,16 @@ No tutorial is currently available. <notification icon="alertmodal.tga" + name="GenericAlertOK" + type="alertmodal"> +[MESSAGE] + <usetemplate + name="okbutton" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" name="BadInstallation" type="alertmodal"> An error occurred while updating [APP_NAME]. Please [http://get.secondlife.com download the latest version] of the Viewer. @@ -1417,6 +1427,14 @@ Graphics Quality can be raised in Preferences > Graphics. The region [REGION] does not allow terraforming. <tag>fail</tag> </notification> + + <notification + icon="alertmodal.tga" + name="ParcelNoTerraforming" + type="notify"> +You are not allowed to terraform parcel [PARCEL]. + <tag>fail</tag> + </notification> <notification icon="alertmodal.tga" @@ -3797,6 +3815,28 @@ You have left the group [group_name]. </notification> <notification + icon="aler.tga" + name="GroupDepartError" + type="alert"> +Unable to leave group: [reason]. + <tag>reason</tag> + <usetemplate + name="okbutton" + yestext="OK"/> + </notification> + + <notification + icon="alert.tga" + name="GroupDepart" + type="alert"> +You have left the group [group_name]. + <tag>group_name</tag> + <usetemplate + name="okbutton" + yestext="OK"/> + </notification> + + <notification icon="alert.tga" name="ConfirmKick" type="alert"> @@ -4631,6 +4671,17 @@ The region you're trying to visit contains [REGIONMATURITY] content, but your cu <notification icon="alertmodal.tga" + name="RegionTPSpecialUsageBlocked" + type="alertmodal"> + <tag>fail</tag> + Unable to enter region. '[REGION_NAME]' is a Skill Gaming Region, and you must meet certain criteria in order to enter. For details, please review the [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ]. + <usetemplate + name="okbutton" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" name="PreferredMaturityChanged" type="alertmodal"> You won't receive any more notifications that you're about to visit a region with [RATING] content. You may change your content preferences in the future by using Me > Preferences > General from the menu bar. @@ -5396,6 +5447,14 @@ Do you want to replace it with the selected object? </notification> <notification + icon="alertmodal.tga" + name="TooManyWearables" + type="alertmodal"> + You can't wear a folder containing more than [AMOUNT] items. You can change this limit in Advanced > Show Debug Settings > WearFolderLimit. + <tag>fail</tag> + </notification> + + <notification icon="alert.tga" label="Do Not Disturb Mode Warning" name="DoNotDisturbModePay" @@ -7000,11 +7059,11 @@ If you stay in this region you will be logged out. name="LoadWebPage" show_toast="false" type="notify"> -Load web page [URL]? +Load web page [URL] ? [MESSAGE] -From object: <nolink>[OBJECTNAME]</nolink>, owner: [NAME]? +From object: <nolink>[OBJECTNAME]</nolink>, owner: [NAME] <tag>confirm</tag> <form name="form"> <button @@ -7900,7 +7959,16 @@ You uploaded a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME] second ( [EXISTENCE] seconds alive ) You locally updated a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME] seconds. </notification> - + + <notification + icon="alertmodal.tga" + name="CannotUploadTexture" + type="alertmodal"> +Unable to upload texture. +[REASON] + <tag>fail</tag> + </notification> + <notification icon="alertmodal.tga" name="LivePreviewUnavailable" diff --git a/indra/newview/skins/default/xui/en/panel_facebook_account.xml b/indra/newview/skins/default/xui/en/panel_facebook_account.xml deleted file mode 100644 index 122cbfb717..0000000000 --- a/indra/newview/skins/default/xui/en/panel_facebook_account.xml +++ /dev/null @@ -1,77 +0,0 @@ -<panel - height="400" - width="304" - layout="topleft" - follows="all" - name="panel_facebook_account"> - <string - name="facebook_connected" - value="You are connected to Facebook as:" /> - <string - name="facebook_disconnected" - value="Not connected to Facebook" /> - <text - layout="topleft" - length="1" - follows="top|left" - font="SansSerif" - height="16" - left="9" - name="account_caption_label" - top="21" - type="string"> - Not connected to Facebook. - </text> - <text - layout="topleft" - top_pad="2" - length="1" - follows="top|left" - font="SansSerif" - height="16" - left="9" - name="account_name_label" - parse_urls="true" - type="string"/> - <panel - layout="topleft" - follows="left|top" - name="panel_buttons" - height="345" - left="9"> - <button - layout="topleft" - follows="left|top" - top_pad="9" - visible="true" - height="23" - label="Connect..." - name="connect_btn" - width="210"> - <commit_callback function="SocialSharing.Connect"/> - </button> - - <button - layout="topleft" - follows="left|top" - top_delta="0" - height="23" - label="Disconnect" - name="disconnect_btn" - width="210" - visible="false"> - <commit_callback function="SocialSharing.Disconnect"/> - </button> - <text - layout="topleft" - length="1" - follows="top|left" - height="16" - left="0" - name="account_learn_more_label" - top_pad="20" - type="string"> - [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Learn about posting to Facebook] - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/en/panel_facebook_friends.xml b/indra/newview/skins/default/xui/en/panel_facebook_friends.xml index 9d21a3a293..97994fb08b 100644 --- a/indra/newview/skins/default/xui/en/panel_facebook_friends.xml +++ b/indra/newview/skins/default/xui/en/panel_facebook_friends.xml @@ -1,6 +1,6 @@ <panel height="400" - width="304" + width="272" layout="topleft" follows="all" name="panel_facebook_friends"> @@ -9,17 +9,17 @@ value="You currently do not have any Facebook friends who are also Second Life residents. Ask your Facebook friends to join Second Life today!" /> <string name="facebook_friends_no_connected" - value="You're currently not connected to Facebook. Please go to the Account tab to connect and enable this feature." /> + value="You're currently not connected to Facebook. Please go to the Status tab to connect and enable this feature." /> <accordion - background_visible="true" + background_visible="false" bg_alpha_color="DkGray2" bg_opaque_color="DkGray2" follows="all" - height="408" + height="383" layout="topleft" - left="3" + left="10" name="friends_accordion" - right="-2" + right="-10" top_pad="2"> <accordion_tab layout="topleft" @@ -36,7 +36,7 @@ name="second_life_friends" show_permissions_granted="true" top="0" - width="307" /> + width="272" /> </accordion_tab> <accordion_tab layout="topleft" @@ -53,19 +53,20 @@ name="suggested_friends" show_permissions_granted="true" top="0" - width="307" /> + width="272" /> </accordion_tab> </accordion> <text layout="topleft" word_wrap="true" height="64" - width="290" + width="250" follows="top|left|right" font="SansSerif" - left="9" + left="10" + right="-10" name="facebook_friends_status" - top="21" + top="5" type="string"> Not connected to Facebook. </text> diff --git a/indra/newview/skins/default/xui/en/panel_facebook_photo.xml b/indra/newview/skins/default/xui/en/panel_facebook_photo.xml index b5b6dee004..22e6598352 100644 --- a/indra/newview/skins/default/xui/en/panel_facebook_photo.xml +++ b/indra/newview/skins/default/xui/en/panel_facebook_photo.xml @@ -1,29 +1,19 @@ <panel height="400" - width="304" + width="272" layout="topleft" follows="all" name="panel_facebook_photo"> - <layout_stack - layout="topleft" - border_size="0" - height="392" - follows="all" - orientation="vertical" - name="stack_photo" - top="8"> - <layout_panel - name="snapshot_panel" - height="367"> <combo_box control_name="FacebookPhotoResolution" follows="left|top" - top="6" - left="9" + layout="topleft" + top="7" + left="10" name="resolution_combobox" tool_tip="Image resolution" height="21" - width="135"> + width="124"> <combo_box.item label="Current Window" name="CurrentWindow" @@ -47,13 +37,14 @@ </combo_box> <combo_box control_name="FacebookPhotoFilters" - follows="right|top" + follows="left|top" + layout="topleft" name="filters_combobox" tool_tip="Image filters" - top="6" - left="165" + top="7" + left_pad="4" height="21" - width="135"> + width="124"> <combo_box.item label="No Filter" name="NoFilter" @@ -61,48 +52,62 @@ </combo_box> <panel height="150" - width="250" + width="252" visible="true" + layout="topleft" name="thumbnail_placeholder" - top="33" - follows="left|top|right" - left="9"> + top_pad="5" + follows="left|top|rith" + right="-10" + left="10"> </panel> - <button - follows="left|top" - height="23" - label="Refresh" - left="9" - top_pad="5" - name="new_snapshot_btn" - tool_tip="Click to refresh" - visible="true" - width="100" > - <button.commit_callback - function="SocialSharing.RefreshPhoto" /> - </button> - <text + <text follows="left|top" + layout="topleft" font="SansSerif" text_color="EmphasisColor" height="14" - top_pad="-19" - left_pad="-30" + top_pad="2" + left="10" length="1" halign="center" name="working_lbl" translate="false" type="string" visible="true" - width="150"> + width="251"> Refreshing... </text> + <view_border + bevel_style="in" + follows="left|top" + layout="topleft" + height="1" + left="10" + name="refresh_border" + width="250" + top_pad="0"/> + <button + follows="left|top" + layout="topleft" + height="23" + label="Refresh" + left="10" + top_pad="5" + name="new_snapshot_btn" + tool_tip="Click to refresh" + visible="true" + width="100" > + <button.commit_callback + function="SocialSharing.RefreshPhoto" /> + </button> <button follows="right|top" + layout="topleft" height="23" label="Preview" - left="200" - top_pad="-19" + right="-10" + top_delta="0" name="big_preview_btn" tool_tip="Click to toggle preview" is_toggle="true" @@ -114,9 +119,10 @@ <text length="1" follows="top|left|right" + layout="topleft" font="SansSerif" height="16" - left="9" + left="10" name="caption_label" top_pad="20" type="string"> @@ -124,23 +130,22 @@ </text> <text_editor follows="left|top|right|bottom" + layout="topleft" height="87" width="250" - left="9" + left="10" + right="-10" length="1" max_length="700" name="photo_caption" type="string" word_wrap="true"> </text_editor> - </layout_panel> - <layout_panel - name="photo_button_panel" - height="25"> <button - follows="left|bottom" - top="0" - left="9" + follows="left|top" + layout="topleft" + top_pad="22" + left="10" height="23" label="Post" name="post_photo_btn" @@ -149,16 +154,15 @@ function="SocialSharing.SendPhoto" /> </button> <button - follows="left|bottom" + follows="right|top" + layout="topleft" height="23" label="Cancel" name="cancel_photo_btn" - left_pad="15" + right="-10" top_delta="0" width="100"> <button.commit_callback function="SocialSharing.Cancel" /> - </button> - </layout_panel> - </layout_stack> + </button> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_facebook_place.xml b/indra/newview/skins/default/xui/en/panel_facebook_place.xml index 84c87df523..f87b008c4e 100644 --- a/indra/newview/skins/default/xui/en/panel_facebook_place.xml +++ b/indra/newview/skins/default/xui/en/panel_facebook_place.xml @@ -1,115 +1,96 @@ <panel height="400" - width="304" + width="272" layout="topleft" follows="all" name="panel_facebook_place"> - <layout_stack - layout="topleft" - border_size="0" - height="392" - follows="all" - orientation="vertical" - name="stack_place" - top="8"> - <layout_panel - name="place_detail_panel" - height="181"> <text length="1" follows="top|left|right" + layout="topleft" font="SansSerif" height="16" - left="9" + left="10" name="place_caption_label" - top="13" + top="5" type="string"> Say something about where you are: </text> <text_editor follows="top|left|right" - height="150" + layout="topleft" + height="70" width="250" - left="9" + left="10" + right="-10" length="1" max_length="700" name="place_caption" type="string" word_wrap="true"> </text_editor> - </layout_panel> - <layout_panel - name="place_map_panel" - height="186"> + <check_box + follows="left|top" + layout="topleft" + initial_value="false" + height="16" + top_pad="8" + width="8" + label="Include overhead view of location" + name="add_place_view_cb" + left="10"/> <panel follows="left|top" - height="128" - width="128" + layout="topleft" + height="243" + width="250" background_visible="true" bg_opaque_color="Black" bg_alpha_color="Black" - top="20" - left="9" + top_pad="8" + left="10" + right="-12" visible="true" name="map_border"> </panel> - <loading_indicator - follows="left|top" - height="24" - width="24" - name="map_loading_indicator" - top="77" - left="61" - visible="true"/> <icon follows="left|top" - height="128" - width="128" + layout="topleft" + height="243" + width="250" image_name="Map_Placeholder_Icon" - layout="topleft" - top="20" - left="9" + top_delta="0" + right="-12" + left="10" visible="true" name="map_placeholder"> </icon> <icon follows="left|top" - height="128" - width="128" + layout="topleft" + height="243" + width="250" image_name="Map_Placeholder_Icon" - layout="topleft" - top="20" - left="9" + top_delta="0" + left="10" + right="-12" visible="true" name="map_default"> </icon> - <check_box + <loading_indicator follows="left|top" - initial_value="false" - top_delta="8" - width="8" - label="" - name="add_place_view_cb" - left_pad="5"/> - <text - follows="left|top" - font="SansSerif" - height="32" - width="130" - word_wrap="true" - left_pad="12" - top_delta="-8" - type="string"> - Include overhead view of location - </text> - </layout_panel> - <layout_panel - name="place_button_panel" - height="25"> + layout="topleft" + height="24" + width="24" + name="map_loading_indicator" + top_delta="116" + left="126" + visible="false"/> <button follows="left|bottom" - top="0" - left="9" + layout="topleft" + top_pad="95" + left="10" height="23" label="Post" name="post_place_btn" @@ -118,16 +99,15 @@ function="SocialSharing.SendCheckin" /> </button> <button - follows="left|bottom" + follows="right|bottom" + layout="topleft" height="23" label="Cancel" name="cancel_place_btn" - left_pad="15" + right="-10" top_delta="0" width="100"> <button.commit_callback function="SocialSharing.Cancel" /> </button> - </layout_panel> - </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_facebook_status.xml b/indra/newview/skins/default/xui/en/panel_facebook_status.xml index 480abec558..fe0f3c9279 100644 --- a/indra/newview/skins/default/xui/en/panel_facebook_status.xml +++ b/indra/newview/skins/default/xui/en/panel_facebook_status.xml @@ -1,50 +1,113 @@ <panel height="400" - width="304" + width="272" follows="all" layout="topleft" name="panel_facebook_status"> - <layout_stack + <string + name="facebook_connected" + value="You are connected to Facebook as:" /> + <string + name="facebook_disconnected" + value="Not connected to Facebook" /> + <text + layout="topleft" + length="1" + follows="top|left" + font="SansSerif" + height="16" + left="10" + name="account_caption_label" + top="5" + type="string"> + Not connected to Facebook. + </text> + <text + layout="topleft" + top_pad="2" + length="1" + follows="top|left" + font="SansSerif" + height="16" + left="10" + name="account_name_label" + parse_urls="true" + type="string"/> + <panel + layout="topleft" + follows="left|top" + name="panel_buttons" + height="60" + left="0"> + <button + layout="topleft" + follows="left|top" + top_pad="9" + left="10" + visible="true" + height="23" + label="Connect..." + name="connect_btn" + width="251"> + <commit_callback function="SocialSharing.Connect"/> + </button> + + <button + layout="topleft" + follows="left|top|right" + top_delta="0" + left="10" + right="-10" + height="23" + label="Disconnect" + name="disconnect_btn" + width="210" + visible="false"> + <commit_callback function="SocialSharing.Disconnect"/> + </button> + <text layout="topleft" - border_size="0" - height="392" - follows="all" - orientation="vertical" - name="stack_status" - top="8"> - <layout_panel - name="status_detail_panel" - height="367"> + length="1" + follows="top|left|right" + left="10" + right="-10" + height="16" + name="account_learn_more_label" + top_pad="5" + type="string"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Learn about posting to Facebook] + </text> + </panel> + <text length="1" + layout="topleft" follows="top|left|right" font="SansSerif" height="16" - left="9" + left="10" name="status_caption_label" - top="13" + top_pad="5" type="string"> What's on your mind? </text> <text_editor follows="left|top|right" + layout="topleft" height="150" - width="250" - left="9" + width="252" + left="10" length="1" max_length="700" name="status_message" type="string" word_wrap="true"> </text_editor> - </layout_panel> - <layout_panel - name="status_button_panel" - height="25"> <button - follows="left|bottom" - top="0" - left="9" + follows="left|top" + layout="topleft" + top_pad="6" + left="10" height="23" label="Post" name="post_status_btn" @@ -53,16 +116,15 @@ function="SocialSharing.SendStatus" /> </button> <button - follows="left|bottom" + follows="right|top" + layout="topleft" height="23" label="Cancel" name="cancel_status_btn" - left_pad="15" + right="-10" top_delta="0" width="100"> <button.commit_callback function="SocialSharing.Cancel" /> </button> - </layout_panel> - </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_flickr_account.xml b/indra/newview/skins/default/xui/en/panel_flickr_account.xml index 506d2e2f74..5c2f335780 100644 --- a/indra/newview/skins/default/xui/en/panel_flickr_account.xml +++ b/indra/newview/skins/default/xui/en/panel_flickr_account.xml @@ -1,6 +1,6 @@ <panel height="540" - width="304" + width="272" layout="topleft" name="panel_flickr_account"> <string @@ -15,9 +15,9 @@ follows="top|left" font="SansSerif" height="16" - left="9" + left="10" name="account_caption_label" - top="21" + top="5" type="string"> Not connected to Flickr. </text> @@ -28,7 +28,7 @@ follows="top|left" font="SansSerif" height="16" - left="9" + left="10" name="account_name_label" parse_urls="true" type="string"/> @@ -36,12 +36,14 @@ layout="topleft" name="panel_buttons" height="345" - left="9"> + left="0"> <button layout="topleft" - follows="left|top" + follows="left|top|right" top_pad="9" visible="true" + left="10" + right="-10" height="23" label="Connect..." name="connect_btn" @@ -51,8 +53,10 @@ <button layout="topleft" - follows="left|top" + follows="left|top|right" top_delta="0" + left="10" + right="-10" height="23" label="Disconnect" name="disconnect_btn" @@ -65,9 +69,9 @@ length="1" follows="top|left" height="16" - left="0" + left="10" name="account_learn_more_label" - top_pad="20" + top_pad="5" type="string"> [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Learn about posting to Flickr] </text> diff --git a/indra/newview/skins/default/xui/en/panel_flickr_photo.xml b/indra/newview/skins/default/xui/en/panel_flickr_photo.xml index 8d8ef45c0d..e31695645d 100644 --- a/indra/newview/skins/default/xui/en/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/en/panel_flickr_photo.xml @@ -1,28 +1,19 @@ <panel height="540" - width="304" + width="272" + follows="all" layout="topleft" name="panel_flickr_photo"> - <layout_stack - layout="topleft" - border_size="0" - height="532" - follows="all" - orientation="vertical" - name="stack_photo" - top="8"> - <layout_panel - name="snapshot_panel" - height="507"> <combo_box control_name="FlickrPhotoResolution" follows="left|top" - top="6" - left="9" + layout="topleft" + top="7" + left="10" name="resolution_combobox" tool_tip="Image resolution" height="21" - width="135"> + width="124"> <combo_box.item label="Current Window" name="CurrentWindow" @@ -42,13 +33,14 @@ </combo_box> <combo_box control_name="FlickrPhotoFilters" - follows="right|top" + follows="left|top" + layout="topleft" name="filters_combobox" tool_tip="Image filters" - top="6" - left="165" + top_delta="0" + left_pad="4" height="21" - width="135"> + width="124"> <combo_box.item label="No Filter" name="NoFilter" @@ -59,45 +51,59 @@ width="250" visible="true" name="thumbnail_placeholder" - top="33" - follows="left|top" - left="9"> + top_pad="5" + follows="left|top|right" + layout="topleft" + right="-10" + left="10"> </panel> - <button - follows="left|top" - height="23" - label="Refresh" - left="9" - top_pad="5" - name="new_snapshot_btn" - tool_tip="Click to refresh" - visible="true" - width="100" > - <button.commit_callback - function="SocialSharing.RefreshPhoto" /> - </button> - <text + <text follows="left|top" + layout="topleft" font="SansSerif" text_color="EmphasisColor" height="14" - top_pad="-19" - left_pad="-30" + top_pad="2" + left="10" length="1" halign="center" name="working_lbl" translate="false" type="string" visible="true" - width="150"> + width="251"> Refreshing... </text> + <view_border + bevel_style="in" + follows="left|top" + layout="topleft" + height="1" + left="10" + name="refresh_border" + width="250" + top_pad="0"/> + <button + follows="left|top" + layout="topleft" + height="23" + label="Refresh" + left="10" + top_pad="5" + name="new_snapshot_btn" + tool_tip="Click to refresh" + visible="true" + width="100" > + <button.commit_callback + function="SocialSharing.RefreshPhoto" /> + </button> <button follows="right|top" + layout="topleft" height="23" label="Preview" - left="200" - top_pad="-19" + right="-10" + top_delta="0" name="big_preview_btn" tool_tip="Click to toggle preview" is_toggle="true" @@ -109,19 +115,21 @@ <text length="1" follows="top|left|right" + layout="topleft" font="SansSerif" height="16" - left="9" + left="10" name="title_label" - top_pad="15" + top_pad="10" type="string"> Title: </text> <line_editor follows="left|top" + layout="topleft" height="20" width="250" - left="9" + left="10" length="1" max_length="256" name="photo_title" @@ -130,19 +138,23 @@ <text length="1" follows="top|left|right" + layout="topleft" font="SansSerif" height="16" - left="9" + left="10" + right="-10" name="description_label" top_pad="10" + width="25" type="string"> Description: </text> <text_editor follows="left|top" + layout="topleft" height="50" - width="250" - left="9" + width="249" + left="10" length="1" max_length="700" name="photo_description" @@ -151,6 +163,7 @@ </text_editor> <check_box follows="left|top" + layout="topleft" initial_value="true" label="Include SL location at end of description" name="add_location_cb" @@ -159,23 +172,25 @@ top_pad="8"/> <text length="1" - follows="top|left|right" + follows="top|left" + layout="topleft" font="SansSerif" height="16" - left="9" + left="10" name="tags_label" - top_pad="10" + top_pad="6" type="string"> Tags: </text> <text length="1" follows="top|left" + layout="topleft" font="SansSerifSmall" text_color="White_50" height="30" name="tags_help_label" - left="50" + left="51" top_pad="-16" type="string"> Separate tags with spaces @@ -183,9 +198,10 @@ Use "" for multi-word tags </text> <text_editor follows="left|top" + layout="topleft" height="50" - width="250" - left="9" + width="249" + left="10" length="1" max_length="700" name="photo_tags" @@ -195,8 +211,9 @@ Use "" for multi-word tags <combo_box control_name="FlickrPhotoRating" follows="left|top" - top_pad="16" - left="9" + layout="topleft" + top_pad="7" + left="10" name="rating_combobox" tool_tip="Flickr content rating" height="21" @@ -214,14 +231,11 @@ Use "" for multi-word tags name="RestrictedRating" value="3" /> </combo_box> - </layout_panel> - <layout_panel - name="photo_button_panel" - height="25"> <button follows="left|top" - top="0" - left="9" + layout="topleft" + top_pad="7" + left="10" height="23" label="Upload" name="post_photo_btn" @@ -230,16 +244,15 @@ Use "" for multi-word tags function="SocialSharing.SendPhoto" /> </button> <button - follows="left|top" + follows="right|top" + layout="topleft" height="23" label="Cancel" name="cancel_photo_btn" - left_pad="15" + right="-10" top_delta="0" width="100"> <button.commit_callback function="SocialSharing.Cancel" /> - </button> - </layout_panel> - </layout_stack> + </button> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index 134ca75018..a258a874b0 100755 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -1,265 +1,214 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel - follows="all" - height="600" - layout="topleft" - left="0" - name="panel_login" - focus_root="true" - top="600" - width="1130"> - <string name="reg_in_client_url" translate="false"> - http://secondlife.eniac15.lindenlab.com/reg-in-client/ - </string> + follows="all" + height="768" + layout="topleft" + name="panel_login" + focus_root="true" + background_visible="true" + bg_opaque_color="0.16 0.16 0.16 1" + background_opaque="true" + width="1024"> <panel.string - name="forgot_password_url"> + name="forgot_password_url"> http://secondlife.com/account/request.php </panel.string> - <!-- *NOTE: Custom resize logic for login_html in llpanellogin.cpp --> - <web_browser - tab_stop="false" - trusted_content="true" - bg_opaque_color="Black" - border_visible="false" - bottom="600" - follows="all" - left="0" - name="login_html" - start_url="" - top="0" - height="600" - width="996"/> <layout_stack - animate="false" - clip="false" - follows="left|bottom|right" - name="login_widgets" - layout="topleft" - orientation="horizontal" - top="519" - width="1130" - height="80"> - <layout_panel - auto_resize="false" - follows="left|bottom" - name="login" - layout="topleft" - width="310" - min_width="310" - height="80"> - <text - follows="left|bottom" - font="SansSerif" - font.style="BOLD" - font.size="Large" - height="16" - name="log_in_text" - top="8" - left="15" - width="150"> - LOG IN - </text> - <text - follows="left|bottom" - font="SansSerifSmall" - height="16" - name="username_text" - top="35" - left="15" - width="150"> - Username: - </text> - <!-- STEAM-14: Turn off commit_on_focus_lost so if user presses Enter - with focus in this combo_box, we can use commit action to initiate - login --> - <combo_box - allow_text_entry="true" - follows="left|bottom" - height="22" - left_delta="0" - max_chars="128" - commit_on_focus_lost="false" - combo_editor.prevalidate_callback="ascii" - tool_tip="The username you chose when you registered, like bobsmith12 or Steller Sunshine" - top_pad="0" - name="username_combo" - width="178"> -<!-- empirically, displayed width is 150 anyway?!? --> - <combo_box.combo_button - visible ="false"/> - <combo_box.drop_down_button - visible ="false"/> - </combo_box> -<!-- left="175" based on actual "username_combo" width of 150 vs. 178 --> - <text - follows="left|bottom" - font="SansSerifSmall" - height="16" - name="password_text" - top="35" - left="175" - width="150"> - Password: - </text> - <!-- STEAM-14: Turn off commit_on_focus_lost so if user presses Enter - with focus in this line_editor, we can use commit action to - initiate login --> - <line_editor - follows="left|bottom" - height="22" - max_length_bytes="16" - name="password_edit" - is_password="true" - select_on_focus="true" - commit_on_focus_lost="false" - top_pad="0" - width="135" /> - </layout_panel> - <layout_panel - auto_resize="false" - follows="left|bottom" - name="start_location_panel" - layout="topleft" - width="175" - min_width="175" - height="80"> - <text - follows="left|bottom" - font="SansSerifSmall" - height="16" - left="10" - name="start_location_text" - top="35" - width="130"> - Start at: - </text> - <combo_box - allow_text_entry="true" - control_name="NextLoginLocation" - follows="left|bottom" - height="22" - max_chars="128" - top_pad="0" - name="start_location_combo" - width="165"> - <combo_box.item - label="My last location" - name="MyLastLocation" - value="last" /> - <combo_box.item - label="My home" - name="MyHome" - value="home" /> - <combo_box.item - label="<Type region name>" - name="Typeregionname" value="" /> - </combo_box> - </layout_panel> + follows="left|right|top" + height="172" + min_height="172" + left="0" + name="ui_stack" + orientation="horizontal" + top="0" + width="1024"> <layout_panel - auto_resize="false" - follows="left|bottom" - name="grid_panel" - layout="topleft" - width="145" - height="80" - visible="false"> - <combo_box - allow_text_entry="false" - font="SansSerifSmall" - follows="left|right|bottom" - height="23" - max_chars="256" - left="10" - top="51" - layout="topleft" - top_pad="2" - name="server_combo" - width="135" /> - </layout_panel> + height="172" + auto_resize="true" + name="ui_elastic_pad_left" + width="32" /> <layout_panel - auto_resize="false" - follows="left|bottom" - name="links_login_panel" - layout="topleft" - width="290" - height="80"> - <text - follows="left|bottom" - font="SansSerifSmall" - text_color="EmphasisColor" - left="10" - height="16" - name="login_help" - top="19" - width="280"> - Need help logging in? - </text> - <text - follows="left|bottom" - font="SansSerifSmall" - text_color="EmphasisColor" - height="16" - name="forgot_password_text" - top="35" - width="280"> - Forgot your username or password? - </text> - <button - follows="left|bottom" - top_pad="0" - height="23" - image_unselected="PushButton_On" - image_selected="PushButton_On_Selected" - label="Log In" - label_color="White" - layout="topleft" - name="connect_btn" - width="90" /> - <check_box - control_name="RememberPassword" - follows="left|bottom" - font="SansSerifSmall" - left="110" - top="56" - height="16" - label="Remember password" - top_pad="3" - name="remember_check" - width="145" /> + auto_resize="false" + follows="left|right|top" + name="ui_container" + width="960" + left="0" + top="0" + height="172"> + <icon + height="73" + width="165" + image_name="login_sl_logo" + left="0" + top="25" + name="sl_logo_small" /> + <combo_box + left_pad="22" + bottom_delta="-7" + allow_text_entry="true" + follows="left|top" + height="32" + label="Username" + combo_editor.font="SansSerifLarge" + max_chars="128" + commit_on_focus_lost="false" + combo_editor.prevalidate_callback="ascii" + tool_tip="The username you chose when you registered, like bobsmith12 or Steller Sunshine" + name="username_combo" + width="232"> + <combo_box.combo_editor + text_pad_left="8" /> + <combo_box.combo_button + visible="false" /> + <combo_box.drop_down_button + visible="false" /> + </combo_box> + <line_editor + follows="left|top" + height="32" + left_pad="0" + max_length_bytes="16" + text_pad_left="8" + name="password_edit" + label="Password" + font="SansSerifLarge" + is_password="true" + select_on_focus="true" + commit_on_focus_lost="false" + bottom_delta="0" + width="200" /> + <check_box + control_name="RememberPassword" + follows="left|top" + font="SansSerifMedium" + left_pad="20" + bottom_delta="-14" + height="24" + label="Remember me" + check_button.bottom="3" + name="remember_check" + width="145" /> + <text + follows="left|top" + font="SansSerifMedium" + text_color="EmphasisColor" + height="16" + name="forgot_password_text" + left_delta="0" + bottom_delta="16" + width="200"> + Forgotten password + </text> + <button + follows="left|top" + image_unselected="PushButton_Login" + image_pressed="PushButton_Login_Pressed" + image_hover="PushButton_Login_Over" + label="Log In" + label_color="White" + font="SansSerifMedium" + name="connect_btn" + enabled="true" + left="0" + width="80" + height="26" + bottom_delta="44" /> + <text + follows="left|top" + font="SansSerifLarge" + height="24" + name="At_My_Last_Location_Label" + left_pad="8" + bottom_delta="1" + width="120"> + at last location + </text> + <combo_box + control_name="NextLoginLocation" + follows="left|top" + label="My favorite places" + height="26" + max_chars="128" + combo_editor.font="SansSerifMedium" + left_pad="20" + bottom_delta="0" + name="start_location_combo" + width="175" + combo_button.scale_image="true"> + <combo_box.item + label="My home" + name="MyHome" + value="home" /> + </combo_box> + <button + follows="left|top" + image_unselected="PushButton_Login" + image_pressed="PushButton_Login_Pressed" + image_hover="PushButton_Login_Over" + label="Log In" + label_color="White" + font="SansSerifMedium" + name="connect_favorite_btn" + left_pad="8" + width="80" + enabled="false" + height="26" + bottom_delta="0" /> + <line_editor + follows="left|top" + width="170" + height="26" + left_pad="40" + text_pad_left="8" + name="location_edit" + label="Type a location" + font="SansSerifMedium" + select_on_focus="true" + commit_on_focus_lost="false" + bottom_delta="0" /> + <button + follows="left|top" + image_unselected="PushButton_Login" + image_pressed="PushButton_Login_Pressed" + image_hover="PushButton_Login_Over" + label="Log In" + enabled="false" + label_color="White" + font="SansSerifMedium" + name="connect_location_btn" + left_pad="8" + width="80" + height="26" + bottom_delta="0" /> + <combo_box + allow_text_entry="false" + font="SansSerifTiny" + follows="left|top" + height="26" + max_chars="128" + label="Select grid" + left_pad="40" + bottom_delta="0" + layout="topleft" + top_pad="2" + name="server_combo" + width="128" /> </layout_panel> <layout_panel - tab_stop="false" - follows="right|bottom" - name="links" - width="210" - min_width="100" - height="80"> - <text - follows="right|bottom" - font="SansSerif" - font.style="BOLD" - font.size="Large" - halign="right" - height="16" - name="create_account_text" - top="8" - right="-15" - width="200"> - CREATE YOUR ACCOUNT - </text> - <button - follows="right|bottom" - top="35" - right="-15" - height="23" - image_unselected="PushButton_On" - image_selected="PushButton_On_Selected" - label="Start now" - label_color="White" - layout="topleft" - left_pad="10" - name="create_new_account_btn" - width="90" /> - </layout_panel> + height="172" + auto_resize="true" + name="ui_elastic_pad_right" + width="32" /> </layout_stack> + <web_browser + tab_stop="false" + trusted_content="true" + bg_opaque_color="Black" + border_visible="false" + follows="all" + left="0" + name="login_html" + start_url="" + top="154" + height="600" + width="1024" /> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_login_first.xml b/indra/newview/skins/default/xui/en/panel_login_first.xml new file mode 100644 index 0000000000..84753c55a3 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_login_first.xml @@ -0,0 +1,265 @@ +<panel + follows="all" + height="768" + layout="topleft" + name="panel_login" + focus_root="true" + background_visible="true" + bg_opaque_color="0.16 0.16 0.16 1" + background_opaque="true" + width="1024"> + <panel.string + name="forgot_password_url"> + http://secondlife.com/account/request.php + </panel.string> + <layout_stack + follows="left|right|top|bottom" + width="1024" + height="768" + left="0" + name="logo_stack" + orientation="vertical" + top="0"> + <layout_panel + height="18" + auto_resize="false" + name="page_top" + width="1024" /> + <!-- start of logo stack --> + <layout_panel + height="130" + min_height="10" + auto_resize="false" + name="parent_panel" + width="1024"> + <layout_stack + follows="left|right|top|bottom" + height="100" + left="0" + name="logo_stack" + orientation="horizontal" + top="0" + width="1024"> + <layout_panel + height="110" + min_height="10" + auto_resize="true" + name="logo_left" + width="300" /> + <layout_panel + auto_resize="false" + follows="left|right|top" + name="logo_container" + width="225" + left="0" + top="0" + height="105"> + <icon + height="94" + image_name="login_sl_logo" + left="0" + name="sl_logo" + top="0" /> + </layout_panel> + <layout_panel + height="100" + name="logo_right" + auto_resize="true" + width="300" /> + </layout_stack> + </layout_panel> + <!-- end of logo stack --> + <!-- start of widget stack --> + <layout_panel + height="100" + min_height="10" + auto_resize="false" + name="parent_panel2" + width="1024"> + <layout_stack + follows="left|right|top|bottom" + height="80" + left="0" + name="widget_stack" + orientation="horizontal" + top="0" + width="1024"> + <layout_panel + height="80" + min_height="10" + auto_resize="true" + name="widget_left" + width="200" /> + <layout_panel + auto_resize="false" + follows="left|right|top" + name="widget_container" + width="532" + left="0" + top="0" + height="80"> + <combo_box + allow_text_entry="true" + follows="left|bottom" + height="32" + left="0" + label="Username" + combo_editor.font="SansSerifLarge" + max_chars="128" + top="0" + commit_on_focus_lost="false" + combo_editor.prevalidate_callback="ascii" + tool_tip="The username you chose when you registered, like bobsmith12 or Steller Sunshine" + name="username_combo" + width="232"> + <combo_box.combo_editor + text_pad_left="8" /> + <combo_box.combo_button + visible ="false"/> + <combo_box.drop_down_button + visible ="false"/> + </combo_box> + <line_editor + follows="left|top" + width="200" + height="32" + left="220" + max_length_bytes="16" + name="password_edit" + label="Password" + text_pad_left="8" + font="SansSerifLarge" + is_password="true" + select_on_focus="true" + commit_on_focus_lost="false" + top="0" /> + <button + follows="left|top" + image_unselected="PushButton_Login" + image_pressed="PushButton_Login_Pressed" + image_hover="PushButton_Login_Over" + label="Log In" + label_color="White" + font="SansSerifLarge" + name="connect_btn" + left="432" + width="100" + height="32" + top="0" /> + <check_box + control_name="RememberPassword" + follows="left|top" + font="SansSerifLarge" + left="0" + top="32" + height="24" + label="Remember me" + check_button.bottom="3" + name="remember_check" + width="145" /> + <text + follows="left|top" + font="SansSerifLarge" + text_color="EmphasisColor" + height="16" + name="forgot_password_text" + left="216" + top="34" + width="200"> + Forgotten password + </text> + </layout_panel> + <layout_panel + height="100" + name="widget_right" + auto_resize="true" + width="200" /> + </layout_stack> + </layout_panel> + <!-- end of widget stack --> + <!-- start of images stack --> + <layout_panel + height="500" + min_height="10" + auto_resize="false" + name="parent_panel3" + width="1024"> + <layout_stack + follows="left|right|top|bottom" + height="500" + left="0" + name="images_stack" + orientation="horizontal" + top="0" + width="1024"> + <layout_panel + height="500" + min_height="10" + auto_resize="true" + name="images_left" + width="96" /> + <layout_panel + auto_resize="false" + follows="left|right|top" + name="images_container" + width="832" + left="0" + top="0" + height="500"> + <icon + height="400" + width="400" + image_name="first_login_image_left" + left="0" + name="image_left" + top="0" /> + <icon + height="400" + width="400" + image_name="first_login_image_right" + left_pad="32" + name="image_right" + top="0" /> + <text + follows="left|top" + font="SansSerifLarge" + text_color="White" + height="64" + name="image_caption_left" + left="0" + halign="center" + top="408" + word_wrap="true" + width="400"> + Your first step is Learning Island. Find the exit portal! + </text> + <text + follows="left|top" + font="SansSerifLarge" + text_color="White" + height="64" + name="image_caption_right" + left="432" + halign="center" + top="408" + word_wrap="true" + width="400"> + Then explore Social Island and meet other new residents! + </text> + </layout_panel> + <layout_panel + height="100" + name="images_right" + auto_resize="true" + width="96" /> + </layout_stack> + </layout_panel> + <!-- end of images stack --> + <layout_panel + height="400" + min_height="10" + auto_resize="true" + name="page_bottom" + width="1024" /> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index 30239d6d01..0dd75b1b55 100755 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -295,14 +295,14 @@ value="SampleParcel, Name Long (145, 228, 26)" width="285" /> <expandable_text - follows="left|top|right" + follows="left|top" height="50" layout="topleft" left="5" name="description" top_pad="10" value="Du waltz die spritz" - width="300" /> + width="285" /> <text follows="left|top" height="14" diff --git a/indra/newview/skins/default/xui/en/panel_postcard_message.xml b/indra/newview/skins/default/xui/en/panel_postcard_message.xml index ab2a42ea01..331a08b4bb 100755 --- a/indra/newview/skins/default/xui/en/panel_postcard_message.xml +++ b/indra/newview/skins/default/xui/en/panel_postcard_message.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel - height="380" + height="319" layout="topleft" name="panel_postcard_message" width="490"> @@ -12,7 +12,7 @@ font="SansSerif" height="16" layout="topleft" - left="12" + left="5" name="to_label" top="10" width="60"> @@ -25,7 +25,7 @@ layout="topleft" left_pad="10" name="to_form" - right="-10" + right="-3" top_delta="-4" /> <text type="string" @@ -35,7 +35,7 @@ font="SansSerif" height="16" layout="topleft" - left="12" + left="5" name="name_label" width="60"> From: @@ -47,7 +47,7 @@ left_pad="10" max_length_bytes="100" name="name_form" - right="-10" + right="-3" top_delta="-4" /> <text type="string" @@ -57,7 +57,7 @@ font="SansSerif" height="16" layout="topleft" - left="12" + left="5" name="subject_label" width="60"> Subject: @@ -65,61 +65,24 @@ <line_editor follows="left|top|right" height="20" - label="Type your subject here." layout="topleft" left_pad="10" max_length_bytes="100" name="subject_form" - right="-10" + right="-3" top_delta="-4" /> - <text - type="string" - length="1" - bottom_delta="23" - follows="top|left|right" - font="SansSerif" - layout="topleft" - left="12" - name="msg_label" - right="-10"> - Message: - </text> <text_editor type="string" length="1" follows="left|top|right" - height="60" + height="48" layout="topleft" - left_delta="0" + left="5" max_length="700" name="msg_form" - right="-10" - top_pad="10" + right="-4" + top_pad="5" word_wrap="true"> Type your message here. </text_editor> - <button - follows="right|bottom" - height="23" - label="Cancel" - layout="topleft" - name="cancel_btn" - right="-32" - top="350" - width="100"> - <button.commit_callback - function="Postcard.Cancel" /> - </button> - <button - follows="right|bottom" - height="23" - label="Send" - layout="topleft" - left_delta="-106" - name="send_btn" - top_delta="0" - width="100"> - <button.commit_callback - function="Postcard.Send" /> - </button> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_postcard_settings.xml b/indra/newview/skins/default/xui/en/panel_postcard_settings.xml index 3f67a48b14..525149d7ee 100755 --- a/indra/newview/skins/default/xui/en/panel_postcard_settings.xml +++ b/indra/newview/skins/default/xui/en/panel_postcard_settings.xml @@ -9,10 +9,10 @@ height="23" label="Resolution" layout="topleft" - left="10" + left="5" name="postcard_size_combo" - right="-10" - top_pad="10"> + right="-3" + top_pad="5"> <combo_box.item label="Current Window" name="CurrentWindow" @@ -34,103 +34,55 @@ name="Custom" value="[i-1,i-1]" /> </combo_box> - <layout_stack - animate="false" - follows="all" - height="275" - layout="bottomleft" - name="postcard_image_params_ls" - left_delta="0" - orientation="vertical" - top_pad="10" - right="-10"> - <layout_panel - follows="top|left|right" - height="60" - layout="topleft" - left="0" - name="postcard_image_size_lp" - auto_resize="false" - top="0" - right="-1" - visible="true"> - <spinner - allow_text_entry="false" - decimal_digits="0" - follows="left|top" - height="20" - increment="32" - label="Width" - label_width="40" - layout="topleft" - left="10" - max_val="6016" - min_val="32" - name="postcard_snapshot_width" - top_pad="10" - width="95" /> - <spinner - allow_text_entry="false" - decimal_digits="0" - follows="left|top" - height="20" - increment="32" - label="Height" - label_width="40" - layout="topleft" - left_pad="5" - max_val="6016" - min_val="32" - name="postcard_snapshot_height" - top_delta="0" - width="95" /> - <check_box - height="10" - bottom_delta="20" - follows="left|top" - label="Constrain proportions" - layout="topleft" - left="10" - name="postcard_keep_aspect_check" /> - </layout_panel> - <layout_panel - follows="top|left|right" - height="23" - layout="topleft" - left="0" - name="postcard_image_format_quality_lp" - auto_resize="true" - top="0" - right="-1" - visible="true"> - <slider - decimal_digits="0" - follows="left|top" - height="15" - increment="1" - initial_value="75" - label="Image quality" - label_width="80" - layout="topleft" - left="0" - max_val="100" - name="image_quality_slider" - top_pad="7" - width="190" /> - <text - type="string" - follows="left|top" - font="SansSerifSmall" - length="1" - height="14" - layout="topleft" - left_pad="-5" - halign="left" - name="image_quality_level" - top_delta="0" - width="60"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner + allow_text_entry="false" + decimal_digits="0" + follows="left|top" + height="20" + increment="32" + label="Width x Height" + label_width="90" + layout="topleft" + left="5" + max_val="6016" + min_val="32" + name="postcard_snapshot_width" + top_pad="5" + width="144" /> + <spinner + allow_text_entry="false" + decimal_digits="0" + follows="left|top" + height="20" + increment="32" + label="" + label_width="0" + layout="topleft" + left_pad="0" + max_val="6016" + min_val="32" + name="postcard_snapshot_height" + top_delta="0" + width="52" /> + <check_box + top_pad="12" + follows="left|top" + label="Constrain proportions" + layout="topleft" + left="5" + name="postcard_keep_aspect_check" /> + <slider + decimal_digits="0" + follows="left|top" + height="15" + increment="1" + initial_value="75" + label="Quality:" + label_width="45" + layout="topleft" + left="5" + max_val="100" + name="image_quality_slider" + top_pad="6" + width="190" /> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml index ea0f7d8593..9da044ab64 100755 --- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml @@ -179,46 +179,29 @@ left_pad="2" name="rating_icon_adult" width="18"/> - <text - type="string" - length="1" - follows="left|top" - height="15" - layout="topleft" - left="30" - name="start_location_textbox" - top_pad="8" - width="394"> - Start location: - </text> - <combo_box - control_name="LoginLocation" - follows="left|top" - height="23" - layout="topleft" - name="start_location_combo" - left="50" - width="200"> - <combo_box.item - label="My Last Location" - name="MyLastLocation" - value="last" /> - <combo_box.item - label="My Home" - name="MyHome" - value="home" /> - </combo_box> - <check_box - control_name="ShowStartLocation" - height="16" - initial_value="true" - label="Show on login" - layout="topleft" - left_pad="5" - name="show_location_checkbox" - top_delta="5" - width="256" /> - <text + <check_box + control_name="ShowFavoritesOnLogin" + enabled="false" + height="16" + layout="topleft" + label="Show favorite locations on login screen" + left="30" + name="favorites_on_login_check" + top_pad="10" + width="350" /> + <text + type="string" + length="1" + follows="left|top" + height="15" + layout="topleft" + left="52" + name="favorites_check_extra_text" + top_pad="0" + width="400"> + (Others using this computer will also see them) + </text> + <text type="string" length="1" follows="left|top" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml index d7ffb73dda..323da2be38 100755 --- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml @@ -74,17 +74,6 @@ name="auto_disengage_mic_check" top_pad="10" width="350" /> - <check_box - control_name="ShowFavoritesOnLogin" - enabled="false" - height="16" - layout="topleft" - label="Show my Favorite Landmarks at Login (via 'Start At' drop-down menu)" - left="30" - name="favorites_on_login_check" - top_pad="10" - width="350" /> - <button follows="left|bottom" height="23" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml index dd4533ae74..1e9a1aa27c 100755 --- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml @@ -106,7 +106,7 @@ width="300"> Web: </text> - <radio_group + <!-- <radio_group control_name="UseExternalBrowser" draw_border="false" follows="top|left" @@ -136,6 +136,48 @@ tool_tip="Use the built-in web browser for help, web links, etc. This browser opens as a new window inside [APP_NAME]." top_delta="20" width="480" /> + </radio_group> --> + + <radio_group + control_name="PreferredBrowserBehavior" + draw_border="false" + follows="left|top" + height="60" + layout="topleft" + left_delta="50" + name="preferred_browser_behavior" + top_pad="0" + width="480"> + <radio_item + height="20" + label="Use my browser (Chrome, Firefox, IE) for all links" + layout="topleft" + left="0" + name="internal" + value="0" + tool_tip="Use the default system web browser for help, web links, etc. Not recommended if running full screen." + top="0" + width="480" /> + <radio_item + height="20" + label="Use built-in browser for Second Life links only" + layout="topleft" + left_delta="0" + name="external" + value="1" + tool_tip="Use the default system web browser for help, web links, etc. Builtin browser will be used only for LindenLab/SecondLife links." + top_delta="20" + width="480" /> + <radio_item + height="20" + label="Use built-in browser for all links" + layout="topleft" + left="0" + name="internal" + value="2" + tool_tip="Use the built-in web browser for help, web links, etc. This browser opens as a new window inside [APP_NAME]." + top_delta="20" + width="480" /> </radio_group> <check_box diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml index 71d808fa4b..ea579c6dae 100755 --- a/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml @@ -12,12 +12,12 @@ left="12" mouse_opaque="true" name="title_icon" - top="5" + top="6" width="18" /> <text follows="top|left|right" font="SansSerifBold" - height="20" + height="14" layout="topleft" left_pad="12" length="1" @@ -25,46 +25,28 @@ right="-10" text_color="white" type="string" - top_delta="5"> - Save to My Inventory + top_delta="3"> + Inventory </text> <view_border bevel_style="in" follows="left|top|right" height="1" - left="10" + left="9" layout="topleft" name="hr" - right="-10" + right="-5" top_pad="5" /> - <text - bottom="35" - follows="top|left|right" - font="SansSerif" - height="56" - layout="topleft" - left="12" - length="1" - name="hint_lbl" - top_pad="10" - type="string" - word_wrap="true"> - Saving an image to your inventory costs L$[UPLOAD_COST]. To save your image as a texture select one of the square formats. - </text> <combo_box follows="top|left|right" - height="23" + height="20" label="Resolution" layout="topleft" left_delta="0" name="texture_size_combo" - right="-10" - top_pad="10"> - <combo_box.item - label="Current Window" - name="CurrentWindow" - value="[i0,i0]" /> + right="-5" + top_pad="5"> <combo_box.item label="Small (128x128)" name="Small(128x128)" @@ -88,61 +70,74 @@ follows="left|top" height="20" increment="32" - label="Width" - label_width="40" + label="Width x Height" + label_width="90" layout="topleft" left="10" max_val="6016" min_val="32" name="inventory_snapshot_width" - top_pad="10" - width="95" /> + top_pad="7" + width="144" /> <spinner allow_text_entry="false" decimal_digits="0" follows="left|top" height="20" increment="32" - label="Height" - label_width="40" + label="" + label_width="0" layout="topleft" - left_pad="5" + left_pad="0" max_val="6016" min_val="32" name="inventory_snapshot_height" top_delta="0" - width="95" /> + width="54" /> <check_box - bottom_delta="20" - height="10" + top_pad="12" follows="left|top" label="Constrain proportions" layout="topleft" left="10" name="inventory_keep_aspect_check" visible="false" /> + <text + follows="top|left" + font="SansSerif" + height="56" + layout="topleft" + left="10" + length="1" + name="hint_lbl" + top_pad="6" + width="200" + type="string" + word_wrap="true"> + Saving an image to your inventory costs L$[UPLOAD_COST]. To save your image as a texture select one of the square formats. + </text> <button follows="right|bottom" height="23" label="Cancel" layout="topleft" name="cancel_btn" - right="-32" - top="350" - width="100"> + right="-5" + top="337" + width="97"> <button.commit_callback function="Inventory.Cancel" /> </button> <button - follows="right|bottom" + follows="left|bottom" height="23" label="Save" layout="topleft" - left_delta="-106" + left="10" name="save_btn" top_delta="0" - width="100"> + width="97"> <button.commit_callback function="Inventory.Save" /> </button> -</panel> +</panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_local.xml b/indra/newview/skins/default/xui/en/panel_snapshot_local.xml index 781ab17403..188c9f8707 100755 --- a/indra/newview/skins/default/xui/en/panel_snapshot_local.xml +++ b/indra/newview/skins/default/xui/en/panel_snapshot_local.xml @@ -12,12 +12,12 @@ left="12" mouse_opaque="true" name="title_icon" - top="5" + top="7" width="18" /> <text follows="top|left|right" font="SansSerifBold" - height="20" + height="14" layout="topleft" left_pad="12" length="1" @@ -25,28 +25,27 @@ right="-10" text_color="white" type="string" - top_delta="4"> - Save to My Computer + top_delta="2"> + Disk </text> <view_border bevel_style="in" follows="left|top|right" height="1" - left="10" + left="9" layout="topleft" name="hr" - right="-10" - top_pad="5" - /> + right="-5" + top_pad="5"/> <combo_box follows="left|top|right" - height="23" + height="20" label="Resolution" layout="topleft" left_delta="0" name="local_size_combo" - right="-10" - top_pad="10"> + right="-5" + top_pad="5"> <combo_box.item label="Current Window" name="CurrentWindow" @@ -80,149 +79,114 @@ name="Custom" value="[i-1,i-1]" /> </combo_box> - <layout_stack - animate="false" - follows="all" - height="275" - layout="bottomleft" - name="local_image_params_ls" - left_delta="0" - orientation="vertical" - top_pad="10" - right="-10"> - <layout_panel - follows="top|left|right" - height="60" - layout="topleft" - left="0" - name="local_image_size_lp" - auto_resize="false" - top="0" - right="-1" - visible="true"> - <spinner - allow_text_entry="false" - decimal_digits="0" - follows="left|top" - height="20" - increment="32" - label="Width" - label_width="40" - layout="topleft" - left="10" - max_val="6016" - min_val="32" - name="local_snapshot_width" - top_pad="10" - width="95" /> - <spinner - allow_text_entry="false" - decimal_digits="0" - follows="left|top" - height="20" - increment="32" - label="Height" - label_width="40" - layout="topleft" - left_pad="5" - max_val="6016" - min_val="32" - name="local_snapshot_height" - top_delta="0" - width="95" /> - <check_box - bottom_delta="20" - height="10" - follows="left|top" - label="Constrain proportions" - layout="topleft" - left="10" - name="local_keep_aspect_check" /> - </layout_panel> - <layout_panel - follows="top|left|right" - height="23" - layout="topleft" - left="0" - name="local_image_format_quality_lp" - auto_resize="true" - top="0" - right="-1" - visible="true"> - <combo_box - follows="left|top" - height="23" - label="Format" - layout="topleft" - left_delta="0" - name="local_format_combo" - top_pad="0" - width="120"> - <combo_box.item - label="PNG (Lossless)" - name="PNG" - value="PNG" /> - <combo_box.item - label="JPEG" - name="JPEG" - value="JPEG" /> - <combo_box.item - label="BMP (Lossless)" - name="BMP" - value="BMP" /> - </combo_box> - <slider - decimal_digits="0" - follows="left|top" - height="15" - increment="1" - initial_value="75" - label="Image quality" - label_width="80" - layout="topleft" - left="10" - max_val="100" - name="image_quality_slider" - top_pad="7" - width="200" /> - <text - type="string" - follows="left|top" - font="SansSerifSmall" - length="1" - height="14" - layout="topleft" - left_pad="-5" - halign="left" - name="image_quality_level" - top_delta="0" - width="60"> - ([QLVL]) - </text> - </layout_panel> - </layout_stack> + <spinner + allow_text_entry="false" + decimal_digits="0" + follows="left|top" + height="20" + increment="32" + label="Width x Height" + label_width="90" + layout="topleft" + left="10" + max_val="6016" + min_val="32" + name="local_snapshot_width" + top_pad="7" + width="144" /> + <spinner + allow_text_entry="false" + decimal_digits="0" + follows="left|top" + height="20" + increment="32" + label="" + label_width="0" + layout="topleft" + left_pad="0" + max_val="6016" + min_val="32" + name="local_snapshot_height" + top_delta="0" + width="54" /> + <check_box + top_pad="12" + follows="left|top" + label="Constrain proportions" + layout="topleft" + left="10" + name="local_keep_aspect_check" /> + <text + type="string" + length="1" + follows="left|top" + height="13" + layout="topleft" + left="10" + name="local_format_label" + top_pad="7" + width="50"> + Format: + </text> + <combo_box + follows="left|top|right" + height="20" + label="Format" + layout="topleft" + left="65" + right="-5" + name="local_format_combo" + top_delta="-3" + width="120"> + <combo_box.item + label="PNG (Lossless)" + name="PNG" + value="PNG" /> + <combo_box.item + label="JPEG" + name="JPEG" + value="JPEG" /> + <combo_box.item + label="BMP (Lossless)" + name="BMP" + value="BMP" /> + </combo_box> + <slider + decimal_digits="0" + follows="left|top" + height="15" + increment="1" + initial_value="75" + label="Quality:" + label_width="45" + layout="topleft" + left="10" + max_val="100" + name="image_quality_slider" + top_pad="6" + width="203" /> <button follows="right|bottom" height="23" label="Cancel" layout="topleft" name="cancel_btn" - right="-32" - top="350" - width="100"> + right="-5" + top="337" + width="97"> <button.commit_callback function="Local.Cancel" /> </button> <flyout_button - follows="right|bottom" + follows="left|bottom" height="23" label="Save" layout="topleft" - left_delta="-106" + left="10" name="save_btn" tool_tip="Save image to a file" top_delta="0" - width="100"> + width="97"> <flyout_button.item label="Save" name="save_item" @@ -232,4 +196,4 @@ name="saveas_item" value="save as" /> </flyout_button> -</panel> +</panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_options.xml b/indra/newview/skins/default/xui/en/panel_snapshot_options.xml index eff60f8228..265217ef60 100755 --- a/indra/newview/skins/default/xui/en/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/en/panel_snapshot_options.xml @@ -4,117 +4,124 @@ height="240" layout="topleft" name="panel_snapshot_options" - width="490"> + width="208"> + <button + follows="left|top" + font="SansSerif" + halign="left" + height="22" + image_overlay="Snapshot_Download" + image_overlay_alignment="left" + image_top_pad="-0" + imgoverlay_label_space="10" + label="Save to Disk" + layout="topleft" + left="9" + name="save_to_computer_btn" + top_pad="9"> + <button.commit_callback + function="Snapshot.SaveToComputer" /> + </button> <button - follows="left|top|right" + follows="left|top" font="SansSerif" halign="left" - height="38" - image_overlay="Snapshot_Profile" + height="22" + image_overlay="Snapshot_Inventory" image_overlay_alignment="left" - image_top_pad="-2" + image_top_pad="-1" imgoverlay_label_space="10" - label="Post to My Profile Feed" + label="Save to Inventory (L$[AMOUNT])" layout="topleft" left_delta="0" + name="save_to_inventory_btn" + top_pad="5"> + <button.commit_callback + function="Snapshot.SaveToInventory" /> + </button> + <button + follows="left|top" + font="SansSerif" + halign="left" + height="22" + image_overlay="Snapshot_Profile" + image_overlay_alignment="left" + image_top_pad="-1" + imgoverlay_label_space="10" + label="Upload to Profile" + layout="topleft" name="save_to_profile_btn" - pad_left="10" - right="-10" - top_pad="10"> + left_delta="0" + top_pad="5"> <button.commit_callback function="Snapshot.SaveToProfile" /> </button> <button - follows="left|top|right" + follows="left|top" font="SansSerif" halign="left" - height="38" - image_overlay="Snapshot_Email" + height="22" + image_overlay="Snapshot_Facebook" image_overlay_alignment="left" - image_top_pad="-2" + image_top_pad="0" imgoverlay_label_space="10" - label="Email" + label="Upload to Facebook" layout="topleft" left_delta="0" - name="save_to_email_btn" - pad_left="10" - right="-10" - top_pad="10"> + name="send_to_facebook_btn" + top_pad="5"> <button.commit_callback - function="Snapshot.SaveToEmail" /> + function="Snapshot.SendToFacebook"/> </button> <button - follows="left|top|right" + follows="left|top" font="SansSerif" halign="left" - height="38" - image_overlay="Snapshot_Inventory" + height="22" + image_overlay="Command_Twitter_Icon" image_overlay_alignment="left" - image_top_pad="-2" + image_top_pad="0" imgoverlay_label_space="10" - label="Save to My Inventory (L$[AMOUNT])" + label="Upload to Twitter" layout="topleft" left_delta="0" - name="save_to_inventory_btn" - pad_left="10" - right="-10" - top_pad="10"> + name="send_to_twitter_btn" + top_pad="5"> <button.commit_callback - function="Snapshot.SaveToInventory" /> + function="Snapshot.SendToTwitter"/> </button> <button - follows="left|top|right" + follows="left|top" font="SansSerif" halign="left" - height="38" - image_overlay="Snapshot_Download" + height="22" + image_overlay="Command_Flickr_Icon" image_overlay_alignment="left" - image_top_pad="-2" + image_top_pad="0" imgoverlay_label_space="10" - label="Save to My Computer" + label="Upload to Flickr" layout="topleft" left_delta="0" - name="save_to_computer_btn" - pad_left="10" - right="-10" - top_pad="10"> + name="send_to_flickr_btn" + top_pad="5"> <button.commit_callback - function="Snapshot.SaveToComputer" /> + function="Snapshot.SendToFlickr"/> + </button> + <button + follows="left|top" + font="SansSerif" + halign="left" + height="22" + image_overlay="Snapshot_Email" + image_overlay_alignment="left" + image_top_pad="0" + imgoverlay_label_space="10" + label="Send via E-mail" + layout="topleft" + left_delta="0" + name="save_to_email_btn" + top_pad="5"> + <button.commit_callback + function="Snapshot.SaveToEmail" /> </button> - <text - font="SansSerif" - layout="topleft" - length="1" - follows="top|left" - height="16" - left="10" - name="send_to_facebook_textbox" - top_pad="10" - type="string"> - Send to: [secondlife:/// Facebook] - </text> - <text - font="SansSerif" - layout="topleft" - length="1" - follows="top|left" - height="16" - left="140" - name="send_to_twitter_textbox" - top_pad="-16" - type="string"> - [secondlife:/// Twitter] - </text> - <text - font="SansSerif" - layout="topleft" - length="1" - follows="top|left" - height="16" - left="190" - name="send_to_flickr_textbox" - top_pad="-16" - type="string"> - [secondlife:/// Flickr] - </text> -</panel> +</panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml index ebba292a93..975b08be05 100755 --- a/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml +++ b/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml @@ -24,12 +24,12 @@ left="12" mouse_opaque="true" name="title_icon" - top="5" + top="7" width="18" /> <text follows="top|left|right" font="SansSerifBold" - height="20" + height="14" layout="topleft" left_pad="12" length="1" @@ -37,63 +37,67 @@ right="-10" text_color="white" type="string" - top_delta="3"> - Email + top_delta="2"> + E-mail </text> - <button - follows="right|top" - height="23" - is_toggle="true" - label="Message" - layout="topleft" - name="message_btn" - right="-82" - top_delta="-7" - width="70"> - <button.commit_callback - function="Postcard.Message" /> - </button> - <button - follows="right|top" - height="23" - is_toggle="true" - label="Settings" - layout="topleft" - name="settings_btn" - top_delta="0" - right="-10" - width="70"> - <button.commit_callback - function="Postcard.Settings" /> - </button> <view_border bevel_style="in" follows="left|top|right" height="1" - left="10" + left="9" layout="topleft" name="hr" - right="-10" + right="-5" top_pad="5" /> - <panel_container + <tab_container + name="postcard_tabs" + tab_group="1" + tab_min_width="97" + tab_height="21" + tab_position="top" + top_pad="7" + left="5" + right="-2" + height="319" follows="all" - height="340" - layout="topleft" - left="0" - name="postcard_panel_container" - default_panel_name="panel_postcard_message" - top_pad="10" - width="490"> + halign="center" + use_highlighting_on_hover="true"> <panel follows="all" layout="topleft" + label="Message" name="panel_postcard_message" filename="panel_postcard_message.xml" /> <panel follows="all" layout="topleft" + label="Settings" name="panel_postcard_settings" filename="panel_postcard_settings.xml" /> - </panel_container> -</panel> + </tab_container> + <button + follows="right|bottom" + height="23" + label="Cancel" + layout="topleft" + name="cancel_btn" + right="-6" + bottom="-20" + width="97"> + <button.commit_callback + function="Postcard.Cancel" /> + </button> + <button + follows="left|bottom" + height="23" + label="Send" + layout="topleft" + left="10" + name="send_btn" + top_delta="0" + width="97"> + <button.commit_callback + function="Postcard.Send" /> + </button> +</panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml index 0dd357aa1a..d86cb92981 100755 --- a/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml @@ -12,12 +12,12 @@ left="12" mouse_opaque="true" name="title_icon" - top="5" + top="7" width="18" /> <text follows="top|left|right" font="SansSerifBold" - height="20" + height="14" layout="topleft" left_pad="12" length="1" @@ -26,27 +26,28 @@ text_color="white" type="string" top_delta="4"> - Post to My Profile Feed + Profile </text> <view_border bevel_style="in" follows="left|top|right" height="1" - left="10" + left="9" layout="topleft" name="hr" - right="-10" + right="-5" top_pad="5" /> <combo_box - follows="left|top" + follows="left|top|right" height="23" label="Resolution" layout="topleft" - left_delta="0" + left="10" + right="-5" name="profile_size_combo" - top_pad="10" - width="250"> + top_pad="5" + width="180"> <combo_box.item label="Current Window" name="CurrentWindow" @@ -68,132 +69,99 @@ name="Custom" value="[i-1,i-1]" /> </combo_box> - <layout_stack - animate="false" - follows="all" - height="270" - layout="bottomleft" - name="profile_image_params_ls" + <spinner + allow_text_entry="false" + decimal_digits="0" + follows="left|top" + height="20" + increment="32" + label="Width x Height" + label_width="90" + layout="topleft" + left="10" + max_val="6016" + min_val="32" + name="profile_snapshot_width" + top_pad="7" + width="144" /> + <spinner + allow_text_entry="false" + decimal_digits="0" + follows="left|top" + height="20" + increment="32" + label="" + label_width="0" + layout="topleft" + left_pad="0" + max_val="6016" + min_val="32" + name="profile_snapshot_height" + top_delta="0" + width="54" /> + <check_box + top_pad="12" + label="Constrain proportions" + layout="topleft" + left="10" + name="profile_keep_aspect_check" /> + <text + length="1" + follows="top|left|right" + height="16" + layout="topleft" + left="12" + name="caption_label" + right="-10" + top_pad="4" + type="string"> + Caption: + </text> + <text_editor + follows="top|left|right" + height="35" + layout="topleft" + left="10" + right="-5" + length="1" + max_length="700" + name="caption" + width="200" + top_pad="2" + type="string" + word_wrap="true"> + </text_editor> + <check_box + follows="left|top" + initial_value="true" + label="Include location" + layout="topleft" left_delta="0" - orientation="vertical" - top_pad="10" - right="-10"> - <layout_panel - follows="top|left|right" - height="55" - layout="topleft" - left="0" - name="profile_image_size_lp" - auto_resize="false" - top="0" - right="-1" - visible="true"> - <spinner - allow_text_entry="false" - decimal_digits="0" - follows="left|top" - height="20" - increment="32" - label="Width" - label_width="40" - layout="topleft" - left="10" - max_val="6016" - min_val="32" - name="profile_snapshot_width" - top_pad="10" - width="95" /> - <spinner - allow_text_entry="false" - decimal_digits="0" - follows="left|top" - height="20" - increment="32" - label="Height" - label_width="40" - layout="topleft" - left_pad="5" - max_val="6016" - min_val="32" - name="profile_snapshot_height" - top_delta="0" - width="95" /> - <check_box - height="10" - bottom_delta="20" - label="Constrain proportions" - layout="topleft" - left="10" - name="profile_keep_aspect_check" /> - </layout_panel> - <layout_panel - follows="top|left|right" - height="200" - layout="topleft" - left="0" - name="profile_image_metadata_lp" - auto_resize="true" - top="0" - right="-1" - visible="true"> - <text - length="1" - follows="top|left|right" - font="SansSerif" - height="16" - layout="topleft" - left="0" - name="caption_label" - right="-10" - top_pad="0" - type="string"> - Caption: - </text> - <text_editor - follows="all" - height="155" - layout="topleft" - left_delta="0" - length="1" - max_length="700" - name="caption" - right="-10" - top_pad="5" - type="string" - word_wrap="true"> - </text_editor> - <check_box - follows="left|bottom" - initial_value="true" - label="Include location" - layout="topleft" - left_delta="0" - name="add_location_cb" - top_pad="15" /> - </layout_panel> - </layout_stack> + height="18" + name="add_location_cb" + top_pad="3" /> <button follows="right|bottom" height="23" label="Cancel" layout="topleft" name="cancel_btn" - right="-32" - top="350" - width="100"> + right="-5" + top="337" + width="97"> <button.commit_callback function="PostToProfile.Cancel" /> </button> <button - follows="right|bottom" + follows="left|bottom" height="23" label="Post" layout="topleft" - left_delta="-106" + left="10" name="post_btn" top_delta="0" - width="100"> + width="97"> <button.commit_callback function="PostToProfile.Send" /> </button> -</panel> +</panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_tools_texture.xml b/indra/newview/skins/default/xui/en/panel_tools_texture.xml index 426c0c4915..cb6b2fafd8 100644 --- a/indra/newview/skins/default/xui/en/panel_tools_texture.xml +++ b/indra/newview/skins/default/xui/en/panel_tools_texture.xml @@ -36,8 +36,9 @@ <color_swatch can_apply_immediately="true" follows="left|top" - height="45" + height="22" label="" + label_height="0" layout="topleft" left="10" name="colorswatch" diff --git a/indra/newview/skins/default/xui/en/panel_twitter_account.xml b/indra/newview/skins/default/xui/en/panel_twitter_account.xml index ee4f6396e1..b9049a0bba 100644 --- a/indra/newview/skins/default/xui/en/panel_twitter_account.xml +++ b/indra/newview/skins/default/xui/en/panel_twitter_account.xml @@ -1,6 +1,6 @@ <panel height="400" - width="304" + width="272" layout="topleft" name="panel_twitter_account"> <string @@ -15,9 +15,9 @@ follows="top|left" font="SansSerif" height="16" - left="9" + left="10" name="account_caption_label" - top="21" + top="5" type="string"> Not connected to Twitter. </text> @@ -28,19 +28,23 @@ follows="top|left" font="SansSerif" height="16" - left="9" + left="10" name="account_name_label" parse_urls="true" type="string"/> <panel layout="topleft" + follows="top|left" name="panel_buttons" height="345" - left="9"> + top_pad="3" + left="0"> <button layout="topleft" - follows="left|top" + follows="left|top|right" top_pad="9" + left="10" + right="-10" visible="true" height="23" label="Connect..." @@ -51,8 +55,10 @@ <button layout="topleft" - follows="left|top" + follows="left|top|right" top_delta="0" + left="10" + right="-10" height="23" label="Disconnect" name="disconnect_btn" @@ -65,9 +71,9 @@ length="1" follows="top|left" height="16" - left="0" + left="10" name="account_learn_more_label" - top_pad="20" + top_pad="5" type="string"> [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Learn about posting to Twitter] </text> diff --git a/indra/newview/skins/default/xui/en/panel_twitter_photo.xml b/indra/newview/skins/default/xui/en/panel_twitter_photo.xml index c2be56da21..9a460ceead 100644 --- a/indra/newview/skins/default/xui/en/panel_twitter_photo.xml +++ b/indra/newview/skins/default/xui/en/panel_twitter_photo.xml @@ -3,31 +3,22 @@ width="304" layout="topleft" name="panel_twitter_photo"> - <layout_stack - layout="topleft" - border_size="0" - height="412" - follows="all" - orientation="vertical" - name="stack_photo" - top="8"> - <layout_panel - name="text_panel" - height="160"> <text length="1" + layout="topleft" follows="top|left|right" font="SansSerif" height="16" - left="9" + left="10" name="status_label" - top="3" + top="5" type="string"> What's happening? </text> <text length="1" follows="top|left" + layout="topleft" font="SansSerif" text_color="EmphasisColor" halign="right" @@ -35,15 +26,16 @@ width="30" left="227" name="status_counter_label" - top="3" + top="5" type="string"> 140 </text> <text_editor follows="left|top" + layout="topleft" height="87" width="250" - left="9" + left="10" length="1" max_length="140" name="photo_status" @@ -52,33 +44,32 @@ </text_editor> <check_box follows="left|top" + layout="topleft" initial_value="true" label="Include SL location" name="add_location_cb" - left="9" + left="10" height="16" - top_pad="10"/> + top_pad="8"/> <check_box follows="left|top" + layout="topleft" initial_value="true" label="Include a photo" name="add_photo_cb" - left="9" + left="10" height="16" - top_pad="10"/> - </layout_panel> - <layout_panel - name="snapshot_panel" - height="227"> + top_pad="1"/> <combo_box control_name="TwitterPhotoResolution" follows="left|top" - top="6" - left="9" + layout="topleft" + top_pad="5" + left="10" name="resolution_combobox" tool_tip="Image resolution" height="21" - width="135"> + width="124"> <combo_box.item label="Current Window" name="CurrentWindow" @@ -99,61 +90,76 @@ <combo_box control_name="TwitterPhotoFilters" follows="right|top" + layout="topleft" name="filters_combobox" tool_tip="Image filters" - top="6" - left="165" + top_delta="0" + right="-10" height="21" - width="135"> + width="124"> <combo_box.item label="No Filter" name="NoFilter" value="NoFilter" /> </combo_box> <panel + layout="topleft" height="150" width="250" visible="true" name="thumbnail_placeholder" - top="33" - follows="left|top" - left="9"> + top_pad="5" + right="-10" + follows="left|top|right" + left="10"> </panel> - <button - follows="left|top" - height="23" - label="Refresh" - left="9" - top_pad="5" - name="new_snapshot_btn" - tool_tip="Click to refresh" - visible="true" - width="100" > - <button.commit_callback - function="SocialSharing.RefreshPhoto" /> - </button> - <text + <text follows="left|top" + layout="topleft" font="SansSerif" text_color="EmphasisColor" height="14" - top_pad="-19" - left_pad="-30" + top_pad="2" + left="10" length="1" halign="center" name="working_lbl" translate="false" type="string" visible="true" - width="150"> + width="251"> Refreshing... </text> + <view_border + bevel_style="in" + follows="left|top" + layout="topleft" + height="1" + left="10" + name="refresh_border" + width="250" + top_pad="0"/> + <button + follows="left|top" + layout="topleft" + height="23" + label="Refresh" + left="10" + top_pad="5" + name="new_snapshot_btn" + tool_tip="Click to refresh" + visible="true" + width="100" > + <button.commit_callback + function="SocialSharing.RefreshPhoto" /> + </button> <button follows="right|top" + layout="topleft" height="23" label="Preview" - left="200" - top_pad="-19" + right="-10" + top_delta="0" name="big_preview_btn" tool_tip="Click to toggle preview" is_toggle="true" @@ -162,14 +168,11 @@ <button.commit_callback function="SocialSharing.BigPreview" /> </button> - </layout_panel> - <layout_panel - name="photo_button_panel" - height="25"> <button follows="left|top" - top="0" - left="9" + layout="topleft" + top_pad="3" + left="10" height="23" label="Tweet" name="post_photo_btn" @@ -178,16 +181,15 @@ function="SocialSharing.SendPhoto" /> </button> <button - follows="left|top" + follows="right|top" + layout="topleft" height="23" label="Cancel" name="cancel_photo_btn" - left_pad="15" + right="-10" top_delta="0" width="100"> <button.commit_callback function="SocialSharing.Cancel" /> </button> - </layout_panel> - </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 5fbc539a06..5dcb8e2cdf 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -233,6 +233,7 @@ Please try logging in again in a minute.</string> <string name="TooltipFlagNoScripts">No Scripts</string> <string name="TooltipLand">Land:</string> <string name="TooltipMustSingleDrop">Only a single item can be dragged here</string> + <string name="TooltipTooManyWearables">You can't wear a folder containing more than [AMOUNT] items. You can change this limit in Advanced > Show Debug Settings > WearFolderLimit.</string> <string name="TooltipPrice" value="L$[AMOUNT]: "/> <string name="TooltipOutboxDragToWorld">You can not rez items in your merchant outbox</string> diff --git a/indra/newview/skins/default/xui/en/teleport_strings.xml b/indra/newview/skins/default/xui/en/teleport_strings.xml index fdf41991cd..5a9a16d344 100755 --- a/indra/newview/skins/default/xui/en/teleport_strings.xml +++ b/indra/newview/skins/default/xui/en/teleport_strings.xml @@ -48,7 +48,10 @@ Go to 'Welcome Island Public' to repeat the tutorial. <message name="MustGetAgeRegion"> You must be age 18 or over to enter this region. </message> - </message_set> + <message name="RegionTPSpecialUsageBlocked"> + Unable to enter region. '[REGION_NAME]' is a Skill Gaming Region, and you must meet certain criteria in order to enter. For details, please review the [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ]. + </message> + </message_set> <message_set name="progress"> <message name="sending_dest"> Sending to destination. diff --git a/indra/newview/skins/default/xui/en/widgets/combo_box.xml b/indra/newview/skins/default/xui/en/widgets/combo_box.xml index 82d620d1e6..65f9a143e9 100755 --- a/indra/newview/skins/default/xui/en/widgets/combo_box.xml +++ b/indra/newview/skins/default/xui/en/widgets/combo_box.xml @@ -7,7 +7,7 @@ <combo_box.combo_button name="Combobox Button" hover_glow_amount="0.15" font="SansSerifSmall" - scale_image="false" + scale_image="true" image_unselected="ComboButton_Off" image_selected="ComboButton_Selected" image_disabled="ComboButton_Disabled" /> diff --git a/indra/newview/skins/default/xui/es/floater_big_preview.xml b/indra/newview/skins/default/xui/es/floater_big_preview.xml new file mode 100644 index 0000000000..b112243d7a --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_big_preview.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_big_preview" title="VISTA PREVIA"/> diff --git a/indra/newview/skins/default/xui/es/floater_facebook.xml b/indra/newview/skins/default/xui/es/floater_facebook.xml new file mode 100644 index 0000000000..3b0e05b193 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_facebook.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_facebook" title="PUBLICAR EN FACEBOOK"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="ESTADO" name="panel_facebook_status"/> + <panel label="FOTO" name="panel_facebook_photo"/> + <panel label="ESTOY AQUÍ" name="panel_facebook_place"/> + <panel label="AMIGOS" name="panel_facebook_friends"/> + <panel label="CUENTA" name="panel_facebook_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Error + </text> + <text name="connection_loading_text"> + Cargando... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_flickr.xml b/indra/newview/skins/default/xui/es/floater_flickr.xml new file mode 100644 index 0000000000..7f95d948fe --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_flickr.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_flickr" title="SUBIR A FLICKR"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="FOTO" name="panel_flickr_photo"/> + <panel label="CUENTA" name="panel_flickr_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Error + </text> + <text name="connection_loading_text"> + Cargando... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_lagmeter.xml b/indra/newview/skins/default/xui/es/floater_lagmeter.xml new file mode 100644 index 0000000000..227689a194 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_lagmeter.xml @@ -0,0 +1,154 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_lagmeter" title="MEDIDOR DEL LAG"> + <floater.string name="max_title_msg"> + Medidor del lag + </floater.string> + <floater.string name="max_width_px"> + 360 + </floater.string> + <floater.string name="min_title_msg"> + Lag + </floater.string> + <floater.string name="min_width_px"> + 90 + </floater.string> + <floater.string name="client_text_msg"> + Cliente + </floater.string> + <floater.string name="client_frame_rate_critical_fps"> + 10 + </floater.string> + <floater.string name="client_frame_rate_warning_fps"> + 15 + </floater.string> + <floater.string name="client_frame_time_window_bg_msg"> + Normal, ventana en segundo plano + </floater.string> + <floater.string name="client_frame_time_critical_msg"> + Frames del cliente valorados por debajo de [CLIENT_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="client_frame_time_warning_msg"> + Frames del cliente valorados entre [CLIENT_FRAME_RATE_CRITICAL] y [CLIENT_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="client_frame_time_normal_msg"> + Normal + </floater.string> + <floater.string name="client_draw_distance_cause_msg"> + Posible causa: distancia de dibujo fijada muy alta + </floater.string> + <floater.string name="client_texture_loading_cause_msg"> + Posible causa: imágenes cargándose + </floater.string> + <floater.string name="client_texture_memory_cause_msg"> + Posible causa: demasiadas imágenes en la memoria + </floater.string> + <floater.string name="client_complex_objects_cause_msg"> + Posible causa: demasiados objetos complejos en la escena + </floater.string> + <floater.string name="network_text_msg"> + Red + </floater.string> + <floater.string name="network_packet_loss_critical_pct"> + 10 + </floater.string> + <floater.string name="network_packet_loss_warning_pct"> + 5 + </floater.string> + <floater.string name="network_packet_loss_critical_msg"> + La conexión deja caer más del [NETWORK_PACKET_LOSS_CRITICAL]% de los paquetes + </floater.string> + <floater.string name="network_packet_loss_warning_msg"> + La conexión deja caer [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% de los paquetes + </floater.string> + <floater.string name="network_performance_normal_msg"> + Normal + </floater.string> + <floater.string name="network_ping_critical_ms"> + 600 + </floater.string> + <floater.string name="network_ping_warning_ms"> + 300 + </floater.string> + <floater.string name="network_ping_critical_msg"> + El tiempo de conexión -ping- supera los [NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_ping_warning_msg"> + El tiempo de conexión -ping- es de [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_packet_loss_cause_msg"> + Quizá una mala conexión o un ancho de banda fijado demasiado alto. + </floater.string> + <floater.string name="network_ping_cause_msg"> + Quizá una mala conexión o una aplicación de archivos compartidos. + </floater.string> + <floater.string name="server_text_msg"> + Servidor + </floater.string> + <floater.string name="server_frame_rate_critical_fps"> + 20 + </floater.string> + <floater.string name="server_frame_rate_warning_fps"> + 30 + </floater.string> + <floater.string name="server_single_process_max_time_ms"> + 20 + </floater.string> + <floater.string name="server_frame_time_critical_msg"> + Frecuencia (framerate) por debajo de [SERVER_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="server_frame_time_warning_msg"> + Frecuencia (framerate) entre [SERVER_FRAME_RATE_CRITICAL] y [SERVER_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="server_frame_time_normal_msg"> + Normal + </floater.string> + <floater.string name="server_physics_cause_msg"> + Posible causa: demasiados objetos físicos + </floater.string> + <floater.string name="server_scripts_cause_msg"> + Posible causa: demasiados objetos con script + </floater.string> + <floater.string name="server_net_cause_msg"> + Posible causa: demasiado tráfico en la red + </floater.string> + <floater.string name="server_agent_cause_msg"> + Posible causa: demasiada gente moviéndose en la región + </floater.string> + <floater.string name="server_images_cause_msg"> + Posible causa: demasiados cálculos de imáganes + </floater.string> + <floater.string name="server_generic_cause_msg"> + Posible causa: carga del simulador muy pesada + </floater.string> + <floater.string name="smaller_label"> + >> + </floater.string> + <floater.string name="bigger_label"> + << + </floater.string> + <button label="" label_selected="" name="client_lagmeter" tool_tip="Estado del lag del cliente"/> + <text name="client"> + Cliente + </text> + <text font="SansSerifSmall" name="client_text"> + Normal + </text> + <text left="30" name="client_lag_cause" right="-10"/> + <button label="" label_selected="" name="network_lagmeter" tool_tip="Estado del lag de la red"/> + <text name="network"> + Red + </text> + <text font="SansSerifSmall" name="network_text"> + Normal + </text> + <text left="30" name="network_lag_cause" right="-10"/> + <button label="" label_selected="" name="server_lagmeter" tool_tip="Estado del lag del servidor"/> + <text name="server"> + Servidor + </text> + <text font="SansSerifSmall" name="server_text"> + Normal + </text> + <text left="30" name="server_lag_cause" right="-32"/> + <button label=">>" name="minimize" tool_tip="Cambia el tamaño de la ventana"/> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_perms_default.xml b/indra/newview/skins/default/xui/es/floater_perms_default.xml new file mode 100644 index 0000000000..71c3f239ea --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_perms_default.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="perms default" title="PERMISOS DE CREACIÓN PREDETERMINADOS"> + <panel label="Permisos predeterminados" name="default permissions"/> + <button label="OK" label_selected="OK" name="ok"/> + <button label="Cancelar" label_selected="Cancelar" name="cancel"/> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_region_restarting.xml b/indra/newview/skins/default/xui/es/floater_region_restarting.xml new file mode 100644 index 0000000000..d55c8eff17 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_region_restarting.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="region_restarting" title="REGIÓN REINICIANDO"> + <string name="RegionName"> + La región en la que te encuentras ([NAME]) se va a reiniciar. + +Si permaneces en esta región serás desconectado. + </string> + <string name="RestartSeconds"> + Segundos hasta el reinicio +[SECONDS] + </string> + <panel name="layout_panel_1"> + <text name="region_name"> + La región en la que te encuentras (-el nombre de región más largo-) se va a reiniciar. + +Si permaneces en esta región serás desconectado. + </text> + <text name="restart_seconds"> + Segundos hasta el reinicio + 32767 + </text> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_report_abuse.xml b/indra/newview/skins/default/xui/es/floater_report_abuse.xml index dc5d430375..fe37f125b8 100755 --- a/indra/newview/skins/default/xui/es/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/es/floater_report_abuse.xml @@ -44,7 +44,7 @@ <combo_box.item label="Edad > Residente adulto en Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/> <combo_box.item label="Edad > Residente menor de edad fuera de Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/> <combo_box.item label="Ataque > Sandbox de combate / Zona no segura" name="Assault__Combat_sandbox___unsafe_area"/> - <combo_box.item label="Ataque > Zona segura" name="Assault__Safe_area"/> + <combo_box.item label="Atacar > Disparar o empujar a otro residente en una zona segura" name="Assault__Safe_area"/> <combo_box.item label="Ataque > Sandbox de prueba de armas" name="Assault__Weapons_testing_sandbox"/> <combo_box.item label="Comercio > Error en la entrega de productos o servicios" name="Commerce__Failure_to_deliver_product_or_service"/> <combo_box.item label="Indiscreción > Información del mundo real" name="Disclosure__Real_world_information"/> @@ -58,25 +58,25 @@ <combo_box.item label="Fraude > L$" name="Fraud__L$"/> <combo_box.item label="Fraude > Terreno" name="Fraud__Land"/> <combo_box.item label="Fraude > Esquemas piramidales o cadenas de cartas" name="Fraud__Pyramid_scheme_or_chain_letter"/> - <combo_box.item label="Fraude > US$" name="Fraud__US$"/> + <combo_box.item label="Fraude > L$ o USD" name="Fraud__US$"/> <combo_box.item label="Acoso > Anuncios múltiples / Spam visual" name="Harassment__Advert_farms___visual_spam"/> <combo_box.item label="Acoso > Difamación de individuos o grupos" name="Harassment__Defaming_individuals_or_groups"/> <combo_box.item label="Acoso > Impedir el movimiento" name="Harassment__Impeding_movement"/> <combo_box.item label="Acoso > Acoso sexual" name="Harassment__Sexual_harassment"/> - <combo_box.item label="Acoso > Incitar a, o pedir, que otros violen las Condiciones del Servicio" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> + <combo_box.item label="Acosar > Molestar deliberadamente a alguien concreto" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> <combo_box.item label="Acoso > Abuso verbal" name="Harassment__Verbal_abuse"/> <combo_box.item label="Indecencia > En general, contenido o conducta ofensivos" name="Indecency__Broadly_offensive_content_or_conduct"/> <combo_box.item label="Indecencia > Nombre inapropiado del avatar" name="Indecency__Inappropriate_avatar_name"/> - <combo_box.item label="Indecencia > Contenido o conducta inapropiada en una región General" name="Indecency__Mature_content_in_PG_region"/> + <combo_box.item label="Indecencia > Conducta o contenido inapropiado para la calificación de una región" name="Indecency__Mature_content_in_PG_region"/> <combo_box.item label="Indecencia > Contenido o conducta inapropiada en una región Moderado" name="Indecency__Inappropriate_content_in_Mature_region"/> <combo_box.item label="Infracción de la propiedad intelectual > Eliminación de contenidos" name="Intellectual_property_infringement_Content_Removal"/> <combo_box.item label="Infracción de la propiedad intelectual > CopyBot o Exploit (programa malicioso) de permisos" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/> <combo_box.item label="Intolerancia" name="Intolerance"/> <combo_box.item label="Terreno > Abuso de los recursos de un sandbox" name="Land__Abuse_of_sandbox_resources"/> - <combo_box.item label="Terreno > Invasión > Objetos/Texturas" name="Land__Encroachment__Objects_textures"/> + <combo_box.item label="Terreno > Invasión > Objetos o texturas" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="Terreno > Invasión > Partículas" name="Land__Encroachment__Particles"/> <combo_box.item label="Terreno > Invasión > Árboles/Plantas" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="Apuestas/Juego" name="Wagering_gambling"/> + <combo_box.item label="Apostar" name="Wagering_gambling"/> <combo_box.item label="Otra" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/es/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/es/floater_scene_load_stats.xml new file mode 100644 index 0000000000..f625d5257c --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_scene_load_stats.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Scene Load Statistics" title="ESTADÍSTICAS DE CARGA DE ESCENA"> + <button label="Pausa" name="playpause"/> + <scroll_container name="statistics_scroll"> + <container_view name="statistics_view"> + <stat_view label="Básica" name="basic"> + <stat_bar label="Diferencia de píxeles de fotograma" name="frame difference"/> + <stat_bar label="Datos de UDP recibidos" name="bandwidth"/> + <stat_bar label="Pérdida de paquetes" name="packet_loss"/> + </stat_view> + <stat_view label="Avanzado" name="advanced"> + <stat_view label="Renderización" name="render"> + <stat_bar label="Objetos en total" name="objs"/> + <stat_bar label="Objetos nuevos" name="newobjs"/> + <stat_bar label="Índice de aciertos de caché de objetos" name="object_cache_hits"/> + </stat_view> + <stat_view label="Textura" name="texture"> + <stat_bar label="Índice de aciertos de caché" name="texture_cache_hits"/> + <stat_bar label="Latencia de lectura de caché" name="texture_cache_read_latency"/> + <stat_bar label="Número" name="numimagesstat"/> + <stat_bar label="Raw: número" name="numrawimagesstat"/> + </stat_view> + <stat_view label="Red" name="network"> + <stat_bar label="Paquetes salientes" name="packetsinstat"/> + <stat_bar label="Paquetes entrantes" name="packetsoutstat"/> + <stat_bar label="Objetos" name="objectdatareceived"/> + <stat_bar label="Textura" name="texturedatareceived"/> + <stat_bar label="Asset" name="assetudpdatareceived"/> + <stat_bar label="Capas" name="layersdatareceived"/> + <stat_bar label="Entrando ahora" name="messagedatain"/> + <stat_bar label="Saliendo ahora" name="messagedataout"/> + <stat_bar label="Operaciones VFS pendientes" name="vfspendingoperations"/> + </stat_view> + </stat_view> + <stat_view label="Simulador" name="sim"> + <stat_bar label="Objetos" name="simobjects"/> + <stat_bar label="Objetos activos" name="simactiveobjects"/> + <stat_bar label="Scripts activos" name="simactivescripts"/> + <stat_bar label="Paquetes salientes" name="siminpps"/> + <stat_bar label="Paquetes entrantes" name="simoutpps"/> + <stat_bar label="Descargas pendientes" name="simpendingdownloads"/> + <stat_bar label="Subidas pendientes" name="simpendinguploads"/> + <stat_bar label="Total de bytes no reconocidos" name="simtotalunackedbytes"/> + <stat_view label="Tiempo (ms)" name="simperf"> + <stat_bar label="Tiempo total de los frames" name="simframemsec"/> + <stat_bar label="Tiempo de red" name="simnetmsec"/> + <stat_bar label="Physics Time" name="simsimphysicsmsec"/> + <stat_bar label="Tiempo de la simulación" name="simsimothermsec"/> + <stat_bar label="Tiempo de los agentes" name="simagentmsec"/> + <stat_bar label="Tiempo de las imágenes" name="simimagesmsec"/> + <stat_bar label="Tiempo de los scripts" name="simscriptmsec"/> + <stat_bar label="Tiempo libre" name="simsparemsec"/> + <stat_view label="Datos de tiempo (ms)" name="timedetails"> + <stat_bar label="Paso de física" name="simsimphysicsstepmsec"/> + <stat_bar label="Actualizar formas físicas" name="simsimphysicsshapeupdatemsec"/> + <stat_bar label="Otros (Física)" name="simsimphysicsothermsec"/> + <stat_bar label="Tiempo de suspensión" name="simsleepmsec"/> + <stat_bar label="Bombea E/S" name="simpumpiomsec"/> + </stat_view> + </stat_view> + </stat_view> + </container_view> + </scroll_container> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/es/floater_script_ed_prefs.xml new file mode 100644 index 0000000000..fe808dea1b --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_script_ed_prefs.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_script_colors" title="COLORES DE SCRIPT"> + <text name="color_pickers_label"> + Elige los colores que desees: + </text> + <text name="text_label"> + Texto + </text> + <text name="cursor_label"> + Cursor + </text> + <text name="background_label"> + Fondo + </text> + <text name="datatype_label"> + Tipos de datos + </text> + <text name="event_label"> + Eventos + </text> + <text name="string_literal_label"> + Literales de cadena + </text> + <text name="constant_label"> + Constante + </text> + <text name="flow_control_label"> + Control de flujo + </text> + <text name="function_label"> + Función + </text> + <text name="comment_label"> + Comentar + </text> + <script_editor name="Script Preview"> + /* Un ejemplo de script */ +default +{ + state_entry() + { + // Comment + string greeting = "Hola"; + llSay(PUBLIC_CHANNEL, greeting); + } +} + </script_editor> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_snapshot.xml b/indra/newview/skins/default/xui/es/floater_snapshot.xml index 23078b3a55..5e02bc52b7 100755 --- a/indra/newview/skins/default/xui/es/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/es/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="VISTA PREVIA DE LA FOTO"> +<floater name="Snapshot" title="FOTO"> <floater.string name="unknown"> desconocido </floater.string> @@ -61,5 +61,11 @@ <check_box label="HUDs" name="hud_check"/> <check_box label="Congelar la toma (pantalla completa)" name="freeze_frame_check"/> <check_box label="Actualizar automáticamente" name="auto_snapshot_check"/> + <text name="filter_list_label"> + Filtro: + </text> + <combo_box name="filters_combobox" tool_tip="Filtros de imagen"> + <combo_box.item label="Sin filtro" name="NoFilter"/> + </combo_box> </panel> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_stats.xml b/indra/newview/skins/default/xui/es/floater_stats.xml index 00601920f2..d1c5e867db 100755 --- a/indra/newview/skins/default/xui/es/floater_stats.xml +++ b/indra/newview/skins/default/xui/es/floater_stats.xml @@ -4,17 +4,21 @@ <container_view name="statistics_view"> <stat_view label="Básico" name="basic"> <stat_bar label="FPS" name="fps"/> - <stat_bar label="Ancho de banda" name="bandwidth"/> + <stat_bar label="Datos de UDP recibidos" name="bandwidth"/> <stat_bar label="Pérdida de paquetes" name="packet_loss"/> <stat_bar label="Ping del Sim" name="ping"/> </stat_view> <stat_view label="Avanzado" name="advanced"> <stat_view label="Renderización" name="render"> - <stat_bar label="KTris generados por fotograma" name="ktrisframe"/> - <stat_bar label="KTris generados por segundo" name="ktrissec"/> - <stat_bar label="Objetos en total" name="objs"/> + <stat_bar label="KTris por fotograma" name="ktrisframe"/> + <stat_bar label="KTris por segundo" name="ktrissec"/> + <stat_bar label="Objetos en total" name="totalobjs"/> + <stat_bar label="Objetos en caché" name="cachedobjs"/> <stat_bar label="Objetos nuevos" name="newobjs"/> <stat_bar label="Índice de aciertos de caché de objetos" name="object_cache_hits"/> + <stat_bar label="Consultas de oclusión realizadas" name="occlusion_queries"/> + <stat_bar label="Objetos ocluidos" name="occluded"/> + <stat_bar label="Objeto no ocluido" name="unoccluded"/> </stat_view> <stat_view label="Textura" name="texture"> <stat_bar label="Índice de aciertos de caché" name="texture_cache_hits"/> @@ -26,15 +30,32 @@ <stat_bar label="Raw Mem" name="rawmemstat"/> <stat_bar label="Bound Mem" name="glboundmemstat"/> </stat_view> + <stat_view label="Memoria utilizada" name="memory"> + <stat_bar label="LLTrace" name="LLTrace"/> + <stat_bar label="UI" name="LLView"/> + <stat_bar label="Fuentes" name="LLFontFreetype"/> + <stat_bar label="Inventario" name="LLInventoryObject"/> + <stat_bar label="Objetos del visor" name="LLViewerObject"/> + <stat_bar label="Datos de grupo de árbol octal" name="LLViewerOctreeGroup"/> + <stat_bar label="Datos de árbol octal" name="LLViewerOctreeEntry"/> + <stat_bar label="Caché de objetos del visor" name="LLVOCacheEntry"/> + <stat_bar label="Objetos dibujables" name="LLDrawable"/> + <stat_bar label="Datos de cara" name="LLFace"/> + <stat_bar label="Información de dibujo" name="LLDrawInfo"/> + <stat_bar label="Datos de textura" name="LLTexture"/> + <stat_bar label="Datos de imagen" name="LLImage"/> + <stat_bar label="Datos de imagen GL" name="LLImageGL"/> + <stat_bar label="Memorias intermedias de vértice" name="LLVertexBuffer"/> + </stat_view> <stat_view label="Red" name="network"> <stat_bar label="Paquetes salientes" name="packetsinstat"/> <stat_bar label="Paquetes entrantes" name="packetsoutstat"/> - <stat_bar label="Objetos" name="objectkbitstat"/> - <stat_bar label="Textura" name="texturekbitstat"/> - <stat_bar label="Asset" name="assetkbitstat"/> - <stat_bar label="Capas" name="layerskbitstat"/> - <stat_bar label="Entrando ahora" name="actualinkbitstat"/> - <stat_bar label="Saliendo ahora" name="actualoutkbitstat"/> + <stat_bar label="Objetos" name="objectdatareceived"/> + <stat_bar label="Textura" name="texturedatareceived"/> + <stat_bar label="Asset" name="assetudpdatareceived"/> + <stat_bar label="Capas" name="layersdatareceived"/> + <stat_bar label="Entrando ahora" name="messagedatain"/> + <stat_bar label="Saliendo ahora" name="messagedataout"/> <stat_bar label="Operaciones VFS pendientes" name="vfspendingoperations"/> </stat_view> </stat_view> @@ -53,7 +74,8 @@ <stat_bar label="Pasos de silueta omitidos" name="simsimskippedsilhouettesteps"/> <stat_bar label="Personajes actualizados" name="simsimpctsteppedcharacters"/> </stat_view> - <stat_view label="Tiempo (ms)" name="simperf"> + <stat_bar label="Total de datos no reconocidos" name="simtotalunackedbytes"/> + <stat_view label="Tiempo" name="simperf"> <stat_bar label="Tiempo total de los frames" name="simframemsec"/> <stat_bar label="Tiempo de red" name="simnetmsec"/> <stat_bar label="Physics Time" name="simsimphysicsmsec"/> @@ -62,7 +84,7 @@ <stat_bar label="Tiempo de las imágenes" name="simimagesmsec"/> <stat_bar label="Tiempo de los scripts" name="simscriptmsec"/> <stat_bar label="Tiempo libre" name="simsparemsec"/> - <stat_view label="Datos de tiempo (ms)" name="timedetails"> + <stat_view label="Detalles de tiempo" name="timedetails"> <stat_bar label="Paso de física" name="simsimphysicsstepmsec"/> <stat_bar label="Actualizar formas físicas" name="simsimphysicsshapeupdatemsec"/> <stat_bar label="Otros (Física)" name="simsimphysicsothermsec"/> diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml index 32baa5bb7d..159619decc 100755 --- a/indra/newview/skins/default/xui/es/floater_tools.xml +++ b/indra/newview/skins/default/xui/es/floater_tools.xml @@ -57,7 +57,7 @@ <check_box label="Editar las partes enlazadas" name="checkbox edit linked parts"/> <button label="Enlazar" name="link_btn"/> <button label="Desenlazar" name="unlink_btn" width="95"/> - <check_box label="" name="checkbox uniform"/> + <check_box label="Estirar ambos lados" name="checkbox uniform"/> <text label="Estirar ambos lados" name="checkbox uniform label"> Estirar ambos lados </text> diff --git a/indra/newview/skins/default/xui/es/floater_twitter.xml b/indra/newview/skins/default/xui/es/floater_twitter.xml new file mode 100644 index 0000000000..050ee1a391 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_twitter.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_twitter" title="TWITTER"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="REDACTAR" name="panel_twitter_photo"/> + <panel label="CUENTA" name="panel_twitter_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Error + </text> + <text name="connection_loading_text"> + Cargando... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/es/menu_avatar_icon.xml b/indra/newview/skins/default/xui/es/menu_avatar_icon.xml index fe7331a108..e3299b0a6b 100755 --- a/indra/newview/skins/default/xui/es/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/es/menu_avatar_icon.xml @@ -2,6 +2,7 @@ <menu name="Avatar Icon Menu"> <menu_item_call label="Ver el perfil" name="Show Profile"/> <menu_item_call label="Enviar un MI..." name="Send IM"/> + <menu_item_call label="Petición de teleporte" name="Request Teleport"/> <menu_item_call label="Añadir como amigo..." name="Add Friend"/> <menu_item_call label="Quitar de los amigos..." name="Remove Friend"/> </menu> diff --git a/indra/newview/skins/default/xui/es/menu_conversation.xml b/indra/newview/skins/default/xui/es/menu_conversation.xml index b63711589d..5bcf249226 100644 --- a/indra/newview/skins/default/xui/es/menu_conversation.xml +++ b/indra/newview/skins/default/xui/es/menu_conversation.xml @@ -29,4 +29,5 @@ <menu_item_call label="Silenciar a todos" name="ModerateVoiceMute"/> <menu_item_call label="Quitar el silencio a todos" name="ModerateVoiceUnmute"/> </context_menu> + <menu_item_call label="Expulsar a miembro" name="BanMember"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/es/menu_inventory.xml b/indra/newview/skins/default/xui/es/menu_inventory.xml index 803d3f1331..cd5bc7917d 100755 --- a/indra/newview/skins/default/xui/es/menu_inventory.xml +++ b/indra/newview/skins/default/xui/es/menu_inventory.xml @@ -69,6 +69,7 @@ <menu_item_call label="Escuchar" name="Sound Play"/> <menu_item_call label="Copiar la SLurl" name="url_copy"/> <menu_item_call label="Acerca del hito" name="About Landmark"/> + <menu_item_call label="Mostrar en el mapa" name="show_on_map"/> <menu_item_call label="Escuchar en el mundo" name="Animation Play"/> <menu_item_call label="Ejecutarla para usted" name="Animation Audition"/> <menu_item_call label="Enviar un mensaje instantáneo" name="Send Instant Message"/> diff --git a/indra/newview/skins/default/xui/es/menu_login.xml b/indra/newview/skins/default/xui/es/menu_login.xml index 2286d0527a..336572f0cb 100755 --- a/indra/newview/skins/default/xui/es/menu_login.xml +++ b/indra/newview/skins/default/xui/es/menu_login.xml @@ -5,7 +5,15 @@ <menu_item_call label="Salir de [APP_NAME]" name="Quit"/> </menu> <menu label="Ayuda" name="Help"> - <menu_item_call label="Ayuda de [SECOND_LIFE]" name="Second Life Help"/> + <menu_item_call label="Cómo..." name="How To"/> + <menu_item_call label="Guía rápida" name="Quickstart"/> + <menu_item_call label="Base de Conocimientos" name="Knowledge Base"/> + <menu_item_call label="Wiki" name="Wiki"/> + <menu_item_call label="Foros comunitarios" name="Community Forums"/> + <menu_item_call label="Portal de soporte" name="Support portal"/> + <menu_item_call label="Noticias de [SECOND_LIFE]" name="Second Life News"/> + <menu_item_call label="Blogs de [SECOND_LIFE]" name="Second Life Blogs"/> + <menu_item_call label="Informar de un fallo" name="Report Bug"/> <menu_item_call label="Acerca de [APP_NAME]" name="About Second Life"/> </menu> <menu_item_check label="Mostrar el menú 'Debug'" name="Show Debug Menu"/> diff --git a/indra/newview/skins/default/xui/es/menu_object.xml b/indra/newview/skins/default/xui/es/menu_object.xml index e75c7283af..0de9907660 100755 --- a/indra/newview/skins/default/xui/es/menu_object.xml +++ b/indra/newview/skins/default/xui/es/menu_object.xml @@ -21,6 +21,7 @@ <context_menu label="Gestionar" name="Remove"> <menu_item_call label="Denunciar una infracción" name="Report Abuse..."/> <menu_item_call label="Ignorar" name="Object Mute"/> + <menu_item_call label="No ignorar" name="Object Unmute"/> <menu_item_call label="Devolver" name="Return..."/> </context_menu> <menu_item_call label="Tomar" name="Pie Object Take"/> diff --git a/indra/newview/skins/default/xui/es/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/es/menu_teleport_history_item.xml index c482907812..1ff555b727 100755 --- a/indra/newview/skins/default/xui/es/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/es/menu_teleport_history_item.xml @@ -2,5 +2,5 @@ <context_menu name="Teleport History Item Context Menu"> <menu_item_call label="Teleportar" name="Teleport"/> <menu_item_call label="Más información" name="More Information"/> - <menu_item_call label="Copiar al portapapeles" name="CopyToClipboard"/> + <menu_item_call label="Copiar la SLurl" name="CopyToClipboard"/> </context_menu> diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml index e4fe871683..d2117f08b6 100755 --- a/indra/newview/skins/default/xui/es/menu_viewer.xml +++ b/indra/newview/skins/default/xui/es/menu_viewer.xml @@ -35,6 +35,9 @@ <menu_item_check label="Chat..." name="Nearby Chat"/> <menu_item_check label="Hablar" name="Speak"/> <menu_item_check label="Registro de conversación..." name="Conversation Log..."/> + <menu_item_call label="Facebook..." name="Facebook"/> + <menu_item_call label="Twitter..." name="Twitter"/> + <menu_item_call label="Flickr..." name="Flickr"/> <menu label="Transformación de voz" name="VoiceMorphing"> <menu_item_check label="Sin transformación de voz" name="NoVoiceMorphing"/> <menu_item_check label="Probar..." name="Preview"/> @@ -71,11 +74,11 @@ <menu_item_check label="Menú Avanzado" name="Show Advanced Menu"/> </menu> <menu label="Sol" name="Sun"> - <menu_item_call label="Amanecer" name="Sunrise"/> - <menu_item_call label="Mediodía" name="Noon"/> - <menu_item_call label="Atardecer" name="Sunset"/> - <menu_item_call label="Medianoche" name="Midnight"/> - <menu_item_call label="Usar configuración de región" name="Use Region Settings"/> + <menu_item_check label="Amanecer" name="Sunrise"/> + <menu_item_check label="Mediodía" name="Noon"/> + <menu_item_check label="Atardecer" name="Sunset"/> + <menu_item_check label="Medianoche" name="Midnight"/> + <menu_item_check label="Usar configuración de región" name="Use Region Settings"/> </menu> <menu label="Editor de entorno" name="Environment Editor"> <menu_item_call label="Configuración del entorno..." name="Environment Settings"/> @@ -149,7 +152,8 @@ <menu_item_check label="Ajustar a la cuadrícula" name="Snap to Grid"/> <menu_item_call label="Ajustar a la cuadrícula los ejes X e Y" name="Snap Object XY to Grid"/> <menu_item_call label="Usar lo seleccionado como cuadrícula" name="Use Selection for Grid"/> - <menu_item_call label="Opciones de la cuadrícula" name="Grid Options"/> + <menu_item_call label="Opciones de la cuadrícula..." name="Grid Options"/> + <menu_item_call label="Definir permisos predeterminados..." name="Set default permissions"/> </menu> <menu label="Subir" name="Upload"> <menu_item_call label="Imagen ([COST] L$)..." name="Upload Image"/> @@ -157,15 +161,12 @@ <menu_item_call label="Animación ([COST] L$)..." name="Upload Animation"/> <menu_item_call label="Modelo..." name="Upload Model"/> <menu_item_call label="Masivo ([COST] L$ por archivo)..." name="Bulk Upload"/> - <menu_item_call label="Configurar los permisos por defecto de subida" name="perm prefs"/> </menu> <menu_item_call label="Deshacer" name="Undo"/> <menu_item_call label="Rehacer" name="Redo"/> </menu> <menu label="Ayuda" name="Help"> <menu_item_call label="Cómo..." name="How To"/> - <menu_item_call label="Ayuda de [SECOND_LIFE]" name="Second Life Help"/> - <menu_item_call label="Guía del usuario" name="User’s guide"/> <menu_item_call label="Base de Conocimientos" name="Knowledge Base"/> <menu_item_call label="Wiki" name="Wiki"/> <menu_item_call label="Foros comunitarios" name="Community Forums"/> @@ -187,6 +188,7 @@ <menu label="Herramientas de rendimiento" name="Performance Tools"> <menu_item_call label="Medidor de lag" name="Lag Meter"/> <menu_item_check label="Estadísticas" name="Statistics Bar"/> + <menu_item_call label="Estadísticas de carga de escenas" name="Scene Load Statistics"/> <menu_item_check label="Mostrar el peso del dibujo de los avatares" name="Avatar Rendering Cost"/> </menu> <menu label="Realzado y Visibilidad" name="Highlighting and Visibility"> @@ -248,6 +250,7 @@ <menu_item_check label="Fast Timers" name="Fast Timers"/> <menu_item_check label="Memory" name="Memory"/> <menu_item_check label="Datos de la escena" name="Scene Statistics"/> + <menu_item_check label="Monitor de carga de escenas" name="Scene Loading Monitor"/> <menu_item_call label="Consola de depuración de obtención de texturas" name="Texture Fetch Debug Console"/> <menu_item_call label="Region Info to Debug Console" name="Region Info to Debug Console"/> <menu_item_check label="Camera" name="Camera"/> @@ -279,6 +282,7 @@ <menu_item_check label="Randomize Framerate" name="Randomize Framerate"/> <menu_item_check label="Frame Test" name="Frame Test"/> <menu_item_call label="Perfil del fotograma" name="Frame Profile"/> + <menu_item_call label="Criterio de referencia" name="Benchmark"/> </menu> <menu label="Render Metadata" name="Render Metadata"> <menu_item_check label="Normales" name="Normals"/> @@ -286,6 +290,8 @@ <menu_item_check label="Actualizar el tipo" name="Update Type"/> <menu_item_check label="Información sobre el nivel de detalle" name="LOD Info"/> <menu_item_check label="Crear cola" name="Build Queue"/> + <menu_item_check label="Partículas" name="Particles"/> + <menu_item_check label="Articulaciones" name="Joints"/> <menu_item_check label="Vectores de viento" name="Wind Vectors"/> <menu_item_check label="Complejidad del renderizado" name="rendercomplexity"/> <menu_item_check label="Bytes de adjunto" name="attachment bytes"/> @@ -311,6 +317,7 @@ <menu_item_check label="Render Attached Lights" name="Render Attached Lights"/> <menu_item_check label="Render Attached Particles" name="Render Attached Particles"/> <menu_item_check label="Hover Glow Objects" name="Hover Glow Objects"/> + <menu_item_call label="Limpiar caché inmediatamente" name="Cache Clear"/> </menu> <menu label="Red" name="Network"> <menu_item_check label="Pause Avatar" name="AgentPause"/> @@ -326,7 +333,6 @@ <menu_item_call label="Prueba de navegadores de medios" name="Web Browser Test"/> <menu_item_call label="Navegador de contenido web" name="Web Content Browser"/> <menu_item_call label="Print Selected Object Info" name="Print Selected Object Info"/> - <menu_item_check label="Consola de depuración de región" name="Region Debug Console"/> <menu_item_check label="Debug Clicks" name="Debug Clicks"/> <menu_item_check label="Debug Mouse Events" name="Debug Mouse Events"/> </menu> diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index d4451ad251..01407dc69e 100755 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -114,15 +114,15 @@ Puedes consultar más información en el [[MARKETPLACE_IMPORTS_URL] registro de <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="OutboxImportFailed"> - Error de transferencia + Error de la transferencia: '[ERROR_CODE]' -No se han enviado carpetas al Mercado a causa de un error del sistema o de la red. Vuelve a intentarlo más tarde. +No se han enviado carpetas al Mercado a causa de un error del sistema o de la red. Vuelve a intentarlo más tarde. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="OutboxInitFailed"> - Error al inicializar el mercado + Error de inicialización del Mercado: '[ERROR_CODE]' -La inicialización del mercado ha fallado por un error del sistema o de la red. Vuelve a intentarlo más tarde. +La inicialización del mercado ha fallado por un error del sistema o de la red. Vuelve a intentarlo más tarde. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="CompileQueueSaveText"> @@ -206,6 +206,22 @@ No podrás removérseles de ese rol, sino que deberán renunciar a él por sí m ¿Añadir esta capacidad a '[ROLE_NAME]'? <usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/> </notification> + <notification name="AssignBanAbilityWarning"> + Vas a agregar la capacidad '[ACTION_NAME]' al rol '[ROLE_NAME]'. + + *ATENCIÓN* +Cualquier miembro de un rol que tenga esta capacidad también recibirá las capacidades '[ACTION_NAME_2]' y '[ACTION_NAME_3]' + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="RemoveBanAbilityWarning"> + Vas a quitar la capacidad '[ACTION_NAME]' del rol '[ROLE_NAME]'. + + *ATENCIÓN* +Al quitar esta capacidad NO se quitan las capacidades '[ACTION_NAME_2]' y '[ACTION_NAME_3]'. + +Si no quieres que este rol siga teniendo dichas capacidades, deshabilítalas inmediatamente. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="EjectGroupMemberWarning"> Estás a punto de expulsar a [AVATAR_NAME] del grupo. <usetemplate ignoretext="Confirmar la expulsión de un miembro del grupo" name="okcancelignore" notext="Cancelar" yestext="Expulsar"/> @@ -1585,6 +1601,14 @@ Consulta [[INFO_URL] Información sobre esta actualización]. No es posible abandonar el grupo. No puedes abandonarlo porque eres su último propietario. Antes tienes que asignar el papel de propietario a otro miembro. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="GroupDepartError"> + No se puede abandonar el grupo: [reason]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="GroupDepart"> + Has abandonado el grupo [group_name]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="ConfirmKick"> ¿Quieres realmente expulsar a todos los residentes de la cuadrícula? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar a todos los Residentes"/> @@ -1739,6 +1763,10 @@ excediendo el límite de [LIMIT]. ¿Seguro que quieres teleportarte a <nolink>[LOCATION]</nolink>? <usetemplate ignoretext="Confirmar que quiero teleportarme a un hito" name="okcancelignore" notext="Cancelar" yestext="Teleportar"/> </notification> + <notification name="TeleportViaSLAPP"> + ¿Seguro que quieres teleportarte a <nolink>[LOCATION]</nolink>? + <usetemplate ignoretext="Confirmar el teleporte mediante SLAPP" name="okcancelignore" notext="Cancelar" yestext="Teleportarte"/> + </notification> <notification name="TeleportToPick"> ¿Teleportarte a [PICK]? <usetemplate ignoretext="Confirmar el teleporte a una localización de los Destacados" name="okcancelignore" notext="Cancelar" yestext="Teleportar"/> @@ -1949,6 +1977,9 @@ Se cambiarán miles de regiones, y se provocará un colapso en el espacio del se <notification name="ProblemAddingEstateManager"> Hay problemas al añadir un administrador nuevo del estado. Uno o más estados deben de tener llena la lista de administradores. </notification> + <notification name="ProblemAddingEstateBanManager"> + No se puede añadir el administrador o propietario de un estado a la lista de expulsados. + </notification> <notification name="ProblemAddingEstateGeneric"> Hay problemas al añadir a la lista del estado. Uno o más estados deben de tener llena la lista. </notification> @@ -2461,6 +2492,12 @@ Inténtalo seleccionando un trozo más pequeño de terreno. <notification name="SystemMessage"> [MESSAGE] </notification> + <notification name="FlickrConnect"> + [MESSAGE] + </notification> + <notification name="TwitterConnect"> + [MESSAGE] + </notification> <notification name="PaymentReceived"> [MESSAGE] </notification> @@ -3028,9 +3065,9 @@ Consulta los detalles en el archivo de registro. <nolink>[ITEMS]</nolink> -Con los siguientes residentes: +Con los siguientes Residentes: -[RESIDENTS] +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ShareFolderConfirmation"> @@ -3042,7 +3079,7 @@ Con los siguientes residentes: Con los siguientes Residentes: -[RESIDENTS] +<nolink>[RESIDENTES]</nolink> <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Aceptar"/> </notification> <notification name="ItemsShared"> @@ -3495,10 +3532,6 @@ Prueba otra vez dentro de un minuto. <notification name="EjectComingSoon"> Te han expulsado de aquí y tienes [EJECT_TIME] segundos para salir. </notification> - <notification name="NoEnterServerFull"> - No puedes entrar en esta región porque -el servidor está lleno. - </notification> <notification name="SaveBackToInvDisabled"> Se ha deshabilitado Devolver el objeto a mi inventario. </notification> @@ -3688,6 +3721,9 @@ el servidor está lleno. <notification name="LinkFailedTooMuchPhysics"> El objeto utiliza una cantidad excesiva de recursos de física; se ha desactivado su dinámica. </notification> + <notification name="EstateManagerFailedllTeleportHome"> + El objeto '[OBJECT_NAME]' de [SLURL] no puede teleportar a los administradores del estado a la base. + </notification> <notification name="TeleportedHomeByObjectOnParcel"> Has sido teleportado al origen por el objeto '[OBJECT_NAME]' de la parcela '[PARCEL_NAME]' </notification> @@ -3878,13 +3914,18 @@ el servidor está lleno. La selección no contiene suficientes parcelas alquiladas para unirlas. </notification> <notification name="CantDivideLandMultipleParcelsSelected"> - No se puede dividir el terreno.\nHay varias parcelas seleccionadas.\nPrueba a seleccionar un terreno más pequeño. + No se puede dividir el terreno. +Hay varias parcelas seleccionadas. +Prueba a seleccionar un terreno más pequeño. </notification> <notification name="CantDivideLandCantFindParcel"> - No se puede dividir el terreno.\nNo se encuentra la parcela.\nAvísanos con Ayuda -> Notificar fallo... + No se puede dividir el terreno. +No se encuentra la parcela. +Notifícalo con Ayuda -> Informar de un fallo... </notification> <notification name="CantDivideLandWholeParcelSelected"> - No se puede dividir el terreno. Está seleccionada la parcela completa.\nPrueba a seleccionar un terreno más pequeño. + No se puede dividir el terreno. Esta seleccionada una parcela completa. +Prueba a seleccionar un terreno más pequeño. </notification> <notification name="LandHasBeenDivided"> El terreno se ha dividido. @@ -4024,4 +4065,12 @@ el servidor está lleno. No se pueden mover los archivos. Ruta anterior restaurada. <usetemplate ignoretext="No se pueden mover los archivos. Ruta anterior restaurada." name="okignore" yestext="OK"/> </notification> + <notification name="DefaultObjectPermissions"> + Ha ocurrido un problema al guardar los permisos predeterminados por el siguiente motivo: [REASON]. Intenta configurar los permisos predeterminados más adelante. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="ChatHistoryIsBusyAlert"> + El archivo de historial de chat todavía está realizando la operación anterior. Repite la operación dentro de unos minutos o inicia un chat con otra persona. + <usetemplate name="okbutton" yestext="OK"/> + </notification> </notifications> diff --git a/indra/newview/skins/default/xui/es/panel_facebook_account.xml b/indra/newview/skins/default/xui/es/panel_facebook_account.xml new file mode 100644 index 0000000000..2b6d407ad7 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_facebook_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_account"> + <string name="facebook_connected" value="Estás conectado a Facebook como:"/> + <string name="facebook_disconnected" value="No conectado a Facebook"/> + <text name="account_caption_label"> + No conectado a Facebook. + </text> + <panel name="panel_buttons"> + <button label="Conectar..." name="connect_btn"/> + <button label="Desconectar" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Aprende a publicar en Facebook] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_facebook_friends.xml b/indra/newview/skins/default/xui/es/panel_facebook_friends.xml new file mode 100644 index 0000000000..6913e87aba --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_facebook_friends.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_friends"> + <string name="facebook_friends_empty" value="Actualmente no tienes amigos en Facebook que también sean residentes de Second Life. Invita a tus amigos de Facebook a que se unan a Second Life."/> + <string name="facebook_friends_no_connected" value="Actualmente no estás conectado a Facebook. Selecciona la pestaña Cuenta para conectarte y habilitar esta función."/> + <accordion name="friends_accordion"> + <accordion_tab name="tab_second_life_friends" title="Amigos de SL"/> + <accordion_tab name="tab_suggested_friends" title="Agregar estas personas como amigos de SL"/> + </accordion> + <text name="facebook_friends_status"> + No conectado a Facebook. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_facebook_photo.xml b/indra/newview/skins/default/xui/es/panel_facebook_photo.xml new file mode 100644 index 0000000000..f9e7265d34 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_facebook_photo.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Resolución de imagen"> + <combo_box.item label="Ventana actual" name="CurrentWindow"/> + <combo_box.item label="640 × 480" name="640x480"/> + <combo_box.item label="800 × 600" name="800x600"/> + <combo_box.item label="1024 × 768" name="1024x768"/> + <combo_box.item label="1200 × 630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtros de imagen"> + <combo_box.item label="Sin filtro" name="NoFilter"/> + </combo_box> + <button label="Actualizar" name="new_snapshot_btn" tool_tip="Pulsa para actualizar"/> + <button label="Vista previa" name="big_preview_btn" tool_tip="Pulsa para alternar entre vista previa sí/no"/> + <text name="caption_label"> + Comentario (opcional): + </text> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Publicar" name="post_photo_btn"/> + <button label="Cancelar" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_facebook_place.xml b/indra/newview/skins/default/xui/es/panel_facebook_place.xml new file mode 100644 index 0000000000..639825818a --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_facebook_place.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_place"> + <layout_stack name="stack_place"> + <layout_panel name="place_detail_panel"> + <text name="place_caption_label"> + Cuenta algo del lugar donde te encuentras: + </text> + </layout_panel> + <layout_panel name="place_map_panel"> + <check_box initial_value="false" label="" name="add_place_view_cb"/> + </layout_panel> + <layout_panel name="place_button_panel"> + <button label="Publicar" name="post_place_btn"/> + <button label="Cancelar" name="cancel_place_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_facebook_status.xml b/indra/newview/skins/default/xui/es/panel_facebook_status.xml new file mode 100644 index 0000000000..dfaf4089fc --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_facebook_status.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_status"> + <layout_stack name="stack_status"> + <layout_panel name="status_detail_panel"> + <text name="status_caption_label"> + ¿En qué estás pensando? + </text> + </layout_panel> + <layout_panel name="status_button_panel"> + <button label="Publicar" name="post_status_btn"/> + <button label="Cancelar" name="cancel_status_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_flickr_account.xml b/indra/newview/skins/default/xui/es/panel_flickr_account.xml new file mode 100644 index 0000000000..7dcf5b5595 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_flickr_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_account"> + <string name="flickr_connected" value="Estás conectado a Flickr como:"/> + <string name="flickr_disconnected" value="No conectado a Flickr"/> + <text name="account_caption_label"> + No estás conectado a Flickr. + </text> + <panel name="panel_buttons"> + <button label="Conectar..." name="connect_btn"/> + <button label="Desconectar" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Aprende a publicar en Flickr] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_flickr_photo.xml b/indra/newview/skins/default/xui/es/panel_flickr_photo.xml new file mode 100644 index 0000000000..465e80667b --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_flickr_photo.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Resolución de imagen"> + <combo_box.item label="Ventana actual" name="CurrentWindow"/> + <combo_box.item label="640 × 480" name="640x480"/> + <combo_box.item label="800 × 600" name="800x600"/> + <combo_box.item label="1024 × 768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtros de imagen"> + <combo_box.item label="Sin filtro" name="NoFilter"/> + </combo_box> + <button label="Actualizar" name="new_snapshot_btn" tool_tip="Pulsa para actualizar"/> + <button label="Vista previa" name="big_preview_btn" tool_tip="Pulsa para alternar entre vista previa sí/no"/> + <text name="title_label"> + Título: + </text> + <text name="description_label"> + Descripción: + </text> + <check_box initial_value="true" label="Incluir la ubicación de SL al final de la descripción" name="add_location_cb"/> + <text name="tags_label"> + Etiquetas: + </text> + <text name="tags_help_label"> + Separa las etiquetas con espacios +Usa "" para las etiquetas con varias palabras + </text> + <combo_box name="rating_combobox" tool_tip="Calificación de contenido de Flickr"> + <combo_box.item label="Calificación segura de Flickr" name="SafeRating"/> + <combo_box.item label="Calificación moderada de Flickr" name="ModerateRating"/> + <combo_box.item label="Calificación restringida de Flickr" name="RestrictedRating"/> + </combo_box> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Subir" name="post_photo_btn"/> + <button label="Cancelar" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/es/panel_group_bulk_ban.xml new file mode 100644 index 0000000000..2d308a43c3 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_group_bulk_ban.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Expulsar residentes" name="bulk_ban_panel"> + <panel.string name="loading"> + (cargando...) + </panel.string> + <panel.string name="ban_selection_too_large"> + Las expulsiones del grupo no se han enviado: has seleccionado demasiados residentes. Solo se permiten 100 expulsiones del grupo por solicitud. + </panel.string> + <panel.string name="ban_not_permitted"> + La expulsión del grupo no se ha enviado: no tienes la capacidad 'Administrar la lista de expulsados'. + </panel.string> + <panel.string name="ban_limit_fail"> + La expulsión del grupo no se ha enviado: tu grupo ha alcanzado el límite máximo permitido de expulsiones. + </panel.string> + <panel.string name="partial_ban"> + No se han enviado algunas expulsiones del grupo: +[REASONS] + </panel.string> + <panel.string name="ban_failed"> + Las expulsiones del grupo no se enviaron: +[REASONS] + </panel.string> + <panel.string name="residents_already_banned"> + - Los siguientes residentes ya han sido expulsados: [RESIDENTS]. + </panel.string> + <panel.string name="ban_limit_reached"> + - Se ha alcanzado el límite de expulsiones. Los agentes siguientes no se han expulsado: [RESIDENTS]. + </panel.string> + <panel.string name="cant_ban_yourself"> + - No te puedes expulsar a ti mismo del grupo. + </panel.string> + <text name="help_text"> + Puedes seleccionar varios residentes para su expulsión del grupo. Para empezar, pulsa 'Abrir el selector de residentes'. + </text> + <button label="Abrir el selector de residentes" name="add_button"/> + <name_list name="banned_agent_list" tool_tip="Para seleccionar varios residentes, pulsa sus nombres mientras mantienes apretada la tecla Ctrl"/> + <button label="Quitar seleccionados de la lista" name="remove_button" tool_tip="Quita los residentes seleccionados de la lista de expulsados"/> + <button label="Expulsar residentes" name="ban_button"/> + <button label="Cancelar" name="cancel_button"/> + <string name="GroupBulkBan"> + Expulsión de grupo + </string> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml index 09c4eec4d9..18eaa834da 100755 --- a/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml @@ -20,7 +20,7 @@ <layout_panel name="group_accordions"> <accordion name="groups_accordion"> <accordion_tab name="group_general_tab" title="General"/> - <accordion_tab name="group_roles_tab" title="Roles"/> + <accordion_tab name="group_roles_tab" title="Miembros y Roles"/> <accordion_tab name="group_notices_tab" title="Avisos"/> <accordion_tab name="group_land_tab" title="Terreno/Bienes"/> </accordion> diff --git a/indra/newview/skins/default/xui/es/panel_group_invite.xml b/indra/newview/skins/default/xui/es/panel_group_invite.xml index 319e9d0f1b..8ddeb5a1de 100755 --- a/indra/newview/skins/default/xui/es/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/es/panel_group_invite.xml @@ -22,7 +22,7 @@ Elegir qué rol asignarles: </text> <combo_box name="role_name" tool_tip="Elige el rol de entre la lista de aquellos que estás autorizado a asignar"/> - <button label="Enviar las invitaciones" name="ok_button"/> + <button label="Enviar invitaciones" name="invite_button"/> <button label="Cancelar" name="cancel_button"/> <string name="GroupInvitation"> Invitar al grupo diff --git a/indra/newview/skins/default/xui/es/panel_group_roles.xml b/indra/newview/skins/default/xui/es/panel_group_roles.xml index 390b4e2e9d..54a5566600 100755 --- a/indra/newview/skins/default/xui/es/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/es/panel_group_roles.xml @@ -20,16 +20,18 @@ Seleccione varios nombres manteniendo pulsada la tecla Ctrl y pulsando en cada u <name_list.columns label="Miembro" name="name"/> <name_list.columns label="Donaciones" name="donated"/> <name_list.columns label="Estatus" name="online"/> + <name_list.columns label="Cargo" name="title"/> </name_list> <button label="Invitar" name="member_invite"/> <button label="Expulsar" name="member_eject"/> + <button label="Expulsar miembro(s)" name="member_ban"/> </panel> <panel label="ROLES" name="roles_sub_tab"> <panel.string name="help_text"> Los roles tienen una etiqueta propia y unas capacidades que se -permiten ejercer a sus miembros. Los miembros pueden -tener más de un rol. Un grupo puede tener hasta 10 roles, -incluyendo el de Todos y el de Propietarios. + permiten ejercer a sus miembros. Los miembros pueden + tener más de un rol. Un grupo puede tener hasta 10 roles, + incluidos los roles Todos y Propietarios. </panel.string> <panel.string name="cant_delete_role"> Los roles de 'Todos' y 'Propietarios' son especiales, y no pueden eliminarse. @@ -48,7 +50,8 @@ incluyendo el de Todos y el de Propietarios. </panel> <panel height="148" label="CAPACIDADES" name="actions_sub_tab" tool_tip="Puedes ver una descripción de la capacidad y qué miembros y roles la tienen."> <panel.string name="help_text"> - Las capacidades permiten a los miembros que tienen ese rol el hacer tareas específicas dentro de este grupo. Hay una gran variedad de capacidades. + Las capacidades permiten a los miembros con roles hacer + cosas concretas en el grupo. Las hay de muchos tipos. </panel.string> <filter_editor label="Filtrar las capacidades" name="filter_input"/> <scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Elige una capacidad para verla más en detalle"> @@ -56,6 +59,21 @@ incluyendo el de Todos y el de Propietarios. <scroll_list.columns label="" name="action"/> </scroll_list> </panel> + <panel label="RESIDENTES EXPULSADOS" name="banlist_sub_tab" tool_tip="Muestra los residentes expulsados de este grupo."> + <panel.string name="help_text"> + Los residentes que figuren en la lista de expulsados no podrán unirse al grupo. + </panel.string> + <panel.string name="ban_count_template"> + Número de expulsados: [COUNT]/[LIMIT] + </panel.string> + <name_list name="ban_list"> + <name_list.columns label="Residente" name="name"/> + <name_list.columns label="Fecha de expulsión" name="ban_date"/> + </name_list> + <button label="Expulsar residente(s)" name="ban_create" tool_tip="Expulsa residentes del grupo"/> + <button label="Anular expulsión" name="ban_delete" tool_tip="Readmite en el grupo a los residentes seleccionados"/> + <button name="ban_refresh" tool_tip="Actualiza la lista de expulsados"/> + </panel> </tab_container> <panel name="members_footer"> <text name="static"> diff --git a/indra/newview/skins/default/xui/es/panel_login.xml b/indra/newview/skins/default/xui/es/panel_login.xml index 1d7f077fe7..253d0800e1 100755 --- a/indra/newview/skins/default/xui/es/panel_login.xml +++ b/indra/newview/skins/default/xui/es/panel_login.xml @@ -1,46 +1,27 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php?lang=es </panel.string> - <layout_stack name="login_widgets"> - <layout_panel name="login"> - <text name="log_in_text"> - INICIAR SESIÓN - </text> - <text name="username_text"> - Nombre de usuario: - </text> - <combo_box name="username_combo" tool_tip="El nombre de usuario que elegiste al registrarte, como bobsmith12 o Steller Sunshine"/> - <text name="password_text"> - Contraseña: - </text> - </layout_panel> - <layout_panel name="start_location_panel"> - <text name="start_location_text"> - Empezar en: - </text> - <combo_box name="start_location_combo"> - <combo_box.item label="Mi última posición" name="MyLastLocation"/> - <combo_box.item label="Mi Base" name="MyHome"/> - <combo_box.item label="<Escribe el nombre de la región>" name="Typeregionname"/> - </combo_box> - </layout_panel> - <layout_panel name="links_login_panel"> - <text name="login_help"> - ¿Necesitas ayuda para conectarte? - </text> + <layout_stack name="ui_stack"> + <layout_panel name="ui_container"> + <combo_box label="Nombre de usuario" name="username_combo" tool_tip="El nombre de usuario que elegiste al registrarte, como bobsmith12 o Steller Sunshine"/> + <line_editor label="Contraseña" name="password_edit"/> + <check_box label="Recordarme" name="remember_check"/> <text name="forgot_password_text"> - ¿Olvidaste el nombre de usuario o la contraseña? + Contraseña olvidada </text> <button label="Iniciar sesión" name="connect_btn"/> - <check_box label="Recordar la contraseña" name="remember_check"/> - </layout_panel> - <layout_panel name="links"> - <text name="create_account_text"> - CREA TU CUENTA + <text name="At_My_Last_Location_Label"> + en mi última posición </text> - <button label="Iniciar ahora" name="create_new_account_btn"/> + <combo_box label="Mis lugares favoritos" name="start_location_combo"> + <combo_box.item label="Mi Base" name="MyHome"/> + </combo_box> + <button label="Iniciar sesión" name="connect_favorite_btn"/> + <line_editor label="Especifica una ubicación" name="location_edit"/> + <button label="Iniciar sesión" name="connect_location_btn"/> + <combo_box label="Seleccionar cuadrícula" name="server_combo"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_login_first.xml b/indra/newview/skins/default/xui/es/panel_login_first.xml new file mode 100644 index 0000000000..7787c6526f --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_login_first.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_login"> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php?lang=es + </panel.string> + <layout_stack name="logo_stack"> + <layout_panel name="parent_panel2"> + <layout_stack name="widget_stack"> + <layout_panel name="widget_container"> + <combo_box label="Nombre de usuario" name="username_combo" tool_tip="El nombre de usuario que elegiste al registrarte, como bobsmith12 o Steller Sunshine"/> + <line_editor label="Contraseña" name="password_edit"/> + <button label="Iniciar sesión" name="connect_btn"/> + <check_box label="Recordarme" name="remember_check"/> + <text name="forgot_password_text"> + Contraseña olvidada + </text> + </layout_panel> + </layout_stack> + </layout_panel> + <layout_panel name="parent_panel3"> + <layout_stack name="images_stack"> + <layout_panel name="images_container"> + <text name="image_caption_left"> + Tu primer destino es la Isla de aprendizaje. ¡Encuentra el portal de salida! + </text> + <text name="image_caption_right"> + A continuación, puedes explorar la Isla social y hablar con otros residentes nuevos. + </text> + </layout_panel> + </layout_stack> + </layout_panel> + </layout_stack> +</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 620a95de4d..2599d951d7 100755 --- a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml @@ -28,4 +28,5 @@ <check_box label="Mostrar la selección de cuadrícula al iniciar sesión" name="show_grid_selection_check"/> <check_box label="Mostrar el menú Avanzado" name="show_advanced_menu_check"/> <check_box label="Mostrar el menú Develop" name="show_develop_menu_check"/> + <button label="Permisos de creación predeterminados" name="default_creation_permissions"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_general.xml b/indra/newview/skins/default/xui/es/panel_preferences_general.xml index 98b0081da9..e68faf6e99 100755 --- a/indra/newview/skins/default/xui/es/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_general.xml @@ -30,14 +30,10 @@ <combo_box.item label="General y Moderado" name="Desired_Mature"/> <combo_box.item label="General" name="Desired_PG"/> </combo_box> - <text name="start_location_textbox"> - Localización inicial: + <check_box label="Mostrar los lugares favoritos en la pantalla de inicio de sesión" name="favorites_on_login_check"/> + <text name="favorites_check_extra_text"> + (También los verán los demás usuarios de este equipo) </text> - <combo_box name="start_location_combo"> - <combo_box.item label="Mi última posición" name="MyLastLocation" tool_tip="Por defecto, iniciar sesión en mi última posición."/> - <combo_box.item label="Mi Base" name="MyHome" tool_tip="Por defecto, iniciar sesión en mi Base."/> - </combo_box> - <check_box initial_value="true" label="Mostrar en la pantalla de conexión" name="show_location_checkbox"/> <text name="name_tags_textbox"> Etiquetas de los nombres: </text> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml index fe312e3587..db98ee088e 100755 --- a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml @@ -7,11 +7,11 @@ <text name="cache_size_label_l"> (Localizaciones, imágenes, web, historial de búsqueda) </text> - <check_box label="Mostrarme información de perfil en los resultados de la búsqueda" name="online_searchresults"/> + <check_box label="Mostrar datos de mi perfil en los resultados de la búsqueda" name="online_searchresults"/> <check_box label="Sólo saben si estoy conectado mis amigos y grupos" name="online_visibility"/> <check_box label="Sólo pueden llamarme o mandarme un MI mis amigos y grupos" name="voice_call_friends_only_check"/> <check_box label="Desconectar el micrófono cuando finalicen las llamadas" name="auto_disengage_mic_check"/> - <check_box label="Mostrar mis Hitos favoritos al Inicio de sesión (menú desplegable "Empezar en")" name="favorites_on_login_check" top_pad="15"/> + <check_box label="Mostrar mis Hitos favoritos al Inicio de sesión (menú desplegable "Empezar en")" name="favorites_on_login_check" top_pad="15"/> <text name="Logs:"> Registros de chat: </text> diff --git a/indra/newview/skins/default/xui/es/panel_region_debug.xml b/indra/newview/skins/default/xui/es/panel_region_debug.xml index 71bdba1a25..f6676967f5 100755 --- a/indra/newview/skins/default/xui/es/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/es/panel_region_debug.xml @@ -7,11 +7,8 @@ desconocida </text> <check_box label="Desactivar los scripts" name="disable_scripts_check" tool_tip="Descativar todos los scripts en esta región"/> - <button label="?" left="215" name="disable_scripts_help"/> <check_box label="Desactivar las colisiones" name="disable_collisions_check" tool_tip="Desactiva las colisiones (no las de avatares) en esta región"/> - <button label="?" left="215" name="disable_collisions_help"/> <check_box label="Desactivar las propiedades físicas" name="disable_physics_check" tool_tip="Desactiva toda la física en esta región"/> - <button label="?" left="215" name="disable_physics_help"/> <button label="Aplicar" name="apply_btn"/> <text name="objret_text_lbl" width="130"> Devolver el objeto @@ -31,10 +28,8 @@ <check_box label="En cada región de este estado" name="return_estate_wide" tool_tip="Devolver los objetos de todas las regiones que forman este estado"/> <button label="Devolver" name="return_btn"/> <button label="Listar los objetos que colisionan..." name="top_colliders_btn" tool_tip="Lista de los objetos con más posibles colisiones potenciales" width="280"/> - <button label="?" left="297" name="top_colliders_help"/> - <button label="Listar los scripts según su uso..." name="top_scripts_btn" tool_tip="Lista de los objetos que más tiempo emplean ejecutando scripts" width="280"/> - <button label="?" left="297" name="top_scripts_help"/> <button label="Reiniciar la región" name="restart_btn" tool_tip="Cuenta atrás de 2 minutos y reiniciar la región"/> - <button label="?" name="restart_help"/> + <button label="Listar los scripts según su uso..." name="top_scripts_btn" tool_tip="Lista de los objetos que más tiempo emplean ejecutando scripts" width="280"/> <button label="Cancelar reinicio" name="cancel_restart_btn" tool_tip="Cancelar el reinicio de región"/> + <button label="Consola de depuración de región" name="region_debug_console_btn" tool_tip="Abrir consola de depuración de región"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_region_general.xml b/indra/newview/skins/default/xui/es/panel_region_general.xml index 453d1fe43c..82149e1c7c 100755 --- a/indra/newview/skins/default/xui/es/panel_region_general.xml +++ b/indra/newview/skins/default/xui/es/panel_region_general.xml @@ -20,12 +20,12 @@ </text> <check_box label="No permitir modificar el terreno" name="block_terraform_check"/> <check_box label="Prohibir volar" name="block_fly_check"/> + <check_box label="Bloquear el vuelo sobre parcelas" name="block_fly_over_check" tool_tip="Extender las comprobaciones de acceso en vertical para impedir el vuelo sobre una parcela"/> <check_box label="Permitir el daño" name="allow_damage_check"/> <check_box label="Impedir los 'empujones'" name="restrict_pushobject"/> <check_box label="Permitir la reventa del terreno" name="allow_land_resell_check"/> <check_box label="Permitir unir/dividir el terreno" name="allow_parcel_changes_check"/> <check_box label="Bloquear el mostrar el terreno en la búsqueda" name="block_parcel_search_check" tool_tip="Permitir que la gente vea esta región y sus parcelas en los resultados de la búsqueda."/> - <check_box label="Permitir objetos de red" name="mesh_rez_enabled_check" tool_tip="Permitir que los usuarios creen objetos de red en esta región"/> <spinner label="Nº máximo de avatares" label_width="120" name="agent_limit_spin" width="180"/> <spinner label="Plus de objetos" label_width="120" name="object_bonus_spin" width="180"/> <text label="Calificación" name="access_text"> diff --git a/indra/newview/skins/default/xui/es/panel_script_ed.xml b/indra/newview/skins/default/xui/es/panel_script_ed.xml index 87314820a6..89e9304693 100755 --- a/indra/newview/skins/default/xui/es/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/es/panel_script_ed.xml @@ -24,6 +24,7 @@ <menu_item_call label="Deshacer todos los cambios" name="Revert All Changes"/> <menu_item_call label="Cargar desde archivo..." name="LoadFromFile"/> <menu_item_call label="Guardar en archivo..." name="SaveToFile"/> + <menu_item_call label="Colores..." name="Colors"/> </menu> <menu label="Editar" name="Edit"> <menu_item_call label="Deshacer" name="Undo"/> @@ -41,9 +42,9 @@ <menu_item_call label="Ayuda de palabras clave..." name="Keyword Help..."/> </menu> </menu_bar> - <text_editor name="Script Editor"> + <script_editor name="Script Editor"> Cargando... - </text_editor> + </script_editor> <combo_box label="Insertar..." name="Insert..."/> <button label="Guardar" label_selected="Guardar" name="Save_btn"/> <button label="Editar..." name="Edit_btn"/> diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_options.xml b/indra/newview/skins/default/xui/es/panel_snapshot_options.xml index 2b2584f66c..f4bfc0e0b5 100755 --- a/indra/newview/skins/default/xui/es/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/es/panel_snapshot_options.xml @@ -4,4 +4,13 @@ <button label="Correo-e" name="save_to_email_btn"/> <button label="Guardar en Mi inventario ([AMOUNT] L$)" name="save_to_inventory_btn"/> <button label="Guardar en mi ordenador" name="save_to_computer_btn"/> + <text name="send_to_facebook_textbox"> + Enviar a: [secondlife:/// Facebook] + </text> + <text name="send_to_twitter_textbox"> + [secondlife:/// Twitter] + </text> + <text name="send_to_flickr_textbox"> + [secondlife:/// Flickr] + </text> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/es/panel_teleport_history_item.xml index 10b37b6880..b5917319e0 100755 --- a/indra/newview/skins/default/xui/es/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/es/panel_teleport_history_item.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="teleport_history_item"> + <text name="timestamp" value="..."/> <button name="profile_btn" tool_tip="Mostrar la información del ítem"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_twitter_account.xml b/indra/newview/skins/default/xui/es/panel_twitter_account.xml new file mode 100644 index 0000000000..f51af64b05 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_twitter_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_account"> + <string name="twitter_connected" value="Estás conectado a Twitter como:"/> + <string name="twitter_disconnected" value="No conectado a Twitter"/> + <text name="account_caption_label"> + No estás conectado a Twitter. + </text> + <panel name="panel_buttons"> + <button label="Conectar..." name="connect_btn"/> + <button label="Desconectar" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Aprende a publicar en Twitter] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_twitter_photo.xml b/indra/newview/skins/default/xui/es/panel_twitter_photo.xml new file mode 100644 index 0000000000..be1896b33b --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_twitter_photo.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="text_panel"> + <text name="status_label"> + ¿Qué está ocurriendo? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="Incluir ubicación de SL" name="add_location_cb"/> + <check_box initial_value="true" label="Incluir una foto" name="add_photo_cb"/> + </layout_panel> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Resolución de imagen"> + <combo_box.item label="Ventana actual" name="CurrentWindow"/> + <combo_box.item label="640 × 480" name="640x480"/> + <combo_box.item label="800 × 600" name="800x600"/> + <combo_box.item label="1024 × 768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtros de imagen"> + <combo_box.item label="Sin filtro" name="NoFilter"/> + </combo_box> + <button label="Actualizar" name="new_snapshot_btn" tool_tip="Pulsa para actualizar"/> + <button label="Vista previa" name="big_preview_btn" tool_tip="Pulsa para alternar entre vista previa sí/no"/> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Tuitear" name="post_photo_btn"/> + <button label="Cancelar" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/es/role_actions.xml b/indra/newview/skins/default/xui/es/role_actions.xml index 902ed4df52..5e0c21992d 100755 --- a/indra/newview/skins/default/xui/es/role_actions.xml +++ b/indra/newview/skins/default/xui/es/role_actions.xml @@ -3,6 +3,7 @@ <action_set description="Estas capacidades incluyen poderes para añadir o quitar miembros del grupo, y para pemitir que se sumen nuevos miembros sin necesidad de invitación." name="Membership"> <action description="Invitar personas al grupo" longdescription="Invitar a gente a este grupo usando el botón 'Invitar' en la sección Roles > pestaña Miembros." name="member invite" value="1"/> <action description="Expulsar a miembros del grupo" longdescription="Expulsar a miembros de este grupo usando el botón 'Expulsar' en la sección Roles > pestaña Miembros. Un propietario puede expulsar a cualquiera, excepto a otro propietario. Si no eres un propietario, un miembro puede ser expulsado única y exclusivamente si está en el rol de Cualquiera y NO en otros roles. Para quitar roles a los miembros, tienes que tener la capacidad de 'Quitar roles a los miembros'." name="member eject" value="2"/> + <action description="Administra la lista de expulsados" longdescription="Permite que el miembro del grupo expulse a residentes de este grupo o los readmita." name="allow ban" value="51"/> <action description="Cambiar 'Inscripción abierta' y 'Cuota de inscripción'" longdescription="En la sección General, cambiar la 'Inscripción abierta' -que permite entrar al grupo sin invitación- y la 'Cuota de inscripción'." name="member options" value="3"/> </action_set> <action_set description="Estas habilidades incluyen el poder añadir, quitar y cambiar roles, asignarlos a miembros, y darles capacidades." name="Roles"> diff --git a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml index 9ce14c856f..1e25a4a4a2 100755 --- a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml @@ -14,7 +14,7 @@ <text name="inbox_fresh_new_count"> [NUM] nuevos </text> - <panel tool_tip="Drag and drop items to your inventory to manage and use them"> + <panel name="inbox_inventory_placeholder_panel" tool_tip="Arrastra y coloca los artículos en tu inventario para poder utilizarlos"> <text name="inbox_inventory_placeholder"> Aquí se entregarán las compras realizadas en el mercado. </text> @@ -33,8 +33,8 @@ <layout_panel name="shop_btn_lp"> <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" tool_tip="Teleportar a la zona elegida"/> + <button label="Jugar" name="play_btn"/> + <button label="Teleportarte" name="teleport_btn" tool_tip="Teleportar a la zona elegida"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index 2b91c542ad..bd339513b3 100755 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -28,6 +28,45 @@ <string name="StartupRequireDriverUpdate"> Error de inicialización de gráficos. Actualiza tu controlador de gráficos. </string> + <string name="AboutHeader"> + [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL]) +[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]] + </string> + <string name="AboutCompiler"> + Compilado con [COMPILER], versión [COMPILER_VERSION] + </string> + <string name="AboutPosition"> + Estás en la posición [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1], de [REGION], alojada en <nolink>[HOSTNAME]</nolink> ([HOSTIP]) +SLURL: <nolink>[SLURL]</nolink> +(coordenadas globales [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1]) +[SERVER_VERSION] +[SERVER_RELEASE_NOTES_URL] + </string> + <string name="AboutSystem"> + CPU: [CPU] +Memoria: [MEMORY_MB] MB +Versión del Sistema Operativo: [OS_VERSION] +Fabricante de la tarjeta gráfica: [GRAPHICS_CARD_VENDOR] +Tarjeta gráfica: [GRAPHICS_CARD] + </string> + <string name="AboutDriver"> + Versión de Windows Graphics Driver: [GRAPHICS_DRIVER_VERSION] + </string> + <string name="AboutLibs"> + Versión de OpenGL: [OPENGL_VERSION] + +Versión de libcurl: [LIBCURL_VERSION] +Versión de J2C Decoder: [J2C_VERSION] +Versión de Audio Driver: [AUDIO_DRIVER_VERSION] +Versión de Qt Webkit: [QT_WEBKIT_VERSION] +Versión del servidor de voz: [VOICE_VERSION] + </string> + <string name="AboutTraffic"> + Paquetes perdidos: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) + </string> + <string name="ErrorFetchingServerReleaseNotesURL"> + Error al obtener la URL de las notas de la versión del servidor. + </string> <string name="ProgressRestoring"> Restaurando... </string> @@ -287,6 +326,75 @@ Intenta iniciar sesión de nuevo en unos instantes. <string name="TestingDisconnect"> Probando la desconexión del visor </string> + <string name="SocialFlickrConnecting"> + Conectándose a Flickr... + </string> + <string name="SocialFlickrPosting"> + Publicando... + </string> + <string name="SocialFlickrDisconnecting"> + Desconectándose de Flickr... + </string> + <string name="SocialFlickrErrorConnecting"> + Problema con la conexión a Flickr + </string> + <string name="SocialFlickrErrorPosting"> + Problema al publicar en Flickr + </string> + <string name="SocialFlickrErrorDisconnecting"> + Problema con la desconexión de Flickr + </string> + <string name="SocialTwitterConnecting"> + Conectándose a Twitter... + </string> + <string name="SocialTwitterPosting"> + Publicando... + </string> + <string name="SocialTwitterDisconnecting"> + Desconectándose de Twitter... + </string> + <string name="SocialTwitterErrorConnecting"> + Problema con la conexión a Twitter + </string> + <string name="SocialTwitterErrorPosting"> + Problema al publicar en Twitter + </string> + <string name="SocialTwitterErrorDisconnecting"> + Problema con la desconexión de Twitter + </string> + <string name="BlackAndWhite"> + Blanco y negro + </string> + <string name="Colors1970"> + Colores de los 70 + </string> + <string name="Intense"> + Intenso + </string> + <string name="Newspaper"> + Periódico + </string> + <string name="Sepia"> + Sepia + </string> + <string name="Spotlight"> + Foco + </string> + <string name="Video"> + Vídeo + </string> + <string name="Autocontrast"> + Contraste automático + </string> + <string name="LensFlare"> + Destello de lente + </string> + <string name="Miniature"> + Miniatura + </string> + <string name="Toycamera"> + Cámara de juguete + </string> <string name="TooltipPerson"> Persona </string> @@ -832,6 +940,12 @@ Intenta iniciar sesión de nuevo en unos instantes. <string name="use_texture"> Usar textura </string> + <string name="manip_hint1"> + Pasa el cursor del ratón sobre la regla + </string> + <string name="manip_hint2"> + para ajustar a la cuadrícula + </string> <string name="texture_loading"> Cargando... </string> @@ -922,12 +1036,12 @@ Intenta iniciar sesión de nuevo en unos instantes. <string name="ControlYourCamera"> Controlar su cámara </string> - <string name="AgentNameSubst"> - (Tú) - </string> <string name="TeleportYourAgent"> Teleportarte </string> + <string name="AgentNameSubst"> + (Tú) + </string> <string name="JoinAnExperience"> Únete a una experiencia </string> @@ -1252,8 +1366,7 @@ Intenta iniciar sesión de nuevo en unos instantes. <string name="InventoryInboxNoItems"> Aquí aparecerán algunos de los objetos que recibas, como los regalos Premium. Después puedes arrastrarlos a tu inventario. </string> - <string name="Unconstrained">Sin restricciones</string> - <string name="MarketplaceURL"> + <string name="MarketplaceURL"> https://marketplace.[MARKETPLACE_DOMAIN_NAME]/ </string> <string name="MarketplaceURL_CreateStore"> @@ -1282,6 +1395,18 @@ Intenta iniciar sesión de nuevo en unos instantes. <string name="InventoryOutboxNoItems"> Arrastra carpetas a esta sección y pulsa en "Enviar al Mercado" para incluirlas en la lista de venta del [[MARKETPLACE_DASHBOARD_URL] Mercado]. </string> + <string name="InventoryOutboxInitializingTitle"> + Inicializando el Mercado. + </string> + <string name="InventoryOutboxInitializing"> + Estamos accediendo a tu cuenta de la [[MARKETPLACE_CREATE_STORE_URL] tienda del Mercado]. + </string> + <string name="InventoryOutboxErrorTitle"> + Errores del Mercado. + </string> + <string name="InventoryOutboxError"> + La [[MARKETPLACE_CREATE_STORE_URL] tienda del Mercado] devuelve errores. + </string> <string name="Marketplace Error None"> Sin errores </string> @@ -1309,6 +1434,9 @@ Intenta iniciar sesión de nuevo en unos instantes. <string name="Open landmarks"> Abrir hitos </string> + <string name="Unconstrained"> + Sin restricciones + </string> <string name="no_transfer" value="(no transferible)"/> <string name="no_modify" value="(no modificable)"/> <string name="no_copy" value="(no copiable)"/> @@ -1703,6 +1831,9 @@ Intenta iniciar sesión de nuevo en unos instantes. <string name="CompileQueueDownloadedCompiling"> Descargado, compilándolo </string> + <string name="CompileQueueServiceUnavailable"> + El servicio de compilación de scripts no está disponible + </string> <string name="CompileQueueScriptNotFound"> No se encuentra el script en el servidor. </string> @@ -3937,6 +4068,12 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE]. <string name="share_alert"> Arrastra los ítems desde el invenbtario hasta aquí </string> + <string name="flickr_post_success"> + Has publicado en Flickr. + </string> + <string name="twitter_post_success"> + Has publicado en Twitter. + </string> <string name="no_session_message"> (La sesión de MI no existe) </string> @@ -4393,6 +4530,9 @@ Denuncia de infracción <string name="LocalEstimateUSD"> [AMOUNT] US$ </string> + <string name="Group Ban"> + Expulsión de grupo + </string> <string name="Membership"> Membresía </string> @@ -4815,6 +4955,12 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas <string name="Command_Destinations_Label"> Destinos </string> + <string name="Command_Facebook_Label"> + Facebook + </string> + <string name="Command_Flickr_Label"> + Flickr + </string> <string name="Command_Gestures_Label"> Gestos </string> @@ -4863,6 +5009,9 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas <string name="Command_Speak_Label"> Hablar </string> + <string name="Command_Twitter_Label"> + Twitter + </string> <string name="Command_View_Label"> Controles de la cámara </string> @@ -4893,6 +5042,12 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas <string name="Command_Destinations_Tooltip"> Destinos de interés </string> + <string name="Command_Facebook_Tooltip"> + Publicar en Facebook + </string> + <string name="Command_Flickr_Tooltip"> + Subir a Flickr + </string> <string name="Command_Gestures_Tooltip"> Gestos para tu avatar </string> @@ -4941,6 +5096,9 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas <string name="Command_Speak_Tooltip"> Utiliza el micrófono para hablar con las personas próximas </string> + <string name="Command_Twitter_Tooltip"> + Twitter + </string> <string name="Command_View_Tooltip"> Cambiando el ángulo de la cámara </string> diff --git a/indra/newview/skins/default/xui/fr/floater_big_preview.xml b/indra/newview/skins/default/xui/fr/floater_big_preview.xml new file mode 100644 index 0000000000..0c09a4c188 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_big_preview.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_big_preview" title="APERÇU"/> diff --git a/indra/newview/skins/default/xui/fr/floater_facebook.xml b/indra/newview/skins/default/xui/fr/floater_facebook.xml new file mode 100644 index 0000000000..12a3c9ae61 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_facebook.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_facebook" title="PUBLIER SUR FACEBOOK"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="STATUT" name="panel_facebook_status"/> + <panel label="PHOTO" name="panel_facebook_photo"/> + <panel label="INDIQUER VOTRE PRÉSENCE" name="panel_facebook_place"/> + <panel label="AMIS" name="panel_facebook_friends"/> + <panel label="COMPTE" name="panel_facebook_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Erreur + </text> + <text name="connection_loading_text"> + Chargement... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_flickr.xml b/indra/newview/skins/default/xui/fr/floater_flickr.xml new file mode 100644 index 0000000000..0432ae9459 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_flickr.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_flickr" title="CHARGER DANS FLICKR"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="PHOTO" name="panel_flickr_photo"/> + <panel label="COMPTE" name="panel_flickr_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Erreur + </text> + <text name="connection_loading_text"> + Chargement... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_lagmeter.xml b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml new file mode 100644 index 0000000000..39a861d8bd --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml @@ -0,0 +1,151 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_lagmeter" title="MESURE DU LAG"> + <floater.string name="max_title_msg"> + Mesure du lag + </floater.string> + <floater.string name="max_width_px"> + 360 + </floater.string> + <floater.string name="min_title_msg"> + Lag + </floater.string> + <floater.string name="min_width_px"> + 90 + </floater.string> + <floater.string name="client_text_msg"> + Client + </floater.string> + <floater.string name="client_frame_rate_critical_fps"> + 10 + </floater.string> + <floater.string name="client_frame_rate_warning_fps"> + 15 + </floater.string> + <floater.string name="client_frame_time_window_bg_msg"> + Normal, fenêtre en arrière-plan + </floater.string> + <floater.string name="client_frame_time_critical_msg"> + Taux de défilement [CLIENT_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="client_frame_time_warning_msg"> + Taux de défilement entre [CLIENT_FRAME_RATE_CRITICAL] et [CLIENT_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="client_frame_time_normal_msg"> + Normal + </floater.string> + <floater.string name="client_draw_distance_cause_msg"> + Cause possible : limite d'affichage trop élevée + </floater.string> + <floater.string name="client_texture_loading_cause_msg"> + Cause possible : images en cours de chargement + </floater.string> + <floater.string name="client_texture_memory_cause_msg"> + Cause possible : trop d'images en mémoire + </floater.string> + <floater.string name="client_complex_objects_cause_msg"> + Cause possible : trop d'objets complexes + </floater.string> + <floater.string name="network_text_msg"> + Réseau + </floater.string> + <floater.string name="network_packet_loss_critical_pct"> + 10 + </floater.string> + <floater.string name="network_packet_loss_warning_pct"> + 5 + </floater.string> + <floater.string name="network_packet_loss_critical_msg"> + La connexion perd plus de [NETWORK_PACKET_LOSS_CRITICAL] % de paquets + </floater.string> + <floater.string name="network_packet_loss_warning_msg"> + La connexion perd entre [NETWORK_PACKET_LOSS_WARNING] % et [NETWORK_PACKET_LOSS_CRITICAL] % de paquets + </floater.string> + <floater.string name="network_performance_normal_msg"> + Normal + </floater.string> + <floater.string name="network_ping_critical_ms"> + 600 + </floater.string> + <floater.string name="network_ping_warning_ms"> + 300 + </floater.string> + <floater.string name="network_ping_critical_msg"> + Connexion ping > [NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_ping_warning_msg"> + Connexion ping entre [NETWORK_PING_WARNING] et [NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_packet_loss_cause_msg"> + Mauvaise connexion possible ou réglage de la bande passante trop élevé. + </floater.string> + <floater.string name="network_ping_cause_msg"> + Mauvaise connexion possible ou app. de partage des fichiers + </floater.string> + <floater.string name="server_text_msg"> + Serveur + </floater.string> + <floater.string name="server_frame_rate_critical_fps"> + 20 + </floater.string> + <floater.string name="server_frame_rate_warning_fps"> + 30 + </floater.string> + <floater.string name="server_single_process_max_time_ms"> + 20 + </floater.string> + <floater.string name="server_frame_time_critical_msg"> + Défilement du simulateur < [SERVER_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="server_frame_time_warning_msg"> + Défilement simulateur entre [SERVER_FRAME_RATE_CRITICAL] et [SERVER_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="server_frame_time_normal_msg"> + Normal + </floater.string> + <floater.string name="server_physics_cause_msg"> + Cause possible : trop d'objets physiques + </floater.string> + <floater.string name="server_scripts_cause_msg"> + Cause possible : trop d'objets scriptés + </floater.string> + <floater.string name="server_net_cause_msg"> + Cause possible : trop de trafic réseau + </floater.string> + <floater.string name="server_agent_cause_msg"> + Cause possible : trop de personnes en mouvement + </floater.string> + <floater.string name="server_images_cause_msg"> + Cause possible : trop de calculs d'images + </floater.string> + <floater.string name="server_generic_cause_msg"> + Cause possible : charge simulateur trop lourde + </floater.string> + <floater.string name="smaller_label"> + >> + </floater.string> + <floater.string name="bigger_label"> + << + </floater.string> + <button name="client_lagmeter" tool_tip="Statut du lag client"/> + <text name="client"> + Client + </text> + <text name="client_text"> + Normal + </text> + <button name="network_lagmeter" tool_tip="Statut du lag réseau"/> + <text name="network"> + Réseau + </text> + <text name="network_text"> + Normal + </text> + <button name="server_lagmeter" tool_tip="Statut du lag serveur"/> + <text name="server"> + Serveur + </text> + <text name="server_text"> + Normal + </text> + <button label=">>" name="minimize" tool_tip="Activer/désactiver la taille du floater"/> +</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_perms_default.xml b/indra/newview/skins/default/xui/fr/floater_perms_default.xml new file mode 100644 index 0000000000..005daf7ec1 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_perms_default.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="perms default" title="PERMISSIONS DE CRÉATION PAR DÉFAUT"> + <panel label="Permissions par défaut" name="default permissions"/> + <button label="OK" label_selected="OK" name="ok"/> + <button label="Annuler" label_selected="Annuler" name="cancel"/> +</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_region_restarting.xml b/indra/newview/skins/default/xui/fr/floater_region_restarting.xml new file mode 100644 index 0000000000..3a56a83c22 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_region_restarting.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="region_restarting" title="REDÉMARRAGE DE LA RÉGION"> + <string name="RegionName"> + La région dans laquelle vous vous trouvez actuellement ([NAME]) est sur le point de redémarrer. + +Si vous restez dans cette région, vous serez déconnecté(e). + </string> + <string name="RestartSeconds"> + Secondes avant le redémarrage +[SECONDS] + </string> + <panel name="layout_panel_1"> + <text name="region_name"> + La région dans laquelle vous vous trouvez actuellement (-le nom de région le plus long-) est sur le point de redémarrer. + +Si vous restez dans cette région, vous serez déconnecté(e). + </text> + <text name="restart_seconds"> + Secondes avant le redémarrage + 32767 + </text> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml index 78c35dc303..153be444e5 100755 --- a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml @@ -44,7 +44,7 @@ <combo_box.item label="Âge > Résident adulte sur Second Life pour adolescents" name="Age__Adult_resident_on_Teen_Second_Life"/> <combo_box.item label="Âge > Résident mineur en dehors de Second Life pour adolescents" name="Age__Underage_resident_outside_of_Teen_Second_Life"/> <combo_box.item label="Assaut > Bac à sable utilisé pour des combats/zone non sécurisée" name="Assault__Combat_sandbox___unsafe_area"/> - <combo_box.item label="Assaut > Zone sécurisée" name="Assault__Safe_area"/> + <combo_box.item label="Assaut > Tirer sur une personne avec une arme, pousser ou bousculer un résident dans une zone « sécurisée »" name="Assault__Safe_area"/> <combo_box.item label="Assaut > Bac à sable pour tests d'armes à feu" name="Assault__Weapons_testing_sandbox"/> <combo_box.item label="Commerce > Incapacité à fournir un produit ou service" name="Commerce__Failure_to_deliver_product_or_service"/> <combo_box.item label="Divulgation > Informations sur la vie réelle" name="Disclosure__Real_world_information"/> @@ -58,25 +58,25 @@ <combo_box.item label="Fraude > L$" name="Fraud__L$"/> <combo_box.item label="Fraude > Terrain" name="Fraud__Land"/> <combo_box.item label="Fraude > Vente pyramidale ou lettre-chaîne" name="Fraud__Pyramid_scheme_or_chain_letter"/> - <combo_box.item label="Fraude > US$" name="Fraud__US$"/> + <combo_box.item label="Fraude > L$ ou US$" name="Fraud__US$"/> <combo_box.item label="Harcèlement > Spam visuel" name="Harassment__Advert_farms___visual_spam"/> <combo_box.item label="Harcèlement > Diffamation envers des individus ou des groupes" name="Harassment__Defaming_individuals_or_groups"/> <combo_box.item label="Harcèlement > Immobilisation" name="Harassment__Impeding_movement"/> <combo_box.item label="Harcèlement > Harcèlement sexuel" name="Harassment__Sexual_harassment"/> - <combo_box.item label="Harcèlement > Incitation à enfreindre les Conditions d'utilisation" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> + <combo_box.item label="Harcèlement > Comportement ciblé fait pour déranger" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> <combo_box.item label="Harcèlement > Abus verbal" name="Harassment__Verbal_abuse"/> <combo_box.item label="Indécence > Contenu ou comportement offensifs" name="Indecency__Broadly_offensive_content_or_conduct"/> <combo_box.item label="Indécence > Nom d'avatar inapproprié" name="Indecency__Inappropriate_avatar_name"/> - <combo_box.item label="Indécence > Contenu ou conduite inappropriés dans une région PG" name="Indecency__Mature_content_in_PG_region"/> + <combo_box.item label="Indécence > Contenu ou conduite inappropriés pour la catégorie de région" name="Indecency__Mature_content_in_PG_region"/> <combo_box.item label="Indécence > Contenu ou conduite inappropriés dans une région modérée" name="Indecency__Inappropriate_content_in_Mature_region"/> <combo_box.item label="Violation de droits de propriété intellectuelle > Suppression de contenu" name="Intellectual_property_infringement_Content_Removal"/> <combo_box.item label="Violation de droits de propriété intellectuelle > CopyBot ou exploitation abusive des droits" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/> <combo_box.item label="Intolérance" name="Intolerance"/> <combo_box.item label="Terrain > Utilisation abusive des ressources du bac à sable" name="Land__Abuse_of_sandbox_resources"/> - <combo_box.item label="Terrain > Empiètement > Objets/textures" name="Land__Encroachment__Objects_textures"/> + <combo_box.item label="Terrain > Empiètement > Objets ou textures" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="Terrain > Empiètement > Particules" name="Land__Encroachment__Particles"/> <combo_box.item label="Terrain > Empiètement > Arbres/plantes" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="Paris/jeux d'argent" name="Wagering_gambling"/> + <combo_box.item label="Paris ou jeux d'argent" name="Wagering_gambling"/> <combo_box.item label="Autre" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/fr/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/fr/floater_scene_load_stats.xml new file mode 100644 index 0000000000..62830054bf --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_scene_load_stats.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Scene Load Statistics" title="STATISTIQUES DE CHARGEMENT DE SCÈNE"> + <button label="Pauser" name="playpause"/> + <scroll_container name="statistics_scroll"> + <container_view name="statistics_view"> + <stat_view label="Basique" name="basic"> + <stat_bar label="Différence en pixels entre les images" name="frame difference"/> + <stat_bar label="Données UDP reçues" name="bandwidth"/> + <stat_bar label="Perte de paquets" name="packet_loss"/> + </stat_view> + <stat_view label="Avancé" name="advanced"> + <stat_view label="Rendu" name="render"> + <stat_bar label="Total des objets" name="objs"/> + <stat_bar label="Nouveaux objets" name="newobjs"/> + <stat_bar label="Taux de réussite du cache des objets" name="object_cache_hits"/> + </stat_view> + <stat_view label="Texture" name="texture"> + <stat_bar label="Taux de réussite du cache" name="texture_cache_hits"/> + <stat_bar label="Latence de lecture du cache" name="texture_cache_read_latency"/> + <stat_bar label="Nombre" name="numimagesstat"/> + <stat_bar label="Nombre brut" name="numrawimagesstat"/> + </stat_view> + <stat_view label="Réseau" name="network"> + <stat_bar label="Paquets en entrée" name="packetsinstat"/> + <stat_bar label="Paquets en sortie" name="packetsoutstat"/> + <stat_bar label="Objets" name="objectdatareceived"/> + <stat_bar label="Texture" name="texturedatareceived"/> + <stat_bar label="Actif" name="assetudpdatareceived"/> + <stat_bar label="Couches" name="layersdatareceived"/> + <stat_bar label="Arrivés" name="messagedatain"/> + <stat_bar label="Sortis" name="messagedataout"/> + <stat_bar label="Opérations VFS en attente" name="vfspendingoperations"/> + </stat_view> + </stat_view> + <stat_view label="Simulateur" name="sim"> + <stat_bar label="Objets" name="simobjects"/> + <stat_bar label="Objets actifs" name="simactiveobjects"/> + <stat_bar label="Scripts actifs" name="simactivescripts"/> + <stat_bar label="Paquets en entrée" name="siminpps"/> + <stat_bar label="Paquets en sortie" name="simoutpps"/> + <stat_bar label="Téléchargements en attente" name="simpendingdownloads"/> + <stat_bar label="Chargements en attente" name="simpendinguploads"/> + <stat_bar label="Total d'octets non reconnus" name="simtotalunackedbytes"/> + <stat_view label="Temps (ms)" name="simperf"> + <stat_bar label="Durée totale de l'image" name="simframemsec"/> + <stat_bar label="Durée nette" name="simnetmsec"/> + <stat_bar label="Durée physique" name="simsimphysicsmsec"/> + <stat_bar label="Durée de la simulation" name="simsimothermsec"/> + <stat_bar label="Durée des avatars" name="simagentmsec"/> + <stat_bar label="Durée des images" name="simimagesmsec"/> + <stat_bar label="Durée des scripts" name="simscriptmsec"/> + <stat_bar label="Temps d'inactivité" name="simsparemsec"/> + <stat_view label="Détails de la durée (ms)" name="timedetails"> + <stat_bar label="Étape propr. physiques" name="simsimphysicsstepmsec"/> + <stat_bar label="Mettre à jour les formes phys" name="simsimphysicsshapeupdatemsec"/> + <stat_bar label="Propriétés physiques Autre" name="simsimphysicsothermsec"/> + <stat_bar label="Temps de sommeil" name="simsleepmsec"/> + <stat_bar label="ES pompe" name="simpumpiomsec"/> + </stat_view> + </stat_view> + </stat_view> + </container_view> + </scroll_container> +</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/fr/floater_script_ed_prefs.xml new file mode 100644 index 0000000000..d1e3de5f95 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_script_ed_prefs.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_script_colors" title="COULEURS DE SCRIPT"> + <text name="color_pickers_label"> + Choisissez les couleurs : + </text> + <text name="text_label"> + Texte + </text> + <text name="cursor_label"> + Curseur + </text> + <text name="background_label"> + Arrière-plan + </text> + <text name="datatype_label"> + Types de données + </text> + <text name="event_label"> + Événements + </text> + <text name="string_literal_label"> + Littéraux de chaîne + </text> + <text name="constant_label"> + Constante + </text> + <text name="flow_control_label"> + Contrôle du flux + </text> + <text name="function_label"> + Fonction + </text> + <text name="comment_label"> + Commentaire + </text> + <script_editor name="Script Preview"> + /* Un exemple de script */ +default +{ + state_entry() + { + // Comment + string greeting = "Bonjour"; + llSay(PUBLIC_CHANNEL, greeting); + } +} + </script_editor> +</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml index 9244051edc..ab2256e356 100755 --- a/indra/newview/skins/default/xui/fr/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/fr/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="APERÇU DE LA PHOTO"> +<floater name="Snapshot" title="PHOTO"> <floater.string name="unknown"> inconnu </floater.string> @@ -61,5 +61,11 @@ <check_box label="HUD" name="hud_check"/> <check_box label="Arrêt sur image (plein écran)" name="freeze_frame_check"/> <check_box label="Actualisation automatique" name="auto_snapshot_check"/> + <text name="filter_list_label"> + Filtre : + </text> + <combo_box name="filters_combobox" tool_tip="Filtres d'image"> + <combo_box.item label="Aucun filtre" name="NoFilter"/> + </combo_box> </panel> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_stats.xml b/indra/newview/skins/default/xui/fr/floater_stats.xml index d6bd187956..fae17e3608 100755 --- a/indra/newview/skins/default/xui/fr/floater_stats.xml +++ b/indra/newview/skins/default/xui/fr/floater_stats.xml @@ -4,7 +4,7 @@ <container_view name="statistics_view"> <stat_view label="De base" name="basic"> <stat_bar label="FPS" name="fps"/> - <stat_bar label="Bande passante" name="bandwidth"/> + <stat_bar label="Données UDP reçues" name="bandwidth"/> <stat_bar label="Perte de paquets" name="packet_loss"/> <stat_bar label="Ping sim" name="ping"/> </stat_view> @@ -12,9 +12,13 @@ <stat_view label="Rendu" name="render"> <stat_bar label="KTris par image" name="ktrisframe"/> <stat_bar label="KTris par s" name="ktrissec"/> - <stat_bar label="Objets totaux" name="objs"/> + <stat_bar label="Total des objets" name="totalobjs"/> + <stat_bar label="Objets en cache" name="cachedobjs"/> <stat_bar label="Nouveaux objets" name="newobjs"/> <stat_bar label="Taux de réussite du cache des objets" name="object_cache_hits"/> + <stat_bar label="Requêtes d'occlusion effectuées" name="occlusion_queries"/> + <stat_bar label="Objets occlus" name="occluded"/> + <stat_bar label="Objets non occlus" name="unoccluded"/> </stat_view> <stat_view label="Texture" name="texture"> <stat_bar label="Taux de réussite du cache" name="texture_cache_hits"/> @@ -26,15 +30,32 @@ <stat_bar label="Mém brute" name="rawmemstat"/> <stat_bar label="Mém liée" name="glboundmemstat"/> </stat_view> + <stat_view label="Utilisation de la mémoire" name="memory"> + <stat_bar label="LLTrace" name="LLTrace"/> + <stat_bar label="Interface" name="LLView"/> + <stat_bar label="Polices" name="LLFontFreetype"/> + <stat_bar label="Inventaire" name="LLInventoryObject"/> + <stat_bar label="Objets du client" name="LLViewerObject"/> + <stat_bar label="Données de groupe Octree" name="LLViewerOctreeGroup"/> + <stat_bar label="Données Octree" name="LLViewerOctreeEntry"/> + <stat_bar label="Cache des objets du client" name="LLVOCacheEntry"/> + <stat_bar label="Dessinables" name="LLDrawable"/> + <stat_bar label="Données de visage" name="LLFace"/> + <stat_bar label="Informations de tracé" name="LLDrawInfo"/> + <stat_bar label="Données de texture" name="LLTexture"/> + <stat_bar label="Données d'image" name="LLImage"/> + <stat_bar label="Données d'image GL" name="LLImageGL"/> + <stat_bar label="Tampon des sommets" name="LLVertexBuffer"/> + </stat_view> <stat_view label="Réseau" name="network"> <stat_bar label="Paquets en entrée" name="packetsinstat"/> <stat_bar label="Paquets en sortie" name="packetsoutstat"/> - <stat_bar label="Objets" name="objectkbitstat"/> - <stat_bar label="Texture" name="texturekbitstat"/> - <stat_bar label="Actif" name="assetkbitstat"/> - <stat_bar label="Couches" name="layerskbitstat"/> - <stat_bar label="Arrivés" name="actualinkbitstat"/> - <stat_bar label="Sortis" name="actualoutkbitstat"/> + <stat_bar label="Objets" name="objectdatareceived"/> + <stat_bar label="Texture" name="texturedatareceived"/> + <stat_bar label="Actif" name="assetudpdatareceived"/> + <stat_bar label="Couches" name="layersdatareceived"/> + <stat_bar label="Arrivés" name="messagedatain"/> + <stat_bar label="Sortis" name="messagedataout"/> <stat_bar label="Opérations VFS en attente" name="vfspendingoperations"/> </stat_view> </stat_view> @@ -64,8 +85,8 @@ <stat_bar label="Paquets en sortie" name="simoutpps"/> <stat_bar label="Téléchargements en attente" name="simpendingdownloads"/> <stat_bar label="Chargements en attente" name="simpendinguploads"/> - <stat_bar label="Total Unacked Bytes" name="simtotalunackedbytes"/> - <stat_view label="Temps (ms)" name="simperf"> + <stat_bar label="Total de données non reconnues" name="simtotalunackedbytes"/> + <stat_view label="Durée" name="simperf"> <stat_bar label="Durée totale de l'image" name="simframemsec"/> <stat_bar label="Durée nette" name="simnetmsec"/> <stat_bar label="Durée sim (physique)" name="simsimphysicsmsec"/> @@ -74,7 +95,7 @@ <stat_bar label="Durée des images" name="simimagesmsec"/> <stat_bar label="Durée des scripts" name="simscriptmsec"/> <stat_bar label="Temps d'inactivité" name="simsparemsec"/> - <stat_view label="Détails Temps (ms)" name="timedetails"> + <stat_view label="Détails de la durée" name="timedetails"> <stat_bar label="Etape propr. physiques" name="simsimphysicsstepmsec"/> <stat_bar label="Mettre à jour les formes phys" name="simsimphysicsshapeupdatemsec"/> <stat_bar label="Propriétés physiques Autre" name="simsimphysicsothermsec"/> diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml index 421e14d51b..b254a178f9 100755 --- a/indra/newview/skins/default/xui/fr/floater_tools.xml +++ b/indra/newview/skins/default/xui/fr/floater_tools.xml @@ -72,7 +72,7 @@ <check_box label="Modification liée" name="checkbox edit linked parts"/> <button label="Lien" name="link_btn"/> <button label="Annuler le lien" name="unlink_btn"/> - <check_box label="" name="checkbox uniform"/> + <check_box label="Étirer les deux côtés" name="checkbox uniform"/> <text label="Étirer les deux côtés" name="checkbox uniform label"> Étirer les deux côtés </text> diff --git a/indra/newview/skins/default/xui/fr/floater_twitter.xml b/indra/newview/skins/default/xui/fr/floater_twitter.xml new file mode 100644 index 0000000000..9ca2b0d48d --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_twitter.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_twitter" title="TWITTER"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="COMPOSER" name="panel_twitter_photo"/> + <panel label="COMPTE" name="panel_twitter_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Erreur + </text> + <text name="connection_loading_text"> + Chargement... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml b/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml index 3bac25c79b..072ac0a6ae 100755 --- a/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml @@ -2,6 +2,7 @@ <menu name="Avatar Icon Menu"> <menu_item_call label="Voir le profil" name="Show Profile"/> <menu_item_call label="Envoyer IM..." name="Send IM"/> + <menu_item_call label="Demander téléportation" name="Request Teleport"/> <menu_item_call label="Devenir amis..." name="Add Friend"/> <menu_item_call label="Supprimer cet ami..." name="Remove Friend"/> </menu> diff --git a/indra/newview/skins/default/xui/fr/menu_conversation.xml b/indra/newview/skins/default/xui/fr/menu_conversation.xml index 09109f4555..be110777c0 100644 --- a/indra/newview/skins/default/xui/fr/menu_conversation.xml +++ b/indra/newview/skins/default/xui/fr/menu_conversation.xml @@ -29,4 +29,5 @@ <menu_item_call label="Ignorer les autres" name="ModerateVoiceMute"/> <menu_item_call label="Ne plus ignorer les autres" name="ModerateVoiceUnmute"/> </context_menu> + <menu_item_call label="Bannir le membre" name="BanMember"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_inventory.xml b/indra/newview/skins/default/xui/fr/menu_inventory.xml index 627d3068c3..87b11bdaa5 100755 --- a/indra/newview/skins/default/xui/fr/menu_inventory.xml +++ b/indra/newview/skins/default/xui/fr/menu_inventory.xml @@ -70,6 +70,7 @@ <menu_item_call label="Jouer" name="Sound Play"/> <menu_item_call label="Copier la SLurl" name="url_copy"/> <menu_item_call label="À propos du repère" name="About Landmark"/> + <menu_item_call label="Voir sur la carte" name="show_on_map"/> <menu_item_call label="Jouer dans Second Life" name="Animation Play"/> <menu_item_call label="Jouer localement" name="Animation Audition"/> <menu_item_call label="Envoyer un message instantané" name="Send Instant Message"/> diff --git a/indra/newview/skins/default/xui/fr/menu_login.xml b/indra/newview/skins/default/xui/fr/menu_login.xml index 7b1e106474..5e9969627d 100755 --- a/indra/newview/skins/default/xui/fr/menu_login.xml +++ b/indra/newview/skins/default/xui/fr/menu_login.xml @@ -5,7 +5,15 @@ <menu_item_call label="Quitter [APP_NAME]" name="Quit"/> </menu> <menu label="Aide" name="Help"> - <menu_item_call label="Aide de [SECOND_LIFE]" name="Second Life Help"/> + <menu_item_call label="Aide rapide..." name="How To"/> + <menu_item_call label="Démarrage rapide" name="Quickstart"/> + <menu_item_call label="Base de connaissances" name="Knowledge Base"/> + <menu_item_call label="Wiki" name="Wiki"/> + <menu_item_call label="Forums de la communauté" name="Community Forums"/> + <menu_item_call label="Portail d'assistance" name="Support portal"/> + <menu_item_call label="Actualités [SECOND_LIFE]" name="Second Life News"/> + <menu_item_call label="Blogs [SECOND_LIFE]" name="Second Life Blogs"/> + <menu_item_call label="Signaler un bug" name="Report Bug"/> <menu_item_call label="À propos de [APP_NAME]" name="About Second Life"/> </menu> <menu_item_check label="Afficher le menu de débogage" name="Show Debug Menu"/> diff --git a/indra/newview/skins/default/xui/fr/menu_object.xml b/indra/newview/skins/default/xui/fr/menu_object.xml index d7b69e495a..27e801d959 100755 --- a/indra/newview/skins/default/xui/fr/menu_object.xml +++ b/indra/newview/skins/default/xui/fr/menu_object.xml @@ -21,6 +21,7 @@ <context_menu label="Gérer" name="Remove"> <menu_item_call label="Signaler une infraction" name="Report Abuse..."/> <menu_item_call label="Ignorer" name="Object Mute"/> + <menu_item_call label="Ne plus ignorer" name="Object Unmute"/> <menu_item_call label="Retour" name="Return..."/> </context_menu> <menu_item_call label="Prendre" name="Pie Object Take"/> diff --git a/indra/newview/skins/default/xui/fr/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/fr/menu_teleport_history_item.xml index fb4582dbce..ba8ed9b3f8 100755 --- a/indra/newview/skins/default/xui/fr/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/fr/menu_teleport_history_item.xml @@ -2,5 +2,5 @@ <context_menu name="Teleport History Item Context Menu"> <menu_item_call label="Téléporter" name="Teleport"/> <menu_item_call label="Plus d'informations" name="More Information"/> - <menu_item_call label="Copier dans le presse-papiers" name="CopyToClipboard"/> + <menu_item_call label="Copier la SLurl" name="CopyToClipboard"/> </context_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml index 5d0026ace0..6e36d19ba9 100755 --- a/indra/newview/skins/default/xui/fr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml @@ -36,6 +36,9 @@ <menu_item_check label="Chat près de moi..." name="Nearby Chat"/> <menu_item_check label="Parler" name="Speak"/> <menu_item_check label="Journal des conversations..." name="Conversation Log..."/> + <menu_item_call label="Facebook..." name="Facebook"/> + <menu_item_call label="Twitter..." name="Twitter"/> + <menu_item_call label="Flickr..." name="Flickr"/> <menu label="Effet de voix" name="VoiceMorphing"> <menu_item_check label="Aucun effet de voix" name="NoVoiceMorphing"/> <menu_item_check label="Aperçu..." name="Preview"/> @@ -72,11 +75,11 @@ <menu_item_check label="Menu Avancé" name="Show Advanced Menu"/> </menu> <menu label="Luminosité" name="Sun"> - <menu_item_call label="Aube" name="Sunrise"/> - <menu_item_call label="Milieu de journée" name="Noon"/> - <menu_item_call label="Coucher de soleil" name="Sunset"/> - <menu_item_call label="Minuit" name="Midnight"/> - <menu_item_call label="Utiliser les réglages de la région" name="Use Region Settings"/> + <menu_item_check label="Aube" name="Sunrise"/> + <menu_item_check label="Milieu de journée" name="Noon"/> + <menu_item_check label="Coucher de soleil" name="Sunset"/> + <menu_item_check label="Minuit" name="Midnight"/> + <menu_item_check label="Utiliser les réglages de la région" name="Use Region Settings"/> </menu> <menu label="Éditeur d'environnement" name="Environment Editor"> <menu_item_call label="Paramètres d'environnement..." name="Environment Settings"/> @@ -150,7 +153,8 @@ <menu_item_check label="Fixer sur la grille" name="Snap to Grid"/> <menu_item_call label="Fixer les coordonnées XY de l'objet sur la grille" name="Snap Object XY to Grid"/> <menu_item_call label="Utiliser la sélection pour la grille" name="Use Selection for Grid"/> - <menu_item_call label="Options de la grille" name="Grid Options"/> + <menu_item_call label="Options de la grille..." name="Grid Options"/> + <menu_item_call label="Définir les permissions par défaut..." name="Set default permissions"/> </menu> <menu label="Charger" name="Upload"> <menu_item_call label="Image ([COST] L$)..." name="Upload Image"/> @@ -158,15 +162,12 @@ <menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/> <menu_item_call label="Modèle..." name="Upload Model"/> <menu_item_call label="Lot ([COST] L$ par fichier)..." name="Bulk Upload"/> - <menu_item_call label="Définir les droits de chargement par défaut" name="perm prefs"/> </menu> <menu_item_call label="Annuler" name="Undo"/> <menu_item_call label="Refaire" name="Redo"/> </menu> <menu label="Aide" name="Help"> <menu_item_call label="Aide rapide..." name="How To"/> - <menu_item_call label="Aide de [SECOND_LIFE]" name="Second Life Help"/> - <menu_item_call label="Guide de l'utilisateur" name="User’s guide"/> <menu_item_call label="Base de connaissances" name="Knowledge Base"/> <menu_item_call label="Wiki" name="Wiki"/> <menu_item_call label="Forums de la communauté" name="Community Forums"/> @@ -188,6 +189,7 @@ <menu label="Outils de performance" name="Performance Tools"> <menu_item_call label="Mesure du lag" name="Lag Meter"/> <menu_item_check label="Barre de statistiques" name="Statistics Bar"/> + <menu_item_call label="Statistiques de chargement de scène" name="Scene Load Statistics"/> <menu_item_check label="Afficher le poids de dessin pour les avatars" name="Avatar Rendering Cost"/> </menu> <menu label="Surbrillance et visibilité" name="Highlighting and Visibility"> @@ -250,6 +252,7 @@ <menu_item_check label="Chronos" name="Fast Timers"/> <menu_item_check label="Mémoire" name="Memory"/> <menu_item_check label="Statistiques de la scène" name="Scene Statistics"/> + <menu_item_check label="Moniteur de chargement de scène" name="Scene Loading Monitor"/> <menu_item_call label="Console de débogage de la récupération des textures" name="Texture Fetch Debug Console"/> <menu_item_call label="Infos de région vers la console de débogage" name="Region Info to Debug Console"/> <menu_item_call label="Infos de groupe vers la console de débogage" name="Group Info to Debug Console"/> @@ -286,6 +289,7 @@ <menu_item_check label="Cadre lent périodique" name="Periodic Slow Frame"/> <menu_item_check label="Test cadre" name="Frame Test"/> <menu_item_call label="Profil du cadre" name="Frame Profile"/> + <menu_item_call label="Référence" name="Benchmark"/> </menu> <menu label="Métadonnées de rendu" name="Render Metadata"> <menu_item_check label="Cadres" name="Bounding Boxes"/> @@ -303,7 +307,9 @@ <menu_item_check label="Infos sur le niveau de détail" name="LOD Info"/> <menu_item_check label="File d'attente pour la construction" name="Build Queue"/> <menu_item_check label="Lumières" name="Lights"/> + <menu_item_check label="Particules" name="Particles"/> <menu_item_check label="Squelette de collision" name="Collision Skeleton"/> + <menu_item_check label="Articulations" name="Joints"/> <menu_item_check label="Rayons" name="Raycast"/> <menu_item_check label="Vecteurs de vent" name="Wind Vectors"/> <menu_item_check label="Complexité du rendu" name="rendercomplexity"/> @@ -336,6 +342,7 @@ <menu_item_check label="Rendu des lumières jointes" name="Render Attached Lights"/> <menu_item_check label="Rendu des particules jointes" name="Render Attached Particles"/> <menu_item_check label="Objets en surbrillance avec le pointeur" name="Hover Glow Objects"/> + <menu_item_call label="Vider le cache immédiatement" name="Cache Clear"/> </menu> <menu label="Réseau" name="Network"> <menu_item_check label="Pauser l'avatar" name="AgentPause"/> @@ -368,7 +375,6 @@ <menu_item_call label="Dump Focus Holder" name="Dump Focus Holder"/> <menu_item_call label="Imprimer les infos sur l'objet sélectionné" name="Print Selected Object Info"/> <menu_item_call label="Imprimer les infos sur l'avatar" name="Print Agent Info"/> - <menu_item_check label="Console de débogage de région" name="Region Debug Console"/> <menu_item_check label="Débogage SelectMgr" name="Debug SelectMgr"/> <menu_item_check label="Débogage clics" name="Debug Clicks"/> <menu_item_check label="Débogage des vues" name="Debug Views"/> diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index c295a6f5a7..2325c8e34d 100755 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -114,15 +114,15 @@ Pour plus d'informations, consultez le [[MARKETPLACE_IMPORTS_URL] journal d <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="OutboxImportFailed"> - Échec de transfert + Échec du transfert avec l'erreur « [ERROR_CODE] » -Aucun dossier n'a été envoyé vers la Place du marché en raison d'une erreur système ou réseau. Veuillez réessayer ultérieurement. +Aucun dossier n'a été envoyé vers la Place du marché en raison d'une erreur système ou réseau. Réessayez ultérieurement. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="OutboxInitFailed"> - Échec d'initialisation de la Place du marché + Échec de l'initialisation de la Place du marché avec l'erreur « [ERROR_CODE] » -L'initialisation de la Place du marché a échoué en raison d'une erreur système ou réseau. Veuillez réessayer ultérieurement. +L'initialisation de la Place du marché a échoué en raison d'une erreur système ou réseau. Réessayez ultérieurement. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="CompileQueueSaveText"> @@ -209,6 +209,22 @@ Ajouter ce pouvoir à « [ROLE_NAME] » ? Ajouter ce pouvoir à « [ROLE_NAME] » ? <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/> </notification> + <notification name="AssignBanAbilityWarning"> + Vous êtes sur le point d'ajouter le pouvoir « [ACTION_NAME] » au rôle « [ROLE_NAME] ». + + *AVERTISSEMENT* +Tout membre ayant un rôle doté de ce pouvoir disposera aussi des pouvoirs « [ACTION_NAME_2] » et « [ACTION_NAME_3] ». + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="RemoveBanAbilityWarning"> + Vous êtes sur le point de supprimer le pouvoir « [ACTION_NAME] » du rôle « [ROLE_NAME] ». + + *AVERTISSEMENT* +En supprimant ce pouvoir, vous ne supprimez PAS les pouvoirs « [ACTION_NAME_2] » et « [ACTION_NAME_3] ». + +Si vous ne voulez plus que ce rôle dispose de ces pouvoirs, désactivez-les immédiatement. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="EjectGroupMemberWarning"> Vous allez expulser [AVATAR_NAME] du groupe. <usetemplate ignoretext="Confirmer l'expulsion d'un membre du groupe" name="okcancelignore" notext="Annuler" yestext="Expulser"/> @@ -1576,6 +1592,14 @@ Quitter le groupe ? Impossible de quitter le groupe. Vous ne pouvez pas quitter le groupe car vous en êtes le dernier propriétaire. Vous devez d'abord affecter le rôle de propriétaire à un autre membre. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="GroupDepartError"> + Impossible de quitter le groupe : [reason]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="GroupDepart"> + Vous avez quitté le groupe [group_name]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="ConfirmKick"> Souhaitez-vous vraiment éjecter tous les résidents de la grille ? <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Éjecter tous les résidents"/> @@ -1729,6 +1753,10 @@ or ce nombre dépasse la limite autorisée fixée à [LIMIT]. Souhaitez-vous vraiment vous téléporter vers <nolink>[LOCATION]</nolink> ? <usetemplate ignoretext="Confirmer que je veux me téléporter à un repère" name="okcancelignore" notext="Annuler" yestext="Téléporter"/> </notification> + <notification name="TeleportViaSLAPP"> + Voulez-vous vraiment vous téléporter jusqu'à <nolink>[LOCATION]</nolink> ? + <usetemplate ignoretext="Confirmer que je veux me téléporter en utilisant SLAPP" name="okcancelignore" notext="Annuler" yestext="Téléporter"/> + </notification> <notification name="TeleportToPick"> Vous téléporter vers [PICK] ? <usetemplate ignoretext="Confirmer que je veux me téléporter à un endroit dans mes Favoris" name="okcancelignore" notext="Annuler" yestext="Téléporter"/> @@ -1939,6 +1967,9 @@ Cette action modifiera des milliers de régions et sera difficile à digérer po <notification name="ProblemAddingEstateManager"> Problèmes lors de l'ajout d'un nouveau gérant de domaine. Il est possible qu'au moins un des domaines ait une liste de gérants complète. </notification> + <notification name="ProblemAddingEstateBanManager"> + Impossible d'ajouter le propriétaire ou le gérant du domaine à la liste des résidents bannis. + </notification> <notification name="ProblemAddingEstateGeneric"> Problème lors de l'ajout à la liste de ce domaine. Il est possible qu'au moins un des domaines ait une liste complète. </notification> @@ -2453,6 +2484,12 @@ Veuillez sélectionner un terrain plus petit. <notification name="SystemMessage"> [MESSAGE] </notification> + <notification name="FlickrConnect"> + [MESSAGE] + </notification> + <notification name="TwitterConnect"> + [MESSAGE] + </notification> <notification name="PaymentReceived"> [MESSAGE] </notification> @@ -3029,7 +3066,7 @@ Voir le fichier journal pour plus de détails. avec les résidents suivants : -[RESIDENTS] ? +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> </notification> <notification name="ShareFolderConfirmation"> @@ -3041,7 +3078,7 @@ Voulez-vous vraiment partager les articles suivants : avec les résidents suivants : -[RESIDENTS] ? +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Ok"/> </notification> <notification name="ItemsShared"> @@ -3496,10 +3533,6 @@ Veuillez réessayer dans une minute. <notification name="EjectComingSoon"> Votre présence ici n'est plus autorisée et vous disposez de [EJECT_TIME] secondes pour partir. </notification> - <notification name="NoEnterServerFull"> - Vous ne pouvez pas pénétrer dans cette région car -le serveur est plein. - </notification> <notification name="SaveBackToInvDisabled"> Le réenregistrement dans l'inventaire a été désactivé. </notification> @@ -3689,6 +3722,9 @@ le serveur est plein. <notification name="LinkFailedTooMuchPhysics"> Cet objet utilise trop de ressources physiques - sa dynamique a été désactivée. </notification> + <notification name="EstateManagerFailedllTeleportHome"> + L'objet « [OBJECT_NAME] » à [SLURL] ne peut pas téléporter les gérants de domaines chez eux. + </notification> <notification name="TeleportedHomeByObjectOnParcel"> Vous avez été téléporté chez vous par l'objet [OBJECT_NAME] sur la parcelle [PARCEL_NAME]. </notification> @@ -3879,13 +3915,18 @@ le serveur est plein. Pas suffisamment de parcelles louées dans la sélection pour effectuer la fusion. </notification> <notification name="CantDivideLandMultipleParcelsSelected"> - Division du terrain impossible.\nPlusieurs parcelles sont sélectionnées.\nVeuillez sélectionner un terrain plus petit. + Division du terrain impossible. +Plusieurs parcelles sont sélectionnées. +Veuillez sélectionner un terrain plus petit. </notification> <notification name="CantDivideLandCantFindParcel"> - Division du terrain impossible.\nParcelle introuvable.\nSignalez-le en allant à Aide -> Signaler un bug... + Division du terrain impossible. +Parcelle introuvable. +Veuillez utiliser Aide > Signaler un bug pour signaler le problème... </notification> <notification name="CantDivideLandWholeParcelSelected"> - Division du terrain impossible. Toute la parcelle est sélectionnée.\nVeuillez sélectionner un terrain plus petit. + Division du terrain impossible. La parcelle entière est sélectionnée. +Veuillez sélectionner un terrain plus petit. </notification> <notification name="LandHasBeenDivided"> Le terrain a été divisé. @@ -4025,4 +4066,12 @@ le serveur est plein. Impossible de déplacer les fichiers. Chemin précédent rétabli. <usetemplate ignoretext="Impossible de déplacer les fichiers. Chemin précédent rétabli." name="okignore" yestext="OK"/> </notification> + <notification name="DefaultObjectPermissions"> + Une erreur est survenue lors de l'enregistrement des droits par défaut, suite au problème suivant : [REASON]. Réessayez de définir les droits par défaut ultérieurement. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="ChatHistoryIsBusyAlert"> + Le fichier d'historique des chats est occupé à traiter l'opération précédente. Réessayez dans quelques minutes ou choisissez une autre personne pour le chat. + <usetemplate name="okbutton" yestext="OK"/> + </notification> </notifications> diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_account.xml b/indra/newview/skins/default/xui/fr/panel_facebook_account.xml new file mode 100644 index 0000000000..6406ae4ae7 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_facebook_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_account"> + <string name="facebook_connected" value="Vous êtes connecté(e) à Facebook en tant que :"/> + <string name="facebook_disconnected" value="Pas connecté(e) à Facebook"/> + <text name="account_caption_label"> + Pas connecté(e) à Facebook. + </text> + <panel name="panel_buttons"> + <button label="Connexion..." name="connect_btn"/> + <button label="Déconnexion" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Apprenez comment publier sur Facebook] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_friends.xml b/indra/newview/skins/default/xui/fr/panel_facebook_friends.xml new file mode 100644 index 0000000000..3ac0ce229c --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_facebook_friends.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_friends"> + <string name="facebook_friends_empty" value="Vous n'avez actuellement aucun ami Facebook qui est également résident de Second Life. Invitez vos amis Facebook à rejoindre Second Life !"/> + <string name="facebook_friends_no_connected" value="Vous n'êtes pas connecté(e) à Facebook. Allez à l'onglet Compte pour vous connecter et activer cette fonctionnalité."/> + <accordion name="friends_accordion"> + <accordion_tab name="tab_second_life_friends" title="Amis SL"/> + <accordion_tab name="tab_suggested_friends" title="Ajouter ces personnes en tant qu'amis SL"/> + </accordion> + <text name="facebook_friends_status"> + Pas connecté(e) à Facebook. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_photo.xml b/indra/newview/skins/default/xui/fr/panel_facebook_photo.xml new file mode 100644 index 0000000000..c5b09c4bcc --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_facebook_photo.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Résolution d’image"> + <combo_box.item label="Fenêtre actuelle" name="CurrentWindow"/> + <combo_box.item label="640 x 480" name="640x480"/> + <combo_box.item label="800 x 600" name="800x600"/> + <combo_box.item label="1 024 x 768" name="1024x768"/> + <combo_box.item label="1 200 x 630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtres d'image"> + <combo_box.item label="Aucun filtre" name="NoFilter"/> + </combo_box> + <button label="Actualiser" name="new_snapshot_btn" tool_tip="Cliquer pour actualiser"/> + <button label="Aperçu" name="big_preview_btn" tool_tip="Cliquer pour activer/désactiver l'aperçu"/> + <text name="caption_label"> + Commentaire (facultatif) : + </text> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Publier" name="post_photo_btn"/> + <button label="Annuler" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_place.xml b/indra/newview/skins/default/xui/fr/panel_facebook_place.xml new file mode 100644 index 0000000000..0eaea66ad4 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_facebook_place.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_place"> + <layout_stack name="stack_place"> + <layout_panel name="place_detail_panel"> + <text name="place_caption_label"> + Dites quelque chose au sujet du lieu où vous vous trouvez : + </text> + </layout_panel> + <layout_panel name="place_map_panel"> + <check_box initial_value="false" label="" name="add_place_view_cb"/> + </layout_panel> + <layout_panel name="place_button_panel"> + <button label="Publier" name="post_place_btn"/> + <button label="Annuler" name="cancel_place_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_status.xml b/indra/newview/skins/default/xui/fr/panel_facebook_status.xml new file mode 100644 index 0000000000..260378978b --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_facebook_status.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_status"> + <layout_stack name="stack_status"> + <layout_panel name="status_detail_panel"> + <text name="status_caption_label"> + À quoi pensez-vous ? + </text> + </layout_panel> + <layout_panel name="status_button_panel"> + <button label="Publier" name="post_status_btn"/> + <button label="Annuler" name="cancel_status_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_flickr_account.xml b/indra/newview/skins/default/xui/fr/panel_flickr_account.xml new file mode 100644 index 0000000000..7082223b14 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_flickr_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_account"> + <string name="flickr_connected" value="Vous êtes connecté(e) à Flickr en tant que :"/> + <string name="flickr_disconnected" value="Pas connecté(e) à Flickr"/> + <text name="account_caption_label"> + Pas connecté(e) à Flickr. + </text> + <panel name="panel_buttons"> + <button label="Connexion..." name="connect_btn"/> + <button label="Déconnexion" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Apprenez comment publier sur Flickr] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_flickr_photo.xml b/indra/newview/skins/default/xui/fr/panel_flickr_photo.xml new file mode 100644 index 0000000000..63738a773a --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_flickr_photo.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Résolution d’image"> + <combo_box.item label="Fenêtre actuelle" name="CurrentWindow"/> + <combo_box.item label="640 x 480" name="640x480"/> + <combo_box.item label="800 x 600" name="800x600"/> + <combo_box.item label="1 024 x 768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtres d'image"> + <combo_box.item label="Aucun filtre" name="NoFilter"/> + </combo_box> + <button label="Actualiser" name="new_snapshot_btn" tool_tip="Cliquer pour actualiser"/> + <button label="Aperçu" name="big_preview_btn" tool_tip="Cliquer pour activer/désactiver l'aperçu"/> + <text name="title_label"> + Titre : + </text> + <text name="description_label"> + Description : + </text> + <check_box initial_value="true" label="Inclure l'emplacement SL à la fin de la description" name="add_location_cb"/> + <text name="tags_label"> + Balises : + </text> + <text name="tags_help_label"> + Séparer les balises par des espaces +Utiliser "" pour les balises contenant plusieurs mots + </text> + <combo_box name="rating_combobox" tool_tip="Catégorie de contenu Flickr"> + <combo_box.item label="Catégorie de contenu Flickr sûr" name="SafeRating"/> + <combo_box.item label="Catégorie de contenu Flickr modéré" name="ModerateRating"/> + <combo_box.item label="Catégorie de contenu Flickr réservé aux adultes" name="RestrictedRating"/> + </combo_box> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Charger" name="post_photo_btn"/> + <button label="Annuler" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/fr/panel_group_bulk_ban.xml new file mode 100644 index 0000000000..ee5b949995 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_group_bulk_ban.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Bannir des résidents" name="bulk_ban_panel"> + <panel.string name="loading"> + (en cours de chargement...) + </panel.string> + <panel.string name="ban_selection_too_large"> + Bannissements de groupe non envoyés : trop de résidents sélectionnés. Les bannissements de groupe sont limités à 100 par demande. + </panel.string> + <panel.string name="ban_not_permitted"> + Bannissement de groupe non envoyé : vous ne disposez pas du pouvoir Gérer la liste des résidents bannis. + </panel.string> + <panel.string name="ban_limit_fail"> + Bannissement de groupe non envoyé : votre groupe a atteint la limite des bannissements autorisés. + </panel.string> + <panel.string name="partial_ban"> + Certains bannissements de groupe n'ont pas été envoyés : +[REASONS] + </panel.string> + <panel.string name="ban_failed"> + Les bannissements de groupe n'ont pas été envoyés : +[REASONS] + </panel.string> + <panel.string name="residents_already_banned"> + - Le ou les résidents suivants sont déjà bannis : [RESIDENTS]. + </panel.string> + <panel.string name="ban_limit_reached"> + - Limite de bannissements atteinte, les agents suivants ne sont pas bannis : [RESIDENTS]. + </panel.string> + <panel.string name="cant_ban_yourself"> + - Vous ne pouvez pas vous bannir vous-même d'un groupe. + </panel.string> + <text name="help_text"> + Vous pouvez sélectionner plusieurs résidents à bannir de votre groupe. Cliquez sur Choisir un résident pour commencer. + </text> + <button label="Choisir un résident" name="add_button"/> + <name_list name="banned_agent_list" tool_tip="Pour sélectionner plusieurs résidents, maintenez la touche Ctrl enfoncée et cliquez sur leurs noms"/> + <button label="Supprimer la sélection de la liste" name="remove_button" tool_tip="Supprime les résidents sélectionnés ci-dessus de la liste des résidents bannis"/> + <button label="Bannir des résidents" name="ban_button"/> + <button label="Annuler" name="cancel_button"/> + <string name="GroupBulkBan"> + Bannissement de groupe + </string> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml index 047cd692e8..7c3b852de1 100755 --- a/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml @@ -20,7 +20,7 @@ <layout_panel name="group_accordions"> <accordion name="groups_accordion"> <accordion_tab name="group_general_tab" title="Général"/> - <accordion_tab name="group_roles_tab" title="Rôles"/> + <accordion_tab name="group_roles_tab" title="Rôles et membres"/> <accordion_tab name="group_notices_tab" title="Notices"/> <accordion_tab name="group_land_tab" title="Terrain/Actifs"/> </accordion> diff --git a/indra/newview/skins/default/xui/fr/panel_group_invite.xml b/indra/newview/skins/default/xui/fr/panel_group_invite.xml index d792439220..5851856a03 100755 --- a/indra/newview/skins/default/xui/fr/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_invite.xml @@ -22,7 +22,7 @@ Assignez-leur un rôle : </text> <combo_box name="role_name" tool_tip="Choisissez dans la liste de rôles que vous êtes autorisé(e) à attribuer aux membres"/> - <button label="Envoyer les invitations" name="ok_button"/> + <button label="Envoyer des invitations" name="invite_button"/> <button label="Annuler" name="cancel_button"/> <string name="GroupInvitation"> Invitations au groupe diff --git a/indra/newview/skins/default/xui/fr/panel_group_roles.xml b/indra/newview/skins/default/xui/fr/panel_group_roles.xml index 0bd2e0bdab..3e66190c8d 100755 --- a/indra/newview/skins/default/xui/fr/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_roles.xml @@ -20,16 +20,18 @@ Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la to <name_list.columns label="Membre" name="name"/> <name_list.columns label="Donation" name="donated"/> <name_list.columns label="Statut" name="online"/> + <name_list.columns label="Titre" name="title"/> </name_list> <button label="Inviter" name="member_invite"/> <button label="Expulser" name="member_eject"/> + <button label="Bannir un ou plusieurs membres" name="member_ban"/> </panel> <panel label="RÔLES" name="roles_sub_tab"> <panel.string name="help_text"> Chaque rôle possède un titre et des -pouvoirs. Les membres peuvent avoir -un ou plusieurs rôles. Un groupe peut avoir jusqu'à 10 rôles, -notamment les rôles Tous et Propriétaire. + pouvoirs. Les membres peuvent avoir + un ou plusieurs rôles. Un groupe peut avoir jusqu’à 10 rôles, + notamment les rôles Tous et Propriétaire. </panel.string> <panel.string name="cant_delete_role"> Les rôles Tous et Propriétaires sont spéciaux et ne peuvent pas être supprimés. @@ -54,13 +56,29 @@ notamment les rôles Tous et Propriétaire. </panel> <panel height="148" label="POUVOIRS" name="actions_sub_tab" tool_tip="Vous pouvez afficher une description du pouvoir et voir quels membres et rôles peuvent s'en servir."> <panel.string name="help_text"> - Les pouvoirs déterminent les facultés de chaque membre dans le groupe. + Les pouvoirs déterminent les facultés de chaque membre + dans le groupe. Il existe une vaste gamme de pouvoirs. </panel.string> <filter_editor label="Filtrer les pouvoirs" name="filter_input"/> <scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Sélectionnez un pouvoir pour en savoir plus"> <scroll_list.columns label="" name="action"/> </scroll_list> </panel> + <panel label="RÉSIDENTS BANNIS" name="banlist_sub_tab" tool_tip="Affiche les résidents bannis de ce groupe."> + <panel.string name="help_text"> + Les résidents figurant sur la liste des résidents bannis ne peuvent pas rejoindre le groupe. + </panel.string> + <panel.string name="ban_count_template"> + Nombre de résidents bannis : [COUNT]/[LIMIT] + </panel.string> + <name_list name="ban_list"> + <name_list.columns label="Résident(e)" name="name"/> + <name_list.columns label="Date de bannissement" name="ban_date"/> + </name_list> + <button label="Bannir un ou plusieurs résidents" name="ban_create" tool_tip="Bannir des résidents de votre groupe"/> + <button label="Annuler le bannissement d'un ou plusieurs membres" name="ban_delete" tool_tip="Annuler le bannissement de certains résidents de votre groupe"/> + <button name="ban_refresh" tool_tip="Actualiser la liste des résidents bannis"/> + </panel> </tab_container> <panel name="members_footer"> <text name="static"> diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml index c8a1fe8751..b39920fe13 100755 --- a/indra/newview/skins/default/xui/fr/panel_login.xml +++ b/indra/newview/skins/default/xui/fr/panel_login.xml @@ -1,46 +1,27 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php?lang=fr </panel.string> - <layout_stack name="login_widgets"> - <layout_panel name="login"> - <text name="log_in_text"> - CONNEXION - </text> - <text name="username_text"> - Nom d'utilisateur : - </text> - <combo_box name="username_combo" tool_tip="Nom d'utilisateur que vous avez choisi lors de votre inscription (par exemple, bobsmith12 ou Steller Sunshine)."/> - <text name="password_text"> - Mot de passe : - </text> - </layout_panel> - <layout_panel name="start_location_panel"> - <text name="start_location_text"> - Lieu de départ : - </text> - <combo_box name="start_location_combo"> - <combo_box.item label="Dernier emplacement" name="MyLastLocation"/> - <combo_box.item label="Domicile" name="MyHome"/> - <combo_box.item label="<Nom de la région>" name="Typeregionname"/> - </combo_box> - </layout_panel> - <layout_panel name="links_login_panel"> - <text name="login_help"> - Besoin d'aide ? - </text> + <layout_stack name="ui_stack"> + <layout_panel name="ui_container"> + <combo_box label="Nom d'utilisateur" name="username_combo" tool_tip="Nom d'utilisateur que vous avez choisi lors de votre inscription (par exemple, bobsmith12 ou Steller Sunshine)."/> + <line_editor label="Mot de passe" name="password_edit"/> + <check_box label="Mémoriser mes informations" name="remember_check"/> <text name="forgot_password_text"> - Nom d'utilisateur ou mot de passe oublié ? + Mot de passe oublié </text> <button label="Connexion" name="connect_btn"/> - <check_box label="Enregistrer" name="remember_check"/> - </layout_panel> - <layout_panel name="links"> - <text name="create_account_text"> - CRÉER VOTRE COMPTE + <text name="At_My_Last_Location_Label" font="SansSerifSmall" width="140"> + au dernier emplacement </text> - <button label="Commencer" name="create_new_account_btn"/> + <combo_box label="Mes lieux préférés" name="start_location_combo"> + <combo_box.item label="Domicile" name="MyHome"/> + </combo_box> + <button label="Connexion" name="connect_favorite_btn"/> + <line_editor label="Tapez un emplacement" name="location_edit"/> + <button label="Connexion" name="connect_location_btn"/> + <combo_box label="Sélectionner la grille" name="server_combo"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_login_first.xml b/indra/newview/skins/default/xui/fr/panel_login_first.xml new file mode 100644 index 0000000000..9534ac7b83 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_login_first.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_login"> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php?lang=fr + </panel.string> + <layout_stack name="logo_stack"> + <layout_panel name="parent_panel2"> + <layout_stack name="widget_stack"> + <layout_panel name="widget_container"> + <combo_box label="Nom d'utilisateur" name="username_combo" tool_tip="Nom d'utilisateur que vous avez choisi lors de votre inscription (par exemple, bobsmith12 ou Steller Sunshine)."/> + <line_editor label="Mot de passe" name="password_edit"/> + <button label="Connexion" name="connect_btn"/> + <check_box label="Mémoriser mes informations" name="remember_check" font="SansSerifSmall"/> + <text name="forgot_password_text"> + Mot de passe oublié + </text> + </layout_panel> + </layout_stack> + </layout_panel> + <layout_panel name="parent_panel3"> + <layout_stack name="images_stack"> + <layout_panel name="images_container"> + <text name="image_caption_left"> + Votre première étape est Learning Island. Trouvez le portail de sortie. + </text> + <text name="image_caption_right"> + Puis explorez Social Island et faites la connaissance d'autres résidents. + </text> + </layout_panel> + </layout_stack> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml index 3f3d0f51f4..67bcfb0879 100755 --- a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml @@ -28,4 +28,5 @@ <check_box label="Liste de sélection de grille affichée à la connexion" name="show_grid_selection_check"/> <check_box label="Menu Avancé affiché" name="show_advanced_menu_check"/> <check_box label="Menu Développeurs affiché" name="show_develop_menu_check"/> + <button label="Permissions de création par défaut" name="default_creation_permissions"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml index 533c392d6b..11b1bd9b87 100755 --- a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml @@ -30,14 +30,10 @@ <combo_box.item label="Général et Modéré" name="Desired_Mature"/> <combo_box.item label="Général" name="Desired_PG"/> </combo_box> - <text name="start_location_textbox"> - Lieu de départ : + <check_box label="Afficher les lieux préférés sur l'écran de connexion" name="favorites_on_login_check"/> + <text name="favorites_check_extra_text"> + (Les autres personnes utilisant cet ordinateur les verront aussi.) </text> - <combo_box name="start_location_combo"> - <combo_box.item label="Dernier emplacement" name="MyLastLocation" tool_tip="Par défaut, choisir mon dernier emplacement comme lieu de départ."/> - <combo_box.item label="Domicile" name="MyHome" tool_tip="Par défaut, choisir mon domicile comme lieu de départ."/> - </combo_box> - <check_box initial_value="true" label="Afficher à la connexion" name="show_location_checkbox"/> <text name="name_tags_textbox"> Affichage des noms : </text> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml index a89676d119..0a78a1bb93 100755 --- a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml @@ -3,11 +3,11 @@ <panel.string name="log_in_to_change"> se connecter pour changer </panel.string> - <button label="Vider l'historique" name="clear_cache" tool_tip="Effacer le cache de l'image de connexion, du dernier lieu, de l'historique des téléportations, Web et de texture."/> + <button label="Vider l'historique" name="clear_cache" tool_tip="Effacer le cache de l'image de connexion, du dernier lieu, de l'historique des téléportations, Web et de texture."/> <text name="cache_size_label_l"> (endroits, images, web, historique des recherches) </text> - <check_box label="Afficher mon profil d'infos dans les résultats de recherche" name="online_searchresults"/> + <check_box label="Afficher mon profil dans les résultats de recherche" name="online_searchresults"/> <check_box label="Seuls mes amis et groupes voient quand je suis en ligne" name="online_visibility"/> <check_box label="Seuls mes amis et groupes peuvent m'appeler ou m'envoyer un IM" name="voice_call_friends_only_check"/> <check_box label="Fermer le micro à la fin d'un appel" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/fr/panel_region_debug.xml b/indra/newview/skins/default/xui/fr/panel_region_debug.xml index 98ae250215..d21695e9aa 100755 --- a/indra/newview/skins/default/xui/fr/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/fr/panel_region_debug.xml @@ -7,11 +7,8 @@ (inconnue) </text> <check_box label="Désactiver les scripts" name="disable_scripts_check" tool_tip="Désactiver tous les scripts dans cette région"/> - <button label="?" name="disable_scripts_help"/> <check_box label="Désactiver les collisions" name="disable_collisions_check" tool_tip="Désactiver les collisions entre non-avatars dans cette région"/> - <button label="?" name="disable_collisions_help"/> <check_box label="Désactiver la physique" name="disable_physics_check" tool_tip="Désactiver tous les effets liés à la physique dans cette région"/> - <button label="?" name="disable_physics_help"/> <button bottom_delta="-38" label="Appliquer" name="apply_btn"/> <text bottom_delta="-42" name="objret_text_lbl" width="260"> Renvoi de l'objet @@ -31,10 +28,8 @@ <check_box label="Dans toutes les régions de ce domaine" name="return_estate_wide" tool_tip="Renvoyer les objets dans toutes les régions qui constituent ce domaine"/> <button label="Renvoyer" name="return_btn"/> <button label="Collisions les plus consommatrices" name="top_colliders_btn" tool_tip="Liste des objets avec le plus de collisions potentielles" width="320"/> - <button label="?" left="337" name="top_colliders_help"/> - <button label="Scripts les plus consommateurs" name="top_scripts_btn" tool_tip="Liste des objets passant le plus de temps à exécuter des scripts" width="320"/> - <button label="?" left="337" name="top_scripts_help"/> <button label="Redémarrer la région" name="restart_btn" tool_tip="Redémarrer la région au bout de 2 minutes" width="160"/> - <button label="?" left="177" name="restart_help"/> + <button label="Scripts les plus consommateurs" name="top_scripts_btn" tool_tip="Liste des objets passant le plus de temps à exécuter des scripts" width="320"/> <button label="Annuler le redémarrage" name="cancel_restart_btn" tool_tip="Annuler le redémarrage de la région." width="160"/> + <button label="Console de débogage de région" name="region_debug_console_btn" tool_tip="Ouvrir la console de débogage de région"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_region_general.xml b/indra/newview/skins/default/xui/fr/panel_region_general.xml index 234d316069..e9dcd6ab5a 100755 --- a/indra/newview/skins/default/xui/fr/panel_region_general.xml +++ b/indra/newview/skins/default/xui/fr/panel_region_general.xml @@ -20,12 +20,12 @@ </text> <check_box label="Interdire le terraformage" name="block_terraform_check"/> <check_box label="Interdire le vol" name="block_fly_check"/> + <check_box label="Bloquer le survol des parcelles" name="block_fly_over_check" tool_tip="Étendre les vérifications d'accès vers le haut pour empêcher le survol d'une parcelle"/> <check_box label="Autoriser les dégâts" name="allow_damage_check"/> <check_box label="Interdire les bousculades" name="restrict_pushobject"/> <check_box label="Autoriser la revente de terrain" name="allow_land_resell_check"/> <check_box label="Autoriser la fusion/division" name="allow_parcel_changes_check"/> <check_box label="Ne pas afficher dans la recherche" name="block_parcel_search_check" tool_tip="Afficher cette région et ses parcelles dans les résultats de recherche"/> - <check_box label="Autoriser les objets de maillage" name="mesh_rez_enabled_check" tool_tip="Laisser les gens rezzer des objets de maillage dans cette région."/> <spinner label="Nombre maximum d'avatars" label_width="160" name="agent_limit_spin" width="240"/> <spinner label="Bonus objet" label_width="160" name="object_bonus_spin" width="240"/> <text label="Maturité" name="access_text"> diff --git a/indra/newview/skins/default/xui/fr/panel_script_ed.xml b/indra/newview/skins/default/xui/fr/panel_script_ed.xml index 38e5cbe1f1..0a33463cbb 100755 --- a/indra/newview/skins/default/xui/fr/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/fr/panel_script_ed.xml @@ -24,6 +24,7 @@ <menu_item_call label="Annuler tous les changements" name="Revert All Changes"/> <menu_item_call label="Charger depuis un fichier..." name="LoadFromFile"/> <menu_item_call label="Enregistrer sous..." name="SaveToFile"/> + <menu_item_call label="Couleurs..." name="Colors"/> </menu> <menu label="Modifier" name="Edit"> <menu_item_call label="Annuler" name="Undo"/> @@ -41,9 +42,9 @@ <menu_item_call label="Aide par mots-clés..." name="Keyword Help..."/> </menu> </menu_bar> - <text_editor name="Script Editor"> + <script_editor name="Script Editor"> Chargement... - </text_editor> + </script_editor> <combo_box label="Insérer..." name="Insert..."/> <button label="Enregistrer" label_selected="Enregistrer" name="Save_btn"/> <button label="Modifier..." name="Edit_btn"/> diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml index befe1b3bc6..bb858d5d23 100755 --- a/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml @@ -4,4 +4,13 @@ <button label="Envoyer par e-mail" name="save_to_email_btn"/> <button label="Enreg. dans l'inventaire ([AMOUNT] L$)" name="save_to_inventory_btn"/> <button label="Enreg. sur l'ordinateur" name="save_to_computer_btn"/> + <text name="send_to_facebook_textbox"> + Envoyer à : [secondlife:/// Facebook] + </text> + <text name="send_to_twitter_textbox"> + [secondlife:/// Twitter] + </text> + <text name="send_to_flickr_textbox"> + [secondlife:/// Flickr] + </text> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/fr/panel_teleport_history_item.xml index 21eb7ff62c..b3b528d448 100755 --- a/indra/newview/skins/default/xui/fr/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/fr/panel_teleport_history_item.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="teleport_history_item"> <text name="region" value="..."/> + <text name="timestamp" value="..."/> <button name="profile_btn" tool_tip="Afficher les infos de l'objet"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_twitter_account.xml b/indra/newview/skins/default/xui/fr/panel_twitter_account.xml new file mode 100644 index 0000000000..ed2208c69f --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_twitter_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_account"> + <string name="twitter_connected" value="Vous êtes connecté(e) à Twitter en tant que :"/> + <string name="twitter_disconnected" value="Pas connecté(e) à Twitter"/> + <text name="account_caption_label"> + Pas connecté(e) à Twitter. + </text> + <panel name="panel_buttons"> + <button label="Connexion..." name="connect_btn"/> + <button label="Déconnexion" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Apprenez comment publier sur Twitter] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_twitter_photo.xml b/indra/newview/skins/default/xui/fr/panel_twitter_photo.xml new file mode 100644 index 0000000000..2d3888f4c2 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_twitter_photo.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="text_panel"> + <text name="status_label"> + Que se passe-t-il ? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="Inclure l'emplacement SL" name="add_location_cb"/> + <check_box initial_value="true" label="Inclure une photo" name="add_photo_cb"/> + </layout_panel> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Résolution d’image"> + <combo_box.item label="Fenêtre actuelle" name="CurrentWindow"/> + <combo_box.item label="640 x 480" name="640x480"/> + <combo_box.item label="800 x 600" name="800x600"/> + <combo_box.item label="1 024 x 768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtres d'image"> + <combo_box.item label="Aucun filtre" name="NoFilter"/> + </combo_box> + <button label="Actualiser" name="new_snapshot_btn" tool_tip="Cliquer pour actualiser"/> + <button label="Aperçu" name="big_preview_btn" tool_tip="Cliquer pour activer/désactiver l'aperçu"/> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Envoyer tweet" name="post_photo_btn"/> + <button label="Annuler" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/fr/role_actions.xml b/indra/newview/skins/default/xui/fr/role_actions.xml index 2a68ca0ddb..25920da4c3 100755 --- a/indra/newview/skins/default/xui/fr/role_actions.xml +++ b/indra/newview/skins/default/xui/fr/role_actions.xml @@ -3,6 +3,7 @@ <action_set description="Ces pouvoirs permettent d'ajouter et de supprimer des membres du groupe et permettent aux nouveaux membres de rejoindre le groupe sans recevoir d'invitation." name="Membership"> <action description="Inviter des membres dans ce groupe" longdescription="Invitez des personnes à rejoindre ce groupe en utilisant le bouton Inviter dans l'onglet Membres de la section Rôles." name="member invite" value="1"/> <action description="Expulser des membres du groupe" longdescription="Expulsez des personnes de ce groupe en utilisant le bouton Expulser dans l'onglet Membres de la section Rôles. Un propriétaire peut expulser tout le monde à l'exception des autres propriétaires. Si vous n'êtes pas propriétaire, vous pouvez expulser un membre d'un groupe uniquement si il n'a que le rôle Tous et AUCUN autre rôle. Pour supprimer des membres des rôles, vous devez disposer du pouvoir correspondant." name="member eject" value="2"/> + <action description="Gérer la liste des résidents bannis" longdescription="Permet au membre du groupe de bannir / d'annuler le bannissement des résidents de ce groupe." name="allow ban" value="51"/> <action description="Activer Inscription libre et modifier les frais d'inscription" longdescription="Activez Inscription libre pour permettre aux nouveaux membres de s'inscrire sans invitation, et changez les frais d'inscription dans la section Général." name="member options" value="3"/> </action_set> <action_set description="Ces pouvoirs permettent d'ajouter, de supprimer et de modifier les rôles dans le groupe et d'y assigner des membres et des pouvoirs." name="Roles"> diff --git a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml index ec7dd8c095..372d61263f 100755 --- a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml @@ -31,10 +31,10 @@ <button label="Partager" name="share_btn" tool_tip="Partager un article de l'inventaire"/> </layout_panel> <layout_panel name="shop_btn_lp"> - <button label="Acheter" name="shop_btn" tool_tip="Accéder à la place du marché sur le Web"/> + <button label="Faire des achats" name="shop_btn" tool_tip="Accéder à la Place du marché sur le Web"/> <button label="Porter" name="wear_btn" tool_tip="Porter la tenue sélectionnée"/> - <button label="Lire" name="play_btn"/> - <button label="Téléportation" name="teleport_btn" tool_tip="Me téléporter jusqu'à la zone sélectionnée"/> + <button label="Jouer" name="play_btn"/> + <button label="Téléporter" name="teleport_btn" tool_tip="Me téléporter jusqu'à la zone sélectionnée"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index b8721420cb..b3ce171633 100755 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -37,6 +37,45 @@ <string name="StartupRequireDriverUpdate"> Échec d'initialisation des graphiques. Veuillez mettre votre pilote graphique à jour. </string> + <string name="AboutHeader"> + [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL]) +[[VIEWER_RELEASE_NOTES_URL] [Notes de version]] + </string> + <string name="AboutCompiler"> + Compilé avec [COMPILER] version [COMPILER_VERSION] + </string> + <string name="AboutPosition"> + Vous êtes à [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] dans [REGION], se trouvant à <nolink>[HOSTNAME]</nolink> ([HOSTIP]) +SLURL : <nolink>[SLURL]</nolink> +(coordonnées globales [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1]) +[SERVER_VERSION] +[SERVER_RELEASE_NOTES_URL] + </string> + <string name="AboutSystem"> + CPU : [CPU] +Mémoire : [MEMORY_MB] Mo +Version OS : [OS_VERSION] +Distributeur de cartes graphiques : [GRAPHICS_CARD_VENDOR] +Carte graphique : [GRAPHICS_CARD] + </string> + <string name="AboutDriver"> + Version Windows Graphics Driver : [GRAPHICS_DRIVER_VERSION] + </string> + <string name="AboutLibs"> + Version OpenGL : [OPENGL_VERSION] + +Version libcurl : [LIBCURL_VERSION] +Version J2C Decoder : [J2C_VERSION] +Version Audio Driver : [AUDIO_DRIVER_VERSION] +Version Qt Webkit : [QT_WEBKIT_VERSION] +Version serveur vocal : [VOICE_VERSION] + </string> + <string name="AboutTraffic"> + Paquets perdus : [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) + </string> + <string name="ErrorFetchingServerReleaseNotesURL"> + Erreur lors de la récupération de l'URL des notes de version du serveur. + </string> <string name="ProgressRestoring"> Restauration... </string> @@ -296,6 +335,75 @@ Veuillez réessayer de vous connecter dans une minute. <string name="TestingDisconnect"> Test de déconnexion du client </string> + <string name="SocialFlickrConnecting"> + Connexion à Flickr... + </string> + <string name="SocialFlickrPosting"> + Publication… + </string> + <string name="SocialFlickrDisconnecting"> + Déconnexion de Flickr... + </string> + <string name="SocialFlickrErrorConnecting"> + Un problème est survenu lors de la connexion à Flickr. + </string> + <string name="SocialFlickrErrorPosting"> + Un problème est survenu lors de la publication sur Flickr. + </string> + <string name="SocialFlickrErrorDisconnecting"> + Un problème est survenu lors de la déconnexion de Flickr. + </string> + <string name="SocialTwitterConnecting"> + Connexion à Twitter... + </string> + <string name="SocialTwitterPosting"> + Publication… + </string> + <string name="SocialTwitterDisconnecting"> + Déconnexion de Twitter... + </string> + <string name="SocialTwitterErrorConnecting"> + Un problème est survenu lors de la connexion à Twitter. + </string> + <string name="SocialTwitterErrorPosting"> + Un problème est survenu lors de la publication sur Twitter. + </string> + <string name="SocialTwitterErrorDisconnecting"> + Un problème est survenu lors de la déconnexion de Twitter. + </string> + <string name="BlackAndWhite"> + Noir et blanc + </string> + <string name="Colors1970"> + Couleurs des années 1970 + </string> + <string name="Intense"> + Intense + </string> + <string name="Newspaper"> + Presse + </string> + <string name="Sepia"> + Sépia + </string> + <string name="Spotlight"> + Projecteur + </string> + <string name="Video"> + Vidéo + </string> + <string name="Autocontrast"> + Contraste automatique + </string> + <string name="LensFlare"> + Halo + </string> + <string name="Miniature"> + Miniature + </string> + <string name="Toycamera"> + Toy Camera + </string> <string name="TooltipPerson"> Personne </string> @@ -847,6 +955,12 @@ Veuillez réessayer de vous connecter dans une minute. <string name="use_texture"> Utiliser la texture </string> + <string name="manip_hint1"> + Faites glisser le curseur sur l'axe + </string> + <string name="manip_hint2"> + pour le fixer sur la grille + </string> <string name="texture_loading"> Chargement... </string> @@ -937,15 +1051,15 @@ Veuillez réessayer de vous connecter dans une minute. <string name="ControlYourCamera"> Contrôler votre caméra </string> + <string name="TeleportYourAgent"> + Vous téléporter + </string> <string name="NotConnected"> Pas connecté(e) </string> <string name="AgentNameSubst"> (Vous) </string> - <string name="TeleportYourAgent"> - Vous téléporter - </string> <string name="JoinAnExperience"> Rejoindre une expérience </string> @@ -1270,8 +1384,7 @@ Veuillez réessayer de vous connecter dans une minute. <string name="InventoryInboxNoItems"> Les achats que vous avez effectués sur la Place du marché s'affichent ici. Vous pouvez alors les faire glisser vers votre inventaire afin de les utiliser. </string> - <string name="Unconstrained">Sans contraintes</string> - <string name="MarketplaceURL"> + <string name="MarketplaceURL"> https://marketplace.[MARKETPLACE_DOMAIN_NAME]/ </string> <string name="MarketplaceURL_CreateStore"> @@ -1300,6 +1413,18 @@ Veuillez réessayer de vous connecter dans une minute. <string name="InventoryOutboxNoItems"> Pour mettre des dossiers en vente sur la [[MARKETPLACE_DASHBOARD_URL] Place du marché], faites-les glisser vers cette zone et cliquez sur "Envoyer vers la Place du marché". </string> + <string name="InventoryOutboxInitializingTitle"> + Initialisation de la Place du marché... + </string> + <string name="InventoryOutboxInitializing"> + Nous sommes en train d'accéder à votre compte dans la [[MARKETPLACE_CREATE_STORE_URL] boutique de la Place du marché]. + </string> + <string name="InventoryOutboxErrorTitle"> + Erreurs de la Place du marché. + </string> + <string name="InventoryOutboxError"> + La [[MARKETPLACE_CREATE_STORE_URL] boutique de la Place du marché] renvoie des erreurs. + </string> <string name="Marketplace Error None"> Aucune erreur </string> @@ -1327,6 +1452,9 @@ Veuillez réessayer de vous connecter dans une minute. <string name="Open landmarks"> Ouvrir les repères </string> + <string name="Unconstrained"> + Sans contraintes + </string> <string name="no_transfer" value=" (pas de transfert)"/> <string name="no_modify" value=" (pas de modification)"/> <string name="no_copy" value=" (pas de copie)"/> @@ -1727,6 +1855,9 @@ Veuillez réessayer de vous connecter dans une minute. <string name="CompileQueueDownloadedCompiling"> Téléchargé, compilation en cours </string> + <string name="CompileQueueServiceUnavailable"> + Service de compilation de script indisponible. + </string> <string name="CompileQueueScriptNotFound"> Script introuvable sur le serveur. </string> @@ -4027,6 +4158,12 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE]. <string name="share_alert"> Faire glisser les objets de l'inventaire ici </string> + <string name="flickr_post_success"> + Vous avez publié sur Flickr. + </string> + <string name="twitter_post_success"> + Vous avez publié sur Twitter. + </string> <string name="no_session_message"> (Session IM inexistante) </string> @@ -4483,6 +4620,9 @@ du rapport d'infraction <string name="LocalEstimateUSD"> [AMOUNT] US$ </string> + <string name="Group Ban"> + Bannissement de groupe + </string> <string name="Membership"> Inscription </string> @@ -4905,6 +5045,12 @@ Essayez avec le chemin d'accès à l'éditeur entre guillemets doubles <string name="Command_Destinations_Label"> Destinations </string> + <string name="Command_Facebook_Label"> + Facebook + </string> + <string name="Command_Flickr_Label"> + Flickr + </string> <string name="Command_Gestures_Label"> Gestes </string> @@ -4953,6 +5099,9 @@ Essayez avec le chemin d'accès à l'éditeur entre guillemets doubles <string name="Command_Speak_Label"> Parler </string> + <string name="Command_Twitter_Label"> + Twitter + </string> <string name="Command_View_Label"> Caméra </string> @@ -4983,6 +5132,12 @@ Essayez avec le chemin d'accès à l'éditeur entre guillemets doubles <string name="Command_Destinations_Tooltip"> Destinations intéressantes </string> + <string name="Command_Facebook_Tooltip"> + Publier sur Facebook + </string> + <string name="Command_Flickr_Tooltip"> + Charger sur Flickr + </string> <string name="Command_Gestures_Tooltip"> Gestes de votre avatar </string> @@ -5031,6 +5186,9 @@ Essayez avec le chemin d'accès à l'éditeur entre guillemets doubles <string name="Command_Speak_Tooltip"> Parler aux personnes près de vous en utilisant votre micro </string> + <string name="Command_Twitter_Tooltip"> + Twitter + </string> <string name="Command_View_Tooltip"> Changer l'angle de la caméra </string> diff --git a/indra/newview/skins/default/xui/it/floater_big_preview.xml b/indra/newview/skins/default/xui/it/floater_big_preview.xml new file mode 100644 index 0000000000..7bc50a6d39 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_big_preview.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_big_preview" title="ANTEPRIMA"/> diff --git a/indra/newview/skins/default/xui/it/floater_facebook.xml b/indra/newview/skins/default/xui/it/floater_facebook.xml new file mode 100644 index 0000000000..89d58f4e67 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_facebook.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_facebook" title="PUBBLICA SU FACEBOOK"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="STATO" name="panel_facebook_status"/> + <panel label="FOTO" name="panel_facebook_photo"/> + <panel label="REGISTRATI" name="panel_facebook_place"/> + <panel label="AMICI" name="panel_facebook_friends"/> + <panel label="ACCOUNT" name="panel_facebook_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Errore + </text> + <text name="connection_loading_text"> + Caricamento... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_flickr.xml b/indra/newview/skins/default/xui/it/floater_flickr.xml new file mode 100644 index 0000000000..c19eb337af --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_flickr.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_flickr" title="CARICA SU FLICKR"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="FOTO" name="panel_flickr_photo"/> + <panel label="ACCOUNT" name="panel_flickr_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Errore + </text> + <text name="connection_loading_text"> + Caricamento... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_lagmeter.xml b/indra/newview/skins/default/xui/it/floater_lagmeter.xml new file mode 100644 index 0000000000..f7b2b1ab4a --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_lagmeter.xml @@ -0,0 +1,154 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_lagmeter" title="MISURATORE LAG"> + <floater.string name="max_title_msg"> + Misuratore del lag + </floater.string> + <floater.string name="max_width_px"> + 360 + </floater.string> + <floater.string name="min_title_msg"> + Lag + </floater.string> + <floater.string name="min_width_px"> + 90 + </floater.string> + <floater.string name="client_text_msg"> + Programma in locale + </floater.string> + <floater.string name="client_frame_rate_critical_fps"> + 10 + </floater.string> + <floater.string name="client_frame_rate_warning_fps"> + 15 + </floater.string> + <floater.string name="client_frame_time_window_bg_msg"> + Normale, finestra sullo sfondo + </floater.string> + <floater.string name="client_frame_time_critical_msg"> + Velocità dei frame al di sotto di [CLIENT_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="client_frame_time_warning_msg"> + Velocità dei frame tra [CLIENT_FRAME_RATE_CRITICAL] e [CLIENT_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="client_frame_time_normal_msg"> + Normale + </floater.string> + <floater.string name="client_draw_distance_cause_msg"> + Possibile causa: Campo visivo impostato troppo alto + </floater.string> + <floater.string name="client_texture_loading_cause_msg"> + Possibile causa: Caricamento immagini + </floater.string> + <floater.string name="client_texture_memory_cause_msg"> + Possibile causa: Troppe immagini in memoria + </floater.string> + <floater.string name="client_complex_objects_cause_msg"> + Possibile causa: Troppi oggetti complessi intorno + </floater.string> + <floater.string name="network_text_msg"> + Network + </floater.string> + <floater.string name="network_packet_loss_critical_pct"> + 10 + </floater.string> + <floater.string name="network_packet_loss_warning_pct"> + 5 + </floater.string> + <floater.string name="network_packet_loss_critical_msg"> + La connessione sta calando al di sotto del [NETWORK_PACKET_LOSS_CRITICAL]% di pacchetti + </floater.string> + <floater.string name="network_packet_loss_warning_msg"> + La connessione sta calando tra il [NETWORK_PACKET_LOSS_WARNING]% e il [NETWORK_PACKET_LOSS_CRITICAL]% di pacchetti + </floater.string> + <floater.string name="network_performance_normal_msg"> + Normale + </floater.string> + <floater.string name="network_ping_critical_ms"> + 600 + </floater.string> + <floater.string name="network_ping_warning_ms"> + 300 + </floater.string> + <floater.string name="network_ping_critical_msg"> + Il tempo di ping della connessione è al di sopra di [NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_ping_warning_msg"> + Il tempo di ping della connessione è tra [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_packet_loss_cause_msg"> + Possibile cattiva connessione o la larghezza di banda impostata nelle preferenze troppo alta. + </floater.string> + <floater.string name="network_ping_cause_msg"> + Possibile cattiva connessione o l'apertura di un programma di scambio files. + </floater.string> + <floater.string name="server_text_msg"> + Server + </floater.string> + <floater.string name="server_frame_rate_critical_fps"> + 20 + </floater.string> + <floater.string name="server_frame_rate_warning_fps"> + 30 + </floater.string> + <floater.string name="server_single_process_max_time_ms"> + 20 + </floater.string> + <floater.string name="server_frame_time_critical_msg"> + Velocità dei frame al di sotto di [SERVER_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="server_frame_time_warning_msg"> + Velocità dei frame tra [SERVER_FRAME_RATE_CRITICAL] e [SERVER_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="server_frame_time_normal_msg"> + Normale + </floater.string> + <floater.string name="server_physics_cause_msg"> + Possibile causa: troppi oggetti fisici + </floater.string> + <floater.string name="server_scripts_cause_msg"> + Possibile causa: troppi oggetti scriptati + </floater.string> + <floater.string name="server_net_cause_msg"> + Possibile causa: eccessivo traffico sulla rete + </floater.string> + <floater.string name="server_agent_cause_msg"> + Possibile causa: troppi residenti in movimento nella regione + </floater.string> + <floater.string name="server_images_cause_msg"> + Possibile causa: troppe elaborazioni di immagini + </floater.string> + <floater.string name="server_generic_cause_msg"> + Possibile causa: carico eccessivo del simulatore + </floater.string> + <floater.string name="smaller_label"> + >> + </floater.string> + <floater.string name="bigger_label"> + << + </floater.string> + <button label="" label_selected="" name="client_lagmeter" tool_tip="Stato del lag del programma in locale"/> + <text name="client"> + Client + </text> + <text font="SansSerifSmall" left="145" name="client_text"> + Normale + </text> + <text left="30" name="client_lag_cause" right="-10"/> + <button label="" label_selected="" name="network_lagmeter" tool_tip="Stato del lag del network"/> + <text name="network"> + Rete + </text> + <text font="SansSerifSmall" name="network_text"> + Normale + </text> + <text left="30" name="network_lag_cause" right="-10"/> + <button label="" label_selected="" name="server_lagmeter" tool_tip="Stato del lag del server"/> + <text name="server"> + Server + </text> + <text font="SansSerifSmall" name="server_text"> + Normale + </text> + <text left="30" name="server_lag_cause" right="-32"/> + <button label=">>" name="minimize" tool_tip="Cambia dimensioni floater"/> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_perms_default.xml b/indra/newview/skins/default/xui/it/floater_perms_default.xml new file mode 100644 index 0000000000..3d1fd94b69 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_perms_default.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="perms default" title="DIRITTI DI CREAZIONE PREDEFINITI"> + <panel label="Diritti predefiniti" name="default permissions"/> + <button label="OK" label_selected="OK" name="ok"/> + <button label="Annulla" label_selected="Annulla" name="cancel"/> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_region_restarting.xml b/indra/newview/skins/default/xui/it/floater_region_restarting.xml new file mode 100644 index 0000000000..d4497288e0 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_region_restarting.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="region_restarting" title="RIAVVIO REGIONE IN CORSO"> + <string name="RegionName"> + La regione in cui ti trovi ([NAME]) verrà riavviata tra breve. + +Se rimani in questa regione verrai scollegato da Second Life. + </string> + <string name="RestartSeconds"> + Secondi prima del riavvio +[SECONDS] + </string> + <panel name="layout_panel_1"> + <text name="region_name"> + La regione in cui ti trovi (il nome di regione più lungo) verrà riavviata tra breve. + +Se rimani in questa regione verrai scollegato da Second Life. + </text> + <text name="restart_seconds"> + Secondi prima del riavvio + 32767 + </text> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_report_abuse.xml b/indra/newview/skins/default/xui/it/floater_report_abuse.xml index eeba54b0ca..728d089205 100755 --- a/indra/newview/skins/default/xui/it/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/it/floater_report_abuse.xml @@ -44,7 +44,7 @@ <combo_box.item label="Età > Residente adulto in Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/> <combo_box.item label="Età > Residente minorenne fuori da Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/> <combo_box.item label="Assalto > sandbox da combattimento / area pericolosa" name="Assault__Combat_sandbox___unsafe_area"/> - <combo_box.item label="Assalto > Area sicura" name="Assault__Safe_area"/> + <combo_box.item label="Assalto > Colpire, spingere o urtare un altro residente in un'area Sicura" name="Assault__Safe_area"/> <combo_box.item label="Assalto > Test di armi in sandbox" name="Assault__Weapons_testing_sandbox"/> <combo_box.item label="Commercio > Problema nella consegna di un prodotto o servizio" name="Commerce__Failure_to_deliver_product_or_service"/> <combo_box.item label="Divulgazione > Informazioni del mondo reale" name="Disclosure__Real_world_information"/> @@ -58,25 +58,25 @@ <combo_box.item label="Truffa > L$" name="Fraud__L$"/> <combo_box.item label="Truffa > Terreno" name="Fraud__Land"/> <combo_box.item label="Truffa > Multilivello o catena di Sant'Antonio" name="Fraud__Pyramid_scheme_or_chain_letter"/> - <combo_box.item label="Truffa > Dollari US$" name="Fraud__US$"/> + <combo_box.item label="Frode > L$ o USD $" name="Fraud__US$"/> <combo_box.item label="Molestie > Territori adibiti a pubblicità / spam visivo" name="Harassment__Advert_farms___visual_spam"/> <combo_box.item label="Molestie > Diffamazione di individui o gruppi" name="Harassment__Defaming_individuals_or_groups"/> <combo_box.item label="Molestie > Impedimento di movimenti" name="Harassment__Impeding_movement"/> <combo_box.item label="Molestie > Molestie sessuali" name="Harassment__Sexual_harassment"/> - <combo_box.item label="Molestie > Sollecitare/incitare altri a violare i Termini di Servizio" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> + <combo_box.item label="Molestia > Comportamento mirato a disturbare" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> <combo_box.item label="Molestie > Abusi verbali" name="Harassment__Verbal_abuse"/> <combo_box.item label="Indecenza > Condotta o contenuti largamente offensivi" name="Indecency__Broadly_offensive_content_or_conduct"/> <combo_box.item label="Indecenza > Nome di un avatar inappropriato" name="Indecency__Inappropriate_avatar_name"/> - <combo_box.item label="Indecenza > Contenuto o condotta inappropriata in una regione con accesso Generale" name="Indecency__Mature_content_in_PG_region"/> + <combo_box.item label="Indecenza > Comportamenti o contenuti non appropriati per la categoria di accesso della regione" name="Indecency__Mature_content_in_PG_region"/> <combo_box.item label="Indecenza > Contenuto o condotta inappropriata in una regione con accesso Moderato" name="Indecency__Inappropriate_content_in_Mature_region"/> <combo_box.item label="Violazione della proprietà intellettuale > Rimozione contenuti" name="Intellectual_property_infringement_Content_Removal"/> <combo_box.item label="Violazione della proprietà intellettuale > CopyBot o sblocco di permessi" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/> <combo_box.item label="Intolleranza" name="Intolerance"/> <combo_box.item label="Terreno > Abuso delle risorse di una sandbox" name="Land__Abuse_of_sandbox_resources"/> - <combo_box.item label="Terreno > Invasione > Oggetti/textures" name="Land__Encroachment__Objects_textures"/> + <combo_box.item label="Terreno > Invasione > Oggetti o texture" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="Terreno > Invasione > Particelle" name="Land__Encroachment__Particles"/> <combo_box.item label="Terreno > Invasione > Alberi/piante" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="Chiedere l'elemosina/gioco d'azzardo" name="Wagering_gambling"/> + <combo_box.item label="Scommesse o gioco d'azzardo" name="Wagering_gambling"/> <combo_box.item label="Altro" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/it/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/it/floater_scene_load_stats.xml new file mode 100644 index 0000000000..ca18812eb7 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_scene_load_stats.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Scene Load Statistics" title="STATISTICHE CARICAMENTO SCENA"> + <button label="In pausa" name="playpause"/> + <scroll_container name="statistics_scroll"> + <container_view name="statistics_view"> + <stat_view label="Di base" name="basic"> + <stat_bar label="Differenza pixel tra fotogrammi" name="frame difference"/> + <stat_bar label="Dati UDP ricevuti" name="bandwidth"/> + <stat_bar label="Perdita pacchetti" name="packet_loss"/> + </stat_view> + <stat_view label="Avanzata" name="advanced"> + <stat_view label="Render" name="render"> + <stat_bar label="Totale oggetti" name="objs"/> + <stat_bar label="Nuovi oggetti" name="newobjs"/> + <stat_bar label="Hit rate della cache per l'oggetto" name="object_cache_hits"/> + </stat_view> + <stat_view label="Texture" name="texture"> + <stat_bar label="Hit rate della cache" name="texture_cache_hits"/> + <stat_bar label="Latenza di lettura della cache" name="texture_cache_read_latency"/> + <stat_bar label="Conteggio" name="numimagesstat"/> + <stat_bar label="Conteggio grezzo" name="numrawimagesstat"/> + </stat_view> + <stat_view label="Rete" name="network"> + <stat_bar label="Pacchetti in ingresso" name="packetsinstat"/> + <stat_bar label="Pacchetti in uscita" name="packetsoutstat"/> + <stat_bar label="Oggetti" name="objectdatareceived"/> + <stat_bar label="Texture" name="texturedatareceived"/> + <stat_bar label="Risorsa" name="assetudpdatareceived"/> + <stat_bar label="Livelli" name="layersdatareceived"/> + <stat_bar label="Effettivi in ingresso" name="messagedatain"/> + <stat_bar label="Effettivi in uscita" name="messagedataout"/> + <stat_bar label="Operazioni VFS in sospeso" name="vfspendingoperations"/> + </stat_view> + </stat_view> + <stat_view label="Simulatore" name="sim"> + <stat_bar label="Oggetti" name="simobjects"/> + <stat_bar label="Oggetti attivi" name="simactiveobjects"/> + <stat_bar label="Script attivi" name="simactivescripts"/> + <stat_bar label="Pacchetti in ingresso" name="siminpps"/> + <stat_bar label="Pacchetti in uscita" name="simoutpps"/> + <stat_bar label="Download in attesa" name="simpendingdownloads"/> + <stat_bar label="Caricamenti in attesa" name="simpendinguploads"/> + <stat_bar label="Numero totale byte non confermati (Unacked)" name="simtotalunackedbytes"/> + <stat_view label="Tempo (ms)" name="simperf"> + <stat_bar label="Tempo totale Frame" name="simframemsec"/> + <stat_bar label="Tempo netto" name="simnetmsec"/> + <stat_bar label="Tempo motore fisico" name="simsimphysicsmsec"/> + <stat_bar label="Tempo simulazione" name="simsimothermsec"/> + <stat_bar label="Tempo agente" name="simagentmsec"/> + <stat_bar label="Tempo immagini" name="simimagesmsec"/> + <stat_bar label="Tempo script" name="simscriptmsec"/> + <stat_bar label="Tempo libero" name="simsparemsec"/> + <stat_view label="Dettagli tempo (ms)" name="timedetails"> + <stat_bar label="Passaggio fisica" name="simsimphysicsstepmsec"/> + <stat_bar label="Aggiorna forme fisica" name="simsimphysicsshapeupdatemsec"/> + <stat_bar label="Altro fisica" name="simsimphysicsothermsec"/> + <stat_bar label="Tempo pausa" name="simsleepmsec"/> + <stat_bar label="IO pompa" name="simpumpiomsec"/> + </stat_view> + </stat_view> + </stat_view> + </container_view> + </scroll_container> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/it/floater_script_ed_prefs.xml new file mode 100644 index 0000000000..4f95ef88b1 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_script_ed_prefs.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_script_colors" title="COLORI SCRIPT"> + <text name="color_pickers_label"> + Seleziona i colori desiderati: + </text> + <text name="text_label"> + Testo + </text> + <text name="cursor_label"> + Cursore + </text> + <text name="background_label"> + Sfondo + </text> + <text name="datatype_label"> + Tipi di dati + </text> + <text name="event_label"> + Eventi + </text> + <text name="string_literal_label"> + Espressioni letterali stringa + </text> + <text name="constant_label"> + Costante + </text> + <text name="flow_control_label"> + Controllo di flusso + </text> + <text name="function_label"> + Funzione + </text> + <text name="comment_label"> + Commento + </text> + <script_editor name="Script Preview"> + /* Uno script di esempio */ +default +{ + state_entry() + { + // Comment + string greeting = "Salve"; + llSay(PUBLIC_CHANNEL, greeting); + } +} + </script_editor> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_snapshot.xml b/indra/newview/skins/default/xui/it/floater_snapshot.xml index bff6081bdf..16289ac7af 100755 --- a/indra/newview/skins/default/xui/it/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/it/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="ANTEPRIMA FOTOGRAFIA"> +<floater name="Snapshot" title="ISTANTANEA"> <floater.string name="unknown"> sconosciuto </floater.string> @@ -61,5 +61,11 @@ <check_box label="HUD" name="hud_check"/> <check_box label="Congela il frame (tutto schermo)" name="freeze_frame_check"/> <check_box label="Aggiornamento automatico" name="auto_snapshot_check"/> + <text name="filter_list_label"> + Filtro: + </text> + <combo_box name="filters_combobox" tool_tip="Filtri immagini"> + <combo_box.item label="Nessun filtro" name="NoFilter"/> + </combo_box> </panel> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_stats.xml b/indra/newview/skins/default/xui/it/floater_stats.xml index 825b2ce57a..7516af957e 100755 --- a/indra/newview/skins/default/xui/it/floater_stats.xml +++ b/indra/newview/skins/default/xui/it/floater_stats.xml @@ -4,17 +4,21 @@ <container_view name="statistics_view"> <stat_view label="Di base" name="basic"> <stat_bar label="FPS" name="fps"/> - <stat_bar label="Larghezza banda" name="bandwidth"/> + <stat_bar label="Dati UDP ricevuti" name="bandwidth"/> <stat_bar label="Perdita pacchetti" name="packet_loss"/> <stat_bar label="Tempo Ping Sim" name="ping"/> </stat_view> <stat_view label="Avanzata" name="advanced"> <stat_view label="Render" name="render"> - <stat_bar label="KTris disegnato per fotogramma" name="ktrisframe"/> - <stat_bar label="KTris disegnato per secondo" name="ktrissec"/> - <stat_bar label="Totale oggetti" name="objs"/> + <stat_bar label="KTris per fotogramma" name="ktrisframe"/> + <stat_bar label="KTris per secondo" name="ktrissec"/> + <stat_bar label="Totale oggetti" name="totalobjs"/> + <stat_bar label="Oggetti nella cache" name="cachedobjs"/> <stat_bar label="Nuovi oggetti" name="newobjs"/> <stat_bar label="Hit rate della cache per l'oggetto" name="object_cache_hits"/> + <stat_bar label="Occlusion query eseguite" name="occlusion_queries"/> + <stat_bar label="Oggetti in occlusion" name="occluded"/> + <stat_bar label="Oggetti non in occlusion" name="unoccluded"/> </stat_view> <stat_view label="Texture" name="texture"> <stat_bar label="Hit rate della cache" name="texture_cache_hits"/> @@ -26,15 +30,32 @@ <stat_bar label="Memoria complessiva" name="rawmemstat"/> <stat_bar label="Memoria impegnata" name="glboundmemstat"/> </stat_view> + <stat_view label="Utilizzo memoria" name="memory"> + <stat_bar label="LLTrace" name="LLTrace"/> + <stat_bar label="Interfaccia utente" name="LLView"/> + <stat_bar label="Font" name="LLFontFreetype"/> + <stat_bar label="Inventario" name="LLInventoryObject"/> + <stat_bar label="Oggetti Viewer" name="LLViewerObject"/> + <stat_bar label="Dati gruppo octree" name="LLViewerOctreeGroup"/> + <stat_bar label="Dati octree" name="LLViewerOctreeEntry"/> + <stat_bar label="Cache oggetti Viewer" name="LLVOCacheEntry"/> + <stat_bar label="Disegnabili" name="LLDrawable"/> + <stat_bar label="Dati viso" name="LLFace"/> + <stat_bar label="Info disegno" name="LLDrawInfo"/> + <stat_bar label="Dati texture" name="LLTexture"/> + <stat_bar label="Dati immagine" name="LLImage"/> + <stat_bar label="Dati immagine GL" name="LLImageGL"/> + <stat_bar label="Buffer vertici" name="LLVertexBuffer"/> + </stat_view> <stat_view label="Rete" name="network"> <stat_bar label="Pacchetti in ingresso" name="packetsinstat"/> <stat_bar label="Pacchetti in uscita" name="packetsoutstat"/> - <stat_bar label="Oggetti" name="objectkbitstat"/> - <stat_bar label="Texture" name="texturekbitstat"/> - <stat_bar label="Risorse server" name="assetkbitstat"/> - <stat_bar label="Layer" name="layerskbitstat"/> - <stat_bar label="Effettivi in ingresso" name="actualinkbitstat"/> - <stat_bar label="Effettivi in uscita" name="actualoutkbitstat"/> + <stat_bar label="Oggetti" name="objectdatareceived"/> + <stat_bar label="Texture" name="texturedatareceived"/> + <stat_bar label="Risorsa" name="assetudpdatareceived"/> + <stat_bar label="Livelli" name="layersdatareceived"/> + <stat_bar label="Effettivi in ingresso" name="messagedatain"/> + <stat_bar label="Effettivi in uscita" name="messagedataout"/> <stat_bar label="Operazioni VFS in sospeso" name="vfspendingoperations"/> </stat_view> </stat_view> @@ -53,7 +74,8 @@ <stat_bar label="Passaggi silhouette saltati" name="simsimskippedsilhouettesteps"/> <stat_bar label="Personaggi aggiornati" name="simsimpctsteppedcharacters"/> </stat_view> - <stat_view label="Tempo (ms)" name="simperf"> + <stat_bar label="Totale dati non confermati (unacked)" name="simtotalunackedbytes"/> + <stat_view label="Orario" name="simperf"> <stat_bar label="Tempo totale Frame" name="simframemsec"/> <stat_bar label="Tempo netto" name="simnetmsec"/> <stat_bar label="Tempo motore fisico" name="simsimphysicsmsec"/> @@ -62,7 +84,7 @@ <stat_bar label="Tempo immagini" name="simimagesmsec"/> <stat_bar label="Tempo script" name="simscriptmsec"/> <stat_bar label="Tempo libero" name="simsparemsec"/> - <stat_view label="Dettagli tempo (ms)" name="timedetails"> + <stat_view label="Dettagli orario" name="timedetails"> <stat_bar label="Passaggio fisica" name="simsimphysicsstepmsec"/> <stat_bar label="Aggiorna forme fisica" name="simsimphysicsshapeupdatemsec"/> <stat_bar label="Altro fisica" name="simsimphysicsothermsec"/> diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml index 468f284ccb..efd1ea808a 100755 --- a/indra/newview/skins/default/xui/it/floater_tools.xml +++ b/indra/newview/skins/default/xui/it/floater_tools.xml @@ -72,7 +72,7 @@ <check_box label="Modifica parti collegate" name="checkbox edit linked parts"/> <button label="Collegamento" name="link_btn"/> <button label="Scollega" name="unlink_btn"/> - <check_box label="" name="checkbox uniform"/> + <check_box label="Allunga entrambi i lati" name="checkbox uniform"/> <text label="Allunga entrambi i lati" name="checkbox uniform label"> Allunga entrambi i lati </text> diff --git a/indra/newview/skins/default/xui/it/floater_twitter.xml b/indra/newview/skins/default/xui/it/floater_twitter.xml new file mode 100644 index 0000000000..c903705e69 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_twitter.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_twitter" title="TWITTER"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="COMPONI" name="panel_twitter_photo"/> + <panel label="ACCOUNT" name="panel_twitter_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Errore + </text> + <text name="connection_loading_text"> + Caricamento... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/it/menu_avatar_icon.xml b/indra/newview/skins/default/xui/it/menu_avatar_icon.xml index b93b695300..215eb836c8 100755 --- a/indra/newview/skins/default/xui/it/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/it/menu_avatar_icon.xml @@ -2,6 +2,7 @@ <menu name="Avatar Icon Menu"> <menu_item_call label="Vedi profilo" name="Show Profile"/> <menu_item_call label="Manda IM..." name="Send IM"/> + <menu_item_call label="Richiedi teleport" name="Request Teleport"/> <menu_item_call label="Aggiungi come amico..." name="Add Friend"/> <menu_item_call label="Togli amicizia..." name="Remove Friend"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_conversation.xml b/indra/newview/skins/default/xui/it/menu_conversation.xml index 24486f2af2..d4b8d66785 100644 --- a/indra/newview/skins/default/xui/it/menu_conversation.xml +++ b/indra/newview/skins/default/xui/it/menu_conversation.xml @@ -29,4 +29,5 @@ <menu_item_call label="Disattiva audio di tutti" name="ModerateVoiceMute"/> <menu_item_call label="Riattiva audio di tutti" name="ModerateVoiceUnmute"/> </context_menu> + <menu_item_call label="Espelli membro" name="BanMember"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/it/menu_inventory.xml b/indra/newview/skins/default/xui/it/menu_inventory.xml index b31e35771d..c8042f4253 100755 --- a/indra/newview/skins/default/xui/it/menu_inventory.xml +++ b/indra/newview/skins/default/xui/it/menu_inventory.xml @@ -70,6 +70,7 @@ <menu_item_call label="Esegui" name="Sound Play"/> <menu_item_call label="Copia SLurl" name="url_copy"/> <menu_item_call label="Informazioni sul punto di riferimento" name="About Landmark"/> + <menu_item_call label="Mostra sulla mappa" name="show_on_map"/> <menu_item_call label="Riproduci in Second Life" name="Animation Play"/> <menu_item_call label="Esegui localmente" name="Animation Audition"/> <menu_item_call label="Invia un Instant Message" name="Send Instant Message"/> diff --git a/indra/newview/skins/default/xui/it/menu_login.xml b/indra/newview/skins/default/xui/it/menu_login.xml index 35053ec499..126089aa6a 100755 --- a/indra/newview/skins/default/xui/it/menu_login.xml +++ b/indra/newview/skins/default/xui/it/menu_login.xml @@ -5,7 +5,15 @@ <menu_item_call label="Esci da [APP_NAME]" name="Quit"/> </menu> <menu label="Aiuto" name="Help"> - <menu_item_call label="Aiuto di [SECOND_LIFE]" name="Second Life Help"/> + <menu_item_call label="Istruzioni..." name="How To"/> + <menu_item_call label="Guida introduttiva" name="Quickstart"/> + <menu_item_call label="Base di conoscenza" name="Knowledge Base"/> + <menu_item_call label="Wiki" name="Wiki"/> + <menu_item_call label="Forum della comunità" name="Community Forums"/> + <menu_item_call label="Portale assistenza" name="Support portal"/> + <menu_item_call label="[SECOND_LIFE] Notizie" name="Second Life News"/> + <menu_item_call label="[SECOND_LIFE] Blog" name="Second Life Blogs"/> + <menu_item_call label="Segnala bug" name="Report Bug"/> <menu_item_call label="Informazioni su [APP_NAME]" name="About Second Life"/> </menu> <menu_item_check label="Mostra menu Debug" name="Show Debug Menu"/> diff --git a/indra/newview/skins/default/xui/it/menu_object.xml b/indra/newview/skins/default/xui/it/menu_object.xml index 9bcc0879d2..537cc2dd8e 100755 --- a/indra/newview/skins/default/xui/it/menu_object.xml +++ b/indra/newview/skins/default/xui/it/menu_object.xml @@ -21,6 +21,7 @@ <context_menu label="Gestisci" name="Remove"> <menu_item_call label="Segnala abuso" name="Report Abuse..."/> <menu_item_call label="Blocca" name="Object Mute"/> + <menu_item_call label="Sblocca" name="Object Unmute"/> <menu_item_call label="Restituisci" name="Return..."/> </context_menu> <menu_item_call label="Prendi" name="Pie Object Take"/> diff --git a/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml index 81053fbd65..31236895fa 100755 --- a/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml @@ -2,5 +2,5 @@ <context_menu name="Teleport History Item Context Menu"> <menu_item_call label="Teleport" name="Teleport"/> <menu_item_call label="Maggiori informazioni" name="More Information"/> - <menu_item_call label="Copia negli appunti" name="CopyToClipboard"/> + <menu_item_call label="Copia SLurl" name="CopyToClipboard"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml index 52247d6c9c..f535a53e66 100755 --- a/indra/newview/skins/default/xui/it/menu_viewer.xml +++ b/indra/newview/skins/default/xui/it/menu_viewer.xml @@ -36,6 +36,9 @@ <menu_item_check label="Chat nei dintorni..." name="Nearby Chat"/> <menu_item_check label="Parla" name="Speak"/> <menu_item_check label="Registro conversazioni..." name="Conversation Log..."/> + <menu_item_call label="Facebook..." name="Facebook"/> + <menu_item_call label="Twitter..." name="Twitter"/> + <menu_item_call label="Flickr..." name="Flickr"/> <menu label="Manipolazione voce" name="VoiceMorphing"> <menu_item_check label="Nessuna manipolazione voce" name="NoVoiceMorphing"/> <menu_item_check label="Anteprima..." name="Preview"/> @@ -72,11 +75,11 @@ <menu_item_check label="Menu Avanzato" name="Show Advanced Menu"/> </menu> <menu label="Sole" name="Sun"> - <menu_item_call label="Alba" name="Sunrise"/> - <menu_item_call label="Mezzogiorno" name="Noon"/> - <menu_item_call label="Tramonto" name="Sunset"/> - <menu_item_call label="Mezzanotte" name="Midnight"/> - <menu_item_call label="Usa impostazioni regione" name="Use Region Settings"/> + <menu_item_check label="Alba" name="Sunrise"/> + <menu_item_check label="Mezzogiorno" name="Noon"/> + <menu_item_check label="Tramonto" name="Sunset"/> + <menu_item_check label="Mezzanotte" name="Midnight"/> + <menu_item_check label="Usa impostazioni regione" name="Use Region Settings"/> </menu> <menu label="Editor ambiente" name="Environment Editor"> <menu_item_call label="Impostazioni ambiente..." name="Environment Settings"/> @@ -150,7 +153,8 @@ <menu_item_check label="Posiziona nella griglia" name="Snap to Grid"/> <menu_item_call label="Posiziona coordinate XY dell'oggetto sulla griglia" name="Snap Object XY to Grid"/> <menu_item_call label="Usa la selezione per la griglia" name="Use Selection for Grid"/> - <menu_item_call label="Opzioni della griglia" name="Grid Options"/> + <menu_item_call label="Opzioni della griglia..." name="Grid Options"/> + <menu_item_call label="Imposta diritti predefiniti..." name="Set default permissions"/> </menu> <menu label="Carica sul server" name="Upload"> <menu_item_call label="Immagine ([COST] L$)..." name="Upload Image"/> @@ -158,15 +162,12 @@ <menu_item_call label="Animazione ([COST] L$)..." name="Upload Animation"/> <menu_item_call label="Modella..." name="Upload Model"/> <menu_item_call label="In blocco ([COST] L$ per file)..." name="Bulk Upload"/> - <menu_item_call label="Definisci diritti di caricamento predefiniti" name="perm prefs"/> </menu> <menu_item_call label="Annulla" name="Undo"/> <menu_item_call label="Ripeti" name="Redo"/> </menu> <menu label="Aiuto" name="Help"> <menu_item_call label="Istruzioni..." name="How To"/> - <menu_item_call label="Aiuto di [SECOND_LIFE]" name="Second Life Help"/> - <menu_item_call label="Guida dell'utente" name="User’s guide"/> <menu_item_call label="Base di conoscenza" name="Knowledge Base"/> <menu_item_call label="Wiki" name="Wiki"/> <menu_item_call label="Forum della comunità" name="Community Forums"/> @@ -188,6 +189,7 @@ <menu label="Strumenti di performance" name="Performance Tools"> <menu_item_call label="Misuratore lag" name="Lag Meter"/> <menu_item_check label="Barra statistiche" name="Statistics Bar"/> + <menu_item_call label="Statistiche caricamento scena" name="Scene Load Statistics"/> <menu_item_check label="Mostra peso visualizzazione per avatar" name="Avatar Rendering Cost"/> </menu> <menu label="Evidenziazione e visibilità" name="Highlighting and Visibility"> @@ -249,6 +251,7 @@ <menu_item_check label="Timer veloci" name="Fast Timers"/> <menu_item_check label="Memoria" name="Memory"/> <menu_item_check label="Statistiche scena" name="Scene Statistics"/> + <menu_item_check label="Monitoraggio caricamento scena" name="Scene Loading Monitor"/> <menu_item_call label="Console di debug recupero texture" name="Texture Fetch Debug Console"/> <menu_item_call label="Informazioni regione sulla console di debug" name="Region Info to Debug Console"/> <menu_item_check label="Fotocamera" name="Camera"/> @@ -280,6 +283,7 @@ <menu_item_check label="Veloc. di visualizzazione casuale" name="Randomize Framerate"/> <menu_item_check label="Test frame" name="Frame Test"/> <menu_item_call label="Profilo frame" name="Frame Profile"/> + <menu_item_call label="Benchmark" name="Benchmark"/> </menu> <menu label="Render Metadata" name="Render Metadata"> <menu_item_check label="Normali" name="Normals"/> @@ -287,6 +291,8 @@ <menu_item_check label="Aggiorna tipo" name="Update Type"/> <menu_item_check label="Info livello dettaglio" name="LOD Info"/> <menu_item_check label="Crea coda" name="Build Queue"/> + <menu_item_check label="Particelle" name="Particles"/> + <menu_item_check label="Giunti" name="Joints"/> <menu_item_check label="Vettori vento" name="Wind Vectors"/> <menu_item_check label="Complessità rendering" name="rendercomplexity"/> <menu_item_check label="Byte collegamento" name="attachment bytes"/> @@ -312,6 +318,7 @@ <menu_item_check label="Rendering delle luci unite" name="Render Attached Lights"/> <menu_item_check label="Rendering particelle unite" name="Render Attached Particles"/> <menu_item_check label="Gli oggetti brillano quando sono sotto il cursore" name="Hover Glow Objects"/> + <menu_item_call label="Pulisci cache immediatamente" name="Cache Clear"/> </menu> <menu label="Rete" name="Network"> <menu_item_check label="Metti in pausa" name="AgentPause"/> @@ -327,7 +334,6 @@ <menu_item_call label="Test browser multimedia" name="Web Browser Test"/> <menu_item_call label="Browser contenuto Web" name="Web Content Browser"/> <menu_item_call label="Stampa informazioni oggetto selezionato" name="Print Selected Object Info"/> - <menu_item_check label="Console di debug regione" name="Region Debug Console"/> <menu_item_check label="Debug clic" name="Debug Clicks"/> <menu_item_check label="Debug eventi mouse" name="Debug Mouse Events"/> </menu> diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml index 96b8c96595..11211e01fe 100755 --- a/indra/newview/skins/default/xui/it/notifications.xml +++ b/indra/newview/skins/default/xui/it/notifications.xml @@ -114,13 +114,13 @@ Per ulteriori informazioni consulta il [[MARKETPLACE_IMPORTS_URL] registro error <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="OutboxImportFailed"> - Trasferimento non riuscito + Trasferimento non riuscito, errore '[ERROR_CODE]' Nessuna cartella è stata inviata a Marketplace, a causa di un errore di sistema o di rete. Riprova più tardi. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="OutboxInitFailed"> - Inizializzazione Marketplace non riuscita + Inizializzazione Marketplace non riuscita, errore '[ERROR_CODE]' L'inizializzazione con il Marketplace non ha avuto successo a causa di un errore di sistema o di rete. Riprova più tardi. <usetemplate name="okbutton" yestext="OK"/> @@ -210,6 +210,22 @@ Aggiungi questo potere a '[ROLE_NAME]'? Aggiungi questo potere a '[ROLE_NAME]'? <usetemplate name="okcancelbuttons" notext="No" yestext="Si"/> </notification> + <notification name="AssignBanAbilityWarning"> + Stai per aggiungere l'abilità '[ACTION_NAME]' al ruolo '[ROLE_NAME]'. + + *AVVISO* +A tutti i membri che in un ruolo hanno questa abilità verranno concesse anche le abilità '[ACTION_NAME_2]' e '[ACTION_NAME_3]' + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="RemoveBanAbilityWarning"> + Stai rimuovendo l'abilità '[ACTION_NAME]' dal ruolo '[ROLE_NAME]'. + + *AVVISO* +Rimuovendo questa abilità, NON rimuovi le abilità '[ACTION_NAME_2]' e '[ACTION_NAME_3]'. + +Se non desideri che queste abilità siano assegnate a questo ruolo, disattivale immediatamente. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="EjectGroupMemberWarning"> Stai per espellere [AVATAR_NAME] dal gruppo. <usetemplate ignoretext="Conferma l'espulsione di un partecipante dal gruppo" name="okcancelignore" notext="Annulla" yestext="Espelli"/> @@ -1580,6 +1596,14 @@ Lasciare il gruppo? Impossibile abbandonare il gruppo. Non puoi abbandonare il gruppo perché sei l'ultimo proprietario del gruppo. Devi prima assegnare a un altro membro il ruolo di proprietario. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="GroupDepartError"> + Impossibile abbandonare il gruppo: [reason]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="GroupDepart"> + Hai abbandonato il gruppo [group_name]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="ConfirmKick"> Vuoi veramente espellere tutti i residenti dalla griglia? <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Espelli tutti i residenti"/> @@ -1734,6 +1758,10 @@ più del limite [LIMIT]. Sei sicuro di volere il teleport a <nolink>[LOCATION]</nolink>? <usetemplate ignoretext="Conferma il teleport verso un punto di riferimento" name="okcancelignore" notext="Annulla" yestext="Teleportati"/> </notification> + <notification name="TeleportViaSLAPP"> + Sei sicuro di volere il teleport a <nolink>[LOCATION]</nolink>? + <usetemplate ignoretext="Confermo di voler usare il teleport tramite SLAPP" name="okcancelignore" notext="Annulla" yestext="Teleport"/> + </notification> <notification name="TeleportToPick"> Teleport a [PICK]? <usetemplate ignoretext="Conferma che voglio il teleport verso l'ubicazione nei Luoghi preferiti" name="okcancelignore" notext="Annulla" yestext="Teleport"/> @@ -1944,6 +1972,9 @@ Cambierà migliaia di regioni e produrrà seri problemi ai vari server. <notification name="ProblemAddingEstateManager"> Si sono riscontrati problemi nell'aggiungere un nuovo manager della proprietà. Una o più proprietà potrebbero avere la lista dei manager piena. </notification> + <notification name="ProblemAddingEstateBanManager"> + Impossibile aggiungere il gestore o il proprietario della proprietà alla lista degli espulsi. + </notification> <notification name="ProblemAddingEstateGeneric"> Si sono riscontrati problemi nell'aggiunta a questo elenco della proprietà. Una o più proprietà potrebbe avere una lista piena. </notification> @@ -2458,6 +2489,12 @@ Prova a selezionare una parte di terreno più piccola. <notification name="SystemMessage"> [MESSAGE] </notification> + <notification name="FlickrConnect"> + [MESSAGE] + </notification> + <notification name="TwitterConnect"> + [MESSAGE] + </notification> <notification name="PaymentReceived"> [MESSAGE] </notification> @@ -3028,13 +3065,13 @@ Per informazioni dettagliate, vedi il file del registro. Non è stata ottenuta la capacità della regione '[CAPABILITY]'. </notification> <notification name="ShareItemsConfirmation"> - Sei sicuro di volere condividere gli oggetti + Sei sicuro di volere condividere gli oggetti seguenti: -<nolink>[MSG]</nolink> +<nolink>[ITEMS]</nolink> -Con i seguenti residenti? +Con i seguenti residenti: -[RESIDENTS] +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/> </notification> <notification name="ShareFolderConfirmation"> @@ -3046,7 +3083,7 @@ Sei sicuro di volere condividere gli oggetti seguenti: Con i seguenti residenti: -[RESIDENTS] +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Ok"/> </notification> <notification name="ItemsShared"> @@ -3502,10 +3539,6 @@ Riprova tra un minuto. <notification name="EjectComingSoon"> Non sei più benvenuto qui e hai [EJECT_TIME] secondi per andartene. </notification> - <notification name="NoEnterServerFull"> - Non puoi entrare in questa regione perché -il server è pieno. - </notification> <notification name="SaveBackToInvDisabled"> Opzione Salva nell'inventario disattivata </notification> @@ -3695,6 +3728,9 @@ il server è pieno. <notification name="LinkFailedTooMuchPhysics"> L'oggetto usa troppe risorse per la fisica -- le sue dinamiche sono state disattivate. </notification> + <notification name="EstateManagerFailedllTeleportHome"> + L'oggetto '[OBJECT_NAME]' a [SLURL] non può eseguire il teleport del gestore della proprietà alla sua casa. + </notification> <notification name="TeleportedHomeByObjectOnParcel"> Sei stato teleportato nella posizione iniziale dall'oggetto '[OBJECT_NAME]' del lotto '[PARCEL_NAME]' </notification> @@ -3885,13 +3921,18 @@ il server è pieno. Non sono stati selezionati abbastanza lotti affittati da collegare. </notification> <notification name="CantDivideLandMultipleParcelsSelected"> - Terreno non divisibile.\nHai selezionato più di un lotto.\nProva a selezionare una quantità di terreno più piccola. + Impossibile suddividere il terreno. +È stato selezionato più di un lotto. +Prova a selezionare un pezzo di terreno più piccolo. </notification> <notification name="CantDivideLandCantFindParcel"> - impossibile suddividere il terreno.\nimpossibile trovare il lotto.\nInvia una segnalazione con Aiuto -> Segnala bug... + Impossibile suddividere il terreno. +Lotto non trovato. +Invia una segnalazione con Aiuto -> Segnala Bug... </notification> <notification name="CantDivideLandWholeParcelSelected"> - Impossibile suddividere il terreno. È stato selezionato l'intero lotto.\nProva a selezionare un pezzo di terreno più piccolo. + Impossibile suddividere il terreno. È stato selezionato un intero lotto. +Prova a selezionare un pezzo di terreno più piccolo. </notification> <notification name="LandHasBeenDivided"> Il terreno è stato diviso. @@ -4031,4 +4072,12 @@ il server è pieno. Impossibile spostare i file. Il percorso precedente è stato ripristinato. <usetemplate ignoretext="Impossibile spostare i file. Il percorso precedente è stato ripristinato." name="okignore" yestext="OK"/> </notification> + <notification name="DefaultObjectPermissions"> + Si è verificato un problema nel salvare i diritti predefiniti per il motivo seguente: [REASON]. Riprova più tardi. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="ChatHistoryIsBusyAlert"> + Il file della cronologia del file sta ancora eseguendo l'operazione precedente. Riprova nuovamente tra qualche minuto oppure chatta con un'altra persona. + <usetemplate name="okbutton" yestext="OK"/> + </notification> </notifications> diff --git a/indra/newview/skins/default/xui/it/panel_facebook_account.xml b/indra/newview/skins/default/xui/it/panel_facebook_account.xml new file mode 100644 index 0000000000..e887e7e4dc --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_facebook_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_account"> + <string name="facebook_connected" value="Sei in collegamento con Facebook come:"/> + <string name="facebook_disconnected" value="Non in collegamento con Facebook"/> + <text name="account_caption_label"> + Non in collegamento con Facebook. + </text> + <panel name="panel_buttons"> + <button label="Collegamento..." name="connect_btn"/> + <button label="Interrompi collegamento" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Come pubblicare su Facebook] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_facebook_friends.xml b/indra/newview/skins/default/xui/it/panel_facebook_friends.xml new file mode 100644 index 0000000000..917dbec4d9 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_facebook_friends.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_friends"> + <string name="facebook_friends_empty" value="Attualmente non hai amici su Facebook che sono anche residenti in Second Life. Invita i tuoi amici di Facebook a partecipare a Second Life!"/> + <string name="facebook_friends_no_connected" value="Attualmente non sei in collegamento con Facebook. Accedi alla scheda Account per collegarti e attivare questa funzionalità."/> + <accordion name="friends_accordion"> + <accordion_tab name="tab_second_life_friends" title="Amici SL"/> + <accordion_tab name="tab_suggested_friends" title="Aggiungi queste persone come amici SL"/> + </accordion> + <text name="facebook_friends_status"> + Non in collegamento con Facebook. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_facebook_photo.xml b/indra/newview/skins/default/xui/it/panel_facebook_photo.xml new file mode 100644 index 0000000000..20ec7f0a70 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_facebook_photo.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Risoluzione immagini"> + <combo_box.item label="Finestra attuale" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1200x630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtri immagini"> + <combo_box.item label="Nessun filtro" name="NoFilter"/> + </combo_box> + <button label="Aggiorna" name="new_snapshot_btn" tool_tip="Fai clic per aggiornare"/> + <button label="Anteprima" name="big_preview_btn" tool_tip="Fai clic per alternare l'anteprima"/> + <text name="caption_label"> + Commento (facoltativo): + </text> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Pubblica" name="post_photo_btn"/> + <button label="Annulla" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_facebook_place.xml b/indra/newview/skins/default/xui/it/panel_facebook_place.xml new file mode 100644 index 0000000000..297f0caccc --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_facebook_place.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_place"> + <layout_stack name="stack_place"> + <layout_panel name="place_detail_panel"> + <text name="place_caption_label"> + Racconta dove ti trovi: + </text> + </layout_panel> + <layout_panel name="place_map_panel"> + <check_box initial_value="false" label="" name="add_place_view_cb"/> + </layout_panel> + <layout_panel name="place_button_panel"> + <button label="Pubblica" name="post_place_btn"/> + <button label="Annulla" name="cancel_place_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_facebook_status.xml b/indra/newview/skins/default/xui/it/panel_facebook_status.xml new file mode 100644 index 0000000000..d373fb0717 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_facebook_status.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_status"> + <layout_stack name="stack_status"> + <layout_panel name="status_detail_panel"> + <text name="status_caption_label"> + A cosa stai pensando? + </text> + </layout_panel> + <layout_panel name="status_button_panel"> + <button label="Pubblica" name="post_status_btn"/> + <button label="Annulla" name="cancel_status_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_flickr_account.xml b/indra/newview/skins/default/xui/it/panel_flickr_account.xml new file mode 100644 index 0000000000..573754a68e --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_flickr_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_account"> + <string name="flickr_connected" value="Sei in collegamento con Flickr come:"/> + <string name="flickr_disconnected" value="Non in collegamento con Flickr"/> + <text name="account_caption_label"> + Non in collegamento con Flickr. + </text> + <panel name="panel_buttons"> + <button label="Collegamento..." name="connect_btn"/> + <button label="Interrompi collegamento" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Come pubblicare su Flickr] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_flickr_photo.xml b/indra/newview/skins/default/xui/it/panel_flickr_photo.xml new file mode 100644 index 0000000000..064c302b14 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_flickr_photo.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Risoluzione immagini"> + <combo_box.item label="Finestra attuale" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtri immagini"> + <combo_box.item label="Nessun filtro" name="NoFilter"/> + </combo_box> + <button label="Aggiorna" name="new_snapshot_btn" tool_tip="Fai clic per aggiornare"/> + <button label="Anteprima" name="big_preview_btn" tool_tip="Fai clic per alternare l'anteprima"/> + <text name="title_label"> + Titolo: + </text> + <text name="description_label"> + Descrizione: + </text> + <check_box initial_value="true" label="Includi l'ubicazione SL al termine della descrizione" name="add_location_cb"/> + <text name="tags_label"> + Tag: + </text> + <text name="tags_help_label"> + Separa tag con spazi +Usa "" per tag con più di una parola + </text> + <combo_box name="rating_combobox" tool_tip="Categoria del contenuto di Flickr"> + <combo_box.item label="Categoria Flickr Sicuro" name="SafeRating"/> + <combo_box.item label="Categoria Flickr Moderato" name="ModerateRating"/> + <combo_box.item label="Categoria Flickr Censurato" name="RestrictedRating"/> + </combo_box> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Carica" name="post_photo_btn"/> + <button label="Annulla" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/it/panel_group_bulk_ban.xml new file mode 100644 index 0000000000..f4aab7991d --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_group_bulk_ban.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Espelli residenti" name="bulk_ban_panel"> + <panel.string name="loading"> + (caricamento...) + </panel.string> + <panel.string name="ban_selection_too_large"> + Espulsioni di gruppo non inviate: troppi residenti selezionati Le espulsioni di gruppo possono includere un massimo di 100 persone per ciascuna richiesta. + </panel.string> + <panel.string name="ban_not_permitted"> + Espulsione di gruppo non inviata: non hai l'abilità 'Gestisci lista espulsi'. + </panel.string> + <panel.string name="ban_limit_fail"> + Espulsione di gruppo non inviata: il gruppo ha raggiunto il numero massimo di espulsioni consentite. + </panel.string> + <panel.string name="partial_ban"> + Alcune espulsioni di gruppo non sono state inviate: +[REASONS] + </panel.string> + <panel.string name="ban_failed"> + Le espulsioni di gruppo non sono state inviate: +[REASONS] + </panel.string> + <panel.string name="residents_already_banned"> + - I residenti seguenti sono già stati espulsi: [RESIDENTS]. + </panel.string> + <panel.string name="ban_limit_reached"> + - È stato raggiunto il numero massimo di espulsioni; i seguenti agenti non sono stati espulsi: [RESIDENTS]. + </panel.string> + <panel.string name="cant_ban_yourself"> + - Non puoi espellerti dal gruppo. + </panel.string> + <text name="help_text"> + Puoi selezionare più residenti da espellere dal gruppo. Per iniziare, fai clic su 'Apri il selettore di residenti'. + </text> + <button label="Apri il selettore di residenti" name="add_button"/> + <name_list name="banned_agent_list" tool_tip="Tieni premuto Ctrl e fai clic sui nomi dei residenti per selezionare più nomi"/> + <button label="Rimuovi i selezionati dalla lista" name="remove_button" tool_tip="Rimuove i residenti selezionati dalla lista espulsi"/> + <button label="Espelli residenti" name="ban_button"/> + <button label="Annulla" name="cancel_button"/> + <string name="GroupBulkBan"> + Espulsione di gruppo + </string> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml index 34ee3c2dca..138edc3a26 100755 --- a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml @@ -20,7 +20,7 @@ <layout_panel name="group_accordions"> <accordion name="groups_accordion"> <accordion_tab name="group_general_tab" title="Generale"/> - <accordion_tab name="group_roles_tab" title="Ruoli"/> + <accordion_tab name="group_roles_tab" title="Ruoli e membri"/> <accordion_tab name="group_notices_tab" title="Avvisi"/> <accordion_tab name="group_land_tab" title="Terra/Beni"/> </accordion> diff --git a/indra/newview/skins/default/xui/it/panel_group_invite.xml b/indra/newview/skins/default/xui/it/panel_group_invite.xml index 1b57eba3f0..01edb7391a 100755 --- a/indra/newview/skins/default/xui/it/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/it/panel_group_invite.xml @@ -22,7 +22,7 @@ Scegli che ruolo assegnare loro: </text> <combo_box name="role_name" tool_tip="Scegli dall'elenco dei ruoli ai quali ti è consentito assegnare i membri"/> - <button label="Manda gli inviti" name="ok_button"/> + <button label="Invia inviti" name="invite_button"/> <button label="Annulla" name="cancel_button"/> <string name="GroupInvitation"> Invito di gruppo diff --git a/indra/newview/skins/default/xui/it/panel_group_roles.xml b/indra/newview/skins/default/xui/it/panel_group_roles.xml index 478b35e628..4d414d47ce 100755 --- a/indra/newview/skins/default/xui/it/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/it/panel_group_roles.xml @@ -21,16 +21,18 @@ cliccando sui loro nomi. <name_list.columns label="Socio" name="name"/> <name_list.columns label="Donazioni" name="donated"/> <name_list.columns label="Stato" name="online"/> + <name_list.columns label="Titolo" name="title"/> </name_list> <button label="Invita" name="member_invite"/> <button label="Espelli" name="member_eject"/> + <button label="Espelli membri" name="member_ban"/> </panel> <panel label="RUOLI" name="roles_sub_tab"> <panel.string name="help_text"> I ruoli hanno un titolo con un elenco di abilità permesse -che i membri possono eseguire. I membri possono avere -uno o più ruoli. Un gruppo può avere fino a 10 ruoli, -fra cui il ruolo base o "Tutti" e il ruolo del Proprietario, ovvero il capogruppo. + che i membri possono eseguire. I membri possono avere + uno o più ruoli. Un gruppo può avere fino a 10 ruoli, + fra cui il ruolo 'Tutti' e il ruolo 'Proprietario', ovvero il capogruppo. </panel.string> <panel.string name="cant_delete_role"> I ruoli 'Tutti' e 'Proprietari' sono speciali e non possono essere eliminati. @@ -49,12 +51,27 @@ fra cui il ruolo base o "Tutti" e il ruolo del Proprietario, ovvero il </panel> <panel height="148" label="ABILITÀ" name="actions_sub_tab" tool_tip="Puoi vedere la descrizione dell'abilità e quali ruoli o membri possono eseguirla."> <panel.string name="help_text"> - Le abilità permettono ai membri nei ruoli di fare cose specifiche -in questo gruppo. C'è una vasta gamma di abilità. + Le abilità consentono ai membri nei ruoli di eseguire specifiche + attività nel gruppo. Ci sono vari tipi di abilità. </panel.string> <filter_editor label="Filtra Abilità" name="filter_input"/> <scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Seleziona un'abilità per vedere maggiori dettagli."/> </panel> + <panel label="RESIDENTI ESPULSI" name="banlist_sub_tab" tool_tip="Visualizza i residenti espulsi dal gruppo."> + <panel.string name="help_text"> + Nessun residente incluso nella lista espulsi potrà iscriversi al gruppo. + </panel.string> + <panel.string name="ban_count_template"> + Numero espulsi: [COUNT]/[LIMIT] + </panel.string> + <name_list name="ban_list"> + <name_list.columns label="Residente" name="name"/> + <name_list.columns label="Data espulsione" name="ban_date"/> + </name_list> + <button label="Espelli residenti" name="ban_create" tool_tip="Espelli residenti dal gruppo"/> + <button label="Annulla espulsioni" name="ban_delete" tool_tip="Annulla l'espulsione dal gruppo per i residenti selezionati"/> + <button name="ban_refresh" tool_tip="Aggiorna la lista espulsi"/> + </panel> </tab_container> <panel name="members_footer"> <text name="static"> diff --git a/indra/newview/skins/default/xui/it/panel_login.xml b/indra/newview/skins/default/xui/it/panel_login.xml index 2afde40940..1ce38ac40c 100755 --- a/indra/newview/skins/default/xui/it/panel_login.xml +++ b/indra/newview/skins/default/xui/it/panel_login.xml @@ -1,46 +1,27 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php?lang=it </panel.string> - <layout_stack name="login_widgets"> - <layout_panel name="login"> - <text name="log_in_text"> - ACCEDI - </text> - <text name="username_text"> - Nome utente: - </text> - <combo_box name="username_combo" tool_tip="Il nome utente che hai scelto durante la registrazione, come robby12 o Stella Soleggiato"/> - <text name="password_text"> - Password: - </text> - </layout_panel> - <layout_panel name="start_location_panel"> - <text name="start_location_text"> - Inizia da: - </text> - <combo_box name="start_location_combo"> - <combo_box.item label="La mia ultima ubicazione" name="MyLastLocation"/> - <combo_box.item label="Casa mia" name="MyHome"/> - <combo_box.item label="<Scrivi nome regione>" name="Typeregionname"/> - </combo_box> - </layout_panel> - <layout_panel name="links_login_panel"> - <text name="login_help"> - Ti serve aiuto con la fase di accesso? - </text> + <layout_stack name="ui_stack"> + <layout_panel name="ui_container"> + <combo_box label="Nome utente" name="username_combo" tool_tip="Il nome utente che hai scelto durante la registrazione, come roby12 o Stella Solare"/> + <line_editor label="Password" name="password_edit"/> + <check_box label="Ricordami" name="remember_check"/> <text name="forgot_password_text"> - Hai dimenticato il nome utente o la password? + Password dimenticata </text> <button label="Accedi" name="connect_btn"/> - <check_box label="Ricorda password" name="remember_check"/> - </layout_panel> - <layout_panel name="links"> - <text name="create_account_text"> - CREA IL TUO ACCOUNT + <text name="At_My_Last_Location_Label"> + all'ultima ubicazione </text> - <button label="Inizia adesso" name="create_new_account_btn"/> + <combo_box label="I miei luoghi preferiti" name="start_location_combo"> + <combo_box.item label="Casa mia" name="MyHome"/> + </combo_box> + <button label="Accedi" name="connect_favorite_btn"/> + <line_editor label="Digita un'ubicazione" name="location_edit"/> + <button label="Accedi" name="connect_location_btn"/> + <combo_box label="Seleziona griglia" name="server_combo"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_login_first.xml b/indra/newview/skins/default/xui/it/panel_login_first.xml new file mode 100644 index 0000000000..6f120a17fc --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_login_first.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_login"> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php?lang=it + </panel.string> + <layout_stack name="logo_stack"> + <layout_panel name="parent_panel2"> + <layout_stack name="widget_stack"> + <layout_panel name="widget_container"> + <combo_box label="Nome utente" name="username_combo" tool_tip="Il nome utente che hai scelto durante la registrazione, come roby12 o Stella Solare"/> + <line_editor label="Password" name="password_edit"/> + <button label="Accedi" name="connect_btn"/> + <check_box label="Ricordami" name="remember_check"/> + <text name="forgot_password_text"> + Password dimenticata + </text> + </layout_panel> + </layout_stack> + </layout_panel> + <layout_panel name="parent_panel3"> + <layout_stack name="images_stack"> + <layout_panel name="images_container"> + <text name="image_caption_left"> + Il primo passo è a Learning Island. Trova il portale di uscita! + </text> + <text name="image_caption_right"> + Quindi esplora Social Island e incontra altri nuovi residenti. + </text> + </layout_panel> + </layout_stack> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml index 224780f234..ccca27cbfd 100755 --- a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml @@ -28,4 +28,5 @@ <check_box label="Mostra selezione griglia all'accesso" name="show_grid_selection_check"/> <check_box label="Mostra menu Avanzato" name="show_advanced_menu_check"/> <check_box label="Mostra menu Sviluppatore" name="show_develop_menu_check"/> + <button label="Diritti di creazione predefiniti" name="default_creation_permissions"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_general.xml b/indra/newview/skins/default/xui/it/panel_preferences_general.xml index 45cc06c2ea..ef999d03c0 100755 --- a/indra/newview/skins/default/xui/it/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_general.xml @@ -30,14 +30,10 @@ <combo_box.item label="Generale e Moderato" name="Desired_Mature"/> <combo_box.item label="Generale" name="Desired_PG"/> </combo_box> - <text name="start_location_textbox"> - Luogo di partenza: + <check_box label="Mostra le ubicazioni preferite sulla schermata di accesso" name="favorites_on_login_check"/> + <text name="favorites_check_extra_text"> + (Le vedranno anche gli altri utenti che usano questo computer) </text> - <combo_box name="start_location_combo"> - <combo_box.item label="Ultimo luogo visitato" name="MyLastLocation" tool_tip="Vai automaticamente all'ultimo luogo visitato quando effettui l'accesso."/> - <combo_box.item label="Casa mia" name="MyHome" tool_tip="Vai automaticamente a casa quando effettui l'accesso"/> - </combo_box> - <check_box initial_value="true" label="Mostra con il login" name="show_location_checkbox"/> <text name="name_tags_textbox"> Nome: </text> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml index 241ed8f162..2a73b66c9e 100755 --- a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml @@ -7,7 +7,7 @@ <text name="cache_size_label_l"> (Luoghi, immagini, web, cronologia ricerche) </text> - <check_box label="Mostra il mio profilo info nei risultati di ricerca" name="online_searchresults"/> + <check_box label="Mostra il mio profilo nei risultati delle ricerche" name="online_searchresults"/> <check_box label="Solo amici e gruppi mi vedono online" name="online_visibility"/> <check_box label="Solo amici e gruppi possono chiamarmi o mandarmi IM" name="voice_call_friends_only_check"/> <check_box label="Spegnere il microfono alla chiusura delle chiamate" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/it/panel_region_debug.xml b/indra/newview/skins/default/xui/it/panel_region_debug.xml index aba60d03aa..88c056bf5e 100755 --- a/indra/newview/skins/default/xui/it/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/it/panel_region_debug.xml @@ -7,11 +7,8 @@ sconosciuta </text> <check_box label="Disabilita gli script" name="disable_scripts_check" tool_tip="Disabilita tutti gli script in questa regione"/> - <button label="?" name="disable_scripts_help"/> <check_box label="Disabilita le collisioni" name="disable_collisions_check" tool_tip="Disabilita tutte le collisioni non di avatar in questa regione"/> - <button label="?" name="disable_collisions_help"/> <check_box label="Disabilita la fisica" name="disable_physics_check" tool_tip="Disabilita tutta la fisica dei corpi in questa regione"/> - <button label="?" name="disable_physics_help"/> <button label="Applica" name="apply_btn"/> <text name="objret_text_lbl" width="130"> Restituisci oggetti @@ -31,10 +28,8 @@ <check_box label="In tutte le regioni di questa proprietà" name="return_estate_wide" tool_tip="Restituisci tutti gli oggetti nelle varie regioni che costituiscono l'insieme dei possedimenti terrieri"/> <button label="Restituisci" name="return_btn"/> <button label="Visualizza l'elenco dei maggiori collidenti..." name="top_colliders_btn" tool_tip="Elenco degli oggetti che stanno potenzialmente subendo le maggiori collisioni" width="280"/> - <button label="?" left="297" name="top_colliders_help"/> - <button label="Visualizza l'elenco degli script più pesanti..." name="top_scripts_btn" tool_tip="Elenco degli oggetti che impiegano più tempo a far girare gli script" width="280"/> - <button label="?" left="297" name="top_scripts_help"/> <button label="Riavvia la regione" name="restart_btn" tool_tip="Dai 2 minuti di tempo massimo e fai riavviare la regione"/> - <button label="?" name="restart_help"/> + <button label="Visualizza l'elenco degli script più pesanti..." name="top_scripts_btn" tool_tip="Elenco degli oggetti che impiegano più tempo a far girare gli script" width="280"/> <button label="Annulla riavvio" name="cancel_restart_btn" tool_tip="Annulla riavvio regione"/> + <button label="Console di debug regione" name="region_debug_console_btn" tool_tip="Apri console di debug regione"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_region_general.xml b/indra/newview/skins/default/xui/it/panel_region_general.xml index c550e005ae..3e2f593d2f 100755 --- a/indra/newview/skins/default/xui/it/panel_region_general.xml +++ b/indra/newview/skins/default/xui/it/panel_region_general.xml @@ -20,12 +20,12 @@ </text> <check_box label="Proibisci la modifica del terreno" name="block_terraform_check"/> <check_box label="Impedisci il volo" name="block_fly_check"/> + <check_box label="Blocca il volo sul lotto" name="block_fly_over_check" tool_tip="Espandi il controllo dell'accesso in alto per impedire il volo sopra un lotto"/> <check_box label="Abilita i danni" name="allow_damage_check"/> <check_box label="Limita gli urti" name="restrict_pushobject"/> <check_box label="Abilita la rivendita del terreno" name="allow_land_resell_check"/> <check_box label="Abilita unione/suddivisione del terreno" name="allow_parcel_changes_check"/> <check_box label="Proibisci che il terreno appaia nelle ricerche" name="block_parcel_search_check" tool_tip="Permetti che le persone vedano questa regione e le sue suddivisioni nei risultati delle ricerche"/> - <check_box label="Consenti oggetti con reticolo" name="mesh_rez_enabled_check" tool_tip="Permetti alle persone di rezzare oggetti con reticolo su questa regione"/> <spinner label="Limite massimo di avatar" label_width="135" name="agent_limit_spin" width="190"/> <spinner label="Bonus di oggetti" label_width="135" name="object_bonus_spin" width="190"/> <text label="Maturità" name="access_text" width="120"> diff --git a/indra/newview/skins/default/xui/it/panel_script_ed.xml b/indra/newview/skins/default/xui/it/panel_script_ed.xml index feee8b1927..3cbdadbac8 100755 --- a/indra/newview/skins/default/xui/it/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/it/panel_script_ed.xml @@ -24,6 +24,7 @@ <menu_item_call label="Annulla tutte le modifiche" name="Revert All Changes"/> <menu_item_call label="Carica da file..." name="LoadFromFile"/> <menu_item_call label="Salva su file..." name="SaveToFile"/> + <menu_item_call label="Colori..." name="Colors"/> </menu> <menu label="Modifica" name="Edit"> <menu_item_call label="Annulla" name="Undo"/> @@ -41,9 +42,9 @@ <menu_item_call label="Aiuto con parole chiave..." name="Keyword Help..."/> </menu> </menu_bar> - <text_editor name="Script Editor"> + <script_editor name="Script Editor"> Caricamento in corso... - </text_editor> + </script_editor> <combo_box label="Inserisci..." name="Insert..."/> <button label="Salva" label_selected="Salva" name="Save_btn"/> <button label="Modifica..." name="Edit_btn"/> diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_options.xml b/indra/newview/skins/default/xui/it/panel_snapshot_options.xml index f2d42c5197..a043e5add6 100755 --- a/indra/newview/skins/default/xui/it/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/it/panel_snapshot_options.xml @@ -4,4 +4,13 @@ <button label="E-mail" name="save_to_email_btn"/> <button label="Salva nell'inventario (L$[AMOUNT])" name="save_to_inventory_btn"/> <button label="Salva sul mio computer" name="save_to_computer_btn"/> + <text name="send_to_facebook_textbox"> + Invia a: [secondlife:/// Facebook] + </text> + <text name="send_to_twitter_textbox"> + [secondlife:/// Twitter] + </text> + <text name="send_to_flickr_textbox"> + [secondlife:/// Flickr] + </text> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml index 2ba4baacaf..050298ffcf 100755 --- a/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="teleport_history_item"> + <text name="timestamp" value="..."/> <button name="profile_btn" tool_tip="Mostra informazioni dell'oggetto"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_twitter_account.xml b/indra/newview/skins/default/xui/it/panel_twitter_account.xml new file mode 100644 index 0000000000..7eb3968f75 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_twitter_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_account"> + <string name="twitter_connected" value="Sei in collegamento con Twitter come:"/> + <string name="twitter_disconnected" value="Non in collegamento con Twitter"/> + <text name="account_caption_label"> + Non in collegamento con Twitter. + </text> + <panel name="panel_buttons"> + <button label="Collegamento..." name="connect_btn"/> + <button label="Interrompi collegamento" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Come pubblicare su Twitter] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_twitter_photo.xml b/indra/newview/skins/default/xui/it/panel_twitter_photo.xml new file mode 100644 index 0000000000..740ec3961f --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_twitter_photo.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="text_panel"> + <text name="status_label"> + Cosa sta succedendo? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="Includi l'ubicazione in SL" name="add_location_cb"/> + <check_box initial_value="true" label="Includi una foto" name="add_photo_cb"/> + </layout_panel> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Risoluzione immagini"> + <combo_box.item label="Finestra attuale" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtri immagini"> + <combo_box.item label="Nessun filtro" name="NoFilter"/> + </combo_box> + <button label="Aggiorna" name="new_snapshot_btn" tool_tip="Fai clic per aggiornare"/> + <button label="Anteprima" name="big_preview_btn" tool_tip="Fai clic per alternare l'anteprima"/> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Tweetta" name="post_photo_btn"/> + <button label="Annulla" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/it/role_actions.xml b/indra/newview/skins/default/xui/it/role_actions.xml index 3ccb674ed0..80d65a9c74 100755 --- a/indra/newview/skins/default/xui/it/role_actions.xml +++ b/indra/newview/skins/default/xui/it/role_actions.xml @@ -3,6 +3,7 @@ <action_set description="Queste abilità permettono di aggiungere e rimuovere membri dal gruppo e consentono ai nuovi membri di aderire al gruppo senza invito." name="Membership"> <action description="Invita persone in questo gruppo" longdescription="Invita persone in questo gruppo usando il pulsante Invita nella sezione Ruoli > scheda membri." name="member invite" value="1"/> <action description="Espelli membri da questo gruppo" longdescription="Espelli membri dal gruppo usando il pulsante Espelli nella sezione Ruoli > scheda membri. Un proprietario può espellere chiunque tranne un altro proprietario. Se non sei un proprietario, un membro può essere espulso da un gruppo soltanto qualora abbia soltanto il ruolo Tutti, e nessun altro ruolo. Per rimuovere membri dai ruoli, devi avere l'Abilità corrispondente." name="member eject" value="2"/> + <action description="Gestisci lista espulsi" longdescription="Consenti ai membri del gruppo di espellere / riammettere i residenti nel gruppo." name="allow ban" value="51"/> <action description="Seleziona Iscrizione libera e modifica la Quota d'iscrizione" longdescription="Seleziona Iscrizione libera per permettere ai nuovi membri di aderire senza invito e modifica la quota d'iscrizione nella scheda Generale." name="member options" value="3"/> </action_set> <action_set description="Queste Abilità permettono di aggiungere, rimuovere, cambiare i ruoli del gruppo, aggiungere e rimuovere membri dai ruoli, nonché assegnare abilità ai ruoli." name="Roles"> diff --git a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml index 907857bf5a..2f00a023bb 100755 --- a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml @@ -33,7 +33,7 @@ <layout_panel name="shop_btn_lp"> <button label="Acquisti" name="shop_btn" tool_tip="Apri pagina web di Marketplace"/> <button label="Indossa" name="wear_btn" tool_tip="Indossa il vestiario selezionato"/> - <button label="Riproduci" name="play_btn"/> + <button label="Gioca" name="play_btn"/> <button label="Teleport" name="teleport_btn" tool_tip="Teleport alla zona selezionata"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index 86d7f75b83..17ce8aaf5e 100755 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -34,6 +34,45 @@ <string name="StartupRequireDriverUpdate"> Inizializzazione grafica non riuscita. Aggiorna il driver della scheda grafica! </string> + <string name="AboutHeader"> + [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL]) +[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]] + </string> + <string name="AboutCompiler"> + Generato con [COMPILER] versione [COMPILER_VERSION] + </string> + <string name="AboutPosition"> + Tu sei a [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] in [REGION] che si trova a <nolink>[HOSTNAME]</nolink> ([HOSTIP]) +SLURL: <nolink>[SLURL]</nolink> +(coordinate globali [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1]) +[SERVER_VERSION] +[SERVER_RELEASE_NOTES_URL] + </string> + <string name="AboutSystem"> + CPU: [CPU] +Memoria: [MEMORY_MB] MB +Versione sistema operativo: [OS_VERSION] +Venditore scheda grafica: [GRAPHICS_CARD_VENDOR] +Scheda grafica: [GRAPHICS_CARD] + </string> + <string name="AboutDriver"> + Versione driver Windows per grafica: [GRAPHICS_DRIVER_VERSION] + </string> + <string name="AboutLibs"> + Versione OpenGL: [OPENGL_VERSION] + +Versione libcurl: [LIBCURL_VERSION] +Versione J2C Decoder: [J2C_VERSION] +Versione Driver audio: [AUDIO_DRIVER_VERSION] +Versione Qt Webkit: [QT_WEBKIT_VERSION] +Versione Server voice: [VOICE_VERSION] + </string> + <string name="AboutTraffic"> + Pacchetti perduti: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) + </string> + <string name="ErrorFetchingServerReleaseNotesURL"> + Errore nel recupero URL note rilascio versione + </string> <string name="ProgressRestoring"> Ripristino in corso... </string> @@ -293,6 +332,75 @@ Prova ad accedere nuovamente tra un minuto. <string name="TestingDisconnect"> Verifica scollegamento viewer </string> + <string name="SocialFlickrConnecting"> + Collegamento a Flickr... + </string> + <string name="SocialFlickrPosting"> + Caricamento post... + </string> + <string name="SocialFlickrDisconnecting"> + Interruzione del collegamento con Flickr... + </string> + <string name="SocialFlickrErrorConnecting"> + Problema nel collegamento a Flickr + </string> + <string name="SocialFlickrErrorPosting"> + Problema nel caricamento post su Flickr + </string> + <string name="SocialFlickrErrorDisconnecting"> + Problema nell'interruzione del collegamento da Flickr + </string> + <string name="SocialTwitterConnecting"> + Collegamento a Twitter... + </string> + <string name="SocialTwitterPosting"> + Caricamento post... + </string> + <string name="SocialTwitterDisconnecting"> + Interruzione del collegamento con Twitter... + </string> + <string name="SocialTwitterErrorConnecting"> + Problema nel collegamento a Twitter + </string> + <string name="SocialTwitterErrorPosting"> + Problema nel caricamento post su Twitter + </string> + <string name="SocialTwitterErrorDisconnecting"> + Problema nell'interruzione del collegamento da Twitter + </string> + <string name="BlackAndWhite"> + Bianco e nero + </string> + <string name="Colors1970"> + Colori anni '70 + </string> + <string name="Intense"> + Intenso + </string> + <string name="Newspaper"> + Giornale + </string> + <string name="Sepia"> + Seppia + </string> + <string name="Spotlight"> + Faretto + </string> + <string name="Video"> + Video + </string> + <string name="Autocontrast"> + Auto contrasto + </string> + <string name="LensFlare"> + Bagliore + </string> + <string name="Miniature"> + Miniatura + </string> + <string name="Toycamera"> + Toy camera + </string> <string name="TooltipPerson"> Persona </string> @@ -841,6 +949,12 @@ Prova ad accedere nuovamente tra un minuto. <string name="use_texture"> Usa texture </string> + <string name="manip_hint1"> + Sposta il cursore sul righello + </string> + <string name="manip_hint2"> + per bloccare sulla griglia + </string> <string name="texture_loading"> Caricamento in corso... </string> @@ -931,12 +1045,12 @@ Prova ad accedere nuovamente tra un minuto. <string name="ControlYourCamera"> Controllare la tua fotocamera </string> - <string name="AgentNameSubst"> - (Tu) - </string> <string name="TeleportYourAgent"> Teleportarti </string> + <string name="AgentNameSubst"> + (Tu) + </string> <string name="JoinAnExperience"> Partecipa a un'esperienza </string> @@ -1261,8 +1375,7 @@ Prova ad accedere nuovamente tra un minuto. <string name="InventoryInboxNoItems"> Gli acquissti dal mercato verranno mostrati qui. Potrai quindi trascinarli nel tuo inventario per usarli. </string> - <string name="Unconstrained">Libero</string> - <string name="MarketplaceURL"> + <string name="MarketplaceURL"> https://marketplace.[MARKETPLACE_DOMAIN_NAME]/ </string> <string name="MarketplaceURL_CreateStore"> @@ -1291,6 +1404,18 @@ Prova ad accedere nuovamente tra un minuto. <string name="InventoryOutboxNoItems"> Trascina le cartelle in questa area e clicca su "Invia a Marketplace" per metterle in vendita su [[MARKETPLACE_DASHBOARD_URL] Marketplace]. </string> + <string name="InventoryOutboxInitializingTitle"> + Inizializzazione Marketplace.in corso + </string> + <string name="InventoryOutboxInitializing"> + Stiamo eseguendo l'accesso al tuo account sul [[MARKETPLACE_CREATE_STORE_URL] negozio Marketplace]. + </string> + <string name="InventoryOutboxErrorTitle"> + Errori in Marketplace. + </string> + <string name="InventoryOutboxError"> + Il [[MARKETPLACE_CREATE_STORE_URL] negozio nel Marketplace] ha riportato errori. + </string> <string name="Marketplace Error None"> Nessun errore </string> @@ -1318,6 +1443,9 @@ Prova ad accedere nuovamente tra un minuto. <string name="Open landmarks"> Apri luoghi di riferimento </string> + <string name="Unconstrained"> + Libero + </string> <string name="no_transfer" value="(nessun trasferimento)"/> <string name="no_modify" value="(nessuna modifica)"/> <string name="no_copy" value="(nessuna copia)"/> @@ -1712,6 +1840,9 @@ Prova ad accedere nuovamente tra un minuto. <string name="CompileQueueDownloadedCompiling"> Scaricato, in compilazione </string> + <string name="CompileQueueServiceUnavailable"> + Il servizio di compilazione degli script non è disponibile + </string> <string name="CompileQueueScriptNotFound"> Script non trovato sul server. </string> @@ -3940,6 +4071,12 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="conference-title-incoming"> Chiamata in conferenza con [AGENT_NAME] </string> + <string name="flickr_post_success"> + Hai pubblicato su Flickr. + </string> + <string name="twitter_post_success"> + Hai pubblicato su Twitter. + </string> <string name="no_session_message"> (La sessione IM non esiste) </string> @@ -4396,6 +4533,9 @@ Segnala abuso <string name="LocalEstimateUSD"> US$ [AMOUNT] </string> + <string name="Group Ban"> + Espulsione di gruppo + </string> <string name="Membership"> Abbonamento </string> @@ -4818,6 +4958,12 @@ Prova a racchiudere il percorso dell'editor in doppie virgolette. <string name="Command_Destinations_Label"> Destinazioni </string> + <string name="Command_Facebook_Label"> + Facebook + </string> + <string name="Command_Flickr_Label"> + Flickr + </string> <string name="Command_Gestures_Label"> Gesture </string> @@ -4866,6 +5012,9 @@ Prova a racchiudere il percorso dell'editor in doppie virgolette. <string name="Command_Speak_Label"> Parla </string> + <string name="Command_Twitter_Label"> + Twitter + </string> <string name="Command_View_Label"> Controlli fotocamera </string> @@ -4896,6 +5045,12 @@ Prova a racchiudere il percorso dell'editor in doppie virgolette. <string name="Command_Destinations_Tooltip"> Destinazioni interessanti </string> + <string name="Command_Facebook_Tooltip"> + Pubblica su Facebook + </string> + <string name="Command_Flickr_Tooltip"> + Carica su Flickr + </string> <string name="Command_Gestures_Tooltip"> Gesti per il tuo avatar </string> @@ -4944,6 +5099,9 @@ Prova a racchiudere il percorso dell'editor in doppie virgolette. <string name="Command_Speak_Tooltip"> Parla con persone vicine usando il microfono </string> + <string name="Command_Twitter_Tooltip"> + Twitter + </string> <string name="Command_View_Tooltip"> Modifica angolo fotocamera </string> diff --git a/indra/newview/skins/default/xui/ja/floater_big_preview.xml b/indra/newview/skins/default/xui/ja/floater_big_preview.xml new file mode 100644 index 0000000000..bb55db7a13 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_big_preview.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_big_preview" title="プレビュー"/> diff --git a/indra/newview/skins/default/xui/ja/floater_facebook.xml b/indra/newview/skins/default/xui/ja/floater_facebook.xml new file mode 100644 index 0000000000..d99841f0de --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_facebook.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_facebook" title="FACEBOOK に投稿"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="ステータス" name="panel_facebook_status"/> + <panel label="写真" name="panel_facebook_photo"/> + <panel label="チェックイン" name="panel_facebook_place"/> + <panel label="フレンド" name="panel_facebook_friends"/> + <panel label="アカウント" name="panel_facebook_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + エラー + </text> + <text name="connection_loading_text"> + ロード中... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_flickr.xml b/indra/newview/skins/default/xui/ja/floater_flickr.xml new file mode 100644 index 0000000000..e406d17d37 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_flickr.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_flickr" title="FLICKR にアップロード"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="写真" name="panel_flickr_photo"/> + <panel label="アカウント" name="panel_flickr_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + エラー + </text> + <text name="connection_loading_text"> + ロード中... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_lagmeter.xml b/indra/newview/skins/default/xui/ja/floater_lagmeter.xml new file mode 100644 index 0000000000..e3546cd837 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_lagmeter.xml @@ -0,0 +1,151 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_lagmeter" title="ラグメーター"> + <floater.string name="max_title_msg"> + ラグ メーター + </floater.string> + <floater.string name="max_width_px"> + 350 + </floater.string> + <floater.string name="min_title_msg"> + ラグ + </floater.string> + <floater.string name="min_width_px"> + 90 + </floater.string> + <floater.string name="client_text_msg"> + クライアント + </floater.string> + <floater.string name="client_frame_rate_critical_fps"> + 10 + </floater.string> + <floater.string name="client_frame_rate_warning_fps"> + 15 + </floater.string> + <floater.string name="client_frame_time_window_bg_msg"> + ノーマル、ウィンドウは背景に + </floater.string> + <floater.string name="client_frame_time_critical_msg"> + クライアント フレームレート < [CLIENT_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="client_frame_time_warning_msg"> + クライアント フレームレート: [CLIENT_FRAME_RATE_CRITICAL] ~ [CLIENT_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="client_frame_time_normal_msg"> + ノーマル + </floater.string> + <floater.string name="client_draw_distance_cause_msg"> + 考えられる原因: 描画距離の設定が大きすぎる + </floater.string> + <floater.string name="client_texture_loading_cause_msg"> + 考えられる原因: 画像のロード中 + </floater.string> + <floater.string name="client_texture_memory_cause_msg"> + 考えられる原因: メモリ内の画像数が多すぎる + </floater.string> + <floater.string name="client_complex_objects_cause_msg"> + 考えられる原因: 画面に含まれる複雑なオブジェクトが多すぎる + </floater.string> + <floater.string name="network_text_msg"> + ネットワーク + </floater.string> + <floater.string name="network_packet_loss_critical_pct"> + 10 + </floater.string> + <floater.string name="network_packet_loss_warning_pct"> + 5 + </floater.string> + <floater.string name="network_packet_loss_critical_msg"> + 接続でドロップされるパケットの割合: > [NETWORK_PACKET_LOSS_CRITICAL] + </floater.string> + <floater.string name="network_packet_loss_warning_msg"> + 接続でドロップされるパケットの割合:[NETWORK_PACKET_LOSS_WARNING] ~ [NETWORK_PACKET_LOSS_CRITICAL] + </floater.string> + <floater.string name="network_performance_normal_msg"> + ノーマル + </floater.string> + <floater.string name="network_ping_critical_ms"> + 600 + </floater.string> + <floater.string name="network_ping_warning_ms"> + 300 + </floater.string> + <floater.string name="network_ping_critical_msg"> + 接続の ping 時間: > [NETWORK_PING_CRITICAL] ミリ秒 + </floater.string> + <floater.string name="network_ping_warning_msg"> + 接続の ping 時間: [NETWORK_PING_WARNING] ~ [NETWORK_PING_CRITICAL] ミリ秒 + </floater.string> + <floater.string name="network_packet_loss_cause_msg"> + 接続不良になっているか、帯域幅設定が高すぎます。 + </floater.string> + <floater.string name="network_ping_cause_msg"> + 接続不良になっているか、ファイル共有アプリケーションに問題があります。 + </floater.string> + <floater.string name="server_text_msg"> + サーバー + </floater.string> + <floater.string name="server_frame_rate_critical_fps"> + 20 + </floater.string> + <floater.string name="server_frame_rate_warning_fps"> + 30 + </floater.string> + <floater.string name="server_single_process_max_time_ms"> + 20 + </floater.string> + <floater.string name="server_frame_time_critical_msg"> + シミュレーターのフレームレート: < [SERVER_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="server_frame_time_warning_msg"> + シミュレーターのフレームレート: [SERVER_FRAME_RATE_CRITICAL] ~ [SERVER_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="server_frame_time_normal_msg"> + ノーマル + </floater.string> + <floater.string name="server_physics_cause_msg"> + 考えられる原因: 物理的オブジェクトが多すぎる + </floater.string> + <floater.string name="server_scripts_cause_msg"> + 考えられる原因: スクリプトを含むオブジェクトが多すぎる + </floater.string> + <floater.string name="server_net_cause_msg"> + 考えられる原因: ネットワーク トラフィック過大 + </floater.string> + <floater.string name="server_agent_cause_msg"> + 考えられる原因: 地域内にて動いているアバターが多すぎる + </floater.string> + <floater.string name="server_images_cause_msg"> + 考えられる原因: 画像計算が多すぎる + </floater.string> + <floater.string name="server_generic_cause_msg"> + 考えられる原因: シミュレーターの過負荷 + </floater.string> + <floater.string name="smaller_label"> + >> + </floater.string> + <floater.string name="bigger_label"> + << + </floater.string> + <button name="client_lagmeter" tool_tip="クライアント ラグ ステータス"/> + <text name="client"> + クライアント + </text> + <text name="client_text"> + ノーマル + </text> + <button name="network_lagmeter" tool_tip="ネットワーク ラグ ステータス"/> + <text name="network"> + ネットワーク + </text> + <text name="network_text"> + ノーマル + </text> + <button name="server_lagmeter" tool_tip="サーバー ラグ ステータス"/> + <text name="server"> + サーバー + </text> + <text name="server_text"> + ノーマル + </text> + <button label=">> " name="minimize" tool_tip="フローターのサイズをトグル"/> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_perms_default.xml b/indra/newview/skins/default/xui/ja/floater_perms_default.xml new file mode 100644 index 0000000000..1eac6b9e35 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_perms_default.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="perms default" title="デフォルトの作成権限"> + <panel label="デフォルト権限" name="default permissions"/> + <button label="OK" label_selected="OK" name="ok"/> + <button label="取り消し" label_selected="取り消し" name="cancel"/> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_region_restarting.xml b/indra/newview/skins/default/xui/ja/floater_region_restarting.xml new file mode 100644 index 0000000000..e9ba9d230d --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_region_restarting.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="region_restarting" title="リージョンの再起動"> + <string name="RegionName"> + 今 ([NAME]) がいるリージョンを再起動しようとしています。 + +このままここにいるとログアウトされます。 + </string> + <string name="RestartSeconds"> + 再起動までの秒数 +[SECONDS] + </string> + <panel name="layout_panel_1"> + <text name="region_name"> + 今 (-最長リージョン名-) がいるリージョンを再起動しようとしています。 + +このままここにいるとログアウトされます。 + </text> + <text name="restart_seconds"> + 再起動までの秒数 + 32767 + </text> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml index dc34441535..9021be5dda 100755 --- a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml @@ -44,7 +44,7 @@ <combo_box.item label="年齢 > 成人の住人が Teen Second Life にいる" name="Age__Adult_resident_on_Teen_Second_Life"/> <combo_box.item label="年齢 > 未成年の住人がTeen Second Life の外にいる" name="Age__Underage_resident_outside_of_Teen_Second_Life"/> <combo_box.item label="攻撃>コンバット・サンドボックス/危険なエリア" name="Assault__Combat_sandbox___unsafe_area"/> - <combo_box.item label="攻撃>安全なエリア" name="Assault__Safe_area"/> + <combo_box.item label="攻撃 > 安全エリアで他の住人を銃撃、プッシュ、または突き飛ばす" name="Assault__Safe_area"/> <combo_box.item label="攻撃>武器テスト用サンドボックス" name="Assault__Weapons_testing_sandbox"/> <combo_box.item label="商取引>製品またはサービスの提供が行われない" name="Commerce__Failure_to_deliver_product_or_service"/> <combo_box.item label="開示>リアルワールドの情報" name="Disclosure__Real_world_information"/> @@ -58,25 +58,25 @@ <combo_box.item label="詐欺> L$" name="Fraud__L$"/> <combo_box.item label="詐欺>土地" name="Fraud__Land"/> <combo_box.item label="詐欺>マルチ商法またはチェーンメール" name="Fraud__Pyramid_scheme_or_chain_letter"/> - <combo_box.item label="詐欺> US$" name="Fraud__US$"/> + <combo_box.item label="詐欺 > リンデンドルまたは米ドル" name="Fraud__US$"/> <combo_box.item label="嫌がらせ>広告委託/視覚的なスパム" name="Harassment__Advert_farms___visual_spam"/> <combo_box.item label="嫌がらせ>個人またはグループの中傷" name="Harassment__Defaming_individuals_or_groups"/> <combo_box.item label="嫌がらせ>移動の妨害" name="Harassment__Impeding_movement"/> <combo_box.item label="嫌がらせ>性的な嫌がらせ" name="Harassment__Sexual_harassment"/> - <combo_box.item label="嫌がらせ>利用規約(ToS)に違反する行為を行うよう他者を勧誘/扇動" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> + <combo_box.item label="ハラスメント > 対象者を定めて嫌がらせを目的とした行為" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> <combo_box.item label="嫌がらせ>暴言" name="Harassment__Verbal_abuse"/> <combo_box.item label="わいせつ>著しく不快であると見なされるコンテンツまたは行為" name="Indecency__Broadly_offensive_content_or_conduct"/> <combo_box.item label="わいせつ>不適切なアバター名" name="Indecency__Inappropriate_avatar_name"/> - <combo_box.item label="わいせつ>PG地域での不適切なコンテンツまたは行為" name="Indecency__Mature_content_in_PG_region"/> + <combo_box.item label="わいせつ > 地域(リージョン)のレーティング区分に対して不適切なコンテンツまたは行為" name="Indecency__Mature_content_in_PG_region"/> <combo_box.item label="わいせつ > 「Moderate」指定の地域での不適切なコンテンツまたは行為" name="Indecency__Inappropriate_content_in_Mature_region"/> <combo_box.item label="知的財産の侵害>コンテンツの撤去" name="Intellectual_property_infringement_Content_Removal"/> <combo_box.item label="知的財産の侵害>コピーBot及び権限の悪用" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/> <combo_box.item label="不寛容" name="Intolerance"/> <combo_box.item label="土地>サンドボックスのリソースの乱用" name="Land__Abuse_of_sandbox_resources"/> - <combo_box.item label="土地>不法侵入>オブジェクト/テクスチャー" name="Land__Encroachment__Objects_textures"/> + <combo_box.item label="土地 > 不法侵入 > オブジェクトまたはテクスチャ" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="土地>不法侵入>パーティクル" name="Land__Encroachment__Particles"/> <combo_box.item label="土地>不法侵入>樹木/植物" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="賭け/ギャンブル" name="Wagering_gambling"/> + <combo_box.item label="賭けまたはギャンブル" name="Wagering_gambling"/> <combo_box.item label="その他" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/ja/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/ja/floater_scene_load_stats.xml new file mode 100644 index 0000000000..f6edce026f --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_scene_load_stats.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Scene Load Statistics" title="シーン ロード統計情報"> + <button label="一時停止" name="playpause"/> + <scroll_container name="statistics_scroll"> + <container_view name="statistics_view"> + <stat_view label="ベーシック" name="basic"> + <stat_bar label="フレーム ピクセル差" name="frame difference"/> + <stat_bar label="UDP データを受け取りました" name="bandwidth"/> + <stat_bar label="パケットロス" name="packet_loss"/> + </stat_view> + <stat_view label="アドバンス" name="advanced"> + <stat_view label="描画" name="render"> + <stat_bar label="オブジェクト合計" name="objs"/> + <stat_bar label="新規オブジェクト" name="newobjs"/> + <stat_bar label="オブジェクト キャッシュ ヒット率" name="object_cache_hits"/> + </stat_view> + <stat_view label="テクスチャ" name="texture"> + <stat_bar label="キャッシュ ヒット率" name="texture_cache_hits"/> + <stat_bar label="キャッシュ読み込み遅延" name="texture_cache_read_latency"/> + <stat_bar label="カウント" name="numimagesstat"/> + <stat_bar label="Raw カウント" name="numrawimagesstat"/> + </stat_view> + <stat_view label="ネットワーク" name="network"> + <stat_bar label="パケットイン" name="packetsinstat"/> + <stat_bar label="パケットアウト" name="packetsoutstat"/> + <stat_bar label="オブジェクト" name="objectdatareceived"/> + <stat_bar label="テクスチャ" name="texturedatareceived"/> + <stat_bar label="資産" name="assetudpdatareceived"/> + <stat_bar label="レイヤー" name="layersdatareceived"/> + <stat_bar label="実際の受信" name="messagedatain"/> + <stat_bar label="実際の送信" name="messagedataout"/> + <stat_bar label="VFS 保留中の操作" name="vfspendingoperations"/> + </stat_view> + </stat_view> + <stat_view label="シミュレーター" name="sim"> + <stat_bar label="オブジェクト" name="simobjects"/> + <stat_bar label="アクティブなオブジェクト" name="simactiveobjects"/> + <stat_bar label="アクティブなスクリプト" name="simactivescripts"/> + <stat_bar label="パケットイン" name="siminpps"/> + <stat_bar label="パケットアウト" name="simoutpps"/> + <stat_bar label="保留中のダウンロード" name="simpendingdownloads"/> + <stat_bar label="保留中のアップロード" name="simpendinguploads"/> + <stat_bar label="未送信バイト合計" name="simtotalunackedbytes"/> + <stat_view label="時間(ms)" name="simperf"> + <stat_bar label="フレーム時間合計" name="simframemsec"/> + <stat_bar label="総時間数" name="simnetmsec"/> + <stat_bar label="物理的作用時間" name="simsimphysicsmsec"/> + <stat_bar label="シミュレーション時間" name="simsimothermsec"/> + <stat_bar label="エージェント時間" name="simagentmsec"/> + <stat_bar label="イメージ時間" name="simimagesmsec"/> + <stat_bar label="スクリプト時間" name="simscriptmsec"/> + <stat_bar label="余暇" name="simsparemsec"/> + <stat_view label="時間の詳細(ms)" name="timedetails"> + <stat_bar label="物理効果の単位" name="simsimphysicsstepmsec"/> + <stat_bar label="物理形状を更新" name="simsimphysicsshapeupdatemsec"/> + <stat_bar label="他の物理効果" name="simsimphysicsothermsec"/> + <stat_bar label="スリープ時間" name="simsleepmsec"/> + <stat_bar label="ポンプ I/O" name="simpumpiomsec"/> + </stat_view> + </stat_view> + </stat_view> + </container_view> + </scroll_container> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/ja/floater_script_ed_prefs.xml new file mode 100644 index 0000000000..3a90e673ae --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_script_ed_prefs.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_script_colors" title="スクリプトの色"> + <text name="color_pickers_label"> + 希望の色を選択: + </text> + <text name="text_label"> + テキスト + </text> + <text name="cursor_label"> + カーソル + </text> + <text name="background_label"> + 背景 + </text> + <text name="datatype_label"> + データ型 + </text> + <text name="event_label"> + イベント + </text> + <text name="string_literal_label"> + 文字列リテラル + </text> + <text name="constant_label"> + 定数 + </text> + <text name="flow_control_label"> + フロー制御 + </text> + <text name="function_label"> + 関数 + </text> + <text name="comment_label"> + コメント + </text> + <script_editor name="Script Preview"> + /* サンプル スクリプト */ +default +{ +state_entry() + { +// コメント +string greeting = "こんにちは"; +llSay(PUBLIC_CHANNEL, greeting); + } +} + </script_editor> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_snapshot.xml b/indra/newview/skins/default/xui/ja/floater_snapshot.xml index f145a2e8b8..7d0fb27932 100755 --- a/indra/newview/skins/default/xui/ja/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/ja/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="スナップショットのプレビュー"> +<floater name="Snapshot" title="スナップショット"> <floater.string name="unknown"> 不明 </floater.string> @@ -61,5 +61,11 @@ <check_box label="HUD" name="hud_check"/> <check_box label="画面全体を静止" name="freeze_frame_check"/> <check_box label="自動更新" name="auto_snapshot_check"/> + <text name="filter_list_label"> + フィルター: + </text> + <combo_box name="filters_combobox" tool_tip="画像フィルター"> + <combo_box.item label="フィルターなし" name="NoFilter"/> + </combo_box> </panel> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_stats.xml b/indra/newview/skins/default/xui/ja/floater_stats.xml index 1922e4841a..3bc343639b 100755 --- a/indra/newview/skins/default/xui/ja/floater_stats.xml +++ b/indra/newview/skins/default/xui/ja/floater_stats.xml @@ -4,17 +4,21 @@ <container_view name="statistics_view"> <stat_view label="ベーシック" name="basic"> <stat_bar label="FPS" name="fps"/> - <stat_bar label="帯域幅" name="bandwidth"/> + <stat_bar label="UDP データを受け取りました" name="bandwidth"/> <stat_bar label="パケットロス" name="packet_loss"/> <stat_bar label="Pingシム" name="ping"/> </stat_view> <stat_view label="アドバンス" name="advanced"> <stat_view label="描画" name="render"> - <stat_bar label="フレームごとの KTris 描画" name="ktrisframe"/> - <stat_bar label="秒ごとの KTris 描画" name="ktrissec"/> - <stat_bar label="オブジェクト合計" name="objs"/> + <stat_bar label="KTris (フレームごと)" name="ktrisframe"/> + <stat_bar label="KTris (秒ごと)" name="ktrissec"/> + <stat_bar label="オブジェクト合計" name="totalobjs"/> + <stat_bar label="キャッシュされたオブジェクト" name="cachedobjs"/> <stat_bar label="新規オブジェクト" name="newobjs"/> <stat_bar label="オブジェクトキャッシュヒット率" name="object_cache_hits"/> + <stat_bar label="閉鎖クエリ実行" name="occlusion_queries"/> + <stat_bar label="閉鎖オブジェクト" name="occluded"/> + <stat_bar label="非閉鎖オブジェクト" name="unoccluded"/> </stat_view> <stat_view label="テクスチャ" name="texture"> <stat_bar label="キャッシュヒット率" name="texture_cache_hits"/> @@ -26,15 +30,32 @@ <stat_bar label="Raw メモリ" name="rawmemstat"/> <stat_bar label="統合メモリ" name="glboundmemstat"/> </stat_view> + <stat_view label="メモリ使用量" name="memory"> + <stat_bar label="LLTrace" name="LLTrace"/> + <stat_bar label="UI" name="LLView"/> + <stat_bar label="フォント" name="LLFontFreetype"/> + <stat_bar label="インベントリ" name="LLInventoryObject"/> + <stat_bar label="ビューワ オブジェクト" name="LLViewerObject"/> + <stat_bar label="Octree グループ データ" name="LLViewerOctreeGroup"/> + <stat_bar label="Octree データ" name="LLViewerOctreeEntry"/> + <stat_bar label="ビューワ オブジェクト キャッシュ" name="LLVOCacheEntry"/> + <stat_bar label="描画可能オブジェクト" name="LLDrawable"/> + <stat_bar label="顔データ" name="LLFace"/> + <stat_bar label="描画情報" name="LLDrawInfo"/> + <stat_bar label="テクスチャ データ" name="LLTexture"/> + <stat_bar label="画像データ" name="LLImage"/> + <stat_bar label="GL 画像データ" name="LLImageGL"/> + <stat_bar label="頂点バッファ" name="LLVertexBuffer"/> + </stat_view> <stat_view label="ネットワーク" name="network"> <stat_bar label="パケットイン" name="packetsinstat"/> <stat_bar label="パケットアウト" name="packetsoutstat"/> - <stat_bar label="オブジェクト" name="objectkbitstat"/> - <stat_bar label="テクスチャ" name="texturekbitstat"/> - <stat_bar label="アセット" name="assetkbitstat"/> - <stat_bar label="レイヤー" name="layerskbitstat"/> - <stat_bar label="実際の受信" name="actualinkbitstat"/> - <stat_bar label="実際の送信" name="actualoutkbitstat"/> + <stat_bar label="オブジェクト" name="objectdatareceived"/> + <stat_bar label="テクスチャ" name="texturedatareceived"/> + <stat_bar label="資産" name="assetudpdatareceived"/> + <stat_bar label="レイヤー" name="layersdatareceived"/> + <stat_bar label="実際の受信" name="messagedatain"/> + <stat_bar label="実際の送信" name="messagedataout"/> <stat_bar label="VFS 保留中の操作" name="vfspendingoperations"/> </stat_view> </stat_view> @@ -64,8 +85,8 @@ <stat_bar label="パケットアウト" name="simoutpps"/> <stat_bar label="保留中のダウンロード" name="simpendingdownloads"/> <stat_bar label="保留中のアップロード" name="simpendinguploads"/> - <stat_bar label="未送信バイト合計" name="simtotalunackedbytes"/> - <stat_view label="時間(ms)" name="simperf"> + <stat_bar label="合計未承認データ" name="simtotalunackedbytes"/> + <stat_view label="時間" name="simperf"> <stat_bar label="フレーム時間合計" name="simframemsec"/> <stat_bar label="総時間数" name="simnetmsec"/> <stat_bar label="物理的作用時間" name="simsimphysicsmsec"/> @@ -74,7 +95,7 @@ <stat_bar label="イメージ時間" name="simimagesmsec"/> <stat_bar label="スクリプト時間" name="simscriptmsec"/> <stat_bar label="余暇" name="simsparemsec"/> - <stat_view label="時間の詳細(ms)" name="timedetails"> + <stat_view label="時間の詳細" name="timedetails"> <stat_bar label="物理効果の単位" name="simsimphysicsstepmsec"/> <stat_bar label="物理形状を更新" name="simsimphysicsshapeupdatemsec"/> <stat_bar label="他の物理効果" name="simsimphysicsothermsec"/> diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml index 5511433ae3..eeaa361649 100755 --- a/indra/newview/skins/default/xui/ja/floater_tools.xml +++ b/indra/newview/skins/default/xui/ja/floater_tools.xml @@ -72,7 +72,7 @@ <check_box label="リンク部分を編集" name="checkbox edit linked parts"/> <button label="リンク" name="link_btn"/> <button label="リンクを外す" name="unlink_btn"/> - <check_box label="" name="checkbox uniform"/> + <check_box label="両側を引き伸ばす" name="checkbox uniform"/> <text label="両側を延ばす" name="checkbox uniform label"> 両側を延ばす </text> diff --git a/indra/newview/skins/default/xui/ja/floater_twitter.xml b/indra/newview/skins/default/xui/ja/floater_twitter.xml new file mode 100644 index 0000000000..7cd71df800 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_twitter.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_twitter" title="TWITTER"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="作成" name="panel_twitter_photo"/> + <panel label="アカウント" name="panel_twitter_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + エラー + </text> + <text name="connection_loading_text"> + ロード中... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml index b04f602134..80ce080e39 100755 --- a/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml @@ -2,6 +2,7 @@ <menu name="Avatar Icon Menu"> <menu_item_call label="プロフィールの表示" name="Show Profile"/> <menu_item_call label="IMを送信..." name="Send IM"/> + <menu_item_call label="テレポートをリクエスト" name="Request Teleport"/> <menu_item_call label="フレンドを追加..." name="Add Friend"/> <menu_item_call label="フレンドを削除..." name="Remove Friend"/> </menu> diff --git a/indra/newview/skins/default/xui/ja/menu_conversation.xml b/indra/newview/skins/default/xui/ja/menu_conversation.xml index 66940471da..0de6a5f22f 100644 --- a/indra/newview/skins/default/xui/ja/menu_conversation.xml +++ b/indra/newview/skins/default/xui/ja/menu_conversation.xml @@ -29,4 +29,5 @@ <menu_item_call label="全員の音声をミュートする" name="ModerateVoiceMute"/> <menu_item_call label="全員のミュートを解除する" name="ModerateVoiceUnmute"/> </context_menu> + <menu_item_call label="メンバーを立入禁止" name="BanMember"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml index 106b09453a..8d6c983aa7 100755 --- a/indra/newview/skins/default/xui/ja/menu_inventory.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml @@ -70,6 +70,7 @@ <menu_item_call label="再生する" name="Sound Play"/> <menu_item_call label="SLurl をコピー" name="url_copy"/> <menu_item_call label="ランドマークの情報" name="About Landmark"/> + <menu_item_call label="地図に表示" name="show_on_map"/> <menu_item_call label="インワールドで再生する" name="Animation Play"/> <menu_item_call label="ローカルで再生する" name="Animation Audition"/> <menu_item_call label="インスタントメッセージを送信する" name="Send Instant Message"/> diff --git a/indra/newview/skins/default/xui/ja/menu_login.xml b/indra/newview/skins/default/xui/ja/menu_login.xml index 3918732fa8..cd8bd52f91 100755 --- a/indra/newview/skins/default/xui/ja/menu_login.xml +++ b/indra/newview/skins/default/xui/ja/menu_login.xml @@ -5,7 +5,15 @@ <menu_item_call label="[APP_NAME] を終了" name="Quit"/> </menu> <menu label="ヘルプ" name="Help"> - <menu_item_call label="[SECOND_LIFE] ヘルプ" name="Second Life Help"/> + <menu_item_call label="ハウツー..." name="How To"/> + <menu_item_call label="クイックスタート" name="Quickstart"/> + <menu_item_call label="ナレッジベース" name="Knowledge Base"/> + <menu_item_call label="Wiki" name="Wiki"/> + <menu_item_call label="コミュニティ フォーラム" name="Community Forums"/> + <menu_item_call label="日本語サポートページ" name="Support portal"/> + <menu_item_call label="[SECOND_LIFE] ニュース" name="Second Life News"/> + <menu_item_call label="[SECOND_LIFE] ブログ" name="Second Life Blogs"/> + <menu_item_call label="バグを報告する" name="Report Bug"/> <menu_item_call label="[APP_NAME] について" name="About Second Life"/> </menu> <menu_item_check label="デバッグメニューを表示する" name="Show Debug Menu"/> diff --git a/indra/newview/skins/default/xui/ja/menu_object.xml b/indra/newview/skins/default/xui/ja/menu_object.xml index 39c32bc41e..ae02edefe2 100755 --- a/indra/newview/skins/default/xui/ja/menu_object.xml +++ b/indra/newview/skins/default/xui/ja/menu_object.xml @@ -21,6 +21,7 @@ <context_menu label="管理" name="Remove"> <menu_item_call label="嫌がらせの報告" name="Report Abuse..."/> <menu_item_call label="ブロック" name="Object Mute"/> + <menu_item_call label="ブロック解除" name="Object Unmute"/> <menu_item_call label="返却" name="Return..."/> </context_menu> <menu_item_call label="取る" name="Pie Object Take"/> diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml index 66bc32214f..61642048b8 100755 --- a/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml @@ -2,5 +2,5 @@ <context_menu name="Teleport History Item Context Menu"> <menu_item_call label="テレポート" name="Teleport"/> <menu_item_call label="もっと詳しく" name="More Information"/> - <menu_item_call label="クリップボードにコピー" name="CopyToClipboard"/> + <menu_item_call label="SLurl をコピー" name="CopyToClipboard"/> </context_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index b1ec62115c..4e6c6808c6 100755 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -36,6 +36,9 @@ <menu_item_check label="近くのチャット..." name="Nearby Chat"/> <menu_item_check label="話す" name="Speak"/> <menu_item_check label="会話ログ..." name="Conversation Log..."/> + <menu_item_call label="Facebook..." name="Facebook"/> + <menu_item_call label="Twitter..." name="Twitter"/> + <menu_item_call label="Flickr..." name="Flickr"/> <menu label="ボイスモーフィング" name="VoiceMorphing"> <menu_item_check label="ボイスモーフィングなし" name="NoVoiceMorphing"/> <menu_item_check label="プレビュー..." name="Preview"/> @@ -72,11 +75,11 @@ <menu_item_check label="アドバンスメニュー" name="Show Advanced Menu"/> </menu> <menu label="太陽" name="Sun"> - <menu_item_call label="日の出" name="Sunrise"/> - <menu_item_call label="正午" name="Noon"/> - <menu_item_call label="日没" name="Sunset"/> - <menu_item_call label="真夜中" name="Midnight"/> - <menu_item_call label="リージョンの設定を使用" name="Use Region Settings"/> + <menu_item_check label="日の出" name="Sunrise"/> + <menu_item_check label="正午" name="Noon"/> + <menu_item_check label="日没" name="Sunset"/> + <menu_item_check label="真夜中" name="Midnight"/> + <menu_item_check label="リージョンの設定を使用" name="Use Region Settings"/> </menu> <menu label="自然環境エディター" name="Environment Editor"> <menu_item_call label="自然環境の設定..." name="Environment Settings"/> @@ -150,7 +153,8 @@ <menu_item_check label="グリッドポイントにスナップする" name="Snap to Grid"/> <menu_item_call label="オブジェクトの XY 軸をグリッドにスナップする" name="Snap Object XY to Grid"/> <menu_item_call label="選択をグリッドに使用する" name="Use Selection for Grid"/> - <menu_item_call label="グリッドオプション" name="Grid Options"/> + <menu_item_call label="グリッドオプション..." name="Grid Options"/> + <menu_item_call label="デフォルト権限の設定..." name="Set default permissions"/> </menu> <menu label="アップロード" name="Upload"> <menu_item_call label="画像(L$[COST])..." name="Upload Image"/> @@ -158,15 +162,12 @@ <menu_item_call label="アニメーション(L$[COST])..." name="Upload Animation"/> <menu_item_call label="モデル" name="Upload Model"/> <menu_item_call label="一括 (ファイルにつきL$[COST])..." name="Bulk Upload"/> - <menu_item_call label="デフォルトのアップロード権限を設定" name="perm prefs"/> </menu> <menu_item_call label="元に戻す" name="Undo"/> <menu_item_call label="やり直し" name="Redo"/> </menu> <menu label="ヘルプ" name="Help"> <menu_item_call label="ハウツー..." name="How To"/> - <menu_item_call label="[SECOND_LIFE] ヘルプ" name="Second Life Help"/> - <menu_item_call label="ユーザーガイド" name="User’s guide"/> <menu_item_call label="ナレッジベース" name="Knowledge Base"/> <menu_item_call label="Wiki" name="Wiki"/> <menu_item_call label="コミュニティフォーラム" name="Community Forums"/> @@ -188,6 +189,7 @@ <menu label="パフォーマンスツール" name="Performance Tools"> <menu_item_call label="ラグ計測器" name="Lag Meter"/> <menu_item_check label="統計バー" name="Statistics Bar"/> + <menu_item_call label="シーン ロード統計情報" name="Scene Load Statistics"/> <menu_item_check label="アバターの描画ウェイトを表示" name="Avatar Rendering Cost"/> </menu> <menu label="ハイライトと目に見えるもの" name="Highlighting and Visibility"> @@ -250,6 +252,7 @@ <menu_item_check label="ファーストタイマー" name="Fast Timers"/> <menu_item_check label="メモリ" name="Memory"/> <menu_item_check label="風景の統計" name="Scene Statistics"/> + <menu_item_check label="シーン ローディング モニター" name="Scene Loading Monitor"/> <menu_item_call label="テクスチャ取得デバッグコンソール" name="Texture Fetch Debug Console"/> <menu_item_call label="リージョン情報をデバッグコンソールへ" name="Region Info to Debug Console"/> <menu_item_call label="グループ情報をデバッグコンソールへ" name="Group Info to Debug Console"/> @@ -286,6 +289,7 @@ <menu_item_check label="定期的に遅いフレームを挿入する" name="Periodic Slow Frame"/> <menu_item_check label="フレームテスト" name="Frame Test"/> <menu_item_call label="フレームプロフィール" name="Frame Profile"/> + <menu_item_call label="ベンチマーク" name="Benchmark"/> </menu> <menu label="メタデータのレンダー" name="Render Metadata"> <menu_item_check label="バウンディングボックス" name="Bounding Boxes"/> @@ -303,7 +307,9 @@ <menu_item_check label="LOD 情報" name="LOD Info"/> <menu_item_check label="制作キュー" name="Build Queue"/> <menu_item_check label="光" name="Lights"/> + <menu_item_check label="パーティクル" name="Particles"/> <menu_item_check label="骨組みの衝突判定" name="Collision Skeleton"/> + <menu_item_check label="ジョイント" name="Joints"/> <menu_item_check label="レイキャスト" name="Raycast"/> <menu_item_check label="風のベクトル" name="Wind Vectors"/> <menu_item_check label="描画の詳細度" name="rendercomplexity"/> @@ -336,6 +342,7 @@ <menu_item_check label="装着された光源を描画する" name="Render Attached Lights"/> <menu_item_check label="取り付けられたパーティクルを描画する" name="Render Attached Particles"/> <menu_item_check label="マウスオーバーで強調表示する" name="Hover Glow Objects"/> + <menu_item_call label="キャッシュをすぐにクリア" name="Cache Clear"/> </menu> <menu label="ネットワーク" name="Network"> <menu_item_check label="エージェントを一時停止する" name="AgentPause"/> @@ -368,7 +375,6 @@ <menu_item_call label="フォーカスホールダーをダンプ" name="Dump Focus Holder"/> <menu_item_call label="選択したオブジェクト情報をプリント" name="Print Selected Object Info"/> <menu_item_call label="エージェント情報をプリント" name="Print Agent Info"/> - <menu_item_check label="地域デバッグコンソール" name="Region Debug Console"/> <menu_item_check label="SelectMgr のデバッグ" name="Debug SelectMgr"/> <menu_item_check label="ダブルクリック" name="Debug Clicks"/> <menu_item_check label="デバッグ表示" name="Debug Views"/> diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index f1c916bf53..1d52b42039 100755 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -113,13 +113,13 @@ <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="OutboxImportFailed"> - 転送に失敗 + '[ERROR_CODE]' エラーで転送できませんでした システムまたはネットワークのエラーのため、フォルダはマーケットプレイスに送信されませんでした。後でもう一度お試しください。 <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="OutboxInitFailed"> - マーケットプレイスの初期化に失敗 + '[ERROR_CODE]' エラーでマーケットプレイスを初期化できませんでした システムまたはネットワークのエラーのため、マーケットプレイスの初期化に失敗しました。後でもう一度お試しください。 <usetemplate name="okbutton" yestext="OK"/> @@ -221,6 +221,22 @@ この能力を [ROLE_NAME] に割り当てますか? <usetemplate name="okcancelbuttons" notext="いいえ" yestext="はい"/> </notification> + <notification name="AssignBanAbilityWarning"> + 役割 '[ROLE_NAME]' に能力 '[ACTION_NAME]' を追加しようとしています。 + +*警告* +この能力を持つ役割のメンバーにも能力 '[ACTION_NAME_2]' と '[ACTION_NAME_3]' が許可されます + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="RemoveBanAbilityWarning"> + 役割 '[ROLE_NAME]' から能力 '[ACTION_NAME]' を削除しようとしています。 + +*警告* +この能力を削除しても能力 '[ACTION_NAME_2]' と '[ACTION_NAME_3]' は削除されません。 + +これらの能力をこの役割に許可しない場合は、すぐに削除してください! + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="EjectGroupMemberWarning"> [AVATAR_NAME] をグループから追放しようとしています。 <usetemplate ignoretext="グループからの参加者の追放を確認します" name="okcancelignore" notext="取り消し" yestext="追放"/> @@ -1614,6 +1630,14 @@ http://secondlife.com/download から最新バージョンをダウンロード グループを抜けることができません。グループの最後のオーナーであるため、グループを抜けることができません。最初に、別のメンバーをオーナーの役割に割り当ててください。 <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="GroupDepartError"> + グループを抜けることができません: [reason]。 + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="GroupDepart"> + グループ [group_name] を抜けました。 + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="ConfirmKick"> 本当に住人全員をグリッドから追い出しますか? <usetemplate name="okcancelbuttons" notext="キャンセル" yestext="住人全員を追い出す"/> @@ -1768,6 +1792,10 @@ http://wiki.secondlife.com/wiki/Setting_your_display_name を参照してくだ このまま <nolink>[LOCATION]</nolink> にテレポートしますか? <usetemplate ignoretext="ランドマークにテレポートしたいかどうかの確認" name="okcancelignore" notext="キャンセル" yestext="テレポート"/> </notification> + <notification name="TeleportViaSLAPP"> + このまま <nolink>[LOCATION]</nolink> にテレポートしますか? + <usetemplate ignoretext="SLAPP でテレポートすることを確認" name="okcancelignore" notext="取り消し" yestext="テレポート"/> + </notification> <notification name="TeleportToPick"> [PICK] にテレポートしますか? <usetemplate ignoretext="ピックの場所にテレポートしたいかどうかの確認" name="okcancelignore" notext="キャンセル" yestext="テレポート"/> @@ -1979,6 +2007,9 @@ http://wiki.secondlife.com/wiki/Setting_your_display_name を参照してくだ 新しい不動産マネージャーの追加に関する問題: いずれかの不動産のマネージャーリストが満杯になっています。 </notification> + <notification name="ProblemAddingEstateBanManager"> + 不動産所有者または管理者を禁止リストに追加できません。 + </notification> <notification name="ProblemAddingEstateGeneric"> 不動産リストの追加に関する問題: いずれかの不動産のリストが満杯になっています。 @@ -2500,6 +2531,12 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ <notification name="SystemMessage"> [MESSAGE] </notification> + <notification name="FlickrConnect"> + [MESSAGE] + </notification> + <notification name="TwitterConnect"> + [MESSAGE] + </notification> <notification name="PaymentReceived"> [MESSAGE] </notification> @@ -3072,9 +3109,9 @@ M キーを押して変更します。 <nolink>[ITEMS]</nolink> -次の住人と共有しますか? +次の住人と共有: -[RESIDENTS] +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/> </notification> <notification name="ShareFolderConfirmation"> @@ -3086,7 +3123,7 @@ M キーを押して変更します。 次の住人と共有: -[RESIDENTS] +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="取り消し" yestext="Ok"/> </notification> <notification name="ItemsShared"> @@ -3541,10 +3578,6 @@ M キーを押して変更します。 <notification name="EjectComingSoon"> ここへの入場が許可されていないため、[EJECT_TIME] 秒後に追放されます。 </notification> - <notification name="NoEnterServerFull"> - サーバーが埋まっているため、 -このリージョンに入場することはできません。 - </notification> <notification name="SaveBackToInvDisabled"> 「「持ち物」に保存」が無効になっています。 </notification> @@ -3729,6 +3762,9 @@ M キーを押して変更します。 <notification name="LinkFailedTooMuchPhysics"> オブジェクトが使用している物理リソースが多すぎたため、ダイナミックスが無効にされました。 </notification> + <notification name="EstateManagerFailedllTeleportHome"> + [SLURL] のオブジェクト '[OBJECT_NAME]' で不動産マネージャーのホームをテレポートできません。 + </notification> <notification name="TeleportedHomeByObjectOnParcel"> 区画 '[PARCEL_NAME]' のオブジェクト '[OBJECT_NAME]' によって、あなたはホームにテレポートされました。 </notification> @@ -3919,13 +3955,18 @@ M キーを押して変更します。 選択範囲のリース区画の数が少ないため、参加できません。 </notification> <notification name="CantDivideLandMultipleParcelsSelected"> - 土地を分割できません。\n区画が複数選択されています。\nもっと小さい土地を選択してみてください。 + 土地を分割できません。 +複数の区画が選択されました。 +小さい区画を選択してください。 </notification> <notification name="CantDivideLandCantFindParcel"> - 土地を分解できません。\n区画が見つかりません。\n「Help」>「Reprt Bug...」でレポートを行ってください。 + 土地を分割できません。 +区画が見つかりません。 +「ヘルプ」 -> 「バグの報告」で報告してください。 </notification> <notification name="CantDivideLandWholeParcelSelected"> - 土地を分割できません。区画全体を選択します。\n小さい土地を選択してみてください。 + 土地を分割できません。区画全体が選択されています。 +小さい区画を選択してください。 </notification> <notification name="LandHasBeenDivided"> 土地が分割されています。 @@ -4065,4 +4106,12 @@ M キーを押して変更します。 ファイルを移動できません。以前のパスがリストアされました。 <usetemplate ignoretext="ファイルを移動できません。以前のパスがリストアされました。" name="okignore" yestext="OK"/> </notification> + <notification name="DefaultObjectPermissions"> + 次の理由により、デフォルト権限を保存するときに問題がありました: [REASON]。後でデフォルト権限を設定してください。 + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="ChatHistoryIsBusyAlert"> + チャット履歴ファイルが前の操作でビジーです。2、3 分経ってからもう一度試すか、別の人とのチャットを選択してください。 + <usetemplate name="okbutton" yestext="OK"/> + </notification> </notifications> diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_account.xml b/indra/newview/skins/default/xui/ja/panel_facebook_account.xml new file mode 100644 index 0000000000..5269e5a2da --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_facebook_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_account"> + <string name="facebook_connected" value="次のユーザーとして Facebook に接続:"/> + <string name="facebook_disconnected" value="Facebook に接続していません"/> + <text name="account_caption_label"> + Facebook に接続していません。 + </text> + <panel name="panel_buttons"> + <button label="接続..." name="connect_btn"/> + <button label="切断" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Facebook への投稿について] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_friends.xml b/indra/newview/skins/default/xui/ja/panel_facebook_friends.xml new file mode 100644 index 0000000000..18ae4f9295 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_facebook_friends.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_friends"> + <string name="facebook_friends_empty" value="Second Life の住人にもなっている Facebook の友だちがいません。今すぐ Facebook の友だちに Second Life に参加してもらいましょう!"/> + <string name="facebook_friends_no_connected" value="現在 Facebook に接続されていません。「アカウント」タブに進んで、この機能を有効にしてください。"/> + <accordion name="friends_accordion"> + <accordion_tab name="tab_second_life_friends" title="SL の友だち"/> + <accordion_tab name="tab_suggested_friends" title="これらの人を SL の友だちとして追加"/> + </accordion> + <text name="facebook_friends_status"> + Facebook に接続していません。 + </text> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_photo.xml b/indra/newview/skins/default/xui/ja/panel_facebook_photo.xml new file mode 100644 index 0000000000..f6d920bd5e --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_facebook_photo.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="画像解像度"> + <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1200x630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="画像フィルター"> + <combo_box.item label="フィルターなし" name="NoFilter"/> + </combo_box> + <button label="更新" name="new_snapshot_btn" tool_tip="クリックして更新"/> + <button label="プレビュー" name="big_preview_btn" tool_tip="クリックしてプレビューを切り替える"/> + <text name="caption_label"> + コメント (オプション): + </text> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="投稿" name="post_photo_btn"/> + <button label="取り消し" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_place.xml b/indra/newview/skins/default/xui/ja/panel_facebook_place.xml new file mode 100644 index 0000000000..e29f69101f --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_facebook_place.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_place"> + <layout_stack name="stack_place"> + <layout_panel name="place_detail_panel"> + <text name="place_caption_label"> + 自分がいる場所について何か言ってください: + </text> + </layout_panel> + <layout_panel name="place_map_panel"> + <check_box initial_value="false" label="" name="add_place_view_cb"/> + </layout_panel> + <layout_panel name="place_button_panel"> + <button label="投稿" name="post_place_btn"/> + <button label="取り消し" name="cancel_place_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_status.xml b/indra/newview/skins/default/xui/ja/panel_facebook_status.xml new file mode 100644 index 0000000000..84e5ae0474 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_facebook_status.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_status"> + <layout_stack name="stack_status"> + <layout_panel name="status_detail_panel"> + <text name="status_caption_label"> + 今、何を考えている? + </text> + </layout_panel> + <layout_panel name="status_button_panel"> + <button label="投稿" name="post_status_btn"/> + <button label="取り消し" name="cancel_status_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_flickr_account.xml b/indra/newview/skins/default/xui/ja/panel_flickr_account.xml new file mode 100644 index 0000000000..bd2e96d58c --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_flickr_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_account"> + <string name="flickr_connected" value="次のユーザーとして Flickr に接続:"/> + <string name="flickr_disconnected" value="Flickr に接続していない"/> + <text name="account_caption_label"> + Flickr に接続していません。 + </text> + <panel name="panel_buttons"> + <button label="接続..." name="connect_btn"/> + <button label="切断" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Flickr への投稿について] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_flickr_photo.xml b/indra/newview/skins/default/xui/ja/panel_flickr_photo.xml new file mode 100644 index 0000000000..0deadad91d --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_flickr_photo.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="画像解像度"> + <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="画像フィルター"> + <combo_box.item label="フィルターなし" name="NoFilter"/> + </combo_box> + <button label="更新" name="new_snapshot_btn" tool_tip="クリックして更新"/> + <button label="プレビュー" name="big_preview_btn" tool_tip="クリックしてプレビューを切り替える"/> + <text name="title_label"> + タイトル: + </text> + <text name="description_label"> + 説明: + </text> + <check_box initial_value="true" label="SL の場所を説明の最後に含める" name="add_location_cb"/> + <text name="tags_label"> + タグ: + </text> + <text name="tags_help_label"> + タグをスペースで区切る +複数単語のタグに "" を使用 + </text> + <combo_box name="rating_combobox" tool_tip="Flickr コンテンツのレーティング区分"> + <combo_box.item label="Flickr レーティング区分「Safe」" name="SafeRating"/> + <combo_box.item label="Flickr レーティング区分「Moderate」" name="ModerateRating"/> + <combo_box.item label="Flickr レーティング区分「Restricted」" name="RestrictedRating"/> + </combo_box> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="アップロード" name="post_photo_btn"/> + <button label="取り消し" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/ja/panel_group_bulk_ban.xml new file mode 100644 index 0000000000..343db03030 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_group_bulk_ban.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="住人を立入禁止" name="bulk_ban_panel"> + <panel.string name="loading"> + (ロード中...) + </panel.string> + <panel.string name="ban_selection_too_large"> + グループへの立入禁止が送信されていません: 選択した住人が多すぎます。グループへの立入禁止の数は 1 リクエスト当たり 100 人に制限されています。 + </panel.string> + <panel.string name="ban_not_permitted"> + グループへの立入禁止が送信されていません: 「立入禁止リストの管理」の能力がありません。 + </panel.string> + <panel.string name="ban_limit_fail"> + グループへの立入禁止が送信されていません: グループへの立入禁止の登録許容数に達しました。 + </panel.string> + <panel.string name="partial_ban"> + グループへの立入禁止の一部が送信されませんでした: [REASONS] + </panel.string> + <panel.string name="ban_failed"> + グループへの立入禁止が送信されませんでした: [REASONS] + </panel.string> + <panel.string name="residents_already_banned"> + - 次の住民は既に立入禁止にされています: [RESIDENTS]。 + </panel.string> + <panel.string name="ban_limit_reached"> + - 立入禁止の許容値に達しました。次のエージェントは立入禁止にされません: [RESIDENTS]。 + </panel.string> + <panel.string name="cant_ban_yourself"> + - グループから自分自身を立入禁止にすることはできません。 + </panel.string> + <text name="help_text"> + グループから一度に複数の住人を立入禁止にすることができます。「リストから住人を選択」をクリックしてください。 + </text> + <button label="リストから住人を選択" name="add_button"/> + <name_list name="banned_agent_list" tool_tip="Ctrl キーを押しながら複数の住人をクリックできます"/> + <button label="選択した住人をリストから削除" name="remove_button" tool_tip="立入禁止リストから上で選択した住人を削除します"/> + <button label="住人を立入禁止" name="ban_button"/> + <button label="取り消し" name="cancel_button"/> + <string name="GroupBulkBan"> + グループへの立入禁止 + </string> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml index 7aa1aec6d0..ebcb36d950 100755 --- a/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="グループインベントリ" name="GroupInfo"> <panel.string name="default_needs_apply_text"> 保存していない変更があります @@ -20,7 +20,7 @@ <layout_panel name="group_accordions"> <accordion name="groups_accordion"> <accordion_tab name="group_general_tab" title="一般"/> - <accordion_tab name="group_roles_tab" title="役割"/> + <accordion_tab name="group_roles_tab" title="役割 & メンバー"/> <accordion_tab name="group_notices_tab" title="通知"/> <accordion_tab name="group_land_tab" title="土地・資産"/> </accordion> diff --git a/indra/newview/skins/default/xui/ja/panel_group_invite.xml b/indra/newview/skins/default/xui/ja/panel_group_invite.xml index cc9ebc405b..2639454a01 100755 --- a/indra/newview/skins/default/xui/ja/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_invite.xml @@ -22,7 +22,7 @@ 割り当て先の役割を選択: </text> <combo_box name="role_name" tool_tip="メンバーに割り当てたい役割をリストから選んください"/> - <button label="招待を送信" name="ok_button"/> + <button label="招待状を送信" name="invite_button"/> <button label="取り消し" name="cancel_button"/> <string name="GroupInvitation"> グループへの招待 diff --git a/indra/newview/skins/default/xui/ja/panel_group_roles.xml b/indra/newview/skins/default/xui/ja/panel_group_roles.xml index d40dedf566..0e231b5b4f 100755 --- a/indra/newview/skins/default/xui/ja/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_roles.xml @@ -21,15 +21,17 @@ Ctrl キーを押しながらメンバー名をクリックすると <name_list.columns label="メンバー" name="name"/> <name_list.columns label="寄付" name="donated"/> <name_list.columns label="ステータス" name="online"/> + <name_list.columns label="職名" name="title"/> </name_list> <button label="招待" name="member_invite"/> <button label="追放" name="member_eject"/> + <button label="メンバーの立入禁止" name="member_ban"/> </panel> <panel label="役割" name="roles_sub_tab"> <panel.string name="help_text"> 役割には、タイトルと許可された能力が -割り当てられています。 メンバーは -1つ以上の役割を持つことができます。 グループで使える役割は10つまでで、 +割り当てられています。メンバーは +1つ以上の役割を持つことができます。グループで使える役割は10つまでで、 「全員(Everyone)」と「オーナー(Owner)」がそれに含まれています。 </panel.string> <panel.string name="cant_delete_role"> @@ -55,14 +57,29 @@ Ctrl キーを押しながらメンバー名をクリックすると </panel> <panel label="能力" name="actions_sub_tab" tool_tip="能力の説明文には、どの役割・メンバーがその能力を持つかが書かれています。"> <panel.string name="help_text"> - このグループ内で役割を与えられているメンバーが実行できる操作は、 -能力によって決まります。 さまざまな能力が用意されています。 + 役割に含まれたメンバーに、このグループで特定の +活動を行うことを許可する能力。さまざまな能力が提供されます。 </panel.string> <filter_editor label="能力を選別" name="filter_input"/> <scroll_list name="action_list" tool_tip="詳細を見るには、能力を選んでください。"> <scroll_list.columns label="" name="action"/> </scroll_list> </panel> + <panel label="立入禁止にされた住人" name="banlist_sub_tab" tool_tip="このグループから立ち入り禁止にされた住人を表示します。"> + <panel.string name="help_text"> + 立入禁止リストに登録された住人はグループに参加できません。 + </panel.string> + <panel.string name="ban_count_template"> + 立入禁止の人数: [COUNT]/[LIMIT] + </panel.string> + <name_list name="ban_list"> + <name_list.columns label="住人" name="name"/> + <name_list.columns label="立入禁止にされた日付" name="ban_date"/> + </name_list> + <button label="住人の立入禁止" name="ban_create" tool_tip="グループから住人を立入禁止にする"/> + <button label="立入禁止の解除" name="ban_delete" tool_tip="選択した住人のグループへの立ち入り禁止を解除"/> + <button name="ban_refresh" tool_tip="立入禁止リストの更新"/> + </panel> </tab_container> <panel name="members_footer"> <text name="static"> diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml index 396d9e65b1..c5d5330eb4 100755 --- a/indra/newview/skins/default/xui/ja/panel_login.xml +++ b/indra/newview/skins/default/xui/ja/panel_login.xml @@ -1,46 +1,27 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php?lang=ja </panel.string> - <layout_stack name="login_widgets"> - <layout_panel name="login"> - <text name="log_in_text"> - ログイン - </text> - <text name="username_text"> - ユーザーネーム: + <layout_stack name="ui_stack"> + <layout_panel name="ui_container"> + <combo_box label="ユーザー名" name="username_combo" tool_tip="登録時に自分で選んだユーザー名(例:bobsmith12、Steller Sunshineなど)"/> + <line_editor label="パスワード" name="password_edit"/> + <check_box label="記憶する" name="remember_check"/> + <text name="forgot_password_text"> + パスワードを忘れた場合 </text> - <combo_box name="username_combo" tool_tip="登録時に自分で選んだユーザー名(例:bobsmith12、Steller Sunshineなど)"/> - <text name="password_text"> - パスワード: + <button label="ログイン" name="connect_btn"/> + <text name="At_My_Last_Location_Label"> + 前回の場所 </text> - </layout_panel> - <layout_panel name="start_location_panel"> - <text name="start_location_text"> - 開始地点: - </text> - <combo_box name="start_location_combo"> - <combo_box.item label="最後にログアウトした場所" name="MyLastLocation"/> + <combo_box label="お気に入りの場所" name="start_location_combo"> <combo_box.item label="ホーム" name="MyHome"/> - <combo_box.item label="<地域名を入力>" name="Typeregionname"/> </combo_box> - </layout_panel> - <layout_panel name="links_login_panel"> - <text name="login_help"> - ログインの方法 - </text> - <text name="forgot_password_text"> - ユーザー名またはパスワードをお忘れですか? - </text> - <button label="ログイン" left_pad="30" name="connect_btn" width="60"/> - <check_box label="パスワードを記憶" name="remember_check"/> - </layout_panel> - <layout_panel name="links"> - <text name="create_account_text"> - アカウントを作成してください - </text> - <button label="今すぐ開始" name="create_new_account_btn"/> + <button label="ログイン" name="connect_favorite_btn"/> + <line_editor label="場所を入力" name="location_edit"/> + <button label="ログイン" name="connect_location_btn"/> + <combo_box label="グリッドを選択" name="server_combo"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_login_first.xml b/indra/newview/skins/default/xui/ja/panel_login_first.xml new file mode 100644 index 0000000000..d350e2f9a2 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_login_first.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_login"> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php?lang=ja + </panel.string> + <layout_stack name="logo_stack"> + <layout_panel name="parent_panel2"> + <layout_stack name="widget_stack"> + <layout_panel name="widget_container"> + <combo_box label="ユーザー名" name="username_combo" tool_tip="登録時に自分で選んだユーザー名(例:bobsmith12、Steller Sunshineなど)"/> + <line_editor label="パスワード" name="password_edit"/> + <button label="ログイン" name="connect_btn"/> + <check_box label="記憶する" name="remember_check"/> + <text name="forgot_password_text"> + パスワードを忘れた場合 + </text> + </layout_panel> + </layout_stack> + </layout_panel> + <layout_panel name="parent_panel3"> + <layout_stack name="images_stack"> + <layout_panel name="images_container"> + <text name="image_caption_left"> + 最初のステップは、アイランドについて学ぶことです。さあ、アイランド探検の入口を見つけてください! + </text> + <text name="image_caption_right"> + ソーシャル アイランドを探検して、他の新しい住人を探してください! + </text> + </layout_panel> + </layout_stack> + </layout_panel> + </layout_stack> +</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 dcaa23fee5..6e8797ec5e 100755 --- a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml @@ -28,4 +28,5 @@ <check_box label="ログイン時にグリッド選択を表示" name="show_grid_selection_check"/> <check_box label="アドバンスメニューを表示" name="show_advanced_menu_check"/> <check_box label="デベロッパーメニューを表示" name="show_develop_menu_check"/> + <button label="デフォルト作成許可" name="default_creation_permissions"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml index d70af7e099..39bc05c845 100755 --- a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml @@ -30,14 +30,10 @@ <combo_box.item label="General と Moderate" name="Desired_Mature"/> <combo_box.item label="General" name="Desired_PG"/> </combo_box> - <text name="start_location_textbox"> - ログイン位置: + <check_box label="ログイン画面にお気に入りの場所を表示" name="favorites_on_login_check"/> + <text name="favorites_check_extra_text"> + (このコンピュータを使用する他の人にも表示されます) </text> - <combo_box name="start_location_combo"> - <combo_box.item label="最後にログアウトした場所" name="MyLastLocation" tool_tip="常に最後にいた場所にログイン"/> - <combo_box.item label="ホーム" name="MyHome" tool_tip="常にホーム(自宅)にログイン"/> - </combo_box> - <check_box initial_value="true" label="ログイン画面に表示する" name="show_location_checkbox"/> <text name="name_tags_textbox"> 名前の表示: </text> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml index 3787f390e4..2db6a688f3 100755 --- a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml @@ -7,7 +7,7 @@ <text name="cache_size_label_l"> (位置、画像、web、検索履歴) </text> - <check_box label="検索結果に自分のプロフィール情報を表示する" name="online_searchresults"/> + <check_box label="プロフィールを検索結果に表示する" name="online_searchresults"/> <check_box label="私のオンライン状態を確認できるのは、フレンドとグループだけ" name="online_visibility"/> <check_box label="フレンドとグループ以外からはコールと IM を受信しない" name="voice_call_friends_only_check"/> <check_box label="コールが終了したら自動的にマイクのスイッチを切る" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/ja/panel_region_debug.xml b/indra/newview/skins/default/xui/ja/panel_region_debug.xml index 169da27ce5..908af3d66a 100755 --- a/indra/newview/skins/default/xui/ja/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_debug.xml @@ -7,11 +7,8 @@ 未知 </text> <check_box label="スクリプト無効化" name="disable_scripts_check" tool_tip="この地域のスクリプトをすべて無効にします"/> - <button label="?" name="disable_scripts_help"/> <check_box label="衝突を無効化" name="disable_collisions_check" tool_tip="この地域の非アバター衝突を無効にします"/> - <button label="?" name="disable_collisions_help"/> <check_box label="物理作用を無効化" name="disable_physics_check" tool_tip="この地域の物理作用をすべて無効にします"/> - <button label="?" name="disable_physics_help"/> <button label="適用" name="apply_btn"/> <text name="objret_text_lbl" width="120"> オブジェクトの返却 @@ -31,10 +28,8 @@ <check_box label="この不動産に属するすべてのリージョンのもの" name="return_estate_wide" tool_tip="この不動産に含まれているすべての地域のオブジェクトを返却します"/> <button label="返却" name="return_btn"/> <button label="上部コライダー取得" name="top_colliders_btn" tool_tip="衝突する可能性が最も高いオブジェクトのリスト"/> - <button label="?" name="top_colliders_help"/> - <button label="上部スクリプト取得" name="top_scripts_btn" tool_tip="スクリプトの実行に最も時間を費やしているオブジェクトのリスト"/> - <button label="?" name="top_scripts_help"/> <button label="地域再起動" name="restart_btn" tool_tip="2分間のカウントダウン後、地域を再起動します"/> - <button label="?" name="restart_help"/> + <button label="上部スクリプト取得" name="top_scripts_btn" tool_tip="スクリプトの実行に最も時間を費やしているオブジェクトのリスト"/> <button label="再起動をキャンセル" name="cancel_restart_btn" tool_tip="リージョンの再起動をキャンセル"/> + <button label="地域デバッグコンソール" name="region_debug_console_btn" tool_tip="地域デバッグコンソールを開く"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_region_general.xml b/indra/newview/skins/default/xui/ja/panel_region_general.xml index 65148cf1ee..d23007dc6b 100755 --- a/indra/newview/skins/default/xui/ja/panel_region_general.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_general.xml @@ -20,12 +20,12 @@ </text> <check_box label="地形編集をブロック" name="block_terraform_check"/> <check_box label="飛行をブロック" name="block_fly_check"/> + <check_box label="区画の飛行をブロック" name="block_fly_over_check" tool_tip="アクセス チェックを上方向に拡大し、区画を超える飛行を防ぎます"/> <check_box label="ダメージを許可" name="allow_damage_check"/> <check_box label="プッシュを制限" name="restrict_pushobject"/> <check_box label="土地の再販を許可" name="allow_land_resell_check"/> <check_box label="土地の統合・分割を許可" name="allow_parcel_changes_check"/> <check_box label="土地の検索表示をブロック" name="block_parcel_search_check" tool_tip="検索結果で、この地域と区画を表示するかどうかの設定です"/> - <check_box label="メッシュオブジェクトを許可" name="mesh_rez_enabled_check" tool_tip="このリージョンでメッシュオブジェクトの Rez を許可する"/> <spinner label="アバター数上限" name="agent_limit_spin"/> <spinner label="物体ボーナス" name="object_bonus_spin"/> <text label="成人指定" name="access_text"> diff --git a/indra/newview/skins/default/xui/ja/panel_script_ed.xml b/indra/newview/skins/default/xui/ja/panel_script_ed.xml index b6d51085eb..3aa20d0a3c 100755 --- a/indra/newview/skins/default/xui/ja/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/ja/panel_script_ed.xml @@ -24,6 +24,7 @@ <menu_item_call label="変更を元に戻す" name="Revert All Changes"/> <menu_item_call label="ファイルからロード..." name="LoadFromFile"/> <menu_item_call label="ファイルに保存..." name="SaveToFile"/> + <menu_item_call label="色..." name="Colors"/> </menu> <menu label="編集" name="Edit"> <menu_item_call label="元に戻す" name="Undo"/> @@ -41,9 +42,9 @@ <menu_item_call label="キーワードヘルプ..." name="Keyword Help..."/> </menu> </menu_bar> - <text_editor name="Script Editor"> + <script_editor name="Script Editor"> ローディング... - </text_editor> + </script_editor> <combo_box label="挿入..." name="Insert..."/> <button label="保存" label_selected="保存" name="Save_btn"/> <button label="編集..." name="Edit_btn"/> diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml index c3b1cd91e7..6ce492476b 100755 --- a/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml @@ -1,7 +1,16 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_snapshot_options"> <button label="プロフィールフィードに投稿する" name="save_to_profile_btn"/> <button label="メール" name="save_to_email_btn"/> <button label="インベントリに保存(L$[Amount])" name="save_to_inventory_btn"/> <button label="コンピューターに保存" name="save_to_computer_btn"/> + <text name="send_to_facebook_textbox"> + 宛先: [secondlife:/// Facebook] + </text> + <text name="send_to_twitter_textbox"> + [secondlife:/// Twitter] + </text> + <text name="send_to_flickr_textbox"> + [secondlife:/// Flickr] + </text> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/ja/panel_teleport_history_item.xml index c570cd5696..0340bfe754 100755 --- a/indra/newview/skins/default/xui/ja/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/ja/panel_teleport_history_item.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="teleport_history_item"> <text name="region" value="..."/> + <text name="timestamp" value="..."/> <button name="profile_btn" tool_tip="アイテム情報を表示"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_twitter_account.xml b/indra/newview/skins/default/xui/ja/panel_twitter_account.xml new file mode 100644 index 0000000000..b140b7463f --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_twitter_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_account"> + <string name="twitter_connected" value="次のユーザーとして Twitter に接続:"/> + <string name="twitter_disconnected" value="Twitter に接続していない"/> + <text name="account_caption_label"> + Twitter に接続していません。 + </text> + <panel name="panel_buttons"> + <button label="接続..." name="connect_btn"/> + <button label="切断" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Twitter への投稿について] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_twitter_photo.xml b/indra/newview/skins/default/xui/ja/panel_twitter_photo.xml new file mode 100644 index 0000000000..8e67d8fd19 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_twitter_photo.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="text_panel"> + <text name="status_label"> + 何が起きているのでしょうか? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="SL の場所を含む" name="add_location_cb"/> + <check_box initial_value="true" label="写真を掲載する" name="add_photo_cb"/> + </layout_panel> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="画像解像度"> + <combo_box.item label="現在のウィンドウ" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="画像フィルター"> + <combo_box.item label="フィルターなし" name="NoFilter"/> + </combo_box> + <button label="更新" name="new_snapshot_btn" tool_tip="クリックして更新"/> + <button label="プレビュー" name="big_preview_btn" tool_tip="クリックしてプレビューを切り替える"/> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="ツイート" name="post_photo_btn"/> + <button label="取り消し" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/ja/role_actions.xml b/indra/newview/skins/default/xui/ja/role_actions.xml index 5c2e18df03..e64460470c 100755 --- a/indra/newview/skins/default/xui/ja/role_actions.xml +++ b/indra/newview/skins/default/xui/ja/role_actions.xml @@ -3,6 +3,7 @@ <action_set description="これらの能力には、グループメンバーを追加、排除し、招待状なしに新メンバーの参加を認める権限が含まれます。" name="Membership"> <action description="このグループに人を招待" longdescription="「役割」セクションの「メンバー」タブ内にある「招待」ボタンを押して、このグループにメンバーを招待します。" name="member invite" value="1"/> <action description="メンバーをこのグループから追放" longdescription="「役割」セクションの「メンバー」タブ内にある「追放」ボタンを押して、このグループからメンバーを追放します。 「オーナー」は、他の「オーナー」以外は誰でも追放できます。 「オーナー」ではない人が「全員(Everyone)」にしか役割がない場合、メンバーはグループから追放されることがあります。 「役割」からメンバーを削除するには、「役割からメンバーを削除」の能力が与えられている必要があります。" name="member eject" value="2"/> + <action description="立入禁止リストの管理" longdescription="グループのメンバーに、このグループから住人を立入禁止/立入禁止解除できるようにします。" name="allow ban" value="51"/> <action description="「自由参加」と「入会費」の切り替え" longdescription="「自由参加」に切り替えると、招待されなくても新しいメンバーが入会できます。「入会費」は「一般」セクションで変更します。" name="member options" value="3"/> </action_set> <action_set description="これらの能力には、グループ内の役割を追加、削除、変更し、役割にメンバーを追加、削除し、さらに役割へ能力を割り当てる権限が含まれます。" name="Roles"> diff --git a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml index 32e84ce542..5aa0e86a5b 100755 --- a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml @@ -28,12 +28,12 @@ <button label="プロフィール" name="info_btn" tool_tip="オブジェクトのプロフィールを表示する"/> </layout_panel> <layout_panel name="share_btn_lp"> - <button label="共有" name="share_btn" tool_tip="インベントリのアイテムを共有する"/> + <button label="共有" name="share_btn" tool_tip="「持ち物」のアイテムを共有する"/> </layout_panel> <layout_panel name="shop_btn_lp"> - <button label="店" name="shop_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="play_btn"/> <button label="テレポート" name="teleport_btn" tool_tip="該当するエリアにテレポートする"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index 36966d6825..d046e11571 100755 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -37,6 +37,44 @@ <string name="StartupRequireDriverUpdate"> グラフィックを初期化できませんでした。グラフィックドライバを更新してください。 </string> + <string name="AboutHeader"> + [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL])[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]] + </string> + <string name="AboutCompiler"> + コンパイラー [COMPILER] [COMPILER_VERSION] バージョン + </string> + <string name="AboutPosition"> + あなたの現在地は、[POSITION_LOCAL_0,number,1]、[POSITION_LOCAL_1,number,1]、[POSITION_LOCAL_2,number,1] の [REGION] です。位置は <nolink>[HOSTNAME]</nolink> です。([HOSTIP]) +SLURL:<nolink>[SLURL]</nolink> +(グローバル座標 [POSITION_0,number,1]、[POSITION_1,number,1]、[POSITION_2,number,1]) +[SERVER_VERSION] +[SERVER_RELEASE_NOTES_URL] + </string> + <string name="AboutSystem"> + CPU:[CPU] +メモリ:[MEMORY_MB] MB +OS バージョン:[OS_VERSION] +グラフィックカード製造元:[GRAPHICS_CARD_VENDOR] +グラフィックカード:[GRAPHICS_CARD] + </string> + <string name="AboutDriver"> + Windows グラフィックドライババージョン:[GRAPHICS_DRIVER_VERSION] + </string> + <string name="AboutLibs"> + OpenGL バージョン:[OPENGL_VERSION] + +libcurl バージョン:[LIBCURL_VERSION] +J2C デコーダバージョン:[J2C_VERSION] +オーディオドライババージョン:[AUDIO_DRIVER_VERSION] +Qt Webkit バージョン:[QT_WEBKIT_VERSION] +ボイスサーバーバージョン:[VOICE_VERSION] + </string> + <string name="AboutTraffic"> + パケットロス:[PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) + </string> + <string name="ErrorFetchingServerReleaseNotesURL"> + サーバーのリリースノートの URL を取得中にエラーが発生しました。 + </string> <string name="ProgressRestoring"> 復元中です... </string> @@ -296,6 +334,75 @@ support@secondlife.com にお問い合わせください。 <string name="TestingDisconnect"> ビューワの接続を切るテスト中 </string> + <string name="SocialFlickrConnecting"> + Flickr に接続中... + </string> + <string name="SocialFlickrPosting"> + 投稿中... + </string> + <string name="SocialFlickrDisconnecting"> + Flickr から切断中... + </string> + <string name="SocialFlickrErrorConnecting"> + Flickr への接続時のエラー + </string> + <string name="SocialFlickrErrorPosting"> + Flickr への投稿時のエラー + </string> + <string name="SocialFlickrErrorDisconnecting"> + Flickr からの切断時のエラー + </string> + <string name="SocialTwitterConnecting"> + Twitter に接続中... + </string> + <string name="SocialTwitterPosting"> + 投稿中... + </string> + <string name="SocialTwitterDisconnecting"> + Twitter から切断中... + </string> + <string name="SocialTwitterErrorConnecting"> + Twitter への接続時のエラー + </string> + <string name="SocialTwitterErrorPosting"> + Twitter への投稿時のエラー + </string> + <string name="SocialTwitterErrorDisconnecting"> + Twitter からの切断時のエラー + </string> + <string name="BlackAndWhite"> + 白黒 + </string> + <string name="Colors1970"> + 1970 年代のカラー + </string> + <string name="Intense"> + 強調 + </string> + <string name="Newspaper"> + 新聞紙 + </string> + <string name="Sepia"> + セピア + </string> + <string name="Spotlight"> + スポットライト + </string> + <string name="Video"> + ビデオ + </string> + <string name="Autocontrast"> + オートコントラスト + </string> + <string name="LensFlare"> + レンズフレア + </string> + <string name="Miniature"> + ミニチュア + </string> + <string name="Toycamera"> + おもちゃのカメラ + </string> <string name="TooltipPerson"> 人 </string> @@ -847,6 +954,12 @@ support@secondlife.com にお問い合わせください。 <string name="use_texture"> テクスチャを使用 </string> + <string name="manip_hint1"> + マウスカーソルをルーラに合わせて + </string> + <string name="manip_hint2"> + グリッドにスナップ + </string> <string name="texture_loading"> ローディング... </string> @@ -937,15 +1050,15 @@ support@secondlife.com にお問い合わせください。 <string name="ControlYourCamera"> カメラのコントロール </string> + <string name="TeleportYourAgent"> + あなたをテレポート + </string> <string name="NotConnected"> 接続されていません </string> <string name="AgentNameSubst"> (あなた) </string> - <string name="TeleportYourAgent"> - あなたをテレポート - </string> <string name="JoinAnExperience"> 体験に参加する </string> @@ -1270,8 +1383,7 @@ support@secondlife.com にお問い合わせください。 <string name="InventoryInboxNoItems"> マーケットプレイスで購入した商品はここに表示されます。その後、アイテムをインベントリにドラッグすれば、それらのアイテムを使用できます。 </string> - <string name="Unconstrained">非拘束</string> - <string name="MarketplaceURL"> + <string name="MarketplaceURL"> https://marketplace.[MARKETPLACE_DOMAIN_NAME]/ </string> <string name="MarketplaceURL_CreateStore"> @@ -1300,6 +1412,18 @@ support@secondlife.com にお問い合わせください。 <string name="InventoryOutboxNoItems"> [[MARKETPLACE_DASHBOARD_URL] マーケットプレイス]に販売するアイテムを一覧するには、フォルダをこのエリアにドラッグし、「マーケットプレイスに送信」をクリックします。 </string> + <string name="InventoryOutboxInitializingTitle"> + マーケットプレイスの初期化。 + </string> + <string name="InventoryOutboxInitializing"> + [[MARKETPLACE_CREATE_STORE_URL] マーケットプレイス ストア] のアカウントにアクセスしています。 + </string> + <string name="InventoryOutboxErrorTitle"> + マーケットプレイス エラー。 + </string> + <string name="InventoryOutboxError"> + [[MARKETPLACE_CREATE_STORE_URL] マーケットプレイス ストア] がエラーを返しています。 + </string> <string name="Marketplace Error None"> エラーなし </string> @@ -1327,6 +1451,9 @@ support@secondlife.com にお問い合わせください。 <string name="Open landmarks"> ランドマークを開く </string> + <string name="Unconstrained"> + 非拘束 + </string> <string name="no_transfer" value=" (再販・プレゼント不可)"/> <string name="no_modify" value=" (編集不可)"/> <string name="no_copy" value=" (コピー不可)"/> @@ -1727,6 +1854,9 @@ support@secondlife.com にお問い合わせください。 <string name="CompileQueueDownloadedCompiling"> ダウンロード完了、コンパイル中 </string> + <string name="CompileQueueServiceUnavailable"> + スクリプト コンパイル サービスを利用できません + </string> <string name="CompileQueueScriptNotFound"> サーバー上にスクリプトが見つかりません。 </string> @@ -4027,6 +4157,12 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="share_alert"> インベントリからここにアイテムをドラッグします </string> + <string name="flickr_post_success"> + Flickr に投稿しました。 + </string> + <string name="twitter_post_success"> + Twitter に投稿しました。 + </string> <string name="no_session_message"> (IM セッションが存在しません) </string> @@ -4483,6 +4619,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="LocalEstimateUSD"> US$ [AMOUNT] </string> + <string name="Group Ban"> + グループへの立入禁止 + </string> <string name="Membership"> 会員 </string> @@ -4905,6 +5044,12 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="Command_Destinations_Label"> 行き先 </string> + <string name="Command_Facebook_Label"> + Facebook + </string> + <string name="Command_Flickr_Label"> + Flickr + </string> <string name="Command_Gestures_Label"> ジェスチャー </string> @@ -4953,6 +5098,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="Command_Speak_Label"> 話す </string> + <string name="Command_Twitter_Label"> + Twitter + </string> <string name="Command_View_Label"> カメラコントロール </string> @@ -4983,6 +5131,12 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="Command_Destinations_Tooltip"> 行ってみたい場所 </string> + <string name="Command_Facebook_Tooltip"> + Facebook へ投稿 + </string> + <string name="Command_Flickr_Tooltip"> + Flickr にアップロード + </string> <string name="Command_Gestures_Tooltip"> アバターのジェスチャー </string> @@ -5031,6 +5185,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="Command_Speak_Tooltip"> マイクを使って近くの人と話す </string> + <string name="Command_Twitter_Tooltip"> + Twitter + </string> <string name="Command_View_Tooltip"> カメラの角度を変更 </string> diff --git a/indra/newview/skins/default/xui/pl/floater_lagmeter.xml b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml new file mode 100644 index 0000000000..8038550bcb --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml @@ -0,0 +1,151 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_lagmeter" title="POMIAR LAGÓW"> + <floater.string name="max_title_msg"> + Pomiar lagów + </floater.string> + <floater.string name="max_width_px"> + 360 + </floater.string> + <floater.string name="min_title_msg"> + Lag + </floater.string> + <floater.string name="min_width_px"> + 90 + </floater.string> + <floater.string name="client_text_msg"> + Klient + </floater.string> + <floater.string name="client_frame_rate_critical_fps"> + 10 + </floater.string> + <floater.string name="client_frame_rate_warning_fps"> + 15 + </floater.string> + <floater.string name="client_frame_time_window_bg_msg"> + W normie, okno w tle + </floater.string> + <floater.string name="client_frame_time_critical_msg"> + Ilość klatek na sekundę klienta poniżej [CLIENT_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="client_frame_time_warning_msg"> + Ilość klatek na sekundę pomiędzy [CLIENT_FRAME_RATE_CRITICAL] i [CLIENT_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="client_frame_time_normal_msg"> + W normie + </floater.string> + <floater.string name="client_draw_distance_cause_msg"> + Przyczyna: dystans rysowania jest za wysoki + </floater.string> + <floater.string name="client_texture_loading_cause_msg"> + Przyczyna: ładowanie obrazu + </floater.string> + <floater.string name="client_texture_memory_cause_msg"> + Przyczyna: za dużo obrazów w pamięci + </floater.string> + <floater.string name="client_complex_objects_cause_msg"> + Przyczyna: za dużo złożonych obiektów + </floater.string> + <floater.string name="network_text_msg"> + Sieć + </floater.string> + <floater.string name="network_packet_loss_critical_pct"> + 10 + </floater.string> + <floater.string name="network_packet_loss_warning_pct"> + 5 + </floater.string> + <floater.string name="network_packet_loss_critical_msg"> + Utrata pakietów przekracza [NETWORK_PACKET_LOSS_CRITICAL]% + </floater.string> + <floater.string name="network_packet_loss_warning_msg"> + Utrata pakietów przekracza [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% + </floater.string> + <floater.string name="network_performance_normal_msg"> + W normie + </floater.string> + <floater.string name="network_ping_critical_ms"> + 600 + </floater.string> + <floater.string name="network_ping_warning_ms"> + 300 + </floater.string> + <floater.string name="network_ping_critical_msg"> + Fatalny ping - [NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_ping_warning_msg"> + Wolny ping - [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_packet_loss_cause_msg"> + Złe połączenie lub przepustowość. + </floater.string> + <floater.string name="network_ping_cause_msg"> + Złe połączenie lub aplikacja współdzieląca pliki. + </floater.string> + <floater.string name="server_text_msg"> + Serwer + </floater.string> + <floater.string name="server_frame_rate_critical_fps"> + 20 + </floater.string> + <floater.string name="server_frame_rate_warning_fps"> + 30 + </floater.string> + <floater.string name="server_single_process_max_time_ms"> + 20 + </floater.string> + <floater.string name="server_frame_time_critical_msg"> + Ilość klatek na sekundę poniżej [SERVER_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="server_frame_time_warning_msg"> + Ilość klatek na sekundę pomiędzy [SERVER_FRAME_RATE_CRITICAL] i [SERVER_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="server_frame_time_normal_msg"> + W normie + </floater.string> + <floater.string name="server_physics_cause_msg"> + Przyczyna: za dużo obiektów fizycznych + </floater.string> + <floater.string name="server_scripts_cause_msg"> + Przyczyna: za dużo obieków skryptowanych + </floater.string> + <floater.string name="server_net_cause_msg"> + Przyczyna: za duży ruch w sieci + </floater.string> + <floater.string name="server_agent_cause_msg"> + Przyczyna: za dużo poruszających się awatarów w regionie + </floater.string> + <floater.string name="server_images_cause_msg"> + Przyczyna: za dużo kalkulacji obrazu + </floater.string> + <floater.string name="server_generic_cause_msg"> + Przyczyna: symulator ładuje się zbyt powoli + </floater.string> + <floater.string name="smaller_label"> + >> + </floater.string> + <floater.string name="bigger_label"> + << + </floater.string> + <button label="" label_selected="" name="client_lagmeter" tool_tip="Status lagów klienta"/> + <text name="client"> + Klient + </text> + <text name="client_text"> + W normie + </text> + <button label="" label_selected="" name="network_lagmeter" tool_tip="Network lag status"/> + <text name="network"> + Sieć + </text> + <text name="network_text"> + W normie + </text> + <button label="" label_selected="" name="server_lagmeter" tool_tip="Server lag status"/> + <text name="server"> + Serwer + </text> + <text name="server_text"> + W normie + </text> + <button label=">>" name="minimize" tool_tip="Złącz rozmiar pliku xml"/> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_big_preview.xml b/indra/newview/skins/default/xui/pt/floater_big_preview.xml new file mode 100644 index 0000000000..76ca176689 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_big_preview.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_big_preview" title="VISUALIZAR"/> diff --git a/indra/newview/skins/default/xui/pt/floater_facebook.xml b/indra/newview/skins/default/xui/pt/floater_facebook.xml new file mode 100644 index 0000000000..c211d75e9b --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_facebook.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_facebook" title="PUBLICAR NO FACEBOOK"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="STATUS" name="panel_facebook_status"/> + <panel label="FOTO" name="panel_facebook_photo"/> + <panel label="FAZER CHECK IN" name="panel_facebook_place"/> + <panel label="AMIGOS" name="panel_facebook_friends"/> + <panel label="CONTA" name="panel_facebook_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Erro + </text> + <text name="connection_loading_text"> + Carregando... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_flickr.xml b/indra/newview/skins/default/xui/pt/floater_flickr.xml new file mode 100644 index 0000000000..67d2295e41 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_flickr.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_flickr" title="CARREGAR NO FLICKR"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="FOTO" name="panel_flickr_photo"/> + <panel label="CONTA" name="panel_flickr_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Erro + </text> + <text name="connection_loading_text"> + Carregando... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_lagmeter.xml b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml new file mode 100644 index 0000000000..9932318293 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml @@ -0,0 +1,154 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_lagmeter" title="LAG - Índice"> + <floater.string name="max_title_msg"> + Medidor de Atraso + </floater.string> + <floater.string name="max_width_px"> + 360 + </floater.string> + <floater.string name="min_title_msg"> + Atraso + </floater.string> + <floater.string name="min_width_px"> + 90 + </floater.string> + <floater.string name="client_text_msg"> + Cliente + </floater.string> + <floater.string name="client_frame_rate_critical_fps"> + 10 + </floater.string> + <floater.string name="client_frame_rate_warning_fps"> + 15 + </floater.string> + <floater.string name="client_frame_time_window_bg_msg"> + Normal, janela por baixo + </floater.string> + <floater.string name="client_frame_time_critical_msg"> + Taxa de quadros do Cliente abaixo de [CLIENT_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="client_frame_time_warning_msg"> + Taxa de quadros do Cliente entre [CLIENT_FRAME_RATE_CRITICAL] e [CLIENT_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="client_frame_time_normal_msg"> + Normal + </floater.string> + <floater.string name="client_draw_distance_cause_msg"> + Causa possível: Distância de desenho ajustada muito alta + </floater.string> + <floater.string name="client_texture_loading_cause_msg"> + Causa possível: Carregamento de Imagens + </floater.string> + <floater.string name="client_texture_memory_cause_msg"> + Causa possível: Muitas imagens na memória + </floater.string> + <floater.string name="client_complex_objects_cause_msg"> + Causa possível: Muitos objetos complexos na cena + </floater.string> + <floater.string name="network_text_msg"> + Rede + </floater.string> + <floater.string name="network_packet_loss_critical_pct"> + 10 + </floater.string> + <floater.string name="network_packet_loss_warning_pct"> + 5 + </floater.string> + <floater.string name="network_packet_loss_critical_msg"> + Conexão está caindo para cerca de [NETWORK_PACKET_LOSS_CRITICAL]% de pacotes + </floater.string> + <floater.string name="network_packet_loss_warning_msg"> + Conexão está caindo [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% de pacotes + </floater.string> + <floater.string name="network_performance_normal_msg"> + Normal + </floater.string> + <floater.string name="network_ping_critical_ms"> + 600 + </floater.string> + <floater.string name="network_ping_warning_ms"> + 300 + </floater.string> + <floater.string name="network_ping_critical_msg"> + Tempo de conexão de ping é cerca de [NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_ping_warning_msg"> + Tempo de conexão de ping é [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_packet_loss_cause_msg"> + Possível conexão ruim ou 'Largura de Banda' escolhida muito alta. + </floater.string> + <floater.string name="network_ping_cause_msg"> + Possível conexão ruim ou aplicativos compartilhando arquivos. + </floater.string> + <floater.string name="server_text_msg"> + Servidor + </floater.string> + <floater.string name="server_frame_rate_critical_fps"> + 20 + </floater.string> + <floater.string name="server_frame_rate_warning_fps"> + 30 + </floater.string> + <floater.string name="server_single_process_max_time_ms"> + 20 + </floater.string> + <floater.string name="server_frame_time_critical_msg"> + Taxa de quadros abaixo de [SERVER_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="server_frame_time_warning_msg"> + Taxa de quadros entre [SERVER_FRAME_RATE_CRITICAL] e [SERVER_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="server_frame_time_normal_msg"> + Normal + </floater.string> + <floater.string name="server_physics_cause_msg"> + Causa possível: Muitos objetos físicos + </floater.string> + <floater.string name="server_scripts_cause_msg"> + Causa possível: Muitos objetos com scripts + </floater.string> + <floater.string name="server_net_cause_msg"> + Causa possível: Muito tráfego na rede + </floater.string> + <floater.string name="server_agent_cause_msg"> + Causa possível: Muitas pessoas se movendo na região + </floater.string> + <floater.string name="server_images_cause_msg"> + Causa possível: Muitos cálculos de imagem + </floater.string> + <floater.string name="server_generic_cause_msg"> + Causa possível: Carga no simulador muito pesada + </floater.string> + <floater.string name="smaller_label"> + >> + </floater.string> + <floater.string name="bigger_label"> + << + </floater.string> + <button label="" label_selected="" name="client_lagmeter" tool_tip="Status de atraso no Cliente"/> + <text name="client"> + Cliente + </text> + <text font="SansSerifSmall" name="client_text"> + Normal + </text> + <text left="30" name="client_lag_cause" right="-10"/> + <button label="" label_selected="" name="network_lagmeter" tool_tip="Status de atraso na rede"/> + <text name="network"> + Rede + </text> + <text font="SansSerifSmall" name="network_text"> + Normal + </text> + <text left="30" name="network_lag_cause" right="-10"/> + <button label="" label_selected="" name="server_lagmeter" tool_tip="Status de atraso no servidor"/> + <text name="server"> + Servidor + </text> + <text font="SansSerifSmall" name="server_text"> + Normal + </text> + <text left="30" name="server_lag_cause" right="-32"/> + <button label=">>" name="minimize" tool_tip="Alternar o tamanho da janela"/> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_perms_default.xml b/indra/newview/skins/default/xui/pt/floater_perms_default.xml new file mode 100644 index 0000000000..762f8320c4 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_perms_default.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="perms default" title="PERMISSÕES DE CRIAÇÃO PADRÃO"> + <panel label="Permissões padrão" name="default permissions"/> + <button label="OK" label_selected="OK" name="ok"/> + <button label="Cancelar" label_selected="Cancelar" name="cancel"/> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_region_restarting.xml b/indra/newview/skins/default/xui/pt/floater_region_restarting.xml new file mode 100644 index 0000000000..7fd13c0d75 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_region_restarting.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="region_restarting" title="REINICIANDO REGIÃO"> + <string name="RegionName"> + A região na qual você está ([NAME]) está prestes a ser reiniciada. + +Se permanecer aqui, você será desconectado. + </string> + <string name="RestartSeconds"> + Segundos até o reinício +[SECONDS] + </string> + <panel name="layout_panel_1"> + <text name="region_name"> + A região na qual você está (-Nome mais longo da região-) está prestes a ser reiniciada. + +Se permanecer aqui, você será desconectado. + </text> + <text name="restart_seconds"> + Segundos até o reinício + 32767 + </text> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml index 08413a9231..e6d9961d0b 100755 --- a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml @@ -44,7 +44,7 @@ <combo_box.item label="Idade > Residente adulto ou adolescente" name="Age__Adult_resident_on_Teen_Second_Life"/> <combo_box.item label="Idade > Residente menor de idade, fora do Second Life teen" name="Age__Underage_resident_outside_of_Teen_Second_Life"/> <combo_box.item label="Assalto > Sandbox de combate / área não segura" name="Assault__Combat_sandbox___unsafe_area"/> - <combo_box.item label="Assalto > Área segura" name="Assault__Safe_area"/> + <combo_box.item label="Agressões > Atirar, empurrar ou bater em outro residente em uma área segura" name="Assault__Safe_area"/> <combo_box.item label="Assalto > Testando armas em sandbox" name="Assault__Weapons_testing_sandbox"/> <combo_box.item label="Comércio > Falha em enviar produto ou serviço" name="Commerce__Failure_to_deliver_product_or_service"/> <combo_box.item label="Revelar > Informação do mundo real" name="Disclosure__Real_world_information"/> @@ -58,25 +58,25 @@ <combo_box.item label="Fraude > L$" name="Fraud__L$"/> <combo_box.item label="Fraude > Terra" name="Fraud__Land"/> <combo_box.item label="Fraude > Esquema de pirâmide ou cartas encadeadas" name="Fraud__Pyramid_scheme_or_chain_letter"/> - <combo_box.item label="Fraude > R$" name="Fraud__US$"/> + <combo_box.item label="Fraude > L$ ou US$" name="Fraud__US$"/> <combo_box.item label="Perturbação > Fazendas de Anúncios / spam visual" name="Harassment__Advert_farms___visual_spam"/> <combo_box.item label="Perturbação > Difamação de indivíduos ou grupos" name="Harassment__Defaming_individuals_or_groups"/> <combo_box.item label="Perturbação > Impedindo movimentos" name="Harassment__Impeding_movement"/> <combo_box.item label="Perturbação > Perturbação sexual" name="Harassment__Sexual_harassment"/> - <combo_box.item label="Perturbação > Solicitando/incitando outros a violarem o ToS" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> + <combo_box.item label="Assédio > Comportamento direcionado destinado à perturbação" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> <combo_box.item label="Perturbação > Abuso verbal" name="Harassment__Verbal_abuse"/> <combo_box.item label="Indecência > Conteúdo ou conduta amplamente ofensivos" name="Indecency__Broadly_offensive_content_or_conduct"/> <combo_box.item label="Indecência > Nome de avatar inapropriado" name="Indecency__Inappropriate_avatar_name"/> - <combo_box.item label="Indecência > Conduta ou conteúdo inapropriados numa região PG" name="Indecency__Mature_content_in_PG_region"/> + <combo_box.item label="Indecência > Conteúdo ou conduta inapropriada para a classificação da região" name="Indecency__Mature_content_in_PG_region"/> <combo_box.item label="Indecência > Conduta ou conteúdo inapropriados numa região Mature" name="Indecency__Inappropriate_content_in_Mature_region"/> <combo_box.item label="Violação de propriedade intelectual > Remoção de Conteúdo" name="Intellectual_property_infringement_Content_Removal"/> <combo_box.item label="Violação de Propriedade intelectual > Cópia Ilegal ou Aproveitar-se de Permissões" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/> <combo_box.item label="Intolerância" name="Intolerance"/> <combo_box.item label="Terra > Abuso dos recursos da sandbox" name="Land__Abuse_of_sandbox_resources"/> - <combo_box.item label="Terra > Invasão > Objetos/texturas" name="Land__Encroachment__Objects_textures"/> + <combo_box.item label="Terreno > Invasão > Objetos ou texturas" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="Terra > Invasão > Partículas" name="Land__Encroachment__Particles"/> <combo_box.item label="Terra > Violação > Árvores/plantas" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="Apostas/jogos de azar" name="Wagering_gambling"/> + <combo_box.item label="Apostas ou jogos de azar" name="Wagering_gambling"/> <combo_box.item label="Outro" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/pt/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/pt/floater_scene_load_stats.xml new file mode 100644 index 0000000000..027e1ef311 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_scene_load_stats.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Scene Load Statistics" title="ESTATÍSTICAS DE CARREGAMENTO DE CENA"> + <button label="Pausar" name="playpause"/> + <scroll_container name="statistics_scroll"> + <container_view name="statistics_view"> + <stat_view label="Básico" name="basic"> + <stat_bar label="Diferença de frame em pixels" name="frame difference"/> + <stat_bar label="Dados de UDP recebidos" name="bandwidth"/> + <stat_bar label="Bandwidth" name="packet_loss"/> + </stat_view> + <stat_view label="Avançado" name="advanced"> + <stat_view label="Render" name="render"> + <stat_bar label="Total Objects" name="objs"/> + <stat_bar label="New Objects" name="newobjs"/> + <stat_bar label="Taxa de acertos do cache do objeto" name="object_cache_hits"/> + </stat_view> + <stat_view label="Textura" name="texture"> + <stat_bar label="Taxa de acertos do cache" name="texture_cache_hits"/> + <stat_bar label="Latência de leitura do cache" name="texture_cache_read_latency"/> + <stat_bar label="Contagem" name="numimagesstat"/> + <stat_bar label="Raw Count" name="numrawimagesstat"/> + </stat_view> + <stat_view label="Network" name="network"> + <stat_bar label="Packets In" name="packetsinstat"/> + <stat_bar label="Packets Out" name="packetsoutstat"/> + <stat_bar label="Objetos" name="objectdatareceived"/> + <stat_bar label="Textura" name="texturedatareceived"/> + <stat_bar label="Asset" name="assetudpdatareceived"/> + <stat_bar label="Layers" name="layersdatareceived"/> + <stat_bar label="Actual In" name="messagedatain"/> + <stat_bar label="Actual Out" name="messagedataout"/> + <stat_bar label="Operações pendentes do VFS" name="vfspendingoperations"/> + </stat_view> + </stat_view> + <stat_view label="Simulator" name="sim"> + <stat_bar label="Objetos" name="simobjects"/> + <stat_bar label="Active Objects" name="simactiveobjects"/> + <stat_bar label="Active Scripts" name="simactivescripts"/> + <stat_bar label="Packets In" name="siminpps"/> + <stat_bar label="Packets Out" name="simoutpps"/> + <stat_bar label="Pending Downloads" name="simpendingdownloads"/> + <stat_bar label="Pending Uploads" name="simpendinguploads"/> + <stat_bar label="Total Unacked Bytes" name="simtotalunackedbytes"/> + <stat_view label="Time (ms)" name="simperf"> + <stat_bar label="Total Frame Time" name="simframemsec"/> + <stat_bar label="Net Time" name="simnetmsec"/> + <stat_bar label="Physics Time" name="simsimphysicsmsec"/> + <stat_bar label="Simulation Time" name="simsimothermsec"/> + <stat_bar label="Agent Time" name="simagentmsec"/> + <stat_bar label="Images Time" name="simimagesmsec"/> + <stat_bar label="Script Time" name="simscriptmsec"/> + <stat_bar label="Tempo restante" name="simsparemsec"/> + <stat_view label="Detalhes de tempo (ms)" name="timedetails"> + <stat_bar label="Etapa física" name="simsimphysicsstepmsec"/> + <stat_bar label="Atualizar formas físicas" name="simsimphysicsshapeupdatemsec"/> + <stat_bar label="Física - outros" name="simsimphysicsothermsec"/> + <stat_bar label="Tempo de espera" name="simsleepmsec"/> + <stat_bar label="Bombear ES" name="simpumpiomsec"/> + </stat_view> + </stat_view> + </stat_view> + </container_view> + </scroll_container> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/pt/floater_script_ed_prefs.xml new file mode 100644 index 0000000000..ae4ac7b8df --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_script_ed_prefs.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_script_colors" title="CORES DE SCRIPT"> + <text name="color_pickers_label"> + Escolha as cores desejadas: + </text> + <text name="text_label"> + Texto + </text> + <text name="cursor_label"> + Cursor + </text> + <text name="background_label"> + Segundo plano + </text> + <text name="datatype_label"> + Tipos de dados + </text> + <text name="event_label"> + Eventos + </text> + <text name="string_literal_label"> + Sequência literal + </text> + <text name="constant_label"> + Constante + </text> + <text name="flow_control_label"> + Controle de fluxo + </text> + <text name="function_label"> + Função + </text> + <text name="comment_label"> + Comentário + </text> + <script_editor name="Script Preview"> + /* Um script de exemplo */ +default +{ + state_entry() + { + // Comment + string greeting = "Olá"; + llSay(PUBLIC_CHANNEL, greeting); + } +} + </script_editor> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_snapshot.xml b/indra/newview/skins/default/xui/pt/floater_snapshot.xml index 4110e69068..3dd7f69d50 100755 --- a/indra/newview/skins/default/xui/pt/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/pt/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="VISUALIZAR FOTO"> +<floater name="Snapshot" title="FOTO"> <floater.string name="unknown"> desconhecido </floater.string> @@ -61,5 +61,11 @@ <check_box label="HUDs" name="hud_check"/> <check_box label="Gerar quadro (tela inteira)" name="freeze_frame_check"/> <check_box label="Atualização automática" name="auto_snapshot_check"/> + <text name="filter_list_label"> + Filtro: + </text> + <combo_box name="filters_combobox" tool_tip="Filtros de imagem"> + <combo_box.item label="Sem filtro" name="NoFilter"/> + </combo_box> </panel> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_stats.xml b/indra/newview/skins/default/xui/pt/floater_stats.xml index be53624145..f41fe17778 100755 --- a/indra/newview/skins/default/xui/pt/floater_stats.xml +++ b/indra/newview/skins/default/xui/pt/floater_stats.xml @@ -4,17 +4,21 @@ <container_view name="statistics_view"> <stat_view label="Básico" name="basic"> <stat_bar label="FPS" name="fps"/> - <stat_bar label="Bandwidth" name="bandwidth"/> + <stat_bar label="Dados de UDP recebidos" name="bandwidth"/> <stat_bar label="Bandwidth" name="packet_loss"/> <stat_bar label="Ping Sim" name="ping"/> </stat_view> <stat_view label="Avançado" name="advanced"> <stat_view label="Render" name="render"> - <stat_bar label="KTris desenhados por quadro" name="ktrisframe"/> - <stat_bar label="KTris desenhados por segundo" name="ktrissec"/> - <stat_bar label="Total Objects" name="objs"/> + <stat_bar label="KTris por quadro" name="ktrisframe"/> + <stat_bar label="KTris por segundo" name="ktrissec"/> + <stat_bar label="Objetos totais" name="totalobjs"/> + <stat_bar label="Objetos em cache" name="cachedobjs"/> <stat_bar label="New Objects" name="newobjs"/> <stat_bar label="Taxa de acertos do cache do objeto" name="object_cache_hits"/> + <stat_bar label="Consultas de oclusão realizadas" name="occlusion_queries"/> + <stat_bar label="Objetos ocultos" name="occluded"/> + <stat_bar label="Objeto não oculto" name="unoccluded"/> </stat_view> <stat_view label="Texture" name="texture"> <stat_bar label="Taxa de acertos do cache" name="texture_cache_hits"/> @@ -26,15 +30,32 @@ <stat_bar label="Raw Mem" name="rawmemstat"/> <stat_bar label="Bound Mem" name="glboundmemstat"/> </stat_view> + <stat_view label="Uso de memória" name="memory"> + <stat_bar label="LLTrace" name="LLTrace"/> + <stat_bar label="Interface" name="LLView"/> + <stat_bar label="Fontes" name="LLFontFreetype"/> + <stat_bar label="Inventário" name="LLInventoryObject"/> + <stat_bar label="Objetos do visualizador" name="LLViewerObject"/> + <stat_bar label="Dados do grupo de octrees" name="LLViewerOctreeGroup"/> + <stat_bar label="Dados da octree" name="LLViewerOctreeEntry"/> + <stat_bar label="Cache de objetos do visualizador" name="LLVOCacheEntry"/> + <stat_bar label="Drawables" name="LLDrawable"/> + <stat_bar label="Dados do rosto" name="LLFace"/> + <stat_bar label="Informações de desenho" name="LLDrawInfo"/> + <stat_bar label="Dados de textura" name="LLTexture"/> + <stat_bar label="Dados de imagem" name="LLImage"/> + <stat_bar label="Dados de imagem do GL" name="LLImageGL"/> + <stat_bar label="Buffers do Vertex" name="LLVertexBuffer"/> + </stat_view> <stat_view label="Rede" name="network"> <stat_bar label="Packets In" name="packetsinstat"/> <stat_bar label="Packets Out" name="packetsoutstat"/> - <stat_bar label="Objects" name="objectkbitstat"/> - <stat_bar label="Texture" name="texturekbitstat"/> - <stat_bar label="Asset" name="assetkbitstat"/> - <stat_bar label="Layers" name="layerskbitstat"/> - <stat_bar label="Actual In" name="actualinkbitstat"/> - <stat_bar label="Actual Out" name="actualoutkbitstat"/> + <stat_bar label="Objetos" name="objectdatareceived"/> + <stat_bar label="Textura" name="texturedatareceived"/> + <stat_bar label="Asset" name="assetudpdatareceived"/> + <stat_bar label="Layers" name="layersdatareceived"/> + <stat_bar label="Actual In" name="messagedatain"/> + <stat_bar label="Actual Out" name="messagedataout"/> <stat_bar label="Operações pendentes do VFS" name="vfspendingoperations"/> </stat_view> </stat_view> @@ -53,7 +74,8 @@ <stat_bar label="Etapas de silhueta ignoradas" name="simsimskippedsilhouettesteps"/> <stat_bar label="Personagens atualizados" name="simsimpctsteppedcharacters"/> </stat_view> - <stat_view label="Time (ms)" name="simperf"> + <stat_bar label="Total de dados não reconhecidos" name="simtotalunackedbytes"/> + <stat_view label="Hora" name="simperf"> <stat_bar label="Total Frame Time" name="simframemsec"/> <stat_bar label="Net Time" name="simnetmsec"/> <stat_bar label="Physics Time" name="simsimphysicsmsec"/> @@ -62,7 +84,7 @@ <stat_bar label="Images Time" name="simimagesmsec"/> <stat_bar label="Script Time" name="simscriptmsec"/> <stat_bar label="Tempo restante" name="simsparemsec"/> - <stat_view label="Detalhes de tempo (ms)" name="timedetails"> + <stat_view label="Detalhes de hora" name="timedetails"> <stat_bar label="Etapa física" name="simsimphysicsstepmsec"/> <stat_bar label="Atualizar formas físicas" name="simsimphysicsshapeupdatemsec"/> <stat_bar label="Física - outros" name="simsimphysicsothermsec"/> diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml index 66c14cdecf..356063a94f 100755 --- a/indra/newview/skins/default/xui/pt/floater_tools.xml +++ b/indra/newview/skins/default/xui/pt/floater_tools.xml @@ -72,7 +72,7 @@ <check_box label="Editar partes linkadas" name="checkbox edit linked parts"/> <button label="Link" name="link_btn"/> <button label="Desconectar links" name="unlink_btn"/> - <check_box label="" name="checkbox uniform"/> + <check_box label="Esticar ambos lados" name="checkbox uniform"/> <text label="Esticar ambos lados" name="checkbox uniform label"> Esticar ambos lados </text> diff --git a/indra/newview/skins/default/xui/pt/floater_twitter.xml b/indra/newview/skins/default/xui/pt/floater_twitter.xml new file mode 100644 index 0000000000..4d7f9e323c --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_twitter.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_twitter" title="TWITTER"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="REDIGIR" name="panel_twitter_photo"/> + <panel label="CONTA" name="panel_twitter_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Erro + </text> + <text name="connection_loading_text"> + Carregando... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_icon.xml b/indra/newview/skins/default/xui/pt/menu_avatar_icon.xml index beba969b7e..f6211790a8 100755 --- a/indra/newview/skins/default/xui/pt/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/pt/menu_avatar_icon.xml @@ -2,6 +2,7 @@ <menu name="Avatar Icon Menu"> <menu_item_call label="Ver perfil" name="Show Profile"/> <menu_item_call label="Enviar MI..." name="Send IM"/> + <menu_item_call label="Solicitar teletransporte" name="Request Teleport"/> <menu_item_call label="Adicionar amigo..." name="Add Friend"/> <menu_item_call label="Remover amigo..." name="Remove Friend"/> </menu> diff --git a/indra/newview/skins/default/xui/pt/menu_conversation.xml b/indra/newview/skins/default/xui/pt/menu_conversation.xml index 2dd150a61e..d594f3313f 100644 --- a/indra/newview/skins/default/xui/pt/menu_conversation.xml +++ b/indra/newview/skins/default/xui/pt/menu_conversation.xml @@ -29,4 +29,5 @@ <menu_item_call label="Silenciar todos" name="ModerateVoiceMute"/> <menu_item_call label="Desfazer silenciar para todos" name="ModerateVoiceUnmute"/> </context_menu> + <menu_item_call label="Banir membro" name="BanMember"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/pt/menu_inventory.xml b/indra/newview/skins/default/xui/pt/menu_inventory.xml index a3a648eb34..636b356c8b 100755 --- a/indra/newview/skins/default/xui/pt/menu_inventory.xml +++ b/indra/newview/skins/default/xui/pt/menu_inventory.xml @@ -70,6 +70,7 @@ <menu_item_call label="Executar som" name="Sound Play"/> <menu_item_call label="Copiar SLurl" name="url_copy"/> <menu_item_call label="Sobre o marco" name="About Landmark"/> + <menu_item_call label="Mostrar no mapa" name="show_on_map"/> <menu_item_call label="Executar animação" name="Animation Play"/> <menu_item_call label="Executar áudio" name="Animation Audition"/> <menu_item_call label="Mandar MI" name="Send Instant Message"/> diff --git a/indra/newview/skins/default/xui/pt/menu_login.xml b/indra/newview/skins/default/xui/pt/menu_login.xml index cd840f3137..29dae6292a 100755 --- a/indra/newview/skins/default/xui/pt/menu_login.xml +++ b/indra/newview/skins/default/xui/pt/menu_login.xml @@ -5,7 +5,15 @@ <menu_item_call label="Sair do [APP_NAME]" name="Quit"/> </menu> <menu label="Ajuda" name="Help"> - <menu_item_call label="Ajuda do [SECOND_LIFE]" name="Second Life Help"/> + <menu_item_call label="Como..." name="How To"/> + <menu_item_call label="Início rápido" name="Quickstart"/> + <menu_item_call label="Base de conhecimento" name="Knowledge Base"/> + <menu_item_call label="Wiki" name="Wiki"/> + <menu_item_call label="Fóruns da comunidade" name="Community Forums"/> + <menu_item_call label="Portal de suporte" name="Support portal"/> + <menu_item_call label="Notícias do [SECOND_LIFE]" name="Second Life News"/> + <menu_item_call label="Blogs do [SECOND_LIFE]" name="Second Life Blogs"/> + <menu_item_call label="Relatar bug" name="Report Bug"/> <menu_item_call label="Sobre [APP_NAME]" name="About Second Life"/> </menu> <menu_item_check label="Exibir menu de depuração" name="Show Debug Menu"/> diff --git a/indra/newview/skins/default/xui/pt/menu_object.xml b/indra/newview/skins/default/xui/pt/menu_object.xml index a552a5de5a..47b08a170c 100755 --- a/indra/newview/skins/default/xui/pt/menu_object.xml +++ b/indra/newview/skins/default/xui/pt/menu_object.xml @@ -21,6 +21,7 @@ <context_menu label="Gerenciar" name="Remove"> <menu_item_call label="Denunciar abuso" name="Report Abuse..."/> <menu_item_call label="Bloquear" name="Object Mute"/> + <menu_item_call label="Desbloquear" name="Object Unmute"/> <menu_item_call label="Devolver" name="Return..."/> </context_menu> <menu_item_call label="Pegar" name="Pie Object Take"/> diff --git a/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml index ec1e7a0950..3a2b3a8847 100755 --- a/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml @@ -2,5 +2,5 @@ <context_menu name="Teleport History Item Context Menu"> <menu_item_call label="Teletransportar" name="Teleport"/> <menu_item_call label="Mais informações" name="More Information"/> - <menu_item_call label="Copiar" name="CopyToClipboard"/> + <menu_item_call label="Copiar SLurl" name="CopyToClipboard"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml index e6eceb5f2f..a761cfa177 100755 --- a/indra/newview/skins/default/xui/pt/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml @@ -36,6 +36,9 @@ <menu_item_check label="Bate-papo local..." name="Nearby Chat"/> <menu_item_check label="Falar" name="Speak"/> <menu_item_check label="Registro de conversas..." name="Conversation Log..."/> + <menu_item_call label="Facebook..." name="Facebook"/> + <menu_item_call label="Twitter..." name="Twitter"/> + <menu_item_call label="Flickr..." name="Flickr"/> <menu label="Distorção de voz" name="VoiceMorphing"> <menu_item_check label="Não distorcer voz" name="NoVoiceMorphing"/> <menu_item_check label="Visualizar..." name="Preview"/> @@ -72,11 +75,11 @@ <menu_item_check label="Menu avançado" name="Show Advanced Menu"/> </menu> <menu label="Sol" name="Sun"> - <menu_item_call label="Amanhecer" name="Sunrise"/> - <menu_item_call label="Meio-dia" name="Noon"/> - <menu_item_call label="Pôr-do-sol" name="Sunset"/> - <menu_item_call label="Meia-noite" name="Midnight"/> - <menu_item_call label="Usar configurações da região" name="Use Region Settings"/> + <menu_item_check label="Amanhecer" name="Sunrise"/> + <menu_item_check label="Meio-dia" name="Noon"/> + <menu_item_check label="Pôr-do-sol" name="Sunset"/> + <menu_item_check label="Meia-noite" name="Midnight"/> + <menu_item_check label="Usar configurações da região" name="Use Region Settings"/> </menu> <menu label="Editor de ambientes" name="Environment Editor"> <menu_item_call label="Configurações do ambiente..." name="Environment Settings"/> @@ -150,7 +153,8 @@ <menu_item_check label="Encaixar em grade" name="Snap to Grid"/> <menu_item_call label="Encaixar objeto XY em grade" name="Snap Object XY to Grid"/> <menu_item_call label="Usar seleção em grade" name="Use Selection for Grid"/> - <menu_item_call label="Opções de grade" name="Grid Options"/> + <menu_item_call label="Opções de grade..." name="Grid Options"/> + <menu_item_call label="Definir permissões padrão..." name="Set default permissions"/> </menu> <menu label="Upload" name="Upload"> <menu_item_call label="Imagem (L$[COST])..." name="Upload Image"/> @@ -158,15 +162,12 @@ <menu_item_call label="Animação (L$[COST])..." name="Upload Animation"/> <menu_item_call label="Modelar..." name="Upload Model"/> <menu_item_call label="Volume (L$[COST] por arquivo)..." name="Bulk Upload"/> - <menu_item_call label="Autorizações de upload padrão" name="perm prefs"/> </menu> <menu_item_call label="Desfazer" name="Undo"/> <menu_item_call label="Repetir" name="Redo"/> </menu> <menu label="Ajuda" name="Help"> <menu_item_call label="Como..." name="How To"/> - <menu_item_call label="[SECOND_LIFE] Ajuda" name="Second Life Help"/> - <menu_item_call label="Guia do usuário" name="User’s guide"/> <menu_item_call label="Base de conhecimento" name="Knowledge Base"/> <menu_item_call label="Wiki" name="Wiki"/> <menu_item_call label="Fóruns da comunidade" name="Community Forums"/> @@ -188,6 +189,7 @@ <menu label="Ferramentas de desempenho" name="Performance Tools"> <menu_item_call label="Medidor de lag" name="Lag Meter"/> <menu_item_check label="Barra de estatísticas" name="Statistics Bar"/> + <menu_item_call label="Estatísticas de carregamento de cena" name="Scene Load Statistics"/> <menu_item_check label="Mostrar peso do desenho para avatares" name="Avatar Rendering Cost"/> </menu> <menu label="Realces e visibilidade" name="Highlighting and Visibility"> @@ -249,6 +251,7 @@ <menu_item_check label="Tempos" name="Fast Timers"/> <menu_item_check label="Memória" name="Memory"/> <menu_item_check label="Estatísticas da cena" name="Scene Statistics"/> + <menu_item_check label="Monitor de carregamento de cena" name="Scene Loading Monitor"/> <menu_item_call label="Painel de depuração de obtenção de textura" name="Texture Fetch Debug Console"/> <menu_item_call label="Region Info to Debug Console" name="Region Info to Debug Console"/> <menu_item_check label="Câmera:" name="Camera"/> @@ -280,6 +283,7 @@ <menu_item_check label="Taxa de quadros aleatória" name="Randomize Framerate"/> <menu_item_check label="Frame Test" name="Frame Test"/> <menu_item_call label="Perfil do quadro" name="Frame Profile"/> + <menu_item_call label="Benchmark" name="Benchmark"/> </menu> <menu label="Render Metadata" name="Render Metadata"> <menu_item_check label="Normais" name="Normals"/> @@ -287,6 +291,8 @@ <menu_item_check label="Tipo de atualização" name="Update Type"/> <menu_item_check label="Dados LOD" name="LOD Info"/> <menu_item_check label="Fila de construção" name="Build Queue"/> + <menu_item_check label="Partículas" name="Particles"/> + <menu_item_check label="Junções" name="Joints"/> <menu_item_check label="Vetores de vento" name="Wind Vectors"/> <menu_item_check label="Renderizar complexidade" name="rendercomplexity"/> <menu_item_check label="Bytes do anexo" name="attachment bytes"/> @@ -312,6 +318,7 @@ <menu_item_check label="Render Attached Lights" name="Render Attached Lights"/> <menu_item_check label="Render Attached Particles" name="Render Attached Particles"/> <menu_item_check label="Objetos iridescentes" name="Hover Glow Objects"/> + <menu_item_call label="Limpar cache imediatamente" name="Cache Clear"/> </menu> <menu label="Rede" name="Network"> <menu_item_check label="Pausar avatar" name="AgentPause"/> @@ -327,7 +334,6 @@ <menu_item_call label="Teste de mídia do navegador" name="Web Browser Test"/> <menu_item_call label="Navegador de conteúdo web" name="Web Content Browser"/> <menu_item_call label="Print Selected Object Info" name="Print Selected Object Info"/> - <menu_item_check label="Console de depuração de região" name="Region Debug Console"/> <menu_item_check label="Debug Clicks" name="Debug Clicks"/> <menu_item_check label="Debug Mouse Events" name="Debug Mouse Events"/> </menu> diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml index d5096ec858..00c0b13670 100755 --- a/indra/newview/skins/default/xui/pt/notifications.xml +++ b/indra/newview/skins/default/xui/pt/notifications.xml @@ -113,15 +113,15 @@ Consulte o [[MARKETPLACE_IMPORTS_URL] log de erros] para mais informações. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="OutboxImportFailed"> - Falha de transferência + Falha na transferência com o erro '[ERROR_CODE]' -Nenhuma pasta enviada para o Mercado devido a um erro do sistema ou da rede. Tente novamente mais tarde. +Nenhuma pasta foi enviada ao Marketplace devido a um erro do sistema ou da rede. Tente novamente mais tarde. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="OutboxInitFailed"> - Falha na inicialização do Mercado + Falha na inicialização do Marketplace com o erro '[ERROR_CODE]' -Falha na inicialização do mercado devido a um erro do sistema ou da rede. Tente novamente mais tarde. +Ocorreu uma falha na inicialização do Marketplace devido a um erro do sistema ou da rede. Tente novamente mais tarde. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="CompileQueueSaveText"> @@ -209,6 +209,22 @@ Qualquer membro numa função com esta habilidade, pode atribuir a sí mesmo -- Adicionar esta habilidade a '[ROLE_NAME]'? <usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/> </notification> + <notification name="AssignBanAbilityWarning"> + Você está prestes a adicionar a função '[ACTION_NAME]' ao cargo '[ROLE_NAME]'. + + *AVISO* +Qualquer membro em um cargo com essa função também terá as funções '[ACTION_NAME_2]' e '[ACTION_NAME_3]' + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="RemoveBanAbilityWarning"> + Você está removendo a função '[ACTION_NAME]' do cargo '[ROLE_NAME]'. + + *AVISO* +Remover essa função NÃO removerá as funções '[ACTION_NAME_2]' e '[ACTION_NAME_3]'. + +Se você não quiser que essas funções sejam concedidas a esse cargo, desative-as imediatamente. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="EjectGroupMemberWarning"> Você está prestes a expulsar [AVATAR_NAME] do grupo. <usetemplate ignoretext="Confirmar expulsão de um participante do grupo" name="okcancelignore" notext="Cancelar" yestext="Expulsar"/> @@ -1570,6 +1586,14 @@ consulte a informação [[INFO_URL] sobre essa atualização] Não foi possível deixar o grupo. Você não pode deixar o grupo pois é o último proprietário dele. Primeiramente, atribua outro membro à função de proprietário. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="GroupDepartError"> + Não foi possível deixar o grupo: [reason]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="GroupDepart"> + Você deixou o grupo [group_name]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="ConfirmKick"> Tem CERTEZA de que deseja expulsar todos os residentes do grid? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Chutar todos"/> @@ -1722,6 +1746,10 @@ Por favor volte mais tarde. Tem certeza de quer ser teletransportado para <nolink>[LOCATION]</nolink>? <usetemplate ignoretext="Confirmar se eu quero ser teletransportado para marcos" name="okcancelignore" notext="Cancelar" yestext="Teletransportar"/> </notification> + <notification name="TeleportViaSLAPP"> + Tem certeza de quer ser teletransportado para <nolink>[LOCATION]</nolink>? + <usetemplate ignoretext="Confirmo que desejo me teleportar via SLAPP" name="okcancelignore" notext="Cancelar" yestext="Teletransportar"/> + </notification> <notification name="TeleportToPick"> Teletransportar para [PICK]? <usetemplate ignoretext="Confirmar se eu quero ser teletransportado para Destaques" name="okcancelignore" notext="Cancelar" yestext="Teletransportar"/> @@ -1932,6 +1960,9 @@ Isto mudará milhares de regiões e fará o spaceserver soluçar. <notification name="ProblemAddingEstateManager"> Problemas em adicionar um novo gerente da propriedade. Uma ou mais propriedades podem ter uma lista de gerentes cheia. </notification> + <notification name="ProblemAddingEstateBanManager"> + Não é possível adicionar proprietários ou gerentes de terreno à lista de bloqueio. + </notification> <notification name="ProblemAddingEstateGeneric"> Problemas em adicionar a esta lista de propriedades. Uma ou mais propriedades podem ter uma lista cheia. </notification> @@ -2444,6 +2475,12 @@ Selecione só um objeto. <notification name="SystemMessage"> [MESSAGE] </notification> + <notification name="FlickrConnect"> + [MESSAGE] + </notification> + <notification name="TwitterConnect"> + [MESSAGE] + </notification> <notification name="PaymentReceived"> [MESSAGE] </notification> @@ -3012,19 +3049,25 @@ Mais detalhes no log. Não foi possível obter o recurso '[CAPABILITY]' da região. </notification> <notification name="ShareItemsConfirmation"> - Tem certeza de que quer compartilhar os itens abaixo? + Tem certeza de que deseja compartilhar os itens abaixo? <nolink>[ITEMS]</nolink> Com os seguintes residentes: -[RESIDENTS] +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ShareFolderConfirmation"> - Apenas uma pasta pode ser compartilhada por vez. + É possível compartilhar apenas uma pasta de cada vez. + +Tem certeza de que deseja compartilhar os itens abaixo? + +<nolink>[ITEMS]</nolink> + +Com os seguintes residentes: -Tem certeza de que quer compartilhar os itens abaixo? +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ItemsShared"> @@ -3478,10 +3521,6 @@ Tente novamente em instantes. <notification name="EjectComingSoon"> Você não tem mais permissão para ficar aqui e tem [EJECT_TIME] segundos para sair. </notification> - <notification name="NoEnterServerFull"> - Você não pode entrar nesta região porque -o servidor está cheio. - </notification> <notification name="SaveBackToInvDisabled"> Salvar no inventário foi desativado. </notification> @@ -3671,6 +3710,9 @@ o servidor está cheio. <notification name="LinkFailedTooMuchPhysics"> O objeto usa muitos recursos físicos – sua dinâmica foi desativada. </notification> + <notification name="EstateManagerFailedllTeleportHome"> + O objeto '[OBJECT_NAME]' em [SLURL] não pode teleportar gerentes de terreno de volta para casa. + </notification> <notification name="TeleportedHomeByObjectOnParcel"> Você foi teletransportado para seu início pelo objeto '[OBJECT_NAME]' no lote '[PARCEL_NAME]' </notification> @@ -3861,13 +3903,18 @@ o servidor está cheio. Não há lotes alugados suficientes na seleção para reunir. </notification> <notification name="CantDivideLandMultipleParcelsSelected"> - Não é possível dividir o terreno.\nHá mais de um lote selecionado.\nTente selecionar um pedaço menor de terreno. + Não é possível dividir o terreno. +Mais de um lote foi selecionado. +Tente selecionar uma quantidade menor de terreno. </notification> <notification name="CantDivideLandCantFindParcel"> - Não é possível dividir o terreno.\nNão é possível encontrar o lote.\nComunique isso em Ajuda -> Relatar bug... + Não é possível dividir o terreno. +Não é possível encontrar o lote. +Reporte em Ajuda -> Relatar bug... </notification> <notification name="CantDivideLandWholeParcelSelected"> - Não é possível dividir o terreno. O lote inteiro está selecionado.\nTente selecionar um pedaço menor do terreno. + Não é possível dividir o terreno. Todo o lote foi selecionado. +Tente selecionar uma quantidade menor de terreno. </notification> <notification name="LandHasBeenDivided"> O terreno foi dividido. @@ -4007,4 +4054,12 @@ o servidor está cheio. Não foi possível mover arquivos. Caminho anterior restaurado. <usetemplate ignoretext="Não foi possível mover arquivos. Caminho anterior restaurado." name="okignore" yestext="OK"/> </notification> + <notification name="DefaultObjectPermissions"> + Ocorreu um problema ao salvar as permissões padrão devido ao seguinte motivo: [REASON]. Tente definir as permissões padrão mais tarde. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="ChatHistoryIsBusyAlert"> + O arquivo de histórico de bate-papo está ocupado com uma operação anterior. Tente novamente em alguns minutos ou selecione outra pessoa para bater papo. + <usetemplate name="okbutton" yestext="OK"/> + </notification> </notifications> diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_account.xml b/indra/newview/skins/default/xui/pt/panel_facebook_account.xml new file mode 100644 index 0000000000..b449e7959d --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_facebook_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_account"> + <string name="facebook_connected" value="Você está conectado ao Facebook como:"/> + <string name="facebook_disconnected" value="Não conectado ao Facebook"/> + <text name="account_caption_label"> + Não conectado ao Facebook. + </text> + <panel name="panel_buttons"> + <button label="Conectar..." name="connect_btn"/> + <button label="Desconectar" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Aprenda a publicar no Facebook] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_friends.xml b/indra/newview/skins/default/xui/pt/panel_facebook_friends.xml new file mode 100644 index 0000000000..9cb7a8b7d1 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_facebook_friends.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_friends"> + <string name="facebook_friends_empty" value="No momento, você não tem amigos do Facebook que também são residentes do Second Life. Convide seus amigos do Facebook para ingressar no Second Life hoje mesmo!"/> + <string name="facebook_friends_no_connected" value="No momento, você não está conectado ao Facebook. Vá para a aba Conta para se conectar e ativar esse recurso."/> + <accordion name="friends_accordion"> + <accordion_tab name="tab_second_life_friends" title="Amigos do SL"/> + <accordion_tab name="tab_suggested_friends" title="Adicionar essas pessoas como amigos do SL"/> + </accordion> + <text name="facebook_friends_status"> + Não conectado ao Facebook. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_photo.xml b/indra/newview/skins/default/xui/pt/panel_facebook_photo.xml new file mode 100644 index 0000000000..22615e0769 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_facebook_photo.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Resolução da imagem"> + <combo_box.item label="Janela atual" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1200x630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtros de imagem"> + <combo_box.item label="Sem filtro" name="NoFilter"/> + </combo_box> + <button label="Atualizar" name="new_snapshot_btn" tool_tip="Clique para atualizar"/> + <button label="Visualizar" name="big_preview_btn" tool_tip="Clique para alternar entre visualizações"/> + <text name="caption_label"> + Comentário (opcional): + </text> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Postar" name="post_photo_btn"/> + <button label="Cancelar" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_place.xml b/indra/newview/skins/default/xui/pt/panel_facebook_place.xml new file mode 100644 index 0000000000..97596d64c6 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_facebook_place.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_place"> + <layout_stack name="stack_place"> + <layout_panel name="place_detail_panel"> + <text name="place_caption_label"> + Diga algo sobre onde você está: + </text> + </layout_panel> + <layout_panel name="place_map_panel"> + <check_box initial_value="false" label="" name="add_place_view_cb"/> + </layout_panel> + <layout_panel name="place_button_panel"> + <button label="Postar" name="post_place_btn"/> + <button label="Cancelar" name="cancel_place_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_status.xml b/indra/newview/skins/default/xui/pt/panel_facebook_status.xml new file mode 100644 index 0000000000..251580666e --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_facebook_status.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_status"> + <layout_stack name="stack_status"> + <layout_panel name="status_detail_panel"> + <text name="status_caption_label"> + No que você está pensando? + </text> + </layout_panel> + <layout_panel name="status_button_panel"> + <button label="Postar" name="post_status_btn"/> + <button label="Cancelar" name="cancel_status_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_flickr_account.xml b/indra/newview/skins/default/xui/pt/panel_flickr_account.xml new file mode 100644 index 0000000000..ed240b0013 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_flickr_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_account"> + <string name="flickr_connected" value="Você está conectado ao Flickr como:"/> + <string name="flickr_disconnected" value="Não conectado ao Flickr"/> + <text name="account_caption_label"> + Não conectado ao Flickr. + </text> + <panel name="panel_buttons"> + <button label="Conectar..." name="connect_btn"/> + <button label="Desconectar" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Aprenda a publicar no Flickr] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_flickr_photo.xml b/indra/newview/skins/default/xui/pt/panel_flickr_photo.xml new file mode 100644 index 0000000000..77d8afb47c --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_flickr_photo.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Resolução da imagem"> + <combo_box.item label="Janela atual" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtros de imagem"> + <combo_box.item label="Sem filtro" name="NoFilter"/> + </combo_box> + <button label="Atualizar" name="new_snapshot_btn" tool_tip="Clique para atualizar"/> + <button label="Visualizar" name="big_preview_btn" tool_tip="Clique para alternar entre visualizações"/> + <text name="title_label"> + Título: + </text> + <text name="description_label"> + Descrição: + </text> + <check_box initial_value="true" label="Incluir localização do SL no final da descrição" name="add_location_cb"/> + <text name="tags_label"> + Tags: + </text> + <text name="tags_help_label"> + Separe as tags com espaços +Use "" para tags com várias palavras + </text> + <combo_box name="rating_combobox" tool_tip="Classificação de conteúdo do Flickr"> + <combo_box.item label="Classificação segura do Flickr" name="SafeRating"/> + <combo_box.item label="Classificação moderada do Flickr" name="ModerateRating"/> + <combo_box.item label="Classificação restrita do Flickr" name="RestrictedRating"/> + </combo_box> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Enviar" name="post_photo_btn"/> + <button label="Cancelar" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/pt/panel_group_bulk_ban.xml new file mode 100644 index 0000000000..20cc2fe6e6 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_group_bulk_ban.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Banir residentes" name="bulk_ban_panel"> + <panel.string name="loading"> + (carregando...) + </panel.string> + <panel.string name="ban_selection_too_large"> + Os bloqueios do grupo não foram enviados: muitos residentes selecionados. Os banimentos do grupo são limitados a 100 por solicitação. + </panel.string> + <panel.string name="ban_not_permitted"> + O banimento do grupo não foi enviado: você não tem a função "Gerenciar lista de banidos". + </panel.string> + <panel.string name="ban_limit_fail"> + O banimento do grupo não foi enviado: seu grupo atingiu o limite de banimentos. + </panel.string> + <panel.string name="partial_ban"> + Alguns banimentos do grupo não foram enviados: +[REASONS] + </panel.string> + <panel.string name="ban_failed"> + Os banimentos do grupo não foram enviados: +[REASONS] + </panel.string> + <panel.string name="residents_already_banned"> + - O(s) seguinte(s) residente(s) já estão banidos: [RESIDENTS]. + </panel.string> + <panel.string name="ban_limit_reached"> + - Limite de banimentos atingido, os seguintes agentes não foram banidos: [RESIDENTS]. + </panel.string> + <panel.string name="cant_ban_yourself"> + - Você não pode banir a si próprio. + </panel.string> + <text name="help_text"> + Selecione um ou mais residentes para banir do grupo. Clique em "Abrir seletor de residentes" para começar. + </text> + <button label="Abrir seletor de residentes" name="add_button"/> + <name_list name="banned_agent_list" tool_tip="Pressione Ctrl enquanto clica nos nomes dos residentes"/> + <button label="Remover selecionados da lista" name="remove_button" tool_tip="Exclui os residentes selecionados acima da lista de bloqueios"/> + <button label="Banir residentes" name="ban_button"/> + <button label="Cancelar" name="cancel_button"/> + <string name="GroupBulkBan"> + Banimento do grupo + </string> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml index 30c825723b..7d8531a482 100755 --- a/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml @@ -20,7 +20,7 @@ <layout_panel name="group_accordions"> <accordion name="groups_accordion"> <accordion_tab name="group_general_tab" title="Geral"/> - <accordion_tab name="group_roles_tab" title="Cargos"/> + <accordion_tab name="group_roles_tab" title="Funções e membros"/> <accordion_tab name="group_notices_tab" title="Avisos"/> <accordion_tab name="group_land_tab" title="Terrenos/Bens"/> </accordion> diff --git a/indra/newview/skins/default/xui/pt/panel_group_invite.xml b/indra/newview/skins/default/xui/pt/panel_group_invite.xml index de057481de..08bd4a3b6b 100755 --- a/indra/newview/skins/default/xui/pt/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/pt/panel_group_invite.xml @@ -22,7 +22,7 @@ Escolha que Função atribuir a eles: </text> <combo_box name="role_name" tool_tip="Selecione o cargo da lista de cargos que você pode designar a membros"/> - <button label="Mandar convites" name="ok_button"/> + <button label="Enviar convites" name="invite_button"/> <button label="Cancelar" name="cancel_button"/> <string name="GroupInvitation"> Convite diff --git a/indra/newview/skins/default/xui/pt/panel_group_roles.xml b/indra/newview/skins/default/xui/pt/panel_group_roles.xml index 11a31570d1..162c4743ec 100755 --- a/indra/newview/skins/default/xui/pt/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/pt/panel_group_roles.xml @@ -19,15 +19,18 @@ <name_list.columns label="Membro" name="name"/> <name_list.columns label="Doações" name="donated"/> <name_list.columns label="Status" name="online"/> + <name_list.columns label="Título" name="title"/> </name_list> - <button label="Convidar" name="member_invite" /> + <button label="Convidar" name="member_invite"/> <button label="Ejetar" name="member_eject"/> + <button label="Banir membro(s)" name="member_ban"/> </panel> <panel label="CARGOS" name="roles_sub_tab"> <panel.string name="help_text"> - Cada cargo tem um nome e uma lista das funções que membros designados podem desempenhar. - Os membros podem ter um ou mais cargos. - Cada grupo pode ter 10 cargos, incluindo Membro e Dono do Grupo. + Os cargos têm um título e uma lista de funções permitidas + que os membros podem realizar. Os membros podem pertencer a + um ou mais cargos. Um grupo pode ter até 10 cargos, + inclusive Todos e Proprietário. </panel.string> <panel.string name="cant_delete_role"> As funções 'Todos' e 'Owners' são especiais e não podem ser apagadas. @@ -46,12 +49,27 @@ </panel> <panel height="148" label="FUNÇÕES" name="actions_sub_tab" tool_tip="Você pode ver a descrição de uma função e quais cargos e membros podem desempenhá-la."> <panel.string name="help_text"> - As habilidades permitem que os membros nas funções façam coisas específicas dentro do grupo. -Há uma grande variedade de habilidades. + As funções permitem que os membros em cargos realizem + tarefas específicas neste grupo. Existem diversas funções. </panel.string> <filter_editor label="Filtrar por função" name="filter_input"/> <scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Selecione uma função para ver mais detalhes"/> </panel> + <panel label="RESIDENTES BANIDOS" name="banlist_sub_tab" tool_tip="Visualizar os residentes banidos deste grupo."> + <panel.string name="help_text"> + Qualquer residente na lista de banidos não poderá entrar no grupo. + </panel.string> + <panel.string name="ban_count_template"> + Número de banimentos: [COUNT]/[LIMIT] + </panel.string> + <name_list name="ban_list"> + <name_list.columns label="Residente" name="name"/> + <name_list.columns label="Data do banimento" name="ban_date"/> + </name_list> + <button label="Banir residente(s)" name="ban_create" tool_tip="Banir residentes do seu grupo"/> + <button label="Cancelar banimento(s)" name="ban_delete" tool_tip="Cancelar o banimento de residentes selecionados do seu grupo"/> + <button name="ban_refresh" tool_tip="Atualizar a lista de banidos"/> + </panel> </tab_container> <panel name="members_footer"> <text name="static"> diff --git a/indra/newview/skins/default/xui/pt/panel_login.xml b/indra/newview/skins/default/xui/pt/panel_login.xml index d7e9fa76ea..8ac3e57c4c 100755 --- a/indra/newview/skins/default/xui/pt/panel_login.xml +++ b/indra/newview/skins/default/xui/pt/panel_login.xml @@ -1,46 +1,27 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php?lang=pt </panel.string> - <layout_stack name="login_widgets"> - <layout_panel name="login"> - <text name="log_in_text"> - LOGIN - </text> - <text name="username_text"> - Nome de usuário: - </text> - <combo_box name="username_combo" tool_tip="O nome de usuário que você escolheu ao fazer seu cadastro, como zecazc12 or Magia Solar"/> - <text name="password_text"> - Senha: - </text> - </layout_panel> - <layout_panel name="start_location_panel"> - <text name="start_location_text"> - Começar em: - </text> - <combo_box name="start_location_combo"> - <combo_box.item label="Última posição" name="MyLastLocation"/> - <combo_box.item label="Minha casa" name="MyHome"/> - <combo_box.item label="<Digite o nome da região>" name="Typeregionname"/> - </combo_box> - </layout_panel> - <layout_panel name="links_login_panel"> - <text name="login_help"> - Precisa de ajuda com o login? - </text> + <layout_stack name="ui_stack"> + <layout_panel name="ui_container"> + <combo_box label="Nome de usuário" name="username_combo" tool_tip="O nome de usuário que você escolheu ao fazer seu cadastro, como zecazc12 ou Magia Solar"/> + <line_editor label="Senha" name="password_edit"/> + <check_box label="Lembrar-me" name="remember_check"/> <text name="forgot_password_text"> - Esqueceu seu nome ou senha? + Senha esquecida </text> <button label="Login" name="connect_btn"/> - <check_box label="Lembrar senha" name="remember_check"/> - </layout_panel> - <layout_panel name="links"> - <text name="create_account_text"> - CRIE SUA CONTA + <text name="At_My_Last_Location_Label"> + no último local </text> - <button label="Comece agora" name="create_new_account_btn"/> + <combo_box label="Meus locais favoritos" name="start_location_combo"> + <combo_box.item label="Minha casa" name="MyHome"/> + </combo_box> + <button label="Login" name="connect_favorite_btn"/> + <line_editor label="Digite um local" name="location_edit"/> + <button label="Login" name="connect_location_btn"/> + <combo_box label="Selecionar grade" name="server_combo"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_login_first.xml b/indra/newview/skins/default/xui/pt/panel_login_first.xml new file mode 100644 index 0000000000..6e4ef65bea --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_login_first.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_login"> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php?lang=pt + </panel.string> + <layout_stack name="logo_stack"> + <layout_panel name="parent_panel2"> + <layout_stack name="widget_stack"> + <layout_panel name="widget_container"> + <combo_box label="Nome de usuário" name="username_combo" tool_tip="O nome de usuário que você escolheu ao fazer seu cadastro, como zecazc12 ou Magia Solar"/> + <line_editor label="Senha" name="password_edit"/> + <button label="Login" name="connect_btn"/> + <check_box label="Lembrar-me" name="remember_check"/> + <text name="forgot_password_text"> + Senha esquecida + </text> + </layout_panel> + </layout_stack> + </layout_panel> + <layout_panel name="parent_panel3"> + <layout_stack name="images_stack"> + <layout_panel name="images_container"> + <text name="image_caption_left"> + Sua primeira parada é a Ilha da Educação. Encontre o portal de saída! + </text> + <text name="image_caption_right"> + Em seguida, explore a Ilha Social e encontre novos residentes! + </text> + </layout_panel> + </layout_stack> + </layout_panel> + </layout_stack> +</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 c72928fc35..3ea592a957 100755 --- a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml @@ -28,4 +28,5 @@ <check_box label="Mostrar grade selecionada ao entrar" name="show_grid_selection_check"/> <check_box label="Exibir menu avançado" name="show_advanced_menu_check"/> <check_box label="Exibir menu desenvolvedor" name="show_develop_menu_check"/> + <button label="Permissões de criação padrão" name="default_creation_permissions"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml index 8a0495f9bb..68fbd049b1 100755 --- a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml @@ -30,14 +30,10 @@ <combo_box.item label="Geral e Moderado" name="Desired_Mature"/> <combo_box.item label="Geral" name="Desired_PG"/> </combo_box> - <text name="start_location_textbox"> - Posição inicial: + <check_box label="Mostrar locais favoritos na tela de logon" name="favorites_on_login_check"/> + <text name="favorites_check_extra_text"> + (Outras pessoas que usarem esse computador também poderão vê-los) </text> - <combo_box name="start_location_combo"> - <combo_box.item label="Última localização" name="MyLastLocation" tool_tip="Voltar ao lugar onde estava antes."/> - <combo_box.item label="Meu início" name="MyHome" tool_tip="Voltar ao meu início."/> - </combo_box> - <check_box initial_value="true" label="Mostrar ao entrar" name="show_location_checkbox"/> <text name="name_tags_textbox"> Mostrar nomes: </text> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml index 8ca05c948a..78323fc47d 100755 --- a/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml @@ -7,7 +7,7 @@ <text name="cache_size_label_l"> (Locações, imagens, web, histórico de busca) </text> - <check_box label="Mostrar meu perfil info em resultados de busca" name="online_searchresults"/> + <check_box label="Exibir meu perfil em resultados de Pesquisa" name="online_searchresults"/> <check_box label="Apenas amigos e grupos sabem que estou online" name="online_visibility"/> <check_box label="Apenas amigos e grupos podem me chamar ou enviar MI" name="voice_call_friends_only_check"/> <check_box label="Desligar o microfone quando terminar chamadas" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/pt/panel_region_debug.xml b/indra/newview/skins/default/xui/pt/panel_region_debug.xml index be15d40d74..9070563fd0 100755 --- a/indra/newview/skins/default/xui/pt/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/pt/panel_region_debug.xml @@ -7,11 +7,8 @@ desconhecido </text> <check_box label="Desativar scripts" name="disable_scripts_check" tool_tip="Desativar todos os scripts nesta região"/> - <button label="?" name="disable_scripts_help"/> <check_box label="Desativar colisões" name="disable_collisions_check" tool_tip="Desabilitar colisões de não-avatares nessa região"/> - <button label="?" name="disable_collisions_help"/> <check_box label="Desativar física" name="disable_physics_check" tool_tip="Desativar toda a físíca nesta região"/> - <button label="?" name="disable_physics_help"/> <button label="Aplicar" name="apply_btn"/> <text name="objret_text_lbl" width="130"> Devolver objeto @@ -31,10 +28,8 @@ <check_box label="Em todas as regiões desta propriedade" name="return_estate_wide" tool_tip="Devolver objetos em todas as regiões que constituem esta propriedade"/> <button label="Devolver" name="return_btn"/> <button label="Principais colidentes..." name="top_colliders_btn" tool_tip="Lista dos objetos com maior potencial de colisão" width="280"/> - <button label="?" left="297" name="top_colliders_help"/> - <button label="Principais scripts..." name="top_scripts_btn" tool_tip="Lista de objetos que mais passam tempo executando scripts" width="280"/> - <button label="?" left="297" name="top_scripts_help"/> <button label="Reiniciar a região" name="restart_btn" tool_tip="Após 2 minutos de contagem regressiva, reiniciar a região"/> - <button label="?" name="restart_help"/> + <button label="Principais scripts..." name="top_scripts_btn" tool_tip="Lista de objetos que mais passam tempo executando scripts" width="280"/> <button label="Cancelar reinício" name="cancel_restart_btn" tool_tip="Cancelar reinício da região"/> + <button label="Console de depuração de região" name="region_debug_console_btn" tool_tip="Abrir console de depuração de região"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_region_general.xml b/indra/newview/skins/default/xui/pt/panel_region_general.xml index 4be1cd11c0..a0d4579a04 100755 --- a/indra/newview/skins/default/xui/pt/panel_region_general.xml +++ b/indra/newview/skins/default/xui/pt/panel_region_general.xml @@ -20,12 +20,12 @@ </text> <check_box label="Bloquear terraplenagem" name="block_terraform_check"/> <check_box label="Bloquear voos" name="block_fly_check"/> + <check_box label="Bloquear sobrevoo no terreno" name="block_fly_over_check" tool_tip="Estender verificações de acesso para cima para evitar que voem sobre um terreno"/> <check_box label="Permitir dano" name="allow_damage_check"/> <check_box label="Restringir empurrões" name="restrict_pushobject"/> <check_box label="Permitir revenda do terreno" name="allow_land_resell_check"/> <check_box label="Permitir junção/divisão do terreno" name="allow_parcel_changes_check"/> <check_box label="Bloquear exibição do terreno na busca" name="block_parcel_search_check" tool_tip="Permitir que as pessoas vejam esta região e seus lotes nos resultados de busca"/> - <check_box label="Permitir objetos mesh" name="mesh_rez_enabled_check" tool_tip="Permitir que que outras pessoas renderizem objectos mesh nessa região"/> <spinner label="Limite do agente" name="agent_limit_spin"/> <spinner label="Bônus de objetos" name="object_bonus_spin"/> <text label="Maturidade" name="access_text"> diff --git a/indra/newview/skins/default/xui/pt/panel_script_ed.xml b/indra/newview/skins/default/xui/pt/panel_script_ed.xml index 39bb5edc75..c546adcf8b 100755 --- a/indra/newview/skins/default/xui/pt/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/pt/panel_script_ed.xml @@ -24,6 +24,7 @@ <menu_item_call label="Reverter todas as alterações" name="Revert All Changes"/> <menu_item_call label="Carregar do arquivo..." name="LoadFromFile"/> <menu_item_call label="Salvar para o arquivo..." name="SaveToFile"/> + <menu_item_call label="Cores..." name="Colors"/> </menu> <menu label="Editar" name="Edit"> <menu_item_call label="desfazer" name="Undo"/> @@ -41,9 +42,9 @@ <menu_item_call label="ajuda palavra- chave..." name="Keyword Help..."/> </menu> </menu_bar> - <text_editor name="Script Editor"> + <script_editor name="Script Editor"> Carregando... - </text_editor> + </script_editor> <combo_box label="Inserir..." name="Insert..."/> <button label="Salvar" label_selected="Salvar" name="Save_btn"/> <button label="Editar..." name="Edit_btn"/> diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml index 7f1452e992..bce44d2ed6 100755 --- a/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml @@ -4,4 +4,13 @@ <button label="E-mail" name="save_to_email_btn"/> <button label="Salvar em Meu inventário (L$[AMOUNT])" name="save_to_inventory_btn"/> <button label="Salvar no meu PC" name="save_to_computer_btn"/> + <text name="send_to_facebook_textbox"> + Enviar para: [secondlife:/// Facebook] + </text> + <text name="send_to_twitter_textbox"> + [secondlife:/// Twitter] + </text> + <text name="send_to_flickr_textbox"> + [secondlife:/// Flickr] + </text> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml index 65f80fddd2..5d8a024754 100755 --- a/indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="teleport_history_item"> + <text name="timestamp" value="..."/> <button name="profile_btn" tool_tip="Mostrar dados do item"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_twitter_account.xml b/indra/newview/skins/default/xui/pt/panel_twitter_account.xml new file mode 100644 index 0000000000..32ab437786 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_twitter_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_account"> + <string name="twitter_connected" value="Você está conectado ao Twitter como:"/> + <string name="twitter_disconnected" value="Não conectado ao Twitter"/> + <text name="account_caption_label"> + Não conectado ao Twitter. + </text> + <panel name="panel_buttons"> + <button label="Conectar..." name="connect_btn"/> + <button label="Desconectar" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Aprenda a publicar no Twitter] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_twitter_photo.xml b/indra/newview/skins/default/xui/pt/panel_twitter_photo.xml new file mode 100644 index 0000000000..3958d5f0f9 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_twitter_photo.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="text_panel"> + <text name="status_label"> + Próximas etapas? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="Incluir localização do SL" name="add_location_cb"/> + <check_box initial_value="true" label="Incluir uma foto" name="add_photo_cb"/> + </layout_panel> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Resolução da imagem"> + <combo_box.item label="Janela atual" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Filtros de imagem"> + <combo_box.item label="Sem filtro" name="NoFilter"/> + </combo_box> + <button label="Atualizar" name="new_snapshot_btn" tool_tip="Clique para atualizar"/> + <button label="Visualizar" name="big_preview_btn" tool_tip="Clique para alternar entre visualizações"/> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Enviar tweet" name="post_photo_btn"/> + <button label="Cancelar" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/pt/role_actions.xml b/indra/newview/skins/default/xui/pt/role_actions.xml index e45a3bd21f..90e2264940 100755 --- a/indra/newview/skins/default/xui/pt/role_actions.xml +++ b/indra/newview/skins/default/xui/pt/role_actions.xml @@ -3,6 +3,7 @@ <action_set description="Esta habilidades incluem poderes de adicionar ou remover membros do grupo e permitir que novos membros se juntem sem um convite." name="Membership"> <action description="Convidar pessoas para este grupo" longdescription="Em Membros > Cargos, use o botão 'Convidar' para convidar pessoas para entrar no grupo." name="member invite" value="1"/> <action description="Expulsar membros deste grupo" longdescription="Em Membros > Cargos, use o botão 'Ejetar' para tirar pessoas do grupo. Proprietários podem expulsar qualquer pessoa, menos outro proprietário. Se você não é Proprietário, um membro só pode ser expulso se tiver cargo 'Todos' e nenhum outro cargo. Para destituir um membro de seu cargo, você precisa ter a função 'Destituir membro com cargo'." name="member eject" value="2"/> + <action description="Gerenciar lista de banidos" longdescription="Permite que membros do grupo banam residentes ou revoguem o banimento neste grupo." name="allow ban" value="51"/> <action description="Alterna entre 'Inscrições abertas' e 'Taxa de associação'." longdescription="Ative 'Inscrições abertas' para que novos membros entrem no grupo sem convite, mude a 'Taxa de associação' na seção Geral." name="member options" value="3"/> </action_set> <action_set description="Estas habilidades incluem poderes de adicionar, remover e mudar funções do grupo; adicionar e remover membros em funções e designar habilidades a funções." name="Roles"> diff --git a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml index c44345323f..4747d14101 100755 --- a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml @@ -33,7 +33,7 @@ <layout_panel name="shop_btn_lp"> <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="Jogar" name="play_btn"/> <button label="Teletransportar" name="teleport_btn" tool_tip="Teletransportar para a área selecionada"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index 8436452228..577143b0dc 100755 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -28,6 +28,45 @@ <string name="StartupRequireDriverUpdate"> Falha na inicialização dos gráficos. Atualize seu driver gráfico! </string> + <string name="AboutHeader"> + [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL]) +[[VIEWER_RELEASE_NOTES_URL] [Notas da versão]] + </string> + <string name="AboutCompiler"> + Construído com [COMPILER] versão [COMPILER_VERSION] + </string> + <string name="AboutPosition"> + Você está em [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] em [REGION] localizado em <nolink>[HOSTNAME]</nolink> ([HOSTIP]) +SLURL: <nolink>[SLURL]</nolink> +(coordenadas globais [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1]) +[SERVER_VERSION] +[SERVER_RELEASE_NOTES_URL] + </string> + <string name="AboutSystem"> + CPU: [CPU] +Memória: [MEMORY_MB] MBs +Versão OS: [OS_VERSION] +Placa de vídeo: [GRAPHICS_CARD_VENDOR] +Placa gráfica: [GRAPHICS_CARD] + </string> + <string name="AboutDriver"> + Versão do driver de vídeo Windows: [GRAPHICS_CARD_VENDOR] + </string> + <string name="AboutLibs"> + Versão OpenGL: [OPENGL_VERSION] + +Versão libcurl: [LIBCURL_VERSION] +Versão J2C Decoder: [J2C_VERSION] +Versão do driver de áudio: [AUDIO_DRIVER_VERSION] +Versão Qt Webkit: [QT_WEBKIT_VERSION] +Versão do servidor de voz: [VOICE_VERSION] + </string> + <string name="AboutTraffic"> + Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) + </string> + <string name="ErrorFetchingServerReleaseNotesURL"> + Erro ao obter URL de notas de versão do servidor. + </string> <string name="ProgressRestoring"> Restaurando... </string> @@ -248,6 +287,75 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para <string name="TestingDisconnect"> Teste de desconexão </string> + <string name="SocialFlickrConnecting"> + Conectando ao Flickr... + </string> + <string name="SocialFlickrPosting"> + Publicando... + </string> + <string name="SocialFlickrDisconnecting"> + Desconectando do Flickr... + </string> + <string name="SocialFlickrErrorConnecting"> + Problema ao conectar ao Flickr + </string> + <string name="SocialFlickrErrorPosting"> + Problema ao publicar no Flickr + </string> + <string name="SocialFlickrErrorDisconnecting"> + Problema ao desconectar do Flickr + </string> + <string name="SocialTwitterConnecting"> + Conectando ao Twitter... + </string> + <string name="SocialTwitterPosting"> + Publicando... + </string> + <string name="SocialTwitterDisconnecting"> + Desconectando do Twitter... + </string> + <string name="SocialTwitterErrorConnecting"> + Problema ao conectar ao Twitter + </string> + <string name="SocialTwitterErrorPosting"> + Problema ao publicar no Twitter + </string> + <string name="SocialTwitterErrorDisconnecting"> + Problema ao desconectar do Twitter + </string> + <string name="BlackAndWhite"> + Preto e branco + </string> + <string name="Colors1970"> + Cores dos anos 1970 + </string> + <string name="Intense"> + Intenso + </string> + <string name="Newspaper"> + Retícula + </string> + <string name="Sepia"> + Sépia + </string> + <string name="Spotlight"> + Destaque + </string> + <string name="Video"> + Vídeo + </string> + <string name="Autocontrast"> + Autocontraste + </string> + <string name="LensFlare"> + Reflexo de flash + </string> + <string name="Miniature"> + Miniatura + </string> + <string name="Toycamera"> + Câmera de brinquedo + </string> <string name="TooltipPerson"> Pessoa </string> @@ -796,6 +904,12 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para <string name="use_texture"> Usar textura </string> + <string name="manip_hint1"> + Mova o cursor do mouse sobre a regra + </string> + <string name="manip_hint2"> + para ajustar à grade + </string> <string name="texture_loading"> Carregando... </string> @@ -886,12 +1000,12 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para <string name="ControlYourCamera"> Controle sua camera </string> - <string name="AgentNameSubst"> - (Você) - </string> <string name="TeleportYourAgent"> Teletransportá-lo </string> + <string name="AgentNameSubst"> + (Você) + </string> <string name="JoinAnExperience"> Participar de uma experiência </string> @@ -1216,8 +1330,7 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para <string name="InventoryInboxNoItems"> Suas compras do Marketplace aparecerão aqui. Depois, você poderá arrastá-las para seu inventário para usá-las. </string> - <string name="Unconstrained">Sem limites</string> - <string name="MarketplaceURL"> + <string name="MarketplaceURL"> https://marketplace.[MARKETPLACE_DOMAIN_NAME]/ </string> <string name="MarketplaceURL_CreateStore"> @@ -1246,6 +1359,18 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para <string name="InventoryOutboxNoItems"> Arraste as pastas para estas áreas e então clique em "Enviar para Mercado" para listar os itens para venda no [[MARKETPLACE_DASHBOARD_URL] Mercado]. </string> + <string name="InventoryOutboxInitializingTitle"> + Inicializando o Marketplace. + </string> + <string name="InventoryOutboxInitializing"> + Estamos acessando sua conta na [loja [MARKETPLACE_CREATE_STORE_URL] do Marketplace]. + </string> + <string name="InventoryOutboxErrorTitle"> + Erros do Marketplace. + </string> + <string name="InventoryOutboxError"> + A loja [[MARKETPLACE_CREATE_STORE_URL] no Marketplace] está retornando erros. + </string> <string name="Marketplace Error None"> Sem erros </string> @@ -1273,6 +1398,9 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para <string name="Open landmarks"> Marcos abertos </string> + <string name="Unconstrained"> + Sem limites + </string> <string name="no_transfer" value="(não transferível)"/> <string name="no_modify" value="(não modificável)"/> <string name="no_copy" value="(não copiável)"/> @@ -1667,6 +1795,9 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para <string name="CompileQueueDownloadedCompiling"> Baixado, agora compilando </string> + <string name="CompileQueueServiceUnavailable"> + Serviço de compilação de scripts não disponível + </string> <string name="CompileQueueScriptNotFound"> Script não encontrado no servidor. </string> @@ -3897,6 +4028,12 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="inventory_item_offered-im"> Oferta de item de inventário </string> + <string name="flickr_post_success"> + Você publicou no Flickr. + </string> + <string name="twitter_post_success"> + Você publicou no Twitter. + </string> <string name="no_session_message"> (Sessão de MI inexistente) </string> @@ -4353,6 +4490,9 @@ Denunciar abuso <string name="LocalEstimateUSD"> US$ [AMOUNT] </string> + <string name="Group Ban"> + Banimento do grupo + </string> <string name="Membership"> Plano </string> @@ -4775,6 +4915,12 @@ Tente colocar o caminho do editor entre aspas. <string name="Command_Destinations_Label"> Destinos </string> + <string name="Command_Facebook_Label"> + Facebook + </string> + <string name="Command_Flickr_Label"> + Flickr + </string> <string name="Command_Gestures_Label"> Gestos </string> @@ -4823,6 +4969,9 @@ Tente colocar o caminho do editor entre aspas. <string name="Command_Speak_Label"> Falar </string> + <string name="Command_Twitter_Label"> + Twitter + </string> <string name="Command_View_Label"> Controles da câmera </string> @@ -4853,6 +5002,12 @@ Tente colocar o caminho do editor entre aspas. <string name="Command_Destinations_Tooltip"> Destinos de interesse </string> + <string name="Command_Facebook_Tooltip"> + Publicar no Facebook + </string> + <string name="Command_Flickr_Tooltip"> + Carregar no Flickr + </string> <string name="Command_Gestures_Tooltip"> Gestos para seu avatar </string> @@ -4901,6 +5056,9 @@ Tente colocar o caminho do editor entre aspas. <string name="Command_Speak_Tooltip"> Fale com pessoas próximas usando seu microfone </string> + <string name="Command_Twitter_Tooltip"> + Twitter + </string> <string name="Command_View_Tooltip"> Alterar o ângulo da câmera </string> diff --git a/indra/newview/skins/default/xui/ru/floater_big_preview.xml b/indra/newview/skins/default/xui/ru/floater_big_preview.xml new file mode 100644 index 0000000000..cdacebadef --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_big_preview.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_big_preview" title="ПРОСМОТР"/> diff --git a/indra/newview/skins/default/xui/ru/floater_facebook.xml b/indra/newview/skins/default/xui/ru/floater_facebook.xml new file mode 100644 index 0000000000..20b9e4e151 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_facebook.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_facebook" title="ОПУБЛИКОВАТЬ В FACEBOOK"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="СТАТУС" name="panel_facebook_status"/> + <panel label="ФОТО" name="panel_facebook_photo"/> + <panel label="ВХОД" name="panel_facebook_place"/> + <panel label="ДРУЗЬЯ" name="panel_facebook_friends"/> + <panel label="АККАУНТ" name="panel_facebook_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Ошибка + </text> + <text name="connection_loading_text"> + Загрузка... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_flickr.xml b/indra/newview/skins/default/xui/ru/floater_flickr.xml new file mode 100644 index 0000000000..4f020399fb --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_flickr.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_flickr" title="ЗАГРУЗИТЬ НА FLICKR"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="ФОТО" name="panel_flickr_photo"/> + <panel label="АККАУНТ" name="panel_flickr_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Ошибка + </text> + <text name="connection_loading_text"> + Загрузка... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_lagmeter.xml b/indra/newview/skins/default/xui/ru/floater_lagmeter.xml new file mode 100644 index 0000000000..c420006a03 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_lagmeter.xml @@ -0,0 +1,151 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_lagmeter" title="УРОВЕНЬ ЛАГОВ"> + <floater.string name="max_title_msg"> + Уровень лагов + </floater.string> + <floater.string name="max_width_px"> + 360 + </floater.string> + <floater.string name="min_title_msg"> + Лаг + </floater.string> + <floater.string name="min_width_px"> + 90 + </floater.string> + <floater.string name="client_text_msg"> + Клиент + </floater.string> + <floater.string name="client_frame_rate_critical_fps"> + 10 + </floater.string> + <floater.string name="client_frame_rate_warning_fps"> + 15 + </floater.string> + <floater.string name="client_frame_time_window_bg_msg"> + Нормально, окно в фоне + </floater.string> + <floater.string name="client_frame_time_critical_msg"> + Частота кадров клиента ниже [CLIENT_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="client_frame_time_warning_msg"> + Частота кадров клиента от [CLIENT_FRAME_RATE_CRITICAL] до [CLIENT_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="client_frame_time_normal_msg"> + Нормально + </floater.string> + <floater.string name="client_draw_distance_cause_msg"> + Возможная причина: дальность отрисовки слишком велика + </floater.string> + <floater.string name="client_texture_loading_cause_msg"> + Возможная причина: загрузка изображений + </floater.string> + <floater.string name="client_texture_memory_cause_msg"> + Возможная причина: слишком много изображений в памяти + </floater.string> + <floater.string name="client_complex_objects_cause_msg"> + Возможная причина: слишком много сложных объектов в сцене + </floater.string> + <floater.string name="network_text_msg"> + Сеть + </floater.string> + <floater.string name="network_packet_loss_critical_pct"> + 10 + </floater.string> + <floater.string name="network_packet_loss_warning_pct"> + 5 + </floater.string> + <floater.string name="network_packet_loss_critical_msg"> + Сеть теряет более [NETWORK_PACKET_LOSS_CRITICAL]% пакетов + </floater.string> + <floater.string name="network_packet_loss_warning_msg"> + Сеть теряет [NETWORK_PACKET_LOSS_WARNING]–[NETWORK_PACKET_LOSS_CRITICAL]% пакетов + </floater.string> + <floater.string name="network_performance_normal_msg"> + Нормально + </floater.string> + <floater.string name="network_ping_critical_ms"> + 600 + </floater.string> + <floater.string name="network_ping_warning_ms"> + 300 + </floater.string> + <floater.string name="network_ping_critical_msg"> + Пинг соединения более [NETWORK_PING_CRITICAL] мс + </floater.string> + <floater.string name="network_ping_warning_msg"> + Пинг соединения [NETWORK_PING_WARNING]–[NETWORK_PING_CRITICAL] мс + </floater.string> + <floater.string name="network_packet_loss_cause_msg"> + Возможно, плохое соединение, или параметр «Ширина канала» слишком велик. + </floater.string> + <floater.string name="network_ping_cause_msg"> + Возможно, плохое соединение или есть работающие файлообменные программы. + </floater.string> + <floater.string name="server_text_msg"> + Сервер + </floater.string> + <floater.string name="server_frame_rate_critical_fps"> + 20 + </floater.string> + <floater.string name="server_frame_rate_warning_fps"> + 30 + </floater.string> + <floater.string name="server_single_process_max_time_ms"> + 20 + </floater.string> + <floater.string name="server_frame_time_critical_msg"> + Частота кадров сервера ниже [SERVER_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="server_frame_time_warning_msg"> + Частота кадров сервера [SERVER_FRAME_RATE_CRITICAL]–[SERVER_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="server_frame_time_normal_msg"> + Нормально + </floater.string> + <floater.string name="server_physics_cause_msg"> + Возможная причина: слишком много физических объектов + </floater.string> + <floater.string name="server_scripts_cause_msg"> + Возможная причина: слишком много скриптовых объектов + </floater.string> + <floater.string name="server_net_cause_msg"> + Возможная причина: слишком большой сетевой трафик + </floater.string> + <floater.string name="server_agent_cause_msg"> + Возможная причина: слишком много людей в регионе + </floater.string> + <floater.string name="server_images_cause_msg"> + Возможная причина: слишком много изображений + </floater.string> + <floater.string name="server_generic_cause_msg"> + Возможная причина: сервер сильно загружен + </floater.string> + <floater.string name="smaller_label"> + >> + </floater.string> + <floater.string name="bigger_label"> + << + </floater.string> + <button name="client_lagmeter" tool_tip="Уровень лагов клиента"/> + <text name="client"> + Клиент + </text> + <text name="client_text"> + Нормально + </text> + <button name="network_lagmeter" tool_tip="Уровень лагов сети"/> + <text name="network"> + Сеть + </text> + <text name="network_text"> + Нормально + </text> + <button name="server_lagmeter" tool_tip="Уровень лагов сервера"/> + <text name="server"> + Сервер + </text> + <text name="server_text"> + Нормально + </text> + <button label=">>" name="minimize" tool_tip="Переключение размера"/> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_perms_default.xml b/indra/newview/skins/default/xui/ru/floater_perms_default.xml new file mode 100644 index 0000000000..3a88788712 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_perms_default.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="perms default" title="СТАНДАРТНЫЕ РАЗРЕШЕНИЯ НА СОЗДАНИЕ"> + <panel label="Стандартные разрешения" name="default permissions"/> + <button label="OK" label_selected="OK" name="ok"/> + <button label="Отмена" label_selected="Отмена" name="cancel"/> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_region_restarting.xml b/indra/newview/skins/default/xui/ru/floater_region_restarting.xml new file mode 100644 index 0000000000..1b4c0e33dc --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_region_restarting.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="region_restarting" title="ПЕРЕЗАПУСК РЕГИОНА"> + <string name="RegionName"> + Регион, в котором вы находитесь ([NAME]), будет перезапущен. + +Если вы останетесь в этом регионе, вы выйдете из системы. + </string> + <string name="RestartSeconds"> + Секунд до перезапуска +[SECONDS] + </string> + <panel name="layout_panel_1"> + <text name="region_name"> + Регион, в котором вы находитесь (-длинное название региона-), будет перезапущен. + +Если вы останетесь в этом регионе, вы выйдете из системы. + </text> + <text name="restart_seconds"> + Секунд до перезапуска + 32767 + </text> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_report_abuse.xml b/indra/newview/skins/default/xui/ru/floater_report_abuse.xml index 6fdbdacadc..abbdeca180 100755 --- a/indra/newview/skins/default/xui/ru/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/ru/floater_report_abuse.xml @@ -35,7 +35,7 @@ <combo_box.item label="Возраст > Взрослый житель в Second Life для подростков" name="Age__Adult_resident_on_Teen_Second_Life"/> <combo_box.item label="Возраст > Малолетний житель в Second Life для подростков" name="Age__Underage_resident_outside_of_Teen_Second_Life"/> <combo_box.item label="Нападение > Боевая «песочница»/небезопасная область" name="Assault__Combat_sandbox___unsafe_area"/> - <combo_box.item label="Нападение > Безопасная область" name="Assault__Safe_area"/> + <combo_box.item label="Нападение > Стрельба, нанесение ударов или толкание другого жителя в безопасной области" name="Assault__Safe_area"/> <combo_box.item label="Нападение > «Песочница» испытания оружия" name="Assault__Weapons_testing_sandbox"/> <combo_box.item label="Коммерция > Не удалось доставить продукт или услугу" name="Commerce__Failure_to_deliver_product_or_service"/> <combo_box.item label="Раскрытие > Информация о реальном мире" name="Disclosure__Real_world_information"/> @@ -49,25 +49,25 @@ <combo_box.item label="Мошенничество > L$" name="Fraud__L$"/> <combo_box.item label="Мошенничество > Земля" name="Fraud__Land"/> <combo_box.item label="Мошенничество > «Пирамида» или «письмо счастья»" name="Fraud__Pyramid_scheme_or_chain_letter"/> - <combo_box.item label="Мошенничество > US$" name="Fraud__US$"/> + <combo_box.item label="Мошенничество > Линден-доллары (L$) или доллары США" name="Fraud__US$"/> <combo_box.item label="Беспокойство > Рекламная ферма/видимый спам" name="Harassment__Advert_farms___visual_spam"/> <combo_box.item label="Беспокойство > Клевета на отдельных лиц или группы" name="Harassment__Defaming_individuals_or_groups"/> <combo_box.item label="Беспокойство > Препятствие движению" name="Harassment__Impeding_movement"/> <combo_box.item label="Беспокойство > Сексуальное домогательство" name="Harassment__Sexual_harassment"/> - <combo_box.item label="Беспокойство > Подстрекательство
/призыв к нарушению лицензионного соглашения" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> + <combo_box.item label="Преследование > Намеренное поведение с целью нарушить привычный образ жизни" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> <combo_box.item label="Беспокойство > Оскорбление словом" name="Harassment__Verbal_abuse"/> <combo_box.item label="Непристойность > Откровенно оскорбительное содержимое или поведение" name="Indecency__Broadly_offensive_content_or_conduct"/> <combo_box.item label="Непристойность > Некорректное имя аватара" name="Indecency__Inappropriate_avatar_name"/> - <combo_box.item label="Непристойность > Некорректное содержимое или поведение в регионе PG" name="Indecency__Mature_content_in_PG_region"/> + <combo_box.item label="Непристойность > Некорректное для рейтинга данного региона содержимое или поведение" name="Indecency__Mature_content_in_PG_region"/> <combo_box.item label="Непристойность > Некорректное содержимое или поведение в регионе Moderate" name="Indecency__Inappropriate_content_in_Mature_region"/> <combo_box.item label="Нарушение прав интеллектуальной собственности > Удаление содержимого" name="Intellectual_property_infringement_Content_Removal"/> <combo_box.item label="Нарушение прав интеллектуальной собственности > CopyBot или нарушение разрешений" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/> <combo_box.item label="Нетерпимость" name="Intolerance"/> <combo_box.item label="Земля > Злоупотребление ресурсами «песочницы»" name="Land__Abuse_of_sandbox_resources"/> - <combo_box.item label="Земля > Посягательство > Объекты/текстуры" name="Land__Encroachment__Objects_textures"/> + <combo_box.item label="Земля > Посягательство > Объекты или текстуры" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="Земля > Посягательство > Частицы" name="Land__Encroachment__Particles"/> <combo_box.item label="Земля > Посягательство > Деревья/растения" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="Пари/азартные игры" name="Wagering_gambling"/> + <combo_box.item label="Пари или азартные игры" name="Wagering_gambling"/> <combo_box.item label="Другое" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/ru/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/ru/floater_scene_load_stats.xml new file mode 100644 index 0000000000..a101e62627 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_scene_load_stats.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Scene Load Statistics" title="СТАТИСТИКА ЗАГРУЗКИ СЦЕН"> + <button label="Пауза" name="playpause"/> + <scroll_container name="statistics_scroll"> + <container_view name="statistics_view"> + <stat_view label="Основной" name="basic"> + <stat_bar label="Разница в пикселах на кадр" name="frame difference"/> + <stat_bar label="Получены данные UDP" name="bandwidth"/> + <stat_bar label="Потери пакетов" name="packet_loss"/> + </stat_view> + <stat_view label="Расширенный" name="advanced"> + <stat_view label="Отрисовка" name="render"> + <stat_bar label="Всего объектов" name="objs"/> + <stat_bar label="Новых объектов" name="newobjs"/> + <stat_bar label="Частота попаданий в кэш объектов" name="object_cache_hits"/> + </stat_view> + <stat_view label="Текстура" name="texture"> + <stat_bar label="Частота попаданий в кэш" name="texture_cache_hits"/> + <stat_bar label="Задержка чтения кэша" name="texture_cache_read_latency"/> + <stat_bar label="Кол-во" name="numimagesstat"/> + <stat_bar label="Необраб. изображений" name="numrawimagesstat"/> + </stat_view> + <stat_view label="Сеть" name="network"> + <stat_bar label="Входящие пакеты" name="packetsinstat"/> + <stat_bar label="Исходящие пакеты" name="packetsoutstat"/> + <stat_bar label="Объекты" name="objectdatareceived"/> + <stat_bar label="Текстура" name="texturedatareceived"/> + <stat_bar label="Актив" name="assetudpdatareceived"/> + <stat_bar label="Слои" name="layersdatareceived"/> + <stat_bar label="Действительный ввод" name="messagedatain"/> + <stat_bar label="Действительный вывод" name="messagedataout"/> + <stat_bar label="Ожидающие операции VFS" name="vfspendingoperations"/> + </stat_view> + </stat_view> + <stat_view label="Симулятор" name="sim"> + <stat_bar label="Объекты" name="simobjects"/> + <stat_bar label="Активные объекты" name="simactiveobjects"/> + <stat_bar label="Активные скрипты" name="simactivescripts"/> + <stat_bar label="Входящие пакеты" name="siminpps"/> + <stat_bar label="Исходящие пакеты" name="simoutpps"/> + <stat_bar label="Отложенные загрузки" name="simpendingdownloads"/> + <stat_bar label="Отложенные передачи" name="simpendinguploads"/> + <stat_bar label="Общий нераспакованный объем (байт)" name="simtotalunackedbytes"/> + <stat_view label="Время (мс)" name="simperf"> + <stat_bar label="Общее время кадра" name="simframemsec"/> + <stat_bar label="Чистое время" name="simnetmsec"/> + <stat_bar label="Время на физику" name="simsimphysicsmsec"/> + <stat_bar label="Время на симуляцию" name="simsimothermsec"/> + <stat_bar label="Время на клиент" name="simagentmsec"/> + <stat_bar label="Время на изображения" name="simimagesmsec"/> + <stat_bar label="Время на скрипт" name="simscriptmsec"/> + <stat_bar label="Резервное время" name="simsparemsec"/> + <stat_view label="Данные времени (мс)" name="timedetails"> + <stat_bar label="Шаг физики" name="simsimphysicsstepmsec"/> + <stat_bar label="Обновить физ. формы" name="simsimphysicsshapeupdatemsec"/> + <stat_bar label="Физика - прочее" name="simsimphysicsothermsec"/> + <stat_bar label="Время сна" name="simsleepmsec"/> + <stat_bar label="Время ввода/вывода" name="simpumpiomsec"/> + </stat_view> + </stat_view> + </stat_view> + </container_view> + </scroll_container> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/ru/floater_script_ed_prefs.xml new file mode 100644 index 0000000000..666827927f --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_script_ed_prefs.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_script_colors" title="ЦВЕТА СКРИПТА"> + <text name="color_pickers_label"> + Выберите желаемые цвета: + </text> + <text name="text_label"> + Текст + </text> + <text name="cursor_label"> + Курсор + </text> + <text name="background_label"> + Фон + </text> + <text name="datatype_label"> + Типы данных + </text> + <text name="event_label"> + События + </text> + <text name="string_literal_label"> + Строковые литералы + </text> + <text name="constant_label"> + Константа + </text> + <text name="flow_control_label"> + Управление выполнением + </text> + <text name="function_label"> + Функция + </text> + <text name="comment_label"> + Комментарий + </text> + <script_editor name="Script Preview"> + /* Пример скрипта */ +default +{ + state_entry() + { + // Комментарий + string greeting = "Hello"; + llSay(PUBLIC_CHANNEL, greeting); + } +} + </script_editor> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_snapshot.xml b/indra/newview/skins/default/xui/ru/floater_snapshot.xml index 7e88630b32..8933f94c0b 100755 --- a/indra/newview/skins/default/xui/ru/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/ru/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="ПРОСМОТР СНИМКА"> +<floater name="Snapshot" title="СНИМОК"> <floater.string name="unknown"> неизвестно </floater.string> @@ -61,5 +61,11 @@ <check_box label="Данные в игре" name="hud_check"/> <check_box label="Стоп-кадр (полноэкранный)" name="freeze_frame_check"/> <check_box label="Автообновление" name="auto_snapshot_check"/> + <text name="filter_list_label"> + Фильтр: + </text> + <combo_box name="filters_combobox" tool_tip="Фильтры изображений"> + <combo_box.item label="Без фильтра" name="NoFilter"/> + </combo_box> </panel> </floater> diff --git a/indra/newview/skins/default/xui/ru/floater_stats.xml b/indra/newview/skins/default/xui/ru/floater_stats.xml index 46426495dc..10e9f5a7f4 100755 --- a/indra/newview/skins/default/xui/ru/floater_stats.xml +++ b/indra/newview/skins/default/xui/ru/floater_stats.xml @@ -4,7 +4,7 @@ <container_view name="statistics_view"> <stat_view label="Базовая" name="basic"> <stat_bar label="Кадров/с" name="fps"/> - <stat_bar label="Ширина канала" name="bandwidth"/> + <stat_bar label="Получены данные UDP" name="bandwidth"/> <stat_bar label="Потери пакетов" name="packet_loss"/> <stat_bar label="Пинг" name="ping"/> </stat_view> @@ -12,9 +12,13 @@ <stat_view label="Отрисовка" name="render"> <stat_bar label="Треугольников на кадр" name="ktrisframe"/> <stat_bar label="Треугольников в секунду" name="ktrissec"/> - <stat_bar label="Всего объектов" name="objs"/> + <stat_bar label="Всего объектов" name="totalobjs"/> + <stat_bar label="Кэшированных объектов" name="cachedobjs"/> <stat_bar label="Новых объектов" name="newobjs"/> <stat_bar label="Частота попаданий в кэш объектов" name="object_cache_hits"/> + <stat_bar label="Выполненные запросы на смыкание" name="occlusion_queries"/> + <stat_bar label="Объекты сомкнуты" name="occluded"/> + <stat_bar label="Объект разомкнут" name="unoccluded"/> </stat_view> <stat_view label="Текстура" name="texture"> <stat_bar label="Частота попаданий в кэш" name="texture_cache_hits"/> @@ -26,15 +30,32 @@ <stat_bar label="Неформатированная память" name="rawmemstat"/> <stat_bar label="Ограничение памяти" name="glboundmemstat"/> </stat_view> + <stat_view label="Использование памяти" name="memory"> + <stat_bar label="LLTrace" name="LLTrace"/> + <stat_bar label="Интерфейс пользователя" name="LLView"/> + <stat_bar label="Шрифты" name="LLFontFreetype"/> + <stat_bar label="Инвентарь" name="LLInventoryObject"/> + <stat_bar label="Объекты клиента" name="LLViewerObject"/> + <stat_bar label="Данные группы октадеревьев" name="LLViewerOctreeGroup"/> + <stat_bar label="Данные октадерева" name="LLViewerOctreeEntry"/> + <stat_bar label="Кэш объектов клиента" name="LLVOCacheEntry"/> + <stat_bar label="Рисуемые предметы" name="LLDrawable"/> + <stat_bar label="Данные лица" name="LLFace"/> + <stat_bar label="Информация отрисовки" name="LLDrawInfo"/> + <stat_bar label="Данные текстуры" name="LLTexture"/> + <stat_bar label="Данные изображения" name="LLImage"/> + <stat_bar label="Данные изображения GL" name="LLImageGL"/> + <stat_bar label="Вершинные буферы" name="LLVertexBuffer"/> + </stat_view> <stat_view label="Сеть" name="network"> <stat_bar label="Входящие пакеты" name="packetsinstat"/> <stat_bar label="Исходящие пакеты" name="packetsoutstat"/> - <stat_bar label="Объекты" name="objectkbitstat"/> - <stat_bar label="Текстура" name="texturekbitstat"/> - <stat_bar label="Актив" name="assetkbitstat"/> - <stat_bar label="Слои" name="layerskbitstat"/> - <stat_bar label="Действительный ввод" name="actualinkbitstat"/> - <stat_bar label="Действительный вывод" name="actualoutkbitstat"/> + <stat_bar label="Объекты" name="objectdatareceived"/> + <stat_bar label="Текстура" name="texturedatareceived"/> + <stat_bar label="Актив" name="assetudpdatareceived"/> + <stat_bar label="Слои" name="layersdatareceived"/> + <stat_bar label="Действительный ввод" name="messagedatain"/> + <stat_bar label="Действительный вывод" name="messagedataout"/> <stat_bar label="Ожидающие операции VFS" name="vfspendingoperations"/> </stat_view> </stat_view> @@ -64,8 +85,8 @@ <stat_bar label="Исходящие пакеты" name="simoutpps"/> <stat_bar label="Отложенные загрузки" name="simpendingdownloads"/> <stat_bar label="Отложенные передачи" name="simpendinguploads"/> - <stat_bar label="Общий нераспакованный объем (байт)" name="simtotalunackedbytes"/> - <stat_view label="Время (мс)" name="simperf"> + <stat_bar label="Общий неподтвержденный объем" name="simtotalunackedbytes"/> + <stat_view label="Время" name="simperf"> <stat_bar label="Общее время кадра" name="simframemsec"/> <stat_bar label="Чистое время" name="simnetmsec"/> <stat_bar label="Время на физику" name="simsimphysicsmsec"/> @@ -74,7 +95,7 @@ <stat_bar label="Время на изображения" name="simimagesmsec"/> <stat_bar label="Время на скрипт" name="simscriptmsec"/> <stat_bar label="Резервное время" name="simsparemsec"/> - <stat_view label="Данные времени (мс)" name="timedetails"> + <stat_view label="Данные времени" name="timedetails"> <stat_bar label="Шаг физики" name="simsimphysicsstepmsec"/> <stat_bar label="Обновить физ. формы" name="simsimphysicsshapeupdatemsec"/> <stat_bar label="Физика - прочее" name="simsimphysicsothermsec"/> diff --git a/indra/newview/skins/default/xui/ru/floater_tools.xml b/indra/newview/skins/default/xui/ru/floater_tools.xml index 35921d147f..a67745534c 100755 --- a/indra/newview/skins/default/xui/ru/floater_tools.xml +++ b/indra/newview/skins/default/xui/ru/floater_tools.xml @@ -73,9 +73,7 @@ <check_box label="Редактировать объединенные" name="checkbox edit linked parts"/> <button label="Объединить" name="link_btn"/> <button label="Разъединить" name="unlink_btn"/> - <text label="Растяжка обеих сторон" name="checkbox uniform label"> - Растяжка обеих сторон - </text> + <check_box label="Растянуть с обеих сторон" name="checkbox uniform"/> <check_box initial_value="true" label="Растягивать текстуры" name="checkbox stretch textures"/> <check_box initial_value="true" label="Привязка" name="checkbox snap to grid"/> <combo_box name="combobox grid mode" tool_tip="Выберите тип линейки сетки для размещения объекта"> @@ -410,82 +408,7 @@ <spinner label="Плотность в 100 кг/м^3" name="Physics Density"/> <spinner label="Восстанавливаемость" name="Physics Restitution"/> </panel> - <panel label="Текстура" name="Texture"> - <panel.string name="string repeats per meter"> - Повторений на метр - </panel.string> - <panel.string name="string repeats per face"> - Повторений на грань - </panel.string> - <texture_picker label="Текстура" name="texture control" tool_tip="Щелкните для выбора изображения"/> - <color_swatch label="Цвет" name="colorswatch" tool_tip="Щелкните для выбора цвета"/> - <text name="color trans"> - Прозрачность % - </text> - <text name="glow label"> - Свечение - </text> - <check_box label="Собств. яркость" name="checkbox fullbright"/> - <text name="tex gen"> - Наложение - </text> - <combo_box name="combobox texgen"> - <combo_box.item label="По умолчанию" name="Default"/> - <combo_box.item label="На плоскость" name="Planar"/> - </combo_box> - <text name="label shininess"> - Блеск - </text> - <combo_box name="combobox shininess"> - <combo_box.item label="Нет" name="None"/> - <combo_box.item label="Низко" name="Low"/> - <combo_box.item label="Средний" name="Medium"/> - <combo_box.item label="Высоко" name="High"/> - </combo_box> - <text name="label bumpiness"> - Рельефность - </text> - <combo_box name="combobox bumpiness"> - <combo_box.item label="Нет" name="None"/> - <combo_box.item label="Яркость" name="Brightness"/> - <combo_box.item label="По темному" name="Darkness"/> - <combo_box.item label="дерево" name="woodgrain"/> - <combo_box.item label="кора" name="bark"/> - <combo_box.item label="кирпич" name="bricks"/> - <combo_box.item label="шахматная доска" name="checker"/> - <combo_box.item label="бетон" name="concrete"/> - <combo_box.item label="старая плитка" name="crustytile"/> - <combo_box.item label="тесаный камень" name="cutstone"/> - <combo_box.item label="диски" name="discs"/> - <combo_box.item label="гравий" name="gravel"/> - <combo_box.item label="чашка Петри" name="petridish"/> - <combo_box.item label="сайдинг" name="siding"/> - <combo_box.item label="каменная плитка" name="stonetile"/> - <combo_box.item label="штукатурка" name="stucco"/> - <combo_box.item label="присоска" name="suction"/> - <combo_box.item label="переплетение" name="weave"/> - </combo_box> - <spinner label="По горизонтали (U)" name="TexScaleU"/> - <check_box label="Разворот" name="checkbox flip s"/> - <spinner label="По вертикали (V)" name="TexScaleV"/> - <check_box label="Разворот" name="checkbox flip t"/> - <spinner label="Вращение˚" name="TexRot"/> - <button label="Применить" label_selected="Применить" name="button apply"/> - <text name="tex offset"> - Сдвиг текстуры - </text> - <spinner label="По горизонтали (U)" name="TexOffsetU"/> - <spinner label="По вертикали (V)" name="TexOffsetV"/> - <panel name="Add_Media"> - <text name="media_tex"> - Медиа - </text> - <button name="add_media" tool_tip="Добавить медиа"/> - <button name="delete_media" tool_tip="Удалить медиа-текстуру"/> - <button name="edit_media" tool_tip="Редактировать медиа"/> - <button label="Выровнять" label_selected="Выровнять медиа" name="button align" tool_tip="Масштабирование медиа-текстуры (сначала нужно загрузить)"/> - </panel> - </panel> + <panel label="Текстура" name="Texture"/> <panel label="Контент" name="Contents"> <button label="Создать скрипт" label_selected="Создать скрипт" name="button new script"/> <button label="Разрешения" name="button permissions"/> diff --git a/indra/newview/skins/default/xui/ru/floater_twitter.xml b/indra/newview/skins/default/xui/ru/floater_twitter.xml new file mode 100644 index 0000000000..748092ff1f --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_twitter.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_twitter" title="TWITTER"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="НАПИСАТЬ" name="panel_twitter_photo"/> + <panel label="АККАУНТ" name="panel_twitter_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Ошибка + </text> + <text name="connection_loading_text"> + Загрузка... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/ru/menu_avatar_icon.xml b/indra/newview/skins/default/xui/ru/menu_avatar_icon.xml index ac2b4be003..049001e8c3 100755 --- a/indra/newview/skins/default/xui/ru/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/ru/menu_avatar_icon.xml @@ -2,6 +2,7 @@ <menu name="Avatar Icon Menu"> <menu_item_call label="Открыть профиль" name="Show Profile"/> <menu_item_call label="Отправить сообщение..." name="Send IM"/> + <menu_item_call label="Запрос телепортации" name="Request Teleport"/> <menu_item_call label="Добавить в друзья..." name="Add Friend"/> <menu_item_call label="Удалить из друзей..." name="Remove Friend"/> </menu> diff --git a/indra/newview/skins/default/xui/ru/menu_conversation.xml b/indra/newview/skins/default/xui/ru/menu_conversation.xml index 4d1240db98..c9df8b6844 100644 --- a/indra/newview/skins/default/xui/ru/menu_conversation.xml +++ b/indra/newview/skins/default/xui/ru/menu_conversation.xml @@ -29,4 +29,5 @@ <menu_item_call label="Заглушить всех" name="ModerateVoiceMute"/> <menu_item_call label="Позволить говорить всем" name="ModerateVoiceUnmute"/> </context_menu> + <menu_item_call label="Заблокировать участника" name="BanMember"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/ru/menu_inventory.xml b/indra/newview/skins/default/xui/ru/menu_inventory.xml index 37ee19fc1d..308549c254 100755 --- a/indra/newview/skins/default/xui/ru/menu_inventory.xml +++ b/indra/newview/skins/default/xui/ru/menu_inventory.xml @@ -70,6 +70,7 @@ <menu_item_call label="Воспроизвести" name="Sound Play"/> <menu_item_call label="Копировать URL SL" name="url_copy"/> <menu_item_call label="О закладке" name="About Landmark"/> + <menu_item_call label="Показать на карте" name="show_on_map"/> <menu_item_call label="Проиграть для всех" name="Animation Play"/> <menu_item_call label="Проиграть для себя" name="Animation Audition"/> <menu_item_call label="Отправить IM-сообщение" name="Send Instant Message"/> diff --git a/indra/newview/skins/default/xui/ru/menu_login.xml b/indra/newview/skins/default/xui/ru/menu_login.xml index 835c4e186e..885f6195b6 100755 --- a/indra/newview/skins/default/xui/ru/menu_login.xml +++ b/indra/newview/skins/default/xui/ru/menu_login.xml @@ -5,7 +5,15 @@ <menu_item_call label="Выход из [APP_NAME]" name="Quit"/> </menu> <menu label="Справка" name="Help"> - <menu_item_call label="Справка [SECOND_LIFE]" name="Second Life Help"/> + <menu_item_call label="Инструкции..." name="How To"/> + <menu_item_call label="Краткое руководство" name="Quickstart"/> + <menu_item_call label="База знаний" name="Knowledge Base"/> + <menu_item_call label="Wiki" name="Wiki"/> + <menu_item_call label="Форумы сообщества" name="Community Forums"/> + <menu_item_call label="Портал поддержки" name="Support portal"/> + <menu_item_call label="Новости [SECOND_LIFE]" name="Second Life News"/> + <menu_item_call label="Блоги [SECOND_LIFE]" name="Second Life Blogs"/> + <menu_item_call label="Сообщить об ошибке" name="Report Bug"/> <menu_item_call label="О [APP_NAME]" name="About Second Life"/> </menu> <menu_item_check label="Показать меню отладки" name="Show Debug Menu"/> diff --git a/indra/newview/skins/default/xui/ru/menu_object.xml b/indra/newview/skins/default/xui/ru/menu_object.xml index 056dab74c1..5f31941b2b 100755 --- a/indra/newview/skins/default/xui/ru/menu_object.xml +++ b/indra/newview/skins/default/xui/ru/menu_object.xml @@ -19,6 +19,7 @@ <context_menu label="Управление" name="Remove"> <menu_item_call label="Жалоба" name="Report Abuse..."/> <menu_item_call label="Заблокировать" name="Object Mute"/> + <menu_item_call label="Разблокировать" name="Object Unmute"/> <menu_item_call label="Возврат" name="Return..."/> </context_menu> <menu_item_call label="Взять" name="Pie Object Take"/> diff --git a/indra/newview/skins/default/xui/ru/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/ru/menu_teleport_history_item.xml index 6a22fd00dc..f495d27bf3 100755 --- a/indra/newview/skins/default/xui/ru/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/ru/menu_teleport_history_item.xml @@ -2,5 +2,5 @@ <context_menu name="Teleport History Item Context Menu"> <menu_item_call label="Телепорт" name="Teleport"/> <menu_item_call label="Информация" name="More Information"/> - <menu_item_call label="Копировать в буфер обмена" name="CopyToClipboard"/> + <menu_item_call label="Копировать URL SL" name="CopyToClipboard"/> </context_menu> diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml index fcb7c4e531..fad1ea51e0 100755 --- a/indra/newview/skins/default/xui/ru/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml @@ -34,6 +34,9 @@ <menu_item_check label="Локальный чат..." name="Nearby Chat"/> <menu_item_check label="Говорить" name="Speak"/> <menu_item_check label="Журнал разговора..." name="Conversation Log..."/> + <menu_item_call label="Facebook..." name="Facebook"/> + <menu_item_call label="Twitter..." name="Twitter"/> + <menu_item_call label="Flickr..." name="Flickr"/> <menu label="Изменение голоса" name="VoiceMorphing"> <menu_item_check label="Без изменения голоса" name="NoVoiceMorphing"/> <menu_item_check label="Просмотр..." name="Preview"/> @@ -70,11 +73,11 @@ <menu_item_check label="Меню «Дополнительно»" name="Show Advanced Menu"/> </menu> <menu label="Солнце" name="Sun"> - <menu_item_call label="Восход" name="Sunrise"/> - <menu_item_call label="Полдень" name="Noon"/> - <menu_item_call label="Закат" name="Sunset"/> - <menu_item_call label="Полночь" name="Midnight"/> - <menu_item_call label="Использовать настройки региона" name="Use Region Settings"/> + <menu_item_check label="Восход" name="Sunrise"/> + <menu_item_check label="Полдень" name="Noon"/> + <menu_item_check label="Закат" name="Sunset"/> + <menu_item_check label="Полночь" name="Midnight"/> + <menu_item_check label="Использовать настройки региона" name="Use Region Settings"/> </menu> <menu label="Редактор среды" name="Environment Editor"> <menu_item_call label="Настройки среды..." name="Environment Settings"/> @@ -147,7 +150,8 @@ <menu_item_check label="Привязка к сетке" name="Snap to Grid"/> <menu_item_call label="Сдвиг к ближайшему узлу XY сетки" name="Snap Object XY to Grid"/> <menu_item_call label="Использовать выбранное для сетки" name="Use Selection for Grid"/> - <menu_item_call label="Параметры сетки" name="Grid Options"/> + <menu_item_call label="Параметры сетки..." name="Grid Options"/> + <menu_item_call label="Установить стандартные разрешения..." name="Set default permissions"/> </menu> <menu label="Передача" name="Upload"> <menu_item_call label="Изображение (L$[COST])..." name="Upload Image"/> @@ -155,14 +159,12 @@ <menu_item_call label="Анимация (L$[COST])..." name="Upload Animation"/> <menu_item_call label="Модель..." name="Upload Model"/> <menu_item_call label="Все сразу (L$[COST] за файл)..." name="Bulk Upload"/> - <menu_item_call label="Установить разрешения на передачу по умолчанию" name="perm prefs"/> </menu> <menu_item_call label="Отменить" name="Undo"/> <menu_item_call label="Вернуть" name="Redo"/> </menu> <menu label="Справка" name="Help"> <menu_item_call label="Инструкции..." name="How To"/> - <menu_item_call label="Справка по [SECOND_LIFE]" name="Second Life Help"/> <menu_item_call label="Жалоба" name="Report Abuse"/> <menu_item_call label="Сообщить об ошибке" name="Report Bug"/> <menu_item_call label="О [APP_NAME]" name="About Second Life"/> @@ -178,6 +180,7 @@ <menu label="Производительность" name="Performance Tools"> <menu_item_call label="Запаздывание" name="Lag Meter"/> <menu_item_check label="Статистика" name="Statistics Bar"/> + <menu_item_call label="Статистика загрузки сцен" name="Scene Load Statistics"/> <menu_item_check label="Показать вес отрисовки для аватаров" name="Avatar Rendering Cost"/> </menu> <menu label="Подсветка и видимость" name="Highlighting and Visibility"> @@ -240,6 +243,7 @@ <menu_item_check label="Оперативные таймеры" name="Fast Timers"/> <menu_item_check label="Память" name="Memory"/> <menu_item_check label="Статистика по сцене" name="Scene Statistics"/> + <menu_item_check label="Монитор загрузки сцен" name="Scene Loading Monitor"/> <menu_item_call label="Консоль отладки извлечения текстур" name="Texture Fetch Debug Console"/> <menu_item_call label="Данные о регионе на консоль отладки" name="Region Info to Debug Console"/> <menu_item_call label="Данны о группе на консоль отладки" name="Group Info to Debug Console"/> @@ -276,6 +280,7 @@ <menu_item_check label="Периодическое замедление кадров" name="Periodic Slow Frame"/> <menu_item_check label="Тест кадров" name="Frame Test"/> <menu_item_call label="Профиль кадра" name="Frame Profile"/> + <menu_item_call label="Тест" name="Benchmark"/> </menu> <menu label="Визуализировать метаданные" name="Render Metadata"> <menu_item_check label="Рамки" name="Bounding Boxes"/> @@ -293,7 +298,9 @@ <menu_item_check label="Данные об уровнях детализации" name="LOD Info"/> <menu_item_check label="Очередь построителя" name="Build Queue"/> <menu_item_check label="Освещение" name="Lights"/> + <menu_item_check label="Частицы" name="Particles"/> <menu_item_check label="Каркас столкновений" name="Collision Skeleton"/> + <menu_item_check label="Суставы" name="Joints"/> <menu_item_check label="Лучи" name="Raycast"/> <menu_item_check label="Направления ветра" name="Wind Vectors"/> <menu_item_check label="Сложность визуализации" name="rendercomplexity"/> @@ -326,6 +333,7 @@ <menu_item_check label="Визуализация присоединенных источников света" name="Render Attached Lights"/> <menu_item_check label="Визуализация присоединенных частиц" name="Render Attached Particles"/> <menu_item_check label="Парящие светящиеся объекты" name="Hover Glow Objects"/> + <menu_item_call label="Немедленно очистить кэш" name="Cache Clear"/> </menu> <menu label="Сеть" name="Network"> <menu_item_check label="Приостановить клиент" name="AgentPause"/> @@ -358,7 +366,6 @@ <menu_item_call label="Вывод средства фокусировки" name="Dump Focus Holder"/> <menu_item_call label="Печать информации о выбранных объектах" name="Print Selected Object Info"/> <menu_item_call label="Печать информации об агенте" name="Print Agent Info"/> - <menu_item_check label="Консоль отладки региона" name="Region Debug Console"/> <menu_item_check label="Отладка SelectMgr" name="Debug SelectMgr"/> <menu_item_check label="Отладка щелчков мышью" name="Debug Clicks"/> <menu_item_check label="Отладка обзора" name="Debug Views"/> diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml index 1dc8202b00..c312bcbef4 100755 --- a/indra/newview/skins/default/xui/ru/notifications.xml +++ b/indra/newview/skins/default/xui/ru/notifications.xml @@ -114,13 +114,13 @@ <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="OutboxImportFailed"> - Ошибка при передаче + Не удалось передать, ошибка: «[ERROR_CODE]» Папки не отправлены в торговый центр из-за ошибки системы или сети. Повторите попытку позже. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="OutboxInitFailed"> - Ошибка инициализации торгового центра + Не удалось инициализировать торговый центр, ошибка: «[ERROR_CODE]» Не удалось инициализировать торговый центр из-за ошибки системы или сети. Повторите попытку позже. <usetemplate name="okbutton" yestext="OK"/> @@ -210,6 +210,22 @@ Добавить эту способность к роли «[ROLE_NAME]»? <usetemplate name="okcancelbuttons" notext="Нет" yestext="Да"/> </notification> + <notification name="AssignBanAbilityWarning"> + Вы собираетесь добавить способность «[ACTION_NAME]» к роли «[ROLE_NAME]». + + *ПРЕДУПРЕЖДЕНИЕ* +Любой участник в роли с этой способностью также получает способности «[ACTION_NAME_2]» и «[ACTION_NAME_3]» + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="RemoveBanAbilityWarning"> + Вы удаляете способность «[ACTION_NAME]» для роли «[ROLE_NAME]». + + *ПРЕДУПРЕЖДЕНИЕ* +При удалении этой способности НЕ БУДУТ удалены способности «[ACTION_NAME_2]» и «[ACTION_NAME_3]». + +Если вам больше не нужны эти способности для данной роли, немедленно отключите их! + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="EjectGroupMemberWarning"> Вы собираетесь исключить [AVATAR_NAME] из группы. <usetemplate ignoretext="Подтвердите исключение участника из группы" name="okcancelignore" notext="Отмена" yestext="Выкинуть"/> @@ -1579,6 +1595,14 @@ http://secondlife.com/download. Невозможно покинуть группу. Вы не можете покинуть группу, так как вы ее последний владелец. Сначала назначьте владельцем другого участника. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="GroupDepartError"> + Невозможно покинуть группу: [reason]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="GroupDepart"> + Вы покинули группу [group_name]. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="ConfirmKick"> Вы ДЕЙСТВИТЕЛЬНО хотите выбросить всех жителей с сетки? <usetemplate name="okcancelbuttons" notext="Отмена" yestext="Выбросить всех жителей"/> @@ -1731,6 +1755,10 @@ http://secondlife.com/download. Вы действительно хотите телепортироваться в <nolink>[LOCATION]</nolink>? <usetemplate ignoretext="Подтверждать телепортацию на закладку" name="okcancelignore" notext="Отмена" yestext="Телепортация"/> </notification> + <notification name="TeleportViaSLAPP"> + Вы действительно хотите телепортироваться в <nolink>[LOCATION]</nolink>? + <usetemplate ignoretext="Подтверждать телепортацию через SLAPP" name="okcancelignore" notext="Отмена" yestext="Телепортация"/> + </notification> <notification name="TeleportToPick"> Телепортироваться в [PICK]? <usetemplate ignoretext="Подтверждать телепортацию на место в подборке" name="okcancelignore" notext="Отмена" yestext="Телепортация"/> @@ -1940,6 +1968,9 @@ http://secondlife.com/download. <notification name="ProblemAddingEstateManager"> Проблема при добавлении нового менеджера землевладения. Возможно, в одном или нескольких землевладениях список менеджеров уже заполнен. </notification> + <notification name="ProblemAddingEstateBanManager"> + Невозможно добавить землевладельца или менеджера в список запрета доступа. + </notification> <notification name="ProblemAddingEstateGeneric"> Проблема при добавлении в этот список землевладения. Возможно, в одном или нескольких землевладениях список уже заполнен. </notification> @@ -2453,6 +2484,12 @@ http://secondlife.com/download. <notification name="SystemMessage"> [MESSAGE] </notification> + <notification name="FlickrConnect"> + [MESSAGE] + </notification> + <notification name="TwitterConnect"> + [MESSAGE] + </notification> <notification name="PaymentReceived"> [MESSAGE] </notification> @@ -3029,7 +3066,7 @@ http://secondlife.com/download. Со следующими жителями: -[RESIDENTS] +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="Отмена" yestext="OK"/> </notification> <notification name="ShareFolderConfirmation"> @@ -3041,7 +3078,7 @@ http://secondlife.com/download. Со следующими жителями: -[RESIDENTS] +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="Отмена" yestext="ОК"/> </notification> <notification name="ItemsShared"> @@ -3497,10 +3534,6 @@ http://secondlife.com/download. <notification name="EjectComingSoon"> Вам запрещено здесь присутствовать; у вас есть [EJECT_TIME] сек, чтобы покинуть это место. </notification> - <notification name="NoEnterServerFull"> - Вам нет доступа в этот регион: -серпер переполнен. - </notification> <notification name="SaveBackToInvDisabled"> Сохранение в инвентаре отключено. </notification> @@ -3689,6 +3722,9 @@ http://secondlife.com/download. <notification name="LinkFailedTooMuchPhysics"> Объект использует слишком много ресурсов физики -- динамическое поведение отключено. </notification> + <notification name="EstateManagerFailedllTeleportHome"> + Объект «[OBJECT_NAME]» по адресу [SLURL] не может телепортировать менеджеров землевладений домой. + </notification> <notification name="TeleportedHomeByObjectOnParcel"> Вы были телепортированы домой объектом «[OBJECT_NAME]» на участке «[PARCEL_NAME]» </notification> @@ -3879,13 +3915,18 @@ http://secondlife.com/download. Выбрано недостаточно арендуемых участков для вступления. </notification> <notification name="CantDivideLandMultipleParcelsSelected"> - Нельзя разделить землю.\nВыбрано больше одного участка.\nВыберите меньшую территорию. + Невозможно разделить землю. +Выбрано несколько участков. +Попробуйте выбрать область поменьше. </notification> <notification name="CantDivideLandCantFindParcel"> - Нельзя разделить землю.\nНе удалось найти участок.\nСообщите об этой неполадке: Справка -> Сообщить об ошибке... + Невозможно разделить землю. +Не удается найти участок. +Сообщите об этом: Справка -> Сообщить об ошибке... </notification> <notification name="CantDivideLandWholeParcelSelected"> - Невозможно разделить землю. Выбран весь участок.\nПопробуйте выбрать территорию поменьше. + Невозможно разделить землю. Выбран весь участок. +Попробуйте выбрать область поменьше. </notification> <notification name="LandHasBeenDivided"> Земля разделена. @@ -4025,4 +4066,12 @@ http://secondlife.com/download. Невозможно переместить файлы. Восстановлен прежний путь. <usetemplate ignoretext="Невозможно переместить файлы. Восстановлен прежний путь." name="okignore" yestext="OK"/> </notification> + <notification name="DefaultObjectPermissions"> + Ошибка при сохранении стандартных разрешений по следующей причине: [REASON]. Попробуйте задать стандартные разрешения через некоторое время. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="ChatHistoryIsBusyAlert"> + Файл журнала чата занят предыдущей операцией. Повторите попытку через несколько минут или выберите чат с другим лицом. + <usetemplate name="okbutton" yestext="OK"/> + </notification> </notifications> diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_account.xml b/indra/newview/skins/default/xui/ru/panel_facebook_account.xml new file mode 100644 index 0000000000..22b4e46897 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_facebook_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_account"> + <string name="facebook_connected" value="Вы подключились к Facebook как:"/> + <string name="facebook_disconnected" value="Не подключено к Facebook"/> + <text name="account_caption_label"> + Не подключено к Facebook. + </text> + <panel name="panel_buttons"> + <button label="Подключение..." name="connect_btn"/> + <button label="Отключить" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 О публикации в Facebook] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_friends.xml b/indra/newview/skins/default/xui/ru/panel_facebook_friends.xml new file mode 100644 index 0000000000..518452953d --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_facebook_friends.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_friends"> + <string name="facebook_friends_empty" value="Сейчас у вас нет друзей по Facebook, которые также были бы жителями Second Life. Предложите своим друзьям по Facebook присоединиться к Second Life!"/> + <string name="facebook_friends_no_connected" value="Сейчас вы не подключены к Facebook. Перейдите на вкладку «Аккаунт», чтобы подключиться и включить эту функцию."/> + <accordion name="friends_accordion"> + <accordion_tab name="tab_second_life_friends" title="Друзья по SL"/> + <accordion_tab name="tab_suggested_friends" title="Добавить этих людей как друзей по SL"/> + </accordion> + <text name="facebook_friends_status"> + Не подключено к Facebook. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_photo.xml b/indra/newview/skins/default/xui/ru/panel_facebook_photo.xml new file mode 100644 index 0000000000..783294be86 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_facebook_photo.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Разрешение изображения"> + <combo_box.item label="Текущее окно" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1200x630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Фильтры изображений"> + <combo_box.item label="Без фильтра" name="NoFilter"/> + </combo_box> + <button label="Обновить" name="new_snapshot_btn" tool_tip="Щелкните для обновления"/> + <button label="Просмотр" name="big_preview_btn" tool_tip="Щелкните для смены вида"/> + <text name="caption_label"> + Комментарий (не обязательно): + </text> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Опубликовать" name="post_photo_btn"/> + <button label="Отмена" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_place.xml b/indra/newview/skins/default/xui/ru/panel_facebook_place.xml new file mode 100644 index 0000000000..913d327e92 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_facebook_place.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_place"> + <layout_stack name="stack_place"> + <layout_panel name="place_detail_panel"> + <text name="place_caption_label"> + Напишите о том, где вы: + </text> + </layout_panel> + <layout_panel name="place_map_panel"> + <check_box initial_value="false" label="" name="add_place_view_cb"/> + </layout_panel> + <layout_panel name="place_button_panel"> + <button label="Опубликовать" name="post_place_btn"/> + <button label="Отмена" name="cancel_place_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_status.xml b/indra/newview/skins/default/xui/ru/panel_facebook_status.xml new file mode 100644 index 0000000000..a59f132a01 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_facebook_status.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_status"> + <layout_stack name="stack_status"> + <layout_panel name="status_detail_panel"> + <text name="status_caption_label"> + О чем вы думаете? + </text> + </layout_panel> + <layout_panel name="status_button_panel"> + <button label="Опубликовать" name="post_status_btn"/> + <button label="Отмена" name="cancel_status_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_flickr_account.xml b/indra/newview/skins/default/xui/ru/panel_flickr_account.xml new file mode 100644 index 0000000000..9f70bf8042 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_flickr_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_account"> + <string name="flickr_connected" value="Вы подключились к Flickr как:"/> + <string name="flickr_disconnected" value="Не подключено к Flickr"/> + <text name="account_caption_label"> + Не подключено к Flickr. + </text> + <panel name="panel_buttons"> + <button label="Подключение..." name="connect_btn"/> + <button label="Отключить" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 О публикации в Flickr] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_flickr_photo.xml b/indra/newview/skins/default/xui/ru/panel_flickr_photo.xml new file mode 100644 index 0000000000..0c93e28911 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_flickr_photo.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Разрешение изображения"> + <combo_box.item label="Текущее окно" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Фильтры изображений"> + <combo_box.item label="Без фильтра" name="NoFilter"/> + </combo_box> + <button label="Обновить" name="new_snapshot_btn" tool_tip="Щелкните для обновления"/> + <button label="Просмотр" name="big_preview_btn" tool_tip="Щелкните для смены вида"/> + <text name="title_label"> + Название: + </text> + <text name="description_label"> + Описание: + </text> + <check_box initial_value="true" label="Добавить в конец описания расположение в SL" name="add_location_cb"/> + <text name="tags_label"> + Теги: + </text> + <text name="tags_help_label"> + Разделяйте теги пробелами. Теги из нескольких слов заключайте в кавычки. + </text> + <combo_box name="rating_combobox" tool_tip="Рейтинг контента Flickr"> + <combo_box.item label="Безопасный рейтинг Flickr" name="SafeRating"/> + <combo_box.item label="Умеренный рейтинг Flickr" name="ModerateRating"/> + <combo_box.item label="Ограниченный рейтинг Flickr" name="RestrictedRating"/> + </combo_box> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Передать" name="post_photo_btn"/> + <button label="Отмена" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/ru/panel_group_bulk_ban.xml new file mode 100644 index 0000000000..e1fcb17f67 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_group_bulk_ban.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Заблокировать жителей" name="bulk_ban_panel"> + <panel.string name="loading"> + (загрузка…) + </panel.string> + <panel.string name="ban_selection_too_large"> + Групповая блокировка не отправлена: выбрано слишком много жителей. Групповая блокировка может охватывать не более 100 пользователей за один запрос. + </panel.string> + <panel.string name="ban_not_permitted"> + Групповая блокировка не отправлена: у вас нет способности «Управление списком заблокированных пользователей». + </panel.string> + <panel.string name="ban_limit_fail"> + Групповая блокировка не отправлена: в вашей группе достигнуто предельное количество блокировок. + </panel.string> + <panel.string name="partial_ban"> + Некоторые групповые блокировки не отправлены: [REASONS] + </panel.string> + <panel.string name="ban_failed"> + Групповые блокировки не отправлены: [REASONS] + </panel.string> + <panel.string name="residents_already_banned"> + - Следующие жители уже заблокированы: [RESIDENTS]. + </panel.string> + <panel.string name="ban_limit_reached"> + - Достигнут лимит блокировок, следующие агенты не заблокированы: [RESIDENTS]. + </panel.string> + <panel.string name="cant_ban_yourself"> + - Вы не можете заблокировать себе доступ в группу. + </panel.string> + <text name="help_text"> + Можно заблокировать доступ в группу для нескольких жителей. Для этого щелкните «Выбрать жителей». + </text> + <button label="Выбрать жителей" name="add_button"/> + <name_list name="banned_agent_list" tool_tip="Чтобы выбрать нескольких жителей, нажмите и удерживайте клавишу CTRL, а затем щелкните их имена"/> + <button label="Удалить выбранных из списка" name="remove_button" tool_tip="Удаление выбранных жителей из списка заблокированных пользователей"/> + <button label="Заблокировать жителей" name="ban_button"/> + <button label="Отмена" name="cancel_button"/> + <string name="GroupBulkBan"> + Групповая блокировка + </string> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml index d8cf1b4756..16aaa71268 100755 --- a/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml @@ -20,7 +20,7 @@ <layout_panel name="group_accordions"> <accordion name="groups_accordion"> <accordion_tab name="group_general_tab" title="Общие"/> - <accordion_tab name="group_roles_tab" title="Роли"/> + <accordion_tab name="group_roles_tab" title="Роли и участники"/> <accordion_tab name="group_notices_tab" title="Уведомления"/> <accordion_tab name="group_land_tab" title="Земля/активы"/> </accordion> diff --git a/indra/newview/skins/default/xui/ru/panel_group_invite.xml b/indra/newview/skins/default/xui/ru/panel_group_invite.xml index 68dac5cd7e..46424c168b 100755 --- a/indra/newview/skins/default/xui/ru/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/ru/panel_group_invite.xml @@ -22,7 +22,7 @@ Выберите назначаемую им роль: </text> <combo_box name="role_name" tool_tip="Выберите в списке роли, которые вы можете назначать участникам"/> - <button label="Отправить приглашения" name="ok_button"/> + <button label="Отправить приглашения" name="invite_button"/> <button label="Отмена" name="cancel_button"/> <string name="GroupInvitation"> Групповое приглашение diff --git a/indra/newview/skins/default/xui/ru/panel_group_roles.xml b/indra/newview/skins/default/xui/ru/panel_group_roles.xml index c57f21679f..88af469fbd 100755 --- a/indra/newview/skins/default/xui/ru/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/ru/panel_group_roles.xml @@ -21,16 +21,18 @@ <name_list.columns label="Участник" name="name"/> <name_list.columns label="Вклад" name="donated"/> <name_list.columns label="Статус" name="online"/> + <name_list.columns label="Роль" name="title"/> </name_list> <button label="Пригласить" name="member_invite"/> <button label="Выкинуть" name="member_eject"/> + <button label="Заблокировать участников" name="member_ban"/> </panel> <panel label="РОЛИ" name="roles_sub_tab"> <panel.string name="help_text"> У ролей есть название и список способностей, -доступных участникам. У участников может быть -одна или несколько ролей. У группы может быть до 10 ролей, -в том числе роли «Все» и «Владелец». + доступных участникам. У участников может быть + одна или несколько ролей. У группы может быть до 10 ролей, + в том числе роли «Все» и «Владелец». </panel.string> <panel.string name="cant_delete_role"> Роли «Все» и «Владелец» являются особыми и не могут быть удалены. @@ -47,11 +49,26 @@ <panel label="СПОСОБНОСТИ" name="actions_sub_tab" tool_tip="Можно просмотреть описание способности, а также какие участники и роли ею обладают."> <panel.string name="help_text"> Способности позволяют участникам, которым назначены соответствующие роли, выполнять особые -действия в группе. Имеется широкий выбор способностей. + действия в группе. Имеется широкий выбор способностей. </panel.string> <filter_editor label="Фильтр способностей" name="filter_input"/> <scroll_list name="action_list" tool_tip="Выберите способность, чтобы просмотреть данные о ней"/> </panel> + <panel label="ЗАБЛОКИРОВАННЫЕ ЖИТЕЛИ" name="banlist_sub_tab" tool_tip="Просмотреть заблокированных жителей из этой группы."> + <panel.string name="help_text"> + Любой житель из списка заблокированных пользователей не сможет присоединиться к группе. + </panel.string> + <panel.string name="ban_count_template"> + Кол-во заблокированных: [COUNT]/[LIMIT] + </panel.string> + <name_list name="ban_list"> + <name_list.columns label="Житель" name="name"/> + <name_list.columns label="Дата блокировки" name="ban_date"/> + </name_list> + <button label="Заблокировать жителей" name="ban_create" tool_tip="Заблокировать жителей из вашей группы"/> + <button label="Разблокировать" name="ban_delete" tool_tip="Разблокировать выбранных жителей из вашей группы"/> + <button name="ban_refresh" tool_tip="Обновить список заблокированных пользователей"/> + </panel> </tab_container> <panel name="members_footer"> <text name="static"> diff --git a/indra/newview/skins/default/xui/ru/panel_login.xml b/indra/newview/skins/default/xui/ru/panel_login.xml index f0877731c6..a19304f2fd 100755 --- a/indra/newview/skins/default/xui/ru/panel_login.xml +++ b/indra/newview/skins/default/xui/ru/panel_login.xml @@ -1,46 +1,27 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php </panel.string> - <layout_stack name="login_widgets"> - <layout_panel name="login"> - <text name="log_in_text"> - ВОЙТИ - </text> - <text name="username_text"> - Имя пользователя: - </text> - <combo_box name="username_combo" tool_tip="Имя пользователя, которое вы выбрали при регистрации, например, «bobsmith12» или «Steller Sunshine»"/> - <text name="password_text"> - Пароль: - </text> - </layout_panel> - <layout_panel name="start_location_panel"> - <text name="start_location_text"> - Место старта: - </text> - <combo_box name="start_location_combo"> - <combo_box.item label="Последнее местоположение" name="MyLastLocation"/> - <combo_box.item label="Мой дом" name="MyHome"/> - <combo_box.item label="<Введите название региона>" name="Typeregionname"/> - </combo_box> - </layout_panel> - <layout_panel name="links_login_panel"> - <text name="login_help"> - Нужна помощь при входе? - </text> + <layout_stack name="ui_stack"> + <layout_panel name="ui_container"> + <combo_box label="Имя пользователя" name="username_combo" tool_tip="Имя пользователя, которое вы выбрали при регистрации, например, «bobsmith12» или «Steller Sunshine»"/> + <line_editor label="Пароль" name="password_edit"/> + <check_box label="Запомнить меня" name="remember_check"/> <text name="forgot_password_text"> - Забыли имя или пароль? + Забыли пароль? </text> <button label="Войти" name="connect_btn"/> - <check_box label="Запомнить пароль" name="remember_check"/> - </layout_panel> - <layout_panel name="links"> - <text name="create_account_text"> - СОЗДАЙТЕ СВОЙ АККАУНТ + <text name="At_My_Last_Location_Label" font="SansSerifSmall"> + В последнее место </text> - <button label="Начать" name="create_new_account_btn"/> + <combo_box label="Мои любимые места" name="start_location_combo"> + <combo_box.item label="Мой дом" name="MyHome"/> + </combo_box> + <button label="Войти" name="connect_favorite_btn"/> + <line_editor label="Введите местоположение" name="location_edit" font="SansSerifSmall" /> + <button label="Войти" name="connect_location_btn"/> + <combo_box label="Выберите сетку" name="server_combo"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_login_first.xml b/indra/newview/skins/default/xui/ru/panel_login_first.xml new file mode 100644 index 0000000000..bb4875373a --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_login_first.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_login"> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php + </panel.string> + <layout_stack name="logo_stack"> + <layout_panel name="parent_panel2"> + <layout_stack name="widget_stack"> + <layout_panel name="widget_container"> + <combo_box label="Имя пользователя" name="username_combo" tool_tip="Имя пользователя, которое вы выбрали при регистрации, например, «bobsmith12» или «Steller Sunshine»"/> + <line_editor label="Пароль" name="password_edit"/> + <button label="Войти" name="connect_btn"/> + <check_box label="Запомнить меня" name="remember_check"/> + <text name="forgot_password_text"> + Забытый пароль + </text> + </layout_panel> + </layout_stack> + </layout_panel> + <layout_panel name="parent_panel3"> + <layout_stack name="images_stack"> + <layout_panel name="images_container"> + <text name="image_caption_left"> + Ваш первый шаг – Учебный остров. Найдите портал выхода! + </text> + <text name="image_caption_right"> + Затем исследуйте Социальный остров и познакомьтесь с другими новичками! + </text> + </layout_panel> + </layout_stack> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/ru/panel_preferences_advanced.xml index 7d8ee96924..90743646fd 100755 --- a/indra/newview/skins/default/xui/ru/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/ru/panel_preferences_advanced.xml @@ -28,4 +28,5 @@ <check_box label="Выбор сетки при входе" name="show_grid_selection_check"/> <check_box label="Показывать расширенное меню" name="show_advanced_menu_check"/> <check_box label="Показывать меню разработчика" name="show_develop_menu_check"/> + <button label="Стандартные разрешения на создание" name="default_creation_permissions"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_general.xml b/indra/newview/skins/default/xui/ru/panel_preferences_general.xml index 62617caed3..b15d0e3abf 100755 --- a/indra/newview/skins/default/xui/ru/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/ru/panel_preferences_general.xml @@ -29,14 +29,10 @@ <combo_box.item label="Общий и умеренный" name="Desired_Mature"/> <combo_box.item label="Общий" name="Desired_PG"/> </combo_box> - <text name="start_location_textbox"> - Место старта: + <check_box label="Показывать любимые места на экране входа" name="favorites_on_login_check"/> + <text name="favorites_check_extra_text"> + (Другие пользователи этого компьютера также увидят их) </text> - <combo_box name="start_location_combo"> - <combo_box.item label="Мое последнее место" name="MyLastLocation"/> - <combo_box.item label="Мой дом" name="MyHome"/> - </combo_box> - <check_box initial_value="true" label="Показывать на экране входа" name="show_location_checkbox"/> <text name="name_tags_textbox"> Теги имен: </text> diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml index ed6bed439c..0a5974eed1 100755 --- a/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml @@ -7,7 +7,7 @@ <text name="cache_size_label_l"> (Места, картинки, страницы, журнал поиска) </text> - <check_box label="Показывать информацию моего профиля в результатах поиска" name="online_searchresults"/> + <check_box label="Показывать данные моего профиля в результатах поиска" name="online_searchresults"/> <check_box label="Только друзья и группы видят, когда я на связи" name="online_visibility"/> <check_box label="Только друзья и группы могут звонить мне и отправлять IM" name="voice_call_friends_only_check"/> <check_box label="Отключать микрофон по окончании разговора" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/ru/panel_region_debug.xml b/indra/newview/skins/default/xui/ru/panel_region_debug.xml index 4be1e781fa..d294a9e22e 100755 --- a/indra/newview/skins/default/xui/ru/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/ru/panel_region_debug.xml @@ -28,7 +28,8 @@ <check_box label="С каждого региона этого землевладения" name="return_estate_wide" tool_tip="Возвращаются объекты со всех регионов, образующих это землевладение"/> <button label="Возврат" name="return_btn"/> <button label="Самые активные участники столкновений..." name="top_colliders_btn" tool_tip="Список объектов, для которых столкновения наиболее вероятны"/> - <button label="Список лучших скриптов..." name="top_scripts_btn" tool_tip="Объекты, в которых скрипты выполняются дольше всего"/> <button label="Перезагрузить регион" name="restart_btn" tool_tip="Отсчитать 2 минуты и перезагрузить регион"/> + <button label="Список лучших скриптов..." name="top_scripts_btn" tool_tip="Объекты, в которых скрипты выполняются дольше всего"/> <button label="Отменить перезапуск" name="cancel_restart_btn" tool_tip="Отменить перезапуск региона"/> + <button label="Консоль отладки региона" name="region_debug_console_btn" tool_tip="Открыть консоль отладки региона"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_region_general.xml b/indra/newview/skins/default/xui/ru/panel_region_general.xml index 8559be6c9e..8b4a127d7e 100755 --- a/indra/newview/skins/default/xui/ru/panel_region_general.xml +++ b/indra/newview/skins/default/xui/ru/panel_region_general.xml @@ -20,12 +20,12 @@ </text> <check_box label="Запретить терраформирование" name="block_terraform_check"/> <check_box label="Запретить полеты" name="block_fly_check"/> + <check_box label="Запретить пролет над участком" name="block_fly_over_check" tool_tip="Поднять проверку доступа вверх для предотвращения пролета над участком"/> <check_box label="Разрешить повреждения" name="allow_damage_check"/> <check_box label="Запретить толкание" name="restrict_pushobject"/> <check_box label="Разрешить перепродажу земли" name="allow_land_resell_check"/> <check_box label="Разрешить объединение/разделение земли" name="allow_parcel_changes_check"/> <check_box label="Не показывать землю в поиске" name="block_parcel_search_check" tool_tip="Отображать регион и его участки в результатах поиска"/> - <check_box label="Разрешить меши-объекты" name="mesh_rez_enabled_check" tool_tip="Разрешить жителям выкладывать меши в этом регионе"/> <spinner label="Лимит агентов" name="agent_limit_spin"/> <spinner label="Льгота для объекта" name="object_bonus_spin"/> <text label="Дозволенность" name="access_text"> diff --git a/indra/newview/skins/default/xui/ru/panel_script_ed.xml b/indra/newview/skins/default/xui/ru/panel_script_ed.xml index a9e5d9ef10..54a1eaab75 100755 --- a/indra/newview/skins/default/xui/ru/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/ru/panel_script_ed.xml @@ -24,6 +24,7 @@ <menu_item_call label="Отменить все изменения" name="Revert All Changes"/> <menu_item_call label="Загрузить из файла..." name="LoadFromFile"/> <menu_item_call label="Сохранить в файл..." name="SaveToFile"/> + <menu_item_call label="Цвета..." name="Colors"/> </menu> <menu label="Изменить" name="Edit"> <menu_item_call label="Отменить" name="Undo"/> @@ -41,9 +42,9 @@ <menu_item_call label="Справка по ключевым словам..." name="Keyword Help..."/> </menu> </menu_bar> - <text_editor name="Script Editor"> + <script_editor name="Script Editor"> Загрузка... - </text_editor> + </script_editor> <combo_box label="Вставить..." name="Insert..."/> <button label="Сохранить" label_selected="Сохранить" name="Save_btn"/> <button label="Изменить..." name="Edit_btn"/> diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml index 250a76cd21..8cd69951ca 100755 --- a/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml @@ -4,4 +4,13 @@ <button label="Отправить по почте" name="save_to_email_btn"/> <button label="Сохранить в моем инвентаре (L$[AMOUNT])" name="save_to_inventory_btn"/> <button label="Сохранить на моем компьютере" name="save_to_computer_btn"/> + <text name="send_to_facebook_textbox"> + Отправить: [secondlife:/// Facebook] + </text> + <text name="send_to_twitter_textbox"> + [secondlife:/// Twitter] + </text> + <text name="send_to_flickr_textbox"> + [secondlife:/// Flickr] + </text> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/ru/panel_teleport_history_item.xml index 90fb720068..fdcaa843ec 100755 --- a/indra/newview/skins/default/xui/ru/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/ru/panel_teleport_history_item.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="teleport_history_item"> <text name="region" value="..."/> + <text name="timestamp" value="..."/> <button name="profile_btn" tool_tip="Показать информацию"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_twitter_account.xml b/indra/newview/skins/default/xui/ru/panel_twitter_account.xml new file mode 100644 index 0000000000..140554f5c6 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_twitter_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_account"> + <string name="twitter_connected" value="Вы подключились к Twitter как:"/> + <string name="twitter_disconnected" value="Не подключено к Twitter"/> + <text name="account_caption_label"> + Не подключено к Twitter. + </text> + <panel name="panel_buttons"> + <button label="Подключение..." name="connect_btn"/> + <button label="Отключить" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 О публикации в Twitter] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_twitter_photo.xml b/indra/newview/skins/default/xui/ru/panel_twitter_photo.xml new file mode 100644 index 0000000000..564d02411d --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_twitter_photo.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="text_panel"> + <text name="status_label"> + Что случилось? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="Включить расположение в SL" name="add_location_cb"/> + <check_box initial_value="true" label="Включить фото" name="add_photo_cb"/> + </layout_panel> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Разрешение изображения"> + <combo_box.item label="Текущее окно" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Фильтры изображений"> + <combo_box.item label="Без фильтра" name="NoFilter"/> + </combo_box> + <button label="Обновить" name="new_snapshot_btn" tool_tip="Щелкните для обновления"/> + <button label="Просмотр" name="big_preview_btn" tool_tip="Щелкните для смены вида"/> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Твит" name="post_photo_btn"/> + <button label="Отмена" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/ru/role_actions.xml b/indra/newview/skins/default/xui/ru/role_actions.xml index 3f31ecfa10..a4ac7411a3 100755 --- a/indra/newview/skins/default/xui/ru/role_actions.xml +++ b/indra/newview/skins/default/xui/ru/role_actions.xml @@ -3,6 +3,7 @@ <action_set description="Эти способности позволяют добавлять и удалять участников группы, а также вступать в группы без приглашения." name="Membership"> <action description="Приглашение людей в эту группу" longdescription="Пригласите людей в группу с помощью кнопки «Пригласить» в разделе «Роли» на вкладке «Участники»." name="member invite" value="1"/> <action description="Удаление участников из группы" longdescription="Удалите участников из группы с помощью кнопки «Выкинуть» в разделе «Роли» на вкладке «Участники». Владелец может удалять всех, кроме другого владельца. Если вы не владелец, то удалить участника из группы можно только в том случае, если ему назначена ТОЛЬКО роль «Все». Чтобы удалять участников из ролей, необходима способность «Удаление участников из ролей»." name="member eject" value="2"/> + <action description="Управление списком заблокированных пользователей" longdescription="Разрешить участнику группы блокировать/разблокировать жителей из этой группы." name="allow ban" value="51"/> <action description="Включение-отключение свободного вступления и изменение платы за вступление" longdescription="Включение-отключение свободного вступления, что обеспечит вступление новых участников без приглашения, а также изменение платы за вступление в разделе «Общие»." name="member options" value="3"/> </action_set> <action_set description="Эти способности позволяют добавлять, удалять и изменять роли группы, добавлять и удалять участников ролей, а также назначать ролям способности." name="Roles"> diff --git a/indra/newview/skins/default/xui/ru/sidepanel_inventory.xml b/indra/newview/skins/default/xui/ru/sidepanel_inventory.xml index 1741f63074..725b680050 100755 --- a/indra/newview/skins/default/xui/ru/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/ru/sidepanel_inventory.xml @@ -28,13 +28,13 @@ <button label="Профиль" name="info_btn" tool_tip="Показать профиль объекта"/> </layout_panel> <layout_panel name="share_btn_lp"> - <button label="Поделиться" name="share_btn" tool_tip="Поделиться вещью из инвентаря"/> + <button label="Поделиться" name="share_btn" tool_tip="Поделиться объектом из инвентаря"/> </layout_panel> <layout_panel name="shop_btn_lp"> - <button label="Торговый центр" name="shop_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" tool_tip="Телепортироваться в выбранную область"/> + <button label="Играть" name="play_btn"/> + <button label="Телепортация" name="teleport_btn" tool_tip="Телепортироваться в выбранную область"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml index 8faf834f8f..b7daab33a9 100755 --- a/indra/newview/skins/default/xui/ru/strings.xml +++ b/indra/newview/skins/default/xui/ru/strings.xml @@ -37,6 +37,45 @@ <string name="StartupRequireDriverUpdate"> Ошибка инициализации графики. Обновите графический драйвер! </string> + <string name="AboutHeader"> + [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL]) +[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]] + </string> + <string name="AboutCompiler"> + Использован компилятор [COMPILER], версия [COMPILER_VERSION] + </string> + <string name="AboutPosition"> + Вы в точке [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] в регионе «[REGION]», расположенном на <nolink>[HOSTNAME]</nolink> ([HOSTIP]) +SLURL: <nolink>[SLURL]</nolink> +(глобальные координаты [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1]) +[SERVER_VERSION] +[SERVER_RELEASE_NOTES_URL] + </string> + <string name="AboutSystem"> + ЦП: [CPU] +Память: [MEMORY_MB] МБ +Версия ОС: [OS_VERSION] +Производитель графической платы: [GRAPHICS_CARD_VENDOR] +Графическая плата: [GRAPHICS_CARD] + </string> + <string name="AboutDriver"> + Версия графического драйвера Windows: [GRAPHICS_DRIVER_VERSION] + </string> + <string name="AboutLibs"> + Версия OpenGL: [OPENGL_VERSION] + +Версия libcurl: [LIBCURL_VERSION] +Версия декодера J2C: [J2C_VERSION] +Версия драйвера звука: [AUDIO_DRIVER_VERSION] +Версия Qt Webkit: [QT_WEBKIT_VERSION] +Версия голосового сервера: [VOICE_VERSION] + </string> + <string name="AboutTraffic"> + Потеряно пакетов: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) + </string> + <string name="ErrorFetchingServerReleaseNotesURL"> + Ошибка при получении URL-адреса заметок о выпуске сервера. + </string> <string name="ProgressRestoring"> Восстановление... </string> @@ -296,6 +335,75 @@ support@secondlife.com. <string name="TestingDisconnect"> Тестирование отключения клиента </string> + <string name="SocialFlickrConnecting"> + Подключение к Flickr... + </string> + <string name="SocialFlickrPosting"> + Публикация... + </string> + <string name="SocialFlickrDisconnecting"> + Отключение от Flickr... + </string> + <string name="SocialFlickrErrorConnecting"> + Неполадка при подключении к Flickr + </string> + <string name="SocialFlickrErrorPosting"> + Неполадка при публикации в Flickr + </string> + <string name="SocialFlickrErrorDisconnecting"> + Неполадка при отключении от Flickr + </string> + <string name="SocialTwitterConnecting"> + Подключение к Twitter... + </string> + <string name="SocialTwitterPosting"> + Публикация... + </string> + <string name="SocialTwitterDisconnecting"> + Отключение от Twitter... + </string> + <string name="SocialTwitterErrorConnecting"> + Неполадка при подключении к Twitter + </string> + <string name="SocialTwitterErrorPosting"> + Неполадка при публикации в Twitter + </string> + <string name="SocialTwitterErrorDisconnecting"> + Неполадка при отключении от Twitter + </string> + <string name="BlackAndWhite"> + Черно-белый + </string> + <string name="Colors1970"> + Цвета 1970-х + </string> + <string name="Intense"> + Интенсивный + </string> + <string name="Newspaper"> + Газета + </string> + <string name="Sepia"> + Сепия + </string> + <string name="Spotlight"> + Прожектор + </string> + <string name="Video"> + Видео + </string> + <string name="Autocontrast"> + Автоконтраст + </string> + <string name="LensFlare"> + Блик + </string> + <string name="Miniature"> + Миниатюра + </string> + <string name="Toycamera"> + Игрушечная камера + </string> <string name="TooltipPerson"> Человек </string> @@ -844,6 +952,12 @@ support@secondlife.com. <string name="use_texture"> Использовать текстуру </string> + <string name="manip_hint1"> + Наведите указатель мыши на линейку + </string> + <string name="manip_hint2"> + для привязки к сетке + </string> <string name="texture_loading"> Загрузка... </string> @@ -934,15 +1048,15 @@ support@secondlife.com. <string name="ControlYourCamera"> Управлять камерой </string> + <string name="TeleportYourAgent"> + Телепортировать вас + </string> <string name="NotConnected"> Нет подключения </string> <string name="AgentNameSubst"> (Вы) </string> - <string name="TeleportYourAgent"> - Телепортировать вас - </string> <string name="JoinAnExperience"> Присоединитесь </string> @@ -1267,8 +1381,7 @@ support@secondlife.com. <string name="InventoryInboxNoItems"> Здесь будут показаны ваши покупки из торгового центра. Их можно будет перетащить в ваш инвентарь для использования. </string> - <string name="Unconstrained">Без ограничения</string> - <string name="MarketplaceURL"> + <string name="MarketplaceURL"> https://marketplace.[MARKETPLACE_DOMAIN_NAME]/ </string> <string name="MarketplaceURL_CreateStore"> @@ -1297,6 +1410,18 @@ support@secondlife.com. <string name="InventoryOutboxNoItems"> Перетащите папки в эту область и щелкните «Отправить в торговый центр», чтобы выставить их на продажу в [[MARKETPLACE_DASHBOARD_URL] Торговом центре]. </string> + <string name="InventoryOutboxInitializingTitle"> + Инициализация Торгового центра. + </string> + <string name="InventoryOutboxInitializing"> + Мы обращаемся к вашему аккаунту в [[MARKETPLACE_CREATE_STORE_URL] магазине]. + </string> + <string name="InventoryOutboxErrorTitle"> + Ошибки торгового центра. + </string> + <string name="InventoryOutboxError"> + [[MARKETPLACE_CREATE_STORE_URL] Магазин] возвращает ошибки. + </string> <string name="Marketplace Error None"> Ошибок нет </string> @@ -1324,6 +1449,9 @@ support@secondlife.com. <string name="Open landmarks"> Открыть закладки </string> + <string name="Unconstrained"> + Без ограничения + </string> <string name="no_transfer" value="(не передается)"/> <string name="no_modify" value="(не изменяется)"/> <string name="no_copy" value="(не копируется)"/> @@ -1724,6 +1852,9 @@ support@secondlife.com. <string name="CompileQueueDownloadedCompiling"> Загружено, компилируется </string> + <string name="CompileQueueServiceUnavailable"> + Служба компилирования скриптов недоступна + </string> <string name="CompileQueueScriptNotFound"> Скрипт не найден на сервере. </string> @@ -4021,6 +4152,12 @@ support@secondlife.com. <string name="share_alert"> Перетаскивайте вещи из инвентаря сюда </string> + <string name="flickr_post_success"> + Вы опубликовали сообщение в Flickr. + </string> + <string name="twitter_post_success"> + Вы опубликовали сообщение в Twitter. + </string> <string name="no_session_message"> (Сеанс IM не существует) </string> @@ -4477,6 +4614,9 @@ support@secondlife.com. <string name="LocalEstimateUSD"> [AMOUNT] US$ </string> + <string name="Group Ban"> + Групповая блокировка + </string> <string name="Membership"> Членство </string> @@ -4911,6 +5051,12 @@ support@secondlife.com. <string name="Command_Destinations_Label"> Пункты </string> + <string name="Command_Facebook_Label"> + Facebook + </string> + <string name="Command_Flickr_Label"> + Flickr + </string> <string name="Command_Gestures_Label"> Жесты </string> @@ -4959,6 +5105,9 @@ support@secondlife.com. <string name="Command_Speak_Label"> Говорить </string> + <string name="Command_Twitter_Label"> + Twitter + </string> <string name="Command_View_Label"> Управление камерой </string> @@ -4989,6 +5138,12 @@ support@secondlife.com. <string name="Command_Destinations_Tooltip"> Интересные места </string> + <string name="Command_Facebook_Tooltip"> + Опубликовать в Facebook + </string> + <string name="Command_Flickr_Tooltip"> + Загрузить на Flickr + </string> <string name="Command_Gestures_Tooltip"> Жесты для аватара </string> @@ -5037,6 +5192,9 @@ support@secondlife.com. <string name="Command_Speak_Tooltip"> Говорите с людьми вокруг вас с помощью микрофона </string> + <string name="Command_Twitter_Tooltip"> + Twitter + </string> <string name="Command_View_Tooltip"> Изменение угла камеры </string> diff --git a/indra/newview/skins/default/xui/tr/floater_big_preview.xml b/indra/newview/skins/default/xui/tr/floater_big_preview.xml new file mode 100644 index 0000000000..c99a71d3c2 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_big_preview.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_big_preview" title="ÖNİZLEME"/> diff --git a/indra/newview/skins/default/xui/tr/floater_facebook.xml b/indra/newview/skins/default/xui/tr/floater_facebook.xml new file mode 100644 index 0000000000..87f69fc731 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_facebook.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_facebook" title="FACEBOOK'TA YAYINLA"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="DURUM" name="panel_facebook_status"/> + <panel label="FOTOĞRAF" name="panel_facebook_photo"/> + <panel label="KONUMA GİRİŞ YAPIN" name="panel_facebook_place"/> + <panel label="ARKADAŞLAR" name="panel_facebook_friends"/> + <panel label="HESAP" name="panel_facebook_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Hata + </text> + <text name="connection_loading_text"> + Yükleniyor... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_flickr.xml b/indra/newview/skins/default/xui/tr/floater_flickr.xml new file mode 100644 index 0000000000..4fa6770673 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_flickr.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_flickr" title="FLICKR'A YÜKLE"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="FOTOĞRAF" name="panel_flickr_photo"/> + <panel label="HESAP" name="panel_flickr_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Hata + </text> + <text name="connection_loading_text"> + Yükleniyor... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_lagmeter.xml b/indra/newview/skins/default/xui/tr/floater_lagmeter.xml new file mode 100644 index 0000000000..736c50be90 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_lagmeter.xml @@ -0,0 +1,151 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_lagmeter" title="GECİKME ÖLÇER"> + <floater.string name="max_title_msg"> + Gecikme Ölçer + </floater.string> + <floater.string name="max_width_px"> + 360 + </floater.string> + <floater.string name="min_title_msg"> + Gecikme + </floater.string> + <floater.string name="min_width_px"> + 90 + </floater.string> + <floater.string name="client_text_msg"> + İstemci + </floater.string> + <floater.string name="client_frame_rate_critical_fps"> + 10 + </floater.string> + <floater.string name="client_frame_rate_warning_fps"> + 15 + </floater.string> + <floater.string name="client_frame_time_window_bg_msg"> + Normal, pencere alt zeminde + </floater.string> + <floater.string name="client_frame_time_critical_msg"> + İstemci kare hızı [CLIENT_FRAME_RATE_CRITICAL] altında + </floater.string> + <floater.string name="client_frame_time_warning_msg"> + İstemci kare hızı [CLIENT_FRAME_RATE_CRITICAL] ile [CLIENT_FRAME_RATE_WARNING] arasınad + </floater.string> + <floater.string name="client_frame_time_normal_msg"> + Normal + </floater.string> + <floater.string name="client_draw_distance_cause_msg"> + Muhtemel neden: Çizme mesafesi çok yüksek + </floater.string> + <floater.string name="client_texture_loading_cause_msg"> + Muhtemel neden: Görüntüler yükleniyor + </floater.string> + <floater.string name="client_texture_memory_cause_msg"> + Muhtemel neden: Bellekte çok fazla görüntü + </floater.string> + <floater.string name="client_complex_objects_cause_msg"> + Muhtemel neden: Sahnede çok fazla karmaşık nesne + </floater.string> + <floater.string name="network_text_msg"> + Ağ + </floater.string> + <floater.string name="network_packet_loss_critical_pct"> + 10 + </floater.string> + <floater.string name="network_packet_loss_warning_pct"> + 5 + </floater.string> + <floater.string name="network_packet_loss_critical_msg"> + Bağlantı paketlerin % [NETWORK_PACKET_LOSS_CRITICAL]'sinden fazlasını bırakıyor + </floater.string> + <floater.string name="network_packet_loss_warning_msg"> + Bağlantı paketlerin % [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]'sini bırakıyor + </floater.string> + <floater.string name="network_performance_normal_msg"> + Normal + </floater.string> + <floater.string name="network_ping_critical_ms"> + 600 + </floater.string> + <floater.string name="network_ping_warning_ms"> + 300 + </floater.string> + <floater.string name="network_ping_critical_msg"> + Bağlantı ping süresi [NETWORK_PING_CRITICAL] ms.den fazla + </floater.string> + <floater.string name="network_ping_warning_msg"> + Bağlantı ping süresi [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_packet_loss_cause_msg"> + Muhtemel yetersiz bağlantı veya 'Bant Genişliği' tercihi çok yüksek. + </floater.string> + <floater.string name="network_ping_cause_msg"> + Muhtemel yetersiz bağlantı veya dosya paylaşım uygulaması. + </floater.string> + <floater.string name="server_text_msg"> + Sunucu + </floater.string> + <floater.string name="server_frame_rate_critical_fps"> + 20 + </floater.string> + <floater.string name="server_frame_rate_warning_fps"> + 30 + </floater.string> + <floater.string name="server_single_process_max_time_ms"> + 20 + </floater.string> + <floater.string name="server_frame_time_critical_msg"> + Simülatör kare hızı [SERVER_FRAME_RATE_CRITICAL] altında + </floater.string> + <floater.string name="server_frame_time_warning_msg"> + Simülatör kare hızı [SERVER_FRAME_RATE_CRITICAL] ve [SERVER_FRAME_RATE_WARNING] arasında + </floater.string> + <floater.string name="server_frame_time_normal_msg"> + Normal + </floater.string> + <floater.string name="server_physics_cause_msg"> + Muhtemel Neden: Çok fazla fiziki nesne + </floater.string> + <floater.string name="server_scripts_cause_msg"> + Muhtemel Neden: Çok fazla komut dosyalı nesne + </floater.string> + <floater.string name="server_net_cause_msg"> + Muhtemel Neden: Çok fazla ağ trafiği + </floater.string> + <floater.string name="server_agent_cause_msg"> + Muhtemel Neden: Bölgede hareket eden çok fazla insan var + </floater.string> + <floater.string name="server_images_cause_msg"> + Muhtemel Neden: Çok fazla görüntü hesabı + </floater.string> + <floater.string name="server_generic_cause_msg"> + Muhtemel Neden: Simülatör yükü çok ağır + </floater.string> + <floater.string name="smaller_label"> + >> + </floater.string> + <floater.string name="bigger_label"> + << + </floater.string> + <button name="client_lagmeter" tool_tip="İstemci gecikme durumu"/> + <text name="client"> + İstemci + </text> + <text name="client_text"> + Normal + </text> + <button name="network_lagmeter" tool_tip="Ağ gecikme durumu"/> + <text name="network"> + Ağ + </text> + <text name="network_text"> + Normal + </text> + <button name="server_lagmeter" tool_tip="Sunucu gecikme durumu"/> + <text name="server"> + Sunucu + </text> + <text name="server_text"> + Normal + </text> + <button label=">>" name="minimize" tool_tip="Gezdirici büyüklüğünü değiştir"/> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_perms_default.xml b/indra/newview/skins/default/xui/tr/floater_perms_default.xml new file mode 100644 index 0000000000..2f371c056c --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_perms_default.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="perms default" title="VARSAYILAN OLUŞTURMA İZİNLERİ"> + <panel label="Varsayılan İzinler" name="default permissions"/> + <button label="Tamam" label_selected="Tamam" name="ok"/> + <button label="İptal" label_selected="İptal" name="cancel"/> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_region_restarting.xml b/indra/newview/skins/default/xui/tr/floater_region_restarting.xml new file mode 100644 index 0000000000..1f9ead8bdd --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_region_restarting.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="region_restarting" title="BÖLGEYİ YENİDEN BAŞLAT"> + <string name="RegionName"> + Şu anda içinde bulunduğunuz bölge ([NAME]) yeniden başlatılmak üzere. + +Bu bölgede kalmaya devam ederseniz oturumunuz sonlandırılacak. + </string> + <string name="RestartSeconds"> + Yeniden başlatma için kalan süre +[SECONDS] + </string> + <panel name="layout_panel_1"> + <text name="region_name"> + Şu anda içinde bulunduğunuz bölge (-Bölgenin uzun adı-) yeniden başlatılmak üzere. + +Bu bölgede kalmaya devam ederseniz oturumunuz sonlandırılacak. + </text> + <text name="restart_seconds"> + Yeniden başlatma için kalan süre + 32767 + </text> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_report_abuse.xml b/indra/newview/skins/default/xui/tr/floater_report_abuse.xml index c5765883c4..ea598a5669 100755 --- a/indra/newview/skins/default/xui/tr/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/tr/floater_report_abuse.xml @@ -35,7 +35,7 @@ <combo_box.item label="Yaş > 18 Yaş Altı Second Life'ında Yetişkin Sakin" name="Age__Adult_resident_on_Teen_Second_Life"/> <combo_box.item label="Yaş > 18 Yaş Altı Second Life'ı dışında Reşit Olmayan Sakin" name="Age__Underage_resident_outside_of_Teen_Second_Life"/> <combo_box.item label="Saldırı > Çarpışma koruma alanı / güvensiz alan" name="Assault__Combat_sandbox___unsafe_area"/> - <combo_box.item label="Saldırı > Güvenli alan" name="Assault__Safe_area"/> + <combo_box.item label="Şiddet > Güvenli bir Alanda başka bir LS Sakinini ateşli silahla vurmak ya da itip kakmak" name="Assault__Safe_area"/> <combo_box.item label="Saldırı > Silah test güvenli alanı" name="Assault__Weapons_testing_sandbox"/> <combo_box.item label="Ticaret > Ürün veya hizmet verilemedi" name="Commerce__Failure_to_deliver_product_or_service"/> <combo_box.item label="İfşa > Gerçek dünya bilgileri" name="Disclosure__Real_world_information"/> @@ -49,25 +49,25 @@ <combo_box.item label="Dolandırıcılık > L$" name="Fraud__L$"/> <combo_box.item label="Dolandırıcılık > Arazi" name="Fraud__Land"/> <combo_box.item label="Dolandırıcılık > Piramid planı veya zincirleme mektup" name="Fraud__Pyramid_scheme_or_chain_letter"/> - <combo_box.item label="Dolandırıcılık > US$" name="Fraud__US$"/> + <combo_box.item label="Dolandırıcılık > L$ veya USD $" name="Fraud__US$"/> <combo_box.item label="Taciz > reklam çiftlikleri / görsel spam" name="Harassment__Advert_farms___visual_spam"/> <combo_box.item label="Taciz > Kişi ya da grupları aşağılama" name="Harassment__Defaming_individuals_or_groups"/> <combo_box.item label="Taciz > Tehditkâr hareket" name="Harassment__Impeding_movement"/> <combo_box.item label="Taciz > Cinsel taciz" name="Harassment__Sexual_harassment"/> - <combo_box.item label="Taciz > Başkalarını Hizmet Koşullarını ihlal etmeye kışkırtma/teşvik" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> + <combo_box.item label="Taciz > Birini rahatsız etmeye yönelik kasti hareket" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> <combo_box.item label="Taciz > Sözlü istismar" name="Harassment__Verbal_abuse"/> <combo_box.item label="Uygunsuzluk > Genel anlamda rahatsız edici içerik veya davranış" name="Indecency__Broadly_offensive_content_or_conduct"/> <combo_box.item label="Uygunsuzluk > Uygunsuz avatar adı" name="Indecency__Inappropriate_avatar_name"/> - <combo_box.item label="Uygunsuzluk > PG bölgesinde rahatsız edici içerik veya davranış" name="Indecency__Mature_content_in_PG_region"/> + <combo_box.item label="Uygunsuzluk > Bölge Seviyesine uygun olmayan rahatsız edici içerik veya davranış" name="Indecency__Mature_content_in_PG_region"/> <combo_box.item label="Uygunsuzluk > Orta bölgede rahatsız edici içerik veya davranış" name="Indecency__Inappropriate_content_in_Mature_region"/> <combo_box.item label="Fikri mülkiyet ihlali > İçerik Silme" name="Intellectual_property_infringement_Content_Removal"/> <combo_box.item label="Fikri mülkiyet ihlali > CopyBot veya İzinlerin Kötüye Kullanılması" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/> <combo_box.item label="Tahammülsüzlük" name="Intolerance"/> <combo_box.item label="Arazi > Koruma alanı kaynaklarının istismarı" name="Land__Abuse_of_sandbox_resources"/> - <combo_box.item label="Arazi > Tecavvüz > Nesneler/dokular" name="Land__Encroachment__Objects_textures"/> + <combo_box.item label="Arazi > Tecavüz > Nesneler veya dokular" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="Arazi > Tecavvüz > Parçacıklar" name="Land__Encroachment__Particles"/> <combo_box.item label="Arazi > Tecavvüz > Ağaçlar/bitkiler" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="Bahis oynatma/kumar" name="Wagering_gambling"/> + <combo_box.item label="Bahis veya Kumar" name="Wagering_gambling"/> <combo_box.item label="Diğer" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/tr/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/tr/floater_scene_load_stats.xml new file mode 100644 index 0000000000..ae0a94595d --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_scene_load_stats.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Scene Load Statistics" title="SAHNE YÜKLEME İSTATİSTİKLERİ"> + <button label="Duraklat" name="playpause"/> + <scroll_container name="statistics_scroll"> + <container_view name="statistics_view"> + <stat_view label="Temel" name="basic"> + <stat_bar label="Çerçeve Piksel Farkı" name="frame difference"/> + <stat_bar label="UDP Verileri Alındı" name="bandwidth"/> + <stat_bar label="Paket Kaybı" name="packet_loss"/> + </stat_view> + <stat_view label="Gelişmiş" name="advanced"> + <stat_view label="İşle" name="render"> + <stat_bar label="Toplam Nesne" name="objs"/> + <stat_bar label="Yeni Nesne" name="newobjs"/> + <stat_bar label="Nesne Önbellek İsabet Oranı" name="object_cache_hits"/> + </stat_view> + <stat_view label="Doku" name="texture"> + <stat_bar label="Önbellek İsabet Oranı" name="texture_cache_hits"/> + <stat_bar label="Önbellek Okuma Gecikme Süresi" name="texture_cache_read_latency"/> + <stat_bar label="Sayım" name="numimagesstat"/> + <stat_bar label="Ham Sayım" name="numrawimagesstat"/> + </stat_view> + <stat_view label="Ağ" name="network"> + <stat_bar label="Gelen Paketler" name="packetsinstat"/> + <stat_bar label="Giden Paketler" name="packetsoutstat"/> + <stat_bar label="Nesneler" name="objectdatareceived"/> + <stat_bar label="Doku" name="texturedatareceived"/> + <stat_bar label="Varlık" name="assetudpdatareceived"/> + <stat_bar label="Katmanlar" name="layersdatareceived"/> + <stat_bar label="Gerçekte Gelen" name="messagedatain"/> + <stat_bar label="Gerçekte Giden" name="messagedataout"/> + <stat_bar label="VFS Bekleyen İşlemler" name="vfspendingoperations"/> + </stat_view> + </stat_view> + <stat_view label="Simülatör" name="sim"> + <stat_bar label="Nesneler" name="simobjects"/> + <stat_bar label="Etkin Nesneler" name="simactiveobjects"/> + <stat_bar label="Etkin Komut Dosyaları" name="simactivescripts"/> + <stat_bar label="Gelen Paketler" name="siminpps"/> + <stat_bar label="Giden Paketler" name="simoutpps"/> + <stat_bar label="Bekleyen Karşıdan Yüklemeler" name="simpendingdownloads"/> + <stat_bar label="Bekleyen Karşıya Yüklemeler" name="simpendinguploads"/> + <stat_bar label="Toplam Bildirilmiş Bayt" name="simtotalunackedbytes"/> + <stat_view label="Zaman (ms)" name="simperf"> + <stat_bar label="Toplam Çerçeve Süresi" name="simframemsec"/> + <stat_bar label="Net Süre" name="simnetmsec"/> + <stat_bar label="Fizik Süresi" name="simsimphysicsmsec"/> + <stat_bar label="Simülasyon Süresi" name="simsimothermsec"/> + <stat_bar label="Aracı Süresi" name="simagentmsec"/> + <stat_bar label="Görüntü Süresi" name="simimagesmsec"/> + <stat_bar label="Komut Dosyası Süresi" name="simscriptmsec"/> + <stat_bar label="Yedek Zaman" name="simsparemsec"/> + <stat_view label="Zaman Ayrıntıları (ms)" name="timedetails"> + <stat_bar label="Fizik Adımı" name="simsimphysicsstepmsec"/> + <stat_bar label="Fizik Şekillerini Güncelle" name="simsimphysicsshapeupdatemsec"/> + <stat_bar label="Fizik Diğer" name="simsimphysicsothermsec"/> + <stat_bar label="Uyku Zamanı" name="simsleepmsec"/> + <stat_bar label="Pompa Giriş Çıkış" name="simpumpiomsec"/> + </stat_view> + </stat_view> + </stat_view> + </container_view> + </scroll_container> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/tr/floater_script_ed_prefs.xml new file mode 100644 index 0000000000..2d0d8d580a --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_script_ed_prefs.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_script_colors" title="YAZI RENKLERİ"> + <text name="color_pickers_label"> + İstediğiniz renkleri seçin: + </text> + <text name="text_label"> + Metin + </text> + <text name="cursor_label"> + İmleç + </text> + <text name="background_label"> + Arka Plan + </text> + <text name="datatype_label"> + Veri Türleri + </text> + <text name="event_label"> + Etkinlikler + </text> + <text name="string_literal_label"> + Dize Değişmezleri + </text> + <text name="constant_label"> + Sabit + </text> + <text name="flow_control_label"> + Akış Denetimi + </text> + <text name="function_label"> + İşlev + </text> + <text name="comment_label"> + Yorum + </text> + <script_editor name="Script Preview"> + /* Örnek yazı */ +default +{ + state_entry() + { + // Yorum + string greeting = "Merhaba"; + llSay(PUBLIC_CHANNEL, greeting); + } +} + </script_editor> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_snapshot.xml b/indra/newview/skins/default/xui/tr/floater_snapshot.xml index fa51f15d16..3f588522eb 100755 --- a/indra/newview/skins/default/xui/tr/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/tr/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="ANLIK GÖRÜNTÜ ÖNİZLEME"> +<floater name="Snapshot" title="ANLIK GÖRÜNTÜ"> <floater.string name="unknown"> bilinmiyor </floater.string> @@ -61,5 +61,11 @@ <check_box label="BÜG'ler" name="hud_check"/> <check_box label="Kare dondur (tam ekran)" name="freeze_frame_check"/> <check_box label="Otomatik yenile" name="auto_snapshot_check"/> + <text name="filter_list_label"> + Filtre: + </text> + <combo_box name="filters_combobox" tool_tip="Görüntü filtreleri"> + <combo_box.item label="Filtre Yok" name="NoFilter"/> + </combo_box> </panel> </floater> diff --git a/indra/newview/skins/default/xui/tr/floater_stats.xml b/indra/newview/skins/default/xui/tr/floater_stats.xml index afce87bdaa..1ae42ad382 100755 --- a/indra/newview/skins/default/xui/tr/floater_stats.xml +++ b/indra/newview/skins/default/xui/tr/floater_stats.xml @@ -4,17 +4,21 @@ <container_view name="statistics_view"> <stat_view label="Temel" name="basic"> <stat_bar label="FPS" name="fps"/> - <stat_bar label="Bant genişliği" name="bandwidth"/> + <stat_bar label="UDP Verileri Alındı" name="bandwidth"/> <stat_bar label="Paket Kaybı" name="packet_loss"/> <stat_bar label="Sim Pingi" name="ping"/> </stat_view> <stat_view label="Gelişmiş" name="advanced"> <stat_view label="İşle" name="render"> - <stat_bar label="Çerçeve Başına Çizilen Üçgenler" name="ktrisframe"/> - <stat_bar label="Saniyede Bir Çizilen Üçgenler" name="ktrissec"/> - <stat_bar label="Toplam Nesne" name="objs"/> + <stat_bar label="Çerçeve Başına Üçgenler" name="ktrisframe"/> + <stat_bar label="Saniye Başına Üçgenler" name="ktrissec"/> + <stat_bar label="Toplam Nesne" name="totalobjs"/> + <stat_bar label="Önbelleğe Alınan Nesne" name="cachedobjs"/> <stat_bar label="Yeni Nesne" name="newobjs"/> <stat_bar label="Nesne Önbellek İsabet Oranı" name="object_cache_hits"/> + <stat_bar label="Gerçekleştirilen Gölgeleme Sorguları" name="occlusion_queries"/> + <stat_bar label="Gölgelenen Nesneler" name="occluded"/> + <stat_bar label="Gölgelenmeye Nesneler" name="unoccluded"/> </stat_view> <stat_view label="Doku" name="texture"> <stat_bar label="Önbellek İsabet Oranı" name="texture_cache_hits"/> @@ -26,15 +30,32 @@ <stat_bar label="Ham Bellek" name="rawmemstat"/> <stat_bar label="Bağlı Doku Belleği" name="glboundmemstat"/> </stat_view> + <stat_view label="Bellek Kullanımı" name="memory"> + <stat_bar label="LLTrace" name="LLTrace"/> + <stat_bar label="KA" name="LLView"/> + <stat_bar label="Fontlar" name="LLFontFreetype"/> + <stat_bar label="Envanter" name="LLInventoryObject"/> + <stat_bar label="Görüntüleyici Nesneleri" name="LLViewerObject"/> + <stat_bar label="Gölgeleme Ağacı Grup Verileri" name="LLViewerOctreeGroup"/> + <stat_bar label="Gölgeleme Ağacı Verileri" name="LLViewerOctreeEntry"/> + <stat_bar label="Görüntüleyici Nesne Önbelleği" name="LLVOCacheEntry"/> + <stat_bar label="Çizilebilir nesneler" name="LLDrawable"/> + <stat_bar label="Yüz Verileri" name="LLFace"/> + <stat_bar label="Çizim Bilgileri" name="LLDrawInfo"/> + <stat_bar label="Doku Verileri" name="LLTexture"/> + <stat_bar label="Görüntü Verileri" name="LLImage"/> + <stat_bar label="GL Görüntü Verileri" name="LLImageGL"/> + <stat_bar label="Vertex Tamponları" name="LLVertexBuffer"/> + </stat_view> <stat_view label="Ağ" name="network"> <stat_bar label="Gelen Paketler" name="packetsinstat"/> <stat_bar label="Giden Paketler" name="packetsoutstat"/> - <stat_bar label="Nesneler" name="objectkbitstat"/> - <stat_bar label="Doku" name="texturekbitstat"/> - <stat_bar label="Varlık" name="assetkbitstat"/> - <stat_bar label="Katmanlar" name="layerskbitstat"/> - <stat_bar label="Gerçekte Gelen" name="actualinkbitstat"/> - <stat_bar label="Gerçekte Giden" name="actualoutkbitstat"/> + <stat_bar label="Nesneler" name="objectdatareceived"/> + <stat_bar label="Doku" name="texturedatareceived"/> + <stat_bar label="Varlık" name="assetudpdatareceived"/> + <stat_bar label="Katmanlar" name="layersdatareceived"/> + <stat_bar label="Gerçekte Gelen" name="messagedatain"/> + <stat_bar label="Gerçekte Giden" name="messagedataout"/> <stat_bar label="VFS Bekleyen İşlemler" name="vfspendingoperations"/> </stat_view> </stat_view> @@ -64,8 +85,8 @@ <stat_bar label="Giden Paketler" name="simoutpps"/> <stat_bar label="Bekleyen Karşıdan Yüklemeler" name="simpendingdownloads"/> <stat_bar label="Bekleyen Karşıya Yüklemeler" name="simpendinguploads"/> - <stat_bar label="Toplam Bildirilmiş Bayt" name="simtotalunackedbytes"/> - <stat_view label="Zaman (ms)" name="simperf"> + <stat_bar label="Toplam Bildirilmiş Veriler" name="simtotalunackedbytes"/> + <stat_view label="Süre" name="simperf"> <stat_bar label="Toplam Çerçeve Süresi" name="simframemsec"/> <stat_bar label="Net Süre" name="simnetmsec"/> <stat_bar label="Fizik Süresi" name="simsimphysicsmsec"/> @@ -74,7 +95,7 @@ <stat_bar label="Görüntü Süresi" name="simimagesmsec"/> <stat_bar label="Komut Dosyası Süresi" name="simscriptmsec"/> <stat_bar label="Yedek Zaman" name="simsparemsec"/> - <stat_view label="Zaman Ayrıntıları (ms)" name="timedetails"> + <stat_view label="Zaman Ayrıntıları" name="timedetails"> <stat_bar label="Fizik Adımı" name="simsimphysicsstepmsec"/> <stat_bar label="Fizik Şekillerini Güncelle" name="simsimphysicsshapeupdatemsec"/> <stat_bar label="Fizik Diğer" name="simsimphysicsothermsec"/> diff --git a/indra/newview/skins/default/xui/tr/floater_tools.xml b/indra/newview/skins/default/xui/tr/floater_tools.xml index 39a3569efa..56df06f83b 100755 --- a/indra/newview/skins/default/xui/tr/floater_tools.xml +++ b/indra/newview/skins/default/xui/tr/floater_tools.xml @@ -73,9 +73,7 @@ <check_box label="Bağlantılıları düzenle" name="checkbox edit linked parts"/> <button label="Bağla" name="link_btn"/> <button label="Bağlantıyı Kopar" name="unlink_btn"/> - <text label="Her İki Tarafı Uzat" name="checkbox uniform label"> - Her İki Tarafı Uzat - </text> + <check_box label="Her İki Tarafı Uzat" name="checkbox uniform"/> <check_box initial_value="true" label="Dokuları Uzat" name="checkbox stretch textures"/> <check_box initial_value="true" label="Yasla" name="checkbox snap to grid"/> <combo_box name="combobox grid mode" tool_tip="Nesneyi konumlandırmak için ağ cetvelini seçin"> @@ -410,82 +408,7 @@ <spinner label="100 kg/m3 cinsinden yoğunluk" name="Physics Density"/> <spinner label="Restitüsyon" name="Physics Restitution"/> </panel> - <panel label="Doku" name="Texture"> - <panel.string name="string repeats per meter"> - Metrede Kaç Kez Tekrarlandığı - </panel.string> - <panel.string name="string repeats per face"> - Bir Yüzde Kaç Kez Tekrarlandığı - </panel.string> - <texture_picker label="Doku" name="texture control" tool_tip="Bir resim seçmek için tıklayın"/> - <color_swatch label="Renk" name="colorswatch" tool_tip="Renk seçiciyi açmak için tıklayın"/> - <text name="color trans"> - Saydamlık % - </text> - <text name="glow label"> - Parıltı - </text> - <check_box label="Tam Parlak" name="checkbox fullbright"/> - <text name="tex gen"> - Eşleştirme - </text> - <combo_box name="combobox texgen"> - <combo_box.item label="Varsayılan" name="Default"/> - <combo_box.item label="Planar" name="Planar"/> - </combo_box> - <text name="label shininess"> - Parıldama - </text> - <combo_box name="combobox shininess"> - <combo_box.item label="Hiçbiri" name="None"/> - <combo_box.item label="Düşük" name="Low"/> - <combo_box.item label="Orta" name="Medium"/> - <combo_box.item label="Yüksek" name="High"/> - </combo_box> - <text name="label bumpiness"> - Yumruluk - </text> - <combo_box name="combobox bumpiness"> - <combo_box.item label="Hiçbiri" name="None"/> - <combo_box.item label="Parlaklık" name="Brightness"/> - <combo_box.item label="Koyuluk" name="Darkness"/> - <combo_box.item label="damarlı ahşap" name="woodgrain"/> - <combo_box.item label="ağaç kabuğu" name="bark"/> - <combo_box.item label="tuğlalar" name="bricks"/> - <combo_box.item label="dama tahtası" name="checker"/> - <combo_box.item label="beton" name="concrete"/> - <combo_box.item label="sert çini" name="crustytile"/> - <combo_box.item label="kesilmiş taş" name="cutstone"/> - <combo_box.item label="diskler" name="discs"/> - <combo_box.item label="çakıl" name="gravel"/> - <combo_box.item label="petri kabı" name="petridish"/> - <combo_box.item label="dış kaplama" name="siding"/> - <combo_box.item label="taş çini" name="stonetile"/> - <combo_box.item label="stükko" name="stucco"/> - <combo_box.item label="vakum" name="suction"/> - <combo_box.item label="örgü" name="weave"/> - </combo_box> - <spinner label="Yatay (U)" name="TexScaleU"/> - <check_box label="Çevir" name="checkbox flip s"/> - <spinner label="Dikey (V)" name="TexScaleV"/> - <check_box label="Çevir" name="checkbox flip t"/> - <spinner label="Döndürme*" name="TexRot"/> - <button label="Uygula" label_selected="Uygula" name="button apply"/> - <text name="tex offset"> - Doku Dengeleyicisi - </text> - <spinner label="Yatay (U)" name="TexOffsetU"/> - <spinner label="Dikey (V)" name="TexOffsetV"/> - <panel name="Add_Media"> - <text name="media_tex"> - Ortam - </text> - <button name="add_media" tool_tip="Ortam Ekle"/> - <button name="delete_media" tool_tip="Bu ortam dokusunu sil"/> - <button name="edit_media" tool_tip="Bu Ortamı Düzenle"/> - <button label="Hizala" label_selected="Ortamı Hizala" name="button align" tool_tip="Ortam dokusunu hizala (önce yüklenmelidir)"/> - </panel> - </panel> + <panel label="Doku" name="Texture"/> <panel label="İçerik" name="Contents"> <button label="Yeni Komut Dosyası" label_selected="Yeni Komut Dosyası" name="button new script"/> <button label="İzinler" name="button permissions"/> diff --git a/indra/newview/skins/default/xui/tr/floater_twitter.xml b/indra/newview/skins/default/xui/tr/floater_twitter.xml new file mode 100644 index 0000000000..3060bd1c84 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_twitter.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_twitter" title="TWITTER"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="OLUŞTUR" name="panel_twitter_photo"/> + <panel label="HESAP" name="panel_twitter_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + Hata + </text> + <text name="connection_loading_text"> + Yükleniyor... + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/tr/menu_avatar_icon.xml b/indra/newview/skins/default/xui/tr/menu_avatar_icon.xml index d3ef490735..dc3724cfc8 100755 --- a/indra/newview/skins/default/xui/tr/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/tr/menu_avatar_icon.xml @@ -2,6 +2,7 @@ <menu name="Avatar Icon Menu"> <menu_item_call label="Profili Göster" name="Show Profile"/> <menu_item_call label="Aİ Gönder..." name="Send IM"/> + <menu_item_call label="Işınlanma Talep Et" name="Request Teleport"/> <menu_item_call label="Arkadaş Ekle..." name="Add Friend"/> <menu_item_call label="Arkadaşı Çıkar..." name="Remove Friend"/> </menu> diff --git a/indra/newview/skins/default/xui/tr/menu_conversation.xml b/indra/newview/skins/default/xui/tr/menu_conversation.xml index c2773cdc26..68c9af15b5 100644 --- a/indra/newview/skins/default/xui/tr/menu_conversation.xml +++ b/indra/newview/skins/default/xui/tr/menu_conversation.xml @@ -29,4 +29,5 @@ <menu_item_call label="Herkesi engelle" name="ModerateVoiceMute"/> <menu_item_call label="Herkesin engellemesini kaldır" name="ModerateVoiceUnmute"/> </context_menu> + <menu_item_call label="Üyeyi yasakla" name="BanMember"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/tr/menu_inventory.xml b/indra/newview/skins/default/xui/tr/menu_inventory.xml index 51049427af..7239c4be06 100755 --- a/indra/newview/skins/default/xui/tr/menu_inventory.xml +++ b/indra/newview/skins/default/xui/tr/menu_inventory.xml @@ -70,6 +70,7 @@ <menu_item_call label="Oyna" name="Sound Play"/> <menu_item_call label="SLurl'i Kopyala" name="url_copy"/> <menu_item_call label="Yer İmi Hakkında" name="About Landmark"/> + <menu_item_call label="Haritada Göster" name="show_on_map"/> <menu_item_call label="SL Dünyasında Oynat" name="Animation Play"/> <menu_item_call label="Yerel Olarak Oynat" name="Animation Audition"/> <menu_item_call label="Anlık İleti Gönder" name="Send Instant Message"/> diff --git a/indra/newview/skins/default/xui/tr/menu_login.xml b/indra/newview/skins/default/xui/tr/menu_login.xml index 79c95407e8..ecd29370a5 100755 --- a/indra/newview/skins/default/xui/tr/menu_login.xml +++ b/indra/newview/skins/default/xui/tr/menu_login.xml @@ -5,7 +5,15 @@ <menu_item_call label="[APP_NAME]'den Çık" name="Quit"/> </menu> <menu label="Yardım" name="Help"> - <menu_item_call label="[SECOND_LIFE] Yardımı" name="Second Life Help"/> + <menu_item_call label="Nasıl yapılır..." name="How To"/> + <menu_item_call label="Hızlı Başlangıç" name="Quickstart"/> + <menu_item_call label="Bilgi Bankası" name="Knowledge Base"/> + <menu_item_call label="Wiki" name="Wiki"/> + <menu_item_call label="Topluluk Forumları" name="Community Forums"/> + <menu_item_call label="Destek porteli" name="Support portal"/> + <menu_item_call label="[SECOND_LIFE] Haberler" name="Second Life News"/> + <menu_item_call label="[SECOND_LIFE] Bloklar" name="Second Life Blogs"/> + <menu_item_call label="Hata Bildir" name="Report Bug"/> <menu_item_call label="[APP_NAME] Hakkında" name="About Second Life"/> </menu> <menu_item_check label="Hata Ayıklama Menüsünü Göster" name="Show Debug Menu"/> diff --git a/indra/newview/skins/default/xui/tr/menu_object.xml b/indra/newview/skins/default/xui/tr/menu_object.xml index 2f8b5c0362..cfc9515d8f 100755 --- a/indra/newview/skins/default/xui/tr/menu_object.xml +++ b/indra/newview/skins/default/xui/tr/menu_object.xml @@ -19,6 +19,7 @@ <context_menu label="Yönet" name="Remove"> <menu_item_call label="Kötüye Kullanımı Bildir" name="Report Abuse..."/> <menu_item_call label="Engelle" name="Object Mute"/> + <menu_item_call label="Engellemeyi Kaldır" name="Object Unmute"/> <menu_item_call label="İade Et" name="Return..."/> </context_menu> <menu_item_call label="Al" name="Pie Object Take"/> diff --git a/indra/newview/skins/default/xui/tr/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/tr/menu_teleport_history_item.xml index 93984162e7..d7ff807c3d 100755 --- a/indra/newview/skins/default/xui/tr/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/tr/menu_teleport_history_item.xml @@ -2,5 +2,5 @@ <context_menu name="Teleport History Item Context Menu"> <menu_item_call label="Işınla" name="Teleport"/> <menu_item_call label="Ek Bilgi" name="More Information"/> - <menu_item_call label="Panoya Kopyala" name="CopyToClipboard"/> + <menu_item_call label="SLurl'i Kopyala" name="CopyToClipboard"/> </context_menu> diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml index 4236f91636..23e2903e03 100755 --- a/indra/newview/skins/default/xui/tr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml @@ -34,6 +34,9 @@ <menu_item_check label="Yakındaki Sohbet..." name="Nearby Chat"/> <menu_item_check label="Konuş" name="Speak"/> <menu_item_check label="Sohbet Günlüğü..." name="Conversation Log..."/> + <menu_item_call label="Facebook..." name="Facebook"/> + <menu_item_call label="Twitter..." name="Twitter"/> + <menu_item_call label="Flickr..." name="Flickr"/> <menu label="Ses şekillendirme" name="VoiceMorphing"> <menu_item_check label="Ses şekillendirme yok" name="NoVoiceMorphing"/> <menu_item_check label="Önizleme..." name="Preview"/> @@ -70,11 +73,11 @@ <menu_item_check label="Gelişmiş Menü" name="Show Advanced Menu"/> </menu> <menu label="Güneş" name="Sun"> - <menu_item_call label="Gün Doğumu" name="Sunrise"/> - <menu_item_call label="Gün Ortası" name="Noon"/> - <menu_item_call label="Gün Batımı" name="Sunset"/> - <menu_item_call label="Gece Yarısı" name="Midnight"/> - <menu_item_call label="Bölge Ayarlarını Kullan" name="Use Region Settings"/> + <menu_item_check label="Gün Doğumu" name="Sunrise"/> + <menu_item_check label="Gün Ortası" name="Noon"/> + <menu_item_check label="Gün Batımı" name="Sunset"/> + <menu_item_check label="Gece Yarısı" name="Midnight"/> + <menu_item_check label="Bölge Ayarlarını Kullan" name="Use Region Settings"/> </menu> <menu label="Ortam Düzenleyici" name="Environment Editor"> <menu_item_call label="Ortam Ayarları..." name="Environment Settings"/> @@ -148,7 +151,8 @@ <menu_item_check label="Ağa Uydur" name="Snap to Grid"/> <menu_item_call label="XY Nesnesini Ağa Uydur" name="Snap Object XY to Grid"/> <menu_item_call label="Ağ İçin Seçimi Kullan" name="Use Selection for Grid"/> - <menu_item_call label="Ağ Seçenekleri" name="Grid Options"/> + <menu_item_call label="Ağ Seçenekleri..." name="Grid Options"/> + <menu_item_call label="Varsayılan İzinleri Ayarla..." name="Set default permissions"/> </menu> <menu label="Karşıya Yükle" name="Upload"> <menu_item_call label="Görüntü (L$[COST])..." name="Upload Image"/> @@ -156,15 +160,12 @@ <menu_item_call label="Animasyon (L$[COST])..." name="Upload Animation"/> <menu_item_call label="Model..." name="Upload Model"/> <menu_item_call label="Toplu (dosya başına L$[COST])..." name="Bulk Upload"/> - <menu_item_call label="Varsayılan Karşıya Yükleme İzinlerini Ayarla" name="perm prefs"/> </menu> <menu_item_call label="Geri Al" name="Undo"/> <menu_item_call label="Yinele" name="Redo"/> </menu> <menu label="Yardım" name="Help"> <menu_item_call label="Nasıl yapılır..." name="How To"/> - <menu_item_call label="[SECOND_LIFE] Yardımı" name="Second Life Help"/> - <menu_item_call label="Kullanıcı kılavuzu" name="User’s guide"/> <menu_item_call label="Bilgi Bankası" name="Knowledge Base"/> <menu_item_call label="Wiki" name="Wiki"/> <menu_item_call label="Topluluk Forumları" name="Community Forums"/> @@ -186,6 +187,7 @@ <menu label="Performans Araçları" name="Performance Tools"> <menu_item_call label="Gecikme Ölçer" name="Lag Meter"/> <menu_item_check label="İstatistik Çubuğu" name="Statistics Bar"/> + <menu_item_call label="Sahne Yükleme İstatistikleri" name="Scene Load Statistics"/> <menu_item_check label="Avatarlar İçin Çizim Ağırlığını Göster" name="Avatar Rendering Cost"/> </menu> <menu label="Vurgulama ve Görünürlük" name="Highlighting and Visibility"> @@ -248,6 +250,7 @@ <menu_item_check label="Hızlı Zamanlayıcılar" name="Fast Timers"/> <menu_item_check label="Bellek" name="Memory"/> <menu_item_check label="Sahne İstatistikleri" name="Scene Statistics"/> + <menu_item_check label="Sahne Yükleme Ekranı" name="Scene Loading Monitor"/> <menu_item_call label="Doku Alınması Hata Ayıklama Konsolu" name="Texture Fetch Debug Console"/> <menu_item_call label="Hata Ayıklama Konsoluna giden Bölge Bilgisi" name="Region Info to Debug Console"/> <menu_item_call label="Hata Ayıklama Konsoluna giden Grup Bilgisi" name="Group Info to Debug Console"/> @@ -284,6 +287,7 @@ <menu_item_check label="Düzenli Yavaş Çerçeve" name="Periodic Slow Frame"/> <menu_item_check label="Çerçeve Testi" name="Frame Test"/> <menu_item_call label="Çerçeve Profili..." name="Frame Profile"/> + <menu_item_call label="Değerlendirme" name="Benchmark"/> </menu> <menu label="Meta Verileri İşle" name="Render Metadata"> <menu_item_check label="Sınırlama Kutuları" name="Bounding Boxes"/> @@ -301,7 +305,9 @@ <menu_item_check label="Ayrıntı Seviyesi Bilgisi" name="LOD Info"/> <menu_item_check label="İnşa Kuyruğu" name="Build Queue"/> <menu_item_check label="Işıklar" name="Lights"/> + <menu_item_check label="Parçacıklar" name="Particles"/> <menu_item_check label="Çarpışma İskeleti" name="Collision Skeleton"/> + <menu_item_check label="Eklemler" name="Joints"/> <menu_item_check label="Işın Yayını" name="Raycast"/> <menu_item_check label="Rüzgar Vektörleri" name="Wind Vectors"/> <menu_item_check label="İşleme Karmaşıklığı" name="rendercomplexity"/> @@ -334,6 +340,7 @@ <menu_item_check label="Eklenmiş Işıkları İşle" name="Render Attached Lights"/> <menu_item_check label="Eklenmiş Parçacıkları İşle" name="Render Attached Particles"/> <menu_item_check label="Parıldayan Nesneler Üzerine Gel" name="Hover Glow Objects"/> + <menu_item_call label="Önbelleği Hemen Temizle" name="Cache Clear"/> </menu> <menu label="Ağ" name="Network"> <menu_item_check label="Aracıyı Durdur" name="AgentPause"/> @@ -366,7 +373,6 @@ <menu_item_call label="Odaklayıcı Tutucunun Dökümünü Al" name="Dump Focus Holder"/> <menu_item_call label="Seçilen Nesne Bilgisini Yazdır" name="Print Selected Object Info"/> <menu_item_call label="Aracı Bilgisini Yazdır" name="Print Agent Info"/> - <menu_item_check label="Bölge Hata Ayıklama Konsolu" name="Region Debug Console"/> <menu_item_check label="SelectMgr İçin Hata Ayıklama" name="Debug SelectMgr"/> <menu_item_check label="Tıklamalar İçin Hata Ayıklama" name="Debug Clicks"/> <menu_item_check label="Görünümler için Hata Ayıklama" name="Debug Views"/> diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml index 492178ab82..2364bd5acf 100755 --- a/indra/newview/skins/default/xui/tr/notifications.xml +++ b/indra/newview/skins/default/xui/tr/notifications.xml @@ -114,13 +114,13 @@ Daha fazla bilgi için bkz. [[MARKETPLACE_IMPORTS_URL] hata günlüğü]. <usetemplate name="okbutton" yestext="Tamam"/> </notification> <notification name="OutboxImportFailed"> - Aktarım başarılamadı + Aktarım '[ERROR_CODE]' hatası nedeniyle başarısız oldu Bir sistem veya ağ hatası nedeniyle Pazaryerine hiçbir klasör gönderilemedi. Daha sonra tekrar deneyin. <usetemplate name="okbutton" yestext="Tamam"/> </notification> <notification name="OutboxInitFailed"> - Pazaryeri başlatılamadı. + Pazaryeri başlatılması '[ERROR_CODE]' hatası nedeniyle başarısız oldu Bir sistem veya ağ hatası nedeniyle Pazaryeri başlatılamadı. Daha sonra tekrar deneyin. <usetemplate name="okbutton" yestext="Tamam"/> @@ -210,6 +210,22 @@ Bu Yetenek '[ROLE_NAME]' rolüne eklensin mi? Bu Yetenek '[ROLE_NAME]' rolüne eklensin mi? <usetemplate name="okcancelbuttons" notext="Hayır" yestext="Evet"/> </notification> + <notification name="AssignBanAbilityWarning"> + "[ROLE_NAME]" rolüne "[ACTION_NAME]" yeteneğini eklemek üzeresiniz. + + *UYARI* +Bu Yeteneğe sahip bir Roldeki Üyeler "[ACTION_NAME_2]" ve "[ACTION_NAME_3]" yeteneklerine de sahip olacak. + <usetemplate name="okbutton" yestext="Tamam"/> + </notification> + <notification name="RemoveBanAbilityWarning"> + "[ROLE_NAME]" rolünden "[ACTION_NAME]" yeteneğini kaldırıyorsunuz. + + *UYARI* +Bu yeteneğin kaldırılması "[ACTION_NAME_2]" ve "[ACTION_NAME_3]" yeteneklerini kaldırmaz. + +Bu yeteneklerin artık bu rolde bulunmasını istemiyorsanız, onları hemen devre dışı bırakın! + <usetemplate name="okbutton" yestext="Tamam"/> + </notification> <notification name="EjectGroupMemberWarning"> Gruptan [AVATAR_NAME] adlı üyeyi çıkarmak üzeresiniz. <usetemplate ignoretext="Gruptan bir katılımcının çıkarılmasını doğrulayın" name="okcancelignore" notext="İptal" yestext="Çıkar"/> @@ -1579,6 +1595,14 @@ Gruptan ayrılmak istiyor musunuz? Gruptan ayrılınamıyor. Gruptan ayrılamazsınız çünkü grubun son sahibisiniz. Lütfen önce sahip rolüne başka bir üye atayın. <usetemplate name="okbutton" yestext="Tamam"/> </notification> + <notification name="GroupDepartError"> + Gruptan ayrılma işlemi yapılamıyor: [reason]. + <usetemplate name="okbutton" yestext="Tamam"/> + </notification> + <notification name="GroupDepart"> + [group_name] grubundan ayrıldınız. + <usetemplate name="okbutton" yestext="Tamam"/> + </notification> <notification name="ConfirmKick"> Tüm Sakinleri GERÇEKTEN ağ dışına çıkarmak istiyor musunuz? <usetemplate name="okcancelbuttons" notext="İptal Et" yestext="Tüm Sakinleri Çıkar"/> @@ -1731,6 +1755,10 @@ Lütfen daha sonra tekrar deneyin. <nolink>[LOCATION]</nolink> konumuna ışınlanmak istediğinize emin misiniz? <usetemplate ignoretext="Bir yer imine ışınlanma istediğimde doğrulama iste" name="okcancelignore" notext="İptal Et" yestext="Işınla"/> </notification> + <notification name="TeleportViaSLAPP"> + <nolink>[LOCATION]</nolink> konumuna ışınlanmak istediğinize emin misiniz? + <usetemplate ignoretext="SLAPP ile ışınlanma istediğimde doğrulama iste" name="okcancelignore" notext="İptal" yestext="Işınla"/> + </notification> <notification name="TeleportToPick"> [PICK] konumuna ışınlanılsın mı? <usetemplate ignoretext="Seçme sekmesindeki bir konuma ışınlanma istediğimde doğrulama iste" name="okcancelignore" notext="İptal Et" yestext="Işınla"/> @@ -1940,6 +1968,9 @@ Binlerce bölgeyi değiştirecek ve alan sunucusunu kesintiye uğratacaktır. <notification name="ProblemAddingEstateManager"> Yeni bir gayrimenkul yöneticisi eklenirken problem oluştu. Bir veya birden fazla gayrimenkulün yönetici listesi dolu olabilir. </notification> + <notification name="ProblemAddingEstateBanManager"> + Gayri menkul sahibi ya da yöneticisi yasaklı listesine eklenemedi. + </notification> <notification name="ProblemAddingEstateGeneric"> Bu gayrimenkul listesine eklenirken problem oluştu. Bir veya birden fazla gayrimenkulün listesi dolu olabilir. </notification> @@ -2453,6 +2484,12 @@ Daha küçük bir arazi parçası seçmeyi deneyin. <notification name="SystemMessage"> [MESSAGE] </notification> + <notification name="FlickrConnect"> + [MESSAGE] + </notification> + <notification name="TwitterConnect"> + [MESSAGE] + </notification> <notification name="PaymentReceived"> [MESSAGE] </notification> @@ -3027,9 +3064,9 @@ Ayrıntılar için günlük dosyasına bakın. <nolink>[ITEMS]</nolink> -Paylaşmanın yapılacağı Sakinler: +Paylaşmanın yapılacağı Second Life Sakinleri: -[RESIDENTS] +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="İptal" yestext="Tamam"/> </notification> <notification name="ShareFolderConfirmation"> @@ -3041,7 +3078,7 @@ Aşağıdaki öğeleri paylaşmak istediğinize emin misiniz? Paylaşmanın yapılacağı Second Life Sakinleri: -[RESIDENTS] +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="İptal" yestext="Tamam"/> </notification> <notification name="ItemsShared"> @@ -3496,10 +3533,6 @@ Lütfen bir dakika sonra tekrar deneyin. <notification name="EjectComingSoon"> Daha fazla burada olma izniniz yok ve ayrılmak için [EJECT_TIME] saniyeniz var. </notification> - <notification name="NoEnterServerFull"> - Bu bölgeye giremezsiniz çünkü -sunucu dolu. - </notification> <notification name="SaveBackToInvDisabled"> Envantere Geri Kaydet devre dışı bırakıldı. </notification> @@ -3683,6 +3716,9 @@ sunucu dolu. <notification name="LinkFailedTooMuchPhysics"> Nesne çok fazla fizik kaynağı kullanıyor -- dinamikleri devre dışı bırakıldı. </notification> + <notification name="EstateManagerFailedllTeleportHome"> + [SLURL] adresindeki '[OBJECT_NAME]' nesnesi gayri menkul yöneticilerini ana konuma ışınlayamıyor. + </notification> <notification name="TeleportedHomeByObjectOnParcel"> '[PARCEL_NAME]' parseli üzerindeki '[OBJECT_NAME]' nesnesi tarafından ana konuma ışınlandınız </notification> @@ -3873,13 +3909,18 @@ sunucu dolu. Seçimde birleştirilecek yeterli sayıda lease edilmiş parsel yok. </notification> <notification name="CantDivideLandMultipleParcelsSelected"> - Arazi bölünemedi.\nBirden fazla parsel seçili durumda.\nDaha küçük bir arazi parçası seçmeyi deneyin. + Arazi bölünemiyor. +Birden fazla parsel seçili. +Daha küçük bir arazi parçası seçmeyi deneyin. </notification> <notification name="CantDivideLandCantFindParcel"> - Arazi bölünemiyor.\nParsel bulunamıyor.\nLütfen Yardım -> Hata Bildir ile bildirin... + Arazi bölünemiyor. +Parsel bulunamıyor. +Lütfen Yardım -> Hata Bildir... sekmesinden hatayı bildirin </notification> <notification name="CantDivideLandWholeParcelSelected"> - Arazi bölünemiyor. Tüm parsel seçilidir.\nDaha küçük bir arazi parçası seçmeyi deneyin. + Arazi bölünemiyor. Tüm parsel seçili. +Daha küçük bir arazi parçası seçmeyi deneyin. </notification> <notification name="LandHasBeenDivided"> Arazi bölündü. @@ -4019,4 +4060,12 @@ sunucu dolu. Dosyalar taşınamıyor. Önceki yol geri yüklendi. <usetemplate ignoretext="Dosyalar taşınamıyor. Önceki yol geri yüklendi." name="okignore" yestext="Tamam"/> </notification> + <notification name="DefaultObjectPermissions"> + Aşağıdaki nedenden dolayı, varsayılan izinler kaydedilirken bir sorun oluştu: [REASON]. Varsayılan izinleri ayarlamayı lütfen daha sonra tekrar deneyin. + <usetemplate name="okbutton" yestext="Tamam"/> + </notification> + <notification name="ChatHistoryIsBusyAlert"> + Sohbet geçmişi dosyası önceki işlemi gerçekleştirmekle meşgul. Lütfen bir kaç dakika sonra tekrar deneyin veya başka bir kişiyle sohbet etmeyi deneyin. + <usetemplate name="okbutton" yestext="Tamam"/> + </notification> </notifications> diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_account.xml b/indra/newview/skins/default/xui/tr/panel_facebook_account.xml new file mode 100644 index 0000000000..e2d2b193a6 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_facebook_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_account"> + <string name="facebook_connected" value="Facebook'a şu kimlikle bağlandınız:"/> + <string name="facebook_disconnected" value="Facebook'a bağlanılmadı"/> + <text name="account_caption_label"> + Facebook'a bağlanılmadı. + </text> + <panel name="panel_buttons"> + <button label="Bağlan..." name="connect_btn"/> + <button label="Bağlantıyı kes" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Facebook'ta içerik yayınlama hakkında bilgi edinin] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_friends.xml b/indra/newview/skins/default/xui/tr/panel_facebook_friends.xml new file mode 100644 index 0000000000..0a6b9ac600 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_facebook_friends.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_friends"> + <string name="facebook_friends_empty" value="Şu an için aynı zamanda bir Second Life sakini olan hiçbir Facebook arkadaşınız yok. Facebook arkadaşlarınızı bugün Second Life'a katılmaya davet edin!"/> + <string name="facebook_friends_no_connected" value="Şu anda Facebook'a bağlı değilsiniz. Bağlanmak ve bu özelliği etkinleştirmek için lütfen Hesap sekmesine gidin."/> + <accordion name="friends_accordion"> + <accordion_tab name="tab_second_life_friends" title="SL arkadaşları"/> + <accordion_tab name="tab_suggested_friends" title="Bu kişileri SL arkadaşları olarak ekle"/> + </accordion> + <text name="facebook_friends_status"> + Facebook'a bağlanılmadı. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_photo.xml b/indra/newview/skins/default/xui/tr/panel_facebook_photo.xml new file mode 100644 index 0000000000..64732c5fc7 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_facebook_photo.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Görüntü çözünürlüğü"> + <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1200x630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Görüntü filtreleri"> + <combo_box.item label="Filtre Yok" name="NoFilter"/> + </combo_box> + <button label="Yenile" name="new_snapshot_btn" tool_tip="Yenilemek için tıklayın"/> + <button label="Önizleme" name="big_preview_btn" tool_tip="Önizleme ayarları arasında geçiş yapmak için tıklayın"/> + <text name="caption_label"> + Yorum (isteğe bağlı): + </text> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Yayınla" name="post_photo_btn"/> + <button label="İptal" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_place.xml b/indra/newview/skins/default/xui/tr/panel_facebook_place.xml new file mode 100644 index 0000000000..54c392c9d8 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_facebook_place.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_place"> + <layout_stack name="stack_place"> + <layout_panel name="place_detail_panel"> + <text name="place_caption_label"> + Bulunduğunuz yer hakkında bir şeyler söyleyin: + </text> + </layout_panel> + <layout_panel name="place_map_panel"> + <check_box initial_value="false" label="" name="add_place_view_cb"/> + </layout_panel> + <layout_panel name="place_button_panel"> + <button label="Yayınla" name="post_place_btn"/> + <button label="İptal" name="cancel_place_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_status.xml b/indra/newview/skins/default/xui/tr/panel_facebook_status.xml new file mode 100644 index 0000000000..9b95fe3a35 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_facebook_status.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_status"> + <layout_stack name="stack_status"> + <layout_panel name="status_detail_panel"> + <text name="status_caption_label"> + Ne düşünüyorsunuz? + </text> + </layout_panel> + <layout_panel name="status_button_panel"> + <button label="Yayınla" name="post_status_btn"/> + <button label="İptal" name="cancel_status_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_flickr_account.xml b/indra/newview/skins/default/xui/tr/panel_flickr_account.xml new file mode 100644 index 0000000000..57b940d5f1 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_flickr_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_account"> + <string name="flickr_connected" value="Flickr'a şu kimlikle bağlandınız:"/> + <string name="flickr_disconnected" value="Flickr'la bağlantı kurulmadı"/> + <text name="account_caption_label"> + Flickr'la bağlantı kurulmadı. + </text> + <panel name="panel_buttons"> + <button label="Bağlan..." name="connect_btn"/> + <button label="Bağlantıyı kes" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Flickr/ta-p/2435609 Flickr'da içerik yayınlama hakkında bilgi edinin] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_flickr_photo.xml b/indra/newview/skins/default/xui/tr/panel_flickr_photo.xml new file mode 100644 index 0000000000..9ebc70c67c --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_flickr_photo.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Görüntü çözünürlüğü"> + <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Görüntü filtreleri"> + <combo_box.item label="Filtre Yok" name="NoFilter"/> + </combo_box> + <button label="Yenile" name="new_snapshot_btn" tool_tip="Yenilemek için tıklayın"/> + <button label="Önizleme" name="big_preview_btn" tool_tip="Önizleme ayarları arasında geçiş yapmak için tıklayın"/> + <text name="title_label"> + Başlık: + </text> + <text name="description_label"> + Açıklama: + </text> + <check_box initial_value="true" label="Açıklamanın sonuna SL konumunu ekle" name="add_location_cb"/> + <text name="tags_label"> + Etiketler: + </text> + <text name="tags_help_label"> + Etiketleri boşlukla ayır +Birden çok kelime içeren etiketler için "" kullan + </text> + <combo_box name="rating_combobox" tool_tip="Filckr içerik seviyesi"> + <combo_box.item label="Güvenli Flickr seviyesi" name="SafeRating"/> + <combo_box.item label="Orta Flickr seviyesi" name="ModerateRating"/> + <combo_box.item label="Kısıtlı Flickr seviyesi" name="RestrictedRating"/> + </combo_box> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Karşıya Yükle" name="post_photo_btn"/> + <button label="İptal" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/tr/panel_group_bulk_ban.xml new file mode 100644 index 0000000000..214cd15ec4 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_group_bulk_ban.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Sakinleri Yasakla" name="bulk_ban_panel"> + <panel.string name="loading"> + (yükleniyor...) + </panel.string> + <panel.string name="ban_selection_too_large"> + Grup yasaklama talepleri gönderilmedi: çok fazla Sakin seçilmiş. Her talepte en fazla 100 kişiye grup giriş yasağı koyabilirsiniz. + </panel.string> + <panel.string name="ban_not_permitted"> + Gruptan yasaklama talebi gönderilmedi: "Yasaklı listesini yönetme" yetkisine sahip değilsiniz. + </panel.string> + <panel.string name="ban_limit_fail"> + Gruptan yasaklama talebi gönderilmedi: grubunuz izin verilen yasaklama limitine ulaştı. + </panel.string> + <panel.string name="partial_ban"> + Gruptan yasaklama taleplerinin bazıları gönderilmedi: +[REASONS] + </panel.string> + <panel.string name="ban_failed"> + Gruptan yasaklama talepleri gönderilmedi: +[REASONS] + </panel.string> + <panel.string name="residents_already_banned"> + - Aşağıdaki sakinler zaten yasaklı: [RESIDENTS]. + </panel.string> + <panel.string name="ban_limit_reached"> + - Yasaklama limitine ulaşıldığı için aşağıdaki kişiler yasaklanmadı: [RESIDENTS]. + </panel.string> + <panel.string name="cant_ban_yourself"> + - Kendinizi bir grubun yasaklı listesine ekleyemezsiniz. + </panel.string> + <text name="help_text"> + Birden fazla Sakin seçip grubunuza girişlerini yasaklayabilirsiniz. Başlamak için "Sakin Seçiciyi Aç" üzerine tıklayın. + </text> + <button label="Sakin Seçiciyi Aç" name="add_button"/> + <name_list name="banned_agent_list" tool_tip="Ctrl tuşunu basılı tutun ve seçmek istediğiniz Sakinlerin adlarına tıklayın"/> + <button label="Seçilenleri Listeden Çıkar" name="remove_button" tool_tip="Yukarıda seçilen Sakinleri yasaklı listesinden çıkarır"/> + <button label="Sakinleri Yasakla" name="ban_button"/> + <button label="İptal" name="cancel_button"/> + <string name="GroupBulkBan"> + Gruptan Yasakla + </string> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/tr/panel_group_info_sidetray.xml index 32f39da490..e4697eaa21 100755 --- a/indra/newview/skins/default/xui/tr/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/tr/panel_group_info_sidetray.xml @@ -20,7 +20,7 @@ <layout_panel name="group_accordions"> <accordion name="groups_accordion"> <accordion_tab name="group_general_tab" title="Genel"/> - <accordion_tab name="group_roles_tab" title="Roller"/> + <accordion_tab name="group_roles_tab" title="Roller ve Üyeler"/> <accordion_tab name="group_notices_tab" title="Bildirimler"/> <accordion_tab name="group_land_tab" title="Arazi/Varlıklar"/> </accordion> diff --git a/indra/newview/skins/default/xui/tr/panel_group_invite.xml b/indra/newview/skins/default/xui/tr/panel_group_invite.xml index 4ba5761edb..77c4db2cdc 100755 --- a/indra/newview/skins/default/xui/tr/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/tr/panel_group_invite.xml @@ -22,7 +22,7 @@ Onları hala Role atayacağınızı seçin: </text> <combo_box name="role_name" tool_tip="Üyeleri atamanıza izin verilen Roller listesinden seçin"/> - <button label="Davetiye Gönder" name="ok_button"/> + <button label="Davetiye Gönder" name="invite_button"/> <button label="İptal" name="cancel_button"/> <string name="GroupInvitation"> Grup Davetiyesi diff --git a/indra/newview/skins/default/xui/tr/panel_group_roles.xml b/indra/newview/skins/default/xui/tr/panel_group_roles.xml index fb03107da8..59a48bbdc2 100755 --- a/indra/newview/skins/default/xui/tr/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/tr/panel_group_roles.xml @@ -20,15 +20,17 @@ Ctrl tuşuna basıp adlarına tıklayarak birden fazla Üye seçebilirsiniz. <name_list.columns label="Üye" name="name"/> <name_list.columns label="Bağış" name="donated"/> <name_list.columns label="Durum" name="online"/> + <name_list.columns label="Ünvan" name="title"/> </name_list> <button label="Davet Et" name="member_invite"/> <button label="Çıkar" name="member_eject"/> + <button label="Üyeyi/Üyeleri Yasakla" name="member_ban"/> </panel> <panel label="ROLLER" name="roles_sub_tab"> <panel.string name="help_text"> - Roller, birer başlığa ve Üyelerin gerçekleştirmesine izin verilen Yetenekler listesine sahiptir. + Rollerde, birer başlık ve Üyelerin gerçekleştirmesine izin verilen bir Yetenekler listesi vardır. Bir Üye bir veya daha fazla sayıda Role ait olabilir. - Bir grupta 10'a kadar Rol olabilir, buna Herkes ve Sahip Rolü de dahildir. + Bir grupta, Herkes ve Sahip Rolü dahil, en fazla 10 Rol olabilir. </panel.string> <panel.string name="cant_delete_role"> 'Herkes' ve 'Sahipler' Rolleri özeldir, silinemez. @@ -44,12 +46,27 @@ Ctrl tuşuna basıp adlarına tıklayarak birden fazla Üye seçebilirsiniz. </panel> <panel label="YETENEKLER" name="actions_sub_tab" tool_tip="Bir Yeteneğin Açıklamasını ve bu Yeteneğe hangi Rollerin ve Üyelerin sahip olabileceğini görebilirsiniz."> <panel.string name="help_text"> - Yetenekler sayesinde Rollerle ilişkili Üyeler bu grup içerisinde belirli şeyler yapabilir. + Yetenekler sayesinde Rollerle İlişkili Üyeler bu grup içerisinde belirli şeyler yapabilir. Yeteneklerin kapsamı oldukça geniştir. </panel.string> <filter_editor label="Yetenekleri Filtrele" name="filter_input"/> <scroll_list name="action_list" tool_tip="Bir Yeteneği seçerek daha çok ayrıntı görebilirsiniz"/> </panel> + <panel label="YASAKLI SAKİNLER" name="banlist_sub_tab" tool_tip="Bu gruba girişleri yasaklanan sakinleri görüntüle"> + <panel.string name="help_text"> + Yasaklı listesindeki sakinler gruba katılamaz. + </panel.string> + <panel.string name="ban_count_template"> + Yasaklama sayısı: [COUNT]/[LIMIT] + </panel.string> + <name_list name="ban_list"> + <name_list.columns label="Sakin" name="name"/> + <name_list.columns label="Yasaklama Tarihi" name="ban_date"/> + </name_list> + <button label="Sakini/Sakinleri Yasakla" name="ban_create" tool_tip="Grubunuzdaki sakinleri yasaklayın"/> + <button label="Yasaklamayı Kaldır" name="ban_delete" tool_tip="Seçilen sakinlerin gruba giriş yasağını kaldır"/> + <button name="ban_refresh" tool_tip="Yasaklı listesini yenile"/> + </panel> </tab_container> <panel name="members_footer"> <text name="static"> diff --git a/indra/newview/skins/default/xui/tr/panel_login.xml b/indra/newview/skins/default/xui/tr/panel_login.xml index 28d316e46b..ce1519be89 100755 --- a/indra/newview/skins/default/xui/tr/panel_login.xml +++ b/indra/newview/skins/default/xui/tr/panel_login.xml @@ -1,46 +1,27 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php </panel.string> - <layout_stack name="login_widgets"> - <layout_panel name="login"> - <text name="log_in_text"> - OTURUM AÇ - </text> - <text name="username_text"> - Kullanıcı Adı: - </text> - <combo_box name="username_combo" tool_tip="Kaydolduğunuzda seçtiğiniz kullanıcı adı, örn. mustafayalcin12 veya Faruk Gungoren"/> - <text name="password_text"> - Parola: - </text> - </layout_panel> - <layout_panel name="start_location_panel"> - <text name="start_location_text"> - Buradan başla: - </text> - <combo_box name="start_location_combo"> - <combo_box.item label="Son konumum" name="MyLastLocation"/> - <combo_box.item label="Ana Konumum" name="MyHome"/> - <combo_box.item label="<Bölge adını girin>" name="Typeregionname"/> - </combo_box> - </layout_panel> - <layout_panel name="links_login_panel"> - <text name="login_help"> - Oturum açarken yardım mı gerekiyor? - </text> + <layout_stack name="ui_stack"> + <layout_panel name="ui_container"> + <combo_box label="Kullanıcı Adı" name="username_combo" tool_tip="Kaydolduğunuzda seçtiğiniz kullanıcı adı, örn. mustafayalcin12 veya Faruk Gungoren"/> + <line_editor label="Parola" name="password_edit"/> + <check_box label="Beni hatırla" name="remember_check"/> <text name="forgot_password_text"> - Kullanıcı adınızı veya parolanızı mı unuttunuz? + Parolamı unuttum </text> <button label="Oturum Aç" name="connect_btn"/> - <check_box label="Parolayı hatırla" name="remember_check"/> - </layout_panel> - <layout_panel name="links"> - <text name="create_account_text"> - HESABINIZI OLUŞTURUN + <text name="At_My_Last_Location_Label"> + son konumum </text> - <button label="Şimdi başla" name="create_new_account_btn"/> + <combo_box label="Sık kullandığım yerler" name="start_location_combo"> + <combo_box.item label="Ana konumum" name="MyHome"/> + </combo_box> + <button label="Oturum Aç" name="connect_favorite_btn"/> + <line_editor label="Bir yer adı yazın" name="location_edit"/> + <button label="Oturum Aç" name="connect_location_btn"/> + <combo_box label="Ağ seç" name="server_combo"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_login_first.xml b/indra/newview/skins/default/xui/tr/panel_login_first.xml new file mode 100644 index 0000000000..622edd0a8d --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_login_first.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_login"> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php + </panel.string> + <layout_stack name="logo_stack"> + <layout_panel name="parent_panel2"> + <layout_stack name="widget_stack"> + <layout_panel name="widget_container"> + <combo_box label="Kullanıcı Adı" name="username_combo" tool_tip="Kaydolduğunuzda seçtiğiniz kullanıcı adı, örn. mustafayalcin12 veya Faruk Gungoren"/> + <line_editor label="Parola" name="password_edit"/> + <button label="Oturum Aç" name="connect_btn"/> + <check_box label="Beni hatırla" name="remember_check"/> + <text name="forgot_password_text"> + Parolamı unuttum + </text> + </layout_panel> + </layout_stack> + </layout_panel> + <layout_panel name="parent_panel3"> + <layout_stack name="images_stack"> + <layout_panel name="images_container"> + <text name="image_caption_left"> + Başlangıç yeriniz Eğitim Adası. Haydi çıkış portalını bulun! + </text> + <text name="image_caption_right"> + Sonra da Sosyal Ada'yı keşfe çıkın ve diğer LS sakinleriyle tanışın! + </text> + </layout_panel> + </layout_stack> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/tr/panel_preferences_advanced.xml index 770cdc6efd..82c7b87c9a 100755 --- a/indra/newview/skins/default/xui/tr/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/tr/panel_preferences_advanced.xml @@ -28,4 +28,5 @@ <check_box label="Oturum açarken Ağ Seçimini göster" name="show_grid_selection_check"/> <check_box label="Gelişmiş Menüyü Göster" name="show_advanced_menu_check"/> <check_box label="Geliştirici Menüsünü Göster" name="show_develop_menu_check"/> + <button label="Varsayılan Oluşturma İzinleri" name="default_creation_permissions"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_general.xml b/indra/newview/skins/default/xui/tr/panel_preferences_general.xml index 1a13cf8f71..2c05e8a47a 100755 --- a/indra/newview/skins/default/xui/tr/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/tr/panel_preferences_general.xml @@ -29,14 +29,10 @@ <combo_box.item label="Genel ve Orta" name="Desired_Mature"/> <combo_box.item label="Genel" name="Desired_PG"/> </combo_box> - <text name="start_location_textbox"> - Standart konum: + <check_box label="Sık kullanılan yerleri oturum açma ekranında göster" name="favorites_on_login_check"/> + <text name="favorites_check_extra_text"> + (Bu bilgisayarı kullanan diğer kişiler de bunları görecek) </text> - <combo_box name="start_location_combo"> - <combo_box.item label="Son konumum" name="MyLastLocation"/> - <combo_box.item label="Ana Konumum" name="MyHome"/> - </combo_box> - <check_box initial_value="true" label="Oturumu açarken göster" name="show_location_checkbox"/> <text name="name_tags_textbox"> Ad etiketleri: </text> diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml index 285670a6ac..185d557567 100755 --- a/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml @@ -7,7 +7,7 @@ <text name="cache_size_label_l"> (Konumlar, görüntüler, web, arama geçmişi) </text> - <check_box label="Arama sonuçlarında profil bilgilerini göster" name="online_searchresults"/> + <check_box label="Profil bilgilerimi Arama sonuçlarında göster" name="online_searchresults"/> <check_box label="Çevrimiçi olduğumu sadece arkadaşlar ve gruplar bilsin" name="online_visibility"/> <check_box label="Sadece arkadaşlar ve gruplar beni arasın veya Aİ göndersin" name="voice_call_friends_only_check"/> <check_box label="Aramaları sonlandırırken mikrofonu kapat" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/tr/panel_region_debug.xml b/indra/newview/skins/default/xui/tr/panel_region_debug.xml index 834ece563f..74a0a1569e 100755 --- a/indra/newview/skins/default/xui/tr/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/tr/panel_region_debug.xml @@ -28,7 +28,8 @@ <check_box label="Bu gayrimenkulu oluşturan bölgelerin tümünde" name="return_estate_wide" tool_tip="Bu gayrimenkulu oluşturan bölgelerin tümündeki nesneler iade edilsin"/> <button label="İade Et" name="return_btn"/> <button label="En Çok Çarpışanlar..." name="top_colliders_btn" tool_tip="En çok potansiyel çarpışma yaşayan nesnelerin listesi"/> - <button label="En Çok Komut Dsy. Çalştr...." name="top_scripts_btn" tool_tip="Komut dosyalarını çalıştırırken en çok zaman harcayan nesnelerin listesi"/> <button label="Bölgeyi Yeniden Başlat" name="restart_btn" tool_tip="2 dakikalık bir geri sayımdan sonra bölgeyi yeniden başlat"/> + <button label="En Çok Komut Dsy. Çalştr...." name="top_scripts_btn" tool_tip="Komut dosyalarını çalıştırırken en çok zaman harcayan nesnelerin listesi"/> <button label="Yeniden Başlatmayı İptal Et" name="cancel_restart_btn" tool_tip="Bölge yeniden başlatmasını iptal et"/> + <button label="Bölge Hata Ayıklama Konsolu" name="region_debug_console_btn" tool_tip="Açık Bölge Hata Ayıklama Konsolu"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_region_general.xml b/indra/newview/skins/default/xui/tr/panel_region_general.xml index 37da0f2cca..e6abef883d 100755 --- a/indra/newview/skins/default/xui/tr/panel_region_general.xml +++ b/indra/newview/skins/default/xui/tr/panel_region_general.xml @@ -20,12 +20,12 @@ </text> <check_box label="Yer Şekillendirmeyi Engelle" name="block_terraform_check"/> <check_box label="Uçmayı Engelle" name="block_fly_check"/> + <check_box label="Parselin Üzerinde Uçmayı Engelle" name="block_fly_over_check" tool_tip="Bir parselin üzerinden uçulmasını engellemek için onay işaretlerini yukarı doğru genişletin"/> <check_box label="Hasara İzin Ver" name="allow_damage_check"/> <check_box label="İtmeyi Kısıtla" name="restrict_pushobject"/> <check_box label="Arazinin Tekrar Satışına İzin Ver" name="allow_land_resell_check"/> <check_box label="Arazinin Birleşmesine/Bölünmesine İzin Ver" name="allow_parcel_changes_check"/> <check_box label="Aramada Arazinin Gösterilmesini Engelle" name="block_parcel_search_check" tool_tip="Arama sonuçlarında bu bölge ve parselleri görünsün"/> - <check_box label="Örgü Nesnelere İzin Ver" name="mesh_rez_enabled_check" tool_tip="Bu bölgede insanların örgü nesneleri oluşturmasına izin verilsin"/> <spinner label="Aracı Limiti" name="agent_limit_spin"/> <spinner label="Nesne Bonusu" name="object_bonus_spin"/> <text label="Erişkinlik" name="access_text"> diff --git a/indra/newview/skins/default/xui/tr/panel_script_ed.xml b/indra/newview/skins/default/xui/tr/panel_script_ed.xml index 79cd86c3f0..83040d06e4 100755 --- a/indra/newview/skins/default/xui/tr/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/tr/panel_script_ed.xml @@ -24,6 +24,7 @@ <menu_item_call label="Tüm Değişiklikleri Geri Çevir" name="Revert All Changes"/> <menu_item_call label="Dosyadan yükle..." name="LoadFromFile"/> <menu_item_call label="Dosyaya kaydet..." name="SaveToFile"/> + <menu_item_call label="Renkler..." name="Colors"/> </menu> <menu label="Düzenle" name="Edit"> <menu_item_call label="Geri Al" name="Undo"/> @@ -41,9 +42,9 @@ <menu_item_call label="Anahtar Sözcük Yardımı..." name="Keyword Help..."/> </menu> </menu_bar> - <text_editor name="Script Editor"> + <script_editor name="Script Editor"> Yükleniyor... - </text_editor> + </script_editor> <combo_box label="Ekle..." name="Insert..."/> <button label="Kaydet" label_selected="Kaydet" name="Save_btn"/> <button label="Düzenle..." name="Edit_btn"/> diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml index fd2e85fce5..4bc1098ce9 100755 --- a/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml @@ -4,4 +4,13 @@ <button label="E-posta" name="save_to_email_btn"/> <button label="Envanterime Kaydet (L$[AMOUNT])" name="save_to_inventory_btn"/> <button label="Bilgisayarıma Kaydet" name="save_to_computer_btn"/> + <text name="send_to_facebook_textbox"> + Gönder: [secondlife:/// Facebook] + </text> + <text name="send_to_twitter_textbox"> + [secondlife:/// Twitter] + </text> + <text name="send_to_flickr_textbox"> + [secondlife:/// Flickr] + </text> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/tr/panel_teleport_history_item.xml index a3a5c70c7e..311cee53c6 100755 --- a/indra/newview/skins/default/xui/tr/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/tr/panel_teleport_history_item.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="teleport_history_item"> <text name="region" value="..."/> + <text name="timestamp" value="..."/> <button name="profile_btn" tool_tip="Envanter bilgilerini göster"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_twitter_account.xml b/indra/newview/skins/default/xui/tr/panel_twitter_account.xml new file mode 100644 index 0000000000..704027e1ba --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_twitter_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_account"> + <string name="twitter_connected" value="Twitter'a şu kimlikle bağlandınız:"/> + <string name="twitter_disconnected" value="Twitter'la bağlantı kurulmadı"/> + <text name="account_caption_label"> + Twitter'la bağlantı kurulmadı. + </text> + <panel name="panel_buttons"> + <button label="Bağlan..." name="connect_btn"/> + <button label="Bağlantıyı kes" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Twitter/ta-p/2435453 Tweet atma hakkında bilgi edinin] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_twitter_photo.xml b/indra/newview/skins/default/xui/tr/panel_twitter_photo.xml new file mode 100644 index 0000000000..966e9b906d --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_twitter_photo.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="text_panel"> + <text name="status_label"> + Neler oluyor? + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="SL konumunu dahil et" name="add_location_cb"/> + <check_box initial_value="true" label="Fotoğraf ekle" name="add_photo_cb"/> + </layout_panel> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="Görüntü çözünürlüğü"> + <combo_box.item label="Mevcut Pencere" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="Görüntü filtreleri"> + <combo_box.item label="Filtre Yok" name="NoFilter"/> + </combo_box> + <button label="Yenile" name="new_snapshot_btn" tool_tip="Yenilemek için tıklayın"/> + <button label="Önizleme" name="big_preview_btn" tool_tip="Önizleme ayarları arasında geçiş yapmak için tıklayın"/> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="Tweet" name="post_photo_btn"/> + <button label="İptal" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/tr/role_actions.xml b/indra/newview/skins/default/xui/tr/role_actions.xml index 76ca58c319..8f063122dc 100755 --- a/indra/newview/skins/default/xui/tr/role_actions.xml +++ b/indra/newview/skins/default/xui/tr/role_actions.xml @@ -3,6 +3,7 @@ <action_set description="Bu Yetenekler arasında gruba Üye ekleme ve çıkarma ile davetiye olmadan yeni Üyelerin katılmasına imkan tanıma yer alır." name="Membership"> <action description="Kişileri Bu Gruba Davet Et" longdescription="Roller bölümü > Üyeler sekmesindeki "Davet Et" düğmesini kullanarak Kişileri Bu Gruba davet et" name="member invite" value="1"/> <action description="Üyeleri Bu Gruptan Çıkar" longdescription="Roller bölümü > Üyeler sekmesindeki "Çıkar" düğmesini kullanarak Üyeleri Bu Gruptan çıkar. Bir Sahip, başka bir Sahip dışında herkesi çıkartabilir. Eğer bir Sahip değilseniz, bir Üyenin bir gruptan çıkarılmasının tek yolu, Herkes Rolünde olmaları ve başka hiçbir Rolde OLMAMALARIDIR. Üyeleri Rollerden çıkarmak için, "Üyeleri Rollerden Çıkar" Yeteneğine sahip olmalısınız." name="member eject" value="2"/> + <action description="Yasaklı listesini yönet" longdescription="Grup üyelerinin, grupta sakinleri yasaklamalarına / bu yasaklamaları kaldırmalarına izin verir" name="allow ban" value="51"/> <action description=""Katılıma Açık" için Aç/Kapa yapın ve "Kayıt Ücretini" değiştirin" longdescription="Yeni üyelerin davetiye olmadan katılmasına imkan tanımak amacıyla "Katılıma Açık" için Aç/Kapa yapın ve Genel bölümünde "Kayıt Ücretini" değiştirin" name="member options" value="3"/> </action_set> <action_set description="Bu Yetenekler arasında grup Rolleri ekleme, kaldırma ve değiştirme; Rollere Üye ekleme ve kaldırma ile Rollere Yetenek atama imkanları yer alır." name="Roles"> diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml index 31c5d2d310..c4fc76fe29 100755 --- a/indra/newview/skins/default/xui/tr/strings.xml +++ b/indra/newview/skins/default/xui/tr/strings.xml @@ -37,6 +37,45 @@ <string name="StartupRequireDriverUpdate"> Grafik başlatma başarılamadı. Lütfen grafik sürücünüzü güncelleştirin! </string> + <string name="AboutHeader"> + [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL]) +[[VIEWER_RELEASE_NOTES_URL] [Sürüm Notları]] + </string> + <string name="AboutCompiler"> + [COMPILER] [COMPILER_VERSION] sürümü ile oluşturuldu + </string> + <string name="AboutPosition"> + <nolink>[HOSTNAME]</nolink> ([HOSTIP]) üzerinde bulunan [REGION] içerisinde [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] konumundasınız +SLURL: <nolink>[SLURL]</nolink> +(küresel koordinatlar [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1]) +[SERVER_VERSION] +[SERVER_RELEASE_NOTES_URL] + </string> + <string name="AboutSystem"> + CPU: [CPU] +Bellek: [MEMORY_MB] MB +İşl. Sis. Sürümü: [OS_VERSION] +Grafik Kartı Üreticisi: [GRAPHICS_CARD_VENDOR] +Grafik Kartı: [GRAPHICS_CARD] + </string> + <string name="AboutDriver"> + Windows Grafik Sürücüsü Sürümü: [GRAPHICS_DRIVER_VERSION] + </string> + <string name="AboutLibs"> + OpenGL Sürümü: [OPENGL_VERSION] + +libcurl Sürümü: [LIBCURL_VERSION] +J2C Kod Çözücü Sürümü: [J2C_VERSION] +Ses Sürücüsü Sürümü: [AUDIO_DRIVER_VERSION] +Qt Web Kit Sürümü: [QT_WEBKIT_VERSION] +Ses Sunucusu Sürümü: [VOICE_VERSION] + </string> + <string name="AboutTraffic"> + Kaybolan Paketler: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) + </string> + <string name="ErrorFetchingServerReleaseNotesURL"> + Sunucu sürümü notları URL'si alınırken hata oluştu. + </string> <string name="ProgressRestoring"> Geri yükleniyor... </string> @@ -296,6 +335,75 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin. <string name="TestingDisconnect"> Görüntüleyici bağlantısının kesilmesi test ediliyor </string> + <string name="SocialFlickrConnecting"> + Flickr bağlantısı kuruluyor... + </string> + <string name="SocialFlickrPosting"> + Yayınlanıyor... + </string> + <string name="SocialFlickrDisconnecting"> + Flickr bağlantısı kesiliyor... + </string> + <string name="SocialFlickrErrorConnecting"> + Flickr bağlantısı kurulurken sorun çıktı + </string> + <string name="SocialFlickrErrorPosting"> + Flickr'da yayınlarken sorun çıktı + </string> + <string name="SocialFlickrErrorDisconnecting"> + Flickr bağlantısı kesilirken sorun çıktı + </string> + <string name="SocialTwitterConnecting"> + Twitter bağlantısı kuruluyor... + </string> + <string name="SocialTwitterPosting"> + Yayınlanıyor... + </string> + <string name="SocialTwitterDisconnecting"> + Twitter bağlantısı kesiliyor... + </string> + <string name="SocialTwitterErrorConnecting"> + Twitter bağlantısı kurulurken sorun çıktı + </string> + <string name="SocialTwitterErrorPosting"> + Twitter'da yayınlarken sorun çıktı + </string> + <string name="SocialTwitterErrorDisconnecting"> + Twitter bağlantısı kesilirken sorun çıktı + </string> + <string name="BlackAndWhite"> + Siyah Beyaz + </string> + <string name="Colors1970"> + 70'lerin Renkleri + </string> + <string name="Intense"> + Yoğun + </string> + <string name="Newspaper"> + Gazete Baskısı + </string> + <string name="Sepia"> + Sepya + </string> + <string name="Spotlight"> + Spot Işıkları + </string> + <string name="Video"> + Video + </string> + <string name="Autocontrast"> + Otomatik Kontrast + </string> + <string name="LensFlare"> + Mercek Parlaması + </string> + <string name="Miniature"> + Minyatür + </string> + <string name="Toycamera"> + Eğlence Kamerası + </string> <string name="TooltipPerson"> Kişi </string> @@ -844,6 +952,12 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin. <string name="use_texture"> Dokuyu kullan </string> + <string name="manip_hint1"> + Fare imlecini cetvelin üzerine getirerek + </string> + <string name="manip_hint2"> + ağa uydur + </string> <string name="texture_loading"> Yükleniyor... </string> @@ -934,15 +1048,15 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin. <string name="ControlYourCamera"> Kameranızı kontrol etmek </string> + <string name="TeleportYourAgent"> + Sizi ışınlama + </string> <string name="NotConnected"> Bağlı Değil </string> <string name="AgentNameSubst"> (Siz) </string> - <string name="TeleportYourAgent"> - Sizi ışınlama - </string> <string name="JoinAnExperience"> Bir tecrübeye katıl </string> @@ -1267,8 +1381,7 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin. <string name="InventoryInboxNoItems"> Pazaryerinda satın aldıklarınız burada görünecektir. Bunları kullanmak için envanterinize sürükleyebilirsiniz. </string> - <string name="Unconstrained">Kısıtsız</string> - <string name="MarketplaceURL"> + <string name="MarketplaceURL"> https://marketplace.[MARKETPLACE_DOMAIN_NAME]/ </string> <string name="MarketplaceURL_CreateStore"> @@ -1297,6 +1410,18 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin. <string name="InventoryOutboxNoItems"> Bu alana klasörleri sürükleyin ve bunları [[MARKETPLACE_DASHBOARD_URL] Pazaryerinde] satılık olarak duyurmak için "Pazaryerine Gönder" üzerine tıklayın. </string> + <string name="InventoryOutboxInitializingTitle"> + Pazaryeri Başlatılıyor. + </string> + <string name="InventoryOutboxInitializing"> + [[MARKETPLACE_CREATE_STORE_URL] Mağazası] üzerindeki hesabınıza erişiyoruz. + </string> + <string name="InventoryOutboxErrorTitle"> + Pazaryeri Hataları + </string> + <string name="InventoryOutboxError"> + [[MARKETPLACE_CREATE_STORE_URL] Mağazası] hata döndürüyor. + </string> <string name="Marketplace Error None"> Hata yok </string> @@ -1324,6 +1449,9 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin. <string name="Open landmarks"> Açık yer imleri </string> + <string name="Unconstrained"> + Kısıtsız + </string> <string name="no_transfer" value="(aktarım yok)"/> <string name="no_modify" value="(değiştirme yok)"/> <string name="no_copy" value="(kopya yok)"/> @@ -1724,6 +1852,9 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin. <string name="CompileQueueDownloadedCompiling"> Karşıdan yüklendi, şimdi derleniyor </string> + <string name="CompileQueueServiceUnavailable"> + Komut dosyası derleme hizmeti kullanılamıyor + </string> <string name="CompileQueueScriptNotFound"> Komut dosyası sunucuda bulunamadı. </string> @@ -4024,6 +4155,12 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun. <string name="share_alert"> Envanterinizden buraya öğeler sürükleyin </string> + <string name="flickr_post_success"> + Flickr'da yayınladınız. + </string> + <string name="twitter_post_success"> + Twitter'da yayınladınız. + </string> <string name="no_session_message"> (Aİ Oturumu Mevcut Değil) </string> @@ -4478,6 +4615,9 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun. <string name="LocalEstimateUSD"> US$ [AMOUNT] </string> + <string name="Group Ban"> + Gruptan Yasakla + </string> <string name="Membership"> Üyelik </string> @@ -4912,6 +5052,12 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin. <string name="Command_Destinations_Label"> Hedef Konum </string> + <string name="Command_Facebook_Label"> + Facebook + </string> + <string name="Command_Flickr_Label"> + Flickr + </string> <string name="Command_Gestures_Label"> Mimikler </string> @@ -4960,6 +5106,9 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin. <string name="Command_Speak_Label"> Konuş </string> + <string name="Command_Twitter_Label"> + Twitter + </string> <string name="Command_View_Label"> Kamera denetimleri </string> @@ -4990,6 +5139,12 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin. <string name="Command_Destinations_Tooltip"> İlgilendiğiniz hedef konumlar </string> + <string name="Command_Facebook_Tooltip"> + Facebook'ta Yayınla + </string> + <string name="Command_Flickr_Tooltip"> + Flickr'a yükle + </string> <string name="Command_Gestures_Tooltip"> Avatarınız için mimikler </string> @@ -5038,6 +5193,9 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin. <string name="Command_Speak_Tooltip"> Mikrofonunuzu kullanarak yakındaki kişilerle konuşun </string> + <string name="Command_Twitter_Tooltip"> + Twitter + </string> <string name="Command_View_Tooltip"> Kamera açısını değiştirmek </string> diff --git a/indra/newview/skins/default/xui/zh/floater_big_preview.xml b/indra/newview/skins/default/xui/zh/floater_big_preview.xml new file mode 100644 index 0000000000..ae68cd7ddf --- /dev/null +++ b/indra/newview/skins/default/xui/zh/floater_big_preview.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_big_preview" title="預覽"/> diff --git a/indra/newview/skins/default/xui/zh/floater_facebook.xml b/indra/newview/skins/default/xui/zh/floater_facebook.xml new file mode 100644 index 0000000000..9847db9124 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/floater_facebook.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_facebook" title="發佈到臉書"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="狀態" name="panel_facebook_status"/> + <panel label="相片" name="panel_facebook_photo"/> + <panel label="打卡" name="panel_facebook_place"/> + <panel label="朋友" name="panel_facebook_friends"/> + <panel label="帳號" name="panel_facebook_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + 錯誤 + </text> + <text name="connection_loading_text"> + 載入中… + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/zh/floater_flickr.xml b/indra/newview/skins/default/xui/zh/floater_flickr.xml new file mode 100644 index 0000000000..b02d02c7bb --- /dev/null +++ b/indra/newview/skins/default/xui/zh/floater_flickr.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_flickr" title="上傳到 FLICKR"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="相片" name="panel_flickr_photo"/> + <panel label="帳號" name="panel_flickr_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + 錯誤 + </text> + <text name="connection_loading_text"> + 載入中… + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/zh/floater_lagmeter.xml b/indra/newview/skins/default/xui/zh/floater_lagmeter.xml new file mode 100644 index 0000000000..6e58e7332f --- /dev/null +++ b/indra/newview/skins/default/xui/zh/floater_lagmeter.xml @@ -0,0 +1,151 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_lagmeter" title="LAG 測量器"> + <floater.string name="max_title_msg"> + Lag 測量器 + </floater.string> + <floater.string name="max_width_px"> + 360 + </floater.string> + <floater.string name="min_title_msg"> + Lag + </floater.string> + <floater.string name="min_width_px"> + 90 + </floater.string> + <floater.string name="client_text_msg"> + 客戶端 + </floater.string> + <floater.string name="client_frame_rate_critical_fps"> + 10 + </floater.string> + <floater.string name="client_frame_rate_warning_fps"> + 15 + </floater.string> + <floater.string name="client_frame_time_window_bg_msg"> + Normal, window in background + </floater.string> + <floater.string name="client_frame_time_critical_msg"> + Client frame rate below [CLIENT_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="client_frame_time_warning_msg"> + Client frame rate between [CLIENT_FRAME_RATE_CRITICAL] and [CLIENT_FRAME_RATE_WARNING] + </floater.string> + <floater.string name="client_frame_time_normal_msg"> + 正常 + </floater.string> + <floater.string name="client_draw_distance_cause_msg"> + Possible cause: Draw distance set too high + </floater.string> + <floater.string name="client_texture_loading_cause_msg"> + Possible cause: Images loading + </floater.string> + <floater.string name="client_texture_memory_cause_msg"> + Possible cause: Too many images in memory + </floater.string> + <floater.string name="client_complex_objects_cause_msg"> + Possible cause: Too many complex objects in scene + </floater.string> + <floater.string name="network_text_msg"> + 網路 + </floater.string> + <floater.string name="network_packet_loss_critical_pct"> + 10 + </floater.string> + <floater.string name="network_packet_loss_warning_pct"> + 5 + </floater.string> + <floater.string name="network_packet_loss_critical_msg"> + Connection is dropping over [NETWORK_PACKET_LOSS_CRITICAL]% of packets + </floater.string> + <floater.string name="network_packet_loss_warning_msg"> + Connection is dropping [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% of packets + </floater.string> + <floater.string name="network_performance_normal_msg"> + 正常 + </floater.string> + <floater.string name="network_ping_critical_ms"> + 600 + </floater.string> + <floater.string name="network_ping_warning_ms"> + 300 + </floater.string> + <floater.string name="network_ping_critical_msg"> + Connection ping time is over [NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_ping_warning_msg"> + Connection ping time is [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms + </floater.string> + <floater.string name="network_packet_loss_cause_msg"> + Possible bad connection or 'Bandwidth' pref too high. + </floater.string> + <floater.string name="network_ping_cause_msg"> + Possible bad connection or file-sharing app. + </floater.string> + <floater.string name="server_text_msg"> + 伺服器 + </floater.string> + <floater.string name="server_frame_rate_critical_fps"> + 20 + </floater.string> + <floater.string name="server_frame_rate_warning_fps"> + 30 + </floater.string> + <floater.string name="server_single_process_max_time_ms"> + 20 + </floater.string> + <floater.string name="server_frame_time_critical_msg"> + 模擬器 framerate 低於 [SERVER_FRAME_RATE_CRITICAL] + </floater.string> + <floater.string name="server_frame_time_warning_msg"> + 模擬器 framerate 介於 [SERVER_FRAME_RATE_CRITICAL] 與 [SERVER_FRAME_RATE_WARNING] 之間 + </floater.string> + <floater.string name="server_frame_time_normal_msg"> + 正常 + </floater.string> + <floater.string name="server_physics_cause_msg"> + 可能原因:太多物理物件 + </floater.string> + <floater.string name="server_scripts_cause_msg"> + 可能原因:太多腳本物件 + </floater.string> + <floater.string name="server_net_cause_msg"> + 可能原因:太多網路流量 + </floater.string> + <floater.string name="server_agent_cause_msg"> + 可能原因:地區有太多移動的人 + </floater.string> + <floater.string name="server_images_cause_msg"> + 可能原因:太多圖像計算 + </floater.string> + <floater.string name="server_generic_cause_msg"> + 可能原因:模擬器負載過重 + </floater.string> + <floater.string name="smaller_label"> + >> + </floater.string> + <floater.string name="bigger_label"> + << + </floater.string> + <button name="client_lagmeter" tool_tip="客戶端 lag 狀態"/> + <text name="client"> + 客戶端 + </text> + <text name="client_text"> + 正常 + </text> + <button name="network_lagmeter" tool_tip="網路 lag 狀態"/> + <text name="network"> + 網路 + </text> + <text name="network_text"> + 正常 + </text> + <button name="server_lagmeter" tool_tip="伺服器 lag 狀態"/> + <text name="server"> + 伺服器 + </text> + <text name="server_text"> + 正常 + </text> + <button label=">>" name="minimize" tool_tip="切換浮動視窗尺寸"/> +</floater> diff --git a/indra/newview/skins/default/xui/zh/floater_perms_default.xml b/indra/newview/skins/default/xui/zh/floater_perms_default.xml new file mode 100644 index 0000000000..78696be482 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/floater_perms_default.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="perms default" title="預設的創建權限"> + <panel label="預設的權限" name="default permissions"/> + <button label="確定" label_selected="確定" name="ok"/> + <button label="取消" label_selected="取消" name="cancel"/> +</floater> diff --git a/indra/newview/skins/default/xui/zh/floater_region_restarting.xml b/indra/newview/skins/default/xui/zh/floater_region_restarting.xml new file mode 100644 index 0000000000..afac7da203 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/floater_region_restarting.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="region_restarting" title="地區重新啟動中"> + <string name="RegionName"> + 你所在的地區([NAME])即將重新啟動。 + +如果你繼續留在這地區,你將會被登出。 + </string> + <string name="RestartSeconds"> + 重新啟動倒數秒數: +[SECONDS] + </string> + <panel name="layout_panel_1"> + <text name="region_name"> + 你所在的地區(-最長地區名-)即將重新啟動。 + +如果你繼續留在這地區,你將會被登出。 + </text> + <text name="restart_seconds"> + 重新啟動倒數秒數: + 32767 + </text> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/zh/floater_report_abuse.xml b/indra/newview/skins/default/xui/zh/floater_report_abuse.xml index 8dbc216ab5..d4b5a2f990 100755 --- a/indra/newview/skins/default/xui/zh/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/zh/floater_report_abuse.xml @@ -35,7 +35,7 @@ <combo_box.item label="年齡 > 成人居民出現在青少年專用第二人生" name="Age__Adult_resident_on_Teen_Second_Life"/> <combo_box.item label="年齡 > 未成年居民出現在青少年專用第二人生以外場所" name="Age__Underage_resident_outside_of_Teen_Second_Life"/> <combo_box.item label="攻擊 > 戰鬥沙盤 / 不安全區域" name="Assault__Combat_sandbox___unsafe_area"/> - <combo_box.item label="攻擊 > 安全區域" name="Assault__Safe_area"/> + <combo_box.item label="攻擊 > 在安全地區射擊、推擠或推撞另一名居民" name="Assault__Safe_area"/> <combo_box.item label="攻擊 > 測試武器的沙盤" name="Assault__Weapons_testing_sandbox"/> <combo_box.item label="商業 > 未送交產品或履行服務" name="Commerce__Failure_to_deliver_product_or_service"/> <combo_box.item label="揭露 > 真實世界資訊" name="Disclosure__Real_world_information"/> @@ -49,25 +49,25 @@ <combo_box.item label="詐欺 > L$" name="Fraud__L$"/> <combo_box.item label="詐欺 > 土地" name="Fraud__Land"/> <combo_box.item label="詐欺 > 層壓式推銷或連環信" name="Fraud__Pyramid_scheme_or_chain_letter"/> - <combo_box.item label="詐欺 > 美金" name="Fraud__US$"/> + <combo_box.item label="詐欺 > L$ 或美元" name="Fraud__US$"/> <combo_box.item label="騷擾 > 廣告農場 / 視覺轟炸" name="Harassment__Advert_farms___visual_spam"/> <combo_box.item label="騷擾 > 詆譭個人或群組" name="Harassment__Defaming_individuals_or_groups"/> <combo_box.item label="騷擾 > 阻撓移動" name="Harassment__Impeding_movement"/> <combo_box.item label="騷擾 > 性騷擾" name="Harassment__Sexual_harassment"/> - <combo_box.item label="騷擾 > 鼓吹 / 教唆他人違反服務條款" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> + <combo_box.item label="騷擾 > 意圖滋事的有針對性的行為" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> <combo_box.item label="騷擾 > 言語暴力" name="Harassment__Verbal_abuse"/> <combo_box.item label="不雅 > 令大多人不快的內容或行為" name="Indecency__Broadly_offensive_content_or_conduct"/> <combo_box.item label="不雅 > 冒犯人的化身名稱" name="Indecency__Inappropriate_avatar_name"/> - <combo_box.item label="不雅 > 在一般普級地區出現冒犯人的內容或行為" name="Indecency__Mature_content_in_PG_region"/> + <combo_box.item label="失當 > 對一地區的分級不恰當的的內容或行為" name="Indecency__Mature_content_in_PG_region"/> <combo_box.item label="不雅 > 在適度成人地區出現冒犯人的內容或行為" name="Indecency__Inappropriate_content_in_Mature_region"/> <combo_box.item label="侵犯智產權 > 移除內容" name="Intellectual_property_infringement_Content_Removal"/> <combo_box.item label="侵犯智產權 > 複製機器程式碼 CopyBot 或濫用權限" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/> <combo_box.item label="不容異己" name="Intolerance"/> <combo_box.item label="土地 > 不當使用沙盤資源" name="Land__Abuse_of_sandbox_resources"/> - <combo_box.item label="土地 > 侵佔 > 物件 / 材質" name="Land__Encroachment__Objects_textures"/> + <combo_box.item label="土地 > 侵佔 > 物件或材質" name="Land__Encroachment__Objects_textures"/> <combo_box.item label="土地 > 侵佔 > 粒子" name="Land__Encroachment__Particles"/> <combo_box.item label="土地 > 侵佔 > 樹種 / 植物" name="Land__Encroachment__Trees_plants"/> - <combo_box.item label="下注 / 賭博" name="Wagering_gambling"/> + <combo_box.item label="下注或賭博" name="Wagering_gambling"/> <combo_box.item label="其他" name="Other"/> </combo_box> <text name="abuser_name_title"> diff --git a/indra/newview/skins/default/xui/zh/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/zh/floater_scene_load_stats.xml new file mode 100644 index 0000000000..1a5c20abeb --- /dev/null +++ b/indra/newview/skins/default/xui/zh/floater_scene_load_stats.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Scene Load Statistics" title="場景負載統計資料"> + <button label="暫停" name="playpause"/> + <scroll_container name="statistics_scroll"> + <container_view name="statistics_view"> + <stat_view label="基本" name="basic"> + <stat_bar label="幀像素差" name="frame difference"/> + <stat_bar label="已收到UDP資料" name="bandwidth"/> + <stat_bar label="封包損失" name="packet_loss"/> + </stat_view> + <stat_view label="進階" name="advanced"> + <stat_view label="呈像" name="render"> + <stat_bar label="物件總計" name="objs"/> + <stat_bar label="新物件" name="newobjs"/> + <stat_bar label="物件快取讀取率" name="object_cache_hits"/> + </stat_view> + <stat_view label="材質" name="texture"> + <stat_bar label="快取讀取率" name="texture_cache_hits"/> + <stat_bar label="快取讀取延遲" name="texture_cache_read_latency"/> + <stat_bar label="計數" name="numimagesstat"/> + <stat_bar label="原始計數" name="numrawimagesstat"/> + </stat_view> + <stat_view label="網路" name="network"> + <stat_bar label="進入封包" name="packetsinstat"/> + <stat_bar label="出去封包" name="packetsoutstat"/> + <stat_bar label="物件" name="objectdatareceived"/> + <stat_bar label="材質" name="texturedatareceived"/> + <stat_bar label="資產" name="assetudpdatareceived"/> + <stat_bar label="層次" name="layersdatareceived"/> + <stat_bar label="實入" name="messagedatain"/> + <stat_bar label="實出" name="messagedataout"/> + <stat_bar label="VFS 待行作業" name="vfspendingoperations"/> + </stat_view> + </stat_view> + <stat_view label="模擬器" name="sim"> + <stat_bar label="物件" name="simobjects"/> + <stat_bar label="使用中物件" name="simactiveobjects"/> + <stat_bar label="使用中腳本" name="simactivescripts"/> + <stat_bar label="進入封包" name="siminpps"/> + <stat_bar label="出去封包" name="simoutpps"/> + <stat_bar label="擱置下載" name="simpendingdownloads"/> + <stat_bar label="擱置上傳" name="simpendinguploads"/> + <stat_bar label="未承認的總位元組數" name="simtotalunackedbytes"/> + <stat_view label="時間(毫秒)" name="simperf"> + <stat_bar label="總幀時間" name="simframemsec"/> + <stat_bar label="淨時間" name="simnetmsec"/> + <stat_bar label="物理時間" name="simsimphysicsmsec"/> + <stat_bar label="模擬時間" name="simsimothermsec"/> + <stat_bar label="用戶時間" name="simagentmsec"/> + <stat_bar label="圖像時間" name="simimagesmsec"/> + <stat_bar label="腳本時間" name="simscriptmsec"/> + <stat_bar label="閒置時間" name="simsparemsec"/> + <stat_view label="時間細節(毫秒)" name="timedetails"> + <stat_bar label="物理步驟" name="simsimphysicsstepmsec"/> + <stat_bar label="更新物理形狀" name="simsimphysicsshapeupdatemsec"/> + <stat_bar label="物理(其他)" name="simsimphysicsothermsec"/> + <stat_bar label="睡眠時間" name="simsleepmsec"/> + <stat_bar label="基礎網路輸出入" name="simpumpiomsec"/> + </stat_view> + </stat_view> + </stat_view> + </container_view> + </scroll_container> +</floater> diff --git a/indra/newview/skins/default/xui/zh/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/zh/floater_script_ed_prefs.xml new file mode 100644 index 0000000000..cca41cc96d --- /dev/null +++ b/indra/newview/skins/default/xui/zh/floater_script_ed_prefs.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_script_colors" title="腳本文字色彩"> + <text name="color_pickers_label"> + 選擇所要的色彩: + </text> + <text name="text_label"> + 文字 + </text> + <text name="cursor_label"> + 游標 + </text> + <text name="background_label"> + 背景 + </text> + <text name="datatype_label"> + 資料類型 + </text> + <text name="event_label"> + 活動 + </text> + <text name="string_literal_label"> + 字串常值 + </text> + <text name="constant_label"> + 常數 + </text> + <text name="flow_control_label"> + 流程控制 + </text> + <text name="function_label"> + 函式 + </text> + <text name="comment_label"> + 註解 + </text> + <script_editor name="Script Preview"> + /* 範例腳本 */ +default +{ + state_entry() + { + // 註解 + string greeting = "大家好"; + llSay(PUBLIC_CHANNEL, greeting); + } +} + </script_editor> +</floater> diff --git a/indra/newview/skins/default/xui/zh/floater_snapshot.xml b/indra/newview/skins/default/xui/zh/floater_snapshot.xml index e86e20829f..a65227bbd4 100755 --- a/indra/newview/skins/default/xui/zh/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/zh/floater_snapshot.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="快照預覽"> +<floater name="Snapshot" title="快照"> <floater.string name="unknown"> 未知 </floater.string> @@ -61,5 +61,11 @@ <check_box label="擡頭顯示" name="hud_check"/> <check_box label="將幀凍結(全螢幕)" name="freeze_frame_check"/> <check_box label="自動刷新" name="auto_snapshot_check"/> + <text name="filter_list_label"> + 濾鏡: + </text> + <combo_box name="filters_combobox" tool_tip="圖像濾鏡"> + <combo_box.item label="不用濾鏡" name="NoFilter"/> + </combo_box> </panel> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_stats.xml b/indra/newview/skins/default/xui/zh/floater_stats.xml index 4af5684ec1..f06eb5e78f 100755 --- a/indra/newview/skins/default/xui/zh/floater_stats.xml +++ b/indra/newview/skins/default/xui/zh/floater_stats.xml @@ -4,17 +4,21 @@ <container_view name="statistics_view"> <stat_view label="基本" name="basic"> <stat_bar label="每秒幀數" name="fps"/> - <stat_bar label="頻寬" name="bandwidth"/> + <stat_bar label="已收到UDP資料" name="bandwidth"/> <stat_bar label="封包損失" name="packet_loss"/> <stat_bar label="探詢模擬器有無反應" name="ping"/> </stat_view> <stat_view label="進階" name="advanced"> <stat_view label="呈像" name="render"> - <stat_bar label="繪出的 KTris(每幀)" name="ktrisframe"/> - <stat_bar label="繪出的 KTris(每秒)" name="ktrissec"/> - <stat_bar label="物件總計" name="objs"/> + <stat_bar label="KTris(每幀)" name="ktrisframe"/> + <stat_bar label="KTris(每秒)" name="ktrissec"/> + <stat_bar label="物件總計" name="totalobjs"/> + <stat_bar label="存入快取的物件" name="cachedobjs"/> <stat_bar label="新物件" name="newobjs"/> <stat_bar label="物件快取讀取率" name="object_cache_hits"/> + <stat_bar label="已執行遮蔽查詢" name="occlusion_queries"/> + <stat_bar label="物件已遮蔽" name="occluded"/> + <stat_bar label="物件已解除遮蔽" name="unoccluded"/> </stat_view> <stat_view label="材質" name="texture"> <stat_bar label="快取讀取率" name="texture_cache_hits"/> @@ -26,15 +30,32 @@ <stat_bar label="原始記憶" name="rawmemstat"/> <stat_bar label="界限記憶" name="glboundmemstat"/> </stat_view> + <stat_view label="記憶體使用狀況" name="memory"> + <stat_bar label="LLTrace" name="LLTrace"/> + <stat_bar label="使用者界面" name="LLView"/> + <stat_bar label="字型" name="LLFontFreetype"/> + <stat_bar label="收納區" name="LLInventoryObject"/> + <stat_bar label="Viewer物件" name="LLViewerObject"/> + <stat_bar label="八叉樹群資料" name="LLViewerOctreeGroup"/> + <stat_bar label="八叉樹資料" name="LLViewerOctreeEntry"/> + <stat_bar label="Viewer物件快取" name="LLVOCacheEntry"/> + <stat_bar label="可繪物件" name="LLDrawable"/> + <stat_bar label="臉部資料" name="LLFace"/> + <stat_bar label="描繪資訊" name="LLDrawInfo"/> + <stat_bar label="材質資料" name="LLTexture"/> + <stat_bar label="圖像資料" name="LLImage"/> + <stat_bar label="GL圖像資料" name="LLImageGL"/> + <stat_bar label="頂點緩衝" name="LLVertexBuffer"/> + </stat_view> <stat_view label="網路" name="network"> <stat_bar label="進入封包" name="packetsinstat"/> <stat_bar label="出去封包" name="packetsoutstat"/> - <stat_bar label="物件" name="objectkbitstat"/> - <stat_bar label="材質" name="texturekbitstat"/> - <stat_bar label="資產" name="assetkbitstat"/> - <stat_bar label="層次" name="layerskbitstat"/> - <stat_bar label="實入" name="actualinkbitstat"/> - <stat_bar label="實出" name="actualoutkbitstat"/> + <stat_bar label="物件" name="objectdatareceived"/> + <stat_bar label="材質" name="texturedatareceived"/> + <stat_bar label="資產" name="assetudpdatareceived"/> + <stat_bar label="層次" name="layersdatareceived"/> + <stat_bar label="實入" name="messagedatain"/> + <stat_bar label="實出" name="messagedataout"/> <stat_bar label="VFS 待行作業" name="vfspendingoperations"/> </stat_view> </stat_view> @@ -64,8 +85,8 @@ <stat_bar label="出去封包" name="simoutpps"/> <stat_bar label="擱置下載" name="simpendingdownloads"/> <stat_bar label="擱置上傳" name="simpendinguploads"/> - <stat_bar label="未承認的總位元組數" name="simtotalunackedbytes"/> - <stat_view label="時間(毫秒)" name="simperf"> + <stat_bar label="未承認的總資料" name="simtotalunackedbytes"/> + <stat_view label="時間" name="simperf"> <stat_bar label="總禎時間" name="simframemsec"/> <stat_bar label="淨時間" name="simnetmsec"/> <stat_bar label="物理時間" name="simsimphysicsmsec"/> @@ -74,7 +95,7 @@ <stat_bar label="圖像時間" name="simimagesmsec"/> <stat_bar label="腳本時間" name="simscriptmsec"/> <stat_bar label="閒置時間" name="simsparemsec"/> - <stat_view label="時間細節(毫秒)" name="timedetails"> + <stat_view label="時間細節" name="timedetails"> <stat_bar label="物理步驟" name="simsimphysicsstepmsec"/> <stat_bar label="更新物理形狀" name="simsimphysicsshapeupdatemsec"/> <stat_bar label="物理(其他)" name="simsimphysicsothermsec"/> diff --git a/indra/newview/skins/default/xui/zh/floater_tools.xml b/indra/newview/skins/default/xui/zh/floater_tools.xml index 7e6c972f40..175e2bf7a4 100755 --- a/indra/newview/skins/default/xui/zh/floater_tools.xml +++ b/indra/newview/skins/default/xui/zh/floater_tools.xml @@ -73,9 +73,7 @@ <check_box label="編輯聯結部分" name="checkbox edit linked parts"/> <button label="聯結" name="link_btn"/> <button label="取消聯結" name="unlink_btn"/> - <text label="同時伸展兩側" name="checkbox uniform label"> - 同時伸展兩側 - </text> + <check_box label="同時伸展兩側" name="checkbox uniform"/> <check_box initial_value="true" label="伸展材質" name="checkbox stretch textures"/> <check_box initial_value="true" label="Snap" name="checkbox snap to grid"/> <combo_box name="combobox grid mode" tool_tip="選擇物件定位參考的格線尺度類型"> @@ -410,82 +408,7 @@ <spinner label="密度(100 公斤 / 立方公尺)" name="Physics Density"/> <spinner label="恢復" name="Physics Restitution"/> </panel> - <panel label="材質" name="Texture"> - <panel.string name="string repeats per meter"> - 每公尺重覆次數 - </panel.string> - <panel.string name="string repeats per face"> - 每一面重覆次數 - </panel.string> - <texture_picker label="材質" name="texture control" tool_tip="點按以挑選圖片"/> - <color_swatch label="顏色" name="colorswatch" tool_tip="點按以開啟顏色挑選器"/> - <text name="color trans"> - 透明度 % - </text> - <text name="glow label"> - 光暈 - </text> - <check_box label="全亮" name="checkbox fullbright"/> - <text name="tex gen"> - 映射方式 - </text> - <combo_box name="combobox texgen"> - <combo_box.item label="預設" name="Default"/> - <combo_box.item label="平面" name="Planar"/> - </combo_box> - <text name="label shininess"> - 光澤 - </text> - <combo_box name="combobox shininess"> - <combo_box.item label="無" name="None"/> - <combo_box.item label="低" name="Low"/> - <combo_box.item label="中" name="Medium"/> - <combo_box.item label="高" name="High"/> - </combo_box> - <text name="label bumpiness"> - 凹凸貼圖 - </text> - <combo_box name="combobox bumpiness"> - <combo_box.item label="無" name="None"/> - <combo_box.item label="亮度" name="Brightness"/> - <combo_box.item label="暗度" name="Darkness"/> - <combo_box.item label="木紋" name="woodgrain"/> - <combo_box.item label="樹皮" name="bark"/> - <combo_box.item label="磚" name="bricks"/> - <combo_box.item label="格子" name="checker"/> - <combo_box.item label="混凝土" name="concrete"/> - <combo_box.item label="粗花磚" name="crustytile"/> - <combo_box.item label="石磚" name="cutstone"/> - <combo_box.item label="圓盤" name="discs"/> - <combo_box.item label="碎石" name="gravel"/> - <combo_box.item label="培養皿" name="petridish"/> - <combo_box.item label="側邊片" name="siding"/> - <combo_box.item label="石磚格" name="stonetile"/> - <combo_box.item label="彩色沙岩" name="stucco"/> - <combo_box.item label="吸附" name="suction"/> - <combo_box.item label="編織" name="weave"/> - </combo_box> - <spinner label="水平(U)" name="TexScaleU"/> - <check_box label="翻轉" name="checkbox flip s"/> - <spinner label="垂直(V)" name="TexScaleV"/> - <check_box label="翻轉" name="checkbox flip t"/> - <spinner label="旋轉˚" name="TexRot"/> - <button label="套用" label_selected="套用" name="button apply"/> - <text name="tex offset"> - 材質位移 - </text> - <spinner label="水平(U)" name="TexOffsetU"/> - <spinner label="垂直(V)" name="TexOffsetV"/> - <panel name="Add_Media"> - <text name="media_tex"> - 媒體 - </text> - <button name="add_media" tool_tip="添加媒體"/> - <button name="delete_media" tool_tip="刪除這個媒體材質"/> - <button name="edit_media" tool_tip="編輯這個媒體"/> - <button label="對齊" label_selected="對齊媒體" name="button align" tool_tip="對齊媒體材質(須先載入)"/> - </panel> - </panel> + <panel label="材質" name="Texture"/> <panel label="內容" name="Contents"> <button label="新腳本" label_selected="新腳本" name="button new script"/> <button label="權限" name="button permissions"/> diff --git a/indra/newview/skins/default/xui/zh/floater_twitter.xml b/indra/newview/skins/default/xui/zh/floater_twitter.xml new file mode 100644 index 0000000000..0df68ba9be --- /dev/null +++ b/indra/newview/skins/default/xui/zh/floater_twitter.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_twitter" title="推特"> + <panel name="background"> + <tab_container name="tabs"> + <panel label="編撰" name="panel_twitter_photo"/> + <panel label="帳號" name="panel_twitter_account"/> + </tab_container> + <panel name="connection_status_panel"> + <text name="connection_error_text"> + 錯誤 + </text> + <text name="connection_loading_text"> + 載入中… + </text> + </panel> + </panel> +</floater> diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml b/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml index ef0986a13b..cefb395256 100755 --- a/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml @@ -2,6 +2,7 @@ <menu name="Avatar Icon Menu"> <menu_item_call label="察看檔案" name="Show Profile"/> <menu_item_call label="送出 IM..." name="Send IM"/> + <menu_item_call label="要求瞬間傳送" name="Request Teleport"/> <menu_item_call label="加為朋友..." name="Add Friend"/> <menu_item_call label="移除朋友..." name="Remove Friend"/> </menu> diff --git a/indra/newview/skins/default/xui/zh/menu_conversation.xml b/indra/newview/skins/default/xui/zh/menu_conversation.xml index adfeefc337..04538dfdee 100644 --- a/indra/newview/skins/default/xui/zh/menu_conversation.xml +++ b/indra/newview/skins/default/xui/zh/menu_conversation.xml @@ -29,4 +29,5 @@ <menu_item_call label="所有人消音" name="ModerateVoiceMute"/> <menu_item_call label="取消所有人的消音" name="ModerateVoiceUnmute"/> </context_menu> + <menu_item_call label="封鎖居民" name="BanMember"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_inventory.xml b/indra/newview/skins/default/xui/zh/menu_inventory.xml index 7f745ffaa7..478f987035 100755 --- a/indra/newview/skins/default/xui/zh/menu_inventory.xml +++ b/indra/newview/skins/default/xui/zh/menu_inventory.xml @@ -70,6 +70,7 @@ <menu_item_call label="播放" name="Sound Play"/> <menu_item_call label="覆製 SLurl" name="url_copy"/> <menu_item_call label="添加地標" name="About Landmark"/> + <menu_item_call label="顯示在地圖上" name="show_on_map"/> <menu_item_call label="在虛擬世界播放" name="Animation Play"/> <menu_item_call label="在本地播放" name="Animation Audition"/> <menu_item_call label="送出即時訊息" name="Send Instant Message"/> diff --git a/indra/newview/skins/default/xui/zh/menu_login.xml b/indra/newview/skins/default/xui/zh/menu_login.xml index 1d3d771efb..4a1e2f4364 100755 --- a/indra/newview/skins/default/xui/zh/menu_login.xml +++ b/indra/newview/skins/default/xui/zh/menu_login.xml @@ -5,7 +5,15 @@ <menu_item_call label="退出 [APP_NAME]" name="Quit"/> </menu> <menu label="幫助" name="Help"> - <menu_item_call label="[SECOND_LIFE] 幫助" name="Second Life Help"/> + <menu_item_call label="簡易教學…" name="How To"/> + <menu_item_call label="快速上手" name="Quickstart"/> + <menu_item_call label="知識庫" name="Knowledge Base"/> + <menu_item_call label="維基" name="Wiki"/> + <menu_item_call label="社群論壇" name="Community Forums"/> + <menu_item_call label="支援入口" name="Support portal"/> + <menu_item_call label="[SECOND_LIFE] 最新消息" name="Second Life News"/> + <menu_item_call label="[SECOND_LIFE] 部落格" name="Second Life Blogs"/> + <menu_item_call label="回報錯誤" name="Report Bug"/> <menu_item_call label="關於 [APP_NAME]" name="About Second Life"/> </menu> <menu_item_check label="顯示除錯選單" name="Show Debug Menu"/> diff --git a/indra/newview/skins/default/xui/zh/menu_object.xml b/indra/newview/skins/default/xui/zh/menu_object.xml index f6657d876e..4e4e55e6f4 100755 --- a/indra/newview/skins/default/xui/zh/menu_object.xml +++ b/indra/newview/skins/default/xui/zh/menu_object.xml @@ -19,6 +19,7 @@ <context_menu label="管理" name="Remove"> <menu_item_call label="違規舉報" name="Report Abuse..."/> <menu_item_call label="封鎖" name="Object Mute"/> + <menu_item_call label="解除封鎖" name="Object Unmute"/> <menu_item_call label="退回" name="Return..."/> </context_menu> <menu_item_call label="取得" name="Pie Object Take"/> diff --git a/indra/newview/skins/default/xui/zh/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/zh/menu_teleport_history_item.xml index c636e108ad..bf60983896 100755 --- a/indra/newview/skins/default/xui/zh/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/zh/menu_teleport_history_item.xml @@ -2,5 +2,5 @@ <context_menu name="Teleport History Item Context Menu"> <menu_item_call label="瞬間傳送" name="Teleport"/> <menu_item_call label="更多資訊" name="More Information"/> - <menu_item_call label="覆製到剪貼簿" name="CopyToClipboard"/> + <menu_item_call label="覆製 SLurl" name="CopyToClipboard"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml index b267bda2bb..46d46e901c 100755 --- a/indra/newview/skins/default/xui/zh/menu_viewer.xml +++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml @@ -34,6 +34,9 @@ <menu_item_check label="附近的聊天……" name="Nearby Chat"/> <menu_item_check label="說話" name="Speak"/> <menu_item_check label="交談記錄…" name="Conversation Log..."/> + <menu_item_call label="臉書…" name="Facebook"/> + <menu_item_call label="推特…" name="Twitter"/> + <menu_item_call label="Flickr…" name="Flickr"/> <menu label="語音變聲" name="VoiceMorphing"> <menu_item_check label="沒有變聲效果" name="NoVoiceMorphing"/> <menu_item_check label="預覽……" name="Preview"/> @@ -70,11 +73,11 @@ <menu_item_check label="進階選單" name="Show Advanced Menu"/> </menu> <menu label="太陽" name="Sun"> - <menu_item_call label="日出" name="Sunrise"/> - <menu_item_call label="中午" name="Noon"/> - <menu_item_call label="日落" name="Sunset"/> - <menu_item_call label="午夜" name="Midnight"/> - <menu_item_call label="使用地區設定" name="Use Region Settings"/> + <menu_item_check label="日出" name="Sunrise"/> + <menu_item_check label="中午" name="Noon"/> + <menu_item_check label="日落" name="Sunset"/> + <menu_item_check label="午夜" name="Midnight"/> + <menu_item_check label="使用地區設定" name="Use Region Settings"/> </menu> <menu label="環境編輯器" name="Environment Editor"> <menu_item_call label="環境設定…" name="Environment Settings"/> @@ -148,7 +151,8 @@ <menu_item_check label="貼齊格線" name="Snap to Grid"/> <menu_item_call label="貼齊物件 XY 軸到格線" name="Snap Object XY to Grid"/> <menu_item_call label="以所選擇作為格線" name="Use Selection for Grid"/> - <menu_item_call label="格線選項" name="Grid Options"/> + <menu_item_call label="格線選項…" name="Grid Options"/> + <menu_item_call label="設定預設權限…" name="Set default permissions"/> </menu> <menu label="上傳" name="Upload"> <menu_item_call label="圖像(L$[COST])..." name="Upload Image"/> @@ -156,15 +160,12 @@ <menu_item_call label="動作(L$[COST])..." name="Upload Animation"/> <menu_item_call label="模型…" name="Upload Model"/> <menu_item_call label="批量(每檔案 L$[COST] )..." name="Bulk Upload"/> - <menu_item_call label="設定預設上傳權限" name="perm prefs"/> </menu> <menu_item_call label="復原" name="Undo"/> <menu_item_call label="重做" name="Redo"/> </menu> <menu label="幫助" name="Help"> <menu_item_call label="簡易教學…" name="How To"/> - <menu_item_call label="[SECOND_LIFE] 幫助" name="Second Life Help"/> - <menu_item_call label="使用者指南" name="User’s guide"/> <menu_item_call label="知識庫" name="Knowledge Base"/> <menu_item_call label="維基" name="Wiki"/> <menu_item_call label="社群論壇" name="Community Forums"/> @@ -186,6 +187,7 @@ <menu label="效能工具" name="Performance Tools"> <menu_item_call label="Lag 測量器" name="Lag Meter"/> <menu_item_check label="統計列" name="Statistics Bar"/> + <menu_item_call label="場景負載統計資料" name="Scene Load Statistics"/> <menu_item_check label="顯示化身的繪製重量" name="Avatar Rendering Cost"/> </menu> <menu label="高亮顯示與可見度" name="Highlighting and Visibility"> @@ -248,6 +250,7 @@ <menu_item_check label="快速碼錶" name="Fast Timers"/> <menu_item_check label="記憶體" name="Memory"/> <menu_item_check label="場景統計資料" name="Scene Statistics"/> + <menu_item_check label="場景載入監控器" name="Scene Loading Monitor"/> <menu_item_call label="材質擷取除錯控制台" name="Texture Fetch Debug Console"/> <menu_item_call label="地區資訊傳至除錯控制台" name="Region Info to Debug Console"/> <menu_item_call label="群組資訊至除錯控制台" name="Group Info to Debug Console"/> @@ -284,6 +287,7 @@ <menu_item_check label="定期出現慢幀率" name="Periodic Slow Frame"/> <menu_item_check label="畫面測試" name="Frame Test"/> <menu_item_call label="幀特性" name="Frame Profile"/> + <menu_item_call label="標竿測試" name="Benchmark"/> </menu> <menu label="呈像的元資料" name="Render Metadata"> <menu_item_check label="外框箱" name="Bounding Boxes"/> @@ -301,7 +305,9 @@ <menu_item_check label="細節層次資訊" name="LOD Info"/> <menu_item_check label="建製佇列" name="Build Queue"/> <menu_item_check label="燈光" name="Lights"/> + <menu_item_check label="粒子效果" name="Particles"/> <menu_item_check label="碰撞骨架" name="Collision Skeleton"/> + <menu_item_check label="接點" name="Joints"/> <menu_item_check label="光線投射" name="Raycast"/> <menu_item_check label="風力向量" name="Wind Vectors"/> <menu_item_check label="繪出複雜度" name="rendercomplexity"/> @@ -334,6 +340,7 @@ <menu_item_check label="使附著燈光呈像" name="Render Attached Lights"/> <menu_item_check label="使附著例子效果呈像" name="Render Attached Particles"/> <menu_item_check label="停懸發光物件" name="Hover Glow Objects"/> + <menu_item_call label="立即清除快取" name="Cache Clear"/> </menu> <menu label="網路" name="Network"> <menu_item_check label="暫停用戶" name="AgentPause"/> @@ -366,7 +373,6 @@ <menu_item_call label="傾印焦點容器" name="Dump Focus Holder"/> <menu_item_call label="列印所選物件資訊" name="Print Selected Object Info"/> <menu_item_call label="列印用戶資訊" name="Print Agent Info"/> - <menu_item_check label="地區除錯控制台" name="Region Debug Console"/> <menu_item_check label="除錯 SelectMgr" name="Debug SelectMgr"/> <menu_item_check label="除錯點按動作" name="Debug Clicks"/> <menu_item_check label="視角除錯" name="Debug Views"/> diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml index 864f20fc15..bd05725e2b 100755 --- a/indra/newview/skins/default/xui/zh/notifications.xml +++ b/indra/newview/skins/default/xui/zh/notifications.xml @@ -114,15 +114,15 @@ <usetemplate name="okbutton" yestext="確定"/> </notification> <notification name="OutboxImportFailed"> - 轉移失敗 + 傳送失敗,錯誤碼 '[ERROR_CODE]' 未將任何資料夾送往第二人生購物市集,系統或網路出錯。 請稍候再試一次。 <usetemplate name="okbutton" yestext="確定"/> </notification> <notification name="OutboxInitFailed"> - 第二人生購物市集初始化失敗 + 購物市集初始化失敗,錯誤碼 '[ERROR_CODE]' -第二人生購物市集初始化失敗,系統或網路出錯。 請稍候再試一次。 +購物市集初始化失敗,系統或網路出錯。 請稍候再試一次。 <usetemplate name="okbutton" yestext="確定"/> </notification> <notification name="CompileQueueSaveText"> @@ -210,6 +210,22 @@ 你仍要新增這項能力給「[ROLE_NAME]」? <usetemplate name="okcancelbuttons" notext="否" yestext="是"/> </notification> + <notification name="AssignBanAbilityWarning"> + 你即將把「[ACTION_NAME]」能力增加給「[ROLE_NAME]」角色。 + + *警告* +任何擔任帶有此能力的角色的成員,將連帶得到「[ACTION_NAME_2]」和「[ACTION_NAME_3]」能力。 + <usetemplate name="okbutton" yestext="確定"/> + </notification> + <notification name="RemoveBanAbilityWarning"> + 你即將剝除「[ROLE_NAME]」角色的「[ACTION_NAME]」能力。 + + *警告* +剝除這個能力,將不連帶剝除「[ACTION_NAME_2]」和「[ACTION_NAME_3]」能力。 + +如果你不希望讓這個角色繼續擁有這些能力,請立即取消它們! + <usetemplate name="okbutton" yestext="確定"/> + </notification> <notification name="EjectGroupMemberWarning"> 你即將把 [AVATAR_NAME] 踢出群組。 <usetemplate ignoretext="確定將某人踢出群組" name="okcancelignore" notext="取消" yestext="踢出"/> @@ -1569,6 +1585,14 @@ SHA1 指紋:[MD5_DIGEST] 無法離開群組。 你是此群組僅存的所有人,不得離開群組。 請先把所有人職銜指派給另一人。 <usetemplate name="okbutton" yestext="確定"/> </notification> + <notification name="GroupDepartError"> + 無法離開群組:[reason]。 + <usetemplate name="okbutton" yestext="確定"/> + </notification> + <notification name="GroupDepart"> + 你已經離開[group_name]群組。 + <usetemplate name="okbutton" yestext="確定"/> + </notification> <notification name="ConfirmKick"> 你確定要踢出這網格內的全部居民? <usetemplate name="okcancelbuttons" notext="取消" yestext="踢出全部居民"/> @@ -1722,6 +1746,10 @@ SHA1 指紋:[MD5_DIGEST] 你確定要瞬間傳送到<nolink>[LOCATION]</nolink>? <usetemplate ignoretext="確認我要瞬間傳送到某個地標" name="okcancelignore" notext="取消" yestext="瞬間傳送"/> </notification> + <notification name="TeleportViaSLAPP"> + 你確定要瞬間傳送到<nolink>[LOCATION]</nolink>? + <usetemplate ignoretext="確認我要透過SLAPP瞬間傳送" name="okcancelignore" notext="取消" yestext="瞬間傳送"/> + </notification> <notification name="TeleportToPick"> 瞬間傳送到 [PICK]? <usetemplate ignoretext="確認我要瞬間傳送到精選地點的所在位置" name="okcancelignore" notext="取消" yestext="瞬間傳送"/> @@ -1931,6 +1959,9 @@ SHA1 指紋:[MD5_DIGEST] <notification name="ProblemAddingEstateManager"> 新增領地管理人時出問題。 其中一個領地的管理人清單可能已經額滿。 </notification> + <notification name="ProblemAddingEstateBanManager"> + 無法把領地所有人或管理員加入領地的封鎖名單中。 + </notification> <notification name="ProblemAddingEstateGeneric"> 新增到這個領地清單時出問題。 其中一個領地的清單可能已滿。 </notification> @@ -2443,6 +2474,12 @@ SHA1 指紋:[MD5_DIGEST] <notification name="SystemMessage"> [MESSAGE] </notification> + <notification name="FlickrConnect"> + [MESSAGE] + </notification> + <notification name="TwitterConnect"> + [MESSAGE] + </notification> <notification name="PaymentReceived"> [MESSAGE] </notification> @@ -3019,7 +3056,7 @@ SHA1 指紋:[MD5_DIGEST] 居民: -[RESIDENTS] +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="取消" yestext="確定"/> </notification> <notification name="ShareFolderConfirmation"> @@ -3031,7 +3068,7 @@ SHA1 指紋:[MD5_DIGEST] 居民: -[RESIDENTS] +<nolink>[RESIDENTS]</nolink> <usetemplate name="okcancelbuttons" notext="取消" yestext="確定"/> </notification> <notification name="ItemsShared"> @@ -3487,10 +3524,6 @@ SHA1 指紋:[MD5_DIGEST] <notification name="EjectComingSoon"> 你不再允許待在這裡,必須在 [EJECT_TIME] 秒內離開。 </notification> - <notification name="NoEnterServerFull"> - 你無法進入這地區,因為 -伺服器滿載。 - </notification> <notification name="SaveBackToInvDisabled"> 「儲存回收納區」功能已被停用。 </notification> @@ -3680,6 +3713,9 @@ SHA1 指紋:[MD5_DIGEST] <notification name="LinkFailedTooMuchPhysics"> 物件使用了過多物理資源,其動態特性已被停用。 </notification> + <notification name="EstateManagerFailedllTeleportHome"> + 位於[SLURL]的物件'[OBJECT_NAME]'無法將領地管理員瞬間傳送回家。 + </notification> <notification name="TeleportedHomeByObjectOnParcel"> 你已被 '[PARCEL_NAME]' 地段的物件 '[OBJECT_NAME]' 成功瞬間傳送回家 </notification> @@ -3870,13 +3906,18 @@ SHA1 指紋:[MD5_DIGEST] 未選取足夠租用地段,無法合併。 </notification> <notification name="CantDivideLandMultipleParcelsSelected"> - 無法分割土地,\n因為你選取了多個地段,\n請縮小所選土地。 + 無法分割土地。 +選取了超過一個地段。 +請試著縮小所選的土地。 </notification> <notification name="CantDivideLandCantFindParcel"> - 無法分割土地。\n找不到地段。\n請到「幫助 > 回報錯誤……」回報問題 + 無法分割土地。 +找不到地段。 +請到「幫助->回報錯誤」回報問題 </notification> <notification name="CantDivideLandWholeParcelSelected"> - 無法分割土地。 選取了整個地段。\n請試著縮小所選的土地。 + 無法分割土地。 選擇了整個地段。 +請試著縮小所選的土地。 </notification> <notification name="LandHasBeenDivided"> 土地分割成功。 @@ -4016,4 +4057,12 @@ SHA1 指紋:[MD5_DIGEST] 無法移動檔案。 已恢復前一個路徑。 <usetemplate ignoretext="無法移動檔案。 已恢復前一個路徑。" name="okignore" yestext="確定"/> </notification> + <notification name="DefaultObjectPermissions"> + 儲存預設權限時出問題,原因:[REASON]。 請稍後再嘗試儲存預設權限。 + <usetemplate name="okbutton" yestext="確定"/> + </notification> + <notification name="ChatHistoryIsBusyAlert"> + 聊天紀錄檔案還在處理前一個動作。 請稍候再試,或請換一個聊天對象。 + <usetemplate name="okbutton" yestext="確定"/> + </notification> </notifications> diff --git a/indra/newview/skins/default/xui/zh/panel_facebook_account.xml b/indra/newview/skins/default/xui/zh/panel_facebook_account.xml new file mode 100644 index 0000000000..e8c31c69c5 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_facebook_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_account"> + <string name="facebook_connected" value="已成功連通臉書,身分為:"/> + <string name="facebook_disconnected" value="未連通臉書"/> + <text name="account_caption_label"> + 未連通臉書。 + </text> + <panel name="panel_buttons"> + <button label="連通…" name="connect_btn"/> + <button label="中斷" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 如何發佈到臉書] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_facebook_friends.xml b/indra/newview/skins/default/xui/zh/panel_facebook_friends.xml new file mode 100644 index 0000000000..2cf3eb0cf5 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_facebook_friends.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_friends"> + <string name="facebook_friends_empty" value="你的臉書朋友中,沒有同時也是第二人生居民的人。 今天就請你的臉書朋友加入第二人生!"/> + <string name="facebook_friends_no_connected" value="你目前尚未連結臉書。 請到「帳戶」頁籤開啟這項功能並進行連結。"/> + <accordion name="friends_accordion"> + <accordion_tab name="tab_second_life_friends" title="第二人生的朋友"/> + <accordion_tab name="tab_suggested_friends" title="把這些人加為第二人生的朋友"/> + </accordion> + <text name="facebook_friends_status"> + 未連通臉書。 + </text> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_facebook_photo.xml b/indra/newview/skins/default/xui/zh/panel_facebook_photo.xml new file mode 100644 index 0000000000..d43fcf4665 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_facebook_photo.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="圖像解析度"> + <combo_box.item label="目前視窗" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1200x630" name="1200x630"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="圖像濾鏡"> + <combo_box.item label="不用濾鏡" name="NoFilter"/> + </combo_box> + <button label="重新整理" name="new_snapshot_btn" tool_tip="點按即可刷新"/> + <button label="預覽" name="big_preview_btn" tool_tip="點按即可切換預覽"/> + <text name="caption_label"> + 說明(可留空): + </text> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="發佈" name="post_photo_btn"/> + <button label="取消" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_facebook_place.xml b/indra/newview/skins/default/xui/zh/panel_facebook_place.xml new file mode 100644 index 0000000000..27bd789af1 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_facebook_place.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_place"> + <layout_stack name="stack_place"> + <layout_panel name="place_detail_panel"> + <text name="place_caption_label"> + 描述一下你所在的地方: + </text> + </layout_panel> + <layout_panel name="place_map_panel"> + <check_box initial_value="false" label="" name="add_place_view_cb"/> + </layout_panel> + <layout_panel name="place_button_panel"> + <button label="發佈" name="post_place_btn"/> + <button label="取消" name="cancel_place_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_facebook_status.xml b/indra/newview/skins/default/xui/zh/panel_facebook_status.xml new file mode 100644 index 0000000000..b947b49a4f --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_facebook_status.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_facebook_status"> + <layout_stack name="stack_status"> + <layout_panel name="status_detail_panel"> + <text name="status_caption_label"> + 你在想些什麼? + </text> + </layout_panel> + <layout_panel name="status_button_panel"> + <button label="發佈" name="post_status_btn"/> + <button label="取消" name="cancel_status_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_flickr_account.xml b/indra/newview/skins/default/xui/zh/panel_flickr_account.xml new file mode 100644 index 0000000000..63cd547cd0 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_flickr_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_account"> + <string name="flickr_connected" value="你已成功連通 Flickr,身分為:"/> + <string name="flickr_disconnected" value="尚未連通 Flickr"/> + <text name="account_caption_label"> + 尚未連通 Flickr。 + </text> + <panel name="panel_buttons"> + <button label="連通…" name="connect_btn"/> + <button label="中斷" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share/ta-p/2435609 瞭解如何發佈到 Flickr] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_flickr_photo.xml b/indra/newview/skins/default/xui/zh/panel_flickr_photo.xml new file mode 100644 index 0000000000..75738abebc --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_flickr_photo.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_flickr_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="圖像解析度"> + <combo_box.item label="目前視窗" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="圖像濾鏡"> + <combo_box.item label="不用濾鏡" name="NoFilter"/> + </combo_box> + <button label="刷新" name="new_snapshot_btn" tool_tip="點按即可刷新"/> + <button label="預覽" name="big_preview_btn" tool_tip="點按即可切換預覽"/> + <text name="title_label"> + 標題: + </text> + <text name="description_label"> + 描述: + </text> + <check_box initial_value="true" label="在描述結尾加上第二人生的地點" name="add_location_cb"/> + <text name="tags_label"> + 標籤: + </text> + <text name="tags_help_label"> + 不同標籤之間以半形空格分隔 +標籤若含空格,用 "" 半形符號括住 + </text> + <combo_box name="rating_combobox" tool_tip="Flickr 內容分級"> + <combo_box.item label="安全級 Flickr 內容" name="SafeRating"/> + <combo_box.item label="適中級 Flickr 內容" name="ModerateRating"/> + <combo_box.item label="限制級 Flickr 內容" name="RestrictedRating"/> + </combo_box> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="上傳" name="post_photo_btn"/> + <button label="取消" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_group_bulk_ban.xml b/indra/newview/skins/default/xui/zh/panel_group_bulk_ban.xml new file mode 100644 index 0000000000..dedc900939 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_group_bulk_ban.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="封鎖居民" name="bulk_ban_panel"> + <panel.string name="loading"> + (載入中...) + </panel.string> + <panel.string name="ban_selection_too_large"> + 未送出群組禁入令:所選的居民人數太多。 群組禁入令每次以 100 人為上限。 + </panel.string> + <panel.string name="ban_not_permitted"> + 群組禁入令未送出:你沒有「管理禁入清單」的能力。 + </panel.string> + <panel.string name="ban_limit_fail"> + 群組禁入令未送出:你的群組已達允許禁入數目的上限。 + </panel.string> + <panel.string name="partial_ban"> + 部分群組禁入令未送出: +[REASONS] + </panel.string> + <panel.string name="ban_failed"> + 群組禁入令未送出: +[REASONS] + </panel.string> + <panel.string name="residents_already_banned"> + - 以下居民之前已遭禁:[RESIDENTS]。 + </panel.string> + <panel.string name="ban_limit_reached"> + - 已達禁入數目上限,以下用戶未能加禁:[RESIDENTS]。 + </panel.string> + <panel.string name="cant_ban_yourself"> + - 你不能把自己設為禁入群組。 + </panel.string> + <text name="help_text"> + 你可以選擇把多位居民設為禁入群組。 點按「開啟居民選擇工具」開始選擇。 + </text> + <button label="開啟居民選擇工具" name="add_button"/> + <name_list name="banned_agent_list" tool_tip="按下 Ctrl 鍵同時點選居民的名字,即可選取多個人"/> + <button label="將所選的從名單移除" name="remove_button" tool_tip="將上面所選居民從禁入名單中移除"/> + <button label="封鎖居民" name="ban_button"/> + <button label="取消" name="cancel_button"/> + <string name="GroupBulkBan"> + 對群組設禁 + </string> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml index f979a4c53e..43e3507961 100755 --- a/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml @@ -20,7 +20,7 @@ <layout_panel name="group_accordions"> <accordion name="groups_accordion"> <accordion_tab name="group_general_tab" title="基本資料"/> - <accordion_tab name="group_roles_tab" title="角色"/> + <accordion_tab name="group_roles_tab" title="角色與成員"/> <accordion_tab name="group_notices_tab" title="通知"/> <accordion_tab name="group_land_tab" title="土地 / 資產"/> </accordion> diff --git a/indra/newview/skins/default/xui/zh/panel_group_invite.xml b/indra/newview/skins/default/xui/zh/panel_group_invite.xml index 8921978b20..250bbaab6a 100755 --- a/indra/newview/skins/default/xui/zh/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/zh/panel_group_invite.xml @@ -22,7 +22,7 @@ 選擇指派給他們的角色: </text> <combo_box name="role_name" tool_tip="從角色清單選擇你有權指派給成員的角色:"/> - <button label="送出邀請" name="ok_button"/> + <button label="送出邀請" name="invite_button"/> <button label="取消" name="cancel_button"/> <string name="GroupInvitation"> 群組邀請 diff --git a/indra/newview/skins/default/xui/zh/panel_group_roles.xml b/indra/newview/skins/default/xui/zh/panel_group_roles.xml index 59086c3de2..b4b32c204a 100755 --- a/indra/newview/skins/default/xui/zh/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/zh/panel_group_roles.xml @@ -21,15 +21,18 @@ <name_list.columns label="成員" name="name"/> <name_list.columns label="捐款" name="donated"/> <name_list.columns label="狀態" name="online"/> + <name_list.columns label="頭銜" name="title"/> </name_list> <button label="邀請" name="member_invite"/> <button label="踢出" name="member_eject"/> + <button label="禁絕成員" name="member_ban"/> </panel> <panel label="角色" name="roles_sub_tab"> <panel.string name="help_text"> - 一個角色具備職稱和該角色可使用的能力。 -一位成員可有一到多個角色。 -一個群組至多可有 10 個角色,包括「任何人」和「所有人」。 + 一個角色具備職稱和該角色可使用的能力 + 可供成員行使。 成員可以擔任 + 一或多個角色。 一個群組最多可有 10 個角色, + 包括「任何人」和「擁有人」角色。 </panel.string> <panel.string name="cant_delete_role"> 「任何人」和「所有人」是特設角色,不得刪除。 @@ -45,12 +48,27 @@ </panel> <panel label="能力" name="actions_sub_tab" tool_tip="你可察看關於某一能力的說明,並得知哪些角色和成員擁有該能力。"> <panel.string name="help_text"> - 「能力」可讓群組的成員透過角色行使一定的職權。 -能力的種類繁多。 + 能力可讓成員在這個群組裡透過角色做 + 一定的事。 能力的種類繁多。 </panel.string> <filter_editor label="能力過濾器" name="filter_input"/> <scroll_list name="action_list" tool_tip="請選取一個能力以察看詳情。"/> </panel> + <panel label="遭禁的居民" name="banlist_sub_tab" tool_tip="檢視禁入本群組的居民名單"> + <panel.string name="help_text"> + 禁入名單上的任何居民將無法加入此群組。 + </panel.string> + <panel.string name="ban_count_template"> + 禁止數目: [COUNT]/[LIMIT] + </panel.string> + <name_list name="ban_list"> + <name_list.columns label="居民" name="name"/> + <name_list.columns label="遭禁日期" name="ban_date"/> + </name_list> + <button label="禁絕成員" name="ban_create" tool_tip="禁止成員加入你的群組"/> + <button label="取消禁入" name="ban_delete" tool_tip="取消部分成員禁入你的群組"/> + <button name="ban_refresh" tool_tip="更新禁入清單"/> + </panel> </tab_container> <panel name="members_footer"> <text name="static"> diff --git a/indra/newview/skins/default/xui/zh/panel_login.xml b/indra/newview/skins/default/xui/zh/panel_login.xml index 672d9bb1a2..09a1af5cf8 100755 --- a/indra/newview/skins/default/xui/zh/panel_login.xml +++ b/indra/newview/skins/default/xui/zh/panel_login.xml @@ -1,46 +1,27 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<?xml version="1.0" encoding="utf-8"?> <panel name="panel_login"> <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php </panel.string> - <layout_stack name="login_widgets"> - <layout_panel name="login"> - <text name="log_in_text"> - 登入 - </text> - <text name="username_text"> - 使用者名稱: - </text> - <combo_box name="username_combo" tool_tip="使用者名稱是你註冊時所挑選的,像是 bobsmith12 或 Steller Sunshine"/> - <text name="password_text"> - 密碼: - </text> - </layout_panel> - <layout_panel name="start_location_panel"> - <text name="start_location_text"> - 開始地點: - </text> - <combo_box name="start_location_combo"> - <combo_box.item label="我上一次位置" name="MyLastLocation"/> - <combo_box.item label="我的家" name="MyHome"/> - <combo_box.item label="<請輸入地區名稱>" name="Typeregionname"/> - </combo_box> - </layout_panel> - <layout_panel name="links_login_panel"> - <text name="login_help"> - 登入時需要幫助? - </text> + <layout_stack name="ui_stack"> + <layout_panel name="ui_container"> + <combo_box label="使用者名稱" name="username_combo" tool_tip="使用者名稱是你註冊時所挑選的,例如 bobsmith12 或 Steller Sunshine"/> + <line_editor label="密碼" name="password_edit"/> + <check_box label="記得我" name="remember_check"/> <text name="forgot_password_text"> - 忘記你的使用者名稱或密碼? + 忘記密碼 </text> <button label="登入" name="connect_btn"/> - <check_box label="記住密碼:" name="remember_check"/> - </layout_panel> - <layout_panel name="links"> - <text name="create_account_text"> - 建立你的帳號 + <text name="At_My_Last_Location_Label"> + 到我上次去的地點 </text> - <button label="現在就開始" name="create_new_account_btn"/> + <combo_box label="我的最愛" name="start_location_combo"> + <combo_box.item label="我的家" name="MyHome"/> + </combo_box> + <button label="登入" name="connect_favorite_btn"/> + <line_editor label="鍵入一個地點" name="location_edit"/> + <button label="登入" name="connect_location_btn"/> + <combo_box label="選擇模擬世界" name="server_combo"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_login_first.xml b/indra/newview/skins/default/xui/zh/panel_login_first.xml new file mode 100644 index 0000000000..a8af615b7c --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_login_first.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_login"> + <panel.string name="forgot_password_url"> + http://secondlife.com/account/request.php + </panel.string> + <layout_stack name="logo_stack"> + <layout_panel name="parent_panel2"> + <layout_stack name="widget_stack"> + <layout_panel name="widget_container"> + <combo_box label="使用者名稱" name="username_combo" tool_tip="使用者名稱是你註冊時所挑選的,例如 bobsmith12 或 Steller Sunshine"/> + <line_editor label="密碼" name="password_edit"/> + <button label="登入" name="connect_btn"/> + <check_box label="記得我" name="remember_check"/> + <text name="forgot_password_text"> + 忘記密碼 + </text> + </layout_panel> + </layout_stack> + </layout_panel> + <layout_panel name="parent_panel3"> + <layout_stack name="images_stack"> + <layout_panel name="images_container"> + <text name="image_caption_left"> + 你在「學習島」的第一步。 找到離開的傳送門! + </text> + <text name="image_caption_right"> + 接著,到「社交島」探索,認識新的居民朋友! + </text> + </layout_panel> + </layout_stack> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/zh/panel_preferences_advanced.xml index 3a7d79e04b..170cdddb8c 100755 --- a/indra/newview/skins/default/xui/zh/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_advanced.xml @@ -28,4 +28,5 @@ <check_box label="登入時顯示網格選擇" name="show_grid_selection_check"/> <check_box label="顯示進階選單" name="show_advanced_menu_check"/> <check_box label="顯示開發選單" name="show_develop_menu_check"/> + <button label="預設的創建權限" name="default_creation_permissions"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_general.xml b/indra/newview/skins/default/xui/zh/panel_preferences_general.xml index 044edbed70..20335d82ae 100755 --- a/indra/newview/skins/default/xui/zh/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_general.xml @@ -29,14 +29,10 @@ <combo_box.item label="一般普級與適度成人" name="Desired_Mature"/> <combo_box.item label="一般普級" name="Desired_PG"/> </combo_box> - <text name="start_location_textbox"> - 開始位置: + <check_box label="登入時顯示最愛的地點" name="favorites_on_login_check"/> + <text name="favorites_check_extra_text"> + (使用此電腦的其他人也會看到) </text> - <combo_box name="start_location_combo"> - <combo_box.item label="我上一次位置" name="MyLastLocation"/> - <combo_box.item label="我的家" name="MyHome"/> - </combo_box> - <check_box initial_value="true" label="登入時顯示" name="show_location_checkbox"/> <text name="name_tags_textbox"> 名稱標籤: </text> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml index d768cacb94..aa2486e988 100755 --- a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml @@ -7,7 +7,7 @@ <text name="cache_size_label_l"> (位置、圖像、網頁、搜尋的歷史紀錄) </text> - <check_box label="顯示在搜索結果我的個人資料信息" name="online_searchresults"/> + <check_box label="將我的個人小檔案顯示在搜尋結果中" name="online_searchresults"/> <check_box label="只有我的朋友和群組知道我上線" name="online_visibility"/> <check_box label="只有我的朋友和群組可以 IM 或與我通話。" name="voice_call_friends_only_check"/> <check_box label="當通話結束時關閉麥克風" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/zh/panel_region_debug.xml b/indra/newview/skins/default/xui/zh/panel_region_debug.xml index e5d5e6eaf7..0bb59a7b14 100755 --- a/indra/newview/skins/default/xui/zh/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/zh/panel_region_debug.xml @@ -28,7 +28,8 @@ <check_box label="於這個領地內的每一個地區" name="return_estate_wide" tool_tip="退回這個領地內全部地區中標記為他的物件"/> <button label="退回" name="return_btn"/> <button label="取得最常碰撞的物件..." name="top_colliders_btn" tool_tip="條列出目前運作中最常碰撞的物件清單"/> - <button label="取得最耗能腳本..." name="top_scripts_btn" tool_tip="條列���目前運作中最耗能的腳本清單"/> <button label="地區重新啟動" name="restart_btn" tool_tip="給予兩分鐘倒數計時並重新啟動"/> + <button label="取得最耗能腳本..." name="top_scripts_btn" tool_tip="條列���目前運作中最耗能的腳本清單"/> <button label="取消重新啟動" name="cancel_restart_btn" tool_tip="取消地區重新啟動"/> + <button label="地區除錯控制台" name="region_debug_console_btn" tool_tip="開啟地區除錯控制台"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_region_general.xml b/indra/newview/skins/default/xui/zh/panel_region_general.xml index f6b2c46354..0ce3b659b2 100755 --- a/indra/newview/skins/default/xui/zh/panel_region_general.xml +++ b/indra/newview/skins/default/xui/zh/panel_region_general.xml @@ -20,12 +20,12 @@ </text> <check_box label="阻止土地變形" name="block_terraform_check"/> <check_box label="阻止飛行" name="block_fly_check"/> + <check_box label="禁止飛越地段" name="block_fly_over_check" tool_tip="將出入管制往上空擴大,一併禁止飛越地段"/> <check_box label="允許傷害" name="allow_damage_check"/> <check_box label="限制推撞" name="restrict_pushobject"/> <check_box label="允許土地轉售" name="allow_land_resell_check"/> <check_box label="允許土地 合併/分割" name="allow_parcel_changes_check"/> <check_box label="阻擋土地顯示於搜尋中" name="block_parcel_search_check" tool_tip="讓其他人可以在搜尋結果中看到這個地區與其中的地段"/> - <check_box label="允許網面物件" name="mesh_rez_enabled_check" tool_tip="允許大家在此地區產生網面物件"/> <spinner label="人數上限" name="agent_limit_spin"/> <spinner label="物件紅利" name="object_bonus_spin"/> <text label="分級" name="access_text"> diff --git a/indra/newview/skins/default/xui/zh/panel_script_ed.xml b/indra/newview/skins/default/xui/zh/panel_script_ed.xml index 198e59be7b..c64982b397 100755 --- a/indra/newview/skins/default/xui/zh/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/zh/panel_script_ed.xml @@ -24,6 +24,7 @@ <menu_item_call label="還原全部變更" name="Revert All Changes"/> <menu_item_call label="從檔案載入…" name="LoadFromFile"/> <menu_item_call label="存入檔案…" name="SaveToFile"/> + <menu_item_call label="顏色…" name="Colors"/> </menu> <menu label="編輯" name="Edit"> <menu_item_call label="復原" name="Undo"/> @@ -41,9 +42,9 @@ <menu_item_call label="關鍵字幫助..." name="Keyword Help..."/> </menu> </menu_bar> - <text_editor name="Script Editor"> + <script_editor name="Script Editor"> 載入中... - </text_editor> + </script_editor> <combo_box label="插入..." name="Insert..."/> <button label="儲存" label_selected="儲存" name="Save_btn"/> <button label="編輯..." name="Edit_btn"/> diff --git a/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml b/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml index 82c2b10d8d..43d7280373 100755 --- a/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml @@ -4,4 +4,13 @@ <button label="電郵" name="save_to_email_btn"/> <button label="儲存到我的收納區(L$[AMOUNT])" name="save_to_inventory_btn"/> <button label="儲存到電腦上" name="save_to_computer_btn"/> + <text name="send_to_facebook_textbox"> + [secondlife:/// 臉書(Facebook)] + </text> + <text name="send_to_twitter_textbox"> + [secondlife:/// 推特(Twitter)] + </text> + <text name="send_to_flickr_textbox"> + [secondlife:/// Flickr] + </text> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/zh/panel_teleport_history_item.xml index c251994906..93c02900e2 100755 --- a/indra/newview/skins/default/xui/zh/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/zh/panel_teleport_history_item.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="teleport_history_item"> <text name="region" value="..."/> + <text name="timestamp" value="..."/> <button name="profile_btn" tool_tip="顯示物品資訊"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_twitter_account.xml b/indra/newview/skins/default/xui/zh/panel_twitter_account.xml new file mode 100644 index 0000000000..a8b57d7453 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_twitter_account.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_account"> + <string name="twitter_connected" value="你已成功連通推特,身分為:"/> + <string name="twitter_disconnected" value="尚未連通推特。"/> + <text name="account_caption_label"> + 尚未連通推特。 + </text> + <panel name="panel_buttons"> + <button label="連通…" name="connect_btn"/> + <button label="中斷" name="disconnect_btn"/> + <text name="account_learn_more_label"> + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share/ta-p/2435453 瞭解如何發佈到推特] + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_twitter_photo.xml b/indra/newview/skins/default/xui/zh/panel_twitter_photo.xml new file mode 100644 index 0000000000..d015f4aa95 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_twitter_photo.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel name="panel_twitter_photo"> + <layout_stack name="stack_photo"> + <layout_panel name="text_panel"> + <text name="status_label"> + 說一說你正在做什麼 + </text> + <text name="status_counter_label"> + 140 + </text> + <check_box initial_value="true" label="加入所在位置" name="add_location_cb"/> + <check_box initial_value="true" label="附上照片" name="add_photo_cb"/> + </layout_panel> + <layout_panel name="snapshot_panel"> + <combo_box name="resolution_combobox" tool_tip="圖像解析度"> + <combo_box.item label="目前視窗" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + </combo_box> + <combo_box name="filters_combobox" tool_tip="圖像濾鏡"> + <combo_box.item label="不用濾鏡" name="NoFilter"/> + </combo_box> + <button label="刷新" name="new_snapshot_btn" tool_tip="點按即可刷新"/> + <button label="預覽" name="big_preview_btn" tool_tip="點按即可切換預覽"/> + </layout_panel> + <layout_panel name="photo_button_panel"> + <button label="發到推特" name="post_photo_btn"/> + <button label="取消" name="cancel_photo_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/zh/role_actions.xml b/indra/newview/skins/default/xui/zh/role_actions.xml index 9587981444..96f931f73f 100755 --- a/indra/newview/skins/default/xui/zh/role_actions.xml +++ b/indra/newview/skins/default/xui/zh/role_actions.xml @@ -3,6 +3,7 @@ <action_set description="這些能力包括新增或移除群組成員和允許新成員不受邀即可加入群組的等權力。" name="Membership"> <action description="邀請他人加入這個群組" longdescription="欲邀請他人加入這個群組,請按下角色欄下的成員頁籤中的「邀請」按鈕。" name="member invite" value="1"/> <action description="將會員由這個群組中踢出" longdescription="欲將成員從群組踢出,請按下角色欄下的成員頁籤中的「踢出」按鈕。 所有人可踢出任何不具所有人角色的人。 如果你不是所有人,一位成員只在他僅屬於「任何人」角色且沒有其他角色的情況下被踢出群組。 欲卸除成員的角色,你必須有「卸除成員角色」的能力。" name="member eject" value="2"/> + <action description="管理禁入清單" longdescription="允許群組成員控制是否禁止或重新允許居民加入這個群組。" name="allow ban" value="51"/> <action description="切換「免費自由加入」設定,更改「加入費」。" longdescription="切換「免費自由加入」設定,讓成員不受邀也可加入,並在基本設定欄更改「加入費」。" name="member options" value="3"/> </action_set> <action_set description="這些能力包括新增、移除、更改群組角色,新增或移除成員的角色,和為角色設定能力等權力。" name="Roles"> diff --git a/indra/newview/skins/default/xui/zh/sidepanel_inventory.xml b/indra/newview/skins/default/xui/zh/sidepanel_inventory.xml index 4034a7154f..54ea7cab22 100755 --- a/indra/newview/skins/default/xui/zh/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/zh/sidepanel_inventory.xml @@ -25,15 +25,15 @@ <panel name="button_panel"> <layout_stack name="button_panel_ls"> <layout_panel name="info_btn_lp"> - <button label="檔案" name="info_btn" tool_tip="顯示物件檔案"/> + <button label="檔案" name="info_btn" tool_tip="顯示物件簡介"/> </layout_panel> <layout_panel name="share_btn_lp"> <button label="分享" name="share_btn" tool_tip="分享一個收納區物品"/> </layout_panel> <layout_panel name="shop_btn_lp"> - <button label="購物" name="shop_btn" tool_tip="開啟 Marketplace 購物市集網頁"/> + <button label="購物" name="shop_btn" tool_tip="開啟購物市集網頁"/> <button label="穿上" name="wear_btn" tool_tip="穿上所選擇的裝扮"/> - <button label="播放" name="play_btn"/> + <button label="遊戲" name="play_btn"/> <button label="瞬間傳送" name="teleport_btn" tool_tip="瞬間傳送到所選的區域"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml index d9fa105ef4..ad2c331ee4 100755 --- a/indra/newview/skins/default/xui/zh/strings.xml +++ b/indra/newview/skins/default/xui/zh/strings.xml @@ -37,6 +37,45 @@ <string name="StartupRequireDriverUpdate"> 顯像初始化失敗。 請更新你的顯像卡驅動程式! </string> + <string name="AboutHeader"> + [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL]) +[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]] + </string> + <string name="AboutCompiler"> + 以 [COMPILER_VERSION] 版本 [COMPILER] 建置 + </string> + <string name="AboutPosition"> + 你的方位是 [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1],地區名:[REGION],主機:<nolink>[HOSTNAME]</nolink> ([HOSTIP]) +第二人生URL:<nolink>[SLURL]</nolink> +(全域坐標:[POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1]) +[SERVER_VERSION] +[SERVER_RELEASE_NOTES_URL] + </string> + <string name="AboutSystem"> + CPU:[CPU] +記憶體:[MEMORY_MB] MB +作業系統版本:[OS_VERSION] +顯示卡供應商:[GRAPHICS_CARD_VENDOR] +顯示卡:[GRAPHICS_CARD] + </string> + <string name="AboutDriver"> + Windows 顯示驅動程式版本:[GRAPHICS_DRIVER_VERSION] + </string> + <string name="AboutLibs"> + OpenGL 版本:[OPENGL_VERSION] + +libcurl 版本: [LIBCURL_VERSION] +J2C 解碼器版本: [J2C_VERSION] +音效驅動程式版本: [AUDIO_DRIVER_VERSION] +Qt Webkit 版本: [QT_WEBKIT_VERSION] +語音伺服器版本: [VOICE_VERSION] + </string> + <string name="AboutTraffic"> + 封包丟失:[PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) + </string> + <string name="ErrorFetchingServerReleaseNotesURL"> + 擷取伺服器版本說明 URL 時出錯。 + </string> <string name="ProgressRestoring"> 回存中... </string> @@ -291,6 +330,75 @@ http://secondlife.com/viewer-access-faq <string name="TestingDisconnect"> 測試瀏覽器斷線 </string> + <string name="SocialFlickrConnecting"> + 連通 Flickr 中… + </string> + <string name="SocialFlickrPosting"> + 發佈中… + </string> + <string name="SocialFlickrDisconnecting"> + Flickr 連通中斷中… + </string> + <string name="SocialFlickrErrorConnecting"> + 連通臉書時出問題 + </string> + <string name="SocialFlickrErrorPosting"> + 發佈到 Flickr 時出問題 + </string> + <string name="SocialFlickrErrorDisconnecting"> + 試圖中斷 Flickr 連通時出問題 + </string> + <string name="SocialTwitterConnecting"> + 連通推特中… + </string> + <string name="SocialTwitterPosting"> + 發佈中… + </string> + <string name="SocialTwitterDisconnecting"> + 推特連通中斷中… + </string> + <string name="SocialTwitterErrorConnecting"> + 連通推特時出問題 + </string> + <string name="SocialTwitterErrorPosting"> + 發佈到推特時出問題 + </string> + <string name="SocialTwitterErrorDisconnecting"> + 試圖中斷推特連通時出問題 + </string> + <string name="BlackAndWhite"> + 黑白 + </string> + <string name="Colors1970"> + 1970年代色調 + </string> + <string name="Intense"> + 強烈感 + </string> + <string name="Newspaper"> + 黑白報紙 + </string> + <string name="Sepia"> + 懷舊 + </string> + <string name="Spotlight"> + 聚光焦點 + </string> + <string name="Video"> + 舊影片 + </string> + <string name="Autocontrast"> + 自動對比 + </string> + <string name="LensFlare"> + 光暈 + </string> + <string name="Miniature"> + 小模型移軸特效 + </string> + <string name="Toycamera"> + 玩具相機 + </string> <string name="TooltipPerson"> 人 </string> @@ -839,6 +947,12 @@ http://secondlife.com/viewer-access-faq <string name="use_texture"> 使用材質 </string> + <string name="manip_hint1"> + 把滑鼠游標移到量尺上 + </string> + <string name="manip_hint2"> + 就可貼齊格線 + </string> <string name="texture_loading"> 載入中... </string> @@ -929,15 +1043,15 @@ http://secondlife.com/viewer-access-faq <string name="ControlYourCamera"> 控制你的攝影機 </string> + <string name="TeleportYourAgent"> + 瞬間傳送你本人 + </string> <string name="NotConnected"> 未聯接 </string> <string name="AgentNameSubst"> (你) </string> - <string name="TeleportYourAgent"> - 瞬間傳送你本人 - </string> <string name="JoinAnExperience"> 加入體驗 </string> @@ -1291,6 +1405,18 @@ http://secondlife.com/viewer-access-faq <string name="InventoryOutboxNoItems"> 將資料夾拖曳到這個區域,再點按「送往第二人生購物市集」,即可在[[MARKETPLACE_DASHBOARD_URL]第二人生購物市集]登列出售。 </string> + <string name="InventoryOutboxInitializingTitle"> + 正在初始化購物市集。 + </string> + <string name="InventoryOutboxInitializing"> + 我們正在求取你的[[MARKETPLACE_CREATE_STORE_URL] 購物市集商店]帳戶。 + </string> + <string name="InventoryOutboxErrorTitle"> + 購物市集出錯。 + </string> + <string name="InventoryOutboxError"> + [[MARKETPLACE_CREATE_STORE_URL] 購物市集商店]正傳回錯誤。 + </string> <string name="Marketplace Error None"> 零錯誤 </string> @@ -1318,6 +1444,9 @@ http://secondlife.com/viewer-access-faq <string name="Open landmarks"> 開啟地標 </string> + <string name="Unconstrained"> + 不受限 + </string> <string name="no_transfer" value="(禁止轉讓)"/> <string name="no_modify" value="(禁止修改)"/> <string name="no_copy" value="(禁止複製)"/> @@ -1718,6 +1847,9 @@ http://secondlife.com/viewer-access-faq <string name="CompileQueueDownloadedCompiling"> 已下載,正在編譯中 </string> + <string name="CompileQueueServiceUnavailable"> + 腳本編譯服務無法使用 + </string> <string name="CompileQueueScriptNotFound"> 伺服器上未發現腳本。 </string> @@ -4018,6 +4150,12 @@ http://secondlife.com/viewer-access-faq <string name="share_alert"> 將收納區物品拖曳到這裡 </string> + <string name="flickr_post_success"> + 成功發佈到 Flickr。 + </string> + <string name="twitter_post_success"> + 已成功發佈到推特。 + </string> <string name="no_session_message"> (IM 會話不存在) </string> @@ -4474,6 +4612,9 @@ http://secondlife.com/viewer-access-faq <string name="LocalEstimateUSD"> $ [AMOUNT] 美元 </string> + <string name="Group Ban"> + 對群組設禁 + </string> <string name="Membership"> 成員資格 </string> @@ -4908,6 +5049,12 @@ http://secondlife.com/viewer-access-faq <string name="Command_Destinations_Label"> 目的地 </string> + <string name="Command_Facebook_Label"> + 臉書 + </string> + <string name="Command_Flickr_Label"> + Flickr + </string> <string name="Command_Gestures_Label"> 姿勢 </string> @@ -4956,6 +5103,9 @@ http://secondlife.com/viewer-access-faq <string name="Command_Speak_Label"> 說話 </string> + <string name="Command_Twitter_Label"> + 推特 + </string> <string name="Command_View_Label"> 攝影機控制 </string> @@ -4986,6 +5136,12 @@ http://secondlife.com/viewer-access-faq <string name="Command_Destinations_Tooltip"> 你可能感興趣的目的地 </string> + <string name="Command_Facebook_Tooltip"> + 發佈到臉書 + </string> + <string name="Command_Flickr_Tooltip"> + 上傳到 Flickr + </string> <string name="Command_Gestures_Tooltip"> 你化身可用的姿勢 </string> @@ -5034,6 +5190,9 @@ http://secondlife.com/viewer-access-faq <string name="Command_Speak_Tooltip"> 用麥克風和附近人們交談 </string> + <string name="Command_Twitter_Tooltip"> + 推特 + </string> <string name="Command_View_Tooltip"> 調整攝影機角度 </string> diff --git a/indra/newview/tests/llslurl_test.cpp b/indra/newview/tests/llslurl_test.cpp index 86229ad636..2bc0d5a086 100755 --- a/indra/newview/tests/llslurl_test.cpp +++ b/indra/newview/tests/llslurl_test.cpp @@ -6,7 +6,7 @@ * * $LicenseInfo:firstyear=2009&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -31,6 +31,15 @@ #include "../llslurl.h" #include "../../llxml/llcontrol.h" #include "llsdserialize.h" + +namespace +{ + +// Should not collide with other test programs creating temp files. +static const char * const TEST_FILENAME("llslurl_test.xml"); + +} + //---------------------------------------------------------------------------- // Mock objects for the dependencies of the code we're testing @@ -143,11 +152,11 @@ namespace tut template<> template<> void slurlTestObject::test<1>() { - llofstream gridfile("grid_test.xml"); + llofstream gridfile(TEST_FILENAME); gridfile << gSampleGridFile; gridfile.close(); - LLGridManager::getInstance()->initialize("grid_test.xml"); + LLGridManager::getInstance()->initialize(TEST_FILENAME); LLGridManager::getInstance()->setGridChoice("util.agni.lindenlab.com"); @@ -260,11 +269,11 @@ namespace tut template<> template<> void slurlTestObject::test<2>() { - llofstream gridfile("grid_test.xml"); + llofstream gridfile(TEST_FILENAME); gridfile << gSampleGridFile; gridfile.close(); - LLGridManager::getInstance()->initialize("grid_test.xml"); + LLGridManager::getInstance()->initialize(TEST_FILENAME); LLSLURL slurl = LLSLURL("my.grid.com", "my region"); ensure_equals("grid/region - type", slurl.getType(), LLSLURL::LOCATION); @@ -293,11 +302,11 @@ namespace tut template<> template<> void slurlTestObject::test<3>() { - llofstream gridfile("grid_test.xml"); + llofstream gridfile(TEST_FILENAME); gridfile << gSampleGridFile; gridfile.close(); - LLGridManager::getInstance()->initialize("grid_test.xml"); + LLGridManager::getInstance()->initialize(TEST_FILENAME); LLGridManager::getInstance()->setGridChoice("my.grid.com"); LLSLURL slurl = LLSLURL("https://my.grid.com/region/my%20region/1/2/3"); diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp index 7ad7947ca4..0eb0ab6500 100755 --- a/indra/newview/tests/llviewernetwork_test.cpp +++ b/indra/newview/tests/llviewernetwork_test.cpp @@ -6,7 +6,7 @@ * * $LicenseInfo:firstyear=2009&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -31,6 +31,13 @@ #include "../../llxml/llcontrol.h" #include "llfile.h" +namespace +{ + +// Should not collide with other test programs creating temp files. +static const char * const TEST_FILENAME("llviewernetwork_test.xml"); + +} //---------------------------------------------------------------------------- // Mock objects for the dependencies of the code we're testing @@ -143,7 +150,7 @@ namespace tut { viewerNetworkTest() { - LLFile::remove("grid_test.xml"); + LLFile::remove(TEST_FILENAME); gCmdLineLoginURI.clear(); gCmdLineGridChoice.clear(); gCmdLineHelperURI.clear(); @@ -152,7 +159,7 @@ namespace tut } ~viewerNetworkTest() { - LLFile::remove("grid_test.xml"); + LLFile::remove(TEST_FILENAME); } }; @@ -170,7 +177,7 @@ namespace tut { LLGridManager *manager = LLGridManager::getInstance(); // grid file doesn't exist - manager->initialize("grid_test.xml"); + manager->initialize(TEST_FILENAME); // validate that some of the defaults are available. std::map<std::string, std::string> known_grids = manager->getKnownGrids(); ensure_equals("Known grids is a string-string map of size 2", known_grids.size(), 2); @@ -238,11 +245,11 @@ namespace tut template<> template<> void viewerNetworkTestObject::test<2>() { - llofstream gridfile("grid_test.xml"); + llofstream gridfile(TEST_FILENAME); gridfile << gSampleGridFile; gridfile.close(); - LLGridManager::getInstance()->initialize("grid_test.xml"); + LLGridManager::getInstance()->initialize(TEST_FILENAME); std::map<std::string, std::string> known_grids = LLGridManager::getInstance()->getKnownGrids(); ensure_equals("adding a grid via a grid file increases known grid size",4, known_grids.size()); @@ -369,11 +376,11 @@ namespace tut void viewerNetworkTestObject::test<7>() { // adding a grid with simply a name will populate the values. - llofstream gridfile("grid_test.xml"); + llofstream gridfile(TEST_FILENAME); gridfile << gSampleGridFile; gridfile.close(); - LLGridManager::getInstance()->initialize("grid_test.xml"); + LLGridManager::getInstance()->initialize(TEST_FILENAME); LLGridManager::getInstance()->setGridChoice("util.agni.lindenlab.com"); ensure_equals("getGridLabel", diff --git a/indra/win_updater/CMakeLists.txt b/indra/win_updater/CMakeLists.txt deleted file mode 100755 index 210486c668..0000000000 --- a/indra/win_updater/CMakeLists.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -*- cmake -*- - -project(win_updater) - -include(00-Common) -include(LLCommon) -include(Linking) - -# *HACK - override msvcrt implementation (intialized on 00-Common) to be -# statically linked for the installer this relies on vc taking the last flag on -# the command line -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") - -include_directories( - ${LLCOMMON_INCLUDE_DIRS} - ) - -set(win_updater_SOURCE_FILES updater.cpp) - -set(win_updater_HEADER_FILES CMakeLists.txt) - -set_source_files_properties(${win_updater_HEADER_FILES} - PROPERTIES HEADER_FILE_ONLY TRUE) - -list(APPEND win_updater_SOURCE_FILES ${win_updater_HEADER_FILES}) - -add_executable(windows-updater WIN32 ${win_updater_SOURCE_FILES}) - -target_link_libraries(windows-updater - wininet - user32 - gdi32 - shell32 - ) - -set_target_properties(windows-updater - PROPERTIES - LINK_FLAGS "/NODEFAULTLIB:MSVCRT" - LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;MSVCRT\"" - ) - -# The windows-updater doesn't link against anything non-system, apparently -#ll_deploy_sharedlibs_command(windows-updater) diff --git a/indra/win_updater/updater.cpp b/indra/win_updater/updater.cpp deleted file mode 100755 index aeab5a3b13..0000000000 --- a/indra/win_updater/updater.cpp +++ /dev/null @@ -1,516 +0,0 @@ -/** - * @file updater.cpp - * @brief Windows auto-updater - * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -// -// Usage: updater -url <url> -// - -// We use dangerous fopen, strtok, mbstowcs, sprintf -// which generates warnings on VC2005. -// *TODO: Switch to fopen_s, strtok_s, etc. -#define _CRT_SECURE_NO_DEPRECATE - -#include <windows.h> -#include <wininet.h> -#include <stdio.h> -#include <string> -#include <iostream> -#include <stdexcept> -#include <sstream> -#include <fstream> - -#define BUFSIZE 8192 - -int gTotalBytesRead = 0; -DWORD gTotalBytes = -1; -HWND gWindow = NULL; -WCHAR gProgress[256]; -char* gUpdateURL = NULL; - -#if _DEBUG -std::ofstream logfile; -#define DEBUG(expr) logfile << expr << std::endl -#else -#define DEBUG(expr) /**/ -#endif - -char* wchars_to_utf8chars(const WCHAR* in_chars) -{ - int tlen = 0; - const WCHAR* twc = in_chars; - while (*twc++ != 0) - { - tlen++; - } - char* outchars = new char[tlen]; - char* res = outchars; - for (int i=0; i<tlen; i++) - { - int cur_char = (int)(*in_chars++); - if (cur_char < 0x80) - { - *outchars++ = (char)cur_char; - } - else - { - *outchars++ = '?'; - } - } - *outchars = 0; - return res; -} - -class Fetcher -{ -public: - Fetcher(const std::wstring& uri) - { - // These actions are broken out as separate methods not because it - // makes the code clearer, but to avoid triggering AntiVir and - // McAfee-GW-Edition virus scanners (DEV-31680). - mInet = openInet(); - mDownload = openUrl(uri); - } - - ~Fetcher() - { - DEBUG("Calling InternetCloseHandle"); - InternetCloseHandle(mDownload); - InternetCloseHandle(mInet); - } - - unsigned long read(char* buffer, size_t bufflen) const; - - DWORD getTotalBytes() const - { - DWORD totalBytes; - DWORD sizeof_total_bytes = sizeof(totalBytes); - HttpQueryInfo(mDownload, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, - &totalBytes, &sizeof_total_bytes, NULL); - return totalBytes; - } - - struct InetError: public std::runtime_error - { - InetError(const std::string& what): std::runtime_error(what) {} - }; - -private: - // We test results from a number of different MS functions with different - // return types -- but the common characteristic is that 0 (i.e. (! result)) - // means an error of some kind. - template <typename RESULT> - static RESULT check(const std::string& desc, RESULT result) - { - if (result) - { - // success, show caller - return result; - } - DWORD err = GetLastError(); - std::ostringstream out; - out << desc << " Failed: " << err; - DEBUG(out.str()); - throw InetError(out.str()); - } - - HINTERNET openUrl(const std::wstring& uri) const; - HINTERNET openInet() const; - - HINTERNET mInet, mDownload; -}; - -HINTERNET Fetcher::openInet() const -{ - DEBUG("Calling InternetOpen"); - // Init wininet subsystem - return check("InternetOpen", - InternetOpen(L"LindenUpdater", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0)); -} - -HINTERNET Fetcher::openUrl(const std::wstring& uri) const -{ - DEBUG("Calling InternetOpenUrl: " << wchars_to_utf8chars(uri.c_str())); - return check("InternetOpenUrl", - InternetOpenUrl(mInet, uri.c_str(), NULL, 0, INTERNET_FLAG_NEED_FILE, NULL)); -} - -unsigned long Fetcher::read(char* buffer, size_t bufflen) const -{ - unsigned long bytes_read = 0; - DEBUG("Calling InternetReadFile"); - check("InternetReadFile", - InternetReadFile(mDownload, buffer, bufflen, &bytes_read)); - return bytes_read; -} - -int WINAPI get_url_into_file(const std::wstring& uri, const std::string& path, int *cancelled) -{ - int success = FALSE; - *cancelled = FALSE; - - DEBUG("Opening '" << path << "'"); - - FILE* fp = fopen(path.c_str(), "wb"); /* Flawfinder: ignore */ - - if (!fp) - { - DEBUG("Failed to open '" << path << "'"); - return success; - } - - // Note, ctor can throw, since it uses check() function. - Fetcher fetcher(uri); - gTotalBytes = fetcher.getTotalBytes(); - -/*==========================================================================*| - // nobody uses total_bytes?!? What's this doing here? - DWORD total_bytes = 0; - success = check("InternetQueryDataAvailable", - InternetQueryDataAvailable(hdownload, &total_bytes, 0, 0)); -|*==========================================================================*/ - - success = FALSE; - while(!success && !(*cancelled)) - { - char data[BUFSIZE]; /* Flawfinder: ignore */ - unsigned long bytes_read = fetcher.read(data, sizeof(data)); - - if (!bytes_read) - { - DEBUG("InternetReadFile Read " << bytes_read << " bytes."); - } - - DEBUG("Reading Data, bytes_read = " << bytes_read); - - if (bytes_read == 0) - { - // If InternetFileRead returns TRUE AND bytes_read == 0 - // we've successfully downloaded the entire file - wsprintf(gProgress, L"Download complete."); - success = TRUE; - } - else - { - // write what we've got, then continue - fwrite(data, sizeof(char), bytes_read, fp); - - gTotalBytesRead += int(bytes_read); - - if (gTotalBytes != -1) - wsprintf(gProgress, L"Downloaded: %d%%", 100 * gTotalBytesRead / gTotalBytes); - else - wsprintf(gProgress, L"Downloaded: %dK", gTotalBytesRead / 1024); - - } - - DEBUG("Calling InvalidateRect"); - - // Mark the window as needing redraw (of the whole thing) - InvalidateRect(gWindow, NULL, TRUE); - - // Do the redraw - DEBUG("Calling UpdateWindow"); - UpdateWindow(gWindow); - - DEBUG("Calling PeekMessage"); - MSG msg; - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - - if (msg.message == WM_QUIT) - { - // bail out, user cancelled - *cancelled = TRUE; - } - } - } - - fclose(fp); - return success; -} - -LRESULT CALLBACK WinProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) -{ - HDC hdc; // Drawing context - PAINTSTRUCT ps; - - switch(message) - { - case WM_PAINT: - { - hdc = BeginPaint(hwnd, &ps); - - RECT rect; - GetClientRect(hwnd, &rect); - DrawText(hdc, gProgress, -1, &rect, - DT_SINGLELINE | DT_CENTER | DT_VCENTER); - - EndPaint(hwnd, &ps); - return 0; - } - case WM_CLOSE: - case WM_DESTROY: - // Get out of full screen - // full_screen_mode(false); - PostQuitMessage(0); - return 0; - } - return DefWindowProc(hwnd, message, wparam, lparam); -} - -#define win_class_name L"FullScreen" - -int parse_args(int argc, char **argv) -{ - int j; - - for (j = 1; j < argc; j++) - { - if ((!strcmp(argv[j], "-url")) && (++j < argc)) - { - gUpdateURL = argv[j]; - } - } - - // If nothing was set, let the caller know. - if (!gUpdateURL) - { - return 1; - } - return 0; -} - -int WINAPI -WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) -{ - // Parse the command line. - LPSTR cmd_line_including_exe_name = GetCommandLineA(); - - const int MAX_ARGS = 100; - int argc = 0; - char* argv[MAX_ARGS]; /* Flawfinder: ignore */ - -#if _DEBUG - logfile.open("updater.log", std::ios_base::out); - DEBUG("Parsing command arguments"); -#endif - - char *token = NULL; - if( cmd_line_including_exe_name[0] == '\"' ) - { - // Exe name is enclosed in quotes - token = strtok( cmd_line_including_exe_name, "\"" ); - argv[argc++] = token; - token = strtok( NULL, " \t," ); - } - else - { - // Exe name is not enclosed in quotes - token = strtok( cmd_line_including_exe_name, " \t," ); - } - - while( (token != NULL) && (argc < MAX_ARGS) ) - { - argv[argc++] = token; - /* Get next token: */ - if (*(token + strlen(token) + 1) == '\"') /* Flawfinder: ignore */ - { - token = strtok( NULL, "\""); - } - else - { - token = strtok( NULL, " \t," ); - } - } - - gUpdateURL = NULL; - - ///////////////////////////////////////// - // - // Process command line arguments - // - - DEBUG("Processing command arguments"); - - // - // Parse the command line arguments - // - int parse_args_result = parse_args(argc, argv); - - WNDCLASSEX wndclassex = { 0 }; - //DEVMODE dev_mode = { 0 }; - - const int WINDOW_WIDTH = 250; - const int WINDOW_HEIGHT = 100; - - wsprintf(gProgress, L"Connecting..."); - - /* Init the WNDCLASSEX */ - wndclassex.cbSize = sizeof(WNDCLASSEX); - wndclassex.style = CS_HREDRAW | CS_VREDRAW; - wndclassex.hInstance = hInstance; - wndclassex.lpfnWndProc = WinProc; - wndclassex.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); - wndclassex.lpszClassName = win_class_name; - - RegisterClassEx(&wndclassex); - - // Get the size of the screen - //EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dev_mode); - - gWindow = CreateWindowEx(NULL, win_class_name, - L"Second Life Updater", - WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, - CW_USEDEFAULT, - WINDOW_WIDTH, - WINDOW_HEIGHT, - NULL, NULL, hInstance, NULL); - - ShowWindow(gWindow, nShowCmd); - UpdateWindow(gWindow); - - if (parse_args_result) - { - MessageBox(gWindow, - L"Usage: updater -url <url> [-name <window_title>] [-program <program_name>] [-silent]", - L"Usage", MB_OK); - return parse_args_result; - } - - // Did we get a userserver to work with? - if (!gUpdateURL) - { - MessageBox(gWindow, L"Please specify the download url from the command line", - L"Error", MB_OK); - return 1; - } - - // Can't feed GetTempPath into GetTempFile directly - char temp_path[MAX_PATH]; /* Flawfinder: ignore */ - if (0 == GetTempPathA(sizeof(temp_path), temp_path)) - { - MessageBox(gWindow, L"Problem with GetTempPath()", - L"Error", MB_OK); - return 1; - } - std::string update_exec_path(temp_path); - update_exec_path.append("Second_Life_Updater.exe"); - - WCHAR update_uri[4096]; - mbstowcs(update_uri, gUpdateURL, sizeof(update_uri)); - - int success = 0; - int cancelled = 0; - - // Actually do the download - try - { - DEBUG("Calling get_url_into_file"); - success = get_url_into_file(update_uri, update_exec_path, &cancelled); - } - catch (const Fetcher::InetError& e) - { - (void)e; - success = FALSE; - DEBUG("Caught: " << e.what()); - } - - // WinInet can't tell us if we got a 404 or not. Therefor, we check - // for the size of the downloaded file, and assume that our installer - // will always be greater than 1MB. - if (gTotalBytesRead < (1024 * 1024) && ! cancelled) - { - MessageBox(gWindow, - L"The Second Life auto-update has failed.\n" - L"The problem may be caused by other software installed \n" - L"on your computer, such as a firewall.\n" - L"Please visit http://secondlife.com/download/ \n" - L"to download the latest version of Second Life.\n", - NULL, MB_OK); - return 1; - } - - if (cancelled) - { - // silently exit - return 0; - } - - if (!success) - { - MessageBox(gWindow, - L"Second Life download failed.\n" - L"Please try again later.", - NULL, MB_OK); - return 1; - } - - // TODO: Make updates silent (with /S to NSIS) - //char params[256]; /* Flawfinder: ignore */ - //sprintf(params, "/S"); /* Flawfinder: ignore */ - //MessageBox(gWindow, - // L"Updating Second Life.\n\nSecond Life will automatically start once the update is complete. This may take a minute...", - // L"Download Complete", - // MB_OK); - -/*==========================================================================*| - // DEV-31680: ShellExecuteA() causes McAfee-GW-Edition and AntiVir - // scanners to flag this executable as a probable virus vector. - // Less than or equal to 32 means failure - if (32 >= (int) ShellExecuteA(gWindow, "open", update_exec_path.c_str(), NULL, - "C:\\", SW_SHOWDEFAULT)) -|*==========================================================================*/ - // from http://msdn.microsoft.com/en-us/library/ms682512(VS.85).aspx - STARTUPINFOA si; - PROCESS_INFORMATION pi; - ZeroMemory(&si, sizeof(si)); - si.cb = sizeof(si); - ZeroMemory(&pi, sizeof(pi)); - - if (! CreateProcessA(update_exec_path.c_str(), // executable file - NULL, // command line - NULL, // process cannot be inherited - NULL, // thread cannot be inherited - FALSE, // do not inherit existing handles - 0, // process creation flags - NULL, // inherit parent's environment - NULL, // inherit parent's current dir - &si, // STARTUPINFO - &pi)) // PROCESS_INFORMATION - { - MessageBox(gWindow, L"Update failed. Please try again later.", NULL, MB_OK); - return 1; - } - - // Give installer some time to open a window - Sleep(1000); - - return 0; -} |