summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.hgtags7
-rwxr-xr-xBuildParams17
-rw-r--r--doc/contributions.txt4
-rw-r--r--indra/CMakeLists.txt4
-rw-r--r--indra/llcommon/llversionviewer.h2
-rw-r--r--indra/llui/llsdparam.cpp2
-rw-r--r--indra/llui/llsdparam.h7
-rw-r--r--indra/llui/llurlaction.cpp28
-rw-r--r--indra/llui/llurlaction.h21
-rw-r--r--indra/llwindow/llwindowsdl.cpp13
-rw-r--r--indra/newview/CMakeLists.txt2
-rwxr-xr-xindra/newview/installers/windows/installer_template.nsi97
-rwxr-xr-xindra/newview/llagent.cpp13
-rwxr-xr-xindra/newview/llappviewer.cpp6
-rw-r--r--indra/newview/llfloaterhelpbrowser.h2
-rw-r--r--indra/newview/llfloatermediabrowser.cpp462
-rw-r--r--indra/newview/llfloatermediabrowser.h86
-rwxr-xr-x[-rw-r--r--]indra/newview/llfloatermodelpreview.cpp23
-rw-r--r--indra/newview/llfloatermodelpreview.h3
-rw-r--r--indra/newview/llinventorypanel.cpp75
-rw-r--r--indra/newview/llinventorypanel.h2
-rw-r--r--indra/newview/llmediactrl.cpp21
-rw-r--r--indra/newview/llnavigationbar.cpp1
-rw-r--r--indra/newview/llpanelmarketplaceinboxinventory.cpp16
-rwxr-xr-xindra/newview/llpanelpicks.cpp14
-rw-r--r--indra/newview/llsidepanelinventory.cpp18
-rw-r--r--indra/newview/llsidepanelinventory.h6
-rw-r--r--indra/newview/llstartup.cpp8
-rw-r--r--indra/newview/llviewerfloaterreg.cpp2
-rw-r--r--indra/newview/llviewermedia.cpp3
-rw-r--r--indra/newview/llviewermenu.cpp9
-rw-r--r--indra/newview/llviewermessage.cpp9
-rwxr-xr-xindra/newview/llviewerobject.cpp2
-rw-r--r--indra/newview/llviewerobject.h2
-rw-r--r--indra/newview/llvoavatar.cpp2
-rw-r--r--indra/newview/llweb.cpp34
-rw-r--r--indra/newview/llweb.h14
-rw-r--r--indra/newview/llworldmapmessage.cpp5
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_model_preview.xml5
-rw-r--r--indra/newview/skins/default/xui/en/floater_world_map.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_login.xml7
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml8
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml1
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml1
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml1
-rw-r--r--indra/newview/skins/default/xui/es/panel_people.xml2
-rw-r--r--indra/newview/skins/default/xui/es/strings.xml3
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_sound.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_debug.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/strings.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_about_land.xml34
-rw-r--r--indra/newview/skins/default/xui/ru/floater_bulk_perms.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_buy_currency.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_color_picker.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_destinations.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_edit_day_cycle.xml18
-rw-r--r--indra/newview/skins/default/xui/ru/floater_edit_sky_preset.xml8
-rw-r--r--indra/newview/skins/default/xui/ru/floater_edit_water_preset.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_god_tools.xml4
-rw-r--r--indra/newview/skins/default/xui/ru/floater_image_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_joystick.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_lagmeter.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_land_holdings.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_model_wizard.xml8
-rw-r--r--indra/newview/skins/default/xui/ru/floater_select_key.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_snapshot.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_tools.xml46
-rw-r--r--indra/newview/skins/default/xui/ru/floater_toybox.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_voice_controls.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_windlight_options.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/floater_world_map.xml4
-rw-r--r--indra/newview/skins/default/xui/ru/menu_attachment_other.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/menu_gesture_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/menu_inventory_gear_default.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/menu_landmark.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/menu_model_import_gear_default.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/menu_participant_list.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/menu_places_gear_landmark.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/menu_viewer.xml4
-rw-r--r--indra/newview/skins/default/xui/ru/notifications.xml12
-rw-r--r--indra/newview/skins/default/xui/ru/panel_edit_alpha.xml4
-rw-r--r--indra/newview/skins/default/xui/ru/panel_edit_shape.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/panel_im_control_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/panel_landmarks.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/panel_navigation_bar.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/panel_notes.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/panel_outfit_edit.xml4
-rw-r--r--indra/newview/skins/default/xui/ru/panel_people.xml10
-rw-r--r--indra/newview/skins/default/xui/ru/panel_preferences_chat.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/panel_preferences_move.xml6
-rw-r--r--indra/newview/skins/default/xui/ru/panel_profile.xml4
-rw-r--r--indra/newview/skins/default/xui/ru/panel_region_estate.xml6
-rw-r--r--indra/newview/skins/default/xui/ru/panel_region_general.xml6
-rw-r--r--indra/newview/skins/default/xui/ru/panel_region_terrain.xml28
-rw-r--r--indra/newview/skins/default/xui/ru/panel_region_texture.xml24
-rw-r--r--indra/newview/skins/default/xui/ru/strings.xml178
-rw-r--r--indra/newview/skins/default/xui/tr/floater_about.xml6
-rw-r--r--indra/newview/skins/default/xui/tr/floater_about_land.xml16
-rw-r--r--indra/newview/skins/default/xui/tr/floater_buy_land.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/floater_edit_day_cycle.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/floater_environment_settings.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/floater_god_tools.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/floater_joystick.xml8
-rw-r--r--indra/newview/skins/default/xui/tr/floater_preferences.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/floater_preview_gesture.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/floater_report_abuse.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/floater_tools.xml6
-rw-r--r--indra/newview/skins/default/xui/tr/menu_viewer.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/notifications.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/panel_people.xml6
-rw-r--r--indra/newview/skins/default/xui/tr/panel_preferences_advanced.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/panel_preferences_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/panel_preferences_general.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/panel_region_debug.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/panel_region_environment.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/panel_region_terrain.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/role_actions.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/sidepanel_task_info.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/strings.xml92
-rw-r--r--indra/test/CMakeLists.txt54
-rw-r--r--indra/test/io.cpp2
-rw-r--r--indra/test/llapp_tut.cpp162
-rw-r--r--indra/test/llevents_tut.cpp1384
-rw-r--r--indra/test/llhttpclient_tut.cpp5
-rw-r--r--indra/test/llsd_new_tut.cpp71
-rw-r--r--indra/test/llsdmessagebuilder_tut.cpp7
-rw-r--r--indra/test/lltemplatemessagebuilder_tut.cpp55
130 files changed, 1650 insertions, 1822 deletions
diff --git a/.hgtags b/.hgtags
index 6cfb3810a3..b863bbe37b 100644
--- a/.hgtags
+++ b/.hgtags
@@ -213,7 +213,11 @@ e440cd1dfbd128d7d5467019e497f7f803640ad6 3.2.0-beta1
9bcc2b7176634254e501e3fb4c5b56c1f637852e 3.2.0-beta2
2a13d30ee50ccfed50268238e36bb90d738ccc9e DRTVWR-98_3.2.0-beta3
2a13d30ee50ccfed50268238e36bb90d738ccc9e 3.2.0-beta3
+3150219d229d628f0c15e58e8a51511cbd97e58d DRTVWR-94_3.2.0-release
+3150219d229d628f0c15e58e8a51511cbd97e58d 3.2.0-release
c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start
+3150219d229d628f0c15e58e8a51511cbd97e58d DRTVWR-94_3.2.0-release
+3150219d229d628f0c15e58e8a51511cbd97e58d 3.2.0-release
40b46edba007d15d0059c80864b708b99c1da368 3.2.2-start
3150219d229d628f0c15e58e8a51511cbd97e58d DRTVWR-94_3.2.0-release
3150219d229d628f0c15e58e8a51511cbd97e58d 3.2.0-release
@@ -221,3 +225,6 @@ c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start
9e390d76807fa70d356b8716fb83b8ce42a629ef 3.2.1-beta1
523df3e67378541498d516d52af4402176a26bac DRTVWR-102_3.2.2-beta1
523df3e67378541498d516d52af4402176a26bac 3.2.2-beta1
+80f3e30d8aa4d8f674a48bd742aaa6d8e9eae0b5 3.2.3-start
+a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release
+a8c7030d6845186fac7c188be4323a0e887b4184 3.2.1-release
diff --git a/BuildParams b/BuildParams
index 5068edb21f..3f5d6f8c6b 100755
--- a/BuildParams
+++ b/BuildParams
@@ -136,14 +136,6 @@ viewer-mesh.login_channel = "Project Viewer - Mesh"
viewer-mesh.viewer_grid = aditi
viewer-mesh.email = shining@lists.lindenlab.com
-
-# ========================================
-# CG
-# ========================================
-
-cg_viewer-development_lenny.show_changes_since = 4b140ce7839d
-cg_viewer-development_lenny.email = cg@lindenlab.com
-
# ================
# oz
# ================
@@ -151,20 +143,29 @@ cg_viewer-development_lenny.email = cg@lindenlab.com
oz_viewer-devreview.build_debug_release_separately = true
oz_viewer-devreview.codeticket_add_context = false
oz_viewer-devreview.build_enforce_coding_policy = true
+oz_viewer-devreview.email = oz@lindenlab.com
oz_project-1.build_debug_release_separately = true
oz_project-1.codeticket_add_context = false
+oz_project-1.email = oz@lindenlab.com
oz_project-2.build_debug_release_separately = true
oz_project-2.codeticket_add_context = false
+oz_project-2.email = oz@lindenlab.com
oz_project-3.build_debug_release_separately = true
oz_project-3.codeticket_add_context = false
+oz_project-3.email = oz@lindenlab.com
oz_project-4.build_debug_release_separately = true
oz_project-4.codeticket_add_context = false
+oz_project-4.email = oz@lindenlab.com
+oz_project-5.build_debug_release_separately = true
+oz_project-5.codeticket_add_context = false
+oz_project-5.email = oz@lindenlab.com
oz_viewer-beta-review.build_debug_release_separately = true
oz_viewer-beta-review.codeticket_add_context = false
oz_viewer-beta-review.viewer_channel = "Second Life Beta Viewer"
oz_viewer-beta-review.login_channel = "Second Life Beta Viewer"
+oz_viewer-beta-review.email = oz@lindenlab.com
# =================================================================
# asset delivery 2010 projects
diff --git a/doc/contributions.txt b/doc/contributions.txt
index 2b39e15e2a..8d30c21f90 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -170,6 +170,7 @@ Ansariel Hiller
STORM-1101
VWR-25480
VWR-26150
+ STORM-1685
Aralara Rajal
Ardy Lay
STORM-859
@@ -583,9 +584,11 @@ Jonathan Yap
STORM-910
STORM-1642
STORM-1105
+ STORM-1679
STORM-1222
STORM-1659
STORM-1674
+ STORM-1685
Kadah Coba
STORM-1060
Jondan Lundquist
@@ -1114,6 +1117,7 @@ Tofu Buzzard
CTS-411
STORM-546
VWR-24509
+ STORM-1684
Tony Kembia
Torben Trautman
TouchaHoney Perhaps
diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index d1042d6e86..4b1bf49d07 100644
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -1,4 +1,3 @@
-
# -*- cmake -*-
# cmake_minimum_required should appear before any
@@ -70,6 +69,9 @@ if (VIEWER)
add_subdirectory(${LIBS_OPEN_PREFIX}llxuixml)
add_subdirectory(${LIBS_OPEN_PREFIX}viewer_components)
+ # Legacy C++ tests. Build always, run if LL_TESTS is true.
+ add_subdirectory(${VIEWER_PREFIX}test)
+
# viewer media plugins
add_subdirectory(${LIBS_OPEN_PREFIX}media_plugins)
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index fc1c1449da..b50405421d 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -29,7 +29,7 @@
const S32 LL_VERSION_MAJOR = 3;
const S32 LL_VERSION_MINOR = 2;
-const S32 LL_VERSION_PATCH = 2;
+const S32 LL_VERSION_PATCH = 4;
const S32 LL_VERSION_BUILD = 0;
const char * const LL_CHANNEL = "Second Life Developer";
diff --git a/indra/llui/llsdparam.cpp b/indra/llui/llsdparam.cpp
index 6fa90933a4..0e29873bb0 100644
--- a/indra/llui/llsdparam.cpp
+++ b/indra/llui/llsdparam.cpp
@@ -36,6 +36,8 @@ static LLInitParam::Parser::parser_write_func_map_t sWriteFuncs;
static LLInitParam::Parser::parser_inspect_func_map_t sInspectFuncs;
static const LLSD NO_VALUE_MARKER;
+LLFastTimer::DeclareTimer FTM_SD_PARAM_ADAPTOR("LLSD to LLInitParam conversion");
+
//
// LLParamSDParser
//
diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h
index c1cfa98399..3dfc6d020e 100644
--- a/indra/llui/llsdparam.h
+++ b/indra/llui/llsdparam.h
@@ -91,6 +91,8 @@ private:
LLSD* mCurWriteSD;
};
+
+extern LLFastTimer::DeclareTimer FTM_SD_PARAM_ADAPTOR;
template<typename T>
class LLSDParamAdapter : public T
{
@@ -98,8 +100,11 @@ public:
LLSDParamAdapter() {}
LLSDParamAdapter(const LLSD& sd)
{
+ LLFastTimer _(FTM_SD_PARAM_ADAPTOR);
LLParamSDParser parser;
- parser.readSD(sd, *this);
+ // don't spam for implicit parsing of LLSD, as we want to allow arbitrary freeform data and ignore most of it
+ bool parse_silently = true;
+ parser.readSD(sd, *this, parse_silently);
}
operator LLSD() const
diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp
index 42b779bd28..fd9b3d9a6d 100644
--- a/indra/llui/llurlaction.cpp
+++ b/indra/llui/llurlaction.cpp
@@ -33,28 +33,28 @@
#include "llurlregistry.h"
// global state for the callback functions
-void (*LLUrlAction::sOpenURLCallback) (const std::string& url) = NULL;
-void (*LLUrlAction::sOpenURLInternalCallback) (const std::string& url) = NULL;
-void (*LLUrlAction::sOpenURLExternalCallback) (const std::string& url) = NULL;
-bool (*LLUrlAction::sExecuteSLURLCallback) (const std::string& url) = NULL;
+LLUrlAction::url_callback_t LLUrlAction::sOpenURLCallback;
+LLUrlAction::url_callback_t LLUrlAction::sOpenURLInternalCallback;
+LLUrlAction::url_callback_t LLUrlAction::sOpenURLExternalCallback;
+LLUrlAction::execute_url_callback_t LLUrlAction::sExecuteSLURLCallback;
-void LLUrlAction::setOpenURLCallback(void (*cb) (const std::string& url))
+void LLUrlAction::setOpenURLCallback(url_callback_t cb)
{
sOpenURLCallback = cb;
}
-void LLUrlAction::setOpenURLInternalCallback(void (*cb) (const std::string& url))
+void LLUrlAction::setOpenURLInternalCallback(url_callback_t cb)
{
sOpenURLInternalCallback = cb;
}
-void LLUrlAction::setOpenURLExternalCallback(void (*cb) (const std::string& url))
+void LLUrlAction::setOpenURLExternalCallback(url_callback_t cb)
{
sOpenURLExternalCallback = cb;
}
-void LLUrlAction::setExecuteSLURLCallback(bool (*cb) (const std::string& url))
+void LLUrlAction::setExecuteSLURLCallback(execute_url_callback_t cb)
{
sExecuteSLURLCallback = cb;
}
@@ -63,7 +63,7 @@ void LLUrlAction::openURL(std::string url)
{
if (sOpenURLCallback)
{
- (*sOpenURLCallback)(url);
+ sOpenURLCallback(url);
}
}
@@ -71,7 +71,7 @@ void LLUrlAction::openURLInternal(std::string url)
{
if (sOpenURLInternalCallback)
{
- (*sOpenURLInternalCallback)(url);
+ sOpenURLInternalCallback(url);
}
}
@@ -79,7 +79,7 @@ void LLUrlAction::openURLExternal(std::string url)
{
if (sOpenURLExternalCallback)
{
- (*sOpenURLExternalCallback)(url);
+ sOpenURLExternalCallback(url);
}
}
@@ -87,18 +87,18 @@ void LLUrlAction::executeSLURL(std::string url)
{
if (sExecuteSLURLCallback)
{
- (*sExecuteSLURLCallback)(url);
+ sExecuteSLURLCallback(url);
}
}
void LLUrlAction::clickAction(std::string url)
{
// Try to handle as SLURL first, then http Url
- if ( (sExecuteSLURLCallback) && !(*sExecuteSLURLCallback)(url) )
+ if ( (sExecuteSLURLCallback) && !sExecuteSLURLCallback(url) )
{
if (sOpenURLCallback)
{
- (*sOpenURLCallback)(url);
+ sOpenURLCallback(url);
}
}
}
diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h
index 0132dbaaf0..c34960b826 100644
--- a/indra/llui/llurlaction.h
+++ b/indra/llui/llurlaction.h
@@ -29,6 +29,7 @@
#define LL_LLURLACTION_H
#include <string>
+#include <boost/function.hpp>
///
/// The LLUrlAction class provides a number of static functions that
@@ -77,17 +78,21 @@ public:
static void showProfile(std::string url);
/// specify the callbacks to enable this class's functionality
- static void setOpenURLCallback(void (*cb) (const std::string& url));
- static void setOpenURLInternalCallback(void (*cb) (const std::string& url));
- static void setOpenURLExternalCallback(void (*cb) (const std::string& url));
- static void setExecuteSLURLCallback(bool (*cb) (const std::string& url));
+ typedef boost::function<void (const std::string&)> url_callback_t;
+ typedef boost::function<bool(const std::string& url)> execute_url_callback_t;
+
+ static void setOpenURLCallback(url_callback_t cb);
+ static void setOpenURLInternalCallback(url_callback_t cb);
+ static void setOpenURLExternalCallback(url_callback_t cb);
+ static void setExecuteSLURLCallback(execute_url_callback_t cb);
private:
// callbacks for operations we can perform on Urls
- static void (*sOpenURLCallback) (const std::string& url);
- static void (*sOpenURLInternalCallback) (const std::string& url);
- static void (*sOpenURLExternalCallback) (const std::string& url);
- static bool (*sExecuteSLURLCallback) (const std::string& url);
+ static url_callback_t sOpenURLCallback;
+ static url_callback_t sOpenURLInternalCallback;
+ static url_callback_t sOpenURLExternalCallback;
+
+ static execute_url_callback_t sExecuteSLURLCallback;
};
#endif
diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index e41aa9820f..da2222ad51 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -63,6 +63,9 @@ extern BOOL gDebugWindowProc;
const S32 MAX_NUM_RESOLUTIONS = 200;
+const S32 MIN_WINDOW_WIDTH = 1024;
+const S32 MIN_WINDOW_HEIGHT = 768;
+
// static variable for ATI mouse cursor crash work-around:
static bool ATIbug = false;
@@ -1843,11 +1846,15 @@ void LLWindowSDL::gatherInput()
break;
case SDL_VIDEORESIZE: // *FIX: handle this?
+ {
llinfos << "Handling a resize event: " << event.resize.w <<
"x" << event.resize.h << llendl;
+ S32 width = llmax(event.resize.w, MIN_WINDOW_WIDTH);
+ S32 height = llmax(event.resize.h, MIN_WINDOW_HEIGHT);
+
// *FIX: I'm not sure this is necessary!
- mWindow = SDL_SetVideoMode(event.resize.w, event.resize.h, 32, mSDLFlags);
+ mWindow = SDL_SetVideoMode(width, height, 32, mSDLFlags);
if (!mWindow)
{
// *FIX: More informative dialog?
@@ -1861,9 +1868,9 @@ void LLWindowSDL::gatherInput()
break;
}
- mCallbacks->handleResize(this, event.resize.w, event.resize.h );
+ mCallbacks->handleResize(this, width, height);
break;
-
+ }
case SDL_ACTIVEEVENT:
if (event.active.state & SDL_APPINPUTFOCUS)
{
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index ff9cf3199e..ba05f6288b 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -207,7 +207,6 @@ set(viewer_SOURCE_FILES
llfloaterland.cpp
llfloaterlandholdings.cpp
llfloatermap.cpp
- llfloatermediabrowser.cpp
llfloatermediasettings.cpp
llfloatermemleak.cpp
llfloatermodelpreview.cpp
@@ -781,7 +780,6 @@ set(viewer_HEADER_FILES
llfloaterland.h
llfloaterlandholdings.h
llfloatermap.h
- llfloatermediabrowser.h
llfloatermediasettings.h
llfloatermemleak.h
llfloatermodelpreview.h
diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
index 02ca7cbb3a..8a6114f0d5 100755
--- a/indra/newview/installers/windows/installer_template.nsi
+++ b/indra/newview/installers/windows/installer_template.nsi
@@ -115,6 +115,7 @@ Var COMMANDLINE ; command line passed to this installer, set in .onInit
Var SHORTCUT_LANG_PARAM ; "--set InstallLanguage de", passes language to viewer
Var SKIP_DIALOGS ; set from command line in .onInit. autoinstall
; GUI and the defaults.
+Var DO_UNINSTALL_V2 ; If non-null, path to a previous Viewer 2 installation that will be uninstalled.
;;; Function definitions should go before file includes, because calls to
;;; DLLs like LangDLL trigger an implicit file include, so if that call is at
@@ -311,6 +312,29 @@ FunctionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Function CheckWillUninstallV2
+;
+; If we are being called through auto-update, we need to uninstall any
+; existing V2 installation. Otherwise, we wind up with
+; SecondLifeViewer2 and SecondLifeViewer installations existing side
+; by side no indication which to use.
+; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckWillUninstallV2
+
+ StrCpy $DO_UNINSTALL_V2 ""
+
+ StrCmp $SKIP_DIALOGS "true" 0 CHECKV2_DONE
+ StrCmp $INSTDIR "$PROGRAMFILES\SecondLifeViewer2" CHECKV2_DONE ; don't uninstall our own install dir.
+ IfFileExists "$PROGRAMFILES\SecondLifeViewer2\uninst.exe" CHECKV2_FOUND CHECKV2_DONE
+
+CHECKV2_FOUND:
+ StrCpy $DO_UNINSTALL_V2 "true"
+
+CHECKV2_DONE:
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Save user files to temp location
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function PreserveUserFiles
@@ -334,7 +358,7 @@ Push $2
ExpandEnvStrings $2 $2
CreateDirectory "$TEMP\SecondLifeSettingsBackup\$0"
- CopyFiles "$2\Application Data\SecondLife\*" "$TEMP\SecondLifeSettingsBackup\$0"
+ CopyFiles /SILENT "$2\Application Data\SecondLife\*" "$TEMP\SecondLifeSettingsBackup\$0"
CONTINUE:
IntOp $0 $0 + 1
@@ -350,7 +374,7 @@ Push $0
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
StrCmp $0 "" +2
CreateDirectory "$TEMP\SecondLifeSettingsBackup\AllUsers\"
- CopyFiles "$2\Application Data\SecondLife\*" "$TEMP\SecondLifeSettingsBackup\AllUsers\"
+ CopyFiles /SILENT "$2\Application Data\SecondLife\*" "$TEMP\SecondLifeSettingsBackup\AllUsers\"
Pop $0
FunctionEnd
@@ -377,7 +401,7 @@ Push $2
ExpandEnvStrings $2 $2
CreateDirectory "$2\Application Data\SecondLife\"
- CopyFiles "$TEMP\SecondLifeSettingsBackup\$0\*" "$2\Application Data\SecondLife\"
+ CopyFiles /SILENT "$TEMP\SecondLifeSettingsBackup\$0\*" "$2\Application Data\SecondLife\"
CONTINUE:
IntOp $0 $0 + 1
@@ -393,11 +417,53 @@ Push $0
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
StrCmp $0 "" +2
CreateDirectory "$2\Application Data\SecondLife\"
- CopyFiles "$TEMP\SecondLifeSettingsBackup\AllUsers\*" "$2\Application Data\SecondLife\"
+ CopyFiles /SILENT "$TEMP\SecondLifeSettingsBackup\AllUsers\*" "$2\Application Data\SecondLife\"
+Pop $0
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Remove temp dirs
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function RemoveTempUserFiles
+
+Push $0
+Push $1
+Push $2
+
+ StrCpy $0 0 ; Index number used to iterate via EnumRegKey
+
+ LOOP:
+ EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
+ StrCmp $1 "" DONE ; no more users
+
+ ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
+ StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
+
+ ; Required since ProfileImagePath is of type REG_EXPAND_SZ
+ ExpandEnvStrings $2 $2
+
+ RMDir /r "$TEMP\SecondLifeSettingsBackup\$0\*"
+
+ CONTINUE:
+ IntOp $0 $0 + 1
+ Goto LOOP
+ DONE:
+
+Pop $2
+Pop $1
+Pop $0
+
+; Copy files in Documents and Settings\All Users\SecondLife
+Push $0
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
+ StrCmp $0 "" +2
+ RMDir /r "$TEMP\SecondLifeSettingsBackup\AllUsers\*"
Pop $0
FunctionEnd
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Clobber user files - TEST ONLY
; This is here for testing, generally not desirable to call it.
@@ -864,9 +930,12 @@ Call CheckIfAdministrator ; Make sure the user can install/uninstall
Call CheckIfAlreadyCurrent ; Make sure that we haven't already installed this version
Call CloseSecondLife ; Make sure we're not running
Call CheckNetworkConnection ; ping secondlife.com
+Call CheckWillUninstallV2 ; See if a V2 install exists and will be removed.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Call PreserveUserFiles
+StrCmp $DO_UNINSTALL_V2 "" PRESERVE_DONE
+ Call PreserveUserFiles
+PRESERVE_DONE:
;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers.
;Call RemoveCacheFiles ; Installing over removes potentially corrupted
@@ -951,17 +1020,15 @@ WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" ""
; write out uninstaller
WriteUninstaller "$INSTDIR\uninst.exe"
-; Remove existing "Second Life Viewer 2" install if any.
-StrCmp $INSTDIR "$PROGRAMFILES\SecondLifeViewer2" SLV2_DONE ; unless that's the install directory
-IfFileExists "$PROGRAMFILES\SecondLifeViewer2\uninst.exe" SLV2_FOUND SLV2_DONE
-
-SLV2_FOUND:
-ExecWait '"$PROGRAMFILES\SecondLifeViewer2\uninst.exe" /S _?=$PROGRAMFILES\SecondLifeViewer2'
-Delete "$PROGRAMFILES\SecondLifeViewer2\uninst.exe" ; with _? option above, uninst.exe will be left behind.
-RMDir "$PROGRAMFILES\SecondLifeViewer2" ; will remove only if empty.
+; Uninstall existing "Second Life Viewer 2" install if needed.
+StrCmp $DO_UNINSTALL_V2 "" REMOVE_SLV2_DONE
+ ExecWait '"$PROGRAMFILES\SecondLifeViewer2\uninst.exe" /S _?=$PROGRAMFILES\SecondLifeViewer2'
+ Delete "$PROGRAMFILES\SecondLifeViewer2\uninst.exe" ; with _? option above, uninst.exe will be left behind.
+ RMDir "$PROGRAMFILES\SecondLifeViewer2" ; will remove only if empty.
-SLV2_DONE:
-Call RestoreUserFiles
+ Call RestoreUserFiles
+ Call RemoveTempUserFiles
+REMOVE_SLV2_DONE:
; end of default section
SectionEnd
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index f8b204eca0..37bf856662 100755
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -1101,20 +1101,11 @@ F32 LLAgent::clampPitchToLimits(F32 angle)
LLVector3 skyward = getReferenceUpVector();
- F32 look_down_limit;
- F32 look_up_limit = 10.f * DEG_TO_RAD;
+ const F32 look_down_limit = 179.f * DEG_TO_RAD;;
+ const F32 look_up_limit = 1.f * DEG_TO_RAD;
F32 angle_from_skyward = acos( mFrameAgent.getAtAxis() * skyward );
- if (isAgentAvatarValid() && gAgentAvatarp->isSitting())
- {
- look_down_limit = 130.f * DEG_TO_RAD;
- }
- else
- {
- look_down_limit = 170.f * DEG_TO_RAD;
- }
-
// clamp pitch to limits
if ((angle >= 0.f) && (angle_from_skyward + angle > look_down_limit))
{
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index c937f604fc..8bf4d94059 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -847,9 +847,9 @@ bool LLAppViewer::init()
LLWeb::initClass(); // do this after LLUI
// Provide the text fields with callbacks for opening Urls
- LLUrlAction::setOpenURLCallback(&LLWeb::loadURL);
- LLUrlAction::setOpenURLInternalCallback(&LLWeb::loadURLInternal);
- LLUrlAction::setOpenURLExternalCallback(&LLWeb::loadURLExternal);
+ LLUrlAction::setOpenURLCallback(boost::bind(&LLWeb::loadURL, _1, LLStringUtil::null, LLStringUtil::null));
+ LLUrlAction::setOpenURLInternalCallback(boost::bind(&LLWeb::loadURLInternal, _1, LLStringUtil::null, LLStringUtil::null));
+ LLUrlAction::setOpenURLExternalCallback(boost::bind(&LLWeb::loadURLExternal, _1, true, LLStringUtil::null));
LLUrlAction::setExecuteSLURLCallback(&LLURLDispatcher::dispatchFromTextEditor);
// Let code in llui access the viewer help floater
diff --git a/indra/newview/llfloaterhelpbrowser.h b/indra/newview/llfloaterhelpbrowser.h
index 80b0ecc06b..bf4f544a14 100644
--- a/indra/newview/llfloaterhelpbrowser.h
+++ b/indra/newview/llfloaterhelpbrowser.h
@@ -1,5 +1,5 @@
/**
- * @file llfloatermediabrowser.h
+ * @file llfloaterhelpbrowser.h
* @brief HTML Help floater - uses embedded web browser control
*
* $LicenseInfo:firstyear=2006&license=viewerlgpl$
diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp
deleted file mode 100644
index 7a670dd90c..0000000000
--- a/indra/newview/llfloatermediabrowser.cpp
+++ /dev/null
@@ -1,462 +0,0 @@
-/**
- * @file llfloatermediabrowser.cpp
- * @brief media browser floater - uses embedded media browser control
- *
- * $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 "llviewerprecompiledheaders.h"
-
-#include "llfloatermediabrowser.h"
-
-#include "llfloaterreg.h"
-#include "llparcel.h"
-#include "llpluginclassmedia.h"
-#include "lluictrlfactory.h"
-#include "llmediactrl.h"
-#include "llviewerwindow.h"
-#include "llviewercontrol.h"
-#include "llviewerparcelmgr.h"
-#include "llweb.h"
-#include "llui.h"
-#include "roles_constants.h"
-
-#include "llurlhistory.h"
-#include "llmediactrl.h"
-#include "llviewermedia.h"
-#include "llviewerparcelmedia.h"
-#include "llcombobox.h"
-#include "llwindow.h"
-#include "lllayoutstack.h"
-#include "llcheckboxctrl.h"
-
-#include "llnotifications.h"
-
-// TEMP
-#include "llsdutil.h"
-
-LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& key)
- : LLFloater(key)
-{
-}
-
-//static
-void LLFloaterMediaBrowser::create(const std::string &url, const std::string& target, const std::string& uuid)
-{
- lldebugs << "url = " << url << ", target = " << target << ", uuid = " << uuid << llendl;
-
- std::string tag = target;
-
- if(target.empty() || target == "_blank")
- {
- if(!uuid.empty())
- {
- tag = uuid;
- }
- else
- {
- // create a unique tag for this instance
- LLUUID id;
- id.generate();
- tag = id.asString();
- }
- }
-
- S32 browser_window_limit = gSavedSettings.getS32("MediaBrowserWindowLimit");
-
- if(LLFloaterReg::findInstance("media_browser", tag) != NULL)
- {
- // There's already a media browser for this tag, so we won't be opening a new window.
- }
- else if(browser_window_limit != 0)
- {
- // showInstance will open a new window. Figure out how many media browsers are already open,
- // and close the least recently opened one if this will put us over the limit.
-
- LLFloaterReg::const_instance_list_t &instances = LLFloaterReg::getFloaterList("media_browser");
- lldebugs << "total instance count is " << instances.size() << llendl;
-
- for(LLFloaterReg::const_instance_list_t::const_iterator iter = instances.begin(); iter != instances.end(); iter++)
- {
- lldebugs << " " << (*iter)->getKey() << llendl;
- }
-
- if(instances.size() >= (size_t)browser_window_limit)
- {
- // Destroy the least recently opened instance
- (*instances.begin())->closeFloater();
- }
- }
-
- LLFloaterMediaBrowser *browser = dynamic_cast<LLFloaterMediaBrowser*> (LLFloaterReg::showInstance("media_browser", tag));
- llassert(browser);
- if(browser)
- {
- browser->mUUID = uuid;
-
- // tell the browser instance to load the specified URL
- browser->openMedia(url, target);
- LLViewerMedia::proxyWindowOpened(target, uuid);
- }
-}
-
-//static
-void LLFloaterMediaBrowser::closeRequest(const std::string &uuid)
-{
- LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("media_browser");
- lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl;
- for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
- {
- LLFloaterMediaBrowser* i = dynamic_cast<LLFloaterMediaBrowser*>(*iter);
- lldebugs << " " << i->mUUID << llendl;
- if (i && i->mUUID == uuid)
- {
- i->closeFloater(false);
- return;
- }
- }
-}
-
-//static
-void LLFloaterMediaBrowser::geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height)
-{
- LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("media_browser");
- lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl;
- for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
- {
- LLFloaterMediaBrowser* i = dynamic_cast<LLFloaterMediaBrowser*>(*iter);
- lldebugs << " " << i->mUUID << llendl;
- if (i && i->mUUID == uuid)
- {
- i->geometryChanged(x, y, width, height);
- return;
- }
-}
-}
-
-void LLFloaterMediaBrowser::geometryChanged(S32 x, S32 y, S32 width, S32 height)
-{
- // Make sure the layout of the browser control is updated, so this calculation is correct.
- LLLayoutStack::updateClass();
-
- // TODO: need to adjust size and constrain position to make sure floaters aren't moved outside the window view, etc.
- LLCoordWindow window_size;
- getWindow()->getSize(&window_size);
-
- // Adjust width and height for the size of the chrome on the Media Browser window.
- width += getRect().getWidth() - mBrowser->getRect().getWidth();
- height += getRect().getHeight() - mBrowser->getRect().getHeight();
-
- LLRect geom;
- geom.setOriginAndSize(x, window_size.mY - (y + height), width, height);
-
- lldebugs << "geometry change: " << geom << llendl;
-
- handleReshape(geom,false);
-}
-
-
-void LLFloaterMediaBrowser::draw()
-{
- getChildView("go")->setEnabled(!mAddressCombo->getValue().asString().empty());
- LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
- if(parcel)
- {
- getChildView("parcel_owner_controls")->setVisible( LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_MEDIA));
- getChildView("assign")->setEnabled(!mAddressCombo->getValue().asString().empty());
- }
- bool show_time_controls = false;
- bool media_playing = false;
- if(mBrowser)
- {
- LLPluginClassMedia* media_plugin = mBrowser->getMediaPlugin();
- if(media_plugin)
- {
- show_time_controls = media_plugin->pluginSupportsMediaTime();
- media_playing = media_plugin->getStatus() == LLPluginClassMediaOwner::MEDIA_PLAYING;
- }
- }
- getChildView("rewind")->setVisible( show_time_controls);
- getChildView("play")->setVisible( show_time_controls && ! media_playing);
- getChildView("pause")->setVisible( show_time_controls && media_playing);
- getChildView("stop")->setVisible( show_time_controls);
- getChildView("seek")->setVisible( show_time_controls);
-
- getChildView("play")->setEnabled(! media_playing);
- getChildView("stop")->setEnabled(media_playing);
-
- getChildView("back")->setEnabled(mBrowser->canNavigateBack());
- getChildView("forward")->setEnabled(mBrowser->canNavigateForward());
-
- LLFloater::draw();
-}
-
-BOOL LLFloaterMediaBrowser::postBuild()
-{
- mBrowser = getChild<LLMediaCtrl>("browser");
- mBrowser->addObserver(this);
-
- mAddressCombo = getChild<LLComboBox>("address");
- mAddressCombo->setCommitCallback(onEnterAddress, this);
- mAddressCombo->sortByName();
-
- childSetAction("back", onClickBack, this);
- childSetAction("forward", onClickForward, this);
- childSetAction("reload", onClickRefresh, this);
- childSetAction("rewind", onClickRewind, this);
- childSetAction("play", onClickPlay, this);
- childSetAction("stop", onClickStop, this);
- childSetAction("pause", onClickPlay, this);
- childSetAction("seek", onClickSeek, this);
- childSetAction("go", onClickGo, this);
- childSetAction("close", onClickClose, this);
- childSetAction("open_browser", onClickOpenWebBrowser, this);
- childSetAction("assign", onClickAssign, this);
-
- buildURLHistory();
-
- return TRUE;
-}
-
-void LLFloaterMediaBrowser::buildURLHistory()
-{
- LLCtrlListInterface* url_list = childGetListInterface("address");
- if (url_list)
- {
- url_list->operateOnAll(LLCtrlListInterface::OP_DELETE);
- }
-
- // Get all of the entries in the "browser" collection
- LLSD browser_history = LLURLHistory::getURLHistory("browser");
-
- LLSD::array_iterator iter_history =
- browser_history.beginArray();
- LLSD::array_iterator end_history =
- browser_history.endArray();
- for(; iter_history != end_history; ++iter_history)
- {
- std::string url = (*iter_history).asString();
- if(! url.empty())
- url_list->addSimpleElement(url);
- }
-
- // initialize URL history in the plugin
- if(mBrowser && mBrowser->getMediaPlugin())
- {
- mBrowser->getMediaPlugin()->initializeUrlHistory(browser_history);
- }
-}
-
-std::string LLFloaterMediaBrowser::getSupportURL()
-{
- return getString("support_page_url");
-}
-
-//virtual
-void LLFloaterMediaBrowser::onClose(bool app_quitting)
-{
- LLViewerMedia::proxyWindowClosed(mUUID);
- //setVisible(FALSE);
- destroy();
-}
-
-void LLFloaterMediaBrowser::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
-{
- if(event == MEDIA_EVENT_LOCATION_CHANGED)
- {
- setCurrentURL(self->getLocation());
- }
- else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE)
- {
- // This is the event these flags are sent with.
- getChildView("back")->setEnabled(self->getHistoryBackAvailable());
- getChildView("forward")->setEnabled(self->getHistoryForwardAvailable());
- }
- else if(event == MEDIA_EVENT_CLOSE_REQUEST)
- {
- // The browser instance wants its window closed.
- closeFloater();
- }
- else if(event == MEDIA_EVENT_GEOMETRY_CHANGE)
- {
- geometryChanged(self->getGeometryX(), self->getGeometryY(), self->getGeometryWidth(), self->getGeometryHeight());
- }
-}
-
-void LLFloaterMediaBrowser::setCurrentURL(const std::string& url)
-{
- mCurrentURL = url;
-
- mAddressCombo->remove(mCurrentURL);
- mAddressCombo->add(mCurrentURL);
- mAddressCombo->selectByValue(mCurrentURL);
-
- // Serialize url history
- LLURLHistory::removeURL("browser", mCurrentURL);
- LLURLHistory::addURL("browser", mCurrentURL);
-
- getChildView("back")->setEnabled(mBrowser->canNavigateBack());
- getChildView("forward")->setEnabled(mBrowser->canNavigateForward());
- getChildView("reload")->setEnabled(TRUE);
-}
-
-//static
-void LLFloaterMediaBrowser::onEnterAddress(LLUICtrl* ctrl, void* user_data)
-{
- LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
- self->mBrowser->navigateTo(self->mAddressCombo->getValue().asString());
-}
-
-//static
-void LLFloaterMediaBrowser::onClickRefresh(void* user_data)
-{
- LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
- if( self->mBrowser->getMediaPlugin() && self->mBrowser->getMediaPlugin()->pluginSupportsMediaBrowser())
- {
- bool ignore_cache = true;
- self->mBrowser->getMediaPlugin()->browse_reload( ignore_cache );
- }
- else
- {
- self->mBrowser->navigateTo(self->mCurrentURL);
- }
-}
-
-//static
-void LLFloaterMediaBrowser::onClickForward(void* user_data)
-{
- LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
- self->mBrowser->navigateForward();
-}
-
-//static
-void LLFloaterMediaBrowser::onClickBack(void* user_data)
-{
- LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
- self->mBrowser->navigateBack();
-}
-
-//static
-void LLFloaterMediaBrowser::onClickGo(void* user_data)
-{
- LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
- self->mBrowser->navigateTo(self->mAddressCombo->getValue().asString());
-}
-
-//static
-void LLFloaterMediaBrowser::onClickClose(void* user_data)
-{
- LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
- self->closeFloater();
-}
-
-//static
-void LLFloaterMediaBrowser::onClickOpenWebBrowser(void* user_data)
-{
- LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
- std::string url = self->mCurrentURL.empty() ?
- self->mBrowser->getHomePageUrl() :
- self->mCurrentURL;
- LLWeb::loadURLExternal(url);
-}
-
-void LLFloaterMediaBrowser::onClickAssign(void* user_data)
-{
- LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
- LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
- if (!parcel)
- {
- return;
- }
- std::string media_url = self->mAddressCombo->getValue().asString();
- LLStringUtil::trim(media_url);
-
- if(parcel->getMediaType() != "text/html")
- {
- parcel->setMediaURL(media_url);
- parcel->setMediaCurrentURL(media_url);
- parcel->setMediaType(std::string("text/html"));
- LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel, true );
- LLViewerParcelMedia::sendMediaNavigateMessage(media_url);
- LLViewerParcelMedia::stop();
- // LLViewerParcelMedia::update( parcel );
- }
- LLViewerParcelMedia::sendMediaNavigateMessage(media_url);
-}
-//static
-void LLFloaterMediaBrowser::onClickRewind(void* user_data)
-{
- LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
- if(self->mBrowser->getMediaPlugin())
- self->mBrowser->getMediaPlugin()->start(-2.0f);
-}
-//static
-void LLFloaterMediaBrowser::onClickPlay(void* user_data)
-{
- LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
- LLPluginClassMedia* plugin = self->mBrowser->getMediaPlugin();
- if(plugin)
- {
- if(plugin->getStatus() == LLPluginClassMediaOwner::MEDIA_PLAYING)
- {
- plugin->pause();
- }
- else
- {
- plugin->start();
- }
- }
-}
-//static
-void LLFloaterMediaBrowser::onClickStop(void* user_data)
-{
- LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
- if(self->mBrowser->getMediaPlugin())
- self->mBrowser->getMediaPlugin()->stop();
-}
-//static
-void LLFloaterMediaBrowser::onClickSeek(void* user_data)
-{
- LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data;
-
- if(self->mBrowser->getMediaPlugin())
- self->mBrowser->getMediaPlugin()->start(2.0f);
-}
-void LLFloaterMediaBrowser::openMedia(const std::string& media_url, const std::string& target)
-{
- mBrowser->setHomePageUrl(media_url);
- mBrowser->setTarget(target);
- mBrowser->navigateTo(media_url);
- setCurrentURL(media_url);
-}
-
-
diff --git a/indra/newview/llfloatermediabrowser.h b/indra/newview/llfloatermediabrowser.h
deleted file mode 100644
index 152d221a01..0000000000
--- a/indra/newview/llfloatermediabrowser.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * @file llfloatermediabrowser.h
- * @brief media browser floater - uses embedded media browser control
- *
- * $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$
- */
-
-#ifndef LL_LLFLOATERMEDIABROWSER_H
-#define LL_LLFLOATERMEDIABROWSER_H
-
-#include "llfloater.h"
-#include "llmediactrl.h"
-
-
-class LLComboBox;
-class LLMediaCtrl;
-class LLNotification;
-
-class LLFloaterMediaBrowser :
- public LLFloater,
- public LLViewerMediaObserver
-{
-public:
- LOG_CLASS(LLFloaterMediaBrowser);
- LLFloaterMediaBrowser(const LLSD& key);
-
- static void create(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null);
-
- static void closeRequest(const std::string &uuid);
- static void geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height);
- void geometryChanged(S32 x, S32 y, S32 width, S32 height);
-
- /*virtual*/ BOOL postBuild();
- /*virtual*/ void onClose(bool app_quitting);
- /*virtual*/ void draw();
-
- // inherited from LLViewerMediaObserver
- /*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
-
- void openMedia(const std::string& media_url, const std::string& target);
- void buildURLHistory();
- std::string getSupportURL();
- void setCurrentURL(const std::string& url);
-
- static void onEnterAddress(LLUICtrl* ctrl, void* user_data);
- static void onClickRefresh(void* user_data);
- static void onClickBack(void* user_data);
- static void onClickForward(void* user_data);
- static void onClickGo(void* user_data);
- static void onClickClose(void* user_data);
- static void onClickOpenWebBrowser(void* user_data);
- static void onClickAssign(void* user_data);
- static void onClickRewind(void* user_data);
- static void onClickPlay(void* user_data);
- static void onClickStop(void* user_data);
- static void onClickSeek(void* user_data);
-
-private:
- LLMediaCtrl* mBrowser;
- LLComboBox* mAddressCombo;
- std::string mCurrentURL;
- boost::shared_ptr<LLNotification> mCurNotification;
- std::string mUUID;
-};
-
-#endif // LL_LLFLOATERMEDIABROWSER_H
-
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 881f087d7b..4f683076a8 100644..100755
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -496,6 +496,11 @@ BOOL LLFloaterModelPreview::postBuild()
{
validate_url = "http://secondlife.com/my/account/mesh.php";
}
+ else if (current_grid == "damballah")
+ {
+ // Staging grid has its own naming scheme.
+ validate_url = "http://secondlife-staging.com/my/account/mesh.php";
+ }
else
{
validate_url = llformat("http://secondlife.%s.lindenlab.com/my/account/mesh.php",current_grid.c_str());
@@ -744,6 +749,11 @@ void LLFloaterModelPreview::draw()
if (!mModelPreview->mLoading)
{
+ if ( mModelPreview->getLoadState() == LLModelLoader::ERROR_MATERIALS )
+ {
+ childSetTextArg("status", "[STATUS]", getString("status_material_mismatch"));
+ }
+ else
if ( mModelPreview->getLoadState() > LLModelLoader::ERROR_PARSING )
{
childSetTextArg("status", "[STATUS]", getString(LLModel::getStatusString(mModelPreview->getLoadState() - LLModelLoader::ERROR_PARSING)));
@@ -3304,7 +3314,7 @@ void LLModelPreview::rebuildUploadData()
F32 max_scale = 0.f;
//reorder materials to match mBaseModel
- for (U32 i = 0; i < LLModel::NUM_LODS; i++)
+ for (U32 i = 0; i < LLModel::NUM_LODS-1; i++)
{
if (mBaseModel.size() == mModel[i].size())
{
@@ -3316,6 +3326,7 @@ void LLModelPreview::rebuildUploadData()
if ( !mModel[i][j]->matchMaterialOrder(mBaseModel[j], refFaceCnt, modelFaceCnt ) )
{
+ setLoadState( LLModelLoader::ERROR_MATERIALS );
mFMP->childDisable( "calculate_btn" );
}
}
@@ -4351,11 +4362,6 @@ void LLModelPreview::updateStatusMessages()
{
skinAndRigOk = false;
}
- else
- if ( !isLegacyRigValid() )
- {
- mFMP->childDisable("calculate_btn");
- }
}
if(upload_ok && mModelLoader)
@@ -5071,6 +5077,8 @@ BOOL LLModelPreview::render()
if (!mModel[mPreviewLOD].empty())
{
+ mFMP->childEnable("reset_btn");
+
bool regen = mVertexBuffer[mPreviewLOD].empty();
if (!regen)
{
@@ -5083,7 +5091,7 @@ BOOL LLModelPreview::render()
}
//make sure material lists all match
- for (U32 i = 0; i < LLModel::NUM_LODS; i++)
+ for (U32 i = 0; i < LLModel::NUM_LODS-1; i++)
{
if (mBaseModel.size() == mModel[i].size())
{
@@ -5568,6 +5576,7 @@ void LLFloaterModelPreview::onReset(void* user_data)
assert_main_thread();
LLFloaterModelPreview* fmp = (LLFloaterModelPreview*) user_data;
+ fmp->childDisable("reset_btn");
LLModelPreview* mp = fmp->mModelPreview;
std::string filename = mp->mLODFile[3];
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index 47de99ce25..64324854a5 100644
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -70,7 +70,8 @@ public:
GENERATING_VERTEX_BUFFERS,
GENERATING_LOD,
DONE,
- ERROR_PARSING //basically loading failed
+ ERROR_PARSING, //basically loading failed
+ ERROR_MATERIALS,
} eLoadState;
U32 mState;
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 18c3f76826..acbec531b6 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -1128,19 +1128,78 @@ LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(BOOL auto_open)
{
// Make sure the floater is not minimized (STORM-438).
if (active_inv_floaterp && active_inv_floaterp->isMinimized())
+ {
active_inv_floaterp->setMinimized(FALSE);
+ }
+ }
+ else if (auto_open)
+ {
+ floater_inventory->openFloater();
- return res;
+ res = sidepanel_inventory->getActivePanel();
}
+
+ return res;
+}
+
+//static
+void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const LLUUID& obj_id)
+{
+ LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open);
+
+ if (active_panel)
+ {
+ LL_DEBUGS("Messaging") << "Highlighting" << obj_id << LL_ENDL;
- // C. If no panels are open and we don't want to force open a panel, then just abort out.
- if (!auto_open) return NULL;
-
- // D. Open the inventory side panel floater and use that.
- floater_inventory->openFloater();
- return sidepanel_inventory->getActivePanel();
+ LLViewerInventoryItem * item = gInventory.getItem(obj_id);
+ LLViewerInventoryCategory * cat = gInventory.getCategory(obj_id);
+
+ bool in_inbox = false;
+ bool in_outbox = false;
+
+ LLViewerInventoryCategory * parent_cat = NULL;
+
+ if (item)
+ {
+ parent_cat = gInventory.getCategory(item->getParentUUID());
+ }
+ else if (cat)
+ {
+ parent_cat = gInventory.getCategory(cat->getParentUUID());
+ }
+
+ if (parent_cat)
+ {
+ in_inbox = (LLFolderType::FT_INBOX == parent_cat->getPreferredType());
+ in_outbox = (LLFolderType::FT_OUTBOX == parent_cat->getPreferredType());
+ }
+
+ if (in_inbox || in_outbox)
+ {
+ LLSidepanelInventory * sidepanel_inventory = LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory");
+ LLInventoryPanel * inventory_panel = NULL;
+
+ if (in_inbox)
+ {
+ sidepanel_inventory->openInbox();
+ inventory_panel = sidepanel_inventory->getInboxPanel();
+ }
+ else
+ {
+ sidepanel_inventory->openOutbox();
+ inventory_panel = sidepanel_inventory->getOutboxPanel();
+ }
- return NULL;
+ if (inventory_panel)
+ {
+ inventory_panel->setSelection(obj_id, TAKE_FOCUS_YES);
+ }
+ }
+ else
+ {
+ active_panel->setSelection(obj_id, TAKE_FOCUS_YES);
+ }
+ }
}
void LLInventoryPanel::addHideFolderType(LLFolderType::EType folder_type)
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 8635ebc5c8..2a24327115 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -175,6 +175,8 @@ public:
// Find whichever inventory panel is active / on top.
// "Auto_open" determines if we open an inventory panel if none are open.
static LLInventoryPanel *getActiveInventoryPanel(BOOL auto_open = TRUE);
+
+ static void openInventoryPanelAndSetSelection(BOOL auto_open, const LLUUID& obj_id);
protected:
void openStartFolderOrMyInventory(); // open the first level of inventory
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 58ba0219cc..74fa5d350a 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -57,7 +57,6 @@
#include "llcheckboxctrl.h"
#include "llnotifications.h"
#include "lllineeditor.h"
-#include "llfloatermediabrowser.h"
#include "llfloaterwebcontent.h"
#include "llwindowshade.h"
@@ -1082,26 +1081,6 @@ void LLMediaCtrl::onPopup(const LLSD& notification, const LLSD& response)
{
if (response["open"])
{
- // name of default floater to open
- std::string floater_name = "media_browser";
-
- // look for parent floater name
- if ( gFloaterView )
- {
- if ( gFloaterView->getParentFloater(this) )
- {
- floater_name = gFloaterView->getParentFloater(this)->getInstanceName();
- }
- else
- {
- lldebugs << "No gFloaterView->getParentFloater(this) for onPopuup()" << llendl;
- };
- }
- else
- {
- lldebugs << "No gFloaterView for onPopuup()" << llendl;
- };
-
LLWeb::loadURL(notification["payload"]["url"], notification["payload"]["target"], notification["payload"]["uuid"]);
}
else
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index fc264db5af..146bcbe47b 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -54,7 +54,6 @@
#include "llworldmapmessage.h"
#include "llappviewer.h"
#include "llviewercontrol.h"
-#include "llfloatermediabrowser.h"
#include "llweb.h"
#include "llhints.h"
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp
index df89adb8da..678e4f2843 100644
--- a/indra/newview/llpanelmarketplaceinboxinventory.cpp
+++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp
@@ -189,16 +189,16 @@ void LLInboxFolderViewFolder::draw()
void LLInboxFolderViewFolder::selectItem()
{
- LLFolderViewFolder::selectItem();
-
deFreshify();
+
+ LLFolderViewFolder::selectItem();
}
void LLInboxFolderViewFolder::toggleOpen()
{
- LLFolderViewFolder::toggleOpen();
-
deFreshify();
+
+ LLFolderViewFolder::toggleOpen();
}
void LLInboxFolderViewFolder::computeFreshness()
@@ -270,7 +270,9 @@ BOOL LLInboxFolderViewItem::addToFolder(LLFolderViewFolder* folder, LLFolderView
BOOL LLInboxFolderViewItem::handleDoubleClick(S32 x, S32 y, MASK mask)
{
- return TRUE;
+ deFreshify();
+
+ return LLFolderViewItem::handleDoubleClick(x, y, mask);
}
// virtual
@@ -290,9 +292,9 @@ void LLInboxFolderViewItem::draw()
void LLInboxFolderViewItem::selectItem()
{
- LLFolderViewItem::selectItem();
-
deFreshify();
+
+ LLFolderViewItem::selectItem();
}
void LLInboxFolderViewItem::computeFreshness()
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 04e78e04e3..50dc66ed7c 100755
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -134,7 +134,10 @@ public:
LLFloater* picks_floater = LLFloaterReg::showInstance("picks");
LLPanelPicks* picks = picks_floater->findChild<LLPanelPicks>("panel_picks");
- picks->createNewPick();
+ if (picks)
+ {
+ picks->createNewPick();
+ }
}
void editPick(LLPickData* pick_info)
@@ -147,7 +150,7 @@ public:
params["snapshot_id"] = pick_info->snapshot_id;
params["pick_name"] = pick_info->name;
params["pick_desc"] = pick_info->desc;
- LLFloaterSidePanelContainer::showPanel("my_profile", params);
+ LLFloaterSidePanelContainer::showPanel("picks", params);
}
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type)
@@ -251,7 +254,10 @@ public:
LLFloater* picks_floater = LLFloaterReg::showInstance("picks");
LLPanelPicks* picks = picks_floater->findChild<LLPanelPicks>("panel_picks");
- picks->createNewClassified();
+ if (picks)
+ {
+ picks->createNewClassified();
+ }
}
void openClassified(LLAvatarClassifiedInfo* c_info)
@@ -269,7 +275,7 @@ public:
params["classified_name"] = c_info->name;
params["classified_desc"] = c_info->description;
params["from_search"] = true;
- LLFloaterSidePanelContainer::showPanel("people", "panel_profile_view", params);
+ LLFloaterSidePanelContainer::showPanel("picks", params);
}
else if (mRequestVerb == "edit")
{
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 91f8035556..9d069c3996 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -450,6 +450,24 @@ void LLSidepanelInventory::enableOutbox(bool enabled)
}
}
+void LLSidepanelInventory::openInbox()
+{
+ if (mInboxEnabled)
+ {
+ getChild<LLButton>(INBOX_BUTTON_NAME)->setToggleState(true);
+ onToggleInboxBtn();
+ }
+}
+
+void LLSidepanelInventory::openOutbox()
+{
+ if (mOutboxEnabled)
+ {
+ getChild<LLButton>(OUTBOX_BUTTON_NAME)->setToggleState(true);
+ onToggleOutboxBtn();
+ }
+}
+
void LLSidepanelInventory::onInboxChanged(const LLUUID& inbox_id)
{
// Trigger a load of the entire inbox so we always know the contents and their creation dates for sorting
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
index 4e34926a4b..2c6f807013 100644
--- a/indra/newview/llsidepanelinventory.h
+++ b/indra/newview/llsidepanelinventory.h
@@ -58,6 +58,9 @@ public:
/*virtual*/ void onOpen(const LLSD& key);
LLInventoryPanel* getActivePanel(); // Returns an active inventory panel, if any.
+ LLInventoryPanel* getInboxPanel() const { return mInventoryPanelInbox; }
+ LLInventoryPanel* getOutboxPanel() const { return mInventoryPanelOutbox; }
+
LLPanelMainInventory* getMainInventoryPanel() const { return mPanelMainInventory; }
BOOL isMainInventoryPanelActive() const;
@@ -77,6 +80,9 @@ public:
void enableInbox(bool enabled);
void enableOutbox(bool enabled);
+ void openInbox();
+ void openOutbox();
+
bool isInboxEnabled() const { return mInboxEnabled; }
bool isOutboxEnabled() const { return mOutboxEnabled; }
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 9d8d1be0f5..66187f6b42 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2034,7 +2034,7 @@ bool idle_startup()
show_debug_menus(); // Debug menu visiblity and First Use trigger
// If we've got a startup URL, dispatch it
- LLStartUp::dispatchURL();
+ //LLStartUp::dispatchURL();
// Retrieve information about the land data
// (just accessing this the first time will fetch it,
@@ -2694,12 +2694,12 @@ void LLStartUp::cleanupNameCache()
bool LLStartUp::dispatchURL()
{
// ok, if we've gotten this far and have a startup URL
- if (!getStartSLURL().isValid())
+ if (!getStartSLURL().isValid())
{
return false;
}
- if(getStartSLURL().getType() != LLSLURL::APP)
- {
+ if(getStartSLURL().getType() != LLSLURL::APP)
+ {
// If we started with a location, but we're already
// at that location, don't pop dialogs open.
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 74c4f6d2dc..273bf822bc 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -64,7 +64,6 @@
#include "llfloatergroups.h"
#include "llfloaterhardwaresettings.h"
#include "llfloaterhelpbrowser.h"
-#include "llfloatermediabrowser.h"
#include "llfloaterwebcontent.h"
#include "llfloatermediasettings.h"
#include "llfloaterhud.h"
@@ -226,7 +225,6 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("land_holdings", "floater_land_holdings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLandHoldings>);
LLFloaterReg::add("mem_leaking", "floater_mem_leaking.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMemLeak>);
- LLFloaterReg::add("media_browser", "floater_media_browser.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMediaBrowser>);
LLFloaterReg::add("media_settings", "floater_media_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMediaSettings>);
LLFloaterReg::add("message_critical", "floater_critical.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTOS>);
LLFloaterReg::add("message_tos", "floater_tos.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTOS>);
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 2858330597..67c8a4b902 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -69,7 +69,6 @@
#include "llwindow.h"
-#include "llfloatermediabrowser.h" // for handling window close requests and geometry change requests in media browser windows.
#include "llfloaterwebcontent.h" // for handling window close requests and geometry change requests in media browser windows.
#include <boost/bind.hpp> // for SkinFolder listener
@@ -3374,7 +3373,6 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
{
// This close request is directed at another instance
pass_through = false;
- LLFloaterMediaBrowser::closeRequest(uuid);
LLFloaterWebContent::closeRequest(uuid);
}
}
@@ -3394,7 +3392,6 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
{
// This request is directed at another instance
pass_through = false;
- LLFloaterMediaBrowser::geometryChanged(uuid, plugin->getGeometryX(), plugin->getGeometryY(), plugin->getGeometryWidth(), plugin->getGeometryHeight());
LLFloaterWebContent::geometryChanged(uuid, plugin->getGeometryX(), plugin->getGeometryY(), plugin->getGeometryWidth(), plugin->getGeometryHeight());
}
}
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 22d95563d8..6d45e48d23 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -7701,7 +7701,14 @@ class LLWorldEnvSettings : public view_listener_t
}
else
{
- LLEnvManagerNew::instance().setUseDayCycle(LLEnvManagerNew::instance().getDayCycleName());
+ LLEnvManagerNew &envmgr = LLEnvManagerNew::instance();
+ // reset all environmental settings to track the region defaults, make this reset 'sticky' like the other sun settings.
+ bool use_fixed_sky = false;
+ bool use_region_settings = true;
+ envmgr.setUserPrefs(envmgr.getWaterPresetName(),
+ envmgr.getSkyPresetName(),
+ envmgr.getDayCycleName(),
+ use_fixed_sky, use_region_settings);
}
return true;
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 7cae19a1d2..dca5cdd06d 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1256,14 +1256,7 @@ void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_nam
const BOOL auto_open =
gSavedSettings.getBOOL("ShowInInventory") && // don't open if showininventory is false
!from_name.empty(); // don't open if it's not from anyone.
- LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open);
- if(active_panel)
- {
- LL_DEBUGS("Messaging") << "Highlighting" << obj_id << LL_ENDL;
- LLFocusableElement* focus_ctrl = gFocusMgr.getKeyboardFocus();
- active_panel->setSelection(obj_id, TAKE_FOCUS_NO);
- gFocusMgr.setKeyboardFocus(focus_ctrl);
- }
+ LLInventoryPanel::openInventoryPanelAndSetSelection(auto_open, obj_id);
}
}
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index d81e67bfe2..46e4fc3b02 100755
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -3219,7 +3219,7 @@ F32 LLViewerObject::getLinksetPhysicsCost()
return mLinksetPhysicsCost;
}
-F32 LLViewerObject::getStreamingCost(S32* bytes, S32* visible_bytes)
+F32 LLViewerObject::getStreamingCost(S32* bytes, S32* visible_bytes, F32* unscaled_value) const
{
return 0.f;
}
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index 53e951e483..be5b9819b1 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -340,7 +340,7 @@ public:
virtual void setScale(const LLVector3 &scale, BOOL damped = FALSE);
- virtual F32 getStreamingCost(S32* bytes = NULL, S32* visible_bytes = NULL);
+ virtual F32 getStreamingCost(S32* bytes = NULL, S32* visible_bytes = NULL, F32* unscaled_value = NULL) const;
virtual U32 getTriangleCount();
virtual U32 getHighLODTriangleCount();
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index bdab250b49..6af800f1d7 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -8335,7 +8335,7 @@ void LLVOAvatar::getImpostorValues(LLVector4a* extents, LLVector3& angle, F32& d
void LLVOAvatar::idleUpdateRenderCost()
{
static const U32 ARC_BODY_PART_COST = 200;
- static const U32 ARC_LIMIT = 2048;
+ static const U32 ARC_LIMIT = 20000;
static std::set<LLUUID> all_textures;
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index b2f35892d0..d2d48dc68f 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -34,7 +34,6 @@
#include "llagent.h"
#include "llappviewer.h"
-#include "llfloatermediabrowser.h"
#include "llfloaterwebcontent.h"
#include "llfloaterreg.h"
#include "lllogininstance.h"
@@ -78,32 +77,15 @@ void LLWeb::initClass()
}
-// static
-void LLWeb::loadURL(const std::string& url, const std::string& target, const std::string& uuid)
-{
- loadWebURL(url, target, uuid);
- //if(target == "_internal")
- //{
- // // Force load in the internal browser, as if with a blank target.
- // loadURLInternal(url, "", uuid);
- //}
- //else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
- //{
- // loadURLExternal(url);
- //}
- //else
- //{
- // loadURLInternal(url, target, uuid);
- //}
-}
+
// static
-void LLWeb::loadWebURL(const std::string& url, const std::string& target, const std::string& uuid)
+void LLWeb::loadURL(const std::string& url, const std::string& target, const std::string& uuid)
{
if(target == "_internal")
{
// Force load in the internal browser, as if with a blank target.
- loadWebURLInternal(url, "", uuid);
+ loadURLInternal(url, "", uuid);
}
else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
{
@@ -111,19 +93,13 @@ void LLWeb::loadWebURL(const std::string& url, const std::string& target, const
}
else
{
- loadWebURLInternal(url, target, uuid);
+ loadURLInternal(url, target, uuid);
}
}
// static
-void LLWeb::loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid)
-{
- LLFloaterMediaBrowser::create(url, target, uuid);
-}
-
-// static
// Explicitly open a Web URL using the Web content floater
-void LLWeb::loadWebURLInternal(const std::string &url, const std::string& target, const std::string& uuid)
+void LLWeb::loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid)
{
LLFloaterWebContent::Params p;
p.url(url).target(target).id(uuid);
diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h
index 376abc0ece..0b95f664d6 100644
--- a/indra/newview/llweb.h
+++ b/indra/newview/llweb.h
@@ -42,23 +42,15 @@ class LLWeb
public:
static void initClass();
- /// Load the given url in the user's preferred web browser
- static void loadURL(const std::string& url, const std::string& target, const std::string& uuid = LLStringUtil::null);
- static void loadURL(const std::string& url) { loadURL(url, LLStringUtil::null); }
- /// Load the given url in the user's preferred web browser
- static void loadURL(const char* url, const std::string& target = LLStringUtil::null) { loadURL( ll_safe_string(url), target); }
- /// Load the given url in the Second Life internal web browser
- static void loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null);
- static void loadURLInternal(const std::string &url) { loadURLInternal(url, LLStringUtil::null, LLStringUtil::null);}
/// Load the given url in the operating system's web browser, async if we want to return immediately
/// before browser has spawned
static void loadURLExternal(const std::string& url) {loadURLExternal(url, LLStringUtil::null);}
static void loadURLExternal(const std::string& url, const std::string& uuid);
static void loadURLExternal(const std::string& url, bool async, const std::string& uuid = LLStringUtil::null);
- // Explicitly open a Web URL using the Web content floater vs. the more general media browser
- static void loadWebURL(const std::string& url, const std::string& target, const std::string& uuid);
- static void loadWebURLInternal(const std::string &url, const std::string& target = LLStringUtil::null, const std::string& uuid = LLStringUtil::null);
+ static void loadURL(const std::string& url, const std::string& target = LLStringUtil::null, const std::string& uuid = LLStringUtil::null);
+ // load content using built-in browser
+ static void loadURLInternal(const std::string &url, const std::string& target = LLStringUtil::null, const std::string& uuid = LLStringUtil::null);
/// Returns escaped url (eg, " " to "%20") - used by all loadURL methods
static std::string escapeURL(const std::string& url);
diff --git a/indra/newview/llworldmapmessage.cpp b/indra/newview/llworldmapmessage.cpp
index 66d0d698ba..8307d32336 100644
--- a/indra/newview/llworldmapmessage.cpp
+++ b/indra/newview/llworldmapmessage.cpp
@@ -210,15 +210,14 @@ void LLWorldMapMessage::processMapBlockReply(LLMessageSystem* msg, void**)
}
// Handle the SLURL callback if any
- if(LLWorldMapMessage::getInstance()->mSLURLCallback != NULL)
+ url_callback_t callback = LLWorldMapMessage::getInstance()->mSLURLCallback;
+ if(callback != NULL)
{
U64 handle = to_region_handle(x_world, y_world);
// Check if we reached the requested region
if ((LLStringUtil::compareInsensitive(LLWorldMapMessage::getInstance()->mSLURLRegionName, name)==0)
|| (LLWorldMapMessage::getInstance()->mSLURLRegionHandle == handle))
{
- url_callback_t callback = LLWorldMapMessage::getInstance()->mSLURLCallback;
-
LLWorldMapMessage::getInstance()->mSLURLCallback = NULL;
LLWorldMapMessage::getInstance()->mSLURLRegionName.clear();
LLWorldMapMessage::getInstance()->mSLURLRegionHandle = 0;
diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml
index fbaf4f0a8a..eebc5ddc72 100755
--- a/indra/newview/skins/default/xui/en/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml
@@ -6,6 +6,7 @@
<string name="status_idle"></string>
<string name="status_parse_error">Error: Dae parsing issue - see log for details.</string>
+ <string name="status_material_mismatch">Error: Material of model is not a subset of reference model.</string>
<string name="status_reading_file">Loading...</string>
<string name="status_generating_meshes">Generating Meshes...</string>
<string name="status_vertex_number_overflow">Error: Vertex number is more than 65534, aborted!</string>
@@ -789,7 +790,7 @@
<check_box name="physics_use_hull" follows="left|top" width="130" left_pad="5" height="20" label="Use Convex Hull"/> -->
</panel>
- <!-- ==== STEP 2: Analyse ==== -->
+ <!-- ==== STEP 2: Analyze ==== -->
<view_border
bevel_style="none"
follows="top|left"
@@ -818,7 +819,7 @@
name="method_label"
text_color="White"
top_pad="0">
- Step 2: Analyse
+ Step 2: Analyze
</text>
<text
follows="top|left"
diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml
index 4314c8a9e2..56d79f62c7 100644
--- a/indra/newview/skins/default/xui/en/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_world_map.xml
@@ -468,7 +468,7 @@
left="3"
top_pad="7"
mouse_opaque="true"
- name="region_icon"
+ name="location_icon"
width="16" />
<search_editor
follows="top|right"
diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index 80e310a873..8ac1ac9e09 100644
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -167,13 +167,6 @@
function="Floater.Show"
parameter="message_critical" />
</menu_item_call>
- <menu_item_call
- label="Media Browser Test"
- name="Web Browser Test">
- <menu_item_call.on_click
- function="Advanced.WebBrowserTest"
- parameter="http://join.secondlife.com/"/>
- </menu_item_call>
<menu_item_call
label="Web Content Floater Debug Test"
name="Web Content Floater Debug Test">
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 263d961be1..575e3673c6 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -533,6 +533,14 @@
function="World.EnvSettings"
parameter="midnight" />
</menu_item_call>
+ <menu_item_separator/>
+ <menu_item_call
+ label="Use Region Settings"
+ name="Use Region Settings">
+ <menu_item_call.on_click
+ function="World.EnvSettings"
+ parameter="region" />
+ </menu_item_call>
</menu>
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
index f47e9874b4..0e29ed0d0b 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_adhoc.xml
@@ -22,6 +22,7 @@
draw_border="false"
height="24"
left="25"
+ bottom="1"
name="speaker"
visible="false"
width="20" />
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml
index 8dfdf95e80..77011139bf 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_group.xml
@@ -22,6 +22,7 @@
draw_border="false"
height="24"
left="25"
+ bottom="1"
name="speaker"
visible="false"
width="20" />
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml
index cef698e577..8b56a8f0f6 100644
--- a/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chiclet_im_p2p.xml
@@ -22,6 +22,7 @@
draw_border="false"
height="24"
left="25"
+ bottom="1"
name="speaker"
visible="false"
width="20" />
diff --git a/indra/newview/skins/default/xui/es/panel_people.xml b/indra/newview/skins/default/xui/es/panel_people.xml
index 2fcbb00aed..a9d38dca25 100644
--- a/indra/newview/skins/default/xui/es/panel_people.xml
+++ b/indra/newview/skins/default/xui/es/panel_people.xml
@@ -76,7 +76,7 @@
<button label="Compartir" name="share_btn" tool_tip="Compartir un objeto del inventario"/>
</layout_panel>
<layout_panel name="teleport_btn_lp">
- <button label="Teleportarte" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
+ <button label="Teleporte" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
</layout_panel>
</layout_stack>
<layout_stack name="bottom_bar_ls1">
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index 83747b85c0..4cae6ce5e8 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -3841,6 +3841,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="inventory_item_offered-im">
Ofrecido el item del inventario
</string>
+ <string name="share_alert">
+ Arrastra los ítems desde el invenbtario hasta aquí
+ </string>
<string name="no_session_message">
(La sesión de MI no existe)
</string>
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 3123a4c6fe..b122db9502 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml
@@ -20,7 +20,7 @@
<check_box label="Inclure la date et l&apos;heure pour chaque ligne du journal de chat" name="show_timestamps_check_im"/>
<check_box label="Inclure la date dans le nom du fichier journal" name="logfile_name_datestamp"/>
<text name="log_path_desc">
- Emplacement :
+ Emplacement des journaux :
</text>
<line_editor left="308" name="log_path_string" right="-20"/>
<button label="Parcourir" label_selected="Parcourir" name="log_path_button" width="150"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
index deaec2e14f..37eb6bbeb0 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
@@ -17,9 +17,9 @@
<check_box label="Activé" name="enable_media"/>
<slider label="Chat vocal" name="Voice Volume"/>
<check_box label="Activé" name="enable_voice_check"/>
- <check_box label="Autoriser la lecture automatique du média" name="media_auto_play_btn" tool_tip="Cochez pour autoriser la lecture automatique du média" value="true"/>
- <check_box label="Lecture du média aux autres avatars" name="media_show_on_others_btn" tool_tip="Décochez pour masquer le média aux autres avatars près de vous" value="true"/>
- <check_box label="Lire les sons des gestes" name="gesture_audio_play_btn" tool_tip="Cochez cette case pour entendre les sons associés aux gestes." value="true"/>
+ <check_box label="Autoriser la lecture automatique du média" name="media_auto_play_btn" tool_tip="Cocher pour autoriser la lecture automatique du média." value="true"/>
+ <check_box label="Lire le média attaché aux autres avatars" name="media_show_on_others_btn" tool_tip="Décocher pour masquer le média attaché aux autres avatars près de vous." value="true"/>
+ <check_box label="Lire les sons des gestes" name="gesture_audio_play_btn" tool_tip="Cocher cette case pour entendre les sons associés aux gestes." value="true"/>
<text name="voice_chat_settings">
Paramètres du chat vocal
</text>
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 cb4a74e142..733c3f9a22 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_debug.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Débugger" name="Debug">
+<panel label="Débogage" name="Debug">
<text name="region_text_lbl">
Région :
</text>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index daa31c980a..f9f3366f63 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -4837,7 +4837,7 @@ Essayez avec le chemin d&apos;accès à l&apos;éditeur entre guillemets doubles
Parler
</string>
<string name="Command_View_Label">
- Vue
+ Affichage
</string>
<string name="Command_Voice_Label">
Chat près de vous
diff --git a/indra/newview/skins/default/xui/ru/floater_about_land.xml b/indra/newview/skins/default/xui/ru/floater_about_land.xml
index 488d2cda17..3c278fce52 100644
--- a/indra/newview/skins/default/xui/ru/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ru/floater_about_land.xml
@@ -141,16 +141,16 @@
</panel>
<panel label="СОГЛАШЕНИЕ" name="land_covenant_panel">
<panel.string name="can_resell">
- Приобретенная в этом регионе земля может быть перепродана.
+ Купленная в этом регионе земля может быть перепродана.
</panel.string>
<panel.string name="can_not_resell">
- Приобретенная в этом регионе земля не может быть перепродана.
+ Купленная в этом регионе земля не может быть перепродана.
</panel.string>
<panel.string name="can_change">
- Приобретенная в этом регионе земля может быть объединена или разделена.
+ Купленная в этом регионе земля может быть объединена или разделена.
</panel.string>
<panel.string name="can_not_change">
- Приобретенная в этом регионе земля не может быть объединена или разделена.
+ Купленная в этом регионе земля не может быть объединена или разделена.
</panel.string>
<text name="estate_section_lbl">
Землевладение:
@@ -270,7 +270,7 @@
<name_list name="owner list">
<name_list.columns label="Тип" name="type"/>
<name_list.columns label="Название" name="name"/>
- <name_list.columns label="Количество" name="count"/>
+ <name_list.columns label="Кол-во" name="count"/>
<name_list.columns label="Последний объект" name="mostrecent"/>
</name_list>
</panel>
@@ -286,10 +286,10 @@
Этот параметр недоступен, потому что вы не можете изменять его на этом участке.
</panel.string>
<panel.string name="mature_check_mature">
- Moderate-контент
+ Умеренный контент
</panel.string>
<panel.string name="mature_check_adult">
- Содержимое для взрослых
+ Контент для взрослых
</panel.string>
<panel.string name="mature_check_mature_tooltip">
Информация или содержимое вашего участка расценивается как moderate.
@@ -366,7 +366,7 @@
<combo_box.item label="Аренда" name="item13"/>
<combo_box.item label="Другое" name="item12"/>
</combo_box>
- <check_box label="Moderate-контент" name="MatureCheck" tool_tip=" "/>
+ <check_box label="Умеренный контент" name="MatureCheck" tool_tip=" "/>
<text name="Snapshot:">
Снимок:
</text>
@@ -374,7 +374,7 @@
<text name="allow_label5">
Позволить жителям с других участков:
</text>
- <check_box label="Видеть аватары" name="SeeAvatarsCheck" tool_tip="Жители с других участков могут видеть жителей этого участка и общаться с ними в чате (вы также сможете видеть жителей с других участков и общаться с ними)."/>
+ <check_box label="Видны аватары" name="SeeAvatarsCheck" tool_tip="Жители с других участков могут видеть жителей этого участка и общаться с ними в чате (вы также сможете видеть жителей с других участков и общаться с ними)."/>
<text name="landing_point">
В точку телепортации: [LANDING]
</text>
@@ -395,7 +395,7 @@
</text>
<combo_box name="media type" tool_tip="Укажите, чем является ссылка – видео, веб-страница или другое медиа"/>
<text name="at URL:">
- Домашняя страница:
+ Дом. страница:
</text>
<button label="Задать" name="set_media_url"/>
<text name="Description:">
@@ -403,7 +403,7 @@
</text>
<line_editor name="url_description" tool_tip="Текст, показываемый рядом с кнопкой проигрывания/загрузки"/>
<text name="Media texture:">
- Заменяемая текстура:
+ Замена текстуры:
</text>
<texture_picker name="media texture" tool_tip="Щелкните для выбора изображения"/>
<text name="replace_texture_help">
@@ -416,7 +416,7 @@
<spinner name="media_size_width" tool_tip="Размер отображения веб-медиа, по умолчанию – 0."/>
<spinner name="media_size_height" tool_tip="Размер отображения веб-медиа, по умолчанию – 0."/>
<text name="pixels">
- пикселей
+ пикс.
</text>
<text name="Options:">
Опции:
@@ -425,7 +425,7 @@
</panel>
<panel label="ЗВУК" name="land_audio_panel">
<text name="MusicURL:">
- URL-адрес для музыки:
+ URL музыки:
</text>
<text name="Sound:">
Звук:
@@ -448,18 +448,18 @@
(Определено на землевладении)
</panel.string>
<panel.string name="allow_public_access">
- Разрешить публичный доступ ([MATURITY]) (Примечание. Снятие приведет к созданию линий запрета)
+ Разрешить общий доступ ([MATURITY]) (Снятие приведет к созданию линий запрета)
</panel.string>
<panel.string name="estate_override">
- Часть этих параметров установлены на уровне землевладения
+ Часть этих параметров установлена на уровне землевладения
</panel.string>
<text name="Limit access to this parcel to:">
Доступ на этот участок
</text>
<text name="Only Allow">
- Ограничить жителям доступ проверкой:
+ Разрешить доступ только жителям, у которых:
</text>
- <check_box label="Информация об оплате в файле [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Банить нераспознанных жителей."/>
+ <check_box label="Записана информация об оплате [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Банить нераспознанных жителей."/>
<check_box label="Проверка возраста [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Банить жителей, не прошедших проверку возраста. Более подробная информация находится здесь: [SUPPORT_SITE]."/>
<check_box label="Разрешить доступ группе: [GROUP]" name="GroupCheck" tool_tip="Группа устанавливается на основной вкладке."/>
<check_box label="Продать доступ:" name="PassCheck" tool_tip="Разрешить временный доступ к участку."/>
diff --git a/indra/newview/skins/default/xui/ru/floater_bulk_perms.xml b/indra/newview/skins/default/xui/ru/floater_bulk_perms.xml
index a497c14cac..ccf13cf02a 100644
--- a/indra/newview/skins/default/xui/ru/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/ru/floater_bulk_perms.xml
@@ -24,7 +24,7 @@
<button label="√ Все" name="check_all"/>
<button label="Очистить" label_selected="Нет" name="check_none"/>
<text name="newperms">
- Новые разрешения на использование контента
+ Новые разрешения на контент
</text>
<text name="GroupLabel">
Группа:
diff --git a/indra/newview/skins/default/xui/ru/floater_buy_currency.xml b/indra/newview/skins/default/xui/ru/floater_buy_currency.xml
index 197a2a3327..7690ff2a6c 100644
--- a/indra/newview/skins/default/xui/ru/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/ru/floater_buy_currency.xml
@@ -60,7 +60,7 @@
<button label="Приобрести" name="buy_btn"/>
<button label="Отмена" name="cancel_btn"/>
<text name="info_cannot_buy">
- Невозможно приобрести
+ Нельзя купить
</text>
<button label="Продолжить в Интернете" name="error_web"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_color_picker.xml b/indra/newview/skins/default/xui/ru/floater_color_picker.xml
index d6e737d584..b7034bef0b 100644
--- a/indra/newview/skins/default/xui/ru/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/ru/floater_color_picker.xml
@@ -13,7 +13,7 @@
Оттенок:
</text>
<text name="s_val_text">
- Насыщенность:
+ Насыщен.:
</text>
<text name="l_val_text">
Яркость:
diff --git a/indra/newview/skins/default/xui/ru/floater_destinations.xml b/indra/newview/skins/default/xui/ru/floater_destinations.xml
index e769812beb..5ba0841564 100644
--- a/indra/newview/skins/default/xui/ru/floater_destinations.xml
+++ b/indra/newview/skins/default/xui/ru/floater_destinations.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Destinations" title="МЕСТА"/>
+<floater name="Destinations" title="ПУНКТЫ"/> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/ru/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/ru/floater_edit_day_cycle.xml
index 1adc8173c6..61d708c567 100644
--- a/indra/newview/skins/default/xui/ru/floater_edit_day_cycle.xml
+++ b/indra/newview/skins/default/xui/ru/floater_edit_day_cycle.xml
@@ -16,25 +16,25 @@
-Выбор настройки-
</string>
<text name="label">
- Название настройки:
+ Имя настройки:
</text>
<text name="note">
Примечание. Если изменить имя настройки, будет создана новая настройка, а изменения в существующей не будут сохранены.
</text>
<text name="hint_item1">
- - Чтобы изменить определенные настройки неба и времени, выберите соответствующую вкладку.
+ - Для изменения настроек неба и времени выберите соответствующую вкладку.
</text>
<text name="hint_item2">
- - Чтобы задать время переходов, вабирайте и перетаскивайте вкладки.
+ - Чтобы задать время переходов, перетаскивайте вкладки.
</text>
<text name="hint_item3">
- - Используйте скребок для предварительного просмотра суточного цикла.
+ - Скребок служит для просмотра суточного цикла.
</text>
<panel name="day_cycle_slider_panel">
<multi_slider initial_value="0" name="WLTimeSlider"/>
<multi_slider initial_value="0" name="WLDayCycleKeys"/>
- <button label="Добавить отметку" label_selected="Добавить отметку" name="WLAddKey"/>
- <button label="Удалить отметку" label_selected="Удалить отметку" name="WLDeleteKey"/>
+ <button label="+ отметку" label_selected="+ отметку" name="WLAddKey"/>
+ <button label="- отметку" label_selected="- отметку" name="WLDeleteKey"/>
<text name="WL12am">
12 ночи
</text>
@@ -91,14 +91,14 @@
</text>
</panel>
<text name="WLCurKeyPresetText">
- Настройка неба:
+ Небо:
</text>
- <combo_box label="Стандартная" name="WLSkyPresets"/>
+ <combo_box label="Стандарт" name="WLSkyPresets"/>
<text name="WLCurKeyTimeText">
Время:
</text>
<time name="time" value="6:00"/>
- <check_box label="Установить в качестве нового суточного цикла" name="make_default_cb"/>
+ <check_box label="Установить как новый суточный цикл" name="make_default_cb"/>
<button label="Сохранить" name="save"/>
<button label="Отмена" name="cancel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/ru/floater_edit_sky_preset.xml
index aa60cb6337..354120ea72 100644
--- a/indra/newview/skins/default/xui/ru/floater_edit_sky_preset.xml
+++ b/indra/newview/skins/default/xui/ru/floater_edit_sky_preset.xml
@@ -19,7 +19,7 @@
Чтобы изменить настройку, задайте ее параметры с помощью элементов управления и нажмите кнопку «Сохранить».
</text>
<text name="label">
- Название настройки:
+ Имя настройки:
</text>
<text name="note">
Примечание. Если изменить имя настройки, будет создана новая настройка, а изменения в существующей не будут сохранены.
@@ -58,7 +58,7 @@
<text name="SunGlowText">
Сияние солнца
</text>
- <slider label="Отчетливость" name="WLGlowB"/>
+ <slider label="Фокус" name="WLGlowB"/>
<slider label="Размер" name="WLGlowR"/>
<text name="WLStarText">
Яркость звезд
@@ -102,7 +102,7 @@
</text>
<time name="WLDayTime" value="6:00"/>
<text name="WLEastAngleText">
- Смещение относительно востока
+ Смещение отн. востока
</text>
</panel>
<panel label="ОБЛАКА" name="Clouds">
@@ -122,7 +122,7 @@
Размеры
</text>
<text name="WLCloudDetailText">
- Детализация (положение/плотность)
+ Детали (положение/плотность)
</text>
<slider label="X" name="WLCloudDetailX"/>
<slider label="Y" name="WLCloudDetailY"/>
diff --git a/indra/newview/skins/default/xui/ru/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/ru/floater_edit_water_preset.xml
index 3befe4b038..f6def86380 100644
--- a/indra/newview/skins/default/xui/ru/floater_edit_water_preset.xml
+++ b/indra/newview/skins/default/xui/ru/floater_edit_water_preset.xml
@@ -19,7 +19,7 @@
Чтобы изменить настройку, задайте ее параметры с помощью элементов управления и нажмите кнопку «Сохранить».
</text>
<text name="label">
- Название настройки:
+ Имя настройки:
</text>
<text name="note">
Примечание. Если изменить имя настройки, будет создана новая настройка, а изменения в существующей не будут сохранены.
diff --git a/indra/newview/skins/default/xui/ru/floater_god_tools.xml b/indra/newview/skins/default/xui/ru/floater_god_tools.xml
index ec64a5c7af..81329475aa 100644
--- a/indra/newview/skins/default/xui/ru/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/ru/floater_god_tools.xml
@@ -72,10 +72,10 @@
</panel>
<panel label="Запрос" name="request">
<text name="Destination:">
- Место назначения:
+ Пункт назначения:
</text>
<combo_box name="destination">
- <combo_box.item label="назначенное" name="item1"/>
+ <combo_box.item label="назначенный" name="item1"/>
<combo_box.item label="текущий регион" name="item2"/>
</combo_box>
<text name="Request:">
diff --git a/indra/newview/skins/default/xui/ru/floater_image_preview.xml b/indra/newview/skins/default/xui/ru/floater_image_preview.xml
index ae7c77ea0e..dbc4c32b98 100644
--- a/indra/newview/skins/default/xui/ru/floater_image_preview.xml
+++ b/indra/newview/skins/default/xui/ru/floater_image_preview.xml
@@ -23,7 +23,7 @@
</combo_box>
<text name="bad_image_text">
Невозможно прочитать изображение.
-Попробуйте сохранить изображение как 24-разрядный TGA-файл (Targa).
+Попробуйте сохранить изображение как 24-битный TGA-файл (Targa).
</text>
<check_box label="Использовать сжатие без потерь" name="lossless_check"/>
<button label="Отмена" name="cancel_btn"/>
diff --git a/indra/newview/skins/default/xui/ru/floater_joystick.xml b/indra/newview/skins/default/xui/ru/floater_joystick.xml
index cc93152225..66568563da 100644
--- a/indra/newview/skins/default/xui/ru/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/ru/floater_joystick.xml
@@ -3,7 +3,7 @@
<floater.string name="NoDevice">
устройство не выбрано
</floater.string>
- <check_box label="Включить джойстик:" name="enable_joystick"/>
+ <check_box label="Вкл. джойстик:" name="enable_joystick"/>
<spinner label="Наложение по X" name="JoystickAxis1"/>
<spinner label="Наложение по Y" name="JoystickAxis2"/>
<spinner label="Наложение по Z" name="JoystickAxis0"/>
diff --git a/indra/newview/skins/default/xui/ru/floater_lagmeter.xml b/indra/newview/skins/default/xui/ru/floater_lagmeter.xml
index 48f7dd969f..c420006a03 100644
--- a/indra/newview/skins/default/xui/ru/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/ru/floater_lagmeter.xml
@@ -106,7 +106,7 @@
Возможная причина: слишком много физических объектов
</floater.string>
<floater.string name="server_scripts_cause_msg">
- Возможная причина: слишком мало физических объектов
+ Возможная причина: слишком много скриптовых объектов
</floater.string>
<floater.string name="server_net_cause_msg">
Возможная причина: слишком большой сетевой трафик
diff --git a/indra/newview/skins/default/xui/ru/floater_land_holdings.xml b/indra/newview/skins/default/xui/ru/floater_land_holdings.xml
index c88c88988b..17d347867d 100644
--- a/indra/newview/skins/default/xui/ru/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/ru/floater_land_holdings.xml
@@ -9,7 +9,7 @@
<scroll_list.columns label="Тип" name="type"/>
<scroll_list.columns label="Площадь" name="area"/>
</scroll_list>
- <button label="Телепортация" label_selected="Телепортация" name="Teleport" tool_tip="Телепортироваться в центр этой земли."/>
+ <button label="Телепорт" label_selected="Телепорт" name="Teleport" tool_tip="Телепортироваться в центр этой земли."/>
<button label="Карта" label_selected="Карта" name="Show on Map" tool_tip="Показать эту землю на карте мира."/>
<text name="contrib_label">
Ваши вложения в группы:
diff --git a/indra/newview/skins/default/xui/ru/floater_model_wizard.xml b/indra/newview/skins/default/xui/ru/floater_model_wizard.xml
index 204f752cd9..ef2fe8e5a5 100644
--- a/indra/newview/skins/default/xui/ru/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/ru/floater_model_wizard.xml
@@ -13,7 +13,7 @@
</panel>
<panel name="content">
<text name="advanced_users_text">
- Пользователям, работающим в расширенном режиме: если вы умеете создавать трехмерные графические объекты, то, возможно, захотите воспользоваться средством Advanced Uploader, которое предоставляет расширенные возможности передачи объектов.
+ Пользователям в расширенном режиме: если вы умеете создавать трехмерные графические объекты, то, возможно, захотите воспользоваться средством Advanced Uploader, которое предоставляет расширенные возможности передачи объектов.
</text>
<button label="Перейти в расширенный режим" name="switch_to_advanced"/>
<text name="Cache location">
@@ -78,17 +78,17 @@
<panel name="physics_panel">
<panel name="header_panel">
<text name="header_text">
- Настроить физические параметры
+ Настроить физику
</text>
</panel>
<text name="description">
Мы создадим форму для внешнего каркаса модели. Настройте уровень детализации формы в соответствии с целями, для которых предназначена модель.
</text>
<panel name="content">
- <button label="Пересчитать физические данные" name="recalculate_physics_btn"/>
+ <button label="Пересчитать физику" name="recalculate_physics_btn"/>
<button label="Пересчет..." name="recalculating_physics_btn"/>
<text name="lod_label">
- Просмотр физических данных
+ Просмотр физики
</text>
<combo_box name="preview_lod_combo2" tool_tip="Уровень детализации при предварительном просмотре">
<combo_item name="high">
diff --git a/indra/newview/skins/default/xui/ru/floater_select_key.xml b/indra/newview/skins/default/xui/ru/floater_select_key.xml
index 84cc4a3ef3..99c2b9a2c4 100644
--- a/indra/newview/skins/default/xui/ru/floater_select_key.xml
+++ b/indra/newview/skins/default/xui/ru/floater_select_key.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="modal container">
<text name="Save item as:">
- Нажмите кнопку для установки триггера включения разговора.
+ Нажмите клавишу для включения/выключения речи.
</text>
<button label="Отмена" label_selected="Отмена" name="Cancel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_snapshot.xml b/indra/newview/skins/default/xui/ru/floater_snapshot.xml
index a3b40a4f1c..f85d602be7 100644
--- a/indra/newview/skins/default/xui/ru/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/ru/floater_snapshot.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Snapshot" title="ПРОСМОТР СНИМКА">
<floater.string name="unknown">
- неизвестен
+ неизвестно
</floater.string>
<radio_group label="Тип снимка" name="snapshot_type_radio">
<radio_item label="Электронная почта" name="postcard"/>
diff --git a/indra/newview/skins/default/xui/ru/floater_tools.xml b/indra/newview/skins/default/xui/ru/floater_tools.xml
index 660eca51c6..eb9083f7fc 100644
--- a/indra/newview/skins/default/xui/ru/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ru/floater_tools.xml
@@ -1,28 +1,28 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="toolbox floater" short_title="ИНСТРУМЕНТЫ ДЛЯ СТРОИТЕЛЬСТВА">
<floater.string name="status_rotate">
- Перемещайте цветные полосы для вращения объекта
+ Перетягивайте цветные полосы для вращения объекта
</floater.string>
<floater.string name="status_scale">
- Щелкните и переместите для растяжения выбранной стороны
+ Щелкните и перетащите для растяжения выбранной стороны
</floater.string>
<floater.string name="status_move">
- Переместите для перемещения, переместите с одновременным нажатием клавиши Shift для копирования
+ Перемещение: перетащить, копирование: перетащить при нажатой клавише Shift
</floater.string>
<floater.string name="status_modifyland">
Щелкните и удерживайте для изменения земли
</floater.string>
<floater.string name="status_camera">
- Щелкните и переместите для перемещения камеры
+ Щелкните и перетащите для перемещения камеры
</floater.string>
<floater.string name="status_grab">
- Переместите для перемещения, нажмите клавишу Ctrl для подъема, нажмите клавиши Ctrl+Shift для вращения
+ Перемещение: перетащить, подъем: нажать Ctrl, вращение: нажать Ctrl+Shift
</floater.string>
<floater.string name="status_place">
Щелкните для создания
</floater.string>
<floater.string name="status_selectland">
- Щелкните и переместите для выделения земли
+ Щелкните и перетащите для выделения земли
</floater.string>
<floater.string name="status_selectcount">
Выбрано объектов: [OBJ_COUNT], влияние на землю [LAND_IMPACT]
@@ -30,13 +30,13 @@
<floater.string name="status_remaining_capacity">
Остаток емкости [LAND_CAPACITY].
</floater.string>
- <button name="button focus" tool_tip="Отчетливость"/>
+ <button name="button focus" tool_tip="Фокус"/>
<button name="button move" tool_tip="Переместить"/>
<button name="button edit" tool_tip="Изменить"/>
<button name="button create" tool_tip="Создать"/>
<button name="button land" tool_tip="Земля"/>
<text name="text status">
- Переместите для перемещения, переместите с одновременным нажатием клавиши Shift для копирования
+ Перемещение: перетащить, копирование: перетащить при нажатой клавише Shift
</text>
<radio_group name="focus_radio_group">
<radio_item label="Увеличение" name="radio zoom"/>
@@ -52,14 +52,14 @@
<radio_group name="edit_radio_group">
<radio_item label="Переместить" name="radio position"/>
<radio_item label="Вращение (Ctrl)" name="radio rotate"/>
- <radio_item label="Растягивание (Ctrl+Shift)" name="radio stretch"/>
+ <radio_item label="Растяжка (Ctrl+Shift)" name="radio stretch"/>
<radio_item label="Выбор грани" name="radio select face"/>
</radio_group>
<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 label="Растяжка обеих сторон" name="checkbox uniform label">
+ Растяжка обеих сторон
</text>
<check_box initial_value="истина" label="Растягивать текстуры" name="checkbox stretch textures"/>
<check_box initial_value="истина" label="Привязка" name="checkbox snap to grid"/>
@@ -79,9 +79,9 @@
<button name="ToolRing" tool_tip="Кольцо"/>
<button name="ToolTree" tool_tip="Дерево"/>
<button name="ToolGrass" tool_tip="Трава"/>
- <check_box label="Оставить инструмент выбранным" name="checkbox sticky"/>
- <check_box label="Копировать выделенное" name="checkbox copy selection"/>
- <check_box initial_value="истина" label="Центрировать копию" name="checkbox copy centers"/>
+ <check_box label="Держать инструмент" name="checkbox sticky"/>
+ <check_box label="Копировать выдел." name="checkbox copy selection"/>
+ <check_box initial_value="истина" label="Центрир. копию" name="checkbox copy centers"/>
<check_box label="Повернуть копию" name="checkbox copy rotates"/>
<radio_group name="land_radio_group">
<radio_item label="Выбрать землю" name="radio select land"/>
@@ -105,7 +105,7 @@
<slider_bar initial_value="0.00" name="slider force"/>
<button label="Применить" label_selected="Применить" name="button apply to selection" tool_tip="Изменить выбранную землю"/>
<text name="selection_empty">
- Ничего не выбрано.
+ Не выбрано.
</text>
<text name="remaining_capacity">
[CAPACITY_STRING] [secondlife:///app/openfloater/object_weights Дополнительная информация]
@@ -168,7 +168,7 @@
<check_box label="Поделиться" name="checkbox share with group" tool_tip="Позволить всем участникам выбранной группы получить установленные вам права на этот объект. Для включения ролевых ограничений необходимо произвести сделку."/>
<button label="Сделка" label_selected="Сделка" name="button deed" tool_tip="В результате сделки объект передается группе, при этом права на него будут соответствовать правам следующего владельца. Переданный группе объект может передаваться должностным лицом группы."/>
<text name="label click action">
- Действие по щелчку:
+ По щелчку:
</text>
<combo_box name="clickaction">
<combo_box.item label="Коснуться (по умолчанию)" name="Touch/grab(default)"/>
@@ -185,7 +185,7 @@
<combo_box.item label="Оригинал" name="Original"/>
</combo_box>
<spinner label="Цена: L$" name="Edit Cost"/>
- <check_box label="Показать в результатах поиска" name="search_check" tool_tip="Показывать объект в результатах поиска"/>
+ <check_box label="Показать в поиске" name="search_check" tool_tip="Показывать объект в результатах поиска"/>
<panel name="perms_build">
<text name="perm_modify">
Этот объект можно изменять
@@ -349,9 +349,9 @@
<spinner label="Парусность" name="FlexFriction"/>
<spinner label="Ветер" name="FlexWind"/>
<spinner label="Упругость" name="FlexTension"/>
- <spinner label="Действие по X" name="FlexForceX"/>
- <spinner label="Действие по Y" name="FlexForceY"/>
- <spinner label="Действие по Z" name="FlexForceZ"/>
+ <spinner label="X-действие" name="FlexForceX"/>
+ <spinner label="Y-действие" name="FlexForceY"/>
+ <spinner label="Z-действие" name="FlexForceZ"/>
<check_box label="Свет" name="Light Checkbox Ctrl" tool_tip="Объект будет излучать свет"/>
<color_swatch name="colorswatch" tool_tip="Щелкните для выбора цвета"/>
<texture_picker label="" name="light texture control" tool_tip="Щелкните для выбора проецируемого изображения (действует только с включенной отложенной отрисовкой)"/>
@@ -362,7 +362,7 @@
<spinner label="Ослабление" name="Light Falloff"/>
<spinner label="Окружение" name="Light Ambiance"/>
<text name="label physicsshapetype">
- Тип физической формы:
+ Тип физич. формы:
</text>
<combo_box name="Physics Shape Type Combo Ctrl" tool_tip="Выберите тип физической формы"/>
<combo_box name="material">
@@ -394,7 +394,7 @@
<text name="glow label">
Свечение
</text>
- <check_box label="Собственная яркость" name="checkbox fullbright"/>
+ <check_box label="Собств. яркость" name="checkbox fullbright"/>
<text name="tex gen">
Наложение
</text>
@@ -476,7 +476,7 @@
Площадь: [AREA] м²
</text>
<button label="О земле" label_selected="О земле" name="button about land"/>
- <check_box label="Показать владельцев" name="checkbox show owners" tool_tip="Цвет участка в зависимости от типа владения: зеленый = ваша земля голубой = земля вашей группы красный = чужая земля желтый = для продажи фиолетовый = для аукциона серый = общая"/>
+ <check_box label="Показать владельцев" name="checkbox show owners" tool_tip="Цвет участка в зависимости от типа владения: зеленый = ваша земля; голубой = земля вашей группы; красный = чужая земля; желтый = для продажи; фиолетовый = для аукциона; серый = общая"/>
<text name="label_parcel_modify">
Изменение участка
</text>
diff --git a/indra/newview/skins/default/xui/ru/floater_toybox.xml b/indra/newview/skins/default/xui/ru/floater_toybox.xml
index eb03e8c8bf..8d7431d393 100644
--- a/indra/newview/skins/default/xui/ru/floater_toybox.xml
+++ b/indra/newview/skins/default/xui/ru/floater_toybox.xml
@@ -6,5 +6,5 @@
<text name="toybox label 2">
Кнопки будут отображены в исходном виде или в виде значков, в зависимости от настроек каждой панели инструментов.
</text>
- <button label="Восстановить умолчания" label_selected="Восстановить умолчания" name="btn_restore_defaults"/>
+ <button label="Вернуть стандартные" label_selected="Вернуть стандартные" name="btn_restore_defaults"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_voice_controls.xml b/indra/newview/skins/default/xui/ru/floater_voice_controls.xml
index 6520a4342c..c1fb858d48 100644
--- a/indra/newview/skins/default/xui/ru/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/ru/floater_voice_controls.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_voice_controls" title="УПРАВЛЕНИЕ ГОЛОСОМ">
<string name="title_nearby">
- Голоса собеседников
+ Настройки голоса
</string>
<string name="title_group">
Звонок группе [GROUP]
diff --git a/indra/newview/skins/default/xui/ru/floater_windlight_options.xml b/indra/newview/skins/default/xui/ru/floater_windlight_options.xml
index 6667e6b19a..bbb37aaaa0 100644
--- a/indra/newview/skins/default/xui/ru/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/ru/floater_windlight_options.xml
@@ -98,7 +98,7 @@
<text name="SunGlowText">
Сияние солнца
</text>
- <slider label="Отчетливость" name="WLGlowB"/>
+ <slider label="Фокус" name="WLGlowB"/>
<slider label="Размер" name="WLGlowR"/>
<text name="SceneGammaText">
Гамма-коррекция сцены
diff --git a/indra/newview/skins/default/xui/ru/floater_world_map.xml b/indra/newview/skins/default/xui/ru/floater_world_map.xml
index 5fa45bd5e5..ef8dfe22ae 100644
--- a/indra/newview/skins/default/xui/ru/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/ru/floater_world_map.xml
@@ -37,7 +37,7 @@
</text>
<check_box initial_value="истина" name="events_mature_chk"/>
<text name="events_mature_label">
- Умеренный
+ Умеренные
</text>
<text name="events_adult_label">
Для взрослых
@@ -62,7 +62,7 @@
Место:
</text>
<button label="Телепортация" name="Teleport" tool_tip="Телепортация в выбранное место"/>
- <button label="Копировать URL-адрес SL" name="copy_slurl" tool_tip="Копировать текущее место в виде URL-адреса SL для использования в Интернете."/>
+ <button label="Копировать URL SL" name="copy_slurl" tool_tip="Копировать текущее место в виде URL-адреса SL для использования в интернете."/>
<button label="Показать выбранное" name="Show Destination" tool_tip="Центрировать карту на выбранном месте"/>
</panel>
<panel name="layout_panel_5">
diff --git a/indra/newview/skins/default/xui/ru/menu_attachment_other.xml b/indra/newview/skins/default/xui/ru/menu_attachment_other.xml
index 72063737eb..fb1c24448b 100644
--- a/indra/newview/skins/default/xui/ru/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/ru/menu_attachment_other.xml
@@ -4,7 +4,7 @@
<menu_item_call label="Смотреть профиль" name="Profile..."/>
<menu_item_call label="В друзья" name="Add Friend"/>
<menu_item_call label="IM" name="Send IM..."/>
- <menu_item_call label="Позвонить" name="Call"/>
+ <menu_item_call label="Звонок" name="Call"/>
<menu_item_call label="Пригласить в группу" name="Invite..."/>
<menu_item_call label="Заблокировать" name="Avatar Mute"/>
<menu_item_call label="Пожаловаться" name="abuse"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_gesture_gear.xml b/indra/newview/skins/default/xui/ru/menu_gesture_gear.xml
index 78b1768761..d0b68cefbd 100644
--- a/indra/newview/skins/default/xui/ru/menu_gesture_gear.xml
+++ b/indra/newview/skins/default/xui/ru/menu_gesture_gear.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="menu_gesture_gear">
- <menu_item_call label="Добавить/удалить из избранного" name="activate"/>
+ <menu_item_call label="Добавить в избранное/удалить" name="activate"/>
<menu_item_call label="Копировать" name="copy_gesture"/>
<menu_item_call label="Вставить" name="paste"/>
<menu_item_call label="Копировать UUID" name="copy_uuid"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/ru/menu_inventory_gear_default.xml
index d500f0fac6..9fc0b6d44e 100644
--- a/indra/newview/skins/default/xui/ru/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/ru/menu_inventory_gear_default.xml
@@ -8,7 +8,7 @@
<menu_item_call label="Показать фильтры" name="show_filters"/>
<menu_item_call label="Сбросить фильтры" name="reset_filters"/>
<menu_item_call label="Закрыть все папки" name="close_folders"/>
- <menu_item_call label="Очистить Lost and Found" name="empty_lostnfound"/>
+ <menu_item_call label="Очистить бюро находок" name="empty_lostnfound"/>
<menu_item_call label="Сохранить текстуру как" name="Save Texture As"/>
<menu_item_call label="Поделиться" name="Share"/>
<menu_item_call label="Найти оригинал" name="Find Original"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_landmark.xml b/indra/newview/skins/default/xui/ru/menu_landmark.xml
index 11d6e37e81..24b60f9d86 100644
--- a/indra/newview/skins/default/xui/ru/menu_landmark.xml
+++ b/indra/newview/skins/default/xui/ru/menu_landmark.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="landmark_overflow_menu">
- <menu_item_call label="Копировать URL-адрес SL" name="copy"/>
+ <menu_item_call label="Копировать URL SL" name="copy"/>
<menu_item_call label="Удалить" name="delete"/>
<menu_item_call label="Создать подборку" name="pick"/>
<menu_item_call label="Добавить в любимые" name="add_to_favbar"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/ru/menu_model_import_gear_default.xml
index b7949b30d9..5ae5e7dfbc 100644
--- a/indra/newview/skins/default/xui/ru/menu_model_import_gear_default.xml
+++ b/indra/newview/skins/default/xui/ru/menu_model_import_gear_default.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="model_menu_gear_default">
<menu_item_check label="Показать грани" name="show_edges"/>
- <menu_item_check label="Показать физические параметры" name="show_physics"/>
+ <menu_item_check label="Показать физику" name="show_physics"/>
<menu_item_check label="Показать текстуры" name="show_textures"/>
<menu_item_check label="Показать вес кожи" name="show_skin_weight"/>
<menu_item_check label="Показать положение сочленений" name="show_joint_positions"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_participant_list.xml b/indra/newview/skins/default/xui/ru/menu_participant_list.xml
index 8bbf2d52bf..932ad5bacf 100644
--- a/indra/newview/skins/default/xui/ru/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/ru/menu_participant_list.xml
@@ -5,7 +5,7 @@
<menu_item_call label="Открыть профиль" name="View Profile"/>
<menu_item_call label="Добавить в друзья" name="Add Friend"/>
<menu_item_call label="IM" name="IM"/>
- <menu_item_call label="Позвонить" name="Call"/>
+ <menu_item_call label="Звонок" name="Call"/>
<menu_item_call label="Поделиться" name="Share"/>
<menu_item_call label="Заплатить" name="Pay"/>
<menu_item_check label="Показывать значки участников" name="View Icons"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/ru/menu_places_gear_landmark.xml
index a838dd5c42..b1ebd4af83 100644
--- a/indra/newview/skins/default/xui/ru/menu_places_gear_landmark.xml
+++ b/indra/newview/skins/default/xui/ru/menu_places_gear_landmark.xml
@@ -8,7 +8,7 @@
<menu_item_call label="Восстановить вещь" name="restore_item"/>
<menu_item_call label="Вырезать" name="cut"/>
<menu_item_call label="Копировать закладку" name="copy_landmark"/>
- <menu_item_call label="Копировать URL-адрес SL" name="copy_slurl"/>
+ <menu_item_call label="Копировать URL SL" name="copy_slurl"/>
<menu_item_call label="Вставить" name="paste"/>
<menu_item_call label="Переименовать" name="rename"/>
<menu_item_call label="Удалить" name="delete"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml
index 322a27003f..b9f403c04b 100644
--- a/indra/newview/skins/default/xui/ru/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml
@@ -54,7 +54,7 @@
<menu_item_check label="Владельцы земли" name="Land Owners"/>
<menu_item_check label="Координаты" name="Coordinates"/>
<menu_item_check label="Свойства участка" name="Parcel Properties"/>
- <menu_item_check label="Дополнительное меню" name="Show Advanced Menu"/>
+ <menu_item_check label="Меню «Дополнительно»" name="Show Advanced Menu"/>
</menu>
<menu_item_call label="Телепортироваться домой" name="Teleport Home"/>
<menu_item_call label="Установить дом здесь" name="Set Home to Here"/>
@@ -203,7 +203,7 @@
<menu_item_check label="Поиск" name="Search"/>
<menu_item_call label="Освободить клавиши" name="Release Keys"/>
<menu_item_call label="Сбросить размер интерфейса" name="Set UI Size to Default"/>
- <menu_item_check label="Показать дополнительное меню – устаревшее сочетание клавиш" name="Show Advanced Menu - legacy shortcut"/>
+ <menu_item_check label="Показать меню «Дополнительно» - старое сочетание клавиш" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="Закрыть окно" name="Close Window"/>
<menu_item_call label="Закрыть все окна" name="Close All Windows"/>
<menu_item_call label="Сохранить снимок на диске" name="Snapshot to Disk"/>
diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml
index 87ae9d06dd..d43d907164 100644
--- a/indra/newview/skins/default/xui/ru/notifications.xml
+++ b/indra/newview/skins/default/xui/ru/notifications.xml
@@ -724,13 +724,13 @@
Телепортация сейчас заблокирована. Повторите попытку позже. Если все равно не удается телепортироваться, выйдите из программы и войдите снова, чтобы устранить проблему.
</notification>
<notification name="nolandmark_tport">
- Системе не удалось определить место назначения закладки.
+ Системе не удалось определить пункт назначения закладки.
</notification>
<notification name="timeout_tport">
Системе не удалось выполнить подключение телепорта. Повторите попытку позже.
</notification>
<notification name="noaccess_tport">
- У вас нет доступа к точке назначения этого телепорта.
+ У вас нет доступа в пункт назначения этого телепорта.
</notification>
<notification name="missing_attach_tport">
Ваши присоединения еще не доставлены. Подождите несколько секунд либо выйдите из программы и войдите снова, прежде чем повторить попытку телепортации.
@@ -745,7 +745,7 @@
Системе не удалось своевременно выполнить ваше пересечение границы. Повторите попытку через несколько минут.
</notification>
<notification name="no_host">
- Не удалось найти точку назначения телепорта. Возможно, место назначения временно недоступно или уже не существует. Повторите попытку через несколько минут.
+ Не удалось найти точку назначения телепорта. Возможно, пункт назначения временно недоступен или уже не существует. Повторите попытку через несколько минут.
</notification>
<notification name="no_inventory_host">
Система инвентаря сейчас недоступна.
@@ -2381,7 +2381,7 @@ http://secondlife.com/download.
Не найден регион назначения.
</notification>
<notification name="NotAllowedInDest">
- Вам не разрешен доступ к месту назначения.
+ Вам не разрешен доступ в пункт назначения.
</notification>
<notification name="RegionParcelBan">
Нельзя пересечь границу региона по пути на забаненный участок. Выберите другой путь.
@@ -2390,7 +2390,7 @@ http://secondlife.com/download.
Вы перенаправлены на телехаб.
</notification>
<notification name="CouldntTPCloser">
- Не удалось телепортироваться ближе к месту назначения.
+ Не удалось телепортироваться ближе к пункту назначения.
</notification>
<notification name="TPCancelled">
Телепортация отменена.
@@ -2904,7 +2904,7 @@ http://secondlife.com/download.
При скрытии кнопки «Говорить» голосовая функция отключается.
</notification>
<notification label="Исследование мира" name="HintDestinationGuide">
- Путеводитель по местам назначения содержит тысячи новых мест, в которых вы можете побывать. Выберите место и нажмите кнопку «Телепортация», чтобы начать исследование.
+ Путеводитель по пунктам назначения содержит тысячи новых мест, в которых вы можете побывать. Выберите место и нажмите кнопку «Телепортация», чтобы начать исследование.
</notification>
<notification label="Боковая панель" name="HintSidePanel">
Быстрый доступ к вашему инвентарю, костюмам, профилю и многому другому открывается на боковой панели.
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_alpha.xml b/indra/newview/skins/default/xui/ru/panel_edit_alpha.xml
index 38789c1c5e..7cde4099ef 100644
--- a/indra/newview/skins/default/xui/ru/panel_edit_alpha.xml
+++ b/indra/newview/skins/default/xui/ru/panel_edit_alpha.xml
@@ -2,8 +2,8 @@
<panel name="edit_alpha_panel">
<scroll_container name="avatar_alpha_color_panel_scroll">
<panel name="avatar_alpha_color_panel">
- <texture_picker label="Альфа нижних частей тела" name="Lower Alpha" tool_tip="Щелкните для выбора изображения"/>
- <texture_picker label="Альфа верхних частей тела" name="Upper Alpha" tool_tip="Щелкните для выбора изображения"/>
+ <texture_picker label="Альфа низа" name="Lower Alpha" tool_tip="Щелкните для выбора изображения"/>
+ <texture_picker label="Альфа верха" name="Upper Alpha" tool_tip="Щелкните для выбора изображения"/>
<texture_picker label="Альфа головы" name="Head Alpha" tool_tip="Щелкните для выбора изображения"/>
<texture_picker label="Альфа глаз" name="Eye Alpha" tool_tip="Щелкните для выбора изображения"/>
<texture_picker label="Альфа волос" name="Hair Alpha" tool_tip="Щелкните для выбора изображения"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_shape.xml b/indra/newview/skins/default/xui/ru/panel_edit_shape.xml
index b185ce1d45..312ad593a1 100644
--- a/indra/newview/skins/default/xui/ru/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/ru/panel_edit_shape.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="edit_shape_panel">
<string name="meters">
- метров
+ м
</string>
<string name="feet">
футов
diff --git a/indra/newview/skins/default/xui/ru/panel_im_control_panel.xml b/indra/newview/skins/default/xui/ru/panel_im_control_panel.xml
index f1cba0d3be..2a23cdb800 100644
--- a/indra/newview/skins/default/xui/ru/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/ru/panel_im_control_panel.xml
@@ -17,7 +17,7 @@
<button label="Заплатить" name="pay_btn"/>
</layout_panel>
<layout_panel name="call_btn_panel">
- <button label="Позвонить" name="call_btn"/>
+ <button label="Звонок" name="call_btn"/>
</layout_panel>
<layout_panel name="end_call_btn_panel">
<button label="Завершить звонок" name="end_call_btn"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_landmarks.xml b/indra/newview/skins/default/xui/ru/panel_landmarks.xml
index 66c5b3b574..7d684cd479 100644
--- a/indra/newview/skins/default/xui/ru/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/ru/panel_landmarks.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Landmarks">
<accordion name="landmarks_accordion">
- <accordion_tab name="tab_favorites" title="Панель «Избранное»"/>
+ <accordion_tab name="tab_favorites" title="Избранное"/>
<accordion_tab name="tab_landmarks" title="Мои закладки"/>
<accordion_tab name="tab_inventory" title="Мой инвентарь"/>
<accordion_tab name="tab_library" title="Библиотека"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_navigation_bar.xml b/indra/newview/skins/default/xui/ru/panel_navigation_bar.xml
index d9890acff2..5e3de180f9 100644
--- a/indra/newview/skins/default/xui/ru/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/ru/panel_navigation_bar.xml
@@ -12,7 +12,7 @@
<layout_panel name="favorites_layout_panel">
<favorites_bar name="favorite" tool_tip="Перетаскивайте сюда закладки, чтобы было удобнее переходить в любимые места в Second Life!">
<label name="favorites_bar_label" tool_tip="Перетаскивайте сюда закладки, чтобы было удобнее переходить в любимые места в Second Life!">
- Панель «Избранное»
+ Избранное
</label>
<more_button name="&gt;&gt;" tool_tip="Показать больше избранного">
Больше ▼
diff --git a/indra/newview/skins/default/xui/ru/panel_notes.xml b/indra/newview/skins/default/xui/ru/panel_notes.xml
index f88b4f13c3..aa74383349 100644
--- a/indra/newview/skins/default/xui/ru/panel_notes.xml
+++ b/indra/newview/skins/default/xui/ru/panel_notes.xml
@@ -21,7 +21,7 @@
<button label="IM" name="im" tool_tip="Начать сеанс IM"/>
</layout_panel>
<layout_panel name="call_btn_lp">
- <button label="Позвонить" name="call" tool_tip="Позвонить этому жителю"/>
+ <button label="Звонок" name="call" tool_tip="Позвонить этому жителю"/>
</layout_panel>
<layout_panel name="show_on_map_btn_lp">
<button label="Карта" name="show_on_map_btn" tool_tip="Показать жителя на карте"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_outfit_edit.xml b/indra/newview/skins/default/xui/ru/panel_outfit_edit.xml
index 0657e6ff40..91c03342a7 100644
--- a/indra/newview/skins/default/xui/ru/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/ru/panel_outfit_edit.xml
@@ -2,7 +2,7 @@
<!-- Side tray Outfit Edit panel -->
<panel name="outfit_edit">
<string name="No Outfit" value="Нет костюма"/>
- <string name="unsaved_changes" value="Не сохраненные изменения"/>
+ <string name="unsaved_changes" value="Несохраненные изменения"/>
<string name="now_editing" value="Сейчас редактируется"/>
<panel.string name="not_available">
(нет)
@@ -35,7 +35,7 @@
</layout_stack>
</layout_panel>
<layout_panel name="add_wearables_panel">
- <button label="Вещь, которая носится" name="plus_btn"/>
+ <button label="Носимая вещь" name="plus_btn"/>
</layout_panel>
</layout_stack>
<panel name="no_add_wearables_button_bar">
diff --git a/indra/newview/skins/default/xui/ru/panel_people.xml b/indra/newview/skins/default/xui/ru/panel_people.xml
index e8a25d5349..607921f2d6 100644
--- a/indra/newview/skins/default/xui/ru/panel_people.xml
+++ b/indra/newview/skins/default/xui/ru/panel_people.xml
@@ -64,13 +64,13 @@
<panel name="button_bar">
<layout_stack name="bottom_bar_ls">
<layout_panel name="view_profile_btn_lp">
- <button label="Профиль" name="view_profile_btn" tool_tip="Показывает изображение, группы и прочую информацию о жителе"/>
+ <button label="Профиль" name="view_profile_btn" tool_tip="Показать изображение, группы и прочую информацию о жителе"/>
</layout_panel>
<layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="Начать сеанс IM"/>
</layout_panel>
<layout_panel name="call_btn_lp">
- <button label="Позвонить" name="call_btn" tool_tip="Позвонить этому жителю"/>
+ <button label="Звонок" name="call_btn" tool_tip="Позвонить этому жителю"/>
</layout_panel>
<layout_panel name="share_btn_lp">
<button label="Поделиться" name="share_btn" tool_tip="Поделиться объектом из инвентаря"/>
@@ -81,13 +81,13 @@
</layout_stack>
<layout_stack name="bottom_bar_ls1">
<layout_panel name="group_info_btn_lp">
- <button label="Профиль группы" name="group_info_btn" tool_tip="Показывает информацию о группе"/>
+ <button label="Профиль группы" name="group_info_btn" tool_tip="Показать информацию о группе"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
- <button label="Групповой чат" name="chat_btn" tool_tip="Открывает сеанс чата"/>
+ <button label="Групповой чат" name="chat_btn" tool_tip="Открыть сеанс чата"/>
</layout_panel>
<layout_panel name="group_call_btn_lp">
- <button label="Звонок группе" name="group_call_btn" tool_tip="Звонок этой группе"/>
+ <button label="Звонок группе" name="group_call_btn" tool_tip="Позвонить этой группе"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml
index fb368b8b5e..a3ee5b7815 100644
--- a/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml
@@ -30,7 +30,7 @@
<spinner label="Время отображения всплывающих реплик:" name="nearby_toasts_lifetime"/>
<spinner label="Время затухания всплывающих реплик:" name="nearby_toasts_fadingtime"/>
<text name="translate_chb_label">
- Использовать машинный перевод во время общения
+ Использовать машинный перевод при общении
</text>
<text name="translate_language_text">
Переводить чат на:
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_move.xml b/indra/newview/skins/default/xui/ru/panel_preferences_move.xml
index 878a729113..a6e9b00f2a 100644
--- a/indra/newview/skins/default/xui/ru/panel_preferences_move.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_move.xml
@@ -5,12 +5,12 @@
<text name="heading2">
Автоматическая установка позиции для:
</text>
- <check_box label="создания/редактирования" name="edit_camera_movement" tool_tip="Производить автоматическое позиционирование камеры при входе в режим редактирования и выходе из него"/>
- <check_box label="внешности" name="appearance_camera_movement" tool_tip="Производить автоматическое позиционирование камеры в режиме изменения внешности"/>
+ <check_box label="создания/редактирования" name="edit_camera_movement" tool_tip="Автоматическое позиционирование камеры при входе в режим редактирования и выходе из него"/>
+ <check_box label="внешности" name="appearance_camera_movement" tool_tip="Автоматическое позиционирование камеры в режиме редактирования"/>
<text name="keyboard_lbl">
Клавиатура:
</text>
- <check_box label="Клавиши стрелок всегда перемещают меня" name="arrow_keys_move_avatar_check"/>
+ <check_box label="Клавиши со стрелками всегда перемещают меня" name="arrow_keys_move_avatar_check"/>
<check_box label="Бег после двойного нажатия клавиши" name="tap_tap_hold_to_run"/>
<text name="mouse_lbl">
Мышь:
diff --git a/indra/newview/skins/default/xui/ru/panel_profile.xml b/indra/newview/skins/default/xui/ru/panel_profile.xml
index 79c060c050..fab57d678c 100644
--- a/indra/newview/skins/default/xui/ru/panel_profile.xml
+++ b/indra/newview/skins/default/xui/ru/panel_profile.xml
@@ -53,10 +53,10 @@
<button label="IM" name="im" tool_tip="Начать сеанс IM"/>
</layout_panel>
<layout_panel name="call_btn_lp">
- <button label="Позвонить" name="call" tool_tip="Позвонить этому жителю"/>
+ <button label="Звонок" name="call" tool_tip="Позвонить этому жителю"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
- <button label="Телепортироваться" name="teleport" tool_tip="Предложить телепортацию"/>
+ <button label="Телепортация" name="teleport" tool_tip="Предложить телепортацию"/>
</layout_panel>
<layout_panel name="overflow_btn_lp">
<menu_button label="▼" name="overflow_btn" tool_tip="Заплатить жителю или поделиться с ним вещами"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_region_estate.xml b/indra/newview/skins/default/xui/ru/panel_region_estate.xml
index d957274026..27ec10b323 100644
--- a/indra/newview/skins/default/xui/ru/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/ru/panel_region_estate.xml
@@ -18,16 +18,16 @@
<check_box label="Глобальное время" name="use_global_time_check"/>
<check_box label="Фиксированное" name="fixed_sun_check"/>
<slider label="Фаза" name="sun_hour_slider"/>
- <check_box label="Разрешить публичный доступ" name="externally_visible_check"/>
+ <check_box label="Разрешить общий доступ" name="externally_visible_check"/>
<text name="Only Allow">
- Ограничить доступ проверкой:
+ Разрешить доступ только аккаунтам с подтверждением:
</text>
<check_box label="Информации об оплате в файле" name="limit_payment" tool_tip="Банить нераспознанных жителей"/>
<check_box label="Проверка возраста" name="limit_age_verified" tool_tip="Банить жителей, не прошедших проверку возраста. Более подробная информация находится здесь: [SUPPORT_SITE]."/>
<check_box label="Разрешить голосовое общение" name="voice_chat_check"/>
<check_box label="Разрешить прямой телепорт" name="allow_direct_teleport"/>
<button label="Применить" name="apply_btn"/>
- <button label="Отправить сообщение в землевладение..." name="message_estate_btn"/>
+ <button label="Сообщение в землевладение..." name="message_estate_btn"/>
<button label="Выкинуть жителя с землевладения..." name="kick_user_from_estate_btn"/>
<text name="estate_manager_label">
Менеджеры землевладения:
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 97bfbbeeea..8559be6c9e 100644
--- a/indra/newview/skins/default/xui/ru/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/ru/panel_region_general.xml
@@ -31,10 +31,10 @@
<text label="Дозволенность" name="access_text">
Категория:
</text>
- <icons_combo_box label="Умеренная" name="access_combo">
+ <icons_combo_box label="Умеренный" name="access_combo">
<icons_combo_box.item label="Для взрослых" name="Adult" value="42"/>
- <icons_combo_box.item label="Умеренная" name="Mature" value="21"/>
- <icons_combo_box.item label="Общая" name="PG" value="13"/>
+ <icons_combo_box.item label="Умеренный" name="Mature" value="21"/>
+ <icons_combo_box.item label="Общий" name="PG" value="13"/>
</icons_combo_box>
<button label="Применить" name="apply_btn"/>
<button label="Телепортировать домой одного жителя..." name="kick_btn"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_region_terrain.xml b/indra/newview/skins/default/xui/ru/panel_region_terrain.xml
index 08258b5034..af25565226 100644
--- a/indra/newview/skins/default/xui/ru/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/ru/panel_region_terrain.xml
@@ -7,13 +7,13 @@
неизвестен
</text>
<spinner label="Уровень воды" name="water_height_spin"/>
- <spinner label="Верхняя точка ландшафта" name="terrain_raise_spin"/>
- <spinner label="Нижняя точка ландшафта" name="terrain_lower_spin"/>
+ <spinner label="Верх. точка ландшафта" name="terrain_raise_spin"/>
+ <spinner label="Ниж. точка ландшафта" name="terrain_lower_spin"/>
<text name="detail_texture_text">
- Текстуры ландшафта (требования: 512x512, 24-разрядные, TGA)
+ Текстуры ландшафта (требования: 512x512, 24-битные, TGA)
</text>
<text name="height_text_lbl">
- 1 (Нижняя)
+ 1 (Низ)
</text>
<text name="height_text_lbl2">
2
@@ -22,7 +22,7 @@
3
</text>
<text name="height_text_lbl4">
- 4 (Верхняя)
+ 4 (Верх)
</text>
<text name="height_text_lbl5">
Диапазон высот текстур
@@ -31,7 +31,7 @@
Эти значения определяют степень смешивания наложенных текстур.
</text>
<text name="height_text_lbl11">
- Измеряются в метрах. Значение «Нижняя» – это МАКСИМАЛЬНАЯ высота текстуры №1, а значение «Верхняя» – это МИНИМАЛЬНАЯ высота текстуры №4.
+ Измеряются в метрах. Значение «Низ» – это МАКСИМАЛЬНАЯ высота текстуры №1, а значение «Верх» – это МИНИМАЛЬНАЯ высота текстуры №4.
</text>
<text name="height_text_lbl6">
Северо-запад
@@ -39,20 +39,20 @@
<text name="height_text_lbl7">
Северо-восток
</text>
- <spinner label="Нижняя" name="height_start_spin_1"/>
- <spinner label="Нижняя" name="height_start_spin_3"/>
- <spinner label="Верхняя" name="height_range_spin_1"/>
- <spinner label="Верхняя" name="height_range_spin_3"/>
+ <spinner label="Низ" name="height_start_spin_1"/>
+ <spinner label="Низ" name="height_start_spin_3"/>
+ <spinner label="Верх" name="height_range_spin_1"/>
+ <spinner label="Верх" name="height_range_spin_3"/>
<text name="height_text_lbl8">
Юго-запад
</text>
<text name="height_text_lbl9">
Юго-восток
</text>
- <spinner label="Нижняя" name="height_start_spin_0"/>
- <spinner label="Нижняя" name="height_start_spin_2"/>
- <spinner label="Верхняя" name="height_range_spin_0"/>
- <spinner label="Верхняя" name="height_range_spin_2"/>
+ <spinner label="Низ" name="height_start_spin_0"/>
+ <spinner label="Низ" name="height_start_spin_2"/>
+ <spinner label="Верх" name="height_range_spin_0"/>
+ <spinner label="Верх" name="height_range_spin_2"/>
<button label="Загрузить ландшафт RAW..." name="download_raw_btn" tool_tip="Доступно только землевладельцам, не менеджерам"/>
<button label="Передать ландшафт RAW..." name="upload_raw_btn" tool_tip="Доступно только землевладельцам, не менеджерам"/>
<button label="Зафиксировать пределы" name="bake_terrain_btn" tool_tip="Установить высоту ландшафта по средней точке между верхней и нижней точками"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_region_texture.xml b/indra/newview/skins/default/xui/ru/panel_region_texture.xml
index 369beb1e9b..c4b35a536d 100644
--- a/indra/newview/skins/default/xui/ru/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/ru/panel_region_texture.xml
@@ -7,10 +7,10 @@
неизвестен
</text>
<text name="detail_texture_text">
- Текстуры ландшафта (требования: 512x512, 24-разрядные TGA-файлы)
+ Текстуры ландшафта (требования: 512x512, 24-битные TGA-файлы)
</text>
<text name="height_text_lbl">
- 1 (нижняя)
+ 1 (низ)
</text>
<text name="height_text_lbl2">
2
@@ -19,7 +19,7 @@
3
</text>
<text name="height_text_lbl4">
- 4 (верхняя)
+ 4 (верх)
</text>
<text name="height_text_lbl5">
Диапазон высот текстур
@@ -30,25 +30,25 @@
<text name="height_text_lbl7">
Северо-восток
</text>
- <spinner label="Низко" name="height_start_spin_1"/>
- <spinner label="Низко" name="height_start_spin_3"/>
- <spinner label="Высоко" name="height_range_spin_1"/>
- <spinner label="Высоко" name="height_range_spin_3"/>
+ <spinner label="Низ" name="height_start_spin_1"/>
+ <spinner label="Низ" name="height_start_spin_3"/>
+ <spinner label="Верх" name="height_range_spin_1"/>
+ <spinner label="Верх" name="height_range_spin_3"/>
<text name="height_text_lbl8">
Юго-запад
</text>
<text name="height_text_lbl9">
Юго-восток
</text>
- <spinner label="Низко" name="height_start_spin_0"/>
- <spinner label="Низко" name="height_start_spin_2"/>
- <spinner label="Высоко" name="height_range_spin_0"/>
- <spinner label="Высоко" name="height_range_spin_2"/>
+ <spinner label="Низ" name="height_start_spin_0"/>
+ <spinner label="Низ" name="height_start_spin_2"/>
+ <spinner label="Верх" name="height_range_spin_0"/>
+ <spinner label="Верх" name="height_range_spin_2"/>
<text name="height_text_lbl10">
Эти значения отображают диапазон перекрытия вышеуказанных текстур.
</text>
<text name="height_text_lbl11">
- Измеряется в метрах, НИЖНЕЕ значение – это МАКСИМАЛЬНАЯ высота текстуры №1, ВЕРХНЕЕ значение – это МИНИМАЛЬНАЯ высота текстуры №4.
+ Измеряется в метрах, значение «Низ» – это МАКСИМАЛЬНАЯ высота текстуры №1, значение «Верх» – это МИНИМАЛЬНАЯ высота текстуры №4.
</text>
<button label="Применить" name="apply_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index df657b39c6..7fef5797a9 100644
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -872,7 +872,7 @@ support@secondlife.com.
Новое сопоставление элементов управления
</string>
<string name="AnimateYourAvatar">
- Анимация аватара
+ Анимировать ваш аватар
</string>
<string name="AttachToYourAvatar">
Прикрепить к аватару
@@ -899,10 +899,10 @@ support@secondlife.com.
Нет подключения
</string>
<string name="SIM_ACCESS_PG">
- Общая
+ Общий
</string>
<string name="SIM_ACCESS_MATURE">
- Умеренная
+ Умеренный
</string>
<string name="SIM_ACCESS_ADULT">
Для взрослых
@@ -1073,7 +1073,7 @@ support@secondlife.com.
Тату не надето
</string>
<string name="physics_not_worn">
- Физические данные не учитываются
+ Физика не учитывается
</string>
<string name="invalid_not_worn">
ошибка
@@ -1124,7 +1124,7 @@ support@secondlife.com.
Создать тату
</string>
<string name="create_new_physics">
- Создать физические данные
+ Создать физику
</string>
<string name="create_new_invalid">
ошибка
@@ -1437,7 +1437,7 @@ support@secondlife.com.
Резина
</string>
<string name="Light">
- Освещение
+ Светлый
</string>
<string name="KBShift">
SHIFT
@@ -1617,7 +1617,7 @@ support@secondlife.com.
Есть информация о платежах
</string>
<string name="PaymentInfoOnFile">
- Есть информация в файле о платежах
+ Есть зарегистрир. информация о платежах
</string>
<string name="NoPaymentInfoOnFile">
Нет информации о платежах
@@ -2340,13 +2340,13 @@ support@secondlife.com.
Не удается получить описание формата пикселей
</string>
<string name="MBTrueColorWindow">
- Для работы [APP_NAME] необходим режим True Color (32 разряда).
-Задайте в настройках дисплея 32-разрядный режим цвета.
+ Для работы [APP_NAME] необходим режим True Color (32 бита).
+Задайте в настройках дисплея 32-битный режим цвета.
</string>
<string name="MBAlpha">
- Не удается запустить [APP_NAME] из-за отсутствия доступа к 8-разрядному альфа-каналу. Обычно эта проблема возникает из-за неполадок с драйвером видеокарты.
+ Не удается запустить [APP_NAME] из-за отсутствия доступа к 8-битному альфа-каналу. Обычно эта проблема возникает из-за неполадок с драйвером видеокарты.
Установите новые драйверы видеокарты.
-Также задайте для монитора 32-разрядный режим True Color (Панель управления &gt; Экран &gt; Параметры).
+Также задайте для монитора 32-битный режим True Color (Панель управления &gt; Экран &gt; Параметры).
Если это сообщение продолжает отображаться, обратитесь на сайт [SUPPORT_SITE].
</string>
<string name="MBPixelFmtSetErr">
@@ -2363,7 +2363,7 @@ support@secondlife.com.
Если это сообщение продолжает отображаться, обратитесь на сайт [SUPPORT_SITE].
</string>
<string name="5 O&apos;Clock Shadow">
- Легкие сумерки
+ Жидкие
</string>
<string name="All White">
Полностью белые
@@ -2381,10 +2381,10 @@ support@secondlife.com.
Прикреплено
</string>
<string name="Attached Earlobes">
- Примыкающие мочки
+ Приросшие мочки
</string>
<string name="Back Fringe">
- Черная челка
+ Затылок
</string>
<string name="Baggy">
С мешками
@@ -2417,7 +2417,7 @@ support@secondlife.com.
Большая голова
</string>
<string name="Big Pectorals">
- Большие грудные мышцы
+ Выпуклая грудь
</string>
<string name="Big Spikes">
Большие «шипы»
@@ -2603,7 +2603,7 @@ support@secondlife.com.
Кустистые брови
</string>
<string name="Bushy Hair">
- Вьющиеся волосы
+ Пышные
</string>
<string name="Butt Size">
Размер зада
@@ -2636,7 +2636,7 @@ support@secondlife.com.
Ямка на подбородке
</string>
<string name="Chin Curtains">
- Борода в стиле Линкольна
+ Шкиперская бородка
</string>
<string name="Chin Depth">
Толщина подбородка
@@ -2654,10 +2654,10 @@ support@secondlife.com.
Переход от подбородка к шее
</string>
<string name="Clear">
- Очистить
+ Чистый
</string>
<string name="Cleft">
- Щелкой
+ Ямка
</string>
<string name="Close Set Eyes">
Близко посаженные
@@ -2711,7 +2711,7 @@ support@secondlife.com.
Темнее
</string>
<string name="Deep">
- Глубокий
+ Глубоко
</string>
<string name="Default Heels">
Стандартные каблуки
@@ -2726,7 +2726,7 @@ support@secondlife.com.
Вниз
</string>
<string name="Duffle Bag">
- Сумка из плотной ткани
+ Больше
</string>
<string name="Ear Angle">
Оттопыренность ушей
@@ -2756,7 +2756,7 @@ support@secondlife.com.
Открытость глаз
</string>
<string name="Eye Pop">
- Взмах ресницами
+ Вытаращить глаз
</string>
<string name="Eye Size">
Размер глаз
@@ -2774,7 +2774,7 @@ support@secondlife.com.
Высота бровей
</string>
<string name="Eyebrow Points">
- Точки бровей
+ Кончики бровей
</string>
<string name="Eyebrow Size">
Размер бровей
@@ -2792,10 +2792,10 @@ support@secondlife.com.
Выпученные глаза
</string>
<string name="Face Shear">
- Овал лица
+ Перекос лица
</string>
<string name="Facial Definition">
- Описание лица
+ Черты лица
</string>
<string name="Far Set Eyes">
Широко расставленные глаза
@@ -2816,7 +2816,7 @@ support@secondlife.com.
С манжетами
</string>
<string name="Flat">
- Плоский
+ Плоские
</string>
<string name="Flat Butt">
Плоский зад
@@ -2903,7 +2903,7 @@ support@secondlife.com.
Размер кисти
</string>
<string name="Handlebars">
- Рули
+ Длинные усы
</string>
<string name="Head Length">
Длина головы
@@ -2924,10 +2924,10 @@ support@secondlife.com.
Форма каблука
</string>
<string name="Height">
- Высота
+ Рост
</string>
<string name="High">
- высокий
+ Высокие
</string>
<string name="High Heels">
Высокий каблук
@@ -2939,7 +2939,7 @@ support@secondlife.com.
Высокая платформа
</string>
<string name="High and Tight">
- Высокое и плотное
+ Высокий и плотный
</string>
<string name="Higher">
Выше
@@ -2951,13 +2951,13 @@ support@secondlife.com.
Ширина бедер
</string>
<string name="In">
- Внутри
+ Внутрь
</string>
<string name="In Shdw Color">
Цвет внутренних теней
</string>
<string name="In Shdw Opacity">
- Прозрачность внутренних теней
+ Прозрачность внутр. теней
</string>
<string name="Inner Eye Corner">
Внутренние уголки глаз
@@ -2990,13 +2990,13 @@ support@secondlife.com.
Щеки
</string>
<string name="Knee Angle">
- Угол коленей
+ Угол колен
</string>
<string name="Knock Kneed">
- Ровность ног
+ Колченогие
</string>
<string name="Large">
- Большие
+ Больше
</string>
<string name="Large Hands">
Большие кисти
@@ -3029,7 +3029,7 @@ support@secondlife.com.
Меньше притяжения
</string>
<string name="Less Love">
- Меньше любви
+ Меньше
</string>
<string name="Less Muscles">
Меньше мышц
@@ -3044,7 +3044,7 @@ support@secondlife.com.
Меньше округлости
</string>
<string name="Less Saddle">
- Меньше седлообразности
+ Меньше
</string>
<string name="Less Square">
Меньше угловатости
@@ -3053,16 +3053,16 @@ support@secondlife.com.
Меньше объема
</string>
<string name="Less soul">
- Меньше энергичности
+ Меньше
</string>
<string name="Lighter">
Светлее
</string>
<string name="Lip Cleft">
- Зазор между губ
+ Ямка между губ
</string>
<string name="Lip Cleft Depth">
- Глубина зазора
+ Глубина ямки
</string>
<string name="Lip Fullness">
Полнота губ
@@ -3128,28 +3128,28 @@ support@secondlife.com.
Отложения на талии
</string>
<string name="Low">
- Низкое
+ Низкие
</string>
<string name="Low Heels">
Низкий каблук
</string>
<string name="Low Jaw">
- Низкая челюсть
+ Челюсть низко
</string>
<string name="Low Platforms">
Низкая платформа
</string>
<string name="Low and Loose">
- Низкое и свободное
+ Низкий и свободный
</string>
<string name="Lower">
Ниже
</string>
<string name="Lower Bridge">
- Ниже переносицу
+ Спинка носа
</string>
<string name="Lower Cheeks">
- Ниже щеки
+ Щеки ниже
</string>
<string name="Male">
Мужчина
@@ -3185,7 +3185,7 @@ support@secondlife.com.
Больше помады
</string>
<string name="More Love">
- Больше любви
+ Больше
</string>
<string name="More Lower Lip">
Больше нижняя губа
@@ -3194,7 +3194,7 @@ support@secondlife.com.
Больше мышц
</string>
<string name="More Muscular">
- Более мускулистое
+ Больше мышц
</string>
<string name="More Rosy">
Больше румянца
@@ -3203,7 +3203,7 @@ support@secondlife.com.
Больше округлости
</string>
<string name="More Saddle">
- Более седлообразно
+ Больше
</string>
<string name="More Sloped">
Более наклонный
@@ -3218,10 +3218,10 @@ support@secondlife.com.
Более вертикальный
</string>
<string name="More Volume">
- Больший объем
+ Больше объема
</string>
<string name="More soul">
- Больше духа
+ Больше
</string>
<string name="Moustache">
Усы
@@ -3251,7 +3251,7 @@ support@secondlife.com.
Узко
</string>
<string name="Narrow Back">
- Узкая спина
+ Узко сзади
</string>
<string name="Narrow Front">
Узкий перед
@@ -3260,7 +3260,7 @@ support@secondlife.com.
Узкие губы
</string>
<string name="Natural">
- Естественно
+ Естественный
</string>
<string name="Neck Length">
Длина шеи
@@ -3356,13 +3356,13 @@ support@secondlife.com.
Оранжевый
</string>
<string name="Out">
- Снаружи
+ Наружу
</string>
<string name="Out Shdw Color">
Цвет внешних теней
</string>
<string name="Out Shdw Opacity">
- Прозрачность внешних теней
+ Прозрачность внеш. теней
</string>
<string name="Outer Eye Corner">
Внешние уголки глаз
@@ -3377,7 +3377,7 @@ support@secondlife.com.
Глубокий прикус
</string>
<string name="Package">
- Пакет
+ Гульфик
</string>
<string name="Painted Nails">
Покрашенные
@@ -3386,7 +3386,7 @@ support@secondlife.com.
Бледный
</string>
<string name="Pants Crotch">
- Мотня
+ Шаг
</string>
<string name="Pants Fit">
Облегающие брюки
@@ -3404,13 +3404,13 @@ support@secondlife.com.
Пробор
</string>
<string name="Part Bangs">
- Челки с пробором
+ Челка с пробором
</string>
<string name="Pectorals">
Грудные мышцы
</string>
<string name="Pigment">
- Пигмент
+ Пигментация
</string>
<string name="Pigtails">
Хвосты по бокам
@@ -3428,7 +3428,7 @@ support@secondlife.com.
Ширина платформы
</string>
<string name="Pointy">
- Острый
+ Острые
</string>
<string name="Pointy Heels">
Острый каблук
@@ -3440,13 +3440,13 @@ support@secondlife.com.
Пышная юбка
</string>
<string name="Pop Left Eye">
- Хлопнуть левым глазом
+ Левый глаз
</string>
<string name="Pop Right Eye">
- Хлопнуть правым глазом
+ Правый глаз
</string>
<string name="Puffy">
- Припухшие
+ Пухлые
</string>
<string name="Puffy Eyelids">
Припухлость век
@@ -3473,13 +3473,13 @@ support@secondlife.com.
Румянец
</string>
<string name="Ruddy">
- Румяное
+ Румяный
</string>
<string name="Rumpled Hair">
Взъерошенные
</string>
<string name="Saddle Bags">
- Седельные сумки
+ Галифе
</string>
<string name="Scrawny Leg">
Сухопарая нога
@@ -3488,25 +3488,25 @@ support@secondlife.com.
Разделить
</string>
<string name="Shallow">
- Мелкий
+ Мелко
</string>
<string name="Shear Back">
- Очертание спины
+ Скос сзади
</string>
<string name="Shear Face">
- Овал лица
+ Перекос лица
</string>
<string name="Shear Front">
- Очертание спереди
+ Скос спереди
</string>
<string name="Shear Left Up">
- Очертание левой верхней части
+ Скос влево вверх
</string>
<string name="Shear Right Up">
- Очертание правой верхней части
+ Скос вправо вверх
</string>
<string name="Sheared Back">
- Уменьшенная спина
+ Уменьшено сзади
</string>
<string name="Sheared Front">
Уменьшено спереди
@@ -3533,7 +3533,7 @@ support@secondlife.com.
Высота обуви
</string>
<string name="Short">
- Короче
+ Ниже
</string>
<string name="Short Arms">
Короткие руки
@@ -3608,7 +3608,7 @@ support@secondlife.com.
Разрез: справа
</string>
<string name="Small">
- Маленький
+ Меньше
</string>
<string name="Small Hands">
Маленькие кисти
@@ -3620,13 +3620,13 @@ support@secondlife.com.
Гладко
</string>
<string name="Smooth Hair">
- Приглаженные волосы
+ Приглаженные
</string>
<string name="Socks Length">
Длина носков
</string>
<string name="Soulpatch">
- Бородка под губой
+ Эспаньолка
</string>
<string name="Sparse">
Жидкие
@@ -3662,13 +3662,13 @@ support@secondlife.com.
Зачесанные вперед
</string>
<string name="Tall">
- Высокие
+ Выше
</string>
<string name="Taper Back">
- Градуировка сзади
+ Конус сзади
</string>
<string name="Taper Front">
- Градуировка спереди
+ Конус спереди
</string>
<string name="Thick Heels">
Широкий каблук
@@ -3737,16 +3737,16 @@ support@secondlife.com.
Неестественный
</string>
<string name="Upper Bridge">
- Переносицу выше
+ Переносица
</string>
<string name="Upper Cheeks">
Щеки выше
</string>
<string name="Upper Chin Cleft">
- Ямку на подбородке выше
+ Ямка на подбородке выше
</string>
<string name="Upper Eyelid Fold">
- Складку века выше
+ Складка верхнего века
</string>
<string name="Upturned">
Вверх
@@ -3758,7 +3758,7 @@ support@secondlife.com.
Высота талии
</string>
<string name="Well-Fed">
- Упитанное
+ Упитанные
</string>
<string name="White Hair">
Белые волосы
@@ -3767,7 +3767,7 @@ support@secondlife.com.
Широко
</string>
<string name="Wide Back">
- Широкая спина
+ Широко сзади
</string>
<string name="Wide Front">
Широкий перед
@@ -4252,7 +4252,7 @@ support@secondlife.com.
Женщина – ух ты!
</string>
<string name="/bow">
- /поклон
+ /поклониться
</string>
<string name="/clap">
/хлопнуть
@@ -4794,7 +4794,7 @@ support@secondlife.com.
Компас
</string>
<string name="Command_Destinations_Label">
- Места
+ Пункты
</string>
<string name="Command_Gestures_Label">
Жесты
@@ -4845,16 +4845,16 @@ support@secondlife.com.
Вид
</string>
<string name="Command_Voice_Label">
- Голоса собеседников
+ Настройки голоса
</string>
<string name="Command_AboutLand_Tooltip">
Информация о посещаемой вами земле
</string>
<string name="Command_Appearance_Tooltip">
- Сменить аватар
+ Изменить аватар
</string>
<string name="Command_Avatar_Tooltip">
- Выберите весь аватар
+ Выбор аватара
</string>
<string name="Command_Build_Tooltip">
Построение объектов и формирование ландшафта
@@ -4917,7 +4917,7 @@ support@secondlife.com.
Изменение угла камеры
</string>
<string name="Command_Voice_Tooltip">
- Люди около вас с оспособностью говорить
+ Громкость звонков и голосов окружающих вас людей
</string>
<string name="Retain%">
Остаток%
diff --git a/indra/newview/skins/default/xui/tr/floater_about.xml b/indra/newview/skins/default/xui/tr/floater_about.xml
index 998890b85c..993ec42958 100644
--- a/indra/newview/skins/default/xui/tr/floater_about.xml
+++ b/indra/newview/skins/default/xui/tr/floater_about.xml
@@ -46,16 +46,16 @@ Ses Sunucusu Sürümü: [VOICE_VERSION]
</panel>
<panel label="Katkıda Bulunanlar" name="credits_panel">
<text name="linden_intro">
- Second Life, Lindens&apos;lar tarafından geliştirilmiştir:
+ Second Life, Linden&apos;lar tarafından geliştirilmiştir:
</text>
<text name="contrib_intro">
- açık kaynak kod katkısında bulunanlar:
+ Açık kaynak kod katkısında bulunanlar:
</text>
<text_editor name="contrib_names">
Geçici Ad çalıştırma sırasında değiştirilir
</text_editor>
<text name="trans_intro">
- çevirileri yapanlar:
+ Çevirileri yapanlar:
</text>
<text_editor name="trans_names">
Geçici Ad çalıştırma sırasında değiştirilir
diff --git a/indra/newview/skins/default/xui/tr/floater_about_land.xml b/indra/newview/skins/default/xui/tr/floater_about_land.xml
index c44722f4ba..e0350964b5 100644
--- a/indra/newview/skins/default/xui/tr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/tr/floater_about_land.xml
@@ -102,7 +102,7 @@
<text name="For Sale: Price L$[PRICE].">
Fiyat: L$[PRICE] (L$[PRICE_PER_SQM]/m²)
</text>
- <button label="Arazi Sat" name="Sell Land..."/>
+ <button label="Araziyi Sat" name="Sell Land..."/>
<text name="For sale to">
Şu Alıcıya Satılık: [BUYER]
</text>
@@ -307,7 +307,7 @@ Sadece büyük parseller aramada görünür.
İtme Yok (Bölge Geçersiz Kılma)
</panel.string>
<panel.string name="see_avs_text">
- Bu parseldeki sakinleri gör ve onlarla sohbet et
+ Parseldeki sakinleri gör ve onlarla sohbet et
</panel.string>
<text name="allow_label">
Sakinlere şunun için izin ver:
@@ -336,7 +336,7 @@ Sadece büyük parseller aramada görünür.
<check_box label="İtme Yok" name="PushRestrictCheck" tool_tip="Komut dosyalarının itmesini önler Bu seçeneğin işaretlenmesi arazinizdeki bozucu davranışları önlemeye yardımcı olabilir."/>
<check_box label="Konumu Arama sonuçlarında göster (L$30/hafta)" name="ShowDirectoryCheck" tool_tip="Arama sonuçlarında bu parsel görünsün"/>
<combo_box name="land category with adult">
- <combo_box.item label="Herhangi Bir Kategori" name="item0"/>
+ <combo_box.item label="Herh. Bir Kategori" name="item0"/>
<combo_box.item label="Linden Konumu" name="item1"/>
<combo_box.item label="Yetişkin" name="item2"/>
<combo_box.item label="Sanat ve Kültür" name="item3"/>
@@ -352,7 +352,7 @@ Sadece büyük parseller aramada görünür.
<combo_box.item label="Diğer" name="item12"/>
</combo_box>
<combo_box name="land category">
- <combo_box.item label="Herhangi Bir Kategori" name="item0"/>
+ <combo_box.item label="Herh. Bir Kategori" name="item0"/>
<combo_box.item label="Linden Konumu" name="item1"/>
<combo_box.item label="Sanat ve Kültür" name="item3"/>
<combo_box.item label="İş" name="item4"/>
@@ -372,7 +372,7 @@ Sadece büyük parseller aramada görünür.
</text>
<texture_picker name="snapshot_ctrl" tool_tip="Bir resim seçmek için tıklayın"/>
<text name="allow_label5">
- Diğer parsellerdeki Sakinlere şunun için izin verin:
+ Diğer parsel Sakinlerine şunun için izin verin:
</text>
<check_box label="Avatarları Gör" name="SeeAvatarsCheck" tool_tip="Diğer parsellerdeki sakinlerin bu parseldeki sakinleri görmesine ve onlarla sohbet etmesine, sizin de onları görüp, onlarla sohbet etmenize imkan tanır."/>
<text name="landing_point">
@@ -419,7 +419,7 @@ Sadece büyük parseller aramada görünür.
piksel
</text>
<text name="Options:">
- Seçenekler:
+ Seçenklr.:
</text>
<check_box label="Döngü" name="media_loop" tool_tip="Ortamı döngüsel olarak oynat. Ortamın oynatılması bittiğinde baştan tekrar başlayacaktır."/>
</panel>
@@ -448,7 +448,7 @@ Sadece büyük parseller aramada görünür.
(Gayrimenkul tarafından tanımlanır)
</panel.string>
<panel.string name="allow_public_access">
- Kamusal Erişime İzin Ver ([MATURITY]) (Not: Bunun işaretinin kaldırılması yasaklama çizgileri oluşturacaktır)
+ Kamusal Erişime İzin Ver ([MATURITY]) (Not: İşaret kaldırılırsa yasaklama çizgileri oluşur)
</panel.string>
<panel.string name="estate_override">
Bu seçeneklerden biri veya daha fazlası gayrimenkul düzeyinde ayarlanır
@@ -462,7 +462,7 @@ Sadece büyük parseller aramada görünür.
<check_box label="Dosyadaki ödeme bilgileri [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Tanınmayan Sakinleri Yasakla."/>
<check_box label="Yaş doğrulama [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Yaşını doğrulamayan Sakinleri yasakla Daha fazla bilgi için [SUPPORT_SITE] adresini ziyaret edin."/>
<check_box label="Grup Erişimine İzin Ver: [GROUP]" name="GroupCheck" tool_tip="Genel sekmesinde grup ayarla."/>
- <check_box label="Geçiş haklarını şuna sat:" name="PassCheck" tool_tip="Bu parsele geçici erişim verir"/>
+ <check_box label="Geçiş haklr. şuna sat:" name="PassCheck" tool_tip="Bu parsele geçici erişim verir"/>
<combo_box name="pass_combo">
<combo_box.item label="Herkes" name="Anyone"/>
<combo_box.item label="Grup" name="Group"/>
diff --git a/indra/newview/skins/default/xui/tr/floater_buy_land.xml b/indra/newview/skins/default/xui/tr/floater_buy_land.xml
index 4d43157f99..7b43af2ea4 100644
--- a/indra/newview/skins/default/xui/tr/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/tr/floater_buy_land.xml
@@ -53,7 +53,7 @@ Daha küçük bir alan seçmeyi deneyin.
Arazi alma bilgileri çekilirken hata oluştu.
</floater.string>
<floater.string name="buying_will">
- Bu arazinin satın alınması sonucu:
+ Arazinin satın alınması sonucu:
</floater.string>
<floater.string name="buying_for_group">
Bu arazinin grup için satın alınması sonucu:
@@ -185,7 +185,7 @@ Daha küçük bir alan seçmeyi deneyin.
nesnelerle satılır
</text>
<text name="info_action">
- Bu arazinin satın alınması sonucu:
+ Arazinin satın alınması sonucu:
</text>
<text name="error_message">
Bir şeyler yolunda değil.
diff --git a/indra/newview/skins/default/xui/tr/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/tr/floater_edit_day_cycle.xml
index e2e87ddf1e..4be1068dcc 100644
--- a/indra/newview/skins/default/xui/tr/floater_edit_day_cycle.xml
+++ b/indra/newview/skins/default/xui/tr/floater_edit_day_cycle.xml
@@ -22,10 +22,10 @@
Not: Ön ayarınızın adını değiştirirseniz, yeni bir ön ayar oluşturursunuz ve mevcut ön ayar değişmez.
</text>
<text name="hint_item1">
- - Belirli gökyüzü ayarlarını ve zamanı düzenlemek için bir sekmeye tıklayın.
+ - Birine tıklayarak gökyüzü ayarlarını/zamanı düzenleyin.
</text>
<text name="hint_item2">
- - Geçiş sürelerini ayarlamak için sekmelere tıklayın ve bunları sürükleyin.
+ - Sekmelere tıklayıp sürükleyerek geçiş sürlrn. ayarlayın.
</text>
<text name="hint_item3">
- Gün döngünüzü önizlemek için fırçayı kullanın.
diff --git a/indra/newview/skins/default/xui/tr/floater_environment_settings.xml b/indra/newview/skins/default/xui/tr/floater_environment_settings.xml
index 943e1e810d..e702da7e1b 100644
--- a/indra/newview/skins/default/xui/tr/floater_environment_settings.xml
+++ b/indra/newview/skins/default/xui/tr/floater_environment_settings.xml
@@ -18,7 +18,7 @@
<combo_box.item label="-Bir ön ayar seçin-" name="item0"/>
</combo_box>
<text name="sky_dayc_settings_title">
- Gökyüzü / Gün Döngüsü
+ Gökyüzü/Gün Dön.
</text>
<radio_group name="sky_dayc_settings_radio_group">
<radio_item label="Sabit gökyüzü" name="my_sky_settings"/>
diff --git a/indra/newview/skins/default/xui/tr/floater_god_tools.xml b/indra/newview/skins/default/xui/tr/floater_god_tools.xml
index ce7f7badcc..26e5ebd18b 100644
--- a/indra/newview/skins/default/xui/tr/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/tr/floater_god_tools.xml
@@ -67,7 +67,7 @@
<button label="Hedefin *Herhangi Bir* Arazideki Komut Dosyalı Nesnelerini Sil" label_selected="Hedefin *Herhangi Bir* Arazideki Komut Dosyalı Nesnelerini Sil" name="Delete Target&apos;s Scripted Objects On *Any* Land" tool_tip="Bu bölgede hedefe ait olan tüm komut dosyalı nesneleri silin. (kopya yok) nesneler geri döndürülür."/>
<button label="Hedefin *TÜM* Nesnelerini Sil" label_selected="Hedefin *TÜM* Nesnelerini Sil" name="Delete *ALL* Of Target&apos;s Objects" tool_tip="Bu bölgede hedefe ait olan tüm nesneleri silin. (kopya yok) nesneler geri döndürülür."/>
<button label="En Çok Çarpışanlar" label_selected="En Çok Çarpışanlar" name="Get Top Colliders" tool_tip="En dar fazda geri aramaları yaşayan nesnelerin listesini alır"/>
- <button label="En Çok Komut Dosyası Çalıştıranlar" label_selected="En Çok Komut Dosyası Çalıştıranlar" name="Get Top Scripts" tool_tip="Komut dosyalarını çalıştırırken en çok zaman harcayan nesnelerin listesini alır"/>
+ <button label="En Çok Komut Dsy. Çalştr." label_selected="En Çok Komut Dsy. Çalştr." name="Get Top Scripts" tool_tip="Komut dosyalarını çalıştırırken en çok zaman harcayan nesnelerin listesini alır"/>
<button label="Komut dosyaları özeti" label_selected="Komut dosyaları özeti" name="Scripts digest" tool_tip="Tüm komut dosyalarının ve her birinin ne kadar kullanıldığının listesini alır"/>
</panel>
<panel label="Talep" name="request">
diff --git a/indra/newview/skins/default/xui/tr/floater_joystick.xml b/indra/newview/skins/default/xui/tr/floater_joystick.xml
index 31d819743c..4a27aac3c1 100644
--- a/indra/newview/skins/default/xui/tr/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/tr/floater_joystick.xml
@@ -3,10 +3,10 @@
<floater.string name="NoDevice">
cihaz tespit edilmedi
</floater.string>
- <check_box label="Oyun Çubuğunu Etkinleştir:" name="enable_joystick"/>
- <spinner label="X Eksen Haritalama" name="JoystickAxis1"/>
- <spinner label="Y Eksen Haritalama" name="JoystickAxis2"/>
- <spinner label="Z Eksen Haritalama" name="JoystickAxis0"/>
+ <check_box label="Oyun Çub. Etkşt:" name="enable_joystick"/>
+ <spinner label="X Eks. Haritalama" name="JoystickAxis1"/>
+ <spinner label="Y Eks. Haritalama" name="JoystickAxis2"/>
+ <spinner label="Z Eks. Haritalama" name="JoystickAxis0"/>
<spinner label="Eğim Haritalama" name="JoystickAxis4"/>
<spinner label="Düşey Sapma Haritalama" name="JoystickAxis5"/>
<spinner label="Tilt Haritalama" name="JoystickAxis3"/>
diff --git a/indra/newview/skins/default/xui/tr/floater_preferences.xml b/indra/newview/skins/default/xui/tr/floater_preferences.xml
index a0be9dc53f..edb3c19b81 100644
--- a/indra/newview/skins/default/xui/tr/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/tr/floater_preferences.xml
@@ -7,7 +7,7 @@
<panel label="Grafikler" name="display"/>
<panel label="Ses ve Ortamlar" name="audio"/>
<panel label="Sohbet" name="chat"/>
- <panel label="Hareketler ve Görünümler" name="move"/>
+ <panel label="Hareket ve Görünümler" name="move"/>
<panel label="Bildirimler" name="msgs"/>
<panel label="Renkler" name="colors"/>
<panel label="Gizlilik" name="im"/>
diff --git a/indra/newview/skins/default/xui/tr/floater_preview_gesture.xml b/indra/newview/skins/default/xui/tr/floater_preview_gesture.xml
index fa9fd37e6c..dc6f66f657 100644
--- a/indra/newview/skins/default/xui/tr/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/tr/floater_preview_gesture.xml
@@ -65,7 +65,7 @@
<check_box label="tüm animasyonlar bitinceye kadar" name="wait_anim_check"/>
<check_box label="saniye olarak zaman:" name="wait_time_check"/>
<text name="help_label">
- Bekleme adımlar eklemediğiniz sürece tüm adımlar aynı anda gerçekleşir.
+ Bekleme adımları eklemediğiniz sürece tüm adımlar aynı anda gerçekleşir.
</text>
<check_box label="Etkin" name="active_check" tool_tip="Etkin mimikleri tetiklemek için tetikleme fazları için sohbet gerçekleştirebilir veya kısayol tuşlarına basabilirsiniz. Bir anahtar bağlama ihtilafı olduğunda mimikler genellikle inaktif hale geçer."/>
<button label="Önizleme" name="preview_btn"/>
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 ae4c3cc75e..c5765883c4 100644
--- a/indra/newview/skins/default/xui/tr/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/tr/floater_report_abuse.xml
@@ -81,7 +81,7 @@
Özet:
</text>
<text name="dscr_title">
- Ayrıntılar:
+ Ayrıntl:
</text>
<text name="bug_aviso">
Mümkün olduğunca spesifik olun
diff --git a/indra/newview/skins/default/xui/tr/floater_tools.xml b/indra/newview/skins/default/xui/tr/floater_tools.xml
index cd5e6b7fac..d4ee9995dd 100644
--- a/indra/newview/skins/default/xui/tr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/tr/floater_tools.xml
@@ -55,7 +55,7 @@
<radio_item label="Uzat (Ctrl+Shift)" name="radio stretch"/>
<radio_item label="Yüzü Seç" name="radio select face"/>
</radio_group>
- <check_box label="Bağlantılı olanları düzenle" name="checkbox edit linked parts"/>
+ <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">
@@ -81,7 +81,7 @@
<button name="ToolGrass" tool_tip="Çimen"/>
<check_box label="Seçili Aracı tut" name="checkbox sticky"/>
<check_box label="Seçimi kopyala" name="checkbox copy selection"/>
- <check_box initial_value="true" label="Kopyayı Merkeze Al" name="checkbox copy centers"/>
+ <check_box initial_value="true" label="Kopyayı Merkezle" name="checkbox copy centers"/>
<check_box label="Kopyayı Döndür" name="checkbox copy rotates"/>
<radio_group name="land_radio_group">
<radio_item label="Araziyi Seç" name="radio select land"/>
@@ -376,7 +376,7 @@
</combo_box>
<spinner label="Yerçekimi" name="Physics Gravity"/>
<spinner label="Sürtünme" name="Physics Friction"/>
- <spinner label="100 kg/m^3 cinsinden yoğunluk" name="Physics Density"/>
+ <spinner label="100 kg/m3 cinsinden yoğunluk" name="Physics Density"/>
<spinner label="Restitüsyon" name="Physics Restitution"/>
</panel>
<panel label="Doku" name="Texture">
diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml
index efeed833a5..75294e38d5 100644
--- a/indra/newview/skins/default/xui/tr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml
@@ -93,7 +93,7 @@
<menu_item_call label="Arazi Aracı" name="Land"/>
</menu>
<menu_item_call label="Bağla" name="Link"/>
- <menu_item_call label="Bağlantıyı Kopar" name="Unlink"/>
+ <menu_item_call label="Bağlnty. Kopar" name="Unlink"/>
<menu_item_check label="Bağlantılı Parçaları Düzenle" name="Edit Linked Parts"/>
<menu label="Bağlantılı Parçaları Seç" name="Select Linked Parts">
<menu_item_call label="Sonraki Parçayı Seç" name="Select Next Part"/>
@@ -118,7 +118,7 @@
<menu_item_call label="Komut Dosyalarını Çalışıyor Olarak Ayarla" name="Set Scripts to Running"/>
<menu_item_call label="Komut Dosyalarını Çalışmıyor Olarak Ayarla" name="Set Scripts to Not Running"/>
</menu>
- <menu label="Seçenekler" name="Options">
+ <menu label="Seçenklr." name="Options">
<menu_item_check label="Gelişmiş İzinleri Göster" name="DebugPermissions"/>
<menu_item_check label="Sadece Nesnelerimi Seç" name="Select Only My Objects"/>
<menu_item_check label="Sadece Hareket Ettirilebilir Nesneleri Seç" name="Select Only Movable Objects"/>
diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml
index a268c103a6..b62ff01ab9 100644
--- a/indra/newview/skins/default/xui/tr/notifications.xml
+++ b/indra/newview/skins/default/xui/tr/notifications.xml
@@ -2270,7 +2270,7 @@ Daha küçük bir arazi parçası seçmeyi deneyin.
[NAME]
[DATE]
<form name="form">
- <button name="Details" text="Ayrıntılar"/>
+ <button name="Details" text="Ayrıntl"/>
<button name="Cancel" text="İptal"/>
</form>
</notification>
diff --git a/indra/newview/skins/default/xui/tr/panel_people.xml b/indra/newview/skins/default/xui/tr/panel_people.xml
index 7d42e3ab79..1a1e53bac2 100644
--- a/indra/newview/skins/default/xui/tr/panel_people.xml
+++ b/indra/newview/skins/default/xui/tr/panel_people.xml
@@ -24,7 +24,7 @@ Birlikte takılacak kişiler mi arıyorsunuz? [secondlife:///app/worldmap Dünya
<tab_container name="tabs">
<panel label="YAKIN" name="nearby_panel">
<panel label="bottom_panel" name="bottom_panel">
- <menu_button name="nearby_view_sort_btn" tool_tip="Seçenekler"/>
+ <menu_button name="nearby_view_sort_btn" tool_tip="Seçenklr."/>
<button name="add_friend_btn" tool_tip="Seçilen Sakini arkadaş listene ekle"/>
</panel>
</panel>
@@ -49,14 +49,14 @@ Birlikte takılacak kişiler mi arıyorsunuz? [secondlife:///app/worldmap Dünya
</panel>
<panel label="GRUPLARIM" name="groups_panel">
<panel label="bottom_panel" name="bottom_panel">
- <menu_button name="groups_viewsort_btn" tool_tip="Seçenekler"/>
+ <menu_button name="groups_viewsort_btn" tool_tip="Seçenklr."/>
<button name="plus_btn" tool_tip="Gruba katıl/yeni grup oluştur"/>
<button name="activate_btn" tool_tip="Seçilen grubu etkinleştir"/>
</panel>
</panel>
<panel label="SON" name="recent_panel">
<panel label="bottom_panel" name="bottom_panel">
- <menu_button name="recent_viewsort_btn" tool_tip="Seçenekler"/>
+ <menu_button name="recent_viewsort_btn" tool_tip="Seçenklr."/>
<button name="add_friend_btn" tool_tip="Seçilen Sakini arkadaş listene ekle"/>
</panel>
</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 787efa32f4..770cdc6efd 100644
--- a/indra/newview/skins/default/xui/tr/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_advanced.xml
@@ -6,11 +6,11 @@
<text name="Cache:">
Önbellek:
</text>
- <spinner label="Önbellek büyüklüğü (64 - 9984 MB)" name="cachesizespinner"/>
+ <spinner label="Önbellek boyutu (64-9984 MB)" name="cachesizespinner"/>
<text name="text_box5">
MB
</text>
- <button label="Önbelleği Temizle" label_selected="Önbelleği Temizle" name="clear_cache"/>
+ <button label="Önbelleği Sil" label_selected="Önbelleği Sil" name="clear_cache"/>
<text name="Cache location">
Önbellek konumu:
</text>
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml
index 9c9e960715..f7f0698a31 100644
--- a/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml
@@ -16,9 +16,9 @@
Aİ&apos;leri şurada göster:
</text>
<text name="requires_restart_label">
- (yeniden başlatma gerektirir)
+ (tekrar başlatma gerekir)
</text>
- <radio_group name="chat_window" tool_tip="Anlık İletilerinizi ayrı gezdiricilerde veya birden çok sekmeye sahip tek bir gezdiricide gösterin (Yeniden başlatma gerektirir)">
+ <radio_group name="chat_window" tool_tip="Anlık İletileri ayrı gezdiricilerde veya çoklu sekmelere sahip tek bir gezdiricide gösterin (tekrar başlatma gerekir)">
<radio_item label="Ayrı Pencereler" name="radio" value="0"/>
<radio_item label="Sekmeler" name="radio2" value="1"/>
</radio_group>
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 fbfc07c4b8..4a48b1588c 100644
--- a/indra/newview/skins/default/xui/tr/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_general.xml
@@ -22,7 +22,7 @@
(Yeniden başlatma gerekir)
</text>
<text name="maturity_desired_prompt">
- Seviyelendirdiğim şu içeriğe erişim istiyorum:
+ Seviyelndrl. içeriğe erişim istiyorum::
</text>
<combo_box name="maturity_desired_combobox">
<combo_box.item label="Genel, Orta, Yetişkin" name="Desired_Adult"/>
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml
index ba31640e9c..ddb83ffc69 100644
--- a/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml
@@ -51,7 +51,7 @@
<combo_box.item label="Tüm avatarlar ve nesneler" name="3"/>
<combo_box.item label="Her şey" name="4"/>
</combo_box>
- <slider label="Avatarın Fiziksel Özellikleri:" name="AvatarPhysicsDetail"/>
+ <slider label="Avatar Fzk. Özlk.:" name="AvatarPhysicsDetail"/>
<text name="AvatarPhysicsDetailText">
Düşük
</text>
@@ -60,7 +60,7 @@
m
</text>
<slider label="Maks. parçacık sayısı:" name="MaxParticleCount"/>
- <slider label="Düşük grafik özellikli olmayan maks. avatar sayısı:" name="MaxNumberAvatarDrawn"/>
+ <slider label="Düşük gr. özl. olmayan mks. avatar:" name="MaxNumberAvatarDrawn"/>
<slider label="Son işleme kalitesi:" name="RenderPostProcess"/>
<text name="MeshDetailText">
Örgü detayı:
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 e76616f667..9111594979 100644
--- a/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml
@@ -11,7 +11,7 @@
<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"/>
- <check_box label="Oturum Açarken Favori Yer İmlerimi Göster (&apos;Buradan başla&apos; açılır menüsünden)" name="favorites_on_login_check"/>
+ <check_box label="Oturum Açarken Favori Yer İmlerimi Göster (&apos;Buradan başla&apos; menüsünden)" name="favorites_on_login_check"/>
<text name="Logs:">
Sohbet Günlükleri:
</text>
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 f16c666e86..6e15e0f6f6 100644
--- a/indra/newview/skins/default/xui/tr/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/tr/panel_region_debug.xml
@@ -21,14 +21,14 @@
</line_editor>
<button label="Seç" name="choose_avatar_btn"/>
<text name="options_text_lbl">
- Seçenekler:
+ Seçenklr.:
</text>
<check_box label="Komut dosyaları ile" name="return_scripts" tool_tip="Sadece komut dosyaları olan nesneler iade edilsin"/>
<check_box label="Başkasına ait arazi üzerinde" name="return_other_land" tool_tip="Sadece başkasına ait arazi üzerinde olan nesneler iade edilsin"/>
<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 Dosyası Çalıştıranlar..." name="top_scripts_btn" tool_tip="Komut dosyalarını çalıştırırken en çok zaman harcayan 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="Yeniden Başlatmayı Ertele" name="cancel_restart_btn" tool_tip="Bölgenin yeniden başlatılmasını 1 saat ertele"/>
</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_region_environment.xml b/indra/newview/skins/default/xui/tr/panel_region_environment.xml
index 851cd23f30..058ea91b70 100644
--- a/indra/newview/skins/default/xui/tr/panel_region_environment.xml
+++ b/indra/newview/skins/default/xui/tr/panel_region_environment.xml
@@ -15,7 +15,7 @@
<combo_box.item label="-Bir ön ayar seçin-" name="item0"/>
</combo_box>
<text name="sky_dayc_settings_title">
- Gökyüzü / Gün Döngüsü
+ Gökyüzü/Gün Dön.
</text>
<radio_group name="sky_dayc_settings_radio_group">
<radio_item label="Sabit gökyüzü" name="my_sky_settings"/>
diff --git a/indra/newview/skins/default/xui/tr/panel_region_terrain.xml b/indra/newview/skins/default/xui/tr/panel_region_terrain.xml
index 874d27abfb..3226ee008e 100644
--- a/indra/newview/skins/default/xui/tr/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/tr/panel_region_terrain.xml
@@ -7,7 +7,7 @@
bilinmiyor
</text>
<spinner label="Su Yüksekliği" name="water_height_spin"/>
- <spinner label="Yüzey Yükseltme Limiti" name="terrain_raise_spin"/>
+ <spinner label="Yüzey Yükslt. Limiti" name="terrain_raise_spin"/>
<spinner label="Yüzey Alçatma Limiti" name="terrain_lower_spin"/>
<text name="detail_texture_text">
Yüzey Dokuları (512x512, 24 bit .tga dosyalar gerektirir)
diff --git a/indra/newview/skins/default/xui/tr/role_actions.xml b/indra/newview/skins/default/xui/tr/role_actions.xml
index 18f7d6dca2..655ac64172 100644
--- a/indra/newview/skins/default/xui/tr/role_actions.xml
+++ b/indra/newview/skins/default/xui/tr/role_actions.xml
@@ -44,7 +44,7 @@
<action_set description="Bu Yeteneklere, grubun sahip olduğu parsellere erişime izin verme veya buralara erişimi yasaklama ve Second Life Sakinlerini dondurma veya parselden dışarı çıkarma da dahildir." name="Parcel Access">
<action description="Parselin Erişim listelerini yönet" longdescription="Parselin Erişim listelerini Arazi Hakkında &gt; Erişim sekmesinden yönetin." name="land manage allowed" value="29"/>
<action description="Parselin Yasaklama listelerini yönet" longdescription="Parselin Yasaklama listelerini Arazi Hakkında &gt; Erişim sekmesinden yönetin." name="land manage banned" value="30"/>
- <action description="Parselin &apos;Geçiş haklarını şuna sat&apos; ayarlarını değiştir" longdescription="Parselin &apos;Geçiş haklarını şuna sat&apos; ayarlarını Arazi Hakkında &gt; Erişim sekmesinden değiştirin." name="land manage passes" value="31"/>
+ <action description="Parselin &apos;Geçiş haklr. şuna sat&apos; ayarlarını değiştir" longdescription="Parselin &apos;Geçiş haklr. şuna sat&apos; ayarlarını Arazi Hakkında &gt; Erişim sekmesinden değiştirin." name="land manage passes" value="31"/>
<action description="Parsel üzerindeki Second Life Sakinlerini dışarı çıkar veya dondur" longdescription="Bu Yeteneğe sahip olan bir Roldeki Üyeler, grubun sahip olduğu bir parsel üzerinde olmasını istemedikleri bir Second Life sakininin üzerini sağ tıklatıp &apos;Dışarı Çıkar&apos; veya &apos;Dondur&apos;u seçebilirler." name="land admin" value="32"/>
</action_set>
<action_set description="Bu Yeteneklere üyelerin nesneleri iade etmelerine, Linden bitkilerini yerleştirmelerine ve bu bitkilerin yerlerini değiştirmelerine izin veren güçler de dahildir. Bu özellik, Üyelerin çöpleri temizlemeleri ve bahçe düzenlemesi yapmaları için kullanışlıdır; fakat dikkatle kullanılmalıdır, çünkü nesneleri iade etmenin geri alınma imkanı yoktur." name="Parcel Content">
diff --git a/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml b/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml
index 28eeef02d3..2fa6281f05 100644
--- a/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml
@@ -118,6 +118,6 @@
<button label="Aç" name="open_btn"/>
<button label="Öde" name="pay_btn"/>
<button label="Satın Al" name="buy_btn"/>
- <button label="Ayrıntılar" name="details_btn"/>
+ <button label="Ayrıntl" name="details_btn"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml
index a17d78486d..bf331dc3cf 100644
--- a/indra/newview/skins/default/xui/tr/strings.xml
+++ b/indra/newview/skins/default/xui/tr/strings.xml
@@ -2160,7 +2160,7 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
Aşağı
</string>
<string name="Any Category">
- Herhangi Bir Kategori
+ Herh. Bir Kategori
</string>
<string name="Shopping">
Alışveriş
@@ -2190,7 +2190,7 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
Kişisel
</string>
<string name="None">
- Hiçbiri
+ Renksiz
</string>
<string name="Linden Location">
Linden Konumu
@@ -2390,7 +2390,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Arka Perçem
</string>
<string name="Baggy">
- Lüleler
+ Torbalı
</string>
<string name="Bangs">
Kahküller
@@ -2480,7 +2480,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Geniş
</string>
<string name="Brow Size">
- Kaş Büyüklüğü
+ Alın Genişliği
</string>
<string name="Bug Eyes">
Patlak Gözlü
@@ -2777,7 +2777,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Kaş Yüksekliği
</string>
<string name="Eyebrow Points">
- Kaş Noktaları
+ Kaş Yapısı
</string>
<string name="Eyebrow Size">
Kaş Büyüklüğü
@@ -2846,13 +2846,13 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Ön Perçem
</string>
<string name="Full Back">
- Saçlar Arkada
+ Arkası Düz
</string>
<string name="Full Eyeliner">
Çift Taraflı Göz Kalemi
</string>
<string name="Full Front">
- Saçlar Önde
+ Önü Düz
</string>
<string name="Full Hair Sides">
Saçlar Yanda
@@ -2936,13 +2936,13 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Yüksek Topuklar
</string>
<string name="High Jaw">
- Yüksek Çene Ucu
+ Ayrık
</string>
<string name="High Platforms">
- Yüksek Topuklu Ayakkabılar
+ Yüksek Topuklu
</string>
<string name="High and Tight">
- Tepede Bırakılmış Saç
+ Düşük
</string>
<string name="Higher">
Daha Yüksek
@@ -2954,7 +2954,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Kalça Genişliği
</string>
<string name="In">
- İç
+ İçeri
</string>
<string name="In Shdw Color">
İç Gölge Rengi
@@ -2978,19 +2978,19 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Ceket Kırışıklıkları
</string>
<string name="Jaw Angle">
- Çene Ucu Açısı
+ Çenenin Boyuna Uzaklığı
</string>
<string name="Jaw Jut">
- Çene Ucu Çıkıntısı
+ Alt Çene Uzunluğu
</string>
<string name="Jaw Shape">
- Çene Ucu Şekli
+ Çene Kemiği Genişliği
</string>
<string name="Join">
- Birleştir
+ Birleşik
</string>
<string name="Jowls">
- Gıdıklar
+ Avurtlar
</string>
<string name="Knee Angle">
Diz Açısı
@@ -3029,7 +3029,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Daha Az Dolgun
</string>
<string name="Less Gravity">
- Daha Az Yerçekimi
+ Dik Göğüs
</string>
<string name="Less Love">
Daha İnce Bel
@@ -3047,7 +3047,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Daha Az Yuvarlak
</string>
<string name="Less Saddle">
- Daha Dar Kalça
+ Basensiz
</string>
<string name="Less Square">
Daha Az Küt
@@ -3098,7 +3098,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Uzun Kafa
</string>
<string name="Long Hips">
- Geniş Kalçalar
+ Yüksek kalça
</string>
<string name="Long Legs">
Uzun Bacaklar
@@ -3107,7 +3107,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Uzun Boyun
</string>
<string name="Long Pigtails">
- Uzun Saç Örgüleri
+ Yandan Uzun Kuyruk
</string>
<string name="Long Ponytail">
Uzun Atkuyruğu
@@ -3137,13 +3137,13 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Alçak Topuklar
</string>
<string name="Low Jaw">
- Düşük Çene Ucu
+ Bitişik
</string>
<string name="Low Platforms">
Alçak Topuklu
</string>
<string name="Low and Loose">
- Serbest At Kuyruğu
+ Yüksek
</string>
<string name="Lower">
Daha Alçak
@@ -3182,7 +3182,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Daha Dolgun
</string>
<string name="More Gravity">
- Daha Çok Yerçekimi
+ Sarkık Göğüs
</string>
<string name="More Lipstick">
Daha Çok Ruj
@@ -3191,7 +3191,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Daha Kalın Bel
</string>
<string name="More Lower Lip">
- Daha Çok Alt Dudak
+ Daha Dolgun Alt Dudak
</string>
<string name="More Muscles">
Daha Çok Kas
@@ -3206,7 +3206,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Daha Yuvarlak
</string>
<string name="More Saddle">
- Daha Geniş Kalça
+ Basenli
</string>
<string name="More Sloped">
Daha Eğimli
@@ -3215,7 +3215,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Daha Küt
</string>
<string name="More Upper Lip">
- Daha Çok Üst Dudak
+ Daha Dolgun Üst Dudak
</string>
<string name="More Vertical">
Daha Dikey
@@ -3260,7 +3260,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Önü Dar
</string>
<string name="Narrow Lips">
- İnce Dudaklar
+ Küçük Dudaklar
</string>
<string name="Natural">
Doğal
@@ -3359,7 +3359,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Turuncu
</string>
<string name="Out">
- Dış
+ Dışarı
</string>
<string name="Out Shdw Color">
Dış Gölge Rengi
@@ -3377,7 +3377,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Dış Gölge
</string>
<string name="Overbite">
- Üst Dişler Önde
+ Öne Doğru
</string>
<string name="Package">
Apış Arası Şişkinliği
@@ -3416,7 +3416,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Pigment
</string>
<string name="Pigtails">
- Saç Örgüleri
+ Yan Kuyruklar
</string>
<string name="Pink">
Pembe
@@ -3431,7 +3431,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Topuk Genişliği
</string>
<string name="Pointy">
- Sivri
+ Dar
</string>
<string name="Pointy Heels">
Sivri Topuklar
@@ -3482,25 +3482,25 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Dağınık Saç
</string>
<string name="Saddle Bags">
- Kalça Kalınlığı
+ Basen Genişliği
</string>
<string name="Scrawny Leg">
Sıska Bacak
</string>
<string name="Separate">
- Ayrı
+ Ayrık
</string>
<string name="Shallow">
Sığ
</string>
<string name="Shear Back">
- Arkayı Dikey Kaydır
+ Arka Dolgunluğu
</string>
<string name="Shear Face">
Yüzü Dikey Kaydır
</string>
<string name="Shear Front">
- Önü Dikey Kaydır
+ Ön Dolgunluğu
</string>
<string name="Shear Left Up">
Solu Yukarı Kaydır
@@ -3509,10 +3509,10 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Sağı Yukarı Kaydır
</string>
<string name="Sheared Back">
- Arkası Dikey Kaydırılmış
+ Arkası Dolgun
</string>
<string name="Sheared Front">
- Önü Dikey Kaydırılmış
+ Önü Dolgun
</string>
<string name="Shift Left">
Sola Kaydır
@@ -3548,7 +3548,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Kısa Boyun
</string>
<string name="Short Pigtails">
- Kısa Atkuyrukları
+ Yandan Kısa Kuyruk
</string>
<string name="Short Ponytail">
Kısa Atkuyruğu
@@ -3560,7 +3560,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Kısa Gövde
</string>
<string name="Short hips">
- Dar kalçalar
+ Düşük kalça
</string>
<string name="Shoulders">
Omuzlar
@@ -3638,7 +3638,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Dikleştirilmiş Saç
</string>
<string name="Square">
- Kare
+ Geniş
</string>
<string name="Square Toe">
Küt Burunlu
@@ -3680,7 +3680,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Kalın Boyun
</string>
<string name="Thick Toe">
- Kalın kabu Burnu
+ Kalın Ayak Ucu
</string>
<string name="Thin">
İnce
@@ -3695,7 +3695,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
İnce Burun
</string>
<string name="Tight Chin">
- Dar Çene
+ Çift Çene
</string>
<string name="Tight Cuffs">
Dar Paçalar
@@ -3710,7 +3710,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Dar Etek
</string>
<string name="Tight Sleeves">
- Dar Kollar
+ Dar Kollu
</string>
<string name="Toe Shape">
Ayakkabu Burnu Şekli
@@ -3728,13 +3728,13 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Sıska Gövde
</string>
<string name="Unattached">
- Bağımsız
+ Ayrık
</string>
<string name="Uncreased">
Buruşuk olmayan
</string>
<string name="Underbite">
- Alt Dişler Önde
+ Geriye Doğru
</string>
<string name="Unnatural">
Doğal Olmayan
@@ -3770,7 +3770,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
Geniş
</string>
<string name="Wide Back">
- Geniş Sırt
+ Geniş Arka
</string>
<string name="Wide Front">
Geniş Ön
diff --git a/indra/test/CMakeLists.txt b/indra/test/CMakeLists.txt
index e9eb3c1884..328ab4ca51 100644
--- a/indra/test/CMakeLists.txt
+++ b/indra/test/CMakeLists.txt
@@ -4,7 +4,6 @@ project (test)
include(00-Common)
include(LLCommon)
-include(LLDatabase)
include(LLInventory)
include(LLMath)
include(LLMessage)
@@ -32,7 +31,7 @@ include_directories(
set(test_SOURCE_FILES
io.cpp
-# llapp_tut.cpp # Temporarily removed until thread issues can be solved
+ llapp_tut.cpp
llblowfish_tut.cpp
llbuffer_tut.cpp
lldoubledispatch_tut.cpp
@@ -53,8 +52,6 @@ set(test_SOURCE_FILES
llservicebuilder_tut.cpp
llstreamtools_tut.cpp
lltemplatemessagebuilder_tut.cpp
- lltimestampcache_tut.cpp
- lltranscode_tut.cpp
lltut.cpp
lluuidhashmap_tut.cpp
message_tut.cpp
@@ -76,12 +73,6 @@ if (NOT WINDOWS)
)
endif (NOT WINDOWS)
-if (NOT DARWIN)
- list(APPEND test_SOURCE_FILES
- lldatabase_tut.cpp
- )
-endif (NOT DARWIN)
-
set_source_files_properties(${test_HEADER_FILES}
PROPERTIES HEADER_FILE_ONLY TRUE)
@@ -100,7 +91,6 @@ target_link_libraries(test
${LLCOMMON_LIBRARIES}
${EXPAT_LIBRARIES}
${GOOGLEMOCK_LIBRARIES}
- ${APRICONV_LIBRARIES}
${PTHREAD_LIBRARY}
${WINDOWS_LIBRARIES}
${BOOST_PROGRAM_OPTIONS_LIBRARY}
@@ -119,38 +109,28 @@ endif (WINDOWS)
get_target_property(TEST_EXE test LOCATION)
-SET_TEST_PATH(LD_LIBRARY_PATH)
-LL_TEST_COMMAND(command "${LD_LIBRARY_PATH}"
- "${TEST_EXE}" "--output=${CMAKE_CURRENT_BINARY_DIR}/cpp_test_results.txt" "--touch=${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt")
+SET_TEST_PATH(DYLD_LIBRARY_PATH)
+
+LL_TEST_COMMAND(command
+ "${DYLD_LIBRARY_PATH}"
+ "${TEST_EXE}"
+ "--output=${CMAKE_CURRENT_BINARY_DIR}/cpp_test_results.txt"
+ "--touch=${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt")
+
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt
COMMAND ${command}
DEPENDS test
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "C++ unit tests"
- )
+ )
set(test_results ${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt)
-if (EXISTS /etc/debian_version_FAIL)
- # The Python tests have all kinds of wacky non-portable assumptions
- # built in.
-
- add_custom_command(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/py_tests_ok.txt
- COMMAND ${PYTHON_EXECUTABLE}
- ARGS
- ${CMAKE_CURRENT_SOURCE_DIR}/test.py
- --mode=static
- --output=${CMAKE_CURRENT_BINARY_DIR}/py_test_results.txt
- --touch=${CMAKE_CURRENT_BINARY_DIR}/py_tests_ok.txt
- --mode=static
- DEPENDS test.py
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- COMMENT "Python unit tests"
- )
-
- list(APPEND test_results ${CMAKE_CURRENT_BINARY_DIR}/py_tests_ok.txt)
-endif (EXISTS /etc/debian_version_FAIL)
-
-add_custom_target(tests_ok ALL DEPENDS ${test_results})
+# This should cause the test executable to be built, but not
+# run if LL_TESTS is disabled. This will hopefully keep the
+# tests up to date with any code changes changes even if
+# developers choose to disable LL_TESTS.
+if (LL_TESTS)
+ add_custom_target(tests_ok ALL DEPENDS ${test_results})
+endif (LL_TESTS)
diff --git a/indra/test/io.cpp b/indra/test/io.cpp
index c06c1b153b..ce747f667d 100644
--- a/indra/test/io.cpp
+++ b/indra/test/io.cpp
@@ -909,7 +909,7 @@ namespace tut
pipe_and_pump_fitness()
{
- LLFrameTimer::updateFrameTime();
+ LLFrameTimer::updateFrameTime();
apr_pool_create(&mPool, NULL);
mPump = new LLPumpIO(mPool);
mSocket = LLSocket::create(
diff --git a/indra/test/llapp_tut.cpp b/indra/test/llapp_tut.cpp
new file mode 100644
index 0000000000..aa5c0672e6
--- /dev/null
+++ b/indra/test/llapp_tut.cpp
@@ -0,0 +1,162 @@
+/**
+ * @file llapp_tut.cpp
+ * @author Phoenix
+ * @date 2006-09-12
+ *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2006-2011, 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 <tut/tut.hpp>
+
+#include "linden_common.h"
+#include "llapp.h"
+#include "lltut.h"
+
+
+namespace tut
+{
+ struct application
+ {
+ class LLTestApp : public LLApp
+ {
+ public:
+ virtual bool init() { return true; }
+ virtual bool cleanup() { return true; }
+ virtual bool mainLoop() { return true; }
+ };
+ LLTestApp* mApp;
+ application()
+ {
+ mApp = new LLTestApp;
+ }
+ ~application()
+ {
+ delete mApp;
+ }
+ };
+
+ typedef test_group<application> application_t;
+ typedef application_t::object application_object_t;
+ tut::application_t tut_application("application");
+
+ template<> template<>
+ void application_object_t::test<1>()
+ {
+ LLSD defaults;
+ defaults["template"] = "../../../scripts/messages/message_template.msg";
+ defaults["configdir"] = ".";
+ defaults["datadir"] = "data";
+ mApp->setOptionData(LLApp::PRIORITY_DEFAULT, defaults);
+
+ LLSD datadir_sd = mApp->getOption("datadir");
+ ensure_equals("data type", datadir_sd.type(), LLSD::TypeString);
+ ensure_equals(
+ "data value", datadir_sd.asString(), std::string("data"));
+ }
+
+ template<> template<>
+ void application_object_t::test<2>()
+ {
+ const int ARGC = 13;
+ const char* ARGV[ARGC] =
+ {
+ "", // argv[0] is usually the application name
+ "-crashcount",
+ "2",
+ "-space",
+ "spaceserver.grid.lindenlab.com",
+ "-db_host",
+ "localhost",
+ "--allowlslhttprequests",
+ "-asset-uri",
+ "http://test.lindenlab.com/assets",
+ "-data",
+ "127.0.0.1",
+ "--smtp"
+ };
+ bool ok = mApp->parseCommandOptions(ARGC, const_cast<char**>(ARGV));
+ ensure("command line parsed", ok);
+ ensure_equals(
+ "crashcount", mApp->getOption("crashcount").asInteger(), 2);
+ ensure_equals(
+ "space",
+ mApp->getOption("space").asString(),
+ std::string("spaceserver.grid.lindenlab.com"));
+ ensure_equals(
+ "db_host",
+ mApp->getOption("db_host").asString(),
+ std::string("localhost"));
+ ensure("allowlshlttprequests", mApp->getOption("smtp"));
+ ensure_equals(
+ "asset-uri",
+ mApp->getOption("asset-uri").asString(),
+ std::string("http://test.lindenlab.com/assets"));
+ ensure_equals(
+ "data",
+ mApp->getOption("data").asString(),
+ std::string("127.0.0.1"));
+ ensure("smtp", mApp->getOption("smtp"));
+ }
+
+ template<> template<>
+ void application_object_t::test<3>()
+ {
+ const int ARGC = 4;
+ const char* ARGV[ARGC] =
+ {
+ "", // argv[0] is usually the application name
+ "crashcount",
+ "2",
+ "--space"
+ };
+ bool ok = mApp->parseCommandOptions(ARGC, const_cast<char**>(ARGV));
+ ensure("command line parse failure", !ok);
+ }
+
+ template<> template<>
+ void application_object_t::test<4>()
+ {
+ const int ARGC = 4;
+ const char* ARGV[ARGC] =
+ {
+ "", // argv[0] is usually the application name
+ "--crashcount",
+ "2",
+ "space"
+ };
+ bool ok = mApp->parseCommandOptions(ARGC, const_cast<char**>(ARGV));
+ ensure("command line parse failure", !ok);
+ }
+
+
+ template<> template<>
+ void application_object_t::test<5>()
+ {
+ LLSD options;
+ options["boolean-test"] = true;
+ mApp->setOptionData(LLApp::PRIORITY_GENERAL_CONFIGURATION, options);
+ ensure("bool set", mApp->getOption("boolean-test").asBoolean());
+ options["boolean-test"] = false;
+ mApp->setOptionData(LLApp::PRIORITY_RUNTIME_OVERRIDE, options);
+ ensure("bool unset", !mApp->getOption("boolean-test").asBoolean());
+ }
+}
diff --git a/indra/test/llevents_tut.cpp b/indra/test/llevents_tut.cpp
index 57e22bbb56..4699bb1827 100644
--- a/indra/test/llevents_tut.cpp
+++ b/indra/test/llevents_tut.cpp
@@ -54,686 +54,730 @@
using boost::assign::list_of;
+#ifdef LL_LINUX
+#define CATCH_MISSED_LINUX_EXCEPTION(exception, threw) \
+catch (const std::runtime_error& ex) \
+{ \
+ /* This clause is needed on Linux, on the viewer side, because the */ \
+ /* exception isn't caught by the clause above. Warn the user... */ \
+ std::cerr << "Failed to catch " << typeid(ex).name() << std::endl; \
+ /* But if the expected exception was thrown, allow the test to */ \
+ /* succeed anyway. Not sure how else to handle this odd case. */ \
+ /* This approach is also used in llsdmessage_test.cpp. */ \
+ if (std::string(typeid(ex).name()) == typeid(exception).name()) \
+ { \
+ threw = ex.what(); \
+ /*std::cout << ex.what() << std::endl;*/ \
+ } \
+ else \
+ { \
+ /* We don't even recognize this exception. Let it propagate */ \
+ /* out to TUT to fail the test. */ \
+ throw; \
+ } \
+} \
+catch (...) \
+{ \
+ std::cerr << "Utterly failed to catch expected exception " << #exception << "!" << \
+ std::endl; \
+ /* This indicates a problem in the test that should be addressed. */ \
+ throw; \
+}
+
+#else // LL_LINUX
+#define CATCH_MISSED_LINUX_EXCEPTION(exception, threw) \
+ /* Not needed on other platforms */
+#endif // LL_LINUX
+
template<typename T>
-T make(const T& value) { return value; }
+T make(const T& value)
+{
+ return value;
+}
/*****************************************************************************
-* tut test group
-*****************************************************************************/
+ * tut test group
+ *****************************************************************************/
namespace tut
{
- struct events_data
- {
- events_data():
- pumps(LLEventPumps::instance()),
- listener0("first"),
- listener1("second")
- {}
- LLEventPumps& pumps;
- Listener listener0;
- Listener listener1;
-
- void check_listener(const std::string& desc, const Listener& listener, LLSD::Integer got)
- {
- ensure_equals(STRINGIZE(listener << ' ' << desc),
- listener.getLastEvent().asInteger(), got);
- }
- };
- typedef test_group<events_data> events_group;
- typedef events_group::object events_object;
- tut::events_group evgr("events");
-
- template<> template<>
- void events_object::test<1>()
- {
- set_test_name("basic operations");
- // Now there's a static constructor in llevents.cpp that registers on
- // the "mainloop" pump to call LLEventPumps::flush().
- // Actually -- having to modify this to track the statically-
- // constructed pumps in other TUT modules in this giant monolithic test
- // executable isn't such a hot idea.
-// ensure_equals("initial pump", pumps.mPumpMap.size(), 1);
- size_t initial_pumps(pumps.mPumpMap.size());
- LLEventPump& per_frame(pumps.obtain("per-frame"));
- ensure_equals("first explicit pump", pumps.mPumpMap.size(), initial_pumps+1);
- // Verify that per_frame was instantiated as an LLEventStream.
- ensure("LLEventStream leaf class", dynamic_cast<LLEventStream*>(&per_frame));
- ensure("enabled", per_frame.enabled());
- // Trivial test, but posting an event to an EventPump with no
- // listeners should not blow up. The test is relevant because defining
- // a boost::signal with a non-void return signature, using the default
- // combiner, blows up if there are no listeners. This is because the
- // default combiner is defined to return the value returned by the
- // last listener, which is meaningless if there were no listeners.
- per_frame.post(0);
- LLBoundListener connection = listener0.listenTo(per_frame);
- ensure("connected", connection.connected());
- ensure("not blocked", ! connection.blocked());
- per_frame.post(1);
- check_listener("received", listener0, 1);
- { // block the connection
- LLEventPump::Blocker block(connection);
- ensure("blocked", connection.blocked());
- per_frame.post(2);
- check_listener("not updated", listener0, 1);
- } // unblock
- ensure("unblocked", ! connection.blocked());
- per_frame.post(3);
- check_listener("unblocked", listener0, 3);
- LLBoundListener sameConnection = per_frame.getListener(listener0.getName());
- ensure("still connected", sameConnection.connected());
- ensure("still not blocked", ! sameConnection.blocked());
- { // block it again
- LLEventPump::Blocker block(sameConnection);
- ensure("re-blocked", sameConnection.blocked());
- per_frame.post(4);
- check_listener("re-blocked", listener0, 3);
- } // unblock
- bool threw = false;
- try
- {
- // NOTE: boost::bind() saves its arguments by VALUE! If you pass
- // an object instance rather than a pointer, you'll end up binding
- // to an internal copy of that instance! Use boost::ref() to
- // capture a reference instead.
- per_frame.listen(listener0.getName(), // note bug, dup name
- boost::bind(&Listener::call, boost::ref(listener1), _1));
- }
- catch (const LLEventPump::DupListenerName& e)
- {
- threw = true;
- ensure_equals(e.what(),
- std::string("DupListenerName: "
- "Attempt to register duplicate listener name '") +
- listener0.getName() +
- "' on " + typeid(per_frame).name() + " '" + per_frame.getName() + "'");
- }
- ensure("threw DupListenerName", threw);
- // do it right this time
- listener1.listenTo(per_frame);
- per_frame.post(5);
- check_listener("got", listener0, 5);
- check_listener("got", listener1, 5);
- per_frame.enable(false);
- per_frame.post(6);
- check_listener("didn't get", listener0, 5);
- check_listener("didn't get", listener1, 5);
- per_frame.enable();
- per_frame.post(7);
- check_listener("got", listener0, 7);
- check_listener("got", listener1, 7);
- per_frame.stopListening(listener0.getName());
- ensure("disconnected 0", ! connection.connected());
- ensure("disconnected 1", ! sameConnection.connected());
- per_frame.post(8);
- check_listener("disconnected", listener0, 7);
- check_listener("still connected", listener1, 8);
- per_frame.stopListening(listener1.getName());
- per_frame.post(9);
- check_listener("disconnected", listener1, 8);
- }
-
- template<> template<>
- void events_object::test<2>()
- {
- set_test_name("callstop() returning true");
- LLEventPump& per_frame(pumps.obtain("per-frame"));
- listener0.reset(0);
- listener1.reset(0);
- LLBoundListener bound0 = listener0.listenTo(per_frame, &Listener::callstop);
- LLBoundListener bound1 = listener1.listenTo(per_frame, &Listener::call,
- // after listener0
- make<LLEventPump::NameList>(list_of(listener0.getName())));
- ensure("enabled", per_frame.enabled());
- ensure("connected 0", bound0.connected());
- ensure("unblocked 0", ! bound0.blocked());
- ensure("connected 1", bound1.connected());
- ensure("unblocked 1", ! bound1.blocked());
- per_frame.post(1);
- check_listener("got", listener0, 1);
- // Because listener0.callstop() returns true, control never reaches listener1.call().
- check_listener("got", listener1, 0);
- }
-
- bool chainEvents(Listener& someListener, const LLSD& event)
- {
- // Make this call so we can watch for side effects for test purposes.
- someListener.call(event);
- // This function represents a recursive event chain -- or some other
- // scenario in which an event handler raises additional events.
- int value = event.asInteger();
- if (value)
- {
- LLEventPumps::instance().obtain("login").post(value - 1);
- }
- return false;
- }
-
- template<> template<>
- void events_object::test<3>()
- {
- set_test_name("LLEventQueue delayed action");
- // This access is NOT legal usage: we can do it only because we're
- // hacking private for test purposes. Normally we'd either compile in
- // a particular name, or (later) edit a config file.
- pumps.mQueueNames.insert("login");
- LLEventPump& login(pumps.obtain("login"));
- // The "mainloop" pump is special: posting on that implicitly calls
- // LLEventPumps::flush(), which in turn should flush our "login"
- // LLEventQueue.
- LLEventPump& mainloop(pumps.obtain("mainloop"));
- ensure("LLEventQueue leaf class", dynamic_cast<LLEventQueue*>(&login));
- listener0.listenTo(login);
- listener0.reset(0);
- login.post(1);
- check_listener("waiting for queued event", listener0, 0);
- mainloop.post(LLSD());
- check_listener("got queued event", listener0, 1);
- login.stopListening(listener0.getName());
- // Verify that when an event handler posts a new event on the same
- // LLEventQueue, it doesn't get processed in the same flush() call --
- // it waits until the next flush() call.
- listener0.reset(17);
- login.listen("chainEvents", boost::bind(chainEvents, boost::ref(listener0), _1));
- login.post(1);
- check_listener("chainEvents(1) not yet called", listener0, 17);
- mainloop.post(LLSD());
- check_listener("chainEvents(1) called", listener0, 1);
- mainloop.post(LLSD());
- check_listener("chainEvents(0) called", listener0, 0);
- mainloop.post(LLSD());
- check_listener("chainEvents(-1) not called", listener0, 0);
- login.stopListening("chainEvents");
- }
-
- template<> template<>
- void events_object::test<4>()
- {
- set_test_name("explicitly-instantiated LLEventStream");
- // Explicitly instantiate an LLEventStream, and verify that it
- // self-registers with LLEventPumps
- size_t registered = pumps.mPumpMap.size();
- size_t owned = pumps.mOurPumps.size();
- LLEventPump* localInstance;
- {
- LLEventStream myEventStream("stream");
- localInstance = &myEventStream;
- LLEventPump& stream(pumps.obtain("stream"));
- ensure("found named LLEventStream instance", &stream == localInstance);
- ensure_equals("registered new instance", pumps.mPumpMap.size(), registered + 1);
- ensure_equals("explicit instance not owned", pumps.mOurPumps.size(), owned);
- } // destroy myEventStream -- should unregister
- ensure_equals("destroyed instance unregistered", pumps.mPumpMap.size(), registered);
- ensure_equals("destroyed instance not owned", pumps.mOurPumps.size(), owned);
- LLEventPump& stream(pumps.obtain("stream"));
- ensure("new LLEventStream instance", &stream != localInstance);
- ensure_equals("obtain()ed instance registered", pumps.mPumpMap.size(), registered + 1);
- ensure_equals("obtain()ed instance owned", pumps.mOurPumps.size(), owned + 1);
- }
-
- template<> template<>
- void events_object::test<5>()
- {
- set_test_name("stopListening()");
- LLEventPump& login(pumps.obtain("login"));
- listener0.listenTo(login);
- login.stopListening(listener0.getName());
- // should not throw because stopListening() should have removed name
- listener0.listenTo(login, &Listener::callstop);
- LLBoundListener wrong = login.getListener("bogus");
- ensure("bogus connection disconnected", ! wrong.connected());
- ensure("bogus connection blocked", wrong.blocked());
- }
-
- template<> template<>
- void events_object::test<6>()
- {
- set_test_name("chaining LLEventPump instances");
- LLEventPump& upstream(pumps.obtain("upstream"));
- // One potentially-useful construct is to chain LLEventPumps together.
- // Among other things, this allows you to turn subsets of listeners on
- // and off in groups.
- LLEventPump& filter0(pumps.obtain("filter0"));
- LLEventPump& filter1(pumps.obtain("filter1"));
- upstream.listen(filter0.getName(),
- boost::bind(&LLEventPump::post, boost::ref(filter0), _1));
- upstream.listen(filter1.getName(),
- boost::bind(&LLEventPump::post, boost::ref(filter1), _1));
- listener0.listenTo(filter0);
- listener1.listenTo(filter1);
- listener0.reset(0);
- listener1.reset(0);
- upstream.post(1);
- check_listener("got unfiltered", listener0, 1);
- check_listener("got unfiltered", listener1, 1);
- filter0.enable(false);
- upstream.post(2);
- check_listener("didn't get filtered", listener0, 1);
- check_listener("got filtered", listener1, 2);
- }
-
- template<> template<>
- void events_object::test<7>()
- {
- set_test_name("listener dependency order");
- typedef LLEventPump::NameList NameList;
- typedef Collect::StringList StringList;
- LLEventPump& button(pumps.obtain("button"));
- Collect collector;
- button.listen("Mary",
- boost::bind(&Collect::add, boost::ref(collector), "Mary", _1),
- // state that "Mary" must come after "checked"
- make<NameList>(list_of("checked")));
- button.listen("checked",
- boost::bind(&Collect::add, boost::ref(collector), "checked", _1),
- // "checked" must come after "spot"
- make<NameList>(list_of("spot")));
- button.listen("spot",
- boost::bind(&Collect::add, boost::ref(collector), "spot", _1));
- button.post(1);
- ensure_equals(collector.result, make<StringList>(list_of("spot")("checked")("Mary")));
- collector.clear();
- button.stopListening("Mary");
- button.listen("Mary",
- boost::bind(&Collect::add, boost::ref(collector), "Mary", _1),
- LLEventPump::empty, // no after dependencies
- // now "Mary" must come before "spot"
- make<NameList>(list_of("spot")));
- button.post(2);
- ensure_equals(collector.result, make<StringList>(list_of("Mary")("spot")("checked")));
- collector.clear();
- button.stopListening("spot");
- std::string threw;
- try
- {
- button.listen("spot",
- boost::bind(&Collect::add, boost::ref(collector), "spot", _1),
- // after "Mary" and "checked" -- whoops!
- make<NameList>(list_of("Mary")("checked")));
- }
- catch (const LLEventPump::Cycle& e)
- {
- threw = e.what();
-// std::cout << "Caught: " << e.what() << '\n';
- }
- // Obviously the specific wording of the exception text can
- // change; go ahead and change the test to match.
- // Establish that it contains:
- // - the name and runtime type of the LLEventPump
- ensure_contains("LLEventPump type", threw, typeid(button).name());
- ensure_contains("LLEventPump name", threw, "'button'");
- // - the name of the new listener that caused the problem
- ensure_contains("new listener name", threw, "'spot'");
- // - a synopsis of the problematic dependencies.
- ensure_contains("cyclic dependencies", threw,
- "\"Mary\" -> before (\"spot\")");
- ensure_contains("cyclic dependencies", threw,
- "after (\"spot\") -> \"checked\"");
- ensure_contains("cyclic dependencies", threw,
- "after (\"Mary\", \"checked\") -> \"spot\"");
- button.listen("yellow",
- boost::bind(&Collect::add, boost::ref(collector), "yellow", _1),
- make<NameList>(list_of("checked")));
- button.listen("shoelaces",
- boost::bind(&Collect::add, boost::ref(collector), "shoelaces", _1),
- make<NameList>(list_of("checked")));
- button.post(3);
- ensure_equals(collector.result, make<StringList>(list_of("Mary")("checked")("yellow")("shoelaces")));
- collector.clear();
- threw.clear();
- try
- {
- button.listen("of",
- boost::bind(&Collect::add, boost::ref(collector), "of", _1),
- make<NameList>(list_of("shoelaces")),
- make<NameList>(list_of("yellow")));
- }
- catch (const LLEventPump::OrderChange& e)
- {
- threw = e.what();
-// std::cout << "Caught: " << e.what() << '\n';
- }
- // Same remarks about the specific wording of the exception. Just
- // ensure that it contains enough information to clarify the
- // problem and what must be done to resolve it.
- ensure_contains("LLEventPump type", threw, typeid(button).name());
- ensure_contains("LLEventPump name", threw, "'button'");
- ensure_contains("new listener name", threw, "'of'");
- ensure_contains("prev listener name", threw, "'yellow'");
- ensure_contains("old order", threw, "was: Mary, checked, yellow, shoelaces");
- ensure_contains("new order", threw, "now: Mary, checked, shoelaces, of, yellow");
- button.post(4);
- ensure_equals(collector.result, make<StringList>(list_of("Mary")("checked")("yellow")("shoelaces")));
- }
-
- template<> template<>
- void events_object::test<8>()
- {
- set_test_name("tweaked and untweaked LLEventPump instance names");
- { // nested scope
- // Hand-instantiate an LLEventStream...
- LLEventStream bob("bob");
- bool threw = false;
- try
- {
- // then another with a duplicate name.
- LLEventStream bob2("bob");
- }
- catch (const LLEventPump::DupPumpName& /*e*/)
- {
- threw = true;
-// std::cout << "Caught: " << e.what() << '\n';
- }
- ensure("Caught DupPumpName", threw);
- } // delete first 'bob'
- LLEventStream bob("bob"); // should work, previous one unregistered
- LLEventStream bob1("bob", true); // allowed to tweak name
- ensure_equals("tweaked LLEventStream name", bob1.getName(), "bob1");
- std::vector< boost::shared_ptr<LLEventStream> > streams;
- for (int i = 2; i <= 10; ++i)
- {
- streams.push_back(boost::shared_ptr<LLEventStream>(new LLEventStream("bob", true)));
- }
- ensure_equals("last tweaked LLEventStream name", streams.back()->getName(), "bob10");
- }
-
- // Define a function that accepts an LLListenerOrPumpName
- void eventSource(const LLListenerOrPumpName& listener)
- {
- // Pretend that some time has elapsed. Call listener immediately.
- listener(17);
- }
-
- template<> template<>
- void events_object::test<9>()
- {
- set_test_name("LLListenerOrPumpName");
- // Passing a boost::bind() expression to LLListenerOrPumpName
- listener0.reset(0);
- eventSource(boost::bind(&Listener::call, boost::ref(listener0), _1));
- check_listener("got by listener", listener0, 17);
- // Passing a string LLEventPump name to LLListenerOrPumpName
- listener0.reset(0);
- LLEventStream random("random");
- listener0.listenTo(random);
- eventSource("random");
- check_listener("got by pump name", listener0, 17);
- bool threw = false;
- try
- {
- LLListenerOrPumpName empty;
- empty(17);
- }
- catch (const LLListenerOrPumpName::Empty&)
- {
- threw = true;
- }
- ensure("threw Empty", threw);
- }
-
- class TempListener: public Listener
- {
- public:
- TempListener(const std::string& name, bool& liveFlag):
- Listener(name),
- mLiveFlag(liveFlag)
- {
- mLiveFlag = true;
- }
-
- virtual ~TempListener()
- {
- mLiveFlag = false;
- }
-
- private:
- bool& mLiveFlag;
- };
-
- template<> template<>
- void events_object::test<10>()
- {
- set_test_name("listen(boost::bind(...TempListener...))");
- // listen() can't do anything about a plain TempListener instance:
- // it's not managed with shared_ptr, nor is it an LLEventTrackable subclass
- bool live = false;
- LLEventPump& heaptest(pumps.obtain("heaptest"));
- LLBoundListener connection;
- {
- TempListener tempListener("temp", live);
- ensure("TempListener constructed", live);
- connection = heaptest.listen(tempListener.getName(),
- boost::bind(&Listener::call,
- boost::ref(tempListener),
- _1));
- heaptest.post(1);
- check_listener("received", tempListener, 1);
- } // presumably this will make newListener go away?
- // verify that
- ensure("TempListener destroyed", ! live);
- // This is the case against which we can't defend. Don't even try to
- // post to heaptest -- that would engage Undefined Behavior.
- // Cautiously inspect connection...
- ensure("misleadingly connected", connection.connected());
- // then disconnect by hand.
- heaptest.stopListening("temp");
- }
-
- template<> template<>
- void events_object::test<11>()
- {
- set_test_name("listen(boost::bind(...weak_ptr...))");
- // listen() detecting weak_ptr<TempListener> in boost::bind() object
- bool live = false;
- LLEventPump& heaptest(pumps.obtain("heaptest"));
- LLBoundListener connection;
- ensure("default state", ! connection.connected());
- {
- boost::shared_ptr<TempListener> newListener(new TempListener("heap", live));
- newListener->reset();
- ensure("TempListener constructed", live);
- connection = heaptest.listen(newListener->getName(),
- boost::bind(&Listener::call, weaken(newListener), _1));
- ensure("new connection", connection.connected());
- heaptest.post(1);
- check_listener("received", *newListener, 1);
- } // presumably this will make newListener go away?
- // verify that
- ensure("TempListener destroyed", ! live);
- ensure("implicit disconnect", ! connection.connected());
- // now just make sure we don't blow up trying to access a freed object!
- heaptest.post(2);
- }
-
- template<> template<>
- void events_object::test<12>()
- {
- set_test_name("listen(boost::bind(...shared_ptr...))");
-/*==========================================================================*|
- // DISABLED because I've made this case produce a compile error.
- // Following the error leads the disappointed dev to a comment
- // instructing her to use the weaken() function to bind a weak_ptr<T>
- // instead of binding a shared_ptr<T>, and explaining why. I know of
- // no way to use TUT to code a repeatable test in which the expected
- // outcome is a compile error. The interested reader is invited to
- // uncomment this block and build to see for herself.
-
- // listen() detecting shared_ptr<TempListener> in boost::bind() object
- bool live = false;
- LLEventPump& heaptest(pumps.obtain("heaptest"));
- LLBoundListener connection;
- std::string listenerName("heap");
- ensure("default state", ! connection.connected());
- {
- boost::shared_ptr<TempListener> newListener(new TempListener(listenerName, live));
- ensure_equals("use_count", newListener.use_count(), 1);
- newListener->reset();
- ensure("TempListener constructed", live);
- connection = heaptest.listen(newListener->getName(),
- boost::bind(&Listener::call, newListener, _1));
- ensure("new connection", connection.connected());
- ensure_equals("use_count", newListener.use_count(), 2);
- heaptest.post(1);
- check_listener("received", *newListener, 1);
- } // this should make newListener go away...
- // Unfortunately, the fact that we've bound a shared_ptr by value into
- // our LLEventPump means that copy will keep the referenced object alive.
- ensure("TempListener still alive", live);
- ensure("still connected", connection.connected());
- // disconnecting explicitly should delete the TempListener...
- heaptest.stopListening(listenerName);
+struct events_data
+{
+ events_data() :
+ pumps(LLEventPumps::instance()),
+ listener0("first"),
+ listener1("second")
+ {
+ }
+ LLEventPumps& pumps;
+ Listener listener0;
+ Listener listener1;
+
+ void check_listener(const std::string& desc, const Listener& listener, LLSD::Integer got)
+ {
+ ensure_equals(STRINGIZE(listener << ' ' << desc),
+ listener.getLastEvent().asInteger(), got);
+ }
+};
+typedef test_group<events_data> events_group;
+typedef events_group::object events_object;
+tut::events_group evgr("events");
+
+template<> template<>
+void events_object::test<1>()
+{
+ set_test_name("basic operations");
+ // Now there's a static constructor in llevents.cpp that registers on
+ // the "mainloop" pump to call LLEventPumps::flush().
+ // Actually -- having to modify this to track the statically-
+ // constructed pumps in other TUT modules in this giant monolithic test
+ // executable isn't such a hot idea.
+ // ensure_equals("initial pump", pumps.mPumpMap.size(), 1);
+ size_t initial_pumps(pumps.mPumpMap.size());
+ LLEventPump& per_frame(pumps.obtain("per-frame"));
+ ensure_equals("first explicit pump", pumps.mPumpMap.size(), initial_pumps + 1);
+ // Verify that per_frame was instantiated as an LLEventStream.
+ ensure("LLEventStream leaf class", dynamic_cast<LLEventStream*> (&per_frame));
+ ensure("enabled", per_frame.enabled());
+ // Trivial test, but posting an event to an EventPump with no
+ // listeners should not blow up. The test is relevant because defining
+ // a boost::signal with a non-void return signature, using the default
+ // combiner, blows up if there are no listeners. This is because the
+ // default combiner is defined to return the value returned by the
+ // last listener, which is meaningless if there were no listeners.
+ per_frame.post(0);
+ LLBoundListener connection = listener0.listenTo(per_frame);
+ ensure("connected", connection.connected());
+ ensure("not blocked", !connection.blocked());
+ per_frame.post(1);
+ check_listener("received", listener0, 1);
+ { // block the connection
+ LLEventPump::Blocker block(connection);
+ ensure("blocked", connection.blocked());
+ per_frame.post(2);
+ check_listener("not updated", listener0, 1);
+ } // unblock
+ ensure("unblocked", !connection.blocked());
+ per_frame.post(3);
+ check_listener("unblocked", listener0, 3);
+ LLBoundListener sameConnection = per_frame.getListener(listener0.getName());
+ ensure("still connected", sameConnection.connected());
+ ensure("still not blocked", !sameConnection.blocked());
+ { // block it again
+ LLEventPump::Blocker block(sameConnection);
+ ensure("re-blocked", sameConnection.blocked());
+ per_frame.post(4);
+ check_listener("re-blocked", listener0, 3);
+ } // unblock
+ std::string threw;
+ try
+ {
+ // NOTE: boost::bind() saves its arguments by VALUE! If you pass
+ // an object instance rather than a pointer, you'll end up binding
+ // to an internal copy of that instance! Use boost::ref() to
+ // capture a reference instead.
+ per_frame.listen(listener0.getName(), // note bug, dup name
+ boost::bind(&Listener::call, boost::ref(listener1), _1));
+ }
+ catch (const LLEventPump::DupListenerName& e)
+ {
+ threw = e.what();
+ }
+ CATCH_MISSED_LINUX_EXCEPTION(LLEventPump::DupListenerName, threw)
+ ensure_equals(threw,
+ std::string("DupListenerName: "
+ "Attempt to register duplicate listener name '") +
+ listener0.getName() + "' on " + typeid(per_frame).name() +
+ " '" + per_frame.getName() + "'");
+ // do it right this time
+ listener1.listenTo(per_frame);
+ per_frame.post(5);
+ check_listener("got", listener0, 5);
+ check_listener("got", listener1, 5);
+ per_frame.enable(false);
+ per_frame.post(6);
+ check_listener("didn't get", listener0, 5);
+ check_listener("didn't get", listener1, 5);
+ per_frame.enable();
+ per_frame.post(7);
+ check_listener("got", listener0, 7);
+ check_listener("got", listener1, 7);
+ per_frame.stopListening(listener0.getName());
+ ensure("disconnected 0", ! connection.connected());
+ ensure("disconnected 1", ! sameConnection.connected());
+ per_frame.post(8);
+ check_listener("disconnected", listener0, 7);
+ check_listener("still connected", listener1, 8);
+ per_frame.stopListening(listener1.getName());
+ per_frame.post(9);
+ check_listener("disconnected", listener1, 8);
+}
+
+template<> template<>
+void events_object::test<2>()
+{
+ set_test_name("callstop() returning true");
+ LLEventPump& per_frame(pumps.obtain("per-frame"));
+ listener0.reset(0);
+ listener1.reset(0);
+ LLBoundListener bound0 = listener0.listenTo(per_frame, &Listener::callstop);
+ LLBoundListener bound1 = listener1.listenTo(per_frame, &Listener::call,
+ // after listener0
+ make<LLEventPump::NameList>(list_of(listener0.getName())));
+ ensure("enabled", per_frame.enabled());
+ ensure("connected 0", bound0.connected());
+ ensure("unblocked 0", !bound0.blocked());
+ ensure("connected 1", bound1.connected());
+ ensure("unblocked 1", !bound1.blocked());
+ per_frame.post(1);
+ check_listener("got", listener0, 1);
+ // Because listener0.callstop() returns true, control never reaches listener1.call().
+ check_listener("got", listener1, 0);
+}
+
+bool chainEvents(Listener& someListener, const LLSD& event)
+{
+ // Make this call so we can watch for side effects for test purposes.
+ someListener.call(event);
+ // This function represents a recursive event chain -- or some other
+ // scenario in which an event handler raises additional events.
+ int value = event.asInteger();
+ if (value)
+ {
+ LLEventPumps::instance().obtain("login").post(value - 1);
+ }
+ return false;
+}
+
+template<> template<>
+void events_object::test<3>()
+{
+ set_test_name("LLEventQueue delayed action");
+ // This access is NOT legal usage: we can do it only because we're
+ // hacking private for test purposes. Normally we'd either compile in
+ // a particular name, or (later) edit a config file.
+ pumps.mQueueNames.insert("login");
+ LLEventPump& login(pumps.obtain("login"));
+ // The "mainloop" pump is special: posting on that implicitly calls
+ // LLEventPumps::flush(), which in turn should flush our "login"
+ // LLEventQueue.
+ LLEventPump& mainloop(pumps.obtain("mainloop"));
+ ensure("LLEventQueue leaf class", dynamic_cast<LLEventQueue*> (&login));
+ listener0.listenTo(login);
+ listener0.reset(0);
+ login.post(1);
+ check_listener("waiting for queued event", listener0, 0);
+ mainloop.post(LLSD());
+ check_listener("got queued event", listener0, 1);
+ login.stopListening(listener0.getName());
+ // Verify that when an event handler posts a new event on the same
+ // LLEventQueue, it doesn't get processed in the same flush() call --
+ // it waits until the next flush() call.
+ listener0.reset(17);
+ login.listen("chainEvents", boost::bind(chainEvents, boost::ref(listener0), _1));
+ login.post(1);
+ check_listener("chainEvents(1) not yet called", listener0, 17);
+ mainloop.post(LLSD());
+ check_listener("chainEvents(1) called", listener0, 1);
+ mainloop.post(LLSD());
+ check_listener("chainEvents(0) called", listener0, 0);
+ mainloop.post(LLSD());
+ check_listener("chainEvents(-1) not called", listener0, 0);
+ login.stopListening("chainEvents");
+}
+
+template<> template<>
+void events_object::test<4>()
+{
+ set_test_name("explicitly-instantiated LLEventStream");
+ // Explicitly instantiate an LLEventStream, and verify that it
+ // self-registers with LLEventPumps
+ size_t registered = pumps.mPumpMap.size();
+ size_t owned = pumps.mOurPumps.size();
+ LLEventPump* localInstance;
+ {
+ LLEventStream myEventStream("stream");
+ localInstance = &myEventStream;
+ LLEventPump& stream(pumps.obtain("stream"));
+ ensure("found named LLEventStream instance", &stream == localInstance);
+ ensure_equals("registered new instance", pumps.mPumpMap.size(), registered + 1);
+ ensure_equals("explicit instance not owned", pumps.mOurPumps.size(), owned);
+ } // destroy myEventStream -- should unregister
+ ensure_equals("destroyed instance unregistered", pumps.mPumpMap.size(), registered);
+ ensure_equals("destroyed instance not owned", pumps.mOurPumps.size(), owned);
+ LLEventPump& stream(pumps.obtain("stream"));
+ ensure("new LLEventStream instance", &stream != localInstance);
+ ensure_equals("obtain()ed instance registered", pumps.mPumpMap.size(), registered + 1);
+ ensure_equals("obtain()ed instance owned", pumps.mOurPumps.size(), owned + 1);
+}
+
+template<> template<>
+void events_object::test<5>()
+{
+ set_test_name("stopListening()");
+ LLEventPump& login(pumps.obtain("login"));
+ listener0.listenTo(login);
+ login.stopListening(listener0.getName());
+ // should not throw because stopListening() should have removed name
+ listener0.listenTo(login, &Listener::callstop);
+ LLBoundListener wrong = login.getListener("bogus");
+ ensure("bogus connection disconnected", !wrong.connected());
+ ensure("bogus connection blocked", wrong.blocked());
+}
+
+template<> template<>
+void events_object::test<6>()
+{
+ set_test_name("chaining LLEventPump instances");
+ LLEventPump& upstream(pumps.obtain("upstream"));
+ // One potentially-useful construct is to chain LLEventPumps together.
+ // Among other things, this allows you to turn subsets of listeners on
+ // and off in groups.
+ LLEventPump& filter0(pumps.obtain("filter0"));
+ LLEventPump& filter1(pumps.obtain("filter1"));
+ upstream.listen(filter0.getName(), boost::bind(&LLEventPump::post, boost::ref(filter0), _1));
+ upstream.listen(filter1.getName(), boost::bind(&LLEventPump::post, boost::ref(filter1), _1));
+ listener0.listenTo(filter0);
+ listener1.listenTo(filter1);
+ listener0.reset(0);
+ listener1.reset(0);
+ upstream.post(1);
+ check_listener("got unfiltered", listener0, 1);
+ check_listener("got unfiltered", listener1, 1);
+ filter0.enable(false);
+ upstream.post(2);
+ check_listener("didn't get filtered", listener0, 1);
+ check_listener("got filtered", listener1, 2);
+}
+
+template<> template<>
+void events_object::test<7>()
+{
+ set_test_name("listener dependency order");
+ typedef LLEventPump::NameList NameList;
+ typedef Collect::StringList StringList;
+ LLEventPump& button(pumps.obtain("button"));
+ Collect collector;
+ button.listen("Mary",
+ boost::bind(&Collect::add, boost::ref(collector), "Mary", _1),
+ // state that "Mary" must come after "checked"
+ make<NameList> (list_of("checked")));
+ button.listen("checked",
+ boost::bind(&Collect::add, boost::ref(collector), "checked", _1),
+ // "checked" must come after "spot"
+ make<NameList> (list_of("spot")));
+ button.listen("spot",
+ boost::bind(&Collect::add, boost::ref(collector), "spot", _1));
+ button.post(1);
+ ensure_equals(collector.result, make<StringList>(list_of("spot")("checked")("Mary")));
+ collector.clear();
+ button.stopListening("Mary");
+ button.listen("Mary",
+ boost::bind(&Collect::add, boost::ref(collector), "Mary", _1),
+ LLEventPump::empty, // no after dependencies
+ // now "Mary" must come before "spot"
+ make<NameList>(list_of("spot")));
+ button.post(2);
+ ensure_equals(collector.result, make<StringList>(list_of("Mary")("spot")("checked")));
+ collector.clear();
+ button.stopListening("spot");
+ std::string threw;
+ try
+ {
+ button.listen("spot",
+ boost::bind(&Collect::add, boost::ref(collector), "spot", _1),
+ // after "Mary" and "checked" -- whoops!
+ make<NameList>(list_of("Mary")("checked")));
+ }
+ catch (const LLEventPump::Cycle& e)
+ {
+ threw = e.what();
+ // std::cout << "Caught: " << e.what() << '\n';
+ }
+ CATCH_MISSED_LINUX_EXCEPTION(LLEventPump::Cycle, threw)
+ // Obviously the specific wording of the exception text can
+ // change; go ahead and change the test to match.
+ // Establish that it contains:
+ // - the name and runtime type of the LLEventPump
+ ensure_contains("LLEventPump type", threw, typeid(button).name());
+ ensure_contains("LLEventPump name", threw, "'button'");
+ // - the name of the new listener that caused the problem
+ ensure_contains("new listener name", threw, "'spot'");
+ // - a synopsis of the problematic dependencies.
+ ensure_contains("cyclic dependencies", threw,
+ "\"Mary\" -> before (\"spot\")");
+ ensure_contains("cyclic dependencies", threw,
+ "after (\"spot\") -> \"checked\"");
+ ensure_contains("cyclic dependencies", threw,
+ "after (\"Mary\", \"checked\") -> \"spot\"");
+ button.listen("yellow",
+ boost::bind(&Collect::add, boost::ref(collector), "yellow", _1),
+ make<NameList>(list_of("checked")));
+ button.listen("shoelaces",
+ boost::bind(&Collect::add, boost::ref(collector), "shoelaces", _1),
+ make<NameList>(list_of("checked")));
+ button.post(3);
+ ensure_equals(collector.result, make<StringList>(list_of("Mary")("checked")("yellow")("shoelaces")));
+ collector.clear();
+ threw.clear();
+ try
+ {
+ button.listen("of",
+ boost::bind(&Collect::add, boost::ref(collector), "of", _1),
+ make<NameList>(list_of("shoelaces")),
+ make<NameList>(list_of("yellow")));
+ }
+ catch (const LLEventPump::OrderChange& e)
+ {
+ threw = e.what();
+ // std::cout << "Caught: " << e.what() << '\n';
+ }
+ CATCH_MISSED_LINUX_EXCEPTION(LLEventPump::OrderChange, threw)
+ // Same remarks about the specific wording of the exception. Just
+ // ensure that it contains enough information to clarify the
+ // problem and what must be done to resolve it.
+ ensure_contains("LLEventPump type", threw, typeid(button).name());
+ ensure_contains("LLEventPump name", threw, "'button'");
+ ensure_contains("new listener name", threw, "'of'");
+ ensure_contains("prev listener name", threw, "'yellow'");
+ // std::cout << "Thrown Exception: " << threw << std::endl;
+ ensure_contains("old order", threw, "was: Mary, checked, yellow, shoelaces");
+ ensure_contains("new order", threw, "now: Mary, checked, shoelaces, of, yellow");
+ button.post(4);
+ ensure_equals(collector.result, make<StringList>(list_of("Mary")("checked")("yellow")("shoelaces")));
+}
+
+template<> template<>
+void events_object::test<8>()
+{
+ set_test_name("tweaked and untweaked LLEventPump instance names");
+ { // nested scope
+ // Hand-instantiate an LLEventStream...
+ LLEventStream bob("bob");
+ std::string threw;
+ try
+ {
+ // then another with a duplicate name.
+ LLEventStream bob2("bob");
+ }
+ catch (const LLEventPump::DupPumpName& e)
+ {
+ threw = e.what();
+ // std::cout << "Caught: " << e.what() << '\n';
+ }
+ CATCH_MISSED_LINUX_EXCEPTION(LLEventPump::DupPumpName, threw)
+ ensure("Caught DupPumpName", !threw.empty());
+ } // delete first 'bob'
+ LLEventStream bob("bob"); // should work, previous one unregistered
+ LLEventStream bob1("bob", true);// allowed to tweak name
+ ensure_equals("tweaked LLEventStream name", bob1.getName(), "bob1");
+ std::vector<boost::shared_ptr<LLEventStream> > streams;
+ for (int i = 2; i <= 10; ++i)
+ {
+ streams.push_back(boost::shared_ptr<LLEventStream>(new LLEventStream("bob", true)));
+ }
+ ensure_equals("last tweaked LLEventStream name", streams.back()->getName(), "bob10");
+}
+
+// Define a function that accepts an LLListenerOrPumpName
+void eventSource(const LLListenerOrPumpName& listener)
+{
+ // Pretend that some time has elapsed. Call listener immediately.
+ listener(17);
+}
+
+template<> template<>
+void events_object::test<9>()
+{
+ set_test_name("LLListenerOrPumpName");
+ // Passing a boost::bind() expression to LLListenerOrPumpName
+ listener0.reset(0);
+ eventSource(boost::bind(&Listener::call, boost::ref(listener0), _1));
+ check_listener("got by listener", listener0, 17);
+ // Passing a string LLEventPump name to LLListenerOrPumpName
+ listener0.reset(0);
+ LLEventStream random("random");
+ listener0.listenTo(random);
+ eventSource("random");
+ check_listener("got by pump name", listener0, 17);
+ std::string threw;
+ try
+ {
+ LLListenerOrPumpName empty;
+ empty(17);
+ }
+ catch (const LLListenerOrPumpName::Empty& e)
+ {
+ threw = e.what();
+ }
+ CATCH_MISSED_LINUX_EXCEPTION(LLListenerOrPumpName::Empty, threw)
+
+ ensure("threw Empty", !threw.empty());
+}
+
+class TempListener: public Listener
+{
+public:
+ TempListener(const std::string& name, bool& liveFlag) :
+ Listener(name), mLiveFlag(liveFlag)
+ {
+ mLiveFlag = true;
+ }
+
+ virtual ~TempListener()
+ {
+ mLiveFlag = false;
+ }
+
+private:
+ bool& mLiveFlag;
+};
+
+template<> template<>
+void events_object::test<10>()
+{
+ set_test_name("listen(boost::bind(...TempListener...))");
+ // listen() can't do anything about a plain TempListener instance:
+ // it's not managed with shared_ptr, nor is it an LLEventTrackable subclass
+ bool live = false;
+ LLEventPump& heaptest(pumps.obtain("heaptest"));
+ LLBoundListener connection;
+ {
+ TempListener tempListener("temp", live);
+ ensure("TempListener constructed", live);
+ connection = heaptest.listen(tempListener.getName(),
+ boost::bind(&Listener::call,
+ boost::ref(tempListener),
+ _1));
+ heaptest.post(1);
+ check_listener("received", tempListener, 1);
+ } // presumably this will make newListener go away?
+ // verify that
+ ensure("TempListener destroyed", !live);
+ // This is the case against which we can't defend. Don't even try to
+ // post to heaptest -- that would engage Undefined Behavior.
+ // Cautiously inspect connection...
+ ensure("misleadingly connected", connection.connected());
+ // then disconnect by hand.
+ heaptest.stopListening("temp");
+}
+
+template<> template<>
+void events_object::test<11>()
+{
+ set_test_name("listen(boost::bind(...weak_ptr...))");
+ // listen() detecting weak_ptr<TempListener> in boost::bind() object
+ bool live = false;
+ LLEventPump& heaptest(pumps.obtain("heaptest"));
+ LLBoundListener connection;
+ ensure("default state", !connection.connected());
+ {
+ boost::shared_ptr<TempListener> newListener(new TempListener("heap", live));
+ newListener->reset();
+ ensure("TempListener constructed", live);
+ connection = heaptest.listen(newListener->getName(),
+ boost::bind(&Listener::call,
+ weaken(newListener),
+ _1));
+ ensure("new connection", connection.connected());
+ heaptest.post(1);
+ check_listener("received", *newListener, 1);
+ } // presumably this will make newListener go away?
+ // verify that
+ ensure("TempListener destroyed", !live);
+ ensure("implicit disconnect", !connection.connected());
+ // now just make sure we don't blow up trying to access a freed object!
+ heaptest.post(2);
+}
+
+template<> template<>
+void events_object::test<12>()
+{
+ set_test_name("listen(boost::bind(...shared_ptr...))");
+ /*==========================================================================*|
+ // DISABLED because I've made this case produce a compile error.
+ // Following the error leads the disappointed dev to a comment
+ // instructing her to use the weaken() function to bind a weak_ptr<T>
+ // instead of binding a shared_ptr<T>, and explaining why. I know of
+ // no way to use TUT to code a repeatable test in which the expected
+ // outcome is a compile error. The interested reader is invited to
+ // uncomment this block and build to see for herself.
+
+ // listen() detecting shared_ptr<TempListener> in boost::bind() object
+ bool live = false;
+ LLEventPump& heaptest(pumps.obtain("heaptest"));
+ LLBoundListener connection;
+ std::string listenerName("heap");
+ ensure("default state", !connection.connected());
+ {
+ boost::shared_ptr<TempListener> newListener(new TempListener(listenerName, live));
+ ensure_equals("use_count", newListener.use_count(), 1);
+ newListener->reset();
+ ensure("TempListener constructed", live);
+ connection = heaptest.listen(newListener->getName(),
+ boost::bind(&Listener::call, newListener, _1));
+ ensure("new connection", connection.connected());
+ ensure_equals("use_count", newListener.use_count(), 2);
+ heaptest.post(1);
+ check_listener("received", *newListener, 1);
+ } // this should make newListener go away...
+ // Unfortunately, the fact that we've bound a shared_ptr by value into
+ // our LLEventPump means that copy will keep the referenced object alive.
+ ensure("TempListener still alive", live);
+ ensure("still connected", connection.connected());
+ // disconnecting explicitly should delete the TempListener...
+ heaptest.stopListening(listenerName);
#if 0 // however, in my experience, it does not. I don't know why not.
- // Ah: on 2009-02-19, Frank Mori Hess, author of the Boost.Signals2
- // library, stated on the boost-users mailing list:
- // http://www.nabble.com/Re%3A--signals2--review--The-review-of-the-signals2-library-(formerly-thread_safe_signals)-begins-today%2C-Nov-1st-p22102367.html
- // "It will get destroyed eventually. The signal cleans up its slot
- // list little by little during connect/invoke. It doesn't immediately
- // remove disconnected slots from the slot list since other threads
- // might be using the same slot list concurrently. It might be
- // possible to make it immediately reset the shared_ptr owning the
- // slot though, leaving an empty shared_ptr in the slot list, since
- // that wouldn't invalidate any iterators."
- ensure("TempListener destroyed", ! live);
- ensure("implicit disconnect", ! connection.connected());
+ // Ah: on 2009-02-19, Frank Mori Hess, author of the Boost.Signals2
+ // library, stated on the boost-users mailing list:
+ // http://www.nabble.com/Re%3A--signals2--review--The-review-of-the-signals2-library-(formerly-thread_safe_signals)-begins-today%2C-Nov-1st-p22102367.html
+ // "It will get destroyed eventually. The signal cleans up its slot
+ // list little by little during connect/invoke. It doesn't immediately
+ // remove disconnected slots from the slot list since other threads
+ // might be using the same slot list concurrently. It might be
+ // possible to make it immediately reset the shared_ptr owning the
+ // slot though, leaving an empty shared_ptr in the slot list, since
+ // that wouldn't invalidate any iterators."
+ ensure("TempListener destroyed", ! live);
+ ensure("implicit disconnect", ! connection.connected());
#endif // 0
- // now just make sure we don't blow up trying to access a freed object!
- heaptest.post(2);
+ // now just make sure we don't blow up trying to access a freed object!
+ heaptest.post(2);
|*==========================================================================*/
- }
-
- class TempTrackableListener: public TempListener, public LLEventTrackable
- {
- public:
- TempTrackableListener(const std::string& name, bool& liveFlag):
- TempListener(name, liveFlag)
- {}
- };
-
- template<> template<>
- void events_object::test<13>()
- {
- set_test_name("listen(boost::bind(...TempTrackableListener ref...))");
- bool live = false;
- LLEventPump& heaptest(pumps.obtain("heaptest"));
- LLBoundListener connection;
- {
- TempTrackableListener tempListener("temp", live);
- ensure("TempTrackableListener constructed", live);
- connection = heaptest.listen(tempListener.getName(),
- boost::bind(&TempTrackableListener::call,
- boost::ref(tempListener), _1));
- heaptest.post(1);
- check_listener("received", tempListener, 1);
- } // presumably this will make tempListener go away?
- // verify that
- ensure("TempTrackableListener destroyed", ! live);
- ensure("implicit disconnect", ! connection.connected());
- // now just make sure we don't blow up trying to access a freed object!
- heaptest.post(2);
- }
-
- template<> template<>
- void events_object::test<14>()
- {
- set_test_name("listen(boost::bind(...TempTrackableListener pointer...))");
- bool live = false;
- LLEventPump& heaptest(pumps.obtain("heaptest"));
- LLBoundListener connection;
- {
- TempTrackableListener* newListener(new TempTrackableListener("temp", live));
- ensure("TempTrackableListener constructed", live);
- connection = heaptest.listen(newListener->getName(),
- boost::bind(&TempTrackableListener::call,
- newListener, _1));
- heaptest.post(1);
- check_listener("received", *newListener, 1);
- // explicitly destroy newListener
- delete newListener;
- }
- // verify that
- ensure("TempTrackableListener destroyed", ! live);
- ensure("implicit disconnect", ! connection.connected());
- // now just make sure we don't blow up trying to access a freed object!
- heaptest.post(2);
- }
-
- template<> template<>
- void events_object::test<15>()
- {
- // This test ensures that using an LLListenerWrapper subclass doesn't
- // block Boost.Signals2 from recognizing a bound LLEventTrackable
- // subclass.
- set_test_name("listen(llwrap<LLLogListener>(boost::bind(...TempTrackableListener ref...)))");
- bool live = false;
- LLEventPump& heaptest(pumps.obtain("heaptest"));
- LLBoundListener connection;
- {
- TempTrackableListener tempListener("temp", live);
- ensure("TempTrackableListener constructed", live);
- connection = heaptest.listen(tempListener.getName(),
- llwrap<LLLogListener>(
- boost::bind(&TempTrackableListener::call,
- boost::ref(tempListener), _1)));
- heaptest.post(1);
- check_listener("received", tempListener, 1);
- } // presumably this will make tempListener go away?
- // verify that
- ensure("TempTrackableListener destroyed", ! live);
- ensure("implicit disconnect", ! connection.connected());
- // now just make sure we don't blow up trying to access a freed object!
- heaptest.post(2);
- }
-
- class TempSharedListener: public TempListener,
- public boost::enable_shared_from_this<TempSharedListener>
- {
- public:
- TempSharedListener(const std::string& name, bool& liveFlag):
- TempListener(name, liveFlag)
- {}
- };
-
- template<> template<>
- void events_object::test<16>()
- {
- set_test_name("listen(boost::bind(...TempSharedListener ref...))");
+}
+
+class TempTrackableListener: public TempListener, public LLEventTrackable
+{
+public:
+TempTrackableListener(const std::string& name, bool& liveFlag):
+ TempListener(name, liveFlag)
+{}
+};
+
+template<> template<>
+void events_object::test<13>()
+{
+set_test_name("listen(boost::bind(...TempTrackableListener ref...))");
+bool live = false;
+LLEventPump& heaptest(pumps.obtain("heaptest"));
+LLBoundListener connection;
+{
+ TempTrackableListener tempListener("temp", live);
+ ensure("TempTrackableListener constructed", live);
+ connection = heaptest.listen(tempListener.getName(),
+ boost::bind(&TempTrackableListener::call,
+ boost::ref(tempListener), _1));
+ heaptest.post(1);
+ check_listener("received", tempListener, 1);
+} // presumably this will make tempListener go away?
+// verify that
+ensure("TempTrackableListener destroyed", ! live);
+ensure("implicit disconnect", ! connection.connected());
+// now just make sure we don't blow up trying to access a freed object!
+heaptest.post(2);
+}
+
+template<> template<>
+void events_object::test<14>()
+{
+set_test_name("listen(boost::bind(...TempTrackableListener pointer...))");
+bool live = false;
+LLEventPump& heaptest(pumps.obtain("heaptest"));
+LLBoundListener connection;
+{
+ TempTrackableListener* newListener(new TempTrackableListener("temp", live));
+ ensure("TempTrackableListener constructed", live);
+ connection = heaptest.listen(newListener->getName(),
+ boost::bind(&TempTrackableListener::call,
+ newListener, _1));
+ heaptest.post(1);
+ check_listener("received", *newListener, 1);
+ // explicitly destroy newListener
+ delete newListener;
+}
+// verify that
+ensure("TempTrackableListener destroyed", ! live);
+ensure("implicit disconnect", ! connection.connected());
+// now just make sure we don't blow up trying to access a freed object!
+heaptest.post(2);
+}
+
+template<> template<>
+void events_object::test<15>()
+{
+// This test ensures that using an LLListenerWrapper subclass doesn't
+// block Boost.Signals2 from recognizing a bound LLEventTrackable
+// subclass.
+set_test_name("listen(llwrap<LLLogListener>(boost::bind(...TempTrackableListener ref...)))");
+bool live = false;
+LLEventPump& heaptest(pumps.obtain("heaptest"));
+LLBoundListener connection;
+{
+ TempTrackableListener tempListener("temp", live);
+ ensure("TempTrackableListener constructed", live);
+ connection = heaptest.listen(tempListener.getName(),
+ llwrap<LLLogListener>(
+ boost::bind(&TempTrackableListener::call,
+ boost::ref(tempListener), _1)));
+ heaptest.post(1);
+ check_listener("received", tempListener, 1);
+} // presumably this will make tempListener go away?
+// verify that
+ensure("TempTrackableListener destroyed", ! live);
+ensure("implicit disconnect", ! connection.connected());
+// now just make sure we don't blow up trying to access a freed object!
+heaptest.post(2);
+}
+
+class TempSharedListener: public TempListener,
+public boost::enable_shared_from_this<TempSharedListener>
+{
+public:
+TempSharedListener(const std::string& name, bool& liveFlag):
+ TempListener(name, liveFlag)
+{}
+};
+
+template<> template<>
+void events_object::test<16>()
+{
+ set_test_name("listen(boost::bind(...TempSharedListener ref...))");
#if 0
- bool live = false;
- LLEventPump& heaptest(pumps.obtain("heaptest"));
- LLBoundListener connection;
- {
- // We MUST have at least one shared_ptr to an
- // enable_shared_from_this subclass object before
- // shared_from_this() can work.
- boost::shared_ptr<TempSharedListener>
- tempListener(new TempSharedListener("temp", live));
- ensure("TempSharedListener constructed", live);
- // However, we're not passing either the shared_ptr or its
- // corresponding weak_ptr -- instead, we're passing a reference to
- // the TempSharedListener.
+bool live = false;
+LLEventPump& heaptest(pumps.obtain("heaptest"));
+LLBoundListener connection;
+{
+ // We MUST have at least one shared_ptr to an
+ // enable_shared_from_this subclass object before
+ // shared_from_this() can work.
+ boost::shared_ptr<TempSharedListener>
+ tempListener(new TempSharedListener("temp", live));
+ ensure("TempSharedListener constructed", live);
+ // However, we're not passing either the shared_ptr or its
+ // corresponding weak_ptr -- instead, we're passing a reference to
+ // the TempSharedListener.
/*==========================================================================*|
- std::cout << "Capturing const ref" << std::endl;
- const boost::enable_shared_from_this<TempSharedListener>& cref(*tempListener);
- std::cout << "Capturing const ptr" << std::endl;
- const boost::enable_shared_from_this<TempSharedListener>* cp(&cref);
- std::cout << "Capturing non-const ptr" << std::endl;
- boost::enable_shared_from_this<TempSharedListener>* p(const_cast<boost::enable_shared_from_this<TempSharedListener>*>(cp));
- std::cout << "Capturing shared_from_this()" << std::endl;
- boost::shared_ptr<TempSharedListener> sp(p->shared_from_this());
- std::cout << "Capturing weak_ptr" << std::endl;
- boost::weak_ptr<TempSharedListener> wp(weaken(sp));
- std::cout << "Binding weak_ptr" << std::endl;
+ std::cout << "Capturing const ref" << std::endl;
+ const boost::enable_shared_from_this<TempSharedListener>& cref(*tempListener);
+ std::cout << "Capturing const ptr" << std::endl;
+ const boost::enable_shared_from_this<TempSharedListener>* cp(&cref);
+ std::cout << "Capturing non-const ptr" << std::endl;
+ boost::enable_shared_from_this<TempSharedListener>* p(const_cast<boost::enable_shared_from_this<TempSharedListener>*>(cp));
+ std::cout << "Capturing shared_from_this()" << std::endl;
+ boost::shared_ptr<TempSharedListener> sp(p->shared_from_this());
+ std::cout << "Capturing weak_ptr" << std::endl;
+ boost::weak_ptr<TempSharedListener> wp(weaken(sp));
+ std::cout << "Binding weak_ptr" << std::endl;
|*==========================================================================*/
- connection = heaptest.listen(tempListener->getName(),
- boost::bind(&TempSharedListener::call, *tempListener, _1));
- heaptest.post(1);
- check_listener("received", *tempListener, 1);
- } // presumably this will make tempListener go away?
- // verify that
- ensure("TempSharedListener destroyed", ! live);
- ensure("implicit disconnect", ! connection.connected());
- // now just make sure we don't blow up trying to access a freed object!
- heaptest.post(2);
+ connection = heaptest.listen(tempListener->getName(),
+ boost::bind(&TempSharedListener::call, *tempListener, _1));
+ heaptest.post(1);
+ check_listener("received", *tempListener, 1);
+} // presumably this will make tempListener go away?
+// verify that
+ensure("TempSharedListener destroyed", ! live);
+ensure("implicit disconnect", ! connection.connected());
+// now just make sure we don't blow up trying to access a freed object!
+heaptest.post(2);
#endif // 0
- }
+}
} // namespace tut
diff --git a/indra/test/llhttpclient_tut.cpp b/indra/test/llhttpclient_tut.cpp
index 03759001ae..4b4046632c 100644
--- a/indra/test/llhttpclient_tut.cpp
+++ b/indra/test/llhttpclient_tut.cpp
@@ -40,6 +40,7 @@
#include "llhttpclient.h"
#include "llformat.h"
#include "llpipeutil.h"
+#include "llproxy.h"
#include "llpumpio.h"
#include "llsdhttpserver.h"
@@ -85,9 +86,10 @@ namespace tut
HTTPClientTestData()
{
apr_pool_create(&mPool, NULL);
+ LLCurl::initClass(false);
mServerPump = new LLPumpIO(mPool);
mClientPump = new LLPumpIO(mPool);
-
+
LLHTTPClient::setPump(*mClientPump);
}
@@ -95,6 +97,7 @@ namespace tut
{
delete mServerPump;
delete mClientPump;
+ LLProxy::cleanupClass();
apr_pool_destroy(mPool);
}
diff --git a/indra/test/llsd_new_tut.cpp b/indra/test/llsd_new_tut.cpp
index dd93b36f04..b2fa54a688 100644
--- a/indra/test/llsd_new_tut.cpp
+++ b/indra/test/llsd_new_tut.cpp
@@ -5,7 +5,7 @@
*
* $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2006-2011, 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
@@ -32,6 +32,19 @@
#include "llsdtraits.h"
#include "llstring.h"
+#if LL_WINDOWS
+#include <float.h>
+namespace
+{
+ int fpclassify(double x)
+ {
+ return _fpclass(x);
+ }
+}
+#else
+using std::fpclassify;
+#endif
+
namespace tut
{
class SDCleanupCheck
@@ -218,19 +231,16 @@ namespace tut
}
else
{
-// TODO: Fix on windows....
-#ifndef LL_WINDOWS
-# if !defined(fpclassify) && __GNUC__ >= 3
-# define FPCLASSIFY_NAMESPACE std::
-# else
-# define FPCLASSIFY_NAMESPACE
-# endif
- int left = FPCLASSIFY_NAMESPACE fpclassify(v.asReal());
- int right = FPCLASSIFY_NAMESPACE fpclassify(eReal);
+ int left = fpclassify(v.asReal());
+ int right = fpclassify(eReal);
ensure_equals(s+" to real", left, right);
- ensure_equals(s+" to string", v.asString(), eString);
-#endif
+ // ensure_equals(s+" to string", v.asString(), eString);
+ // I've commented this check out, since there doesn't
+ // seem to be uniform string representation for NaN on
+ // all platforms. For example, on my Ubuntu 8.10 laptop
+ // with libc 2.11.1, sqrt(-1.0) will return '-nan', not
+ // 'nan'.
}
}
@@ -742,6 +752,42 @@ namespace tut
LLSD w = v;
w = "nice day";
}
+
+ {
+ SDAllocationCheck check("shared values test for threaded work", 9);
+
+ //U32 start_llsd_count = LLSD::outstandingCount();
+
+ LLSD m = LLSD::emptyMap();
+
+ m["one"] = 1;
+ m["two"] = 2;
+ m["one_copy"] = m["one"]; // 3 (m, "one" and "two")
+
+ m["undef_one"] = LLSD();
+ m["undef_two"] = LLSD();
+ m["undef_one_copy"] = m["undef_one"];
+
+ { // Ensure first_array gets freed to avoid counting it
+ LLSD first_array = LLSD::emptyArray();
+ first_array.append(1.0f);
+ first_array.append(2.0f);
+ first_array.append(3.0f); // 7
+
+ m["array"] = first_array;
+ m["array_clone"] = first_array;
+ m["array_copy"] = m["array"]; // 7
+ }
+
+ m["string_one"] = "string one value";
+ m["string_two"] = "string two value";
+ m["string_one_copy"] = m["string_one"]; // 9
+
+ //U32 llsd_object_count = LLSD::outstandingCount();
+ //std::cout << "Using " << (llsd_object_count - start_llsd_count) << " LLSD objects" << std::endl;
+
+ //m.dumpStats();
+ }
}
template<> template<>
@@ -769,4 +815,3 @@ namespace tut
test serializations
*/
}
-
diff --git a/indra/test/llsdmessagebuilder_tut.cpp b/indra/test/llsdmessagebuilder_tut.cpp
index cc6f78decd..be0692557a 100644
--- a/indra/test/llsdmessagebuilder_tut.cpp
+++ b/indra/test/llsdmessagebuilder_tut.cpp
@@ -33,6 +33,7 @@
#include "llsdmessagebuilder.h"
#include "llsdmessagereader.h"
#include "llsdtraits.h"
+#include "llmath.h"
#include "llquaternion.h"
#include "u64.h"
#include "v3dmath.h"
@@ -86,17 +87,17 @@ namespace tut
return createTemplateBlock(_PREHASH_Test0, type, size, block);
}
- static LLMessageBlock* createTemplateBlock(char* name, const EMsgVariableType type = MVT_NULL, const S32 size = 0, EMsgBlockType block = MBT_VARIABLE)
+ static LLMessageBlock* createTemplateBlock(const char* name, const EMsgVariableType type = MVT_NULL, const S32 size = 0, EMsgBlockType block = MBT_VARIABLE)
{
LLMessageBlock* result = new LLMessageBlock(name, block);
if(type != MVT_NULL)
{
- result->addVariable(_PREHASH_Test0, type, size);
+ result->addVariable(const_cast<char*>(_PREHASH_Test0), type, size);
}
return result;
}
- static LLTemplateMessageBuilder* defaultTemplateBuilder(LLMessageTemplate& messageTemplate, char* name = _PREHASH_Test0)
+ static LLTemplateMessageBuilder* defaultTemplateBuilder(LLMessageTemplate& messageTemplate, char* name = const_cast<char*>(_PREHASH_Test0))
{
templateNameMap[_PREHASH_TestMessage] = &messageTemplate;
LLTemplateMessageBuilder* builder = new LLTemplateMessageBuilder(templateNameMap);
diff --git a/indra/test/lltemplatemessagebuilder_tut.cpp b/indra/test/lltemplatemessagebuilder_tut.cpp
index 09beb53869..6e1c82bb24 100644
--- a/indra/test/lltemplatemessagebuilder_tut.cpp
+++ b/indra/test/lltemplatemessagebuilder_tut.cpp
@@ -31,6 +31,7 @@
#include "llapr.h"
#include "llmessagetemplate.h"
+#include "llmath.h"
#include "llquaternion.h"
#include "lltemplatemessagebuilder.h"
#include "lltemplatemessagereader.h"
@@ -75,7 +76,7 @@ namespace tut
static LLMessageBlock* defaultBlock(const EMsgVariableType type = MVT_NULL, const S32 size = 0, EMsgBlockType block = MBT_VARIABLE)
{
- return createBlock(_PREHASH_Test0, type, size, block);
+ return createBlock(const_cast<char*>(_PREHASH_Test0), type, size, block);
}
static LLMessageBlock* createBlock(char* name, const EMsgVariableType type = MVT_NULL, const S32 size = 0, EMsgBlockType block = MBT_VARIABLE)
@@ -83,12 +84,12 @@ namespace tut
LLMessageBlock* result = new LLMessageBlock(name, block);
if(type != MVT_NULL)
{
- result->addVariable(_PREHASH_Test0, type, size);
+ result->addVariable(const_cast<char*>(_PREHASH_Test0), type, size);
}
return result;
}
- static LLTemplateMessageBuilder* defaultBuilder(LLMessageTemplate& messageTemplate, char* name = _PREHASH_Test0)
+ static LLTemplateMessageBuilder* defaultBuilder(LLMessageTemplate& messageTemplate, char* name = const_cast<char*>(_PREHASH_Test0))
{
nameMap[_PREHASH_TestMessage] = &messageTemplate;
LLTemplateMessageBuilder* builder = new LLTemplateMessageBuilder(nameMap);
@@ -403,11 +404,11 @@ namespace tut
// build template: Test0 before Test1
LLMessageTemplate messageTemplate = defaultTemplate();
- messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE));
- messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test0), MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test1), MVT_U32, 4, MBT_SINGLE));
// build message: 1st declared block var == 0xaaaa, 2nd declared block var == 0xbbbb
- LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate, _PREHASH_Test0);
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate, const_cast<char*>(_PREHASH_Test0));
builder->addU32(_PREHASH_Test0, 0xaaaa);
builder->nextBlock(_PREHASH_Test1);
builder->addU32(_PREHASH_Test0, 0xbbbb);
@@ -416,11 +417,11 @@ namespace tut
// build template: Test1 before Test0
messageTemplate = defaultTemplate();
- messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4, MBT_SINGLE));
- messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test1), MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test0), MVT_U32, 4, MBT_SINGLE));
// build message: 1st declared block var == 0xaaaa, 2nd declared block var == 0xbbbb
- builder = defaultBuilder(messageTemplate, _PREHASH_Test1);
+ builder = defaultBuilder(messageTemplate, const_cast<char*>(_PREHASH_Test1));
builder->addU32(_PREHASH_Test0, 0xaaaa);
builder->nextBlock(_PREHASH_Test0);
builder->addU32(_PREHASH_Test0, 0xbbbb);
@@ -443,11 +444,11 @@ namespace tut
// build template: Test0 before Test1
LLMessageTemplate messageTemplate = defaultTemplate();
- messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE));
- messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test0), MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test1), MVT_U32, 4, MBT_SINGLE));
// build message: 1st declared block var == 0xaaaa, 2nd declared block var == 0xbbbb
- LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate, _PREHASH_Test0);
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate, const_cast<char*>(_PREHASH_Test0));
builder->addU32(_PREHASH_Test0, 0xaaaa);
builder->nextBlock(_PREHASH_Test1);
builder->addU32(_PREHASH_Test0, 0xbbbb);
@@ -455,7 +456,7 @@ namespace tut
delete builder;
// build message: 1st declared block var == 0xaaaa, 2nd declared block var == 0xbbbb
- builder = defaultBuilder(messageTemplate, _PREHASH_Test1);
+ builder = defaultBuilder(messageTemplate, const_cast<char*>(_PREHASH_Test1));
builder->addU32(_PREHASH_Test0, 0xbbbb);
builder->nextBlock(_PREHASH_Test0);
builder->addU32(_PREHASH_Test0, 0xaaaa);
@@ -478,21 +479,21 @@ namespace tut
// Build template: Test0 only
LLMessageTemplate messageTemplate = defaultTemplate();
- messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test0), MVT_U32, 4, MBT_SINGLE));
// Build message
- LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate, _PREHASH_Test0);
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate, const_cast<char*>(_PREHASH_Test0));
builder->addU32(_PREHASH_Test0, 0xaaaa);
bufferSize1 = builder->buildMessage(buffer1, MAX_BUFFER_SIZE, 0);
delete builder;
// Build template: Test0 before Test1
messageTemplate = defaultTemplate();
- messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE));
- messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test0), MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test1), MVT_U32, 4, MBT_SINGLE));
// Build message
- builder = defaultBuilder(messageTemplate, _PREHASH_Test0);
+ builder = defaultBuilder(messageTemplate, const_cast<char*>(_PREHASH_Test0));
builder->addU32(_PREHASH_Test0, 0xaaaa);
builder->nextBlock(_PREHASH_Test1);
builder->addU32(_PREHASH_Test0, 0xbbbb);
@@ -511,8 +512,8 @@ namespace tut
U32 inTest00 = 0, inTest01 = 1, inTest1 = 2;
U32 outTest00, outTest01, outTest1;
LLMessageTemplate messageTemplate = defaultTemplate();
- messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4));
- messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4));
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test0), MVT_U32, 4));
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test1), MVT_U32, 4));
LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
builder->addU32(_PREHASH_Test0, inTest00);
builder->nextBlock(_PREHASH_Test0);
@@ -536,15 +537,15 @@ namespace tut
U32 inTest = 1, outTest;
LLMessageTemplate messageTemplate = defaultTemplate();
messageTemplate.addBlock(
- createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE));
- messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4));
+ createBlock(const_cast<char*>(_PREHASH_Test0), MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test1), MVT_U32, 4));
LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
builder->addU32(_PREHASH_Test0, inTest);
LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outTest);
- S32 blockCount = reader->getNumberOfBlocks(_PREHASH_Test1);
+ S32 blockCount = reader->getNumberOfBlocks(const_cast<char*>(_PREHASH_Test1));
ensure_equals("Ensure block count", blockCount, 0);
ensure_equals("Ensure Test0", inTest, outTest);
delete reader;
@@ -556,7 +557,7 @@ namespace tut
{
// build template
LLMessageTemplate messageTemplate = defaultTemplate();
- messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4));
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test0), MVT_U32, 4));
// build message
LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
@@ -881,7 +882,7 @@ namespace tut
delete builder;
// add block to reader template
- messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test1), MVT_U32, 4, MBT_SINGLE));
// read message value and default value
numberMap[1] = &messageTemplate;
@@ -914,7 +915,7 @@ namespace tut
delete builder;
// add variable block to reader template
- messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4));
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test1), MVT_U32, 4));
// read message value and check block repeat count
numberMap[1] = &messageTemplate;
@@ -947,7 +948,7 @@ namespace tut
delete builder;
// add variable block to reader template
- messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_VARIABLE, 4,
+ messageTemplate.addBlock(createBlock(const_cast<char*>(_PREHASH_Test1), MVT_VARIABLE, 4,
MBT_SINGLE));
// read message value and default string