summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/CMakeLists.txt112
-rw-r--r--indra/newview/app_settings/settings.xml11
-rw-r--r--indra/newview/build_win32_appConfig.py28
-rw-r--r--indra/newview/llagent.cpp4
-rw-r--r--indra/newview/llagent.h4
-rw-r--r--indra/newview/llagentlistener.cpp78
-rw-r--r--indra/newview/llagentlistener.h36
-rw-r--r--indra/newview/llappviewer.cpp243
-rw-r--r--indra/newview/llappviewer.h14
-rw-r--r--indra/newview/llappviewerlistener.cpp37
-rw-r--r--indra/newview/llappviewerlistener.h34
-rw-r--r--indra/newview/llcapabilitylistener.cpp1
-rw-r--r--indra/newview/llclassifiedinfo.cpp36
-rw-r--r--indra/newview/llclassifiedinfo.h3
-rw-r--r--indra/newview/lleventinfo.cpp36
-rw-r--r--indra/newview/lleventinfo.h3
-rw-r--r--indra/newview/lleventnotifier.cpp79
-rw-r--r--indra/newview/lleventnotifier.h5
-rw-r--r--indra/newview/llfasttimerview.cpp8
-rw-r--r--indra/newview/llfeaturemanager.cpp6
-rw-r--r--indra/newview/llfloaterabout.cpp513
-rw-r--r--indra/newview/llfloaterfriends.h3
-rw-r--r--indra/newview/llfloatertos.cpp37
-rw-r--r--indra/newview/llfloatertos.h4
-rw-r--r--indra/newview/llimview.cpp2
-rw-r--r--indra/newview/llinventoryactions.h47
-rw-r--r--indra/newview/llinventorymodel.cpp216
-rw-r--r--indra/newview/llinventorymodel.h6
-rw-r--r--indra/newview/lllogininstance.cpp471
-rw-r--r--indra/newview/lllogininstance.h111
-rw-r--r--indra/newview/llmenucommands.cpp1
-rw-r--r--indra/newview/llpanelplace.cpp1
-rw-r--r--indra/newview/llpanelplaceinfo.cpp1
-rw-r--r--indra/newview/llstartup.cpp1419
-rw-r--r--indra/newview/llstartup.h6
-rw-r--r--indra/newview/lluilistener.cpp50
-rw-r--r--indra/newview/lluilistener.h29
-rw-r--r--indra/newview/llviewercontrollistener.cpp102
-rw-r--r--indra/newview/llviewercontrollistener.h33
-rw-r--r--indra/newview/llviewermedia.cpp5
-rw-r--r--indra/newview/llviewermenu.cpp5
-rw-r--r--indra/newview/llviewernetwork.cpp6
-rw-r--r--indra/newview/llviewernetwork.h4
-rw-r--r--indra/newview/llviewerparcelmgr.cpp1
-rw-r--r--indra/newview/llviewerwindow.cpp8
-rw-r--r--indra/newview/llviewerwindow.h5
-rw-r--r--indra/newview/llviewerwindowlistener.cpp87
-rw-r--r--indra/newview/llviewerwindowlistener.h35
-rw-r--r--indra/newview/llxmlrpclistener.cpp496
-rw-r--r--indra/newview/llxmlrpclistener.h35
-rw-r--r--indra/newview/llxmlrpctransaction.cpp13
-rw-r--r--indra/newview/skins/default/xui/da/floater_avatar_picker.xml47
-rw-r--r--indra/newview/skins/default/xui/da/floater_build_options.xml4
-rw-r--r--indra/newview/skins/default/xui/da/floater_buy_currency.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_inspect.xml18
-rw-r--r--indra/newview/skins/default/xui/da/floater_joystick.xml38
-rw-r--r--indra/newview/skins/default/xui/da/floater_lagmeter.xml16
-rw-r--r--indra/newview/skins/default/xui/da/floater_land_holdings.xml19
-rw-r--r--indra/newview/skins/default/xui/da/floater_lsl_guide.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_preview_notecard.xml11
-rw-r--r--indra/newview/skins/default/xui/da/floater_sound_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/da/floater_telehub.xml8
-rw-r--r--indra/newview/skins/default/xui/da/menu_inventory.xml1
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_general.xml55
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_invite.xml9
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_land_money.xml46
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_roles.xml12
-rw-r--r--indra/newview/skins/default/xui/da/panel_groups.xml4
-rw-r--r--indra/newview/skins/default/xui/da/panel_region_covenant.xml71
-rw-r--r--indra/newview/skins/default/xui/da/panel_region_estate.xml2
-rw-r--r--indra/newview/skins/default/xui/da/panel_region_general.xml73
-rw-r--r--indra/newview/skins/default/xui/da/panel_region_terrain.xml4
-rw-r--r--indra/newview/skins/default/xui/da/teleport_strings.xml25
-rw-r--r--indra/newview/skins/default/xui/de/floater_mute_object.xml4
-rw-r--r--indra/newview/skins/default/xui/de/floater_snapshot.xml108
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_general.xml72
-rw-r--r--indra/newview/skins/default/xui/es/floater_about_land.xml94
-rw-r--r--indra/newview/skins/default/xui/es/floater_avatar_picker.xml8
-rw-r--r--indra/newview/skins/default/xui/es/floater_build_options.xml6
-rw-r--r--indra/newview/skins/default/xui/es/floater_buy_contents.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_buy_currency.xml12
-rw-r--r--indra/newview/skins/default/xui/es/floater_color_picker.xml3
-rw-r--r--indra/newview/skins/default/xui/es/floater_day_cycle_options.xml12
-rw-r--r--indra/newview/skins/default/xui/es/floater_env_settings.xml15
-rw-r--r--indra/newview/skins/default/xui/es/floater_gesture.xml5
-rw-r--r--indra/newview/skins/default/xui/es/floater_inspect.xml10
-rw-r--r--indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml10
-rw-r--r--indra/newview/skins/default/xui/es/floater_lagmeter.xml13
-rw-r--r--indra/newview/skins/default/xui/es/floater_land_holdings.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_live_lsleditor.xml4
-rw-r--r--indra/newview/skins/default/xui/es/floater_lsl_guide.xml4
-rw-r--r--indra/newview/skins/default/xui/es/floater_media_browser.xml9
-rw-r--r--indra/newview/skins/default/xui/es/floater_mute_object.xml7
-rw-r--r--indra/newview/skins/default/xui/es/floater_pay.xml9
-rw-r--r--indra/newview/skins/default/xui/es/floater_pay_object.xml10
-rw-r--r--indra/newview/skins/default/xui/es/floater_preferences.xml5
-rw-r--r--indra/newview/skins/default/xui/es/floater_preview_animation.xml4
-rw-r--r--indra/newview/skins/default/xui/es/floater_script_search.xml16
-rw-r--r--indra/newview/skins/default/xui/es/floater_select_key.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_telehub.xml18
-rw-r--r--indra/newview/skins/default/xui/es/floater_texture_ctrl.xml4
-rw-r--r--indra/newview/skins/default/xui/es/floater_tools.xml68
-rw-r--r--indra/newview/skins/default/xui/es/floater_top_objects.xml21
-rw-r--r--indra/newview/skins/default/xui/es/floater_url_entry.xml3
-rw-r--r--indra/newview/skins/default/xui/es/floater_water.xml22
-rw-r--r--indra/newview/skins/default/xui/es/floater_windlight_options.xml20
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_general.xml12
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_invite.xml17
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_land_money.xml15
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_notices.xml17
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_roles.xml46
-rw-r--r--indra/newview/skins/default/xui/es/panel_groups.xml8
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_general.xml72
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_covenant.xml10
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_debug.xml16
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_estate.xml16
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_general.xml10
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_terrain.xml16
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_texture.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_customize.xml22
-rw-r--r--indra/newview/skins/default/xui/fr/floater_inventory.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/floater_mem_leaking.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_general.xml80
-rw-r--r--indra/newview/skins/default/xui/it/floater_about_land.xml74
-rw-r--r--indra/newview/skins/default/xui/it/floater_avatar_picker.xml8
-rw-r--r--indra/newview/skins/default/xui/it/floater_build_options.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_buy_contents.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_buy_currency.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_day_cycle_options.xml30
-rw-r--r--indra/newview/skins/default/xui/it/floater_env_settings.xml14
-rw-r--r--indra/newview/skins/default/xui/it/floater_gesture.xml11
-rw-r--r--indra/newview/skins/default/xui/it/floater_inspect.xml10
-rw-r--r--indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_joystick.xml49
-rw-r--r--indra/newview/skins/default/xui/it/floater_lagmeter.xml17
-rw-r--r--indra/newview/skins/default/xui/it/floater_land_holdings.xml10
-rw-r--r--indra/newview/skins/default/xui/it/floater_live_lsleditor.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_lsl_guide.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_media_browser.xml9
-rw-r--r--indra/newview/skins/default/xui/it/floater_mute_object.xml6
-rw-r--r--indra/newview/skins/default/xui/it/floater_pay.xml21
-rw-r--r--indra/newview/skins/default/xui/it/floater_pay_object.xml23
-rw-r--r--indra/newview/skins/default/xui/it/floater_preferences.xml3
-rw-r--r--indra/newview/skins/default/xui/it/floater_preview_animation.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_script_search.xml16
-rw-r--r--indra/newview/skins/default/xui/it/floater_telehub.xml18
-rw-r--r--indra/newview/skins/default/xui/it/floater_top_objects.xml31
-rw-r--r--indra/newview/skins/default/xui/it/floater_url_entry.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_water.xml44
-rw-r--r--indra/newview/skins/default/xui/it/floater_windlight_options.xml32
-rw-r--r--indra/newview/skins/default/xui/it/panel_friends.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_general.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_invite.xml4
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_land_money.xml23
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_notices.xml31
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_roles.xml44
-rw-r--r--indra/newview/skins/default/xui/it/panel_groups.xml10
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_general.xml72
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_covenant.xml30
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_debug.xml12
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_estate.xml16
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_general.xml22
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_terrain.xml8
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_texture.xml6
-rw-r--r--indra/newview/skins/default/xui/it/teleport_strings.xml18
-rw-r--r--indra/newview/skins/default/xui/ja/floater_about_land.xml68
-rw-r--r--indra/newview/skins/default/xui/ja/floater_buy_contents.xml13
-rw-r--r--indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_group_land_money.xml3
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_general.xml80
-rw-r--r--indra/newview/skins/default/xui/nl/floater_about_land.xml80
-rw-r--r--indra/newview/skins/default/xui/nl/floater_buy_contents.xml2
-rw-r--r--indra/newview/skins/default/xui/nl/floater_color_picker.xml5
-rw-r--r--indra/newview/skins/default/xui/nl/floater_env_settings.xml7
-rw-r--r--indra/newview/skins/default/xui/nl/floater_inspect.xml8
-rw-r--r--indra/newview/skins/default/xui/nl/floater_joystick.xml11
-rw-r--r--indra/newview/skins/default/xui/nl/floater_mute_object.xml8
-rw-r--r--indra/newview/skins/default/xui/nl/floater_openobject.xml4
-rw-r--r--indra/newview/skins/default/xui/nl/floater_pay.xml4
-rw-r--r--indra/newview/skins/default/xui/nl/floater_pay_object.xml12
-rw-r--r--indra/newview/skins/default/xui/nl/floater_perm_prefs.xml2
-rw-r--r--indra/newview/skins/default/xui/nl/floater_select_key.xml4
-rw-r--r--indra/newview/skins/default/xui/nl/floater_telehub.xml16
-rw-r--r--indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml6
-rw-r--r--indra/newview/skins/default/xui/nl/floater_tools.xml86
-rw-r--r--indra/newview/skins/default/xui/nl/floater_top_objects.xml26
-rw-r--r--indra/newview/skins/default/xui/nl/floater_url_entry.xml4
-rw-r--r--indra/newview/skins/default/xui/nl/floater_water.xml5
-rw-r--r--indra/newview/skins/default/xui/nl/panel_friends.xml12
-rw-r--r--indra/newview/skins/default/xui/nl/panel_group_general.xml19
-rw-r--r--indra/newview/skins/default/xui/nl/panel_group_invite.xml9
-rw-r--r--indra/newview/skins/default/xui/nl/panel_group_notices.xml24
-rw-r--r--indra/newview/skins/default/xui/nl/panel_group_roles.xml34
-rw-r--r--indra/newview/skins/default/xui/nl/panel_groups.xml14
-rw-r--r--indra/newview/skins/default/xui/nl/panel_region_estate.xml16
-rw-r--r--indra/newview/skins/default/xui/nl/panel_region_general.xml4
-rwxr-xr-xindra/newview/skins/default/xui/pl/floater_about_land.xml68
-rwxr-xr-xindra/newview/skins/default/xui/pl/floater_joystick.xml89
-rwxr-xr-xindra/newview/skins/default/xui/pl/floater_preview_sound.xml2
-rwxr-xr-xindra/newview/skins/default/xui/pl/floater_telehub.xml4
-rwxr-xr-xindra/newview/skins/default/xui/pl/floater_tools.xml30
-rw-r--r--indra/newview/skins/default/xui/pt/floater_about_land.xml74
-rw-r--r--indra/newview/skins/default/xui/pt/floater_avatar_picker.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/floater_build_options.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/floater_buy_contents.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/floater_color_picker.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml28
-rw-r--r--indra/newview/skins/default/xui/pt/floater_env_settings.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/floater_inspect.xml10
-rw-r--r--indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/floater_joystick.xml41
-rw-r--r--indra/newview/skins/default/xui/pt/floater_lagmeter.xml13
-rw-r--r--indra/newview/skins/default/xui/pt/floater_land_holdings.xml10
-rw-r--r--indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_lsl_guide.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_mute_object.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/floater_pay.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preferences.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preview_sound.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_script_search.xml16
-rw-r--r--indra/newview/skins/default/xui/pt/floater_telehub.xml18
-rw-r--r--indra/newview/skins/default/xui/pt/floater_tools.xml61
-rw-r--r--indra/newview/skins/default/xui/pt/floater_top_objects.xml13
-rw-r--r--indra/newview/skins/default/xui/pt/floater_url_entry.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/floater_water.xml23
-rw-r--r--indra/newview/skins/default/xui/pt/floater_windlight_options.xml23
-rw-r--r--indra/newview/skins/default/xui/pt/panel_friends.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_general.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_invite.xml10
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_land_money.xml11
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_notices.xml21
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_roles.xml45
-rw-r--r--indra/newview/skins/default/xui/pt/panel_groups.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_general.xml72
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_covenant.xml20
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_debug.xml10
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_estate.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_terrain.xml10
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_texture.xml2
-rw-r--r--indra/newview/tests/llagentaccess_test.cpp2
-rw-r--r--indra/newview/tests/llcapabilitylistener_test.cpp36
-rw-r--r--indra/newview/tests/lllogininstance_test.cpp416
-rw-r--r--indra/newview/tests/llxmlrpclistener_test.cpp230
-rw-r--r--indra/newview/tests/test_llxmlrpc_peer.py59
-rwxr-xr-xindra/newview/viewer_manifest.py1531
246 files changed, 6023 insertions, 4411 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 2e210e41c9..2faa9b1df1 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -36,10 +36,7 @@ include(UI)
include(UnixInstall)
include(LLKDU)
include(ViewerMiscLibs)
-
-if (WINDOWS)
- include(CopyWinLibs)
-endif (WINDOWS)
+include(LLLogin)
include_directories(
${DBUSGLIB_INCLUDE_DIRS}
@@ -61,12 +58,14 @@ include_directories(
${LLXUIXML_INCLUDE_DIRS}
${LSCRIPT_INCLUDE_DIRS}
${LSCRIPT_INCLUDE_DIRS}/lscript_compile
+ ${LLLOGIN_INCLUDE_DIRS}
)
set(viewer_SOURCE_FILES
llaccordionctrltab.cpp
llaccordionctrl.cpp
llagent.cpp
+ llagentlistener.cpp
llagentaccess.cpp
llagentdata.cpp
llagentlanguage.cpp
@@ -76,6 +75,7 @@ set(viewer_SOURCE_FILES
llanimstatelabels.cpp
llappearancemgr.cpp
llappviewer.cpp
+ llappviewerlistener.cpp
llassetuploadresponders.cpp
llassetuploadqueue.cpp
llaudiosourcevo.cpp
@@ -253,6 +253,7 @@ set(viewer_SOURCE_FILES
llurllineeditorctrl.cpp
lllogchat.cpp
llloginhandler.cpp
+ lllogininstance.cpp
llmanip.cpp
llmaniprotate.cpp
llmanipscale.cpp
@@ -325,6 +326,7 @@ set(viewer_SOURCE_FILES
llpanelpicks.cpp
llpanelplace.cpp
llpanelplaceinfo.cpp
+ llpanelshower.cpp
llpanelplaces.cpp
llpanelplacestab.cpp
llpanelprofile.cpp
@@ -359,7 +361,6 @@ set(viewer_SOURCE_FILES
llspatialpartition.cpp
llsplitbutton.cpp
llsprite.cpp
- llsrv.cpp
llstartup.cpp
llstatusbar.cpp
llstylemap.cpp
@@ -403,19 +404,20 @@ set(viewer_SOURCE_FILES
lltoolselectland.cpp
lltoolselectrect.cpp
lltracker.cpp
+ lluilistener.cpp
lluploaddialog.cpp
llurl.cpp
llurldispatcher.cpp
llurlhistory.cpp
llurlsimstring.cpp
llurlwhitelist.cpp
- lluserauth.cpp
llvectorperfoptions.cpp
llviewchildren.cpp
llviewerassetstorage.cpp
llvieweraudio.cpp
llviewercamera.cpp
llviewercontrol.cpp
+ llviewercontrollistener.cpp
llviewerdisplay.cpp
llviewerfloaterreg.cpp
llviewergenericmessage.cpp
@@ -455,6 +457,7 @@ set(viewer_SOURCE_FILES
llviewerthrottle.cpp
llviewervisualparam.cpp
llviewerwindow.cpp
+ llviewerwindowlistener.cpp
llvlcomposition.cpp
llvlmanager.cpp
llvoavatar.cpp
@@ -493,6 +496,7 @@ set(viewer_SOURCE_FILES
llworld.cpp
llworldmap.cpp
llworldmapview.cpp
+ llxmlrpclistener.cpp
llxmlrpctransaction.cpp
noise.cpp
pipeline.cpp
@@ -521,6 +525,7 @@ set(viewer_HEADER_FILES
llaccordionctrltab.h
llaccordionctrl.h
llagent.h
+ llagentlistener.h
llagentaccess.h
llagentdata.h
llagentlanguage.h
@@ -530,6 +535,7 @@ set(viewer_HEADER_FILES
llanimstatelabels.h
llappearance.h
llappviewer.h
+ llappviewerlistener.h
llassetuploadresponders.h
llassetuploadqueue.h
llaudiosourcevo.h
@@ -710,6 +716,7 @@ set(viewer_HEADER_FILES
llurllineeditorctrl.h
lllogchat.h
llloginhandler.h
+ lllogininstance.h
llmanip.h
llmaniprotate.h
llmanipscale.h
@@ -780,6 +787,7 @@ set(viewer_HEADER_FILES
llpanelpicks.h
llpanelplace.h
llpanelplaceinfo.h
+ llpanelshower.h
llpanelplaces.h
llpanelplacestab.h
llpanelprofile.h
@@ -816,7 +824,6 @@ set(viewer_HEADER_FILES
llspatialpartition.h
llsplitbutton.h
llsprite.h
- llsrv.h
llstartup.h
llstatusbar.h
llstylemap.h
@@ -862,13 +869,13 @@ set(viewer_HEADER_FILES
lltoolselectrect.h
lltracker.h
lluiconstants.h
+ lluilistener.h
lluploaddialog.h
llurl.h
llurldispatcher.h
llurlhistory.h
llurlsimstring.h
llurlwhitelist.h
- lluserauth.h
llvectorperfoptions.h
llviewchildren.h
llviewerassetstorage.h
@@ -876,6 +883,7 @@ set(viewer_HEADER_FILES
llviewerbuild.h
llviewercamera.h
llviewercontrol.h
+ llviewercontrollistener.h
llviewerdisplay.h
llviewerfloaterreg.h
llviewergenericmessage.h
@@ -913,6 +921,7 @@ set(viewer_HEADER_FILES
llviewerthrottle.h
llviewervisualparam.h
llviewerwindow.h
+ llviewerwindowlistener.h
llvlcomposition.h
llvlmanager.h
llvoavatar.h
@@ -953,6 +962,7 @@ set(viewer_HEADER_FILES
llworld.h
llworldmap.h
llworldmapview.h
+ llxmlrpclistener.h
llxmlrpctransaction.h
macmain.h
noise.h
@@ -1155,6 +1165,15 @@ file(GLOB DEFAULT_WIDGET_FILE_GLOB_LIST
${CMAKE_CURRENT_SOURCE_DIR}/skins/default/xui/en/widgets/*.xml)
list(APPEND viewer_XUI_FILES ${DEFAULT_WIDGET_FILE_GLOB_LIST})
+file(GLOB SILVER_XUI_FILE_GLOB_LIST
+ ${CMAKE_CURRENT_SOURCE_DIR}/skins/silver/xui/en-us/*.xml)
+list(APPEND viewer_XUI_FILES ${SILVER_XUI_FILE_GLOB_LIST})
+
+# Cannot append empty lists in CMake, wait until we have files here.
+#file(GLOB SILVER_WIDGET_FILE_GLOB_LIST
+# ${CMAKE_CURRENT_SOURCE_DIR}/skins/silver/xui/en-us/widgets/*.xml)
+#list(APPEND viewer_XUI_FILES ${SILVER_WIDGET_FILE_GLOB_LIST})
+
list(SORT viewer_XUI_FILES)
source_group("XUI Files" FILES ${viewer_XUI_FILES})
@@ -1265,6 +1284,11 @@ if (LLKDU_LIBRARY)
add_dependencies(${VIEWER_BINARY_NAME} ${LLKDU_LIBRARY})
endif (LLKDU_LIBRARY)
+# add package files
+file(GLOB EVENT_HOST_SCRIPT_GLOB_LIST
+ ${CMAKE_CURRENT_SOURCE_DIR}/../viewer_components/*.py)
+list(APPEND EVENT_HOST_SCRIPTS ${EVENT_HOST_SCRIPT_GLOB_LIST})
+
set(PACKAGE OFF CACHE BOOL
"Add a package target that builds an installer package.")
@@ -1321,7 +1345,42 @@ if (WINDOWS)
COMMENT "Copying message.xml to the runtime folder."
)
- add_dependencies(${VIEWER_BINARY_NAME} copy_win_libs)
+ if(WINDOWS)
+ add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${VIEWER_BINARY_NAME}.exe.config
+ COMMAND ${PYTHON_EXECUTABLE}
+ ARGS
+ ${CMAKE_CURRENT_SOURCE_DIR}/build_win32_appConfig.py
+ ${CMAKE_CFG_INTDIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
+ ${VIEWER_BINARY_NAME}.exe.config
+ COMMENT "Creating app.config file"
+ )
+
+ add_custom_target(create_app_config_file ALL
+ DEPENDS
+ ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${VIEWER_BINARY_NAME}.exe.config
+ stage_third_party_libs
+ )
+
+ # Copy Win Libs...
+ # This happens at build time, not config time. We can't glob files in this cmake.
+ # *FIX:Mani Write a sub script to glob the files...
+ add_custom_command(
+ TARGET create_app_config_file PRE_BUILD
+ COMMAND ${CMAKE_COMMAND}
+ ARGS
+ -E
+ copy_directory
+ ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}
+ ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
+ COMMENT "Copying staged dlls."
+ )
+
+ add_dependencies(${VIEWER_BINARY_NAME} create_app_config_file)
+
+ endif(WINDOWS)
if (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
add_dependencies(${VIEWER_BINARY_NAME} copy_win_scripts)
@@ -1347,8 +1406,27 @@ if (WINDOWS)
add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit)
if (PACKAGE)
- add_custom_target(package ALL DEPENDS ${CMAKE_CFG_INTDIR}/touched.bat)
+ add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2
+ COMMAND ${PYTHON_EXECUTABLE}
+ ARGS
+ ${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py
+ ${CMAKE_CURRENT_SOURCE_DIR}/..
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_CFG_INTDIR}
+
+ DEPENDS
+ lleventhost
+ ${EVENT_HOST_SCRIPTS}
+ ${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py)
+
+ add_custom_target(package ALL
+ DEPENDS
+ ${CMAKE_CFG_INTDIR}/touched.bat
+ ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2)
add_dependencies(package windows-updater windows-crash-logger)
+
+
endif (PACKAGE)
endif (WINDOWS)
@@ -1385,6 +1463,7 @@ target_link_libraries(${VIEWER_BINARY_NAME}
${WINDOWS_LIBRARIES}
${XMLRPCEPI_LIBRARIES}
${ELFIO_LIBRARIES}
+ ${LLLOGIN_LIBRARIES}
${GOOGLE_PERFTOOLS_LIBRARIES}
)
@@ -1515,6 +1594,7 @@ endif (INSTALL)
include(LLAddBuildTest)
SET(viewer_TEST_SOURCE_FILES
llagentaccess.cpp
+ lllogininstance.cpp
)
set_source_files_properties(
${viewer_TEST_SOURCE_FILES}
@@ -1546,6 +1626,16 @@ LL_ADD_INTEGRATION_TEST(llcapabilitylistener
# Don't do these for DARWIN or LINUX here -- they're taken care of by viewer_manifest.py
if (WINDOWS)
+ add_custom_command(
+ TARGET ${VIEWER_BINARY_NAME} POST_BUILD
+ COMMAND ${CMAKE_COMMAND}
+ ARGS
+ -E
+ make_directory
+ ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin
+ COMMENT "Creating llplugin dir."
+ )
+
get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION)
add_custom_command(
TARGET ${VIEWER_BINARY_NAME} POST_BUILD
@@ -1554,7 +1644,7 @@ if (WINDOWS)
-E
copy_if_different
${BUILT_SLPLUGIN}
- ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin
+ ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
COMMENT "Copying SLPlugin executable to the runtime folder."
)
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index bbe69531b4..498d8b2e3b 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5304,6 +5304,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>QAModeEventHostPort</key>
+ <map>
+ <key>Comment</key>
+ <string>Enable Testing Features.</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>-1</integer>
+ </map>
<key>QuietSnapshotsToDisk</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/build_win32_appConfig.py b/indra/newview/build_win32_appConfig.py
index fb6a0258bc..8eadf0068f 100644
--- a/indra/newview/build_win32_appConfig.py
+++ b/indra/newview/build_win32_appConfig.py
@@ -31,11 +31,7 @@
import sys, os, re
from xml.dom.minidom import parse
-def main():
- src_manifest_name = sys.argv[1]
- src_config_name = sys.argv[2]
- dst_config_name = sys.argv[3]
-
+def munge_binding_redirect_version(src_manifest_name, src_config_name, dst_config_name):
manifest_dom = parse(src_manifest_name)
node = manifest_dom.getElementsByTagName('assemblyIdentity')[0]
manifest_assm_ver = node.getAttribute('version')
@@ -47,11 +43,31 @@ def main():
node.setAttribute('oldVersion', src_old_ver + manifest_assm_ver)
comment = config_dom.createComment("This file is automatically generated by the build. see indra/newview/build_win32_appConfig.py")
config_dom.insertBefore(comment, config_dom.childNodes[0])
-
+
+ print "Writing: " + dst_config_name
f = open(dst_config_name, 'w')
config_dom.writexml(f)
f.close()
+
+
+
+def main():
+ config = sys.argv[1]
+ src_dir = sys.argv[2]
+ dst_dir = sys.argv[3]
+ dst_name = sys.argv[4]
+
+ if config.lower() == 'debug':
+ src_manifest_name = dst_dir + '/Microsoft.VC80.DebugCRT.manifest'
+ src_config_name = src_dir + '/SecondLifeDebug.exe.config'
+ else:
+ src_manifest_name = dst_dir + '/Microsoft.VC80.CRT.manifest'
+ src_config_name = src_dir + '/SecondLife.exe.config'
+
+ dst_config_name = dst_dir + '/' + dst_name
+ munge_binding_redirect_version(src_manifest_name, src_config_name, dst_config_name)
+
return 0
if __name__ == "__main__":
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 08681db6cb..ab9db303b5 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -35,6 +35,7 @@
#include "llagent.h"
#include "llagentwearables.h"
+#include "llagentlistener.h"
#include "llanimationstates.h"
#include "llcallingcard.h"
#include "llconsole.h"
@@ -256,6 +257,7 @@ LLAgent::LLAgent() :
mHUDTargetZoom(1.f),
mHUDCurZoom(1.f),
mInitialized(FALSE),
+ mListener(),
mForceMouselook(FALSE),
mDoubleTapRunTimer(),
@@ -384,6 +386,8 @@ LLAgent::LLAgent() :
}
mFollowCam.setMaxCameraDistantFromSubject( MAX_CAMERA_DISTANCE_FROM_AGENT );
+
+ mListener.reset(new LLAgentListener(*this));
}
// Requires gSavedSettings to be initialized.
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 5ca630f8d1..09400b3a88 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -105,6 +105,8 @@ struct LLGroupData
std::string mName;
};
+class LLAgentListener;
+
//------------------------------------------------------------------------
// LLAgent
//------------------------------------------------------------------------
@@ -142,6 +144,8 @@ public:
BOOL mInitialized;
BOOL mFirstLogin;
std::string mMOTD; // Message of the day
+private:
+ boost::shared_ptr<LLAgentListener> mListener;
//--------------------------------------------------------------------
// Session
diff --git a/indra/newview/llagentlistener.cpp b/indra/newview/llagentlistener.cpp
new file mode 100644
index 0000000000..0f00078b33
--- /dev/null
+++ b/indra/newview/llagentlistener.cpp
@@ -0,0 +1,78 @@
+/**
+ * @file llagentlistener.cpp
+ * @author Brad Kittenbrink
+ * @date 2009-07-10
+ * @brief Implementation for llagentlistener.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * Copyright (c) 2009, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llagentlistener.h"
+
+#include "llagent.h"
+#include "llcommandhandler.h"
+#include "llslurl.h"
+#include "llurldispatcher.h"
+#include "llviewerobject.h"
+#include "llviewerobjectlist.h"
+#include "llviewerregion.h"
+
+LLAgentListener::LLAgentListener(LLAgent &agent)
+ : LLDispatchListener("LLAgent", "op"),
+ mAgent(agent)
+{
+ add("requestTeleport", &LLAgentListener::requestTeleport);
+ add("requestSit", &LLAgentListener::requestSit);
+ add("requestStand", &LLAgentListener::requestStand);
+}
+
+void LLAgentListener::requestTeleport(LLSD const & event_data) const
+{
+ if(event_data["skip_confirmation"].asBoolean())
+ {
+ LLSD params(LLSD::emptyArray());
+ params.append(event_data["regionname"]);
+ params.append(event_data["x"]);
+ params.append(event_data["y"]);
+ params.append(event_data["z"]);
+ LLCommandDispatcher::dispatch("teleport", params, LLSD(), NULL, true);
+ // *TODO - lookup other LLCommandHandlers for "agent", "classified", "event", "group", "floater", "objectim", "parcel", "login", login_refresh", "balance", "chat"
+ // should we just compose LLCommandHandler and LLDispatchListener?
+ }
+ else
+ {
+ std::string url = LLSLURL::buildSLURL(event_data["regionname"], event_data["x"], event_data["y"], event_data["z"]);
+ LLURLDispatcher::dispatch(url, NULL, false);
+ }
+}
+
+void LLAgentListener::requestSit(LLSD const & event_data) const
+{
+ //mAgent.getAvatarObject()->sitOnObject();
+ // shamelessly ripped from llviewermenu.cpp:handle_sit_or_stand()
+ // *TODO - find a permanent place to share this code properly.
+ LLViewerObject *object = gObjectList.findObject(event_data["obj_uuid"]);
+
+ if (object && object->getPCode() == LL_PCODE_VOLUME)
+ {
+ gMessageSystem->newMessageFast(_PREHASH_AgentRequestSit);
+ gMessageSystem->nextBlockFast(_PREHASH_AgentData);
+ gMessageSystem->addUUIDFast(_PREHASH_AgentID, mAgent.getID());
+ gMessageSystem->addUUIDFast(_PREHASH_SessionID, mAgent.getSessionID());
+ gMessageSystem->nextBlockFast(_PREHASH_TargetObject);
+ gMessageSystem->addUUIDFast(_PREHASH_TargetID, object->mID);
+ gMessageSystem->addVector3Fast(_PREHASH_Offset, LLVector3(0,0,0));
+
+ object->getRegion()->sendReliableMessage();
+ }
+}
+
+void LLAgentListener::requestStand(LLSD const & event_data) const
+{
+ mAgent.setControlFlags(AGENT_CONTROL_STAND_UP);
+}
+
diff --git a/indra/newview/llagentlistener.h b/indra/newview/llagentlistener.h
new file mode 100644
index 0000000000..6f0b5a54c5
--- /dev/null
+++ b/indra/newview/llagentlistener.h
@@ -0,0 +1,36 @@
+/**
+ * @file llagentlistener.h
+ * @author Brad Kittenbrink
+ * @date 2009-07-09
+ * @brief Event API for subset of LLViewerControl methods
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * Copyright (c) 2009, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+
+#ifndef LL_LLAGENTLISTENER_H
+#define LL_LLAGENTLISTENER_H
+
+#include "lleventdispatcher.h"
+
+class LLAgent;
+class LLSD;
+
+class LLAgentListener : public LLDispatchListener
+{
+public:
+ LLAgentListener(LLAgent &agent);
+
+private:
+ void requestTeleport(LLSD const & event_data) const;
+ void requestSit(LLSD const & event_data) const;
+ void requestStand(LLSD const & event_data) const;
+
+private:
+ LLAgent & mAgent;
+};
+
+#endif // LL_LLAGENTLISTENER_H
+
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 19e1273dc6..ef1fa98b1f 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -72,6 +72,7 @@
#include "llurlhistory.h"
#include "llfirstuse.h"
#include "llrender.h"
+#include "llteleporthistory.h"
#include "lllocationhistory.h"
#include "llfasttimerview.h"
#include "llweb.h"
@@ -97,6 +98,10 @@
# include <sys/file.h> // For initMarkerFile support
#endif
+#include "llapr.h"
+#include "apr_dso.h"
+#include <boost/lexical_cast.hpp>
+
#include "llnotify.h"
#include "llviewerkeyboard.h"
#include "lllfsthread.h"
@@ -152,7 +157,6 @@
#include "llfolderview.h"
#include "lltoolbar.h"
#include "llagentpilot.h"
-#include "llsrv.h"
#include "llvovolume.h"
#include "llflexibleobject.h"
#include "llvosurfacepatch.h"
@@ -189,7 +193,10 @@
//----------------------------------------------------------------------------
// llviewernetwork.h
#include "llviewernetwork.h"
+// define a self-registering event API object
+#include "llappviewerlistener.h"
+static LLAppViewerListener sAppViewerListener("LLAppViewer", NULL);
////// Windows-specific includes to the bottom - nasty defines in these pollute the preprocessor
//
@@ -215,9 +222,6 @@ BOOL gAllowTapTapHoldRun = TRUE;
BOOL gShowObjectUpdates = FALSE;
BOOL gUseQuickTime = TRUE;
-BOOL gAcceptTOS = FALSE;
-BOOL gAcceptCriticalMessage = FALSE;
-
eLastExecEvent gLastExecEvent = LAST_EXEC_NORMAL;
LLSD gDebugInfo;
@@ -562,9 +566,9 @@ LLAppViewer::LLAppViewer() :
mYieldTime(-1),
mMainloopTimeout(NULL),
mAgentRegionLastAlive(false),
- mFastTimerLogThread(NULL),
mRandomizeFramerate(LLCachedControl<bool>(gSavedSettings,"Randomize Framerate", FALSE)),
- mPeriodicSlowFrame(LLCachedControl<bool>(gSavedSettings,"Periodic Slow Frame", FALSE))
+ mPeriodicSlowFrame(LLCachedControl<bool>(gSavedSettings,"Periodic Slow Frame", FALSE)),
+ mFastTimerLogThread(NULL)
{
if(NULL != sInstance)
{
@@ -870,6 +874,11 @@ bool LLAppViewer::init()
LLViewerJoystick::getInstance()->init(false);
+ if (gSavedSettings.getBOOL("QAMode") && gSavedSettings.getS32("QAModeEventHostPort") > 0)
+ {
+ loadEventHostModule(gSavedSettings.getS32("QAModeEventHostPort"));
+ }
+
return true;
}
@@ -1163,6 +1172,20 @@ bool LLAppViewer::mainLoop()
bool LLAppViewer::cleanup()
{
+ // *TODO - generalize this and move DSO wrangling to a helper class -brad
+ std::set<struct apr_dso_handle_t *>::const_iterator i;
+ for(i = mPlugins.begin(); i != mPlugins.end(); ++i)
+ {
+ int (*ll_plugin_stop_func)(void) = NULL;
+ apr_status_t rv = apr_dso_sym((apr_dso_handle_sym_t*)&ll_plugin_stop_func, *i, "ll_plugin_stop");
+ ll_plugin_stop_func();
+
+ // *NOTE - disabled unloading as partial solution to DEV-35406 crash on shutdown
+ //rv = apr_dso_unload(*i);
+ (void)rv;
+ }
+ mPlugins.clear();
+
//----------------------------------------------
//this test code will be removed after the test
//test manual call stack tracer
@@ -3655,6 +3678,17 @@ void LLAppViewer::idleShutdown()
{
return;
}
+
+ // ProductEngine: Try moving this code to where we shut down sTextureCache in cleanup()
+ // *TODO: ugly
+ static bool saved_teleport_history = false;
+ if (!saved_teleport_history)
+ {
+ saved_teleport_history = true;
+ LLTeleportHistory::getInstance()->dump();
+ LLLocationHistory::getInstance()->save(); // *TODO: find a better place for doing this
+ return;
+ }
static bool saved_snapshot = false;
if (!saved_snapshot)
@@ -3953,7 +3987,7 @@ void LLAppViewer::forceErrorBadMemoryAccess()
return;
}
-void LLAppViewer::forceErrorInifiniteLoop()
+void LLAppViewer::forceErrorInfiniteLoop()
{
while(true)
{
@@ -4074,3 +4108,198 @@ void LLAppViewer::handleLoginComplete()
writeDebugInfo();
}
+
+// *TODO - generalize this and move DSO wrangling to a helper class -brad
+void LLAppViewer::loadEventHostModule(S32 listen_port)
+{
+ std::string dso_name =
+#if LL_WINDOWS
+ "lleventhost.dll";
+#elif LL_DARWIN
+ "liblleventhost.dylib";
+#else
+ "liblleventhost.so";
+#endif
+
+ std::string dso_path = gDirUtilp->findFile(dso_name,
+ gDirUtilp->getAppRODataDir(),
+ gDirUtilp->getExecutableDir());
+
+ if(dso_path == "")
+ {
+ llwarns << "QAModeEventHost requested but module \"" << dso_name << "\" not found!" << llendl;
+ return;
+ }
+
+ apr_dso_handle_t * eventhost_dso_handle = NULL;
+ apr_pool_t * eventhost_dso_memory_pool = NULL;
+
+ //attempt to load the shared library
+ apr_pool_create(&eventhost_dso_memory_pool, NULL);
+ apr_status_t rv = apr_dso_load(&eventhost_dso_handle,
+ dso_path.c_str(),
+ eventhost_dso_memory_pool);
+ ll_apr_assert_status(rv);
+ llassert_always(eventhost_dso_handle != NULL);
+
+ int (*ll_plugin_start_func)(LLSD const &) = NULL;
+ rv = apr_dso_sym((apr_dso_handle_sym_t*)&ll_plugin_start_func, eventhost_dso_handle, "ll_plugin_start");
+
+ ll_apr_assert_status(rv);
+ llassert_always(ll_plugin_start_func != NULL);
+
+ LLSD args;
+ args["listen_port"] = listen_port;
+
+ int status = ll_plugin_start_func(args);
+
+ if(status != 0)
+ {
+ llwarns << "problem loading eventhost plugin, status: " << status << llendl;
+ }
+
+ mPlugins.insert(eventhost_dso_handle);
+}
+
+void LLAppViewer::launchUpdater()
+{
+ LLSD query_map = LLSD::emptyMap();
+ // *TODO place os string in a global constant
+#if LL_WINDOWS
+ query_map["os"] = "win";
+#elif LL_DARWIN
+ query_map["os"] = "mac";
+#elif LL_LINUX
+ query_map["os"] = "lnx";
+#elif LL_SOLARIS
+ query_map["os"] = "sol";
+#endif
+ // *TODO change userserver to be grid on both viewer and sim, since
+ // userserver no longer exists.
+ query_map["userserver"] = LLViewerLogin::getInstance()->getGridLabel();
+ query_map["channel"] = gSavedSettings.getString("VersionChannelName");
+ // *TODO constantize this guy
+ // *NOTE: This URL is also used in win_setup/lldownloader.cpp
+ LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map);
+
+ if(LLAppViewer::sUpdaterInfo)
+ {
+ delete LLAppViewer::sUpdaterInfo;
+ }
+ LLAppViewer::sUpdaterInfo = new LLAppViewer::LLUpdaterInfo() ;
+
+ // if a sim name was passed in via command line parameter (typically through a SLURL)
+ if ( LLURLSimString::sInstance.mSimString.length() )
+ {
+ // record the location to start at next time
+ gSavedSettings.setString( "NextLoginLocation", LLURLSimString::sInstance.mSimString );
+ };
+
+#if LL_WINDOWS
+ LLAppViewer::sUpdaterInfo->mUpdateExePath = gDirUtilp->getTempFilename();
+ if (LLAppViewer::sUpdaterInfo->mUpdateExePath.empty())
+ {
+ delete LLAppViewer::sUpdaterInfo ;
+ LLAppViewer::sUpdaterInfo = NULL ;
+
+ // We're hosed, bail
+ LL_WARNS("AppInit") << "LLDir::getTempFilename() failed" << LL_ENDL;
+ return;
+ }
+
+ LLAppViewer::sUpdaterInfo->mUpdateExePath += ".exe";
+
+ std::string updater_source = gDirUtilp->getAppRODataDir();
+ updater_source += gDirUtilp->getDirDelimiter();
+ updater_source += "updater.exe";
+
+ LL_DEBUGS("AppInit") << "Calling CopyFile source: " << updater_source
+ << " dest: " << LLAppViewer::sUpdaterInfo->mUpdateExePath
+ << LL_ENDL;
+
+
+ if (!CopyFileA(updater_source.c_str(), LLAppViewer::sUpdaterInfo->mUpdateExePath.c_str(), FALSE))
+ {
+ delete LLAppViewer::sUpdaterInfo ;
+ LLAppViewer::sUpdaterInfo = NULL ;
+
+ LL_WARNS("AppInit") << "Unable to copy the updater!" << LL_ENDL;
+
+ return;
+ }
+
+ LLAppViewer::sUpdaterInfo->mParams << "-url \"" << update_url.asString() << "\"";
+
+ LL_DEBUGS("AppInit") << "Calling updater: " << LLAppViewer::sUpdaterInfo->mUpdateExePath << " " << LLAppViewer::sUpdaterInfo->mParams.str() << LL_ENDL;
+
+ //Explicitly remove the marker file, otherwise we pass the lock onto the child process and things get weird.
+ LLAppViewer::instance()->removeMarkerFile(); // In case updater fails
+
+ // *NOTE:Mani The updater is spawned as the last thing before the WinMain exit.
+ // see LLAppViewerWin32.cpp
+
+#elif LL_DARWIN
+ LLAppViewer::sUpdaterInfo->mUpdateExePath = "'";
+ LLAppViewer::sUpdaterInfo->mUpdateExePath += gDirUtilp->getAppRODataDir();
+ LLAppViewer::sUpdaterInfo->mUpdateExePath += "/mac-updater.app/Contents/MacOS/mac-updater' -url \"";
+ LLAppViewer::sUpdaterInfo->mUpdateExePath += update_url.asString();
+ LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" -name \"";
+ LLAppViewer::sUpdaterInfo->mUpdateExePath += LLAppViewer::instance()->getSecondLifeTitle();
+ LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" &";
+
+ LL_DEBUGS("AppInit") << "Calling updater: " << LLAppViewer::sUpdaterInfo->mUpdateExePath << LL_ENDL;
+
+ // Run the auto-updater.
+ system(LLAppViewer::sUpdaterInfo->mUpdateExePath.c_str()); /* Flawfinder: ignore */
+
+#elif (LL_LINUX || LL_SOLARIS) && LL_GTK
+ // we tell the updater where to find the xml containing string
+ // translations which it can use for its own UI
+ std::string xml_strings_file = "strings.xml";
+ std::vector<std::string> xui_path_vec = LLUI::getXUIPaths();
+ std::string xml_search_paths;
+ std::vector<std::string>::const_iterator iter;
+ // build comma-delimited list of xml paths to pass to updater
+ for (iter = xui_path_vec.begin(); iter != xui_path_vec.end(); )
+ {
+ std::string this_skin_dir = gDirUtilp->getDefaultSkinDir()
+ + gDirUtilp->getDirDelimiter()
+ + (*iter);
+ llinfos << "Got a XUI path: " << this_skin_dir << llendl;
+ xml_search_paths.append(this_skin_dir);
+ ++iter;
+ if (iter != xui_path_vec.end())
+ xml_search_paths.append(","); // comma-delimit
+ }
+ // build the overall command-line to run the updater correctly
+ LLAppViewer::sUpdaterInfo->mUpdateExePath =
+ gDirUtilp->getExecutableDir() + "/" + "linux-updater.bin" +
+ " --url \"" + update_url.asString() + "\"" +
+ " --name \"" + LLAppViewer::instance()->getSecondLifeTitle() + "\"" +
+ " --dest \"" + gDirUtilp->getAppRODataDir() + "\"" +
+ " --stringsdir \"" + xml_search_paths + "\"" +
+ " --stringsfile \"" + xml_strings_file + "\"";
+
+ LL_INFOS("AppInit") << "Calling updater: "
+ << LLAppViewer::sUpdaterInfo->mUpdateExePath << LL_ENDL;
+
+ // *TODO: we could use the gdk equivalent to ensure the updater
+ // gets started on the same screen.
+ GError *error = NULL;
+ if (!g_spawn_command_line_async(LLAppViewer::sUpdaterInfo->mUpdateExePath.c_str(), &error))
+ {
+ llerrs << "Failed to launch updater: "
+ << error->message
+ << llendl;
+ }
+ if (error) {
+ g_error_free(error);
+ }
+#else
+ OSMessageBox(LLTrans::getString("MBNoAutoUpdate"), LLStringUtil::null, OSMB_OK);
+#endif
+
+ // *REMOVE:Mani - Saving for reference...
+ // LLAppViewer::instance()->forceQuit();
+}
+
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 646b677264..f95d7cb412 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -47,6 +47,8 @@ class LLVFS;
class LLWatchdogTimeout;
class LLWorkerThread;
+struct apr_dso_handle_t;
+
class LLAppViewer : public LLApp
{
@@ -124,7 +126,7 @@ public:
virtual void forceErrorLLError();
virtual void forceErrorBreakpoint();
virtual void forceErrorBadMemoryAccess();
- virtual void forceErrorInifiniteLoop();
+ virtual void forceErrorInfiniteLoop();
virtual void forceErrorSoftwareException();
virtual void forceErrorDriverCrash();
@@ -210,6 +212,8 @@ private:
void sendLogoutRequest();
void disconnectViewer();
+ void loadEventHostModule(S32 listen_port);
+
// *FIX: the app viewer class should be some sort of singleton, no?
// Perhaps its child class is the singleton and this should be an abstract base.
static LLAppViewer* sInstance;
@@ -255,6 +259,8 @@ private:
LLAllocator mAlloc;
+ std::set<struct apr_dso_handle_t*> mPlugins;
+
public:
//some information for updater
typedef struct
@@ -263,6 +269,8 @@ public:
std::ostringstream mParams;
}LLUpdaterInfo ;
static LLUpdaterInfo *sUpdaterInfo ;
+
+ void launchUpdater();
};
// consts from viewer.h
@@ -278,10 +286,6 @@ extern LLSD gDebugInfo;
extern BOOL gAllowTapTapHoldRun;
extern BOOL gShowObjectUpdates;
-extern BOOL gAcceptTOS;
-extern BOOL gAcceptCriticalMessage;
-
-
typedef enum
{
LAST_EXEC_NORMAL = 0,
diff --git a/indra/newview/llappviewerlistener.cpp b/indra/newview/llappviewerlistener.cpp
new file mode 100644
index 0000000000..a3af251a3c
--- /dev/null
+++ b/indra/newview/llappviewerlistener.cpp
@@ -0,0 +1,37 @@
+/**
+ * @file llappviewerlistener.cpp
+ * @author Nat Goodspeed
+ * @date 2009-06-23
+ * @brief Implementation for llappviewerlistener.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * Copyright (c) 2009, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header
+#include "llviewerprecompiledheaders.h"
+// associated header
+#include "llappviewerlistener.h"
+// STL headers
+// std headers
+// external library headers
+// other Linden headers
+#include "llappviewer.h"
+
+LLAppViewerListener::LLAppViewerListener(const std::string& pumpname, LLAppViewer* llappviewer):
+ LLDispatchListener(pumpname, "op"),
+ mAppViewer(llappviewer)
+{
+ // add() every method we want to be able to invoke via this event API.
+ add("requestQuit", &LLAppViewerListener::requestQuit);
+}
+
+void LLAppViewerListener::requestQuit(const LLSD& event)
+{
+ if(mAppViewer == NULL)
+ {
+ mAppViewer = LLAppViewer::instance();
+ }
+ mAppViewer->requestQuit();
+}
diff --git a/indra/newview/llappviewerlistener.h b/indra/newview/llappviewerlistener.h
new file mode 100644
index 0000000000..d702f605ef
--- /dev/null
+++ b/indra/newview/llappviewerlistener.h
@@ -0,0 +1,34 @@
+/**
+ * @file llappviewerlistener.h
+ * @author Nat Goodspeed
+ * @date 2009-06-18
+ * @brief Wrap subset of LLAppViewer API in event API
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * Copyright (c) 2009, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+#if ! defined(LL_LLAPPVIEWERLISTENER_H)
+#define LL_LLAPPVIEWERLISTENER_H
+
+#include "lleventdispatcher.h"
+
+class LLAppViewer;
+class LLSD;
+
+/// Listen on an LLEventPump with specified name for LLAppViewer request events.
+class LLAppViewerListener: public LLDispatchListener
+{
+public:
+ /// Specify the pump name on which to listen, and bind the LLAppViewer
+ /// instance to use (e.g. LLAppViewer::instance()).
+ LLAppViewerListener(const std::string& pumpname, LLAppViewer* llappviewer);
+
+private:
+ void requestQuit(const LLSD& event);
+
+ LLAppViewer* mAppViewer;
+};
+
+#endif /* ! defined(LL_LLAPPVIEWERLISTENER_H) */
diff --git a/indra/newview/llcapabilitylistener.cpp b/indra/newview/llcapabilitylistener.cpp
index 4134e9e0a4..785a647fa2 100644
--- a/indra/newview/llcapabilitylistener.cpp
+++ b/indra/newview/llcapabilitylistener.cpp
@@ -91,6 +91,7 @@ bool LLCapabilityListener::capListener(const LLSD& request)
// This capability is supported by the region to which we're talking.
LLHTTPClient::post(url, payload,
new LLSDMessage::EventResponder(LLEventPumps::instance(),
+ request,
mProvider.getDescription(),
cap, reply, error),
LLSD(), // headers
diff --git a/indra/newview/llclassifiedinfo.cpp b/indra/newview/llclassifiedinfo.cpp
index 5cf1579d0e..5fcafbeca6 100644
--- a/indra/newview/llclassifiedinfo.cpp
+++ b/indra/newview/llclassifiedinfo.cpp
@@ -38,35 +38,19 @@
LLClassifiedInfo::cat_map LLClassifiedInfo::sCategories;
// static
-void LLClassifiedInfo::loadCategories(LLUserAuth::options_t classified_options)
+void LLClassifiedInfo::loadCategories(const LLSD& options)
{
- LLUserAuth::options_t::iterator resp_it;
- for (resp_it = classified_options.begin();
- resp_it != classified_options.end();
- ++resp_it)
+ for(LLSD::array_const_iterator resp_it = options.beginArray(),
+ end = options.endArray(); resp_it != end; ++resp_it)
{
- const LLUserAuth::response_t& response = *resp_it;
-
- LLUserAuth::response_t::const_iterator option_it;
-
- S32 cat_id = 0;
- option_it = response.find("category_id");
- if (option_it != response.end())
+ LLSD name = (*resp_it)["category_name"];
+ if(name.isDefined())
{
- cat_id = atoi(option_it->second.c_str());
+ LLSD id = (*resp_it)["category_id"];
+ if(id.isDefined())
+ {
+ LLClassifiedInfo::sCategories[id.asInteger()] = name.asString();
+ }
}
- else
- {
- continue;
- }
-
- // Add the category id/name pair
- option_it = response.find("category_name");
- if (option_it != response.end())
- {
- LLClassifiedInfo::sCategories[cat_id] = option_it->second;
- }
-
}
-
}
diff --git a/indra/newview/llclassifiedinfo.h b/indra/newview/llclassifiedinfo.h
index cc5a6bf28f..37134c7e5b 100644
--- a/indra/newview/llclassifiedinfo.h
+++ b/indra/newview/llclassifiedinfo.h
@@ -37,7 +37,6 @@
#include "v3dmath.h"
#include "lluuid.h"
-#include "lluserauth.h"
class LLMessageSystem;
@@ -46,7 +45,7 @@ class LLClassifiedInfo
public:
LLClassifiedInfo() {}
- static void loadCategories(LLUserAuth::options_t event_options);
+ static void loadCategories(const LLSD& options);
typedef std::map<U32, std::string> cat_map;
static cat_map sCategories;
diff --git a/indra/newview/lleventinfo.cpp b/indra/newview/lleventinfo.cpp
index d4175b6c84..9be45d18fb 100644
--- a/indra/newview/lleventinfo.cpp
+++ b/indra/newview/lleventinfo.cpp
@@ -87,35 +87,19 @@ void LLEventInfo::unpack(LLMessageSystem *msg)
}
// static
-void LLEventInfo::loadCategories(LLUserAuth::options_t event_options)
+void LLEventInfo::loadCategories(const LLSD& options)
{
- LLUserAuth::options_t::iterator resp_it;
- for (resp_it = event_options.begin();
- resp_it != event_options.end();
- ++resp_it)
+ for(LLSD::array_const_iterator resp_it = options.beginArray(),
+ end = options.endArray(); resp_it != end; ++resp_it)
{
- const LLUserAuth::response_t& response = *resp_it;
-
- LLUserAuth::response_t::const_iterator option_it;
-
- S32 cat_id = 0;
- option_it = response.find("category_id");
- if (option_it != response.end())
+ LLSD name = (*resp_it)["category_name"];
+ if(name.isDefined())
{
- cat_id = atoi(option_it->second.c_str());
+ LLSD id = (*resp_it)["category_id"];
+ if(id.isDefined())
+ {
+ LLEventInfo::sCategories[id.asInteger()] = name.asString();
+ }
}
- else
- {
- continue;
- }
-
- // Add the category id/name pair
- option_it = response.find("category_name");
- if (option_it != response.end())
- {
- LLEventInfo::sCategories[cat_id] = option_it->second;
- }
-
}
-
}
diff --git a/indra/newview/lleventinfo.h b/indra/newview/lleventinfo.h
index 880517a9f4..493c659983 100644
--- a/indra/newview/lleventinfo.h
+++ b/indra/newview/lleventinfo.h
@@ -37,7 +37,6 @@
#include "v3dmath.h"
#include "lluuid.h"
-#include "lluserauth.h"
class LLMessageSystem;
@@ -48,7 +47,7 @@ public:
void unpack(LLMessageSystem *msg);
- static void loadCategories(LLUserAuth::options_t event_options);
+ static void loadCategories(const LLSD& options);
public:
std::string mName;
diff --git a/indra/newview/lleventnotifier.cpp b/indra/newview/lleventnotifier.cpp
index 2c52cf9565..80d4d21166 100644
--- a/indra/newview/lleventnotifier.cpp
+++ b/indra/newview/lleventnotifier.cpp
@@ -95,18 +95,16 @@ void LLEventNotifier::update()
}
}
-void LLEventNotifier::load(const LLUserAuth::options_t& event_options)
+void LLEventNotifier::load(const LLSD& event_options)
{
- LLUserAuth::options_t::const_iterator resp_it;
- for (resp_it = event_options.begin();
- resp_it != event_options.end();
- ++resp_it)
+ for(LLSD::array_const_iterator resp_it = event_options.beginArray(),
+ end = event_options.endArray(); resp_it != end; ++resp_it)
{
- const LLUserAuth::response_t& response = *resp_it;
+ LLSD response = *resp_it;
LLEventNotification *new_enp = new LLEventNotification();
- if (!new_enp->load(response))
+ if(!new_enp->load(response))
{
delete new_enp;
continue;
@@ -210,49 +208,46 @@ bool LLEventNotification::handleResponse(const LLSD& notification, const LLSD& r
return false;
}
-BOOL LLEventNotification::load(const LLUserAuth::response_t &response)
+BOOL LLEventNotification::load(const LLSD& response)
{
-
- LLUserAuth::response_t::const_iterator option_it;
BOOL event_ok = TRUE;
- option_it = response.find("event_id");
- if (option_it != response.end())
+ LLSD option = response.get("event_id");
+ if (option.isDefined())
{
- mEventID = atoi(option_it->second.c_str());
+ mEventID = option.asInteger();
}
else
{
event_ok = FALSE;
}
- option_it = response.find("event_name");
- if (option_it != response.end())
+ option = response.get("event_name");
+ if (option.isDefined())
{
- llinfos << "Event: " << option_it->second << llendl;
- mEventName = option_it->second;
+ llinfos << "Event: " << option.asString() << llendl;
+ mEventName = option.asString();
}
else
{
event_ok = FALSE;
}
-
- option_it = response.find("event_date");
- if (option_it != response.end())
+ option = response.get("event_date");
+ if (option.isDefined())
{
- llinfos << "EventDate: " << option_it->second << llendl;
- mEventDateStr = option_it->second;
+ llinfos << "EventDate: " << option.asString() << llendl;
+ mEventDateStr = option.asString();
}
else
{
event_ok = FALSE;
}
- option_it = response.find("event_date_ut");
- if (option_it != response.end())
+ option = response.get("event_date_ut");
+ if (option.isDefined())
{
- llinfos << "EventDate: " << option_it->second << llendl;
- mEventDate = strtoul(option_it->second.c_str(), NULL, 10);
+ llinfos << "EventDate: " << option.asString() << llendl;
+ mEventDate = strtoul(option.asString().c_str(), NULL, 10);
}
else
{
@@ -264,44 +259,44 @@ BOOL LLEventNotification::load(const LLUserAuth::response_t &response)
S32 x_region = 0;
S32 y_region = 0;
- option_it = response.find("grid_x");
- if (option_it != response.end())
+ option = response.get("grid_x");
+ if (option.isDefined())
{
- llinfos << "GridX: " << option_it->second << llendl;
- grid_x= atoi(option_it->second.c_str());
+ llinfos << "GridX: " << option.asInteger() << llendl;
+ grid_x= option.asInteger();
}
else
{
event_ok = FALSE;
}
- option_it = response.find("grid_y");
- if (option_it != response.end())
+ option = response.get("grid_y");
+ if (option.isDefined())
{
- llinfos << "GridY: " << option_it->second << llendl;
- grid_y = atoi(option_it->second.c_str());
+ llinfos << "GridY: " << option.asInteger() << llendl;
+ grid_y = option.asInteger();
}
else
{
event_ok = FALSE;
}
- option_it = response.find("x_region");
- if (option_it != response.end())
+ option = response.get("x_region");
+ if (option.isDefined())
{
- llinfos << "RegionX: " << option_it->second << llendl;
- x_region = atoi(option_it->second.c_str());
+ llinfos << "RegionX: " << option.asInteger() << llendl;
+ x_region = option.asInteger();
}
else
{
event_ok = FALSE;
}
- option_it = response.find("y_region");
- if (option_it != response.end())
+ option = response.get("y_region");
+ if (option.isDefined())
{
- llinfos << "RegionY: " << option_it->second << llendl;
- y_region = atoi(option_it->second.c_str());
+ llinfos << "RegionY: " << option.asInteger() << llendl;
+ y_region = option.asInteger();
}
else
{
diff --git a/indra/newview/lleventnotifier.h b/indra/newview/lleventnotifier.h
index feb734948c..6fdde87646 100644
--- a/indra/newview/lleventnotifier.h
+++ b/indra/newview/lleventnotifier.h
@@ -34,7 +34,6 @@
#define LL_LLEVENTNOTIFIER_H
#include "llframetimer.h"
-#include "lluserauth.h"
#include "v3dmath.h"
class LLEventInfo;
@@ -49,7 +48,7 @@ public:
void update(); // Notify the user of the event if it's coming up
- void load(const LLUserAuth::options_t& event_options); // In the format that it comes in from LLUserAuth
+ void load(const LLSD& event_options); // In the format that it comes in from login
void add(LLEventInfo &event_info); // Add a new notification for an event
void remove(U32 event_id);
@@ -69,7 +68,7 @@ public:
LLEventNotification();
virtual ~LLEventNotification();
- BOOL load(const LLUserAuth::response_t &en); // In the format it comes in from LLUserAuth
+ BOOL load(const LLSD& en); // In the format it comes in from login
BOOL load(const LLEventInfo &event_info); // From existing event_info on the viewer.
//void setEventID(const U32 event_id);
//void setEventName(std::string &event_name);
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 8af3a8b539..8b06947c4e 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -996,8 +996,12 @@ LLSD LLFastTimerView::analyzePerformanceLogDefault(std::istream& is)
std::string label = iter->first;
F64 time = iter->second["Time"].asReal();
-
- total_time += time;
+
+ // Skip the total figure
+ if(label.compare("Total") != 0)
+ {
+ total_time += time;
+ }
if (time > 0.0)
{
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index 2a8365b3f0..fb724f30e0 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -44,6 +44,7 @@
#include "llgl.h"
#include "llsecondlifeurls.h"
+#include "llappviewer.h"
#include "llviewercontrol.h"
#include "llworld.h"
#include "lldrawpoolterrain.h"
@@ -58,11 +59,6 @@
#include "lldxhardware.h"
#endif
-//
-// externs
-//
-extern LLMemoryInfo gSysMemory;
-extern LLCPUInfo gSysCPU;
#if LL_DARWIN
const char FEATURE_TABLE_FILENAME[] = "featuretable_mac.txt";
diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp
index caa10e9452..da602d5f27 100644
--- a/indra/newview/llfloaterabout.cpp
+++ b/indra/newview/llfloaterabout.cpp
@@ -1,257 +1,256 @@
-/**
- * @file llfloaterabout.cpp
- * @author James Cook
- * @brief The about box from Help->About
- *
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llfloaterabout.h"
-
-#include "llsys.h"
-#include "llgl.h"
-#include "llui.h" // for tr()
-#include "v3dmath.h"
-
-#include "llcurl.h"
-#include "llimagej2c.h"
-#include "llaudioengine.h"
-
-#include "llviewertexteditor.h"
-#include "llviewercontrol.h"
-#include "llagent.h"
-#include "llviewerstats.h"
-#include "llviewerregion.h"
-#include "llversionviewer.h"
-#include "llviewerbuild.h"
-#include "lluictrlfactory.h"
-#include "lluri.h"
-#include "llweb.h"
-#include "llsecondlifeurls.h"
-#include "lltrans.h"
-#include "llappviewer.h"
-#include "llglheaders.h"
-#include "llwindow.h"
-
-#include "llbutton.h"
-
-#if LL_WINDOWS
-#include "lldxhardware.h"
-#endif
-
-extern LLCPUInfo gSysCPU;
-extern LLMemoryInfo gSysMemory;
-extern U32 gPacketsIn;
-
-static std::string get_viewer_release_notes_url();
-
-
-///----------------------------------------------------------------------------
-/// Class LLFloaterAbout
-///----------------------------------------------------------------------------
-
-// Default constructor
-LLFloaterAbout::LLFloaterAbout(const LLSD& key)
-: LLFloater(key)
-{
- //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_about.xml");
-
-}
-
-// Destroys the object
-LLFloaterAbout::~LLFloaterAbout()
-{
-}
-
-BOOL LLFloaterAbout::postBuild()
-{
- center();
- LLViewerTextEditor *support_widget =
- getChild<LLViewerTextEditor>("support_editor", true);
-
- LLViewerTextEditor *credits_widget =
- getChild<LLViewerTextEditor>("credits_editor", true);
-
- // make sure that we handle hyperlinks in the About text
- support_widget->setParseHTML(TRUE);
-
- // Version string
- std::string version = LLTrans::getString("APP_NAME")
- + llformat(" %d.%d.%d (%d) %s %s (%s)\n",
- LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD,
- __DATE__, __TIME__,
- gSavedSettings.getString("VersionChannelName").c_str());
-
- std::string support;
- support.append(version);
- support.append("[" + get_viewer_release_notes_url() + " " +
- LLTrans::getString("ReleaseNotes") + "]");
- support.append("\n\n");
-
-#if LL_MSVC
- support.append(llformat("Built with MSVC version %d\n\n", _MSC_VER));
-#endif
-
-#if LL_GNUC
- support.append(llformat("Built with GCC version %d\n\n", GCC_VERSION));
-#endif
-
- // Position
- LLViewerRegion* region = gAgent.getRegion();
- if (region)
- {
- const LLVector3d &pos = gAgent.getPositionGlobal();
- LLUIString pos_text = getString("you_are_at");
- pos_text.setArg("[POSITION]",
- llformat("%.1f, %.1f, %.1f ", pos.mdV[VX], pos.mdV[VY], pos.mdV[VZ]));
- support.append(pos_text);
-
- LLUIString region_text = getString ("in_region") + " ";
- region_text.setArg("[REGION]", llformat ("%s", gAgent.getRegion()->getName().c_str()));
- support.append(region_text);
-
- std::string buffer;
- buffer = gAgent.getRegion()->getHost().getHostName();
- support.append(buffer);
- support.append(" (");
- buffer = gAgent.getRegion()->getHost().getString();
- support.append(buffer);
- support.append(")\n");
- support.append(gLastVersionChannel);
- support.append("\n");
- support.append("[" + LLWeb::escapeURL(region->getCapability("ServerReleaseNotes")) +
- " " + LLTrans::getString("ReleaseNotes") + "]");
- support.append("\n\n");
- }
-
- // *NOTE: Do not translate text like GPU, Graphics Card, etc -
- // Most PC users that know what these mean will be used to the english versions,
- // and this info sometimes gets sent to support
-
- // CPU
- support.append(getString("CPU") + " ");
- support.append( gSysCPU.getCPUString() );
- support.append("\n");
-
- U32 memory = gSysMemory.getPhysicalMemoryKB() / 1024;
- // Moved hack adjustment to Windows memory size into llsys.cpp
-
- LLStringUtil::format_map_t args;
- args["[MEM]"] = llformat ("%u", memory);
- support.append(getString("Memory", args) + "\n");
-
- support.append(getString("OSVersion") + " ");
- support.append( LLAppViewer::instance()->getOSInfo().getOSString() );
- support.append("\n");
-
- support.append(getString("GraphicsCardVendor") + " ");
- support.append( (const char*) glGetString(GL_VENDOR) );
- support.append("\n");
-
- support.append(getString("GraphicsCard") + " ");
- support.append( (const char*) glGetString(GL_RENDERER) );
- support.append("\n");
-
-#if LL_WINDOWS
- getWindow()->incBusyCount();
- getWindow()->setCursor(UI_CURSOR_ARROW);
- support.append("Windows Graphics Driver Version: ");
- LLSD driver_info = gDXHardware.getDisplayInfo();
- if (driver_info.has("DriverVersion"))
- {
- support.append(driver_info["DriverVersion"]);
- }
- support.append("\n");
- getWindow()->decBusyCount();
- getWindow()->setCursor(UI_CURSOR_ARROW);
-#endif
-
- support.append(getString("OpenGLVersion") + " ");
- support.append( (const char*) glGetString(GL_VERSION) );
- support.append("\n");
-
- support.append("\n");
-
- support.append(getString("LibCurlVersion") + " ");
- support.append( LLCurl::getVersionString() );
- support.append("\n");
-
- support.append(getString("J2CDecoderVersion") + " ");
- support.append( LLImageJ2C::getEngineInfo() );
- support.append("\n");
-
- support.append(getString("AudioDriverVersion") + " ");
- bool want_fullname = true;
- support.append( gAudiop ? gAudiop->getDriverName(want_fullname) : getString("none") );
- support.append("\n");
-
- // TODO: Implement media plugin version query
-
- support.append(getString("LLQtWebkitVersion") + " ");
- support.append("\n");
-
- if (gPacketsIn > 0)
- {
- args["[LOST]"] = llformat ("%.0f", LLViewerStats::getInstance()->mPacketsLostStat.getCurrent());
- args["[IN]"] = llformat ("%.0f", F32(gPacketsIn));
- args["[PCT]"] = llformat ("%.1f", 100.f*LLViewerStats::getInstance()->mPacketsLostStat.getCurrent() / F32(gPacketsIn) );
- support.append(getString ("PacketsLost", args) + "\n");
- }
-
- support_widget->appendColoredText(support, FALSE, FALSE, LLUIColorTable::instance().getColor("TextFgReadOnlyColor"));
-
- // Fix views
- support_widget->setCursorPos(0);
- support_widget->setEnabled(FALSE);
-
- credits_widget->setCursorPos(0);
- credits_widget->setEnabled(FALSE);
-
- return TRUE;
-}
-
-
-static std::string get_viewer_release_notes_url()
-{
- std::ostringstream version;
- version << LL_VERSION_MAJOR << "."
- << LL_VERSION_MINOR << "."
- << LL_VERSION_PATCH << "."
- << LL_VERSION_BUILD;
-
- LLSD query;
- query["channel"] = gSavedSettings.getString("VersionChannelName");
- query["version"] = version.str();
-
- std::ostringstream url;
- url << LLTrans::getString("RELEASE_NOTES_BASE_URL") << LLURI::mapToQueryString(query);
-
- return LLWeb::escapeURL(url.str());
-}
+/**
+ * @file llfloaterabout.cpp
+ * @author James Cook
+ * @brief The about box from Help->About
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterabout.h"
+
+#include "llsys.h"
+#include "llgl.h"
+#include "llui.h" // for tr()
+#include "v3dmath.h"
+
+#include "llcurl.h"
+#include "llimagej2c.h"
+#include "llaudioengine.h"
+
+#include "llviewertexteditor.h"
+#include "llviewercontrol.h"
+#include "llagent.h"
+#include "llviewerstats.h"
+#include "llviewerregion.h"
+#include "llversionviewer.h"
+#include "llviewerbuild.h"
+#include "lluictrlfactory.h"
+#include "lluri.h"
+#include "llweb.h"
+#include "llsecondlifeurls.h"
+#include "lltrans.h"
+#include "llappviewer.h"
+#include "llglheaders.h"
+#include "llwindow.h"
+
+#include "llbutton.h"
+
+#if LL_WINDOWS
+#include "lldxhardware.h"
+#endif
+
+extern LLMemoryInfo gSysMemory;
+extern U32 gPacketsIn;
+
+static std::string get_viewer_release_notes_url();
+
+
+///----------------------------------------------------------------------------
+/// Class LLFloaterAbout
+///----------------------------------------------------------------------------
+
+// Default constructor
+LLFloaterAbout::LLFloaterAbout(const LLSD& key)
+: LLFloater(key)
+{
+ //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_about.xml");
+
+}
+
+// Destroys the object
+LLFloaterAbout::~LLFloaterAbout()
+{
+}
+
+BOOL LLFloaterAbout::postBuild()
+{
+ center();
+ LLViewerTextEditor *support_widget =
+ getChild<LLViewerTextEditor>("support_editor", true);
+
+ LLViewerTextEditor *credits_widget =
+ getChild<LLViewerTextEditor>("credits_editor", true);
+
+ // make sure that we handle hyperlinks in the About text
+ support_widget->setParseHTML(TRUE);
+
+ // Version string
+ std::string version = LLTrans::getString("APP_NAME")
+ + llformat(" %d.%d.%d (%d) %s %s (%s)\n",
+ LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD,
+ __DATE__, __TIME__,
+ gSavedSettings.getString("VersionChannelName").c_str());
+
+ std::string support;
+ support.append(version);
+ support.append("[" + get_viewer_release_notes_url() + " " +
+ LLTrans::getString("ReleaseNotes") + "]");
+ support.append("\n\n");
+
+#if LL_MSVC
+ support.append(llformat("Built with MSVC version %d\n\n", _MSC_VER));
+#endif
+
+#if LL_GNUC
+ support.append(llformat("Built with GCC version %d\n\n", GCC_VERSION));
+#endif
+
+ // Position
+ LLViewerRegion* region = gAgent.getRegion();
+ if (region)
+ {
+ const LLVector3d &pos = gAgent.getPositionGlobal();
+ LLUIString pos_text = getString("you_are_at");
+ pos_text.setArg("[POSITION]",
+ llformat("%.1f, %.1f, %.1f ", pos.mdV[VX], pos.mdV[VY], pos.mdV[VZ]));
+ support.append(pos_text);
+
+ LLUIString region_text = getString ("in_region") + " ";
+ region_text.setArg("[REGION]", llformat ("%s", gAgent.getRegion()->getName().c_str()));
+ support.append(region_text);
+
+ std::string buffer;
+ buffer = gAgent.getRegion()->getHost().getHostName();
+ support.append(buffer);
+ support.append(" (");
+ buffer = gAgent.getRegion()->getHost().getString();
+ support.append(buffer);
+ support.append(")\n");
+ support.append(gLastVersionChannel);
+ support.append("\n");
+ support.append("[" + LLWeb::escapeURL(region->getCapability("ServerReleaseNotes")) +
+ " " + LLTrans::getString("ReleaseNotes") + "]");
+ support.append("\n\n");
+ }
+
+ // *NOTE: Do not translate text like GPU, Graphics Card, etc -
+ // Most PC users that know what these mean will be used to the english versions,
+ // and this info sometimes gets sent to support
+
+ // CPU
+ support.append(getString("CPU") + " ");
+ support.append( gSysCPU.getCPUString() );
+ support.append("\n");
+
+ U32 memory = gSysMemory.getPhysicalMemoryKB() / 1024;
+ // Moved hack adjustment to Windows memory size into llsys.cpp
+
+ LLStringUtil::format_map_t args;
+ args["[MEM]"] = llformat ("%u", memory);
+ support.append(getString("Memory", args) + "\n");
+
+ support.append(getString("OSVersion") + " ");
+ support.append( LLAppViewer::instance()->getOSInfo().getOSString() );
+ support.append("\n");
+
+ support.append(getString("GraphicsCardVendor") + " ");
+ support.append( (const char*) glGetString(GL_VENDOR) );
+ support.append("\n");
+
+ support.append(getString("GraphicsCard") + " ");
+ support.append( (const char*) glGetString(GL_RENDERER) );
+ support.append("\n");
+
+#if LL_WINDOWS
+ getWindow()->incBusyCount();
+ getWindow()->setCursor(UI_CURSOR_ARROW);
+ support.append("Windows Graphics Driver Version: ");
+ LLSD driver_info = gDXHardware.getDisplayInfo();
+ if (driver_info.has("DriverVersion"))
+ {
+ support.append(driver_info["DriverVersion"]);
+ }
+ support.append("\n");
+ getWindow()->decBusyCount();
+ getWindow()->setCursor(UI_CURSOR_ARROW);
+#endif
+
+ support.append(getString("OpenGLVersion") + " ");
+ support.append( (const char*) glGetString(GL_VERSION) );
+ support.append("\n");
+
+ support.append("\n");
+
+ support.append(getString("LibCurlVersion") + " ");
+ support.append( LLCurl::getVersionString() );
+ support.append("\n");
+
+ support.append(getString("J2CDecoderVersion") + " ");
+ support.append( LLImageJ2C::getEngineInfo() );
+ support.append("\n");
+
+ support.append(getString("AudioDriverVersion") + " ");
+ bool want_fullname = true;
+ support.append( gAudiop ? gAudiop->getDriverName(want_fullname) : getString("none") );
+ support.append("\n");
+
+ // TODO: Implement media plugin version query
+
+ support.append(getString("LLQtWebkitVersion") + " ");
+ support.append("\n");
+
+ if (gPacketsIn > 0)
+ {
+ args["[LOST]"] = llformat ("%.0f", LLViewerStats::getInstance()->mPacketsLostStat.getCurrent());
+ args["[IN]"] = llformat ("%.0f", F32(gPacketsIn));
+ args["[PCT]"] = llformat ("%.1f", 100.f*LLViewerStats::getInstance()->mPacketsLostStat.getCurrent() / F32(gPacketsIn) );
+ support.append(getString ("PacketsLost", args) + "\n");
+ }
+
+ support_widget->appendColoredText(support, FALSE, FALSE, LLUIColorTable::instance().getColor("TextFgReadOnlyColor"));
+
+ // Fix views
+ support_widget->setCursorPos(0);
+ support_widget->setEnabled(FALSE);
+
+ credits_widget->setCursorPos(0);
+ credits_widget->setEnabled(FALSE);
+
+ return TRUE;
+}
+
+
+static std::string get_viewer_release_notes_url()
+{
+ std::ostringstream version;
+ version << LL_VERSION_MAJOR << "."
+ << LL_VERSION_MINOR << "."
+ << LL_VERSION_PATCH << "."
+ << LL_VERSION_BUILD;
+
+ LLSD query;
+ query["channel"] = gSavedSettings.getString("VersionChannelName");
+ query["version"] = version.str();
+
+ std::ostringstream url;
+ url << LLTrans::getString("RELEASE_NOTES_BASE_URL") << LLURI::mapToQueryString(query);
+
+ return LLWeb::escapeURL(url.str());
+}
diff --git a/indra/newview/llfloaterfriends.h b/indra/newview/llfloaterfriends.h
index 9242f00c91..9c6660c0dc 100644
--- a/indra/newview/llfloaterfriends.h
+++ b/indra/newview/llfloaterfriends.h
@@ -74,6 +74,9 @@ public:
virtual BOOL postBuild();
+ // *HACK Made public to remove friends from LLAvatarIconCtrl context menu
+ static bool handleRemove(const LLSD& notification, const LLSD& response);
+
private:
enum FRIENDS_COLUMN_ORDER
diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp
index 1c3443ae80..8d2d48f1af 100644
--- a/indra/newview/llfloatertos.cpp
+++ b/indra/newview/llfloatertos.cpp
@@ -35,8 +35,6 @@
#include "llfloatertos.h"
// viewer includes
-#include "llappviewer.h"
-#include "llstartup.h"
#include "llviewerstats.h"
#include "llviewerwindow.h"
@@ -50,13 +48,15 @@
#include "lluictrlfactory.h"
#include "llvfile.h"
#include "message.h"
+#include "llstartup.h" // login_alert_done
-LLFloaterTOS::LLFloaterTOS(const LLSD& message)
-: LLModalDialog( message ),
- mMessage(message.asString()),
+LLFloaterTOS::LLFloaterTOS(const LLSD& data)
+: LLModalDialog( data["message"].asString() ),
+ mMessage(data["message"].asString()),
mWebBrowserWindowId( 0 ),
- mLoadCompleteCount( 0 )
+ mLoadCompleteCount( 0 ),
+ mReplyPumpName(data["reply_pump"].asString())
{
}
@@ -193,25 +193,12 @@ void LLFloaterTOS::onContinue( void* userdata )
{
LLFloaterTOS* self = (LLFloaterTOS*) userdata;
llinfos << "User agrees with TOS." << llendl;
- if (self->getInstanceName() == "message_tos")
- {
- gAcceptTOS = TRUE;
- }
- else
- {
- gAcceptCriticalMessage = TRUE;
- }
- // Testing TOS dialog
- #if ! LL_RELEASE_FOR_DOWNLOAD
- if ( LLStartUp::getStartupState() == STATE_LOGIN_WAIT )
+ if(self->mReplyPumpName != "")
{
- LLStartUp::setStartupState( STATE_LOGIN_SHOW );
+ LLEventPumps::instance().obtain(self->mReplyPumpName).post(LLSD(true));
}
- else
- #endif
- LLStartUp::setStartupState( STATE_LOGIN_AUTH_INIT ); // Go back and finish authentication
self->closeFloater(); // destroys this object
}
@@ -221,7 +208,12 @@ void LLFloaterTOS::onCancel( void* userdata )
LLFloaterTOS* self = (LLFloaterTOS*) userdata;
llinfos << "User disagrees with TOS." << llendl;
LLNotifications::instance().add("MustAgreeToLogIn", LLSD(), LLSD(), login_alert_done);
- LLStartUp::setStartupState( STATE_LOGIN_SHOW );
+
+ if(self->mReplyPumpName != "")
+ {
+ LLEventPumps::instance().obtain(self->mReplyPumpName).post(LLSD(false));
+ }
+
self->mLoadCompleteCount = 0; // reset counter for next time we come to TOS
self->closeFloater(); // destroys this object
}
@@ -241,3 +233,4 @@ void LLFloaterTOS::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent ev
}
}
}
+
diff --git a/indra/newview/llfloatertos.h b/indra/newview/llfloatertos.h
index 49f982aa80..1d573e8170 100644
--- a/indra/newview/llfloatertos.h
+++ b/indra/newview/llfloatertos.h
@@ -36,6 +36,7 @@
#include "llmodaldialog.h"
#include "llassetstorage.h"
#include "llmediactrl.h"
+#include <boost/function.hpp>
class LLButton;
class LLRadioGroup;
@@ -48,7 +49,7 @@ class LLFloaterTOS :
public LLViewerMediaObserver
{
public:
- LLFloaterTOS(const LLSD& message);
+ LLFloaterTOS(const LLSD& data);
virtual ~LLFloaterTOS();
BOOL postBuild();
@@ -68,6 +69,7 @@ private:
std::string mMessage;
int mWebBrowserWindowId;
int mLoadCompleteCount;
+ std::string mReplyPumpName;
};
#endif // LL_LLFLOATERTOS_H
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 9ef98afe94..a58cca1ba4 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -40,7 +40,7 @@
#include "llerror.h"
#include "llbutton.h"
#include "llhttpclient.h"
-#include "llsdutil.h"
+#include "llsdutil_math.h"
#include "llstring.h"
#include "lluictrlfactory.h"
diff --git a/indra/newview/llinventoryactions.h b/indra/newview/llinventoryactions.h
new file mode 100644
index 0000000000..79247e3abb
--- /dev/null
+++ b/indra/newview/llinventoryactions.h
@@ -0,0 +1,47 @@
+/**
+ * @file llinventoryactions.h
+ * @brief inventory callback functions
+ * class definition
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLINVENTORYACTIONS_H
+#define LL_LLINVENTORYACTIONS_H
+
+#include "lluictrl.h"
+
+class LLPanelInventory;
+class LLInventoryView;
+class LLInventoryPanel;
+
+void init_object_inventory_panel_actions(LLPanelInventory *panel, LLUICtrl::CommitCallbackRegistry::Registrar& registrar);
+void init_inventory_actions(LLInventoryView *floater, LLUICtrl::CommitCallbackRegistry::Registrar& registrar);
+void init_inventory_panel_actions(LLInventoryPanel *panel, LLUICtrl::CommitCallbackRegistry::Registrar& registrar);
+
+#endif // LL_LLINVENTORYACTIONS_H
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 4cbf3e169b..7f91f8f8b2 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -1982,63 +1982,56 @@ bool LLInventoryModel::isCategoryComplete(const LLUUID& cat_id) const
}
bool LLInventoryModel::loadSkeleton(
- const LLInventoryModel::options_t& options,
+ const LLSD& options,
const LLUUID& owner_id)
{
lldebugs << "importing inventory skeleton for " << owner_id << llendl;
typedef std::set<LLPointer<LLViewerInventoryCategory>, InventoryIDPtrLess> cat_set_t;
cat_set_t temp_cats;
-
- update_map_t child_counts;
-
- LLUUID id;
- LLAssetType::EType preferred_type;
bool rv = true;
- for(options_t::const_iterator it = options.begin(); it < options.end(); ++it)
- {
- LLPointer<LLViewerInventoryCategory> cat = new LLViewerInventoryCategory(owner_id);
- response_t::const_iterator no_response = (*it).end();
- response_t::const_iterator skel;
- skel = (*it).find("name");
- if(skel == no_response) goto clean_cat;
- cat->rename(std::string((*skel).second));
- skel = (*it).find("folder_id");
- if(skel == no_response) goto clean_cat;
- id.set((*skel).second);
- // if an id is null, it locks the viewer.
- if(id.isNull()) goto clean_cat;
- cat->setUUID(id);
- skel = (*it).find("parent_id");
- if(skel == no_response) goto clean_cat;
- id.set((*skel).second);
- cat->setParent(id);
- skel = (*it).find("type_default");
- if(skel == no_response)
- {
- preferred_type = LLAssetType::AT_NONE;
+
+ for(LLSD::array_const_iterator it = options.beginArray(),
+ end = options.endArray(); it != end; ++it)
+ {
+ LLSD name = (*it)["name"];
+ LLSD folder_id = (*it)["folder_id"];
+ LLSD parent_id = (*it)["parent_id"];
+ LLSD version = (*it)["version"];
+ if(name.isDefined()
+ && folder_id.isDefined()
+ && parent_id.isDefined()
+ && version.isDefined()
+ && folder_id.asUUID().notNull() // if an id is null, it locks the viewer.
+ )
+ {
+ LLPointer<LLViewerInventoryCategory> cat = new LLViewerInventoryCategory(owner_id);
+ cat->rename(name.asString());
+ cat->setUUID(folder_id.asUUID());
+ cat->setParent(parent_id.asUUID());
+
+ LLAssetType::EType preferred_type = LLAssetType::AT_NONE;
+ LLSD type_default = (*it)["type_default"];
+ if(type_default.isDefined())
+ {
+ preferred_type = (LLAssetType::EType)type_default.asInteger();
+ }
+ cat->setPreferredType(preferred_type);
+ cat->setVersion(version.asInteger());
+ temp_cats.insert(cat);
}
else
{
- S32 t = atoi((*skel).second.c_str());
- preferred_type = (LLAssetType::EType)t;
+ llwarns << "Unable to import near " << name.asString() << llendl;
+ rv = false;
}
- cat->setPreferredType(preferred_type);
- skel = (*it).find("version");
- if(skel == no_response) goto clean_cat;
- cat->setVersion(atoi((*skel).second.c_str()));
- temp_cats.insert(cat);
- continue;
- clean_cat:
- llwarns << "Unable to import near " << cat->getName() << llendl;
- rv = false;
- //delete cat; // automatic when cat is reasigned or destroyed
}
S32 cached_category_count = 0;
S32 cached_item_count = 0;
if(!temp_cats.empty())
{
+ update_map_t child_counts;
cat_array_t categories;
item_array_t items;
cat_set_t invalid_categories; // Used to mark categories that weren't successfully loaded.
@@ -2213,85 +2206,84 @@ bool LLInventoryModel::loadSkeleton(
return rv;
}
-bool LLInventoryModel::loadMeat(
- const LLInventoryModel::options_t& options, const LLUUID& owner_id)
+bool LLInventoryModel::loadMeat(const LLSD& options, const LLUUID& owner_id)
{
llinfos << "importing inventory for " << owner_id << llendl;
- LLPermissions default_perm;
- default_perm.init(LLUUID::null, owner_id, LLUUID::null, LLUUID::null);
- LLPointer<LLViewerInventoryItem> item;
- LLUUID id;
- LLAssetType::EType type;
- LLInventoryType::EType inv_type;
bool rv = true;
- for(options_t::const_iterator it = options.begin(); it < options.end(); ++it)
- {
- item = new LLViewerInventoryItem;
- response_t::const_iterator no_response = (*it).end();
- response_t::const_iterator meat;
- meat = (*it).find("name");
- if(meat == no_response) goto clean_item;
- item->rename(std::string((*meat).second));
- meat = (*it).find("item_id");
- if(meat == no_response) goto clean_item;
- id.set((*meat).second);
- item->setUUID(id);
- meat = (*it).find("parent_id");
- if(meat == no_response) goto clean_item;
- id.set((*meat).second);
- item->setParent(id);
- meat = (*it).find("type");
- if(meat == no_response) goto clean_item;
- type = (LLAssetType::EType)atoi((*meat).second.c_str());
- item->setType(type);
- meat = (*it).find("inv_type");
- if(meat != no_response)
- {
- inv_type = (LLInventoryType::EType)atoi((*meat).second.c_str());
- item->setInventoryType(inv_type);
- }
- meat = (*it).find("data_id");
- if(meat == no_response) goto clean_item;
- id.set((*meat).second);
- if(LLAssetType::AT_CALLINGCARD == type)
- {
- LLPermissions perm;
- perm.init(id, owner_id, LLUUID::null, LLUUID::null);
- item->setPermissions(perm);
+ for(LLSD::array_const_iterator it = options.beginArray(),
+ end = options.endArray(); it != end; ++it)
+ {
+ LLSD name = (*it)["name"];
+ LLSD item_id = (*it)["item_id"];
+ LLSD parent_id = (*it)["parent_id"];
+ LLSD asset_type = (*it)["type"];
+ LLSD data_id = (*it)["data_id"];
+ if(name.isDefined()
+ && item_id.isDefined()
+ && parent_id.isDefined()
+ && asset_type.isDefined()
+ && data_id.isDefined())
+ {
+ LLPointer<LLViewerInventoryItem> item = new LLViewerInventoryItem;
+ item->rename(name.asString());
+ item->setUUID(item_id.asUUID());
+ item->setParent(parent_id.asUUID());
+ LLAssetType::EType type = (LLAssetType::EType)asset_type.asInteger();
+ item->setType(type);
+
+ LLSD llsd_inv_type = (*it)["inv_type"];
+ if(llsd_inv_type.isDefined())
+ {
+ LLInventoryType::EType inv_type = (LLInventoryType::EType)llsd_inv_type.asInteger();
+ item->setInventoryType(inv_type);
+ }
+
+ if(LLAssetType::AT_CALLINGCARD == type)
+ {
+ LLPermissions perm;
+ perm.init(data_id.asUUID(), owner_id, LLUUID::null, LLUUID::null);
+ item->setPermissions(perm);
+ }
+ else
+ {
+ LLPermissions default_perm;
+ default_perm.init(LLUUID::null, owner_id, LLUUID::null, LLUUID::null);
+ LLSD llsd_perm_mask = (*it)["perm_mask"];
+ if(llsd_perm_mask.isDefined())
+ {
+ PermissionMask perm_mask = llsd_perm_mask.asInteger();
+ default_perm.initMasks(
+ perm_mask, perm_mask, perm_mask, perm_mask, perm_mask);
+ }
+ else
+ {
+ default_perm.initMasks(
+ PERM_NONE, PERM_NONE, PERM_NONE, PERM_NONE, PERM_NONE);
+ }
+ item->setPermissions(default_perm);
+ item->setAssetUUID(data_id.asUUID());
+ }
+
+ LLSD flags = (*it)["flags"];
+ if(flags.isDefined())
+ {
+ // Not sure how well LLSD.asInteger() maps to
+ // unsigned long - using strtoul()
+ item->setFlags(strtoul(flags.asString().c_str(), NULL, 0));
+ }
+
+ LLSD time = (*it)["time"];
+ if(time.isDefined())
+ {
+ item->setCreationDate(time.asInteger());
+ }
+ addItem(item);
}
else
{
- meat = (*it).find("perm_mask");
- if(meat != no_response)
- {
- PermissionMask perm_mask = atoi((*meat).second.c_str());
- default_perm.initMasks(
- perm_mask, perm_mask, perm_mask, perm_mask, perm_mask);
- }
- else
- {
- default_perm.initMasks(
- PERM_NONE, PERM_NONE, PERM_NONE, PERM_NONE, PERM_NONE);
- }
- item->setPermissions(default_perm);
- item->setAssetUUID(id);
- }
- meat = (*it).find("flags");
- if(meat != no_response)
- {
- item->setFlags(strtoul((*meat).second.c_str(), NULL, 0));
- }
- meat = (*it).find("time");
- if(meat != no_response)
- {
- item->setCreationDate(atoi((*meat).second.c_str()));
+ llwarns << "Unable to import near " << name.asString() << llendl;
+ rv = false;
}
- addItem(item);
- continue;
- clean_item:
- llwarns << "Unable to import near " << item->getName() << llendl;
- rv = false;
- //delete item; // automatic when item is reassigned or destroyed
}
return rv;
}
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index e3e4f6aca0..3f2e6b624e 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -329,10 +329,8 @@ public:
// methods to load up inventory skeleton & meat. These are used
// during authentication. return true if everything parsed.
- typedef std::map<std::string, std::string> response_t;
- typedef std::vector<response_t> options_t;
- bool loadSkeleton(const options_t& options, const LLUUID& owner_id);
- bool loadMeat(const options_t& options, const LLUUID& owner_id);
+ bool loadSkeleton(const LLSD& options, const LLUUID& owner_id);
+ bool loadMeat(const LLSD& options, const LLUUID& owner_id);
// This is a brute force method to rebuild the entire parent-child
// relations.
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
new file mode 100644
index 0000000000..8bf769a132
--- /dev/null
+++ b/indra/newview/lllogininstance.cpp
@@ -0,0 +1,471 @@
+/**
+ * @file lllogininstance.cpp
+ * @brief Viewer's host for a login connection.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "lllogininstance.h"
+
+// llcommon
+#include "llevents.h"
+#include "llmd5.h"
+#include "stringize.h"
+
+// llmessage (!)
+#include "llfiltersd2xmlrpc.h" // for xml_escape_string()
+
+// login
+#include "lllogin.h"
+
+// newview
+#include "llviewernetwork.h"
+#include "llviewercontrol.h"
+#include "llurlsimstring.h"
+#include "llfloaterreg.h"
+#include "llnotifications.h"
+#include "llwindow.h"
+#if LL_LINUX || LL_SOLARIS
+#include "lltrans.h"
+#endif
+
+static const char * const TOS_REPLY_PUMP = "lllogininstance_tos_callback";
+static const char * const TOS_LISTENER_NAME = "lllogininstance_tos";
+
+std::string construct_start_string();
+
+LLLoginInstance::LLLoginInstance() :
+ mLoginModule(new LLLogin()),
+ mNotifications(NULL),
+ mLoginState("offline"),
+ mUserInteraction(true),
+ mSkipOptionalUpdate(false),
+ mAttemptComplete(false),
+ mTransferRate(0.0f)
+{
+ mLoginModule->getEventPump().listen("lllogininstance",
+ boost::bind(&LLLoginInstance::handleLoginEvent, this, _1));
+}
+
+LLLoginInstance::~LLLoginInstance()
+{
+}
+
+void LLLoginInstance::connect(const LLSD& credentials)
+{
+ std::vector<std::string> uris;
+ LLViewerLogin::getInstance()->getLoginURIs(uris);
+ connect(uris.front(), credentials);
+}
+
+void LLLoginInstance::connect(const std::string& uri, const LLSD& credentials)
+{
+ mAttemptComplete = false; // Reset attempt complete at this point!
+ constructAuthParams(credentials);
+ mLoginModule->connect(uri, mRequestData);
+}
+
+void LLLoginInstance::reconnect()
+{
+ // Sort of like connect, only using the pre-existing
+ // request params.
+ std::vector<std::string> uris;
+ LLViewerLogin::getInstance()->getLoginURIs(uris);
+ mLoginModule->connect(uris.front(), mRequestData);
+}
+
+void LLLoginInstance::disconnect()
+{
+ mAttemptComplete = false; // Reset attempt complete at this point!
+ mRequestData.clear();
+ mLoginModule->disconnect();
+}
+
+LLSD LLLoginInstance::getResponse()
+{
+ return mResponseData;
+}
+
+void LLLoginInstance::constructAuthParams(const LLSD& credentials)
+{
+ // Set up auth request options.
+//#define LL_MINIMIAL_REQUESTED_OPTIONS
+ LLSD requested_options;
+ // *Note: this is where gUserAuth used to be created.
+ requested_options.append("inventory-root");
+ requested_options.append("inventory-skeleton");
+ //requested_options.append("inventory-meat");
+ //requested_options.append("inventory-skel-targets");
+#if (!defined LL_MINIMIAL_REQUESTED_OPTIONS)
+ if(FALSE == gSavedSettings.getBOOL("NoInventoryLibrary"))
+ {
+ requested_options.append("inventory-lib-root");
+ requested_options.append("inventory-lib-owner");
+ requested_options.append("inventory-skel-lib");
+ // requested_options.append("inventory-meat-lib");
+ }
+
+ requested_options.append("initial-outfit");
+ requested_options.append("gestures");
+ requested_options.append("event_categories");
+ requested_options.append("event_notifications");
+ requested_options.append("classified_categories");
+ requested_options.append("adult_compliant");
+ //requested_options.append("inventory-targets");
+ requested_options.append("buddy-list");
+ requested_options.append("ui-config");
+#endif
+ requested_options.append("tutorial_setting");
+ requested_options.append("login-flags");
+ requested_options.append("global-textures");
+ if(gSavedSettings.getBOOL("ConnectAsGod"))
+ {
+ gSavedSettings.setBOOL("UseDebugMenus", TRUE);
+ requested_options.append("god-connect");
+ }
+
+ char hashed_mac_string[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */
+ LLMD5 hashed_mac;
+ hashed_mac.update( gMACAddress, MAC_ADDRESS_BYTES );
+ hashed_mac.finalize();
+ hashed_mac.hex_digest(hashed_mac_string);
+
+ // prepend "$1$" to the password to indicate its the md5'd version.
+ std::string dpasswd("$1$");
+ dpasswd.append(credentials["passwd"].asString());
+
+ // (re)initialize the request params with creds.
+ LLSD request_params(credentials);
+ request_params["passwd"] = dpasswd;
+ request_params["start"] = construct_start_string();
+ request_params["skipoptional"] = mSkipOptionalUpdate;
+ request_params["agree_to_tos"] = false; // Always false here. Set true in
+ request_params["read_critical"] = false; // handleTOSResponse
+ request_params["last_exec_event"] = mLastExecEvent;
+ request_params["mac"] = hashed_mac_string;
+ request_params["version"] = gCurrentVersion; // Includes channel name
+ request_params["channel"] = gSavedSettings.getString("VersionChannelName");
+ request_params["id0"] = mSerialNumber;
+
+ mRequestData.clear();
+ mRequestData["method"] = "login_to_simulator";
+ mRequestData["params"] = request_params;
+ mRequestData["options"] = requested_options;
+}
+
+bool LLLoginInstance::handleLoginEvent(const LLSD& event)
+{
+ std::cout << "LoginListener called!: \n";
+ std::cout << event << "\n";
+
+ if(!(event.has("state") && event.has("progress")))
+ {
+ llerrs << "Unknown message from LLLogin!" << llendl;
+ }
+
+ mLoginState = event["state"].asString();
+ mResponseData = event["data"];
+
+ if(event.has("transfer_rate"))
+ {
+ mTransferRate = event["transfer_rate"].asReal();
+ }
+
+ if(mLoginState == "offline")
+ {
+ handleLoginFailure(event);
+ }
+ else if(mLoginState == "online")
+ {
+ handleLoginSuccess(event);
+ }
+
+ return false;
+}
+
+bool LLLoginInstance::handleLoginFailure(const LLSD& event)
+{
+ // Login has failed.
+ // Figure out why and respond...
+ LLSD response = event["data"];
+ std::string reason_response = response["reason"].asString();
+ std::string message_response = response["message"].asString();
+ if(mUserInteraction)
+ {
+ // For the cases of critical message or TOS agreement,
+ // start the TOS dialog. The dialog response will be handled
+ // by the LLLoginInstance::handleTOSResponse() callback.
+ // The callback intiates the login attempt next step, either
+ // to reconnect or to end the attempt in failure.
+ if(reason_response == "tos")
+ {
+ LLSD data(LLSD::emptyMap());
+ data["message"] = message_response;
+ data["reply_pump"] = TOS_REPLY_PUMP;
+ LLFloaterReg::showInstance("message_tos", data);
+ LLEventPumps::instance().obtain(TOS_REPLY_PUMP)
+ .listen(TOS_LISTENER_NAME,
+ boost::bind(&LLLoginInstance::handleTOSResponse,
+ this, _1, "agree_to_tos"));
+ }
+ else if(reason_response == "critical")
+ {
+ LLSD data(LLSD::emptyMap());
+ data["message"] = message_response;
+ data["reply_pump"] = TOS_REPLY_PUMP;
+ LLFloaterReg::showInstance("message_critical", data);
+ LLEventPumps::instance().obtain(TOS_REPLY_PUMP)
+ .listen(TOS_LISTENER_NAME,
+ boost::bind(&LLLoginInstance::handleTOSResponse,
+ this, _1, "read_critical"));
+ }
+ else if(reason_response == "update" || gSavedSettings.getBOOL("ForceMandatoryUpdate"))
+ {
+ gSavedSettings.setBOOL("ForceMandatoryUpdate", FALSE);
+ updateApp(true, message_response);
+ }
+ else if(reason_response == "optional")
+ {
+ updateApp(false, message_response);
+ }
+ else
+ {
+ attemptComplete();
+ }
+ }
+ else // no user interaction
+ {
+ attemptComplete();
+ }
+
+ return false;
+}
+
+bool LLLoginInstance::handleLoginSuccess(const LLSD& event)
+{
+ if(gSavedSettings.getBOOL("ForceMandatoryUpdate"))
+ {
+ LLSD response = event["data"];
+ std::string message_response = response["message"].asString();
+
+ // Testing update...
+ gSavedSettings.setBOOL("ForceMandatoryUpdate", FALSE);
+
+ // Don't confuse startup by leaving login "online".
+ mLoginModule->disconnect();
+ updateApp(true, message_response);
+ }
+ else
+ {
+ attemptComplete();
+ }
+ return false;
+}
+
+bool LLLoginInstance::handleTOSResponse(bool accepted, const std::string& key)
+{
+ if(accepted)
+ {
+ // Set the request data to true and retry login.
+ mRequestData["params"][key] = true;
+ reconnect();
+ }
+ else
+ {
+ attemptComplete();
+ }
+
+ LLEventPumps::instance().obtain(TOS_REPLY_PUMP).stopListening(TOS_LISTENER_NAME);
+ return true;
+}
+
+
+void LLLoginInstance::updateApp(bool mandatory, const std::string& auth_msg)
+{
+ // store off config state, as we might quit soon
+ gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);
+ LLUIColorTable::instance().saveUserSettings();
+
+ std::ostringstream message;
+ std::string msg;
+ if (!auth_msg.empty())
+ {
+ msg = "(" + auth_msg + ") \n";
+ }
+
+ LLSD args;
+ args["MESSAGE"] = msg;
+
+ LLSD payload;
+ payload["mandatory"] = mandatory;
+
+/*
+ We're constructing one of the following 6 strings here:
+ "DownloadWindowsMandatory"
+ "DownloadWindowsReleaseForDownload"
+ "DownloadWindows"
+ "DownloadMacMandatory"
+ "DownloadMacReleaseForDownload"
+ "DownloadMac"
+
+ I've called them out explicitly in this comment so that they can be grepped for.
+
+ Also, we assume that if we're not Windows we're Mac. If we ever intend to support
+ Linux with autoupdate, this should be an explicit #elif LL_DARWIN, but
+ we'd rather deliver the wrong message than no message, so until Linux is supported
+ we'll leave it alone.
+ */
+ std::string notification_name = "Download";
+
+#if LL_WINDOWS
+ notification_name += "Windows";
+#elif LL_DARWIN
+ notification_name += "Mac";
+#else
+ notification_name += "Linux";
+#endif
+
+ if (mandatory)
+ {
+ notification_name += "Mandatory";
+ }
+ else
+ {
+#if LL_RELEASE_FOR_DOWNLOAD
+ notification_name += "ReleaseForDownload";
+#endif
+ }
+
+ if(mNotifications)
+ {
+ mNotifications->add(notification_name, args, payload,
+ boost::bind(&LLLoginInstance::updateDialogCallback, this, _1, _2));
+ }
+
+ /* *NOTE:Mani Experiment with Event API interface.
+ if(!mUpdateAppResponse)
+ {
+ bool make_unique = true;
+ mUpdateAppResponse.reset(new LLEventStream("logininstance_updateapp", make_unique));
+ mUpdateAppResponse->listen("diaupdateDialogCallback",
+ boost::bind(&LLLoginInstance::updateDialogCallback,
+ this, _1
+ )
+ );
+ }
+
+ LLSD event;
+ event["op"] = "requestAdd";
+ event["name"] = notification_name;
+ event["substitutions"] = args;
+ event["payload"] = payload;
+ event["reply"] = mUpdateAppResponse->getName();
+
+ LLEventPumps::getInstance()->obtain("LLNotifications").post(event);
+ */
+}
+
+bool LLLoginInstance::updateDialogCallback(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotification::getSelectedOption(notification, response);
+ std::string update_exe_path;
+ bool mandatory = notification["payload"]["mandatory"].asBoolean();
+
+#if !LL_RELEASE_FOR_DOWNLOAD
+ if (option == 2)
+ {
+ // This condition attempts to skip the
+ // update if using a dev build.
+ // The relog probably won't work if the
+ // update is mandatory. :)
+
+ // *REMOVE:Mani - Saving for reference...
+ //LLStartUp::setStartupState( STATE_LOGIN_AUTH_INIT );
+ mSkipOptionalUpdate = true;
+ reconnect();
+ return false;
+ }
+#endif
+
+ if (option == 1)
+ {
+ // ...user doesn't want to do it
+ if (mandatory)
+ {
+ // Mandatory update, user chose to not to update...
+ // The login attemp is complete, startup should
+ // quit when detecting this.
+ attemptComplete();
+
+ // *REMOVE:Mani - Saving for reference...
+ //LLAppViewer::instance()->forceQuit();
+ // // Bump them back to the login screen.
+ // //reset_login();
+ }
+ else
+ {
+ // Optional update, user chose to skip
+ mSkipOptionalUpdate = true;
+ reconnect();
+ }
+ return false;
+ }
+
+ if(mUpdaterLauncher)
+ {
+ mUpdaterLauncher();
+ }
+
+ attemptComplete();
+
+ return false;
+}
+
+std::string construct_start_string()
+{
+ std::string start;
+ if (LLURLSimString::parse())
+ {
+ // a startup URL was specified
+ std::string unescaped_start =
+ STRINGIZE( "uri:"
+ << LLURLSimString::sInstance.mSimName << "&"
+ << LLURLSimString::sInstance.mX << "&"
+ << LLURLSimString::sInstance.mY << "&"
+ << LLURLSimString::sInstance.mZ);
+ start = xml_escape_string(unescaped_start);
+ }
+ else
+ {
+ start = gSavedSettings.getString("LoginLocation");
+ }
+ return start;
+}
+
diff --git a/indra/newview/lllogininstance.h b/indra/newview/lllogininstance.h
new file mode 100644
index 0000000000..6a2ccf919e
--- /dev/null
+++ b/indra/newview/lllogininstance.h
@@ -0,0 +1,111 @@
+/**
+ * @file lllogininstance.h
+ * @brief A host for the viewer's login connection.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ *
+ * Copyright (c) 2009, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at
+ * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLLOGININSTANCE_H
+#define LL_LLLOGININSTANCE_H
+
+#include <boost/scoped_ptr.hpp>
+#include <boost/function.hpp>
+class LLLogin;
+class LLEventStream;
+class LLNotificationsInterface;
+
+// This class hosts the login module and is used to
+// negotiate user authentication attempts.
+class LLLoginInstance : public LLSingleton<LLLoginInstance>
+{
+public:
+ LLLoginInstance();
+ ~LLLoginInstance();
+
+ void connect(const LLSD& credential); // Connect to the current grid choice.
+ void connect(const std::string& uri, const LLSD& credential); // Connect to the given uri.
+ void reconnect(); // reconnect using the current credentials.
+ void disconnect();
+
+ bool authFailure() { return mAttemptComplete && mLoginState == "offline"; }
+ bool authSuccess() { return mAttemptComplete && mLoginState == "online"; }
+
+ const std::string& getLoginState() { return mLoginState; }
+ LLSD getResponse(const std::string& key) { return getResponse()[key]; }
+ LLSD getResponse();
+
+ // Only valid when authSuccess == true.
+ const F64 getLastTransferRateBPS() { return mTransferRate; }
+
+ // Set whether this class will drive user interaction.
+ // If not, login failures like 'need tos agreement' will
+ // end the login attempt.
+ void setUserInteraction(bool state) { mUserInteraction = state; }
+ bool getUserInteraction() { return mUserInteraction; }
+
+ // Whether to tell login to skip optional update request.
+ // False by default.
+ void setSkipOptionalUpdate(bool state) { mSkipOptionalUpdate = state; }
+ void setSerialNumber(const std::string& sn) { mSerialNumber = sn; }
+ void setLastExecEvent(int lee) { mLastExecEvent = lee; }
+
+ void setNotificationsInterface(LLNotificationsInterface* ni) { mNotifications = ni; }
+
+ typedef boost::function<void()> UpdaterLauncherCallback;
+ void setUpdaterLauncher(const UpdaterLauncherCallback& ulc) { mUpdaterLauncher = ulc; }
+
+private:
+ void constructAuthParams(const LLSD& credentials);
+ void updateApp(bool mandatory, const std::string& message);
+ bool updateDialogCallback(const LLSD& notification, const LLSD& response);
+
+ bool handleLoginEvent(const LLSD& event);
+ bool handleLoginFailure(const LLSD& event);
+ bool handleLoginSuccess(const LLSD& event);
+
+ bool handleTOSResponse(bool v, const std::string& key);
+
+ void attemptComplete() { mAttemptComplete = true; } // In the future an event?
+
+ boost::scoped_ptr<LLLogin> mLoginModule;
+ LLNotificationsInterface* mNotifications;
+
+ std::string mLoginState;
+ LLSD mRequestData;
+ LLSD mResponseData;
+ bool mUserInteraction;
+ bool mSkipOptionalUpdate;
+ bool mAttemptComplete;
+ F64 mTransferRate;
+ std::string mSerialNumber;
+ int mLastExecEvent;
+ UpdaterLauncherCallback mUpdaterLauncher;
+ boost::scoped_ptr<LLEventStream> mUpdateAppResponse;
+};
+
+#endif
diff --git a/indra/newview/llmenucommands.cpp b/indra/newview/llmenucommands.cpp
index 1666ec1336..ba5a382f9a 100644
--- a/indra/newview/llmenucommands.cpp
+++ b/indra/newview/llmenucommands.cpp
@@ -67,7 +67,6 @@
#include "llworldmap.h"
#include "llfocusmgr.h"
#include "llnearbychatbar.h"
-
void handle_pay_by_id(const LLUUID& agent_id)
{
const BOOL is_group = FALSE;
diff --git a/indra/newview/llpanelplace.cpp b/indra/newview/llpanelplace.cpp
index c6840721a3..61e18195b8 100644
--- a/indra/newview/llpanelplace.cpp
+++ b/indra/newview/llpanelplace.cpp
@@ -58,6 +58,7 @@
//#include "llviewermenu.h" // create_landmark()
#include "llweb.h"
#include "llsdutil.h"
+#include "llsdutil_math.h"
LLPanelPlace::LLPanelPlace()
: LLPanel(),
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index 7a19b8877e..793c25455d 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -61,6 +61,7 @@
#include "llviewerregion.h"
#include "llviewertexteditor.h"
#include "llworldmap.h"
+#include "llsdutil_math.h"
static LLRegisterPanelClassWrapper<LLPanelPlaceInfo> t_place_info("panel_place_info");
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 44e76a0bc1..1fe7a75be7 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -56,7 +56,6 @@
#include "llcachename.h"
#include "lldir.h"
#include "llerrorcontrol.h"
-#include "llfiltersd2xmlrpc.h"
#include "llfloaterreg.h"
#include "llfocusmgr.h"
#include "llhttpsender.h"
@@ -66,10 +65,11 @@
#include "llmemorystream.h"
#include "llmessageconfig.h"
#include "llmoveview.h"
+#include "llteleporthistory.h"
#include "llregionhandle.h"
#include "llsd.h"
#include "llsdserialize.h"
-#include "llsdutil.h"
+#include "llsdutil_math.h"
#include "llsecondlifeurls.h"
#include "llstring.h"
#include "lluserrelations.h"
@@ -102,7 +102,6 @@
#include "llfloaterland.h"
#include "llfloaterpreference.h"
#include "llfloatertopobjects.h"
-#include "llfloatertos.h"
#include "llfloaterworldmap.h"
#include "llgesturemgr.h"
#include "llgroupmgr.h"
@@ -115,6 +114,7 @@
#include "llfriendcard.h"
#include "llkeyboard.h"
#include "llloginhandler.h" // gLoginHandler, SLURL support
+#include "lllogininstance.h" // Host the login module.
#include "llpanellogin.h"
#include "llmutelist.h"
#include "llnotify.h"
@@ -134,7 +134,6 @@
#include "llsecondlifeurls.h"
#include "llselectmgr.h"
#include "llsky.h"
-#include "llsrv.h"
#include "llstatview.h"
#include "lltrans.h"
#include "llstatusbar.h" // sendMoneyBalanceRequest(), owns L$ balance
@@ -147,7 +146,6 @@
#include "llurlsimstring.h"
#include "llurlhistory.h"
#include "llurlwhitelist.h"
-#include "lluserauth.h"
#include "llvieweraudio.h"
#include "llviewerassetstorage.h"
#include "llviewercamera.h"
@@ -190,6 +188,9 @@
#include "llinventorybridge.h"
#include "llappearancemgr.h"
+#include "lllogin.h"
+#include "llevents.h"
+
#if LL_WINDOWS
#include "llwindebug.h"
#include "lldxhardware.h"
@@ -199,12 +200,12 @@
// exported globals
//
bool gAgentMovementCompleted = false;
-std::string gInitialOutfit;
-std::string gInitialOutfitGender;
std::string SCREEN_HOME_FILENAME = "screen_home.bmp";
std::string SCREEN_LAST_FILENAME = "screen_last.bmp";
+LLPointer<LLViewerTexture> gStartTexture;
+
//
// Imported globals
//
@@ -214,12 +215,6 @@ extern S32 gStartImageHeight;
//
// local globals
//
-
-LLPointer<LLViewerTexture> gStartTexture;
-
-static LLHost gAgentSimHost;
-static BOOL gSkipOptionalUpdate = FALSE;
-
static bool gGotUseCircuitCodeAck = false;
static std::string sInitialOutfit;
static std::string sInitialOutfitGender; // "male" or "female"
@@ -228,6 +223,18 @@ static bool gUseCircuitCallbackCalled = false;
EStartupState LLStartUp::gStartupState = STATE_FIRST;
+// *NOTE:Mani - to reconcile with giab changes...
+static std::string gFirstname;
+static std::string gLastname;
+static std::string gPassword;
+
+static U64 gFirstSimHandle = 0;
+static LLHost gFirstSim;
+static std::string gFirstSimSeedCap;
+static LLVector3 gAgentStartLookAt(1.0f, 0.f, 0.f);
+static std::string gAgentStartLocation = "safe";
+
+static LLEventStream sStartupStateWatcher("StartupState");
//
// local function declaration
@@ -240,8 +247,6 @@ void show_first_run_dialog();
bool first_run_dialog_callback(const LLSD& notification, const LLSD& response);
void set_startup_status(const F32 frac, const std::string& string, const std::string& msg);
bool login_alert_status(const LLSD& notification, const LLSD& response);
-void update_app(BOOL mandatory, const std::string& message);
-bool update_dialog_callback(const LLSD& notification, const LLSD& response);
void login_packet_failed(void**, S32 result);
void use_circuit_callback(void**, S32 result);
void register_viewer_callbacks(LLMessageSystem* msg);
@@ -251,6 +256,8 @@ void init_start_screen(S32 location_id);
void release_start_screen();
void reset_login();
void apply_udp_blacklist(const std::string& csv);
+bool process_login_success_response();
+void transition_back_to_login_panel(const std::string& emsg);
void callback_cache_name(const LLUUID& id, const std::string& firstname, const std::string& lastname, BOOL is_group)
{
@@ -310,9 +317,6 @@ void update_texture_fetch()
gTextureList.updateImages(0.10f);
}
-static std::vector<std::string> sAuthUris;
-static S32 sAuthUriNum = -1;
-
//Copies landmarks from the "Library" to "My Favorites"
void populate_favorites_bar()
{
@@ -384,23 +388,11 @@ bool idle_startup()
// auth/transform loop will do.
static F32 progress = 0.10f;
- static std::string auth_method;
static std::string auth_desc;
static std::string auth_message;
- static std::string firstname;
- static std::string lastname;
- static LLUUID web_login_key;
- static std::string password;
- static std::vector<const char*> requested_options;
-
- static U64 first_sim_handle = 0;
- static LLHost first_sim;
- static std::string first_sim_seed_cap;
static LLVector3 initial_sun_direction(1.f, 0.f, 0.f);
static LLVector3 agent_start_position_region(10.f, 10.f, 10.f); // default for when no space server
- static LLVector3 agent_start_look_at(1.0f, 0.f, 0.f);
- static std::string agent_start_location = "safe";
// last location by default
static S32 agent_location_id = START_LOCATION_ID_LAST;
@@ -408,7 +400,7 @@ bool idle_startup()
static bool show_connect_box = true;
- static bool stipend_since_login = false;
+ //static bool stipend_since_login = false;
// HACK: These are things from the main loop that usually aren't done
// until initialization is complete, but need to be done here for things
@@ -429,12 +421,7 @@ bool idle_startup()
LLStringUtil::setLocale (LLTrans::getString(system));
- if (gNoRender)
- {
- // HACK, skip optional updates if you're running drones
- gSkipOptionalUpdate = TRUE;
- }
- else
+ if (!gNoRender)
{
// Update images?
gTextureList.updateImages(0.01f);
@@ -750,24 +737,23 @@ bool idle_startup()
|| !gLoginHandler.getWebLoginKey().isNull() )
{
// We have at least some login information on a SLURL
- firstname = gLoginHandler.getFirstName();
- lastname = gLoginHandler.getLastName();
- web_login_key = gLoginHandler.getWebLoginKey();
+ gFirstname = gLoginHandler.getFirstName();
+ gLastname = gLoginHandler.getLastName();
// Show the login screen if we don't have everything
show_connect_box =
- firstname.empty() || lastname.empty() || web_login_key.isNull();
+ gFirstname.empty() || gLastname.empty();
}
else if(gSavedSettings.getLLSD("UserLoginInfo").size() == 3)
{
LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo");
- firstname = cmd_line_login[0].asString();
- lastname = cmd_line_login[1].asString();
+ gFirstname = cmd_line_login[0].asString();
+ gLastname = cmd_line_login[1].asString();
LLMD5 pass((unsigned char*)cmd_line_login[2].asString().c_str());
char md5pass[33]; /* Flawfinder: ignore */
pass.hex_digest(md5pass);
- password = md5pass;
+ gPassword = md5pass;
#ifdef USE_VIEWER_AUTH
show_connect_box = true;
@@ -778,9 +764,9 @@ bool idle_startup()
}
else if (gSavedSettings.getBOOL("AutoLogin"))
{
- firstname = gSavedSettings.getString("FirstName");
- lastname = gSavedSettings.getString("LastName");
- password = LLStartUp::loadPasswordFromDisk();
+ gFirstname = gSavedSettings.getString("FirstName");
+ gLastname = gSavedSettings.getString("LastName");
+ gPassword = LLStartUp::loadPasswordFromDisk();
gSavedSettings.setBOOL("RememberPassword", TRUE);
#ifdef USE_VIEWER_AUTH
@@ -793,9 +779,9 @@ bool idle_startup()
{
// if not automatically logging in, display login dialog
// a valid grid is selected
- firstname = gSavedSettings.getString("FirstName");
- lastname = gSavedSettings.getString("LastName");
- password = LLStartUp::loadPasswordFromDisk();
+ gFirstname = gSavedSettings.getString("FirstName");
+ gLastname = gSavedSettings.getString("LastName");
+ gPassword = LLStartUp::loadPasswordFromDisk();
show_connect_box = true;
}
@@ -831,7 +817,7 @@ bool idle_startup()
// Load all the name information out of the login view
// NOTE: Hits "Attempted getFields with no login view shown" warning, since we don't
// show the login view until login_show() is called below.
- // LLPanelLogin::getFields(firstname, lastname, password);
+ // LLPanelLogin::getFields(gFirstname, gLastname, gPassword);
if (gNoRender)
{
@@ -843,7 +829,7 @@ bool idle_startup()
// Show the login dialog
login_show();
// connect dialog is already shown, so fill in the names
- LLPanelLogin::setFields( firstname, lastname, password);
+ LLPanelLogin::setFields( gFirstname, gLastname, gPassword);
LLPanelLogin::giveFocus();
@@ -907,34 +893,34 @@ bool idle_startup()
//reset the values that could have come in from a slurl
if (!gLoginHandler.getWebLoginKey().isNull())
{
- firstname = gLoginHandler.getFirstName();
- lastname = gLoginHandler.getLastName();
- web_login_key = gLoginHandler.getWebLoginKey();
+ gFirstname = gLoginHandler.getFirstName();
+ gLastname = gLoginHandler.getLastName();
+// gWebLoginKey = gLoginHandler.getWebLoginKey();
}
if (show_connect_box)
{
// TODO if not use viewer auth
// Load all the name information out of the login view
- LLPanelLogin::getFields(&firstname, &lastname, &password);
+ LLPanelLogin::getFields(&gFirstname, &gLastname, &gPassword);
// end TODO
// HACK: Try to make not jump on login
gKeyboard->resetKeys();
}
- if (!firstname.empty() && !lastname.empty())
+ if (!gFirstname.empty() && !gLastname.empty())
{
- gSavedSettings.setString("FirstName", firstname);
- gSavedSettings.setString("LastName", lastname);
+ gSavedSettings.setString("FirstName", gFirstname);
+ gSavedSettings.setString("LastName", gLastname);
- LL_INFOS("AppInit") << "Attempting login as: " << firstname << " " << lastname << LL_ENDL;
- gDebugInfo["LoginName"] = firstname + " " + lastname;
+ LL_INFOS("AppInit") << "Attempting login as: " << gFirstname << " " << gLastname << LL_ENDL;
+ gDebugInfo["LoginName"] = gFirstname + " " + gLastname;
}
// create necessary directories
// *FIX: these mkdir's should error check
- gDirUtilp->setLindenUserDir(firstname, lastname);
+ gDirUtilp->setLindenUserDir(gFirstname, gLastname);
LLFile::mkdir(gDirUtilp->getLindenUserDir());
// Set PerAccountSettingsFile to the default value.
@@ -968,7 +954,7 @@ bool idle_startup()
gDirUtilp->setChatLogsDir(gSavedPerAccountSettings.getString("InstantMessageLogPath"));
}
- gDirUtilp->setPerAccountChatLogsDir(firstname, lastname);
+ gDirUtilp->setPerAccountChatLogsDir(gFirstname, gLastname);
LLFile::mkdir(gDirUtilp->getChatLogsDir());
LLFile::mkdir(gDirUtilp->getPerAccountChatLogsDir());
@@ -989,13 +975,6 @@ bool idle_startup()
if (show_connect_box)
{
- if ( LLPanelLogin::isGridComboDirty() )
- {
- // User picked a grid from the popup, so clear the
- // stored uris and they will be reacquired from the grid choice.
- sAuthUris.clear();
- }
-
std::string location;
LLPanelLogin::getLocation( location );
LLURLSimString::setString( location );
@@ -1024,7 +1003,7 @@ bool idle_startup()
agent_location_id = START_LOCATION_ID_URL;
// doesn't really matter what location_which is, since
- // agent_start_look_at will be overwritten when the
+ // gAgentStartLookAt will be overwritten when the
// UserLoginLocationReply arrives
location_which = START_LOCATION_ID_LAST;
}
@@ -1057,605 +1036,138 @@ bool idle_startup()
gVFS->pokeFiles();
- // skipping over STATE_UPDATE_CHECK because that just waits for input
LLStartUp::setStartupState( STATE_LOGIN_AUTH_INIT );
return FALSE;
}
- if (STATE_UPDATE_CHECK == LLStartUp::getStartupState())
- {
- // wait for user to give input via dialog box
- return FALSE;
- }
-
if(STATE_LOGIN_AUTH_INIT == LLStartUp::getStartupState())
{
-//#define LL_MINIMIAL_REQUESTED_OPTIONS
gDebugInfo["GridName"] = LLViewerLogin::getInstance()->getGridLabel();
- // *Note: this is where gUserAuth used to be created.
- requested_options.clear();
- requested_options.push_back("inventory-root");
- requested_options.push_back("inventory-skeleton");
- //requested_options.push_back("inventory-meat");
- //requested_options.push_back("inventory-skel-targets");
-#if (!defined LL_MINIMIAL_REQUESTED_OPTIONS)
- if(FALSE == gSavedSettings.getBOOL("NoInventoryLibrary"))
- {
- requested_options.push_back("inventory-lib-root");
- requested_options.push_back("inventory-lib-owner");
- requested_options.push_back("inventory-skel-lib");
- // requested_options.push_back("inventory-meat-lib");
- }
-
- requested_options.push_back("initial-outfit");
- requested_options.push_back("gestures");
- requested_options.push_back("event_categories");
- requested_options.push_back("event_notifications");
- requested_options.push_back("classified_categories");
- requested_options.push_back("adult_compliant");
- //requested_options.push_back("inventory-targets");
- requested_options.push_back("buddy-list");
- requested_options.push_back("ui-config");
-#endif
- requested_options.push_back("tutorial_setting");
- requested_options.push_back("login-flags");
- requested_options.push_back("global-textures");
- if(gSavedSettings.getBOOL("ConnectAsGod"))
- {
- gSavedSettings.setBOOL("UseDebugMenus", TRUE);
- requested_options.push_back("god-connect");
- }
- std::vector<std::string> uris;
- LLViewerLogin::getInstance()->getLoginURIs(uris);
- std::vector<std::string>::const_iterator iter, end;
- for (iter = uris.begin(), end = uris.end(); iter != end; ++iter)
- {
- std::vector<std::string> rewritten;
- rewritten = LLSRV::rewriteURI(*iter);
- sAuthUris.insert(sAuthUris.end(),
- rewritten.begin(), rewritten.end());
- }
- sAuthUriNum = 0;
- auth_method = "login_to_simulator";
-
+ // Update progress status and the display loop.
auth_desc = LLTrans::getString("LoginInProgress");
- LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE );
- }
-
- if (STATE_LOGIN_AUTHENTICATE == LLStartUp::getStartupState())
- {
- LL_DEBUGS("AppInit") << "STATE_LOGIN_AUTHENTICATE" << LL_ENDL;
set_startup_status(progress, auth_desc, auth_message);
progress += 0.02f;
display_startup();
-
- std::stringstream start;
- if (LLURLSimString::parse())
- {
- // a startup URL was specified
- std::stringstream unescaped_start;
- unescaped_start << "uri:"
- << LLURLSimString::sInstance.mSimName << "&"
- << LLURLSimString::sInstance.mX << "&"
- << LLURLSimString::sInstance.mY << "&"
- << LLURLSimString::sInstance.mZ;
- start << xml_escape_string(unescaped_start.str());
-
- }
- else
- {
- start << gSavedSettings.getString("LoginLocation");
- }
-
- char hashed_mac_string[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */
- LLMD5 hashed_mac;
- hashed_mac.update( gMACAddress, MAC_ADDRESS_BYTES );
- hashed_mac.finalize();
- hashed_mac.hex_digest(hashed_mac_string);
-
- // TODO if statement here to use web_login_key
- sAuthUriNum = llclamp(sAuthUriNum, 0, (S32)sAuthUris.size()-1);
- LLUserAuth::getInstance()->authenticate(
- sAuthUris[sAuthUriNum],
- auth_method,
- firstname,
- lastname,
- password, // web_login_key,
- start.str(),
- gSkipOptionalUpdate,
- gAcceptTOS,
- gAcceptCriticalMessage,
- gLastExecEvent,
- requested_options,
- hashed_mac_string,
- LLAppViewer::instance()->getSerialNumber());
-
- // reset globals
- gAcceptTOS = FALSE;
- gAcceptCriticalMessage = FALSE;
- LLStartUp::setStartupState( STATE_LOGIN_NO_DATA_YET );
- return FALSE;
- }
- if(STATE_LOGIN_NO_DATA_YET == LLStartUp::getStartupState())
- {
- LL_DEBUGS("AppInit") << "STATE_LOGIN_NO_DATA_YET" << LL_ENDL;
- // If we get here we have gotten past the potential stall
- // in curl, so take "may appear frozen" out of progress bar. JC
- auth_desc = LLTrans::getString("LoginInProgressNoFrozen");
- set_startup_status(progress, auth_desc, auth_message);
- // Process messages to keep from dropping circuit.
- LLMessageSystem* msg = gMessageSystem;
- while (msg->checkAllMessages(gFrameCount, gServicePump))
+ // Setting initial values...
+ LLLoginInstance* login = LLLoginInstance::getInstance();
+ login->setNotificationsInterface(LLNotifications::getInstance());
+ if(gNoRender)
{
+ // HACK, skip optional updates if you're running drones
+ login->setSkipOptionalUpdate(true);
}
- msg->processAcks();
- LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse();
- if(LLUserAuth::E_NO_RESPONSE_YET == error)
- {
- LL_DEBUGS("AppInit") << "waiting..." << LL_ENDL;
- return FALSE;
- }
- LLStartUp::setStartupState( STATE_LOGIN_DOWNLOADING );
- progress += 0.01f;
- set_startup_status(progress, auth_desc, auth_message);
- return FALSE;
- }
- if(STATE_LOGIN_DOWNLOADING == LLStartUp::getStartupState())
- {
- LL_DEBUGS("AppInit") << "STATE_LOGIN_DOWNLOADING" << LL_ENDL;
- // Process messages to keep from dropping circuit.
- LLMessageSystem* msg = gMessageSystem;
- while (msg->checkAllMessages(gFrameCount, gServicePump))
- {
- }
- msg->processAcks();
- LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse();
- if(LLUserAuth::E_DOWNLOADING == error)
- {
- LL_DEBUGS("AppInit") << "downloading..." << LL_ENDL;
- return FALSE;
- }
+ login->setUserInteraction(show_connect_box);
+ login->setSerialNumber(LLAppViewer::instance()->getSerialNumber());
+ login->setLastExecEvent(gLastExecEvent);
+ login->setUpdaterLauncher(boost::bind(&LLAppViewer::launchUpdater, LLAppViewer::instance()));
+
+ // This call to LLLoginInstance::connect() starts the
+ // authentication process.
+ LLSD credentials;
+ credentials["first"] = gFirstname;
+ credentials["last"] = gLastname;
+ credentials["passwd"] = gPassword;
+ login->connect(credentials);
+
LLStartUp::setStartupState( STATE_LOGIN_PROCESS_RESPONSE );
- progress += 0.01f;
- set_startup_status(progress, LLTrans::getString("LoginProcessingResponse"), auth_message);
return FALSE;
}
- if(STATE_LOGIN_PROCESS_RESPONSE == LLStartUp::getStartupState())
+ if(STATE_LOGIN_PROCESS_RESPONSE == LLStartUp::getStartupState())
{
- LL_DEBUGS("AppInit") << "STATE_LOGIN_PROCESS_RESPONSE" << LL_ENDL;
std::ostringstream emsg;
- bool quit = false;
- bool update = false;
- std::string login_response;
- std::string reason_response;
- std::string message_response;
- bool successful_login = false;
- LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse();
- // reset globals
- gAcceptTOS = FALSE;
- gAcceptCriticalMessage = FALSE;
- switch(error)
- {
- case LLUserAuth::E_OK:
- login_response = LLUserAuth::getInstance()->getResponse("login");
- if(login_response == "true")
- {
- // Yay, login!
- successful_login = true;
- }
- else if(login_response == "indeterminate")
+ emsg << "Login failed.\n";
+ if(LLLoginInstance::getInstance()->authFailure())
+ {
+ LL_INFOS("LLStartup") << "Login failed, LLLoginInstance::getResponse(): "
+ << LLLoginInstance::getInstance()->getResponse() << LL_ENDL;
+ // Still have error conditions that may need some
+ // sort of handling.
+ std::string reason_response = LLLoginInstance::getInstance()->getResponse("reason");
+ std::string message_response = LLLoginInstance::getInstance()->getResponse("message");
+
+ if(!message_response.empty())
{
- LL_INFOS("AppInit") << "Indeterminate login..." << LL_ENDL;
- sAuthUris = LLSRV::rewriteURI(LLUserAuth::getInstance()->getResponse("next_url"));
- sAuthUriNum = 0;
- auth_method = LLUserAuth::getInstance()->getResponse("next_method");
- auth_message = LLUserAuth::getInstance()->getResponse("message");
- if(auth_method.substr(0, 5) == "login")
+ // XUI: fix translation for strings returned during login
+ // We need a generic table for translations
+ std::string big_reason = LLAgent::sTeleportErrorMessages[ message_response ];
+ if ( big_reason.size() == 0 )
{
- auth_desc.assign(LLTrans::getString("LoginAuthenticating"));
+ emsg << message_response;
}
else
{
- auth_desc.assign(LLTrans::getString("LoginMaintenance"));
- }
- // ignoring the duration & options array for now.
- // Go back to authenticate.
- LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE );
- return FALSE;
- }
- else
- {
- emsg << "Login failed.\n";
- reason_response = LLUserAuth::getInstance()->getResponse("reason");
- message_response = LLUserAuth::getInstance()->getResponse("message");
-
- if (!message_response.empty())
- {
- // XUI: fix translation for strings returned during login
- // We need a generic table for translations
- std::string big_reason = LLAgent::sTeleportErrorMessages[ message_response ];
- if ( big_reason.size() == 0 )
- {
- emsg << message_response;
- }
- else
- {
- emsg << big_reason;
- }
- }
-
- if(reason_response == "tos")
- {
- if (show_connect_box)
- {
- LL_DEBUGS("AppInit") << "Need tos agreement" << LL_ENDL;
- LLStartUp::setStartupState( STATE_UPDATE_CHECK );
- LLFloaterReg::showInstance("message_tos", LLSD(message_response));
- // LLFloaterTOS deletes itself.
- return false;
- }
- else
- {
- quit = true;
- }
+ emsg << big_reason;
}
- if(reason_response == "critical")
- {
- if (show_connect_box)
- {
- LL_DEBUGS("AppInit") << "Need critical message" << LL_ENDL;
- LLStartUp::setStartupState( STATE_UPDATE_CHECK );
- LLFloaterReg::showInstance("message_critical", LLSD(message_response));
- // LLFloaterTOS deletes itself.
- return false;
- }
- else
- {
- quit = true;
- }
- }
- if(reason_response == "key")
- {
- // Couldn't login because user/password is wrong
- // Clear the password
- password = "";
- }
- if(reason_response == "update")
- {
- auth_message = LLUserAuth::getInstance()->getResponse("message");
- update = true;
- }
- if(reason_response == "optional")
- {
- LL_DEBUGS("AppInit") << "Login got optional update" << LL_ENDL;
- auth_message = LLUserAuth::getInstance()->getResponse("message");
- if (show_connect_box)
- {
- update_app(FALSE, auth_message);
- LLStartUp::setStartupState( STATE_UPDATE_CHECK );
- gSkipOptionalUpdate = TRUE;
- return false;
- }
- }
- }
- break;
- case LLUserAuth::E_COULDNT_RESOLVE_HOST:
- case LLUserAuth::E_SSL_PEER_CERTIFICATE:
- case LLUserAuth::E_UNHANDLED_ERROR:
- case LLUserAuth::E_SSL_CACERT:
- case LLUserAuth::E_SSL_CONNECT_ERROR:
- default:
- if (sAuthUriNum >= (int) sAuthUris.size() - 1)
- {
- emsg << "Unable to connect to " << LLAppViewer::instance()->getSecondLifeTitle() << ".\n";
- emsg << LLUserAuth::getInstance()->errorMessage();
- } else {
- sAuthUriNum++;
- std::ostringstream s;
- LLStringUtil::format_map_t args;
- args["[NUMBER]"] = llformat("%d", sAuthUriNum + 1);
- auth_desc = LLTrans::getString("LoginAttempt", args);
- LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE );
- return FALSE;
- }
- break;
- }
-
- if (update || gSavedSettings.getBOOL("ForceMandatoryUpdate"))
- {
- gSavedSettings.setBOOL("ForceMandatoryUpdate", FALSE);
- update_app(TRUE, auth_message);
- LLStartUp::setStartupState( STATE_UPDATE_CHECK );
- return false;
- }
-
- // Version update and we're not showing the dialog
- if(quit)
- {
- LLUserAuth::getInstance()->reset();
- LLAppViewer::instance()->forceQuit();
- return false;
- }
-
- if(successful_login)
- {
- std::string text;
- text = LLUserAuth::getInstance()->getResponse("udp_blacklist");
- if(!text.empty())
- {
- apply_udp_blacklist(text);
}
- // unpack login data needed by the application
- text = LLUserAuth::getInstance()->getResponse("agent_id");
- if(!text.empty()) gAgentID.set(text);
- gDebugInfo["AgentID"] = text;
-
- text = LLUserAuth::getInstance()->getResponse("session_id");
- if(!text.empty()) gAgentSessionID.set(text);
- gDebugInfo["SessionID"] = text;
-
- text = LLUserAuth::getInstance()->getResponse("secure_session_id");
- if(!text.empty()) gAgent.mSecureSessionID.set(text);
-
- text = LLUserAuth::getInstance()->getResponse("first_name");
- if(!text.empty())
+ if(reason_response == "key")
{
- // Remove quotes from string. Login.cgi sends these to force
- // names that look like numbers into strings.
- firstname.assign(text);
- LLStringUtil::replaceChar(firstname, '"', ' ');
- LLStringUtil::trim(firstname);
+ // Couldn't login because user/password is wrong
+ // Clear the password
+ gPassword = "";
}
- text = LLUserAuth::getInstance()->getResponse("last_name");
- if(!text.empty()) lastname.assign(text);
- gSavedSettings.setString("FirstName", firstname);
- gSavedSettings.setString("LastName", lastname);
- if (gSavedSettings.getBOOL("RememberPassword"))
+ if(reason_response == "update"
+ || reason_response == "optional")
{
- // Successful login means the password is valid, so save it.
- LLStartUp::savePasswordToDisk(password);
+ // In the case of a needed update, quit.
+ // Its either downloading or declined.
+ // If optional was skipped this case shouldn't
+ // be reached.
+ LLLoginInstance::getInstance()->disconnect();
+ LLAppViewer::instance()->forceQuit();
}
else
{
- // Don't leave password from previous session sitting around
- // during this login session.
- LLStartUp::deletePasswordFromDisk();
- }
-
- // this is their actual ability to access content
- text = LLUserAuth::getInstance()->getResponse("agent_access_max");
- if (!text.empty())
- {
- // agent_access can be 'A', 'M', and 'PG'.
- gAgent.setMaturity(text[0]);
- }
-
- // this is the value of their preference setting for that content
- // which will always be <= agent_access_max
- text = LLUserAuth::getInstance()->getResponse("agent_region_access");
- if (!text.empty())
- {
- int preferredMaturity = LLAgent::convertTextToMaturity(text[0]);
- gSavedSettings.setU32("PreferredMaturity", preferredMaturity);
- }
- // During the AO transition, this flag will be true. Then the flag will
- // go away. After the AO transition, this code and all the code that
- // uses it can be deleted.
- text = LLUserAuth::getInstance()->getResponse("ao_transition");
- if (!text.empty())
- {
- if (text == "1")
+ // Don't pop up a notification in the TOS case because
+ // LLFloaterTOS::onCancel() already scolded the user.
+ if (reason_response != "tos")
{
- gAgent.setAOTransition();
- }
- }
-
- text = LLUserAuth::getInstance()->getResponse("start_location");
- if(!text.empty()) agent_start_location.assign(text);
- text = LLUserAuth::getInstance()->getResponse("circuit_code");
- if(!text.empty())
- {
- gMessageSystem->mOurCircuitCode = strtoul(text.c_str(), NULL, 10);
- }
- std::string sim_ip_str = LLUserAuth::getInstance()->getResponse("sim_ip");
- std::string sim_port_str = LLUserAuth::getInstance()->getResponse("sim_port");
- if(!sim_ip_str.empty() && !sim_port_str.empty())
- {
- U32 sim_port = strtoul(sim_port_str.c_str(), NULL, 10);
- first_sim.set(sim_ip_str, sim_port);
- if (first_sim.isOk())
- {
- gMessageSystem->enableCircuit(first_sim, TRUE);
- }
- }
- std::string region_x_str = LLUserAuth::getInstance()->getResponse("region_x");
- std::string region_y_str = LLUserAuth::getInstance()->getResponse("region_y");
- if(!region_x_str.empty() && !region_y_str.empty())
- {
- U32 region_x = strtoul(region_x_str.c_str(), NULL, 10);
- U32 region_y = strtoul(region_y_str.c_str(), NULL, 10);
- first_sim_handle = to_region_handle(region_x, region_y);
- }
-
- const std::string look_at_str = LLUserAuth::getInstance()->getResponse("look_at");
- if (!look_at_str.empty())
- {
- size_t len = look_at_str.size();
- LLMemoryStream mstr((U8*)look_at_str.c_str(), len);
- LLSD sd = LLSDSerialize::fromNotation(mstr, len);
- agent_start_look_at = ll_vector3_from_sd(sd);
- }
-
- text = LLUserAuth::getInstance()->getResponse("seed_capability");
- if (!text.empty()) first_sim_seed_cap = text;
-
- text = LLUserAuth::getInstance()->getResponse("seconds_since_epoch");
- if(!text.empty())
- {
- U32 server_utc_time = strtoul(text.c_str(), NULL, 10);
- if(server_utc_time)
- {
- time_t now = time(NULL);
- gUTCOffset = (server_utc_time - now);
- }
- }
-
- std::string home_location = LLUserAuth::getInstance()->getResponse("home");
- if(!home_location.empty())
- {
- size_t len = home_location.size();
- LLMemoryStream mstr((U8*)home_location.c_str(), len);
- LLSD sd = LLSDSerialize::fromNotation(mstr, len);
- S32 region_x = sd["region_handle"][0].asInteger();
- S32 region_y = sd["region_handle"][1].asInteger();
- U64 region_handle = to_region_handle(region_x, region_y);
- LLVector3 position = ll_vector3_from_sd(sd["position"]);
- gAgent.setHomePosRegion(region_handle, position);
- }
-
- gAgent.mMOTD.assign(LLUserAuth::getInstance()->getResponse("message"));
- LLUserAuth::options_t options;
- if(LLUserAuth::getInstance()->getOptions("inventory-root", options))
- {
- LLUserAuth::response_t::iterator it;
- it = options[0].find("folder_id");
- if(it != options[0].end())
- {
- gInventory.setRootFolderID( LLUUID( (*it).second ) );
- }
- }
-
- options.clear();
- if(LLUserAuth::getInstance()->getOptions("login-flags", options))
- {
- LLUserAuth::response_t::iterator it;
- LLUserAuth::response_t::iterator no_flag = options[0].end();
- it = options[0].find("ever_logged_in");
- if(it != no_flag)
- {
- if((*it).second == "N") gAgent.setFirstLogin(TRUE);
- else gAgent.setFirstLogin(FALSE);
- }
- it = options[0].find("stipend_since_login");
- if(it != no_flag)
- {
- if((*it).second == "Y") stipend_since_login = true;
- }
- it = options[0].find("gendered");
- if(it != no_flag)
- {
- if((*it).second == "Y") gAgent.setGenderChosen(TRUE);
- }
- it = options[0].find("daylight_savings");
- if(it != no_flag)
- {
- if((*it).second == "Y") gPacificDaylightTime = TRUE;
- else gPacificDaylightTime = FALSE;
+ LLSD args;
+ args["ERROR_MESSAGE"] = emsg.str();
+ LL_INFOS("LLStartup") << "Notification: " << args << LL_ENDL;
+ LLNotifications::instance().add("ErrorMessage", args, LLSD(), login_alert_done);
}
//setup map of datetime strings to codes and slt & local time offset from utc
LLStringOps::setupDatetimeInfo (gPacificDaylightTime);
+ transition_back_to_login_panel(emsg.str());
+ show_connect_box = true;
}
- options.clear();
- if (LLUserAuth::getInstance()->getOptions("initial-outfit", options)
- && !options.empty())
- {
- LLUserAuth::response_t::iterator it;
- LLUserAuth::response_t::iterator it_end = options[0].end();
- it = options[0].find("folder_name");
- if(it != it_end)
- {
- // Initial outfit is a folder in your inventory,
- // must be an exact folder-name match.
- sInitialOutfit = (*it).second;
- }
- it = options[0].find("gender");
- if (it != it_end)
- {
- sInitialOutfitGender = (*it).second;
- }
- }
-
- options.clear();
- if(LLUserAuth::getInstance()->getOptions("global-textures", options))
- {
- // Extract sun and moon texture IDs. These are used
- // in the LLVOSky constructor, but I can't figure out
- // how to pass them in. JC
- LLUserAuth::response_t::iterator it;
- LLUserAuth::response_t::iterator no_texture = options[0].end();
- it = options[0].find("sun_texture_id");
- if(it != no_texture)
- {
- gSunTextureID.set((*it).second);
- }
- it = options[0].find("moon_texture_id");
- if(it != no_texture)
- {
- gMoonTextureID.set((*it).second);
- }
- it = options[0].find("cloud_texture_id");
- if(it != no_texture)
- {
- gCloudTextureID.set((*it).second);
- }
- }
-
-
- // JC: gesture loading done below, when we have an asset system
- // in place. Don't delete/clear user_credentials until then.
-
- if(gAgentID.notNull()
- && gAgentSessionID.notNull()
- && gMessageSystem->mOurCircuitCode
- && first_sim.isOk()
- && gInventory.getRootFolderID().notNull())
+ }
+ else if(LLLoginInstance::getInstance()->authSuccess())
+ {
+ if(process_login_success_response())
{
- LLStartUp::setStartupState( STATE_WORLD_INIT );
+ // Pass the user information to the voice chat server interface.
+ gVoiceClient->userAuthorized(gFirstname, gLastname, gAgentID);
+ LLStartUp::setStartupState( STATE_WORLD_INIT);
}
else
{
- if (gNoRender)
- {
- LL_WARNS("AppInit") << "Bad login - missing return values" << LL_ENDL;
- LL_WARNS("AppInit") << emsg << LL_ENDL;
- exit(0);
- }
- // Bounce back to the login screen.
LLSD args;
args["ERROR_MESSAGE"] = emsg.str();
+ LL_INFOS("LLStartup") << "Notification: " << args << LL_ENDL;
LLNotifications::instance().add("ErrorMessage", args, LLSD(), login_alert_done);
- reset_login();
- gSavedSettings.setBOOL("AutoLogin", FALSE);
+ transition_back_to_login_panel(emsg.str());
show_connect_box = true;
}
-
- // Pass the user information to the voice chat server interface.
- gVoiceClient->userAuthorized(firstname, lastname, gAgentID);
}
- else // if(successful_login)
+ else
{
- if (gNoRender)
- {
- LL_WARNS("AppInit") << "Failed to login!" << LL_ENDL;
- LL_WARNS("AppInit") << emsg << LL_ENDL;
- exit(0);
- }
- // Bounce back to the login screen.
- LLSD args;
- args["ERROR_MESSAGE"] = emsg.str();
- LLNotifications::instance().add("ErrorMessage", args, LLSD(), login_alert_done);
- reset_login();
- gSavedSettings.setBOOL("AutoLogin", FALSE);
- show_connect_box = true;
+ // Still waiting for response.
+ // *TODO:Mani - Actually check for login progress.
+ // If we get here we have gotten past the potential stall
+ // in curl, so take "may appear frozen" out of progress bar. JC
+ auth_desc = LLTrans::getString("LoginInProgressNoFrozen");
+ set_startup_status(progress, auth_desc, auth_message);
}
+
return FALSE;
}
@@ -1715,14 +1227,14 @@ bool idle_startup()
// This is necessary because creating objects before this is set will result in a
// bad mPositionAgent cache.
- gAgent.initOriginGlobal(from_region_handle(first_sim_handle));
+ gAgent.initOriginGlobal(from_region_handle(gFirstSimHandle));
- LLWorld::getInstance()->addRegion(first_sim_handle, first_sim);
+ LLWorld::getInstance()->addRegion(gFirstSimHandle, gFirstSim);
- LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(first_sim_handle);
+ LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(gFirstSimHandle);
LL_INFOS("AppInit") << "Adding initial simulator " << regionp->getOriginGlobal() << LL_ENDL;
- regionp->setSeedCapability(first_sim_seed_cap);
+ regionp->setSeedCapability(gFirstSimSeedCap);
LL_DEBUGS("AppInit") << "Waiting for seed grant ...." << LL_ENDL;
// Set agent's initial region to be the one we just created.
@@ -1861,7 +1373,7 @@ bool idle_startup()
// the coordinates handed to us to fit in the local region.
gAgent.setPositionAgent(agent_start_position_region);
- gAgent.resetAxes(agent_start_look_at);
+ gAgent.resetAxes(gAgentStartLookAt);
gAgent.stopCameraAnimation();
gAgent.resetCamera();
@@ -1900,18 +1412,18 @@ bool idle_startup()
LL_WARNS("AppInit") << "Attempting to connect to simulator with a zero circuit code!" << LL_ENDL;
}
- gUseCircuitCallbackCalled = FALSE;
+ gUseCircuitCallbackCalled = false;
- msg->enableCircuit(first_sim, TRUE);
+ msg->enableCircuit(gFirstSim, TRUE);
// now, use the circuit info to tell simulator about us!
- LL_INFOS("AppInit") << "viewer: UserLoginLocationReply() Enabling " << first_sim << " with code " << msg->mOurCircuitCode << LL_ENDL;
+ LL_INFOS("AppInit") << "viewer: UserLoginLocationReply() Enabling " << gFirstSim << " with code " << msg->mOurCircuitCode << LL_ENDL;
msg->newMessageFast(_PREHASH_UseCircuitCode);
msg->nextBlockFast(_PREHASH_CircuitCode);
msg->addU32Fast(_PREHASH_Code, msg->mOurCircuitCode);
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
msg->addUUIDFast(_PREHASH_ID, gAgent.getID());
msg->sendReliable(
- first_sim,
+ gFirstSim,
MAX_TIMEOUT_COUNT,
FALSE,
TIMEOUT_SECONDS,
@@ -2022,105 +1534,99 @@ bool idle_startup()
LLAgentLanguage::update();
// unpack thin inventory
- LLUserAuth::options_t options;
- options.clear();
+ LLSD response = LLLoginInstance::getInstance()->getResponse();
//bool dump_buffer = false;
-
- if(LLUserAuth::getInstance()->getOptions("inventory-lib-root", options)
- && !options.empty())
+
+ LLSD inv_lib_root = response["inventory-lib-root"];
+ if(inv_lib_root.isDefined())
{
// should only be one
- LLUserAuth::response_t::iterator it;
- it = options[0].find("folder_id");
- if(it != options[0].end())
+ LLSD id = inv_lib_root[0]["folder_id"];
+ if(id.isDefined())
{
- gInventory.setLibraryRootFolderID( LLUUID( (*it).second ) );
+ gInventory.setLibraryRootFolderID(id.asUUID());
}
}
- options.clear();
- if(LLUserAuth::getInstance()->getOptions("inventory-lib-owner", options)
- && !options.empty())
+
+ LLSD inv_lib_owner = response["inventory-lib-owner"];
+ if(inv_lib_owner.isDefined())
{
// should only be one
- LLUserAuth::response_t::iterator it;
- it = options[0].find("agent_id");
- if(it != options[0].end())
+ LLSD id = inv_lib_owner[0]["agent_id"];
+ if(id.isDefined())
{
- gInventory.setLibraryOwnerID( LLUUID( (*it).second ) );
+ gInventory.setLibraryOwnerID( LLUUID(id.asUUID()));
}
}
- options.clear();
- if(LLUserAuth::getInstance()->getOptions("inventory-skel-lib", options)
- && gInventory.getLibraryOwnerID().notNull())
+
+ LLSD inv_skel_lib = response["inventory-skel-lib"];
+ if(inv_skel_lib.isDefined() && gInventory.getLibraryOwnerID().notNull())
{
- if(!gInventory.loadSkeleton(options, gInventory.getLibraryOwnerID()))
+ if(!gInventory.loadSkeleton(inv_skel_lib, gInventory.getLibraryOwnerID()))
{
LL_WARNS("AppInit") << "Problem loading inventory-skel-lib" << LL_ENDL;
}
}
- options.clear();
- if(LLUserAuth::getInstance()->getOptions("inventory-skeleton", options))
+
+ LLSD inv_skeleton = response["inventory-skeleton"];
+ if(inv_skeleton.isDefined())
{
- if(!gInventory.loadSkeleton(options, gAgent.getID()))
+ if(!gInventory.loadSkeleton(inv_skeleton, gAgent.getID()))
{
LL_WARNS("AppInit") << "Problem loading inventory-skel-targets" << LL_ENDL;
}
}
- options.clear();
- if(LLUserAuth::getInstance()->getOptions("buddy-list", options))
+ LLSD buddy_list = response["buddy-list"];
+ if(buddy_list.isDefined())
{
- LLUserAuth::options_t::iterator it = options.begin();
- LLUserAuth::options_t::iterator end = options.end();
LLAvatarTracker::buddy_map_t list;
LLUUID agent_id;
S32 has_rights = 0, given_rights = 0;
- for (; it != end; ++it)
+ for(LLSD::array_const_iterator it = buddy_list.beginArray(),
+ end = buddy_list.endArray(); it != end; ++it)
{
- LLUserAuth::response_t::const_iterator option_it;
- option_it = (*it).find("buddy_id");
- if(option_it != (*it).end())
+ LLSD buddy_id = (*it)["buddy_id"];
+ if(buddy_id.isDefined())
{
- agent_id.set((*option_it).second);
+ agent_id = buddy_id.asUUID();
}
- option_it = (*it).find("buddy_rights_has");
- if(option_it != (*it).end())
+
+ LLSD buddy_rights_has = (*it)["buddy_rights_has"];
+ if(buddy_rights_has.isDefined())
{
- has_rights = atoi((*option_it).second.c_str());
+ has_rights = buddy_rights_has.asInteger();
}
- option_it = (*it).find("buddy_rights_given");
- if(option_it != (*it).end())
+
+ LLSD buddy_rights_given = (*it)["buddy_rights_given"];
+ if(buddy_rights_given.isDefined())
{
- given_rights = atoi((*option_it).second.c_str());
+ given_rights = buddy_rights_given.asInteger();
}
+
list[agent_id] = new LLRelationship(given_rights, has_rights, false);
}
LLAvatarTracker::instance().addBuddyList(list);
}
- options.clear();
-
bool show_hud = false;
- if(LLUserAuth::getInstance()->getOptions("tutorial_setting", options))
+ LLSD tutorial_setting = response["tutorial_setting"];
+ if(tutorial_setting.isDefined())
{
- LLUserAuth::options_t::iterator it = options.begin();
- LLUserAuth::options_t::iterator end = options.end();
- for (; it != end; ++it)
+ for(LLSD::array_const_iterator it = tutorial_setting.beginArray(),
+ end = tutorial_setting.endArray(); it != end; ++it)
{
- LLUserAuth::response_t::const_iterator option_it;
- option_it = (*it).find("tutorial_url");
- if(option_it != (*it).end())
+ LLSD tutorial_url = (*it)["tutorial_url"];
+ if(tutorial_url.isDefined())
{
// Tutorial floater will append language code
- gSavedSettings.setString("TutorialURL", option_it->second);
+ gSavedSettings.setString("TutorialURL", tutorial_url.asString());
}
- option_it = (*it).find("use_tutorial");
- if(option_it != (*it).end())
+
+ LLSD use_tutorial = (*it)["use_tutorial"];
+ if(use_tutorial.asString() == "true")
{
- if (option_it->second == "true")
- {
- show_hud = true;
- }
+ show_hud = true;
}
}
}
@@ -2132,19 +1638,22 @@ bool idle_startup()
LLFloaterReg::showInstance("hud", LLSD(), FALSE);
}
- options.clear();
- if(LLUserAuth::getInstance()->getOptions("event_categories", options))
+ LLSD event_categories = response["event_categories"];
+ if(event_categories.isDefined())
{
- LLEventInfo::loadCategories(options);
+ LLEventInfo::loadCategories(event_categories);
}
- if(LLUserAuth::getInstance()->getOptions("event_notifications", options))
+
+ LLSD event_notifications = response["event_notifications"];
+ if(event_notifications.isDefined())
{
- gEventNotifier.load(options);
+ gEventNotifier.load(event_notifications);
}
- options.clear();
- if(LLUserAuth::getInstance()->getOptions("classified_categories", options))
+
+ LLSD classified_categories = response["classified_categories"];
+ if(classified_categories.isDefined())
{
- LLClassifiedInfo::loadCategories(options);
+ LLClassifiedInfo::loadCategories(classified_categories);
}
@@ -2212,7 +1721,7 @@ bool idle_startup()
// This is actually a pessimistic computation, because TCP may not have enough
// time to ramp up on the (small) default inventory file to truly measure max
// bandwidth. JC
- F64 rate_bps = LLUserAuth::getInstance()->getLastTransferRateBPS();
+ F64 rate_bps = LLLoginInstance::getInstance()->getLastTransferRateBPS();
const F32 FAST_RATE_BPS = 600.f * 1024.f;
const F32 FASTER_RATE_BPS = 750.f * 1024.f;
F32 max_bandwidth = gViewerThrottle.getMaxBandwidth();
@@ -2260,34 +1769,20 @@ bool idle_startup()
// JC: Initialize "active" gestures. This may also trigger
// many gesture downloads, if this is the user's first
// time on this machine or -purge has been run.
- LLUserAuth::options_t gesture_options;
- if (LLUserAuth::getInstance()->getOptions("gestures", gesture_options))
+ LLSD gesture_options
+ = LLLoginInstance::getInstance()->getResponse("gestures");
+ if (gesture_options.isDefined())
{
LL_DEBUGS("AppInit") << "Gesture Manager loading " << gesture_options.size()
<< LL_ENDL;
std::vector<LLUUID> item_ids;
- LLUserAuth::options_t::iterator resp_it;
- for (resp_it = gesture_options.begin();
- resp_it != gesture_options.end();
- ++resp_it)
+ for(LLSD::array_const_iterator resp_it = gesture_options.beginArray(),
+ end = gesture_options.endArray(); resp_it != end; ++resp_it)
{
- const LLUserAuth::response_t& response = *resp_it;
- LLUUID item_id;
- LLUUID asset_id;
- LLUserAuth::response_t::const_iterator option_it;
-
- option_it = response.find("item_id");
- if (option_it != response.end())
- {
- const std::string& uuid_string = (*option_it).second;
- item_id.set(uuid_string);
- }
- option_it = response.find("asset_id");
- if (option_it != response.end())
- {
- const std::string& uuid_string = (*option_it).second;
- asset_id.set(uuid_string);
- }
+ // If the id is not specifed in the LLSD,
+ // the LLSD operator[]() will return a null LLUUID.
+ LLUUID item_id = (*resp_it)["item_id"];
+ LLUUID asset_id = (*resp_it)["asset_id"];
if (item_id.notNull() && asset_id.notNull())
{
@@ -2343,8 +1838,8 @@ bool idle_startup()
if (!gAgent.isFirstLogin())
{
bool url_ok = LLURLSimString::sInstance.parse();
- if ((url_ok && agent_start_location == "url") ||
- (!url_ok && ((agent_start_location == gSavedSettings.getString("LoginLocation")))))
+ if ((url_ok && gAgentStartLocation == "url") ||
+ (!url_ok && ((gAgentStartLocation == gSavedSettings.getString("LoginLocation")))))
{
// Start location is OK
// Disabled code to restore camera location and focus if logging in to default location
@@ -2557,8 +2052,10 @@ bool idle_startup()
// then the data is cached for the viewer's lifetime)
LLProductInfoRequestManager::instance();
+ // *FIX:Mani - What do I do here?
+ // Need we really clear the Auth response data?
// Clean up the userauth stuff.
- LLUserAuth::getInstance()->reset();
+ // LLUserAuth::getInstance()->reset();
LLStartUp::setStartupState( STATE_STARTED );
@@ -2848,230 +2345,6 @@ bool login_alert_status(const LLSD& notification, const LLSD& response)
return false;
}
-void update_app(BOOL mandatory, const std::string& auth_msg)
-{
- // store off config state, as we might quit soon
- gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);
- LLUIColorTable::instance().saveUserSettings();
- std::ostringstream message;
-
- std::string msg;
- if (!auth_msg.empty())
- {
- msg = "("+ auth_msg + ") \n";
- }
-
- LLSD args;
- args["MESSAGE"] = msg;
-
- LLSD payload;
- payload["mandatory"] = mandatory;
-
-/*
- We're constructing one of the following 6 strings here:
- "DownloadWindowsMandatory"
- "DownloadWindowsReleaseForDownload"
- "DownloadWindows"
- "DownloadMacMandatory"
- "DownloadMacReleaseForDownload"
- "DownloadMac"
-
- I've called them out explicitly in this comment so that they can be grepped for.
-
- Also, we assume that if we're not Windows we're Mac. If we ever intend to support
- Linux with autoupdate, this should be an explicit #elif LL_DARWIN, but
- we'd rather deliver the wrong message than no message, so until Linux is supported
- we'll leave it alone.
- */
- std::string notification_name = "Download";
-
-#if LL_WINDOWS
- notification_name += "Windows";
-#elif LL_DARWIN
- notification_name += "Mac";
-#else
- notification_name += "Linux";
-#endif
-
- if (mandatory)
- {
- notification_name += "Mandatory";
- }
- else
- {
-#if LL_RELEASE_FOR_DOWNLOAD
- notification_name += "ReleaseForDownload";
-#endif
- }
-
- LLNotifications::instance().add(notification_name, args, payload, update_dialog_callback);
-}
-
-bool update_dialog_callback(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotification::getSelectedOption(notification, response);
- std::string update_exe_path;
- bool mandatory = notification["payload"]["mandatory"].asBoolean();
-
-#if !LL_RELEASE_FOR_DOWNLOAD
- if (option == 2)
- {
- LLStartUp::setStartupState( STATE_LOGIN_AUTH_INIT );
- return false;
- }
-#endif
-
- if (option == 1)
- {
- // ...user doesn't want to do it
- if (mandatory)
- {
- LLAppViewer::instance()->forceQuit();
- // Bump them back to the login screen.
- //reset_login();
- }
- else
- {
- LLStartUp::setStartupState( STATE_LOGIN_AUTH_INIT );
- }
- return false;
- }
-
- // if a sim name was passed in via command line parameter (typically through a SLURL)
- if ( LLURLSimString::sInstance.mSimString.length() )
- {
- // record the location to start at next time
- gSavedSettings.setString("NextLoginLocation", LLURLSimString::sInstance.mSimString);
- }
-
- LLSD query_map = LLSD::emptyMap();
- // *TODO place os string in a global constant
-#if LL_WINDOWS
- query_map["os"] = "win";
-#elif LL_DARWIN
- query_map["os"] = "mac";
-#elif LL_LINUX
- query_map["os"] = "lnx";
-#elif LL_SOLARIS
- query_map["os"] = "sol";
-#endif
- // *TODO change userserver to be grid on both viewer and sim, since
- // userserver no longer exists.
- query_map["userserver"] = LLViewerLogin::getInstance()->getGridLabel();
- query_map["channel"] = gSavedSettings.getString("VersionChannelName");
- // *TODO constantize this guy
- // *NOTE: This URL is also used in win_setup/lldownloader.cpp
- LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map);
-
- if(LLAppViewer::sUpdaterInfo)
- {
- delete LLAppViewer::sUpdaterInfo ;
- }
- LLAppViewer::sUpdaterInfo = new LLAppViewer::LLUpdaterInfo() ;
-
-#if LL_WINDOWS
- LLAppViewer::sUpdaterInfo->mUpdateExePath = gDirUtilp->getTempFilename();
- if (LLAppViewer::sUpdaterInfo->mUpdateExePath.empty())
- {
- delete LLAppViewer::sUpdaterInfo ;
- LLAppViewer::sUpdaterInfo = NULL ;
-
- // We're hosed, bail
- LL_WARNS("AppInit") << "LLDir::getTempFilename() failed" << LL_ENDL;
- LLAppViewer::instance()->forceQuit();
- return false;
- }
-
- LLAppViewer::sUpdaterInfo->mUpdateExePath += ".exe";
-
- std::string updater_source = gDirUtilp->getAppRODataDir();
- updater_source += gDirUtilp->getDirDelimiter();
- updater_source += "updater.exe";
-
- LL_DEBUGS("AppInit") << "Calling CopyFile source: " << updater_source
- << " dest: " << LLAppViewer::sUpdaterInfo->mUpdateExePath
- << LL_ENDL;
-
-
- if (!CopyFileA(updater_source.c_str(), LLAppViewer::sUpdaterInfo->mUpdateExePath.c_str(), FALSE))
- {
- delete LLAppViewer::sUpdaterInfo ;
- LLAppViewer::sUpdaterInfo = NULL ;
-
- LL_WARNS("AppInit") << "Unable to copy the updater!" << LL_ENDL;
- LLAppViewer::instance()->forceQuit();
- return false;
- }
-
- LLAppViewer::sUpdaterInfo->mParams << "-url \"" << update_url.asString() << "\"";
-
- LL_DEBUGS("AppInit") << "Calling updater: " << LLAppViewer::sUpdaterInfo->mUpdateExePath << " " << LLAppViewer::sUpdaterInfo->mParams.str() << LL_ENDL;
-
- //Explicitly remove the marker file, otherwise we pass the lock onto the child process and things get weird.
- LLAppViewer::instance()->removeMarkerFile(); // In case updater fails
-
-#elif LL_DARWIN
- LLAppViewer::sUpdaterInfo->mUpdateExePath = "'";
- LLAppViewer::sUpdaterInfo->mUpdateExePath += gDirUtilp->getAppRODataDir();
- LLAppViewer::sUpdaterInfo->mUpdateExePath += "/mac-updater.app/Contents/MacOS/mac-updater' -url \"";
- LLAppViewer::sUpdaterInfo->mUpdateExePath += update_url.asString();
- LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" -name \"";
- LLAppViewer::sUpdaterInfo->mUpdateExePath += LLAppViewer::instance()->getSecondLifeTitle();
- LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" &";
-
- LL_DEBUGS("AppInit") << "Calling updater: " << LLAppViewer::sUpdaterInfo->mUpdateExePath << LL_ENDL;
-
- // Run the auto-updater.
- system(LLAppViewer::sUpdaterInfo->mUpdateExePath.c_str()); /* Flawfinder: ignore */
-
-#elif (LL_LINUX || LL_SOLARIS) && LL_GTK
- // we tell the updater where to find the xml containing string
- // translations which it can use for its own UI
- std::string xml_strings_file = "strings.xml";
- std::vector<std::string> xui_path_vec = LLUI::getXUIPaths();
- std::string xml_search_paths;
- std::vector<std::string>::const_iterator iter;
- // build comma-delimited list of xml paths to pass to updater
- for (iter = xui_path_vec.begin(); iter != xui_path_vec.end(); )
- {
- std::string this_skin_dir = gDirUtilp->getDefaultSkinDir()
- + gDirUtilp->getDirDelimiter()
- + (*iter);
- llinfos << "Got a XUI path: " << this_skin_dir << llendl;
- xml_search_paths.append(this_skin_dir);
- ++iter;
- if (iter != xui_path_vec.end())
- xml_search_paths.append(","); // comma-delimit
- }
- // build the overall command-line to run the updater correctly
- update_exe_path =
- gDirUtilp->getExecutableDir() + "/" + "linux-updater.bin" +
- " --url \"" + update_url.asString() + "\"" +
- " --name \"" + LLAppViewer::instance()->getSecondLifeTitle() + "\"" +
- " --dest \"" + gDirUtilp->getAppRODataDir() + "\"" +
- " --stringsdir \"" + xml_search_paths + "\"" +
- " --stringsfile \"" + xml_strings_file + "\"";
-
- LL_INFOS("AppInit") << "Calling updater: "
- << update_exe_path << LL_ENDL;
-
- // *TODO: we could use the gdk equivilant to ensure the updater
- // gets started on the same screen.
- GError *error = NULL;
- if (!g_spawn_command_line_async(update_exe_path.c_str(), &error))
- {
- llerrs << "Failed to launch updater: "
- << error->message
- << llendl;
- }
- if (error)
- g_error_free(error);
-#else
- OSMessageBox(LLTrans::getString("MBNoAutoUpdate"), LLStringUtil::null, OSMB_OK);
-#endif
- LLAppViewer::instance()->forceQuit();
- return false;
-}
void use_circuit_callback(void**, S32 result)
{
@@ -3427,11 +2700,7 @@ std::string LLStartUp::startupStateToString(EStartupState state)
RTNENUM( STATE_LOGIN_SHOW );
RTNENUM( STATE_LOGIN_WAIT );
RTNENUM( STATE_LOGIN_CLEANUP );
- RTNENUM( STATE_UPDATE_CHECK );
RTNENUM( STATE_LOGIN_AUTH_INIT );
- RTNENUM( STATE_LOGIN_AUTHENTICATE );
- RTNENUM( STATE_LOGIN_NO_DATA_YET );
- RTNENUM( STATE_LOGIN_DOWNLOADING );
RTNENUM( STATE_LOGIN_PROCESS_RESPONSE );
RTNENUM( STATE_WORLD_INIT );
RTNENUM( STATE_SEED_GRANTED_WAIT );
@@ -3451,14 +2720,17 @@ std::string LLStartUp::startupStateToString(EStartupState state)
#undef RTNENUM
}
-
// static
void LLStartUp::setStartupState( EStartupState state )
{
LL_INFOS("AppInit") << "Startup state changing from " <<
- startupStateToString(gStartupState) << " to " <<
+ getStartupStateString() << " to " <<
startupStateToString(state) << LL_ENDL;
gStartupState = state;
+ LLSD stateInfo;
+ stateInfo["str"] = getStartupStateString();
+ stateInfo["enum"] = state;
+ sStartupStateWatcher.post(stateInfo);
}
@@ -3572,3 +2844,266 @@ void apply_udp_blacklist(const std::string& csv)
}
+bool process_login_success_response()
+{
+ LLSD response = LLLoginInstance::getInstance()->getResponse();
+
+ std::string text(response["udp_blacklist"]);
+ if(!text.empty())
+ {
+ apply_udp_blacklist(text);
+ }
+
+ // unpack login data needed by the application
+ text = response["agent_id"].asString();
+ if(!text.empty()) gAgentID.set(text);
+ gDebugInfo["AgentID"] = text;
+
+ text = response["session_id"].asString();
+ if(!text.empty()) gAgentSessionID.set(text);
+ gDebugInfo["SessionID"] = text;
+
+ text = response["secure_session_id"].asString();
+ if(!text.empty()) gAgent.mSecureSessionID.set(text);
+
+ text = response["first_name"].asString();
+ if(!text.empty())
+ {
+ // Remove quotes from string. Login.cgi sends these to force
+ // names that look like numbers into strings.
+ gFirstname.assign(text);
+ LLStringUtil::replaceChar(gFirstname, '"', ' ');
+ LLStringUtil::trim(gFirstname);
+ }
+ text = response["last_name"].asString();
+ if(!text.empty())
+ {
+ gLastname.assign(text);
+ }
+ gSavedSettings.setString("FirstName", gFirstname);
+ gSavedSettings.setString("LastName", gLastname);
+
+ if (gSavedSettings.getBOOL("RememberPassword"))
+ {
+ // Successful login means the password is valid, so save it.
+ LLStartUp::savePasswordToDisk(gPassword);
+ }
+ else
+ {
+ // Don't leave password from previous session sitting around
+ // during this login session.
+ LLStartUp::deletePasswordFromDisk();
+ }
+
+ // this is their actual ability to access content
+ text = response["agent_access_max"].asString();
+ if (!text.empty())
+ {
+ // agent_access can be 'A', 'M', and 'PG'.
+ gAgent.setMaturity(text[0]);
+ }
+
+ // this is the value of their preference setting for that content
+ // which will always be <= agent_access_max
+ text = response["agent_region_access"].asString();
+ if (!text.empty())
+ {
+ int preferredMaturity = LLAgent::convertTextToMaturity(text[0]);
+ gSavedSettings.setU32("PreferredMaturity", preferredMaturity);
+ }
+ // During the AO transition, this flag will be true. Then the flag will
+ // go away. After the AO transition, this code and all the code that
+ // uses it can be deleted.
+ text = response["ao_transition"].asString();
+ if (!text.empty())
+ {
+ if (text == "1")
+ {
+ gAgent.setAOTransition();
+ }
+ }
+
+ text = response["start_location"].asString();
+ if(!text.empty())
+ {
+ gAgentStartLocation.assign(text);
+ }
+
+ text = response["circuit_code"].asString();
+ if(!text.empty())
+ {
+ gMessageSystem->mOurCircuitCode = strtoul(text.c_str(), NULL, 10);
+ }
+ std::string sim_ip_str = response["sim_ip"];
+ std::string sim_port_str = response["sim_port"];
+ if(!sim_ip_str.empty() && !sim_port_str.empty())
+ {
+ U32 sim_port = strtoul(sim_port_str.c_str(), NULL, 10);
+ gFirstSim.set(sim_ip_str, sim_port);
+ if (gFirstSim.isOk())
+ {
+ gMessageSystem->enableCircuit(gFirstSim, TRUE);
+ }
+ }
+ std::string region_x_str = response["region_x"];
+ std::string region_y_str = response["region_y"];
+ if(!region_x_str.empty() && !region_y_str.empty())
+ {
+ U32 region_x = strtoul(region_x_str.c_str(), NULL, 10);
+ U32 region_y = strtoul(region_y_str.c_str(), NULL, 10);
+ gFirstSimHandle = to_region_handle(region_x, region_y);
+ }
+
+ const std::string look_at_str = response["look_at"];
+ if (!look_at_str.empty())
+ {
+ size_t len = look_at_str.size();
+ LLMemoryStream mstr((U8*)look_at_str.c_str(), len);
+ LLSD sd = LLSDSerialize::fromNotation(mstr, len);
+ gAgentStartLookAt = ll_vector3_from_sd(sd);
+ }
+
+ text = response["seed_capability"].asString();
+ if (!text.empty()) gFirstSimSeedCap = text;
+
+ text = response["seconds_since_epoch"].asString();
+ if(!text.empty())
+ {
+ U32 server_utc_time = strtoul(text.c_str(), NULL, 10);
+ if(server_utc_time)
+ {
+ time_t now = time(NULL);
+ gUTCOffset = (server_utc_time - now);
+ }
+ }
+
+ std::string home_location = response["home"];
+ if(!home_location.empty())
+ {
+ size_t len = home_location.size();
+ LLMemoryStream mstr((U8*)home_location.c_str(), len);
+ LLSD sd = LLSDSerialize::fromNotation(mstr, len);
+ S32 region_x = sd["region_handle"][0].asInteger();
+ S32 region_y = sd["region_handle"][1].asInteger();
+ U64 region_handle = to_region_handle(region_x, region_y);
+ LLVector3 position = ll_vector3_from_sd(sd["position"]);
+ gAgent.setHomePosRegion(region_handle, position);
+ }
+
+ gAgent.mMOTD.assign(response["message"]);
+
+ // Options...
+ // Each 'option' is an array of submaps.
+ // It appears that we only ever use the first element of the array.
+ LLUUID inv_root_folder_id = response["inventory-root"][0]["folder_id"];
+ if(inv_root_folder_id.notNull())
+ {
+ gInventory.setRootFolderID(inv_root_folder_id);
+ //gInventory.mock(gAgent.getInventoryRootID());
+ }
+
+ LLSD login_flags = response["login-flags"][0];
+ if(login_flags.size())
+ {
+ std::string flag = login_flags["ever_logged_in"];
+ if(!flag.empty())
+ {
+ gAgent.setFirstLogin((flag == "N") ? TRUE : FALSE);
+ }
+
+ /* Flag is currently ignored by the viewer.
+ flag = login_flags["stipend_since_login"];
+ if(flag == "Y")
+ {
+ stipend_since_login = true;
+ }
+ */
+
+ flag = login_flags["gendered"].asString();
+ if(flag == "Y")
+ {
+ gAgent.setGenderChosen(TRUE);
+ }
+
+ flag = login_flags["daylight_savings"].asString();
+ if(flag == "Y")
+ {
+ gPacificDaylightTime = (flag == "Y") ? TRUE : FALSE;
+ }
+
+ //setup map of datetime strings to codes and slt & local time offset from utc
+ LLStringOps::setupDatetimeInfo (gPacificDaylightTime);
+ }
+
+ LLSD initial_outfit = response["initial-outfit"][0];
+ if(initial_outfit.size())
+ {
+ std::string flag = initial_outfit["folder_name"];
+ if(!flag.empty())
+ {
+ // Initial outfit is a folder in your inventory,
+ // must be an exact folder-name match.
+ sInitialOutfit = flag;
+ }
+
+ flag = initial_outfit["gender"].asString();
+ if(!flag.empty())
+ {
+ sInitialOutfitGender = flag;
+ }
+ }
+
+ LLSD global_textures = response["global-textures"][0];
+ if(global_textures.size())
+ {
+ // Extract sun and moon texture IDs. These are used
+ // in the LLVOSky constructor, but I can't figure out
+ // how to pass them in. JC
+ LLUUID id = global_textures["sun_texture_id"];
+ if(id.notNull())
+ {
+ gSunTextureID = id;
+ }
+
+ id = global_textures["moon_texture_id"];
+ if(id.notNull())
+ {
+ gMoonTextureID = id;
+ }
+
+ id = global_textures["cloud_texture_id"];
+ if(id.notNull())
+ {
+ gCloudTextureID = id;
+ }
+ }
+
+
+ bool success = false;
+ // JC: gesture loading done below, when we have an asset system
+ // in place. Don't delete/clear user_credentials until then.
+ if(gAgentID.notNull()
+ && gAgentSessionID.notNull()
+ && gMessageSystem->mOurCircuitCode
+ && gFirstSim.isOk()
+ && gInventory.getRootFolderID().notNull())
+ {
+ success = true;
+ }
+
+ return success;
+}
+
+void transition_back_to_login_panel(const std::string& emsg)
+{
+ if (gNoRender)
+ {
+ LL_WARNS("AppInit") << "Failed to login!" << LL_ENDL;
+ LL_WARNS("AppInit") << emsg << LL_ENDL;
+ exit(0);
+ }
+
+ // Bounce back to the login screen.
+ reset_login(); // calls LLStartUp::setStartupState( STATE_LOGIN_SHOW );
+ gSavedSettings.setBOOL("AutoLogin", FALSE);
+}
diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h
index 4532c5e586..7f869d014f 100644
--- a/indra/newview/llstartup.h
+++ b/indra/newview/llstartup.h
@@ -50,11 +50,7 @@ typedef enum {
STATE_LOGIN_SHOW, // Show login screen
STATE_LOGIN_WAIT, // Wait for user input at login screen
STATE_LOGIN_CLEANUP, // Get rid of login screen and start login
- STATE_UPDATE_CHECK, // Wait for user at a dialog box (updates, term-of-service, etc)
STATE_LOGIN_AUTH_INIT, // Start login to SL servers
- STATE_LOGIN_AUTHENTICATE, // Do authentication voodoo
- STATE_LOGIN_NO_DATA_YET, // Waiting for authentication replies to start
- STATE_LOGIN_DOWNLOADING, // Waiting for authentication replies to download
STATE_LOGIN_PROCESS_RESPONSE, // Check authentication reply
STATE_WORLD_INIT, // Start building the world
STATE_MULTIMEDIA_INIT, // Init the rest of multimedia library
@@ -75,8 +71,6 @@ typedef enum {
// exported symbols
extern bool gAgentMovementCompleted;
extern LLPointer<LLViewerTexture> gStartTexture;
-extern std::string gInitialOutfit;
-extern std::string gInitialOutfitGender; // "male" or "female"
class LLStartUp
{
diff --git a/indra/newview/lluilistener.cpp b/indra/newview/lluilistener.cpp
new file mode 100644
index 0000000000..9c643e78de
--- /dev/null
+++ b/indra/newview/lluilistener.cpp
@@ -0,0 +1,50 @@
+/**
+ * @file lluilistener.cpp
+ * @author Nat Goodspeed
+ * @date 2009-08-18
+ * @brief Implementation for lluilistener.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * Copyright (c) 2009, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header
+#include "llviewerprecompiledheaders.h"
+// associated header
+#include "lluilistener.h"
+// STL headers
+// std headers
+// external library headers
+// other Linden headers
+#include "lluictrl.h"
+#include "llerror.h"
+
+LLUIListener::LLUIListener(const std::string& name):
+ LLDispatchListener(name, "op")
+{
+ add("call", &LLUIListener::call, LLSD().insert("function", LLSD()));
+}
+
+void LLUIListener::call(const LLSD& event) const
+{
+ LLUICtrl::commit_callback_t* func =
+ LLUICtrl::CommitCallbackRegistry::getValue(event["function"]);
+ if (! func)
+ {
+ // This API is intended for use by a script. It's a fire-and-forget
+ // API: we provide no reply. Therefore, a typo in the script will
+ // provide no feedback whatsoever to that script. To rub the coder's
+ // nose in such an error, crump rather than quietly ignoring it.
+ LL_ERRS("LLUIListener") << "function '" << event["function"] << "' not found" << LL_ENDL;
+ }
+ else
+ {
+ // Interestingly, view_listener_t::addMenu() (addCommit(),
+ // addEnable()) constructs a commit_callback_t callable that accepts
+ // two parameters but discards the first. Only the second is passed to
+ // handleEvent(). Therefore we feel completely safe passing NULL for
+ // the first parameter.
+ (*func)(NULL, event["parameter"]);
+ }
+}
diff --git a/indra/newview/lluilistener.h b/indra/newview/lluilistener.h
new file mode 100644
index 0000000000..ea904a99ff
--- /dev/null
+++ b/indra/newview/lluilistener.h
@@ -0,0 +1,29 @@
+/**
+ * @file lluilistener.h
+ * @author Nat Goodspeed
+ * @date 2009-08-18
+ * @brief Engage named functions as specified by XUI
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * Copyright (c) 2009, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+#if ! defined(LL_LLUILISTENER_H)
+#define LL_LLUILISTENER_H
+
+#include "lleventdispatcher.h"
+#include <string>
+
+class LLSD;
+
+class LLUIListener: public LLDispatchListener
+{
+public:
+ LLUIListener(const std::string& name);
+
+private:
+ void call(const LLSD& event) const;
+};
+
+#endif /* ! defined(LL_LLUILISTENER_H) */
diff --git a/indra/newview/llviewercontrollistener.cpp b/indra/newview/llviewercontrollistener.cpp
new file mode 100644
index 0000000000..ecba1b8eb0
--- /dev/null
+++ b/indra/newview/llviewercontrollistener.cpp
@@ -0,0 +1,102 @@
+/**
+ * @file llviewercontrollistener.cpp
+ * @author Brad Kittenbrink
+ * @date 2009-07-09
+ * @brief Implementation for llviewercontrollistener.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * Copyright (c) 2009, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llviewercontrollistener.h"
+
+#include "llviewercontrol.h"
+
+LLViewerControlListener gSavedSettingsListener;
+
+LLViewerControlListener::LLViewerControlListener()
+ : LLDispatchListener("LLViewerControl", "group")
+{
+ add("Global", boost::bind(&LLViewerControlListener::set, &gSavedSettings, _1));
+ add("PerAccount", boost::bind(&LLViewerControlListener::set, &gSavedPerAccountSettings, _1));
+ add("Warning", boost::bind(&LLViewerControlListener::set, &gWarningSettings, _1));
+ add("Crash", boost::bind(&LLViewerControlListener::set, &gCrashSettings, _1));
+
+#if 0
+ add(/*"toggleControl",*/ "Global", boost::bind(&LLViewerControlListener::toggleControl, &gSavedSettings, _1));
+ add(/*"toggleControl",*/ "PerAccount", boost::bind(&LLViewerControlListener::toggleControl, &gSavedPerAccountSettings, _1));
+ add(/*"toggleControl",*/ "Warning", boost::bind(&LLViewerControlListener::toggleControl, &gWarningSettings, _1));
+ add(/*"toggleControl",*/ "Crash", boost::bind(&LLViewerControlListener::toggleControl, &gCrashSettings, _1));
+
+ add(/*"setDefault",*/ "Global", boost::bind(&LLViewerControlListener::setDefault, &gSavedSettings, _1));
+ add(/*"setDefault",*/ "PerAccount", boost::bind(&LLViewerControlListener::setDefault, &gSavedPerAccountSettings, _1));
+ add(/*"setDefault",*/ "Warning", boost::bind(&LLViewerControlListener::setDefault, &gWarningSettings, _1));
+ add(/*"setDefault",*/ "Crash", boost::bind(&LLViewerControlListener::setDefault, &gCrashSettings, _1));
+#endif // 0
+}
+
+//static
+void LLViewerControlListener::set(LLControlGroup * controls, LLSD const & event_data)
+{
+ if(event_data.has("key"))
+ {
+ std::string key(event_data["key"]);
+
+ if(controls->controlExists(key))
+ {
+ controls->setUntypedValue(key, event_data["value"]);
+ }
+ else
+ {
+ llwarns << "requested unknown control: \"" << key << '\"' << llendl;
+ }
+ }
+}
+
+//static
+void LLViewerControlListener::toggleControl(LLControlGroup * controls, LLSD const & event_data)
+{
+ if(event_data.has("key"))
+ {
+ std::string key(event_data["key"]);
+
+ if(controls->controlExists(key))
+ {
+ LLControlVariable * control = controls->getControl(key);
+ if(control->isType(TYPE_BOOLEAN))
+ {
+ control->set(!control->get().asBoolean());
+ }
+ else
+ {
+ llwarns << "requested toggle of non-boolean control: \"" << key << "\", type is " << control->type() << llendl;
+ }
+ }
+ else
+ {
+ llwarns << "requested unknown control: \"" << key << '\"' << llendl;
+ }
+ }
+}
+
+//static
+void LLViewerControlListener::setDefault(LLControlGroup * controls, LLSD const & event_data)
+{
+ if(event_data.has("key"))
+ {
+ std::string key(event_data["key"]);
+
+ if(controls->controlExists(key))
+ {
+ LLControlVariable * control = controls->getControl(key);
+ control->resetToDefault();
+ }
+ else
+ {
+ llwarns << "requested unknown control: \"" << key << '\"' << llendl;
+ }
+ }
+}
diff --git a/indra/newview/llviewercontrollistener.h b/indra/newview/llviewercontrollistener.h
new file mode 100644
index 0000000000..cacf97e908
--- /dev/null
+++ b/indra/newview/llviewercontrollistener.h
@@ -0,0 +1,33 @@
+/**
+ * @file llviewercontrollistener.h
+ * @author Brad Kittenbrink
+ * @date 2009-07-09
+ * @brief Event API for subset of LLViewerControl methods
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * Copyright (c) 2009, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLVIEWERCONTROLLISTENER_H
+#define LL_LLVIEWERCONTROLLISTENER_H
+
+#include "lleventdispatcher.h"
+
+class LLControlGroup;
+class LLSD;
+
+class LLViewerControlListener : public LLDispatchListener
+{
+public:
+ LLViewerControlListener();
+
+private:
+ static void set(LLControlGroup *controls, LLSD const & event_data);
+ static void toggleControl(LLControlGroup *controls, LLSD const & event_data);
+ static void setDefault(LLControlGroup *controls, LLSD const & event_data);
+};
+
+extern LLViewerControlListener gSavedSettingsListener;
+
+#endif // LL_LLVIEWERCONTROLLISTENER_H
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index f033d66c1f..5289037c7a 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -762,6 +762,11 @@ void LLViewerMediaImpl::navigateStop()
bool LLViewerMediaImpl::handleKeyHere(KEY key, MASK mask)
{
bool result = false;
+ // *NOTE:Mani - if this doesn't exist llmozlib goes crashy in the debug build.
+ // LLMozlib::init wants to write some files to <exe_dir>/components
+ std::string debug_init_component_dir( gDirUtilp->getExecutableDir() );
+ debug_init_component_dir += "/components";
+ LLAPRFile::makeDir(debug_init_component_dir.c_str());
if (mMediaSource)
{
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 12d5687877..22fe0a043b 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -209,6 +209,7 @@
#include "llwaterparammanager.h"
#include "llfloaternotificationsconsole.h"
#include "llfloatercamera.h"
+#include "lluilistener.h"
#include "lltexlayer.h"
#include "llappearancemgr.h"
@@ -420,6 +421,8 @@ public:
static LLMenuParcelObserver* gMenuParcelObserver = NULL;
+static LLUIListener sUIListener("UI");
+
LLMenuParcelObserver::LLMenuParcelObserver()
{
LLViewerParcelMgr::getInstance()->addObserver(this);
@@ -6967,7 +6970,7 @@ void force_error_bad_memory_access(void *)
void force_error_infinite_loop(void *)
{
- LLAppViewer::instance()->forceErrorInifiniteLoop();
+ LLAppViewer::instance()->forceErrorInfiniteLoop();
}
void force_error_software_exception(void *)
diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index 918b15ef09..801c46035a 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -35,6 +35,8 @@
#include "llviewernetwork.h"
#include "llviewercontrol.h"
+#include "llevents.h"
+#include "lllogin.h"
struct LLGridData
{
@@ -155,6 +157,10 @@ LLViewerLogin::LLViewerLogin() :
{
}
+ LLViewerLogin::~LLViewerLogin()
+ {
+ }
+
void LLViewerLogin::setGridChoice(EGridInfo grid)
{
if(grid < 0 || grid >= GRID_INFO_COUNT)
diff --git a/indra/newview/llviewernetwork.h b/indra/newview/llviewernetwork.h
index 4001ed05c1..edae6dc47b 100644
--- a/indra/newview/llviewernetwork.h
+++ b/indra/newview/llviewernetwork.h
@@ -34,7 +34,10 @@
#ifndef LL_LLVIEWERNETWORK_H
#define LL_LLVIEWERNETWORK_H
+#include <boost/scoped_ptr.hpp>
+
class LLHost;
+class LLLogin;
enum EGridInfo
{
@@ -74,6 +77,7 @@ class LLViewerLogin : public LLSingleton<LLViewerLogin>
{
public:
LLViewerLogin();
+ ~LLViewerLogin();
void setGridChoice(EGridInfo grid);
void setGridChoice(const std::string& grid_name);
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index c5b09403cb..a1db48529e 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -57,6 +57,7 @@
#include "llparcelselection.h"
#include "llresmgr.h"
#include "llsdutil.h"
+#include "llsdutil_math.h"
#include "llstatusbar.h"
#include "llui.h"
#include "llviewertexture.h"
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index f7fbe96aa7..b4f1b5f4f5 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -32,6 +32,10 @@
#include "llviewerprecompiledheaders.h"
+#if LL_WINDOWS
+#pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally
+#endif
+
// system library includes
#include <stdio.h>
#include <iostream>
@@ -195,6 +199,7 @@
#include "llfloaternotificationsconsole.h"
#include "llnearbychat.h"
+#include "llviewerwindowlistener.h"
#if LL_WINDOWS
#include <tchar.h> // For Unicode conversion methods
@@ -1200,7 +1205,8 @@ LLViewerWindow::LLViewerWindow(
mResDirty(false),
mStatesDirty(false),
mIsFullscreenChecked(false),
- mCurrResolutionIndex(0)
+ mCurrResolutionIndex(0),
+ mViewerWindowListener(new LLViewerWindowListener("LLViewerWindow", this))
{
LLNotificationChannel::buildChannel("VW_alerts", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alert"));
LLNotificationChannel::buildChannel("VW_alertmodal", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alertmodal"));
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index e4f6240fc7..5d54cf1b7f 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -53,6 +53,8 @@
#include <boost/function.hpp>
#include <boost/signals2.hpp>
+#include <boost/scoped_ptr.hpp>
+
class LLView;
class LLViewerObject;
@@ -65,6 +67,7 @@ class LLImageRaw;
class LLHUDIcon;
class LLWindow;
class LLRootView;
+class LLViewerWindowListener;
#define PICK_HALF_WIDTH 5
#define PICK_DIAMETER (2 * PICK_HALF_WIDTH + 1)
@@ -451,6 +454,8 @@ protected:
bool mIsFullscreenChecked; // Did the user check the fullscreen checkbox in the display settings
U32 mCurrResolutionIndex;
+ boost::scoped_ptr<LLViewerWindowListener> mViewerWindowListener;
+
protected:
static std::string sSnapshotBaseName;
static std::string sSnapshotDir;
diff --git a/indra/newview/llviewerwindowlistener.cpp b/indra/newview/llviewerwindowlistener.cpp
new file mode 100644
index 0000000000..317e361c80
--- /dev/null
+++ b/indra/newview/llviewerwindowlistener.cpp
@@ -0,0 +1,87 @@
+/**
+ * @file llviewerwindowlistener.cpp
+ * @author Nat Goodspeed
+ * @date 2009-06-30
+ * @brief Implementation for llviewerwindowlistener.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * Copyright (c) 2009, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header
+#include "llviewerprecompiledheaders.h"
+// associated header
+#include "llviewerwindowlistener.h"
+// STL headers
+#include <map>
+// std headers
+// external library headers
+// other Linden headers
+#include "llviewerwindow.h"
+
+LLViewerWindowListener::LLViewerWindowListener(const std::string& pumpname, LLViewerWindow* llviewerwindow):
+ LLDispatchListener(pumpname, "op"),
+ mViewerWindow(llviewerwindow)
+{
+ // add() every method we want to be able to invoke via this event API.
+ LLSD saveSnapshotArgs;
+ saveSnapshotArgs["filename"] = LLSD::String();
+ saveSnapshotArgs["reply"] = LLSD::String();
+ // The following are optional, so don't build them into required prototype.
+// saveSnapshotArgs["width"] = LLSD::Integer();
+// saveSnapshotArgs["height"] = LLSD::Integer();
+// saveSnapshotArgs["showui"] = LLSD::Boolean();
+// saveSnapshotArgs["rebuild"] = LLSD::Boolean();
+// saveSnapshotArgs["type"] = LLSD::String();
+ add("saveSnapshot", &LLViewerWindowListener::saveSnapshot, saveSnapshotArgs);
+ add("requestReshape", &LLViewerWindowListener::requestReshape);
+}
+
+void LLViewerWindowListener::saveSnapshot(const LLSD& event) const
+{
+ LLReqID reqid(event);
+ typedef std::map<LLSD::String, LLViewerWindow::ESnapshotType> TypeMap;
+ TypeMap types;
+#define tp(name) types[#name] = LLViewerWindow::SNAPSHOT_TYPE_##name
+ tp(COLOR);
+ tp(DEPTH);
+ tp(OBJECT_ID);
+#undef tp
+ // Our add() call should ensure that the incoming LLSD does in fact
+ // contain our required arguments. Deal with the optional ones.
+ S32 width (mViewerWindow->getWindowDisplayWidth());
+ S32 height(mViewerWindow->getWindowDisplayHeight());
+ if (event.has("width"))
+ width = event["width"].asInteger();
+ if (event.has("height"))
+ height = event["height"].asInteger();
+ // showui defaults to true, requiring special treatment
+ bool showui = true;
+ if (event.has("showui"))
+ showui = event["showui"].asBoolean();
+ bool rebuild(event["rebuild"]); // defaults to false
+ LLViewerWindow::ESnapshotType type(LLViewerWindow::SNAPSHOT_TYPE_COLOR);
+ if (event.has("type"))
+ {
+ TypeMap::const_iterator found = types.find(event["type"]);
+ if (found == types.end())
+ {
+ LL_ERRS("LLViewerWindowListener") << "LLViewerWindowListener::saveSnapshot(): "
+ << "unrecognized type " << event["type"] << LL_ENDL;
+ }
+ type = found->second;
+ }
+ bool ok = mViewerWindow->saveSnapshot(event["filename"], width, height, showui, rebuild, type);
+ LLSD response(reqid.makeResponse());
+ response["ok"] = ok;
+ LLEventPumps::instance().obtain(event["reply"]).post(response);
+}
+
+void LLViewerWindowListener::requestReshape(LLSD const & event_data) const
+{
+ if(event_data.has("w") && event_data.has("h"))
+ {
+ mViewerWindow->reshape(event_data["w"].asInteger(), event_data["h"].asInteger());
+ }
+}
diff --git a/indra/newview/llviewerwindowlistener.h b/indra/newview/llviewerwindowlistener.h
new file mode 100644
index 0000000000..59c636ecec
--- /dev/null
+++ b/indra/newview/llviewerwindowlistener.h
@@ -0,0 +1,35 @@
+/**
+ * @file llviewerwindowlistener.h
+ * @author Nat Goodspeed
+ * @date 2009-06-30
+ * @brief Event API for subset of LLViewerWindow methods
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * Copyright (c) 2009, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+#if ! defined(LL_LLVIEWERWINDOWLISTENER_H)
+#define LL_LLVIEWERWINDOWLISTENER_H
+
+#include "lleventdispatcher.h"
+
+class LLViewerWindow;
+class LLSD;
+
+/// Listen on an LLEventPump with specified name for LLViewerWindow request events.
+class LLViewerWindowListener: public LLDispatchListener
+{
+public:
+ /// Specify the pump name on which to listen, and bind the LLViewerWindow
+ /// instance to use (e.g. gViewerWindow).
+ LLViewerWindowListener(const std::string& pumpname, LLViewerWindow* llviewerwindow);
+
+private:
+ void saveSnapshot(const LLSD& event) const;
+ void requestReshape(LLSD const & event_data) const;
+
+ LLViewerWindow* mViewerWindow;
+};
+
+#endif /* ! defined(LL_LLVIEWERWINDOWLISTENER_H) */
diff --git a/indra/newview/llxmlrpclistener.cpp b/indra/newview/llxmlrpclistener.cpp
new file mode 100644
index 0000000000..71e2427c99
--- /dev/null
+++ b/indra/newview/llxmlrpclistener.cpp
@@ -0,0 +1,496 @@
+/**
+ * @file llxmlrpclistener.cpp
+ * @author Nat Goodspeed
+ * @date 2009-03-18
+ * @brief Implementation for llxmlrpclistener.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * Copyright (c) 2009, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+
+// Precompiled header
+#include "llviewerprecompiledheaders.h"
+// associated header
+#include "llxmlrpclistener.h"
+// STL headers
+#include <map>
+#include <set>
+// std headers
+// external library headers
+#include <boost/scoped_ptr.hpp>
+#include <boost/range.hpp> // boost::begin(), boost::end()
+// other Linden headers
+#include "llerror.h"
+#include "stringize.h"
+#include "llxmlrpctransaction.h"
+
+#include <xmlrpc-epi/xmlrpc.h>
+
+#if LL_WINDOWS
+#pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally
+#endif
+
+template <typename STATUS>
+class StatusMapperBase
+{
+ typedef std::map<STATUS, std::string> MapType;
+
+public:
+ StatusMapperBase(const std::string& desc):
+ mDesc(desc)
+ {}
+
+ std::string lookup(STATUS status) const
+ {
+ typename MapType::const_iterator found = mMap.find(status);
+ if (found != mMap.end())
+ {
+ return found->second;
+ }
+ return STRINGIZE("<unknown " << mDesc << " " << status << ">");
+ }
+
+protected:
+ std::string mDesc;
+ MapType mMap;
+};
+
+class StatusMapper: public StatusMapperBase<LLXMLRPCTransaction::Status>
+{
+public:
+ StatusMapper(): StatusMapperBase<LLXMLRPCTransaction::Status>("Status")
+ {
+ mMap[LLXMLRPCTransaction::StatusNotStarted] = "NotStarted";
+ mMap[LLXMLRPCTransaction::StatusStarted] = "Started";
+ mMap[LLXMLRPCTransaction::StatusDownloading] = "Downloading";
+ mMap[LLXMLRPCTransaction::StatusComplete] = "Complete";
+ mMap[LLXMLRPCTransaction::StatusCURLError] = "CURLError";
+ mMap[LLXMLRPCTransaction::StatusXMLRPCError] = "XMLRPCError";
+ mMap[LLXMLRPCTransaction::StatusOtherError] = "OtherError";
+ }
+};
+
+static const StatusMapper sStatusMapper;
+
+class CURLcodeMapper: public StatusMapperBase<CURLcode>
+{
+public:
+ CURLcodeMapper(): StatusMapperBase<CURLcode>("CURLcode")
+ {
+ // from curl.h
+// skip the "CURLE_" prefix for each of these strings
+#define def(sym) (mMap[sym] = #sym + 6)
+ def(CURLE_OK);
+ def(CURLE_UNSUPPORTED_PROTOCOL); /* 1 */
+ def(CURLE_FAILED_INIT); /* 2 */
+ def(CURLE_URL_MALFORMAT); /* 3 */
+ def(CURLE_URL_MALFORMAT_USER); /* 4 - NOT USED */
+ def(CURLE_COULDNT_RESOLVE_PROXY); /* 5 */
+ def(CURLE_COULDNT_RESOLVE_HOST); /* 6 */
+ def(CURLE_COULDNT_CONNECT); /* 7 */
+ def(CURLE_FTP_WEIRD_SERVER_REPLY); /* 8 */
+ def(CURLE_FTP_ACCESS_DENIED); /* 9 a service was denied by the FTP server
+ due to lack of access - when login fails
+ this is not returned. */
+ def(CURLE_FTP_USER_PASSWORD_INCORRECT); /* 10 - NOT USED */
+ def(CURLE_FTP_WEIRD_PASS_REPLY); /* 11 */
+ def(CURLE_FTP_WEIRD_USER_REPLY); /* 12 */
+ def(CURLE_FTP_WEIRD_PASV_REPLY); /* 13 */
+ def(CURLE_FTP_WEIRD_227_FORMAT); /* 14 */
+ def(CURLE_FTP_CANT_GET_HOST); /* 15 */
+ def(CURLE_FTP_CANT_RECONNECT); /* 16 */
+ def(CURLE_FTP_COULDNT_SET_BINARY); /* 17 */
+ def(CURLE_PARTIAL_FILE); /* 18 */
+ def(CURLE_FTP_COULDNT_RETR_FILE); /* 19 */
+ def(CURLE_FTP_WRITE_ERROR); /* 20 */
+ def(CURLE_FTP_QUOTE_ERROR); /* 21 */
+ def(CURLE_HTTP_RETURNED_ERROR); /* 22 */
+ def(CURLE_WRITE_ERROR); /* 23 */
+ def(CURLE_MALFORMAT_USER); /* 24 - NOT USED */
+ def(CURLE_UPLOAD_FAILED); /* 25 - failed upload "command" */
+ def(CURLE_READ_ERROR); /* 26 - could open/read from file */
+ def(CURLE_OUT_OF_MEMORY); /* 27 */
+ /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error
+ instead of a memory allocation error if CURL_DOES_CONVERSIONS
+ is defined
+ */
+ def(CURLE_OPERATION_TIMEOUTED); /* 28 - the timeout time was reached */
+ def(CURLE_FTP_COULDNT_SET_ASCII); /* 29 - TYPE A failed */
+ def(CURLE_FTP_PORT_FAILED); /* 30 - FTP PORT operation failed */
+ def(CURLE_FTP_COULDNT_USE_REST); /* 31 - the REST command failed */
+ def(CURLE_FTP_COULDNT_GET_SIZE); /* 32 - the SIZE command failed */
+ def(CURLE_HTTP_RANGE_ERROR); /* 33 - RANGE "command" didn't work */
+ def(CURLE_HTTP_POST_ERROR); /* 34 */
+ def(CURLE_SSL_CONNECT_ERROR); /* 35 - wrong when connecting with SSL */
+ def(CURLE_BAD_DOWNLOAD_RESUME); /* 36 - couldn't resume download */
+ def(CURLE_FILE_COULDNT_READ_FILE); /* 37 */
+ def(CURLE_LDAP_CANNOT_BIND); /* 38 */
+ def(CURLE_LDAP_SEARCH_FAILED); /* 39 */
+ def(CURLE_LIBRARY_NOT_FOUND); /* 40 */
+ def(CURLE_FUNCTION_NOT_FOUND); /* 41 */
+ def(CURLE_ABORTED_BY_CALLBACK); /* 42 */
+ def(CURLE_BAD_FUNCTION_ARGUMENT); /* 43 */
+ def(CURLE_BAD_CALLING_ORDER); /* 44 - NOT USED */
+ def(CURLE_INTERFACE_FAILED); /* 45 - CURLOPT_INTERFACE failed */
+ def(CURLE_BAD_PASSWORD_ENTERED); /* 46 - NOT USED */
+ def(CURLE_TOO_MANY_REDIRECTS ); /* 47 - catch endless re-direct loops */
+ def(CURLE_UNKNOWN_TELNET_OPTION); /* 48 - User specified an unknown option */
+ def(CURLE_TELNET_OPTION_SYNTAX ); /* 49 - Malformed telnet option */
+ def(CURLE_OBSOLETE); /* 50 - NOT USED */
+ def(CURLE_SSL_PEER_CERTIFICATE); /* 51 - peer's certificate wasn't ok */
+ def(CURLE_GOT_NOTHING); /* 52 - when this is a specific error */
+ def(CURLE_SSL_ENGINE_NOTFOUND); /* 53 - SSL crypto engine not found */
+ def(CURLE_SSL_ENGINE_SETFAILED); /* 54 - can not set SSL crypto engine as
+ default */
+ def(CURLE_SEND_ERROR); /* 55 - failed sending network data */
+ def(CURLE_RECV_ERROR); /* 56 - failure in receiving network data */
+ def(CURLE_SHARE_IN_USE); /* 57 - share is in use */
+ def(CURLE_SSL_CERTPROBLEM); /* 58 - problem with the local certificate */
+ def(CURLE_SSL_CIPHER); /* 59 - couldn't use specified cipher */
+ def(CURLE_SSL_CACERT); /* 60 - problem with the CA cert (path?) */
+ def(CURLE_BAD_CONTENT_ENCODING); /* 61 - Unrecognized transfer encoding */
+ def(CURLE_LDAP_INVALID_URL); /* 62 - Invalid LDAP URL */
+ def(CURLE_FILESIZE_EXCEEDED); /* 63 - Maximum file size exceeded */
+ def(CURLE_FTP_SSL_FAILED); /* 64 - Requested FTP SSL level failed */
+ def(CURLE_SEND_FAIL_REWIND); /* 65 - Sending the data requires a rewind
+ that failed */
+ def(CURLE_SSL_ENGINE_INITFAILED); /* 66 - failed to initialise ENGINE */
+ def(CURLE_LOGIN_DENIED); /* 67 - user); password or similar was not
+ accepted and we failed to login */
+ def(CURLE_TFTP_NOTFOUND); /* 68 - file not found on server */
+ def(CURLE_TFTP_PERM); /* 69 - permission problem on server */
+ def(CURLE_TFTP_DISKFULL); /* 70 - out of disk space on server */
+ def(CURLE_TFTP_ILLEGAL); /* 71 - Illegal TFTP operation */
+ def(CURLE_TFTP_UNKNOWNID); /* 72 - Unknown transfer ID */
+ def(CURLE_TFTP_EXISTS); /* 73 - File already exists */
+ def(CURLE_TFTP_NOSUCHUSER); /* 74 - No such user */
+ def(CURLE_CONV_FAILED); /* 75 - conversion failed */
+ def(CURLE_CONV_REQD); /* 76 - caller must register conversion
+ callbacks using curl_easy_setopt options
+ CURLOPT_CONV_FROM_NETWORK_FUNCTION);
+ CURLOPT_CONV_TO_NETWORK_FUNCTION); and
+ CURLOPT_CONV_FROM_UTF8_FUNCTION */
+ def(CURLE_SSL_CACERT_BADFILE); /* 77 - could not load CACERT file); missing
+ or wrong format */
+ def(CURLE_REMOTE_FILE_NOT_FOUND); /* 78 - remote file not found */
+ def(CURLE_SSH); /* 79 - error from the SSH layer); somewhat
+ generic so the error message will be of
+ interest when this has happened */
+
+ def(CURLE_SSL_SHUTDOWN_FAILED); /* 80 - Failed to shut down the SSL
+ connection */
+#undef def
+ }
+};
+
+static const CURLcodeMapper sCURLcodeMapper;
+
+LLXMLRPCListener::LLXMLRPCListener(const std::string& pumpname):
+ mBoundListener(LLEventPumps::instance().
+ obtain(pumpname).
+ listen("LLXMLRPCListener", boost::bind(&LLXMLRPCListener::process, this, _1)))
+{
+}
+
+/**
+ * Capture an outstanding LLXMLRPCTransaction and poll it periodically until
+ * done.
+ *
+ * The sequence is:
+ * # Instantiate Poller, which instantiates, populates and initiates an
+ * LLXMLRPCTransaction. Poller self-registers on the LLEventPump named
+ * "mainloop".
+ * # "mainloop" is conventionally pumped once per frame. On each such call,
+ * Poller checks its LLXMLRPCTransaction for completion.
+ * # When the LLXMLRPCTransaction completes, Poller collects results (if any)
+ * and sends notification.
+ * # The tricky part: Poller frees itself (and thus its LLXMLRPCTransaction)
+ * when done. The only external reference to it is the connection to the
+ * "mainloop" LLEventPump.
+ */
+class Poller
+{
+public:
+ /// Validate the passed request for required fields, then use it to
+ /// populate an XMLRPC_REQUEST and an associated LLXMLRPCTransaction. Send
+ /// the request.
+ Poller(const LLSD& command):
+ mReqID(command),
+ mUri(command["uri"]),
+ mMethod(command["method"]),
+ mReplyPump(command["reply"])
+ {
+ // LL_ERRS if any of these are missing
+ const char* required[] = { "uri", "method", "reply" };
+ // optional: "options" (array of string)
+ // Validate the request
+ std::set<std::string> missing;
+ for (const char** ri = boost::begin(required); ri != boost::end(required); ++ri)
+ {
+ // If the command does not contain this required entry, add it to 'missing'.
+ if (! command.has(*ri))
+ {
+ missing.insert(*ri);
+ }
+ }
+ if (! missing.empty())
+ {
+ LL_ERRS("LLXMLRPCListener") << mMethod << " request missing params: ";
+ const char* separator = "";
+ for (std::set<std::string>::const_iterator mi(missing.begin()), mend(missing.end());
+ mi != mend; ++mi)
+ {
+ LL_CONT << separator << *mi;
+ separator = ", ";
+ }
+ LL_CONT << LL_ENDL;
+ }
+
+ // Build the XMLRPC request.
+ XMLRPC_REQUEST request = XMLRPC_RequestNew();
+ XMLRPC_RequestSetMethodName(request, mMethod.c_str());
+ XMLRPC_RequestSetRequestType(request, xmlrpc_request_call);
+ XMLRPC_VALUE xparams = XMLRPC_CreateVector(NULL, xmlrpc_vector_struct);
+ LLSD params(command["params"]);
+ if (params.isMap())
+ {
+ for (LLSD::map_const_iterator pi(params.beginMap()), pend(params.endMap());
+ pi != pend; ++pi)
+ {
+ std::string name(pi->first);
+ LLSD param(pi->second);
+ if (param.isString())
+ {
+ XMLRPC_VectorAppendString(xparams, name.c_str(), param.asString().c_str(), 0);
+ }
+ else if (param.isInteger() || param.isBoolean())
+ {
+ XMLRPC_VectorAppendInt(xparams, name.c_str(), param.asInteger());
+ }
+ else if (param.isReal())
+ {
+ XMLRPC_VectorAppendDouble(xparams, name.c_str(), param.asReal());
+ }
+ else
+ {
+ LL_ERRS("LLXMLRPCListener") << mMethod << " request param "
+ << name << " has unknown type: " << param << LL_ENDL;
+ }
+ }
+ }
+ LLSD options(command["options"]);
+ if (options.isArray())
+ {
+ XMLRPC_VALUE xoptions = XMLRPC_CreateVector("options", xmlrpc_vector_array);
+ for (LLSD::array_const_iterator oi(options.beginArray()), oend(options.endArray());
+ oi != oend; ++oi)
+ {
+ XMLRPC_VectorAppendString(xoptions, NULL, oi->asString().c_str(), 0);
+ }
+ XMLRPC_AddValueToVector(xparams, xoptions);
+ }
+ XMLRPC_RequestSetData(request, xparams);
+
+ mTransaction.reset(new LLXMLRPCTransaction(mUri, request));
+ mPreviousStatus = mTransaction->status(NULL);
+
+ // Free the XMLRPC_REQUEST object and the attached data values.
+ XMLRPC_RequestFree(request, 1);
+
+ // Now ensure that we get regular callbacks to poll for completion.
+ mBoundListener =
+ LLEventPumps::instance().
+ obtain("mainloop").
+ listen(LLEventPump::inventName(), boost::bind(&Poller::poll, this, _1));
+
+ LL_INFOS("LLXMLRPCListener") << mMethod << " request sent to " << mUri << LL_ENDL;
+ }
+
+ /// called by "mainloop" LLEventPump
+ bool poll(const LLSD&)
+ {
+ bool done = mTransaction->process();
+
+ CURLcode curlcode;
+ LLXMLRPCTransaction::Status status;
+ {
+ // LLXMLRPCTransaction::status() is defined to accept int* rather
+ // than CURLcode*. I don't feel the urge to fix the signature, but
+ // we want a CURLcode rather than an int. So fetch it as a local
+ // int, but then assign to a CURLcode for the remainder of this
+ // method.
+ int curlint;
+ status = mTransaction->status(&curlint);
+ curlcode = CURLcode(curlint);
+ }
+
+ LLSD data(mReqID.makeResponse());
+ data["status"] = sStatusMapper.lookup(status);
+ data["errorcode"] = sCURLcodeMapper.lookup(curlcode);
+ data["error"] = "";
+ data["transfer_rate"] = 0.0;
+ LLEventPump& replyPump(LLEventPumps::instance().obtain(mReplyPump));
+ if (! done)
+ {
+ // Not done yet, carry on.
+ if (status == LLXMLRPCTransaction::StatusDownloading
+ && status != mPreviousStatus)
+ {
+ // If a response has been received, send the
+ // 'downloading' status if it hasn't been sent.
+ replyPump.post(data);
+ }
+
+ mPreviousStatus = status;
+ return false;
+ }
+
+ // Here the transaction is complete. Check status.
+ data["error"] = mTransaction->statusMessage();
+ data["transfer_rate"] = mTransaction->transferRate();
+ LL_INFOS("LLXMLRPCListener") << mMethod << " result from " << mUri << ": status "
+ << data["status"].asString() << ", errorcode "
+ << data["errorcode"].asString()
+ << " (" << data["error"].asString() << ")"
+ << LL_ENDL;
+ // In addition to CURLE_OK, LLUserAuth distinguishes different error
+ // values of 'curlcode':
+ // CURLE_COULDNT_RESOLVE_HOST,
+ // CURLE_SSL_PEER_CERTIFICATE,
+ // CURLE_SSL_CACERT,
+ // CURLE_SSL_CONNECT_ERROR.
+ // Given 'message', need we care?
+ if (status == LLXMLRPCTransaction::StatusComplete)
+ {
+ // Success! Parse data.
+ std::string status_string(data["status"]);
+ data["responses"] = parseResponse(status_string);
+ data["status"] = status_string;
+ }
+
+ // whether successful or not, send reply on requested LLEventPump
+ replyPump.post(data);
+
+ // Because mTransaction is a boost::scoped_ptr, deleting this object
+ // frees our LLXMLRPCTransaction object.
+ // Because mBoundListener is an LLTempBoundListener, deleting this
+ // object disconnects it from "mainloop".
+ // *** MUST BE LAST ***
+ delete this;
+ return false;
+ }
+
+private:
+ /// Derived from LLUserAuth::parseResponse() and parseOptionInto()
+ LLSD parseResponse(std::string& status_string)
+ {
+ // Extract every member into data["responses"] (a map of string
+ // values).
+ XMLRPC_REQUEST response = mTransaction->response();
+ if (! response)
+ {
+ LL_DEBUGS("LLXMLRPCListener") << "No response" << LL_ENDL;
+ return LLSD();
+ }
+
+ XMLRPC_VALUE param = XMLRPC_RequestGetData(response);
+ if (! param)
+ {
+ LL_DEBUGS("LLXMLRPCListener") << "Response contains no data" << LL_ENDL;
+ return LLSD();
+ }
+
+ // Now, parse everything
+ return parseValues(status_string, "", param);
+ }
+
+ /**
+ * Parse key/value pairs from a given XMLRPC_VALUE into an LLSD map.
+ * @param key_pfx Used to describe a given key in log messages. At top
+ * level, pass "". When parsing an options array, pass the top-level key
+ * name of the array plus the index of the array entry; to this we'll
+ * append the subkey of interest.
+ * @param param XMLRPC_VALUE iterator. At top level, pass
+ * XMLRPC_RequestGetData(XMLRPC_REQUEST).
+ */
+ LLSD parseValues(std::string& status_string, const std::string& key_pfx, XMLRPC_VALUE param)
+ {
+ LLSD responses;
+ for (XMLRPC_VALUE current = XMLRPC_VectorRewind(param); current;
+ current = XMLRPC_VectorNext(param))
+ {
+ std::string key(XMLRPC_GetValueID(current));
+ LL_DEBUGS("LLXMLRPCListener") << "key: " << key_pfx << key << LL_ENDL;
+ XMLRPC_VALUE_TYPE_EASY type = XMLRPC_GetValueTypeEasy(current);
+ if (xmlrpc_type_string == type)
+ {
+ LLSD::String val(XMLRPC_GetValueString(current));
+ LL_DEBUGS("LLXMLRPCListener") << "val: " << val << LL_ENDL;
+ responses.insert(key, val);
+ }
+ else if (xmlrpc_type_int == type)
+ {
+ LLSD::Integer val(XMLRPC_GetValueInt(current));
+ LL_DEBUGS("LLXMLRPCListener") << "val: " << val << LL_ENDL;
+ responses.insert(key, val);
+ }
+ else if (xmlrpc_type_double == type)
+ {
+ LLSD::Real val(XMLRPC_GetValueDouble(current));
+ LL_DEBUGS("LLXMLRPCListener") << "val: " << val << LL_ENDL;
+ responses.insert(key, val);
+ }
+ else if (xmlrpc_type_array == type)
+ {
+ // We expect this to be an array of submaps. Walk the array,
+ // recursively parsing each submap and collecting them.
+ LLSD array;
+ int i = 0; // for descriptive purposes
+ for (XMLRPC_VALUE row = XMLRPC_VectorRewind(current); row;
+ row = XMLRPC_VectorNext(current), ++i)
+ {
+ // Recursive call. For the lower-level key_pfx, if 'key'
+ // is "foo", pass "foo[0]:", then "foo[1]:", etc. In the
+ // nested call, a subkey "bar" will then be logged as
+ // "foo[0]:bar", and so forth.
+ // Parse the scalar subkey/value pairs from this array
+ // entry into a temp submap. Collect such submaps in 'array'.
+ array.append(parseValues(status_string,
+ STRINGIZE(key_pfx << key << '[' << i << "]:"),
+ row));
+ }
+ // Having collected an 'array' of 'submap's, insert that whole
+ // 'array' as the value of this 'key'.
+ responses.insert(key, array);
+ }
+ else
+ {
+ // whoops - unrecognized type
+ LL_WARNS("LLXMLRPCListener") << "Unhandled xmlrpc type " << type << " for key "
+ << key_pfx << key << LL_ENDL;
+ responses.insert(key, STRINGIZE("<bad XMLRPC type " << type << '>'));
+ status_string = "BadType";
+ }
+ }
+ return responses;
+ }
+
+ const LLReqID mReqID;
+ const std::string mUri;
+ const std::string mMethod;
+ const std::string mReplyPump;
+ LLTempBoundListener mBoundListener;
+ boost::scoped_ptr<LLXMLRPCTransaction> mTransaction;
+ LLXMLRPCTransaction::Status mPreviousStatus; // To detect state changes.
+};
+
+bool LLXMLRPCListener::process(const LLSD& command)
+{
+ // Allocate a new heap Poller, but do not save a pointer to it. Poller
+ // will check its own status and free itself on completion of the request.
+ (new Poller(command));
+ // conventional event listener return
+ return false;
+}
diff --git a/indra/newview/llxmlrpclistener.h b/indra/newview/llxmlrpclistener.h
new file mode 100644
index 0000000000..120c2b329b
--- /dev/null
+++ b/indra/newview/llxmlrpclistener.h
@@ -0,0 +1,35 @@
+/**
+ * @file llxmlrpclistener.h
+ * @author Nat Goodspeed
+ * @date 2009-03-18
+ * @brief LLEventPump API for LLXMLRPCTransaction. This header doesn't
+ * actually define the API; the API is defined by the pump name on
+ * which this class listens, and by the expected content of LLSD it
+ * receives.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewergpl$
+ * Copyright (c) 2009, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+#if ! defined(LL_LLXMLRPCLISTENER_H)
+#define LL_LLXMLRPCLISTENER_H
+
+#include "llevents.h"
+
+/// Listen on an LLEventPump with specified name for LLXMLRPCTransaction
+/// request events.
+class LLXMLRPCListener
+{
+public:
+ /// Specify the pump name on which to listen
+ LLXMLRPCListener(const std::string& pumpname);
+
+ /// Handle request events on the event pump specified at construction time
+ bool process(const LLSD& command);
+
+private:
+ LLTempBoundListener mBoundListener;
+};
+
+#endif /* ! defined(LL_LLXMLRPCLISTENER_H) */
diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp
index a2fd0f0d9c..0e1beb377f 100644
--- a/indra/newview/llxmlrpctransaction.cpp
+++ b/indra/newview/llxmlrpctransaction.cpp
@@ -33,6 +33,7 @@
#include "llviewerprecompiledheaders.h"
#include "llxmlrpctransaction.h"
+#include "llxmlrpclistener.h"
#include "llcurl.h"
#include "llviewercontrol.h"
@@ -42,6 +43,13 @@
#include "llappviewer.h"
+// Static instance of LLXMLRPCListener declared here so that every time we
+// bring in this code, we instantiate a listener. If we put the static
+// instance of LLXMLRPCListener into llxmlrpclistener.cpp, the linker would
+// simply omit llxmlrpclistener.o, and shouting on the LLEventPump would do
+// nothing.
+static LLXMLRPCListener listener("LLXMLRPCTransaction");
+
LLXMLRPCValue LLXMLRPCValue::operator[](const char* id) const
{
return LLXMLRPCValue(XMLRPC_VectorGetValueWithID(mV, id));
@@ -213,6 +221,11 @@ LLXMLRPCTransaction::Impl::Impl(const std::string& uri,
XMLRPC_RequestSetData(request, params.getValue());
init(request, useGzip);
+ // DEV-28398: without this XMLRPC_RequestFree() call, it looks as though
+ // the 'request' object is simply leaked. It's less clear to me whether we
+ // should also ask to free request value data (second param 1), since the
+ // data come from 'params'.
+ XMLRPC_RequestFree(request, 1);
}
diff --git a/indra/newview/skins/default/xui/da/floater_avatar_picker.xml b/indra/newview/skins/default/xui/da/floater_avatar_picker.xml
index f93f0a3525..d2c8f3a003 100644
--- a/indra/newview/skins/default/xui/da/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/da/floater_avatar_picker.xml
@@ -1,40 +1,15 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="avatarpicker" title="Vælg beboer">
- <tab_container name="ResidentChooserTabs">
- <panel label="Søg" name="SearchPanel">
- <text name="InstructSearchResidentName">
- Indtast en del af beboerens navn:
- </text>
- <button label="Find" label_selected="Find" name="Find"/>
- </panel>
- <panel label="Visitkort" name="CallingCardsPanel">
- <text name="InstructSelectCallingCard">
- Vælg et visitkort:
- </text>
- </panel>
- <panel label="Nær ved mig" name="NearMePanel">
- <text name="InstructSelectResident">
- Vælg beboere i nærheden:
- </text>
- <button label="Gentegn liste" label_selected="Gentegn liste" name="Refresh"/>
- <slider label="Område" name="near_me_range"/>
- <text name="meters">
- meter
- </text>
- </panel>
- </tab_container>
- <button label="Vælg" label_selected="Vælg" name="Select"/>
- <button label="Annullér" label_selected="Annullér" name="Cancel"/>
- <string name="not_found">
+ <text name="instruct_search_resident_name">
+ Skriv en del eller hele navnet på beboeren:
+ </text>
+ <button label="Find" label_selected="Find" name="Find" />
+ <text name="Or select their calling card:">
+ Eller vælg deres visitkort:
+ </text>
+ <button label="Luk" label_selected="Luk" name="Close" />
+ <button label="Vælg" label_selected="Vælg" name="Select" />
+ <string name="NotFound">
&apos;[TEXT]&apos; ikke fundet
</string>
- <string name="no_one_near">
- Ingen i nærheden
- </string>
- <string name="no_results">
- Ingen resultater
- </string>
- <string name="searching">
- Søger...
- </string>
</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_build_options.xml b/indra/newview/skins/default/xui/da/floater_build_options.xml
index 3b3e14ad64..7e5b61bd84 100644
--- a/indra/newview/skins/default/xui/da/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/da/floater_build_options.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="build options floater" title="Gitter indstillinger">
- <spinner label="Gitter enhed (meter)" name="GridResolution" width="200" label_width="136"/>
- <spinner label="Gitter rækkevidde (meter)" name="GridDrawSize" width="200" label_width="136"/>
+ <spinner label="Gitter enhed (meter)" name="GridResolution" />
+ <spinner label="Gitter rækkevidde (meter)" name="GridDrawSize" />
<check_box label="Aktiver låsning til under-enheder" name="GridSubUnit" />
<check_box label="Vis &apos;cross sections&apos;" name="GridCrossSection" />
<slider label="Gitter synlighed" name="GridOpacity" />
diff --git a/indra/newview/skins/default/xui/da/floater_buy_currency.xml b/indra/newview/skins/default/xui/da/floater_buy_currency.xml
index 1c5876572b..da2e7dbd66 100644
--- a/indra/newview/skins/default/xui/da/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/da/floater_buy_currency.xml
@@ -63,6 +63,6 @@ og prøv igen.
<button label="Annullér" name="cancel_btn" />
<button label="Køb" name="buy_btn" />
<string name="buy_currency">
- Køb L$ [LINDENS] for ca. US$ [USD]
+ Buy L$ [LINDENS] for approx. US$ [USD]
</string>
</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_inspect.xml b/indra/newview/skins/default/xui/da/floater_inspect.xml
index 56c3f6f784..8361733e23 100644
--- a/indra/newview/skins/default/xui/da/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/da/floater_inspect.xml
@@ -1,11 +1,13 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="inspect" title="Inspecér objekter">
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater name="inspect" >
<scroll_list name="object_list" tool_tip="Vælg et objekt fra listen for at markere det">
- <column label="Objekt navn" name="object_name"/>
- <column label="Objekt ejer" name="owner_name"/>
- <column label="Bygget af" name="creator_name"/>
- <column label="Lavet den " name="creation_date"/>
+ <column label="Objekt navn" name="object_name" />
+ <column label="Objekt ejer" name="owner_name" />
+ <column label="Bygget af" name="creator_name" />
+ <column label="Lavet den " name="creation_date" />
</scroll_list>
- <button label="Se profil for ejer..." label_selected="" name="button owner" tool_tip="Se profilen for ejeren af det markerede objekt på listen"/>
- <button label="Se profil for bygger..." label_selected="" name="button creator" tool_tip="Se profilen for den beboer der har bygget det markerede objekt på listen"/>
+ <button label="Se profil for ejer..." label_selected="" name="button owner"
+ tool_tip="Se profilen for ejeren af det markerede objekt på listen" />
+ <button label="Se profil for bygger..." label_selected="" name="button creator"
+ tool_tip="Se profilen for den beboer der har bygget det markerede objekt på listen" />
</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_joystick.xml b/indra/newview/skins/default/xui/da/floater_joystick.xml
index 7a4d570f85..72439ac4e0 100644
--- a/indra/newview/skins/default/xui/da/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/da/floater_joystick.xml
@@ -1,19 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="Joystick" title="Joystick opsætning">
<check_box name="enable_joystick">
Aktiver Joystick:
</check_box>
- <spinner label="X akse mapping" name="JoystickAxis1"/>
- <spinner label="Y akse mapping" name="JoystickAxis2"/>
- <spinner label="Z akse mapping" name="JoystickAxis0"/>
- <spinner label="Hældning mapping" name="JoystickAxis4"/>
- <spinner label="Drejning mapping" name="JoystickAxis5"/>
- <spinner label="Rulning mapping" name="JoystickAxis3"/>
- <spinner label="Zoom mapping" name="JoystickAxis6"/>
- <check_box label="Direkte zoom" name="ZoomDirect"/>
- <check_box label="3D Cursor" name="Cursor3D"/>
- <check_box label="Auto opret" name="AutoLeveling"/>
- <text length="1" name="Control Modes:" type="string">
+ <spinner label="X akse mapping" name="JoystickAxis1" />
+ <spinner label="Y akse mapping" name="JoystickAxis2" />
+ <spinner label="Z akse mapping" name="JoystickAxis0" />
+ <spinner label="Hældning mapping" name="JoystickAxis4" />
+ <spinner label="Drejning mapping" name="JoystickAxis5" />
+ <spinner label="Rulning mapping" name="JoystickAxis3" />
+ <spinner label="Zoom mapping" name="JoystickAxis6" />
+ <check_box label="Direkte zoom" name="ZoomDirect" />
+ <check_box label="3D Cursor" name="Cursor3D" />
+ <check_box label="Auto opret" name="AutoLeveling" />
+ <text type="string" length="1" name="Control Modes:">
Kontrollér:
</text>
<check_box name="JoystickAvatarEnabled">
@@ -64,20 +64,18 @@
<text name="Feathering">
Respons
</text>
- <slider label="" name="AvatarFeathering"/>
- <slider label="" name="BuildFeathering"/>
- <slider label="" name="FlycamFeathering"/>
+ <slider label="" name="AvatarFeathering" />
+ <slider label="" name="BuildFeathering" />
+ <slider label="" name="FlycamFeathering" />
<text name="ZoomScale2">
Zoom følsomhed
</text>
- <spinner label="" name="FlycamAxisScale6"/>
+ <spinner label="" name="FlycamAxisScale6" />
<text name="ZoomDeadZone">
Zoom min. udslag
</text>
- <spinner label="" name="FlycamAxisDeadZone6"/>
- <button label="SpaceNavigator Defaults" name="SpaceNavigatorDefaults"/>
- <button label="OK" label_selected="OK" name="ok_btn"/>
- <button label="Annullér" label_selected="Annullér" name="cancel_btn"/>
+ <spinner label="" name="FlycamAxisDeadZone6" />
+ <button label="SpaceNavigator Defaults" name="SpaceNavigatorDefaults" />
<string name="JoystickMonitor">
Joystick Overvågning
</string>
diff --git a/indra/newview/skins/default/xui/da/floater_lagmeter.xml b/indra/newview/skins/default/xui/da/floater_lagmeter.xml
index 7e7c2dc0d3..b2cbebfe52 100644
--- a/indra/newview/skins/default/xui/da/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/da/floater_lagmeter.xml
@@ -1,28 +1,29 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="floater_lagmeter" title="Lag måler">
- <button label="" label_selected="" name="client_lagmeter" tool_tip="Status for klient lag"/>
+ <button label="" label_selected="" name="client_lagmeter" />
<text name="client">
Klient:
</text>
<text name="client_text">
Normal
</text>
- <button label="" label_selected="" name="network_lagmeter" tool_tip="Network lag status"/>
+ <button label="" label_selected="" name="network_lagmeter"
+ tool_tip="Network lag status" />
<text name="network">
Netværk:
</text>
<text name="network_text">
Normal
</text>
- <button label="" label_selected="" name="server_lagmeter" tool_tip="Status for server lag"/>
+ <button label="" label_selected="" name="server_lagmeter" />
<text name="server">
Server:
</text>
<text name="server_text">
Normal
</text>
- <button label="?" name="server_help"/>
- <button label="&gt;&gt;" name="minimize"/>
+ <button label="?" name="server_help" />
+ <button label="&gt;&gt;" name="minimize" />
<string name="max_title_msg">
Lag måler
</string>
@@ -125,6 +126,9 @@
<string name="server_frame_time_normal_msg">
Normal
</string>
+ <string name="server_frame_time_normal_msg">
+ Normal
+ </string>
<string name="server_physics_cause_msg">
Mulig årsag: For mange fysiske objekter
</string>
diff --git a/indra/newview/skins/default/xui/da/floater_land_holdings.xml b/indra/newview/skins/default/xui/da/floater_land_holdings.xml
index bd623e7b75..fcb159664c 100644
--- a/indra/newview/skins/default/xui/da/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/da/floater_land_holdings.xml
@@ -1,20 +1,19 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="land holdings floater" title="Mit land">
<scroll_list name="parcel list">
- <column label="Navn" name="name"/>
- <column label="Region" name="location"/>
- <column label="Type" name="type"/>
- <column label="Område" name="area"/>
- <column label="" name="hidden"/>
+ <column label="Navn" name="name" />
+ <column label="Lokation" name="location" />
+ <column label="Område" name="area" />
+ <column label="" name="hidden" />
</scroll_list>
- <button label="Teleport" label_selected="Teleport" name="Teleport" tool_tip="Teleport til centrum på dette land."/>
- <button label="Vis på kort" label_selected="Vis på kort" name="Show on Map" tool_tip="Vis dette land på verdenskortet."/>
+ <button label="Teleport" label_selected="Teleport" name="Teleport" />
+ <button label="Vis på kort" label_selected="Vis på kort" name="Show on Map" />
<text name="contrib_label">
Bidrag til dine grupper:
</text>
<scroll_list name="grant list">
- <column label="Gruppe" name="group"/>
- <column label="Område" name="area"/>
+ <column label="Gruppe" name="group" />
+ <column label="Område" name="area" />
</scroll_list>
<text name="allowed_label">
Tilladt land ifølge nuværende betalingsaftale:
diff --git a/indra/newview/skins/default/xui/da/floater_lsl_guide.xml b/indra/newview/skins/default/xui/da/floater_lsl_guide.xml
index d345409859..07ea6930ea 100644
--- a/indra/newview/skins/default/xui/da/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/da/floater_lsl_guide.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="script ed float" title="LSL Wiki">
<check_box label="Følg markøreren" name="lock_check" />
- <combo_box label="Lås" name="history_combo" left_delta="114" width="70"/>
+ <combo_box label="Lås" name="history_combo" />
<button label="Tilbage" name="back_btn" />
<button label="Frem" name="fwd_btn" />
</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_preview_notecard.xml b/indra/newview/skins/default/xui/da/floater_preview_notecard.xml
index 169172222f..c9bee41b6a 100644
--- a/indra/newview/skins/default/xui/da/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/da/floater_preview_notecard.xml
@@ -1,15 +1,12 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="preview notecard" title="Note:">
- <button label="Gem" label_selected="Gem" name="Save"/>
- <text length="1" name="desc txt" type="string">
+ <button label="Gem" label_selected="Gem" name="Save" />
+ <text type="string" length="1" name="desc txt">
Beskrivelse:
</text>
- <text_editor length="1" name="Notecard Editor" type="string">
+ <text_editor type="string" length="1" name="Notecard Editor">
Indlæser...
</text_editor>
- <string name="no_object">
- Kunne ikke finde objekt der indeholder denne note.
- </string>
<string name="not_allowed">
Du har ikke tilladelse til at læse denne note.
</string>
diff --git a/indra/newview/skins/default/xui/da/floater_sound_preview.xml b/indra/newview/skins/default/xui/da/floater_sound_preview.xml
index 606d290e1d..c0d2f76ea9 100644
--- a/indra/newview/skins/default/xui/da/floater_sound_preview.xml
+++ b/indra/newview/skins/default/xui/da/floater_sound_preview.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="Sound Preview" title="sound.wav">
+<floater name="Name/Description" title="sound.wav">
<text name="name_label">
Navn:
</text>
diff --git a/indra/newview/skins/default/xui/da/floater_telehub.xml b/indra/newview/skins/default/xui/da/floater_telehub.xml
index cd1fb33831..32c5448508 100644
--- a/indra/newview/skins/default/xui/da/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/da/floater_telehub.xml
@@ -14,15 +14,15 @@
</text>
<button label="Forbind telehub" name="connect_btn" />
<button label="Afslut" name="disconnect_btn" />
- <text name="spawn_points_text" width="300">
+ <text name="spawn_points_text">
Ankomst punkter (positioner, ikke objekter):
</text>
<button label="Tilføj punkt" name="add_spawn_point_btn" />
<button label="Fjern punkt" name="remove_spawn_point_btn" />
<text name="spawn_point_help">
- Vælg objekt og klik på &apos;Tilføj punkt&apos;for at angive
-position. Du kan derefter flytte eller slette
-objektet. Positioner er i forhold til telehub center.
+ Vælg objekt og klik på &apos;Tilføj punkt&apos;for at angive position.
+Du kan derefter flytte eller slette objektet.
+Positioner er i forhold til telehub center.
Vælg emne i listen for at vise position i verden.
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/da/menu_inventory.xml b/indra/newview/skins/default/xui/da/menu_inventory.xml
index fd5ebe5c82..2c47703ef2 100644
--- a/indra/newview/skins/default/xui/da/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/da/menu_inventory.xml
@@ -55,7 +55,6 @@
<menu_item_call label="Aktivér" name="Activate" />
<menu_item_call label="Deaktivér" name="Deactivate" />
<menu_item_call label="Tag af dig selv" name="Detach From Yourself" />
- <menu_item_call label="Tilbage til sidste position" name="Restore to Last Position"/>
<menu_item_call label="Tag på" name="Object Wear" />
<menu label="Vedhæft" name="Attach To" />
<menu label="Vedhæft til HUD" name="Attach To HUD" />
diff --git a/indra/newview/skins/default/xui/da/panel_group_general.xml b/indra/newview/skins/default/xui/da/panel_group_general.xml
index 4281ec6792..393ac49725 100644
--- a/indra/newview/skins/default/xui/da/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/da/panel_group_general.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel label="Generelt" name="general_tab">
<string name="help_text">
Generel-fanen indeholder generel information om
@@ -10,26 +10,28 @@ Bevæg din mus over mulighederne for mere hjælp.
<string name="group_info_unchanged">
Generel gruppeinformation er ændret.
</string>
- <button label="?" label_selected="?" name="help_button"/>
- <line_editor label="Indtast nyt gruppenavn her" name="group_name_editor"/>
+ <button label="?" label_selected="?" name="help_button" />
+ <line_editor label="Indtast nyt gruppenavn her" name="group_name_editor" />
<text name="group_name">
Skriv det nye gruppenavn her
</text>
<text name="prepend_founded_by">
Grundlagt af
</text>
- <text name="founder_name" left_delta="70" >
+ <text name="founder_name">
(venter)
</text>
<text name="group_charter_label">
Gruppens formål
</text>
- <texture_picker label="Gruppe distinktioner" name="insignia" tool_tip="Klik for at vælge et billede"/>
+ <texture_picker label="Gruppe distinktioner" name="insignia"
+ tool_tip="Klik for at vælge et billede" />
<text_editor name="charter">
Gruppens formål
</text_editor>
- <button label="Tilmeld (L$0)" label_selected="Tilmeld (L$0)" name="join_button"/>
- <button label="Detaljeret visning" label_selected="Detaljeret visning" name="info_button"/>
+ <button label="Tilmeld (L$0)" label_selected="Tilmeld (L$0)" name="join_button" />
+ <button label="Detaljeret visning" label_selected="Detaljeret visning"
+ name="info_button" />
<text name="text_owners_and_visible_members">
Ejere &amp; synlige medlemmer
</text>
@@ -37,37 +39,34 @@ Bevæg din mus over mulighederne for mere hjælp.
(Ejere er vist med fed skrift)
</text>
<name_list name="visible_members">
- <column label="Medlemsnavn" name="name"/>
- <column label="Titel" name="title"/>
- <column label="Senest på d." name="online"/>
+ <column label="Medlemsnavn" name="name" />
+ <column label="Titel" name="title" />
+ <column label="Senest på d." name="online" />
</name_list>
<text name="text_group_preferences">
Gruppeindstillinger
</text>
<panel name="preferences_container">
- <check_box label="Vis i søgning" name="show_in_group_list" tool_tip="Lad folk se denne gruppe i søgeresultater."/>
- <check_box label="Åben tilmelding" name="open_enrollement" tool_tip="Angiver om denne gruppe tillader nye medlemmer at tilmelde sig, uden de er inviteret."/>
- <check_box label="Tilmeldingsgebyr: L$" name="check_enrollment_fee" tool_tip="Angiver om der kræves et gebyr, for at tilmelde sig gruppen."/>
- <spinner name="spin_enrollment_fee" tool_tip="Nye medlemmer skal betale dette gebyr for at tilmelde sig gruppen, når Tilmeldingsgebyr er valgt." width="60" left_delta="130"/>
- <combo_box name="group_mature_check" tool_tip="Angiver om din gruppes information anses som &apos;mature&apos;." width="150">
- <combo_item name="select_mature">
- - Vælg indholdsrating -
- </combo_item>
- <combo_item name="mature">
- Mature indhold
- </combo_item>
- <combo_item name="pg">
- PG indhold
- </combo_item>
- </combo_box>
+ <check_box label="Vis i søgning" name="show_in_group_list"
+ tool_tip="Lad folk se denne gruppe i søgeresultater." />
+ <check_box label="Åben tilmelding" name="open_enrollement"
+ tool_tip="Angiver om denne gruppe tillader nye medlemmer at tilmelde sig, uden de er inviteret." />
+ <check_box label="Tilmeldingsgebyr: L$" name="check_enrollment_fee"
+ tool_tip="Angiver om der kræves et gebyr, for at tilmelde sig gruppen." />
+ <spinner name="spin_enrollment_fee"
+ tool_tip="Nye medlemmer skal betale dette gebyr for at tilmelde sig gruppen, når Tilmeldingsgebyr er valgt." />
+
<panel name="title_container">
<text name="active_title_label">
Min aktive titel
</text>
- <combo_box length="150" name="active_title" tool_tip="Angiver den titel der vises i din avatars navnefelt, når denne gruppe er aktiv."/>
+ <combo_box length="150" name="active_title"
+ tool_tip="Angiver den titel der vises i din avatars navnefelt, når denne gruppe er aktiv." />
</panel>
- <check_box label="Modtag gruppeinformationer" name="receive_notices" tool_tip="Angiver om du vil modtage informationer fra denne gruppe. Fjern markeringen i boksen hvis gruppen spammer dig."/>
- <check_box label="Vis gruppen i min profil" name="list_groups_in_profile" tool_tip="Angiver om du vil vise denne gruppe i dine profilinformationer"/>
+ <check_box label="Modtag gruppeinformationer" name="receive_notices"
+ tool_tip="Angiver om du vil modtage informationer fra denne gruppe. Fjern markeringen i boksen hvis gruppen spammer dig." />
+ <check_box label="Vis gruppen i min profil" name="list_groups_in_profile"
+ tool_tip="Angiver om du vil vise denne gruppe i dine profilinformationer" />
</panel>
<string name="incomplete_member_data_str">
Henter medlemsinformationer
diff --git a/indra/newview/skins/default/xui/da/panel_group_invite.xml b/indra/newview/skins/default/xui/da/panel_group_invite.xml
index 813007aee0..6efc93daac 100644
--- a/indra/newview/skins/default/xui/da/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/da/panel_group_invite.xml
@@ -1,12 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel label="Invitér et medlem" name="invite_panel">
<text name="help_text">
- Du kan invitere flere beboere ad
-gangen til at blive medlem af din
-gruppe. Klik &apos;Åben personvælger&apos; for
-at begynde.
+ Du kan invitere flere beboere til at
+blive medlem af din gruppe. Klik &apos;Åben
+personvælger&apos; for at begynde.
</text>
- <button label="Åben personvælger" name="add_button" bottom_delta="-30"/>
+ <button label="Åben personvælger" name="add_button" />
<name_list name="invitee_list"
tool_tip="Hold Ctrl-tasten nede og klik på beboere for at vælge flere." />
<button label="Fjern valgte fra listen" name="remove_button"
diff --git a/indra/newview/skins/default/xui/da/panel_group_land_money.xml b/indra/newview/skins/default/xui/da/panel_group_land_money.xml
index 029922c413..2ab8935609 100644
--- a/indra/newview/skins/default/xui/da/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/da/panel_group_land_money.xml
@@ -1,9 +1,10 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel label="Land &amp; L$" name="land_money_tab">
<string name="help_text">
- Grunde ejet af gruppen er vist sammen med bidragsdetaljer. En advarsel vises indtil Total land i brug er mindre end eller lig med det totale bidrag. Planlægning, detaljer og salgsfaneblade viser information om gruppens økonomi.
+ Grunde ejet af gruppen er vist sammen med bidragsdetaljer. En advarsel vises indtil Total land i brug er mindre end eller lig med det totale
+bidrag. Planlægning, detaljer og salgsfaneblade viser information om gruppens økonomi.
</string>
- <button label="?" name="help_button"/>
+ <button label="?" name="help_button" />
<string name="cant_view_group_land_text">
Du har ikke tilladelse til at se gruppeejet land.
</string>
@@ -17,30 +18,29 @@
Gruppeejet land
</text>
<scroll_list name="group_parcel_list">
- <column label="Grundens navn" name="name"/>
- <column label="Region" name="location"/>
- <column label="Type" name="type"/>
- <column label="Område" name="area"/>
- <column label="" name="hidden"/>
+ <column label="Grundens navn" name="name" />
+ <column label="Region" name="location" />
+ <column label="Område" name="area" />
+ <column label="" name="hidden" />
</scroll_list>
- <button label="Vis på kort" label_selected="Vis på kort" name="map_button"/>
+ <button label="Vis på kort" label_selected="Vis på kort" name="map_button" />
<text name="total_contributed_land_label">
Total bidrag:
</text>
<text name="total_contributed_land_value">
- [AREA] m²
+ [AREA] kvadratmeter
</text>
<text name="total_land_in_use_label">
Total land i brug:
</text>
<text name="total_land_in_use_value">
- [AREA] m²
+ [AREA] kvadratmeter
</text>
<text name="land_available_label">
Tilgængeligt land:
</text>
<text name="land_available_value">
- [AREA] m²
+ [AREA] kvadratmeter
</text>
<text name="your_contribution_label">
Dit bidrag:
@@ -49,34 +49,32 @@
Ikke muligt at lave dit bidrag til landet.
</string>
<text name="your_contribution_max_value">
- m² ([AMOUNT] maks.)
+ kvadratmeter ([AMOUNT] maks.)
</text>
<text name="group_over_limit_text">
- Gruppemedlemmer må bidrag med mere, for at understøtte
-med det land der bliver brugt.
+ Gruppemedlemmer må bidrag med mere, for at understøtte med det land der bliver brugt.
</text>
<text name="group_money_heading">
Gruppe L$
</text>
<tab_container name="group_money_tab_container">
- <panel label="Planlægning" name="group_money_planning_tab">
- <text_editor name="group_money_planning_text">
- Beregner...
- </text_editor>
- </panel>
<panel label="Detaljer" name="group_money_details_tab">
<text_editor name="group_money_details_text">
Beregner...
</text_editor>
- <button label="&lt; Før" label_selected="&lt; Før" name="earlier_details_button" tool_tip="Gå tilbage i tid"/>
- <button label="Efter &gt;" label_selected="Efter &gt;" name="later_details_button" tool_tip="Gå frem i tid"/>
+ <button label="&lt; Før" label_selected="&lt; Før" name="earlier_details_button"
+ tool_tip="Gå tilbage i tid" />
+ <button label="Efter &gt;" label_selected="Efter &gt;" name="later_details_button"
+ tool_tip="Gå frem i tid" />
</panel>
<panel label="Salg" name="group_money_sales_tab">
<text_editor name="group_money_sales_text">
Beregner...
</text_editor>
- <button label="&lt; Før" label_selected="&lt; Før" name="earlier_sales_button" tool_tip="Gå tilbage i tid"/>
- <button label="Efter &gt;" label_selected="Efter &gt;" name="later_sales_button" tool_tip="Gå frem i tid"/>
+ <button label="&lt; Før" label_selected="&lt; Før" name="earlier_sales_button"
+ tool_tip="Gå tilbage i tid" />
+ <button label="Efter &gt;" label_selected="Efter &gt;" name="later_sales_button"
+ tool_tip="Gå frem i tid" />
</panel>
</tab_container>
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_group_roles.xml b/indra/newview/skins/default/xui/da/panel_group_roles.xml
index 5c2fd356d8..2af84858a1 100644
--- a/indra/newview/skins/default/xui/da/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/da/panel_group_roles.xml
@@ -11,7 +11,7 @@
<text name="static">
Medlemmer &amp; roller
</text>
- <text name="static2" width="400">
+ <text name="static2">
Gruppemedlemmer får tildelt roller med rettigheder. Disse indstillinger kan
let tilpasses efter ønske, så gruppen kan vokse og blive mere fleksibel.
</text>
@@ -20,10 +20,10 @@ let tilpasses efter ønske, så gruppen kan vokse og blive mere fleksibel.
<text name="static">
Roller
</text>
- <text name="role_properties_modifiable" width="400">
- Vælg en rolle nedenfor. Du kan ændre dens navn, beskrivelse og medlemstitel.
+ <text name="role_properties_modifiable">
+ Vælg en rolle nedenfor. Du kan ændre dens navn, beskrivelse og medlemstitel.
</text>
- <text name="role_properties_not_modifiable" width="400">
+ <text name="role_properties_not_modifiable">
Vælg rolle forneden for at se dens egenskaber, medlemmer og rettigheder.
</text>
<text name="role_actions_modifiable">
@@ -51,7 +51,7 @@ der har denne rettighed.
<column label="Doneret leje" name="donated" />
<column label="Sidst på den" name="online" />
</name_list>
- <button label="Invitér nyt medlem..." name="member_invite"/>
+ <button label="Inviter ny person ..." name="member_invite" />
<button label="Udmeld" name="member_eject" />
<string name="help_text">
Du kan tilføje eller fjerne roller, der er tildelt medlemmerne.
@@ -67,7 +67,7 @@ klik på deres navne.
<column label="Titel" name="title" />
<column label="Medlemmer" name="members" />
</scroll_list>
- <button label="Opret ny rolle..." name="role_create" />
+ <button label="Opret ny rolle ..." name="role_create" />
<button label="Slet rolle" name="role_delete" />
<string name="help_text">
Roller har en titel og en tilladelsesliste med rettigheder,
diff --git a/indra/newview/skins/default/xui/da/panel_groups.xml b/indra/newview/skins/default/xui/da/panel_groups.xml
index 4c7b924bcc..b3a09b0082 100644
--- a/indra/newview/skins/default/xui/da/panel_groups.xml
+++ b/indra/newview/skins/default/xui/da/panel_groups.xml
@@ -3,10 +3,10 @@
<scroll_list name="group list">
<column label="" name="name" />
</scroll_list>
- <text type="string" length="1" name="groupdesc" width="300">
+ <text type="string" length="1" name="groupdesc">
Din nuværende aktive gruppe er fremhævet i listen.
</text>
- <text type="string" length="1" name="groupcount" width="300">
+ <text type="string" length="1" name="groupcount">
Du er medlem i [COUNT] grupper (ud af maksimalt [MAX]).
</text>
<button label="IM/Opkald" name="IM" tool_tip="Åbner IM session" />
diff --git a/indra/newview/skins/default/xui/da/panel_region_covenant.xml b/indra/newview/skins/default/xui/da/panel_region_covenant.xml
index 394664f1f1..63a2f90e36 100644
--- a/indra/newview/skins/default/xui/da/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/da/panel_region_covenant.xml
@@ -1,67 +1,39 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel label="Covenant" name="Covenant">
- <text name="estate_section_lbl">
- Estate:
- </text>
- <text name="estate_name_lbl">
- Navn:
- </text>
- <text name="estate_name_text">
- mainland
- </text>
- <text name="estate_owner_lbl">
- Ejer:
- </text>
- <text name="estate_owner_text">
- (ingen)
- </text>
- <text name="covenant_timestamp_text">
- Sidst ændret Ons Dec 31 16:00:00 1969
- </text>
- <button label="?" name="covenant_help"/>
- <text_editor name="covenant_editor">
- Der er ikke angivet nogen regler for denne estate.
- </text_editor>
- <button label="Reset" name="reset_covenant"/>
<text name="covenant_help_text">
- Ændringer i regler vil blive vist i alle parceller til denne estate.
- </text>
- <text name="covenant_instructions">
- Træk og slip et notecard her for at ændre regler for denne estate.
- </text>
- <text name="region_section_lbl">
- Region:
+ Ændringer i regel information vil blive vist i alle parceller til denne estate.
</text>
<text name="region_name_lbl">
- Navn:
+ Region:
</text>
<text name="region_name_text">
- leyla
- </text>
- <text name="region_landtype_lbl">
- Type:
+ (ukendt)
</text>
- <text name="region_landtype_text">
- Mainland / Homestead
+ <text name="estate_name_lbl">
+ Estate:
</text>
- <text name="region_maturity_lbl">
- Rating:
+ <text name="estate_name_text">
+ (ukendt)
</text>
- <text name="region_maturity_text">
- Adult
+ <text name="estate_owner_lbl">
+ Estate ejer:
</text>
- <text name="resellable_lbl">
- Videresalg:
+ <text name="estate_owner_text">
+ (ukendt)
</text>
<text name="resellable_clause">
- Land i denne region må ikke sælges videre.
- </text>
- <text name="changeable_lbl">
- Opdel:
+ Valgfrit om købt land i denne region må sælges videre
</text>
<text name="changeable_clause">
- Land i denne region må ikke deles eller samles.
+ Valgfrit om købt land i denne region må deles eller samles.
</text>
+ <text name="covenent_instructions">
+ Træk og slip et notecard her for at ændre regler for dette estate.
+ </text>
+ <text_editor name="covenant_editor">
+ Henter...
+ </text_editor>
+ <button label="Reset" name="reset_covenant" />
<string name="can_resell">
Købt land i denne region må sælges videre
</string>
@@ -74,4 +46,5 @@
<string name="can_not_change">
Købt land i denne region må ikke deles eller samles.
</string>
+ <button label="?" name="covenant_help" />
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_region_estate.xml b/indra/newview/skins/default/xui/da/panel_region_estate.xml
index 0a439f8c62..108763d544 100644
--- a/indra/newview/skins/default/xui/da/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/da/panel_region_estate.xml
@@ -34,7 +34,7 @@ regioner i dette estate.
<button label="?" name="voice_chat_help" />
<check_box label="Tillad direkte teleport" name="allow_direct_teleport" />
<button label="?" name="allow_direct_teleport_help" />
- <text name="abuse_email_text" width="260">
+ <text name="abuse_email_text">
Send beskeder misbrug til email adresse:
</text>
<string name="email_unsupported">
diff --git a/indra/newview/skins/default/xui/da/panel_region_general.xml b/indra/newview/skins/default/xui/da/panel_region_general.xml
index e4b722c20d..5f0e71f63d 100644
--- a/indra/newview/skins/default/xui/da/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/da/panel_region_general.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel label="Region" name="General">
<text name="region_text_lbl">
Region:
@@ -12,48 +12,35 @@
<text name="version_channel_text">
ukendt
</text>
- <text name="region_type_lbl">
- Type:
- </text>
- <text name="region_type">
- ukendt
- </text>
- <check_box label="Blokér for redigering af terræn" name="block_terraform_check"/>
- <button label="?" name="terraform_help"/>
- <check_box label="Blokér for flyvning" name="block_fly_check"/>
- <button label="?" name="fly_help"/>
- <check_box label="Tillad skader" name="allow_damage_check"/>
- <button label="?" name="damage_help"/>
- <check_box label="Begræns skubning" name="restrict_pushobject"/>
- <button label="?" name="restrict_pushobject_help"/>
- <check_box label="Tillad at sælge land" name="allow_land_resell_check"/>
- <button label="?" name="land_resell_help"/>
- <check_box label="Tillad at samle/dele land" name="allow_parcel_changes_check"/>
- <button label="?" name="parcel_changes_help"/>
- <check_box label="Blokér visning af land i Søgning" name="block_parcel_search_check" tool_tip="Lad beboere se denne region og dens parceller i søgeresultater"/>
- <button label="?" name="parcel_search_help"/>
- <spinner label="Max besøgende" name="agent_limit_spin"/>
- <button label="?" name="agent_limit_help"/>
- <spinner label="Objekt bonus" name="object_bonus_spin"/>
- <button label="?" name="object_bonus_help"/>
+ <check_box label="Blokér for redigering af terræn" name="block_terraform_check" />
+ <button label="?" name="terraform_help" />
+ <check_box label="Blokér for flyvning" name="block_fly_check" />
+ <button label="?" name="fly_help" />
+ <check_box label="Tillad skader" name="allow_damage_check" />
+ <button label="?" name="damage_help" />
+ <check_box label="Begræns skubning" name="restrict_pushobject" />
+ <button label="?" name="restrict_pushobject_help" />
+ <check_box label="Tillad at sælge land" name="allow_land_resell_check" />
+ <button label="?" name="land_resell_help" />
+ <check_box label="Tillad at samle/dele land" name="allow_parcel_changes_check" />
+ <button label="?" name="parcel_changes_help" />
+ <check_box label="Blokér visning af land i Søgning" name="block_parcel_search_check"
+ tool_tip="Lad beboere se denne region og dens parceller i søgeresultater" />
+ <button label="?" name="parcel_search_help" />
+ <spinner label="Max besøgende" name="agent_limit_spin" />
+ <button label="?" name="agent_limit_help" />
+ <spinner label="Objekt bonus" name="object_bonus_spin" />
+ <button label="?" name="object_bonus_help" />
<text label="Indhold" name="access_text">
- Rating:
+ Indhold:
</text>
- <combo_box label="Mature" name="access_combo">
- <combo_item name="Adult">
- Adult
- </combo_item>
- <combo_item name="Mature">
- Mature
- </combo_item>
- <combo_item name="PG">
- PG
- </combo_item>
- </combo_box>
- <button label="?" name="access_help"/>
- <button label="Gem" name="apply_btn"/>
- <button label="Send en beboer hjem ..." name="kick_btn"/>
- <button label="Send alle beboere hjem..." name="kick_all_btn"/>
- <button label="Send besked til region..." name="im_btn"/>
- <button label="Vedligehold telehub..." name="manage_telehub_btn"/>
+
+
+
+ <button label="?" name="access_help" />
+ <button label="Gem" name="apply_btn" />
+ <button label="Send en beboer hjem ..." name="kick_btn" />
+ <button label="Send alle beboere hjem..." name="kick_all_btn" />
+ <button label="Send besked til region..." name="im_btn" />
+ <button label="Vedligehold telehub..." name="manage_telehub_btn" />
</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_region_terrain.xml b/indra/newview/skins/default/xui/da/panel_region_terrain.xml
index 14ef0060b1..4ff81112d3 100644
--- a/indra/newview/skins/default/xui/da/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/da/panel_region_terrain.xml
@@ -13,9 +13,9 @@
<spinner label="Max sænkning af land" name="terrain_lower_spin" />
<button label="?" name="terrain_lower_help" />
<check_box label="Benyt solopsætning fra estate" name="use_estate_sun_check" />
- <button label="?" name="use_estate_sun_help" left="430"/>
+ <button label="?" name="use_estate_sun_help" />
<check_box label="Fast sol-position" name="fixed_sun_check" />
- <button label="?" name="fixed_sun_help" left="430"/>
+ <button label="?" name="fixed_sun_help" />
<slider label="Fase" name="sun_hour_slider" />
<button label="Gem" name="apply_btn" />
<button label="Download RAW terræn fil..." name="download_raw_btn"
diff --git a/indra/newview/skins/default/xui/da/teleport_strings.xml b/indra/newview/skins/default/xui/da/teleport_strings.xml
index cc75abbb26..78052b4ef5 100644
--- a/indra/newview/skins/default/xui/da/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/da/teleport_strings.xml
@@ -2,18 +2,21 @@
<teleport_messages>
<message_set name="errors">
<message name="invalid_tport">
- Der er problemer med at håndtere din teleport. Det kan være nødvendigt at logge ud og ind for at kunne skifte teleportere.
+ Der er problemer med at håndtere din teleport.
+Det kan være nødvendigt at logge ud og ind for at kunne skifte teleportere.
Hvis du bliver ved med at have problemet kan du checke teknisk support på:
-www.secondlife.com/support
+www.secondlife.com/support.
</message>
<message name="invalid_region_handoff">
- Problem registreret i forbindelse med skift til ny region. Det kan være nødvendigt at logge ud og ind for at kunne skifte regioner.
+ Problem registreret i forbindelse med skift til ny region.
+Det kan være nødvendigt at logge ud og ind for at kunne skifte regioner.
Hvis du bliver ved med at have problemet kan du checke teknisk support på:
-www.secondlife.com/support
+www.secondlife.com/support.
</message>
<message name="blocked_tport">
Beklager, teleport er blokeret lige nu. Prøv igen senere.
-Hvis du stadig ikke kan teleporte, prøv venligst at logge ud og ligge ind for at løse dette problem.
+Hvis du stadig ikke kan teleporte, prøv venligst at logge ud og ligge
+ind for at løse dette problem.
</message>
<message name="nolandmark_tport">
Beklager, systemet kunne ikke finde landmærke destinationen.
@@ -26,20 +29,24 @@ Prøv igen om lidt.
Beklager, du har ikke adgang til denne teleport destination.
</message>
<message name="missing_attach_tport">
- Dine vedhæng er ikke ankommet endnu. Prøv at vente lidt endnu eller log ud og ind igen før du prøver at teleporte igen.
+ Dine vedhæng er ikke ankommet endnu. Prøv at vente lidt endnu
+eller log ud og ind igen før du prøver at teleporte igen.
</message>
<message name="too_many_uploads_tport">
Tekniske problemer hindrer at din teleport kan gennemføres.
Prøv venligst igen om lidt eller vælg et mindre travlt område.
</message>
<message name="expired_tport">
- Beklager, men systemet kunne ikke fuldføre din teleport i rimelig tid. Prøv venligst igen om lidt.
+ Beklager, men systemet kunne ikke fuldføre din teleport
+i rimelig tid. Prøv venligst igen om lidt.
</message>
<message name="expired_region_handoff">
- Beklager, men systemet kunne ikke fuldføre skift til anden region i rimelig tid. Prøv venligst igen om lidt.
+ Beklager, men systemet kunne ikke fuldføre skift til anden region
+i rimelig tid. Prøv venligst igen om lidt.
</message>
<message name="no_host">
- Ikke muligt at fine teleport destination. Destinationen kan være midlertidig utilgængelig eller findes ikke mere.
+ Ikke muligt at fine teleport destination. Destinationen kan
+være midlertidig utilgængelig eller findes ikke mere.
Prøv evt. igen om lidt.
</message>
<message name="no_inventory_host">
diff --git a/indra/newview/skins/default/xui/de/floater_mute_object.xml b/indra/newview/skins/default/xui/de/floater_mute_object.xml
index 60c6ff008c..02eafbcb68 100644
--- a/indra/newview/skins/default/xui/de/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/de/floater_mute_object.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="mute by name" title="Objekt nach Name stummschalten">
<text name="message">
- Stummschalten nach Name betrifft nur Chat und IM, keine
-Sounds. Sie müssen den Objektnamen exakt angeben.
+ Stummschalten nach Name betrifft nur Chat und IM, keine Sounds.
+Sie müssen den Objektnamen exakt angeben.
</text>
<line_editor name="object_name">
Objektname
diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml
index 401aa74084..e94e22d9b8 100644
--- a/indra/newview/skins/default/xui/de/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml
@@ -21,12 +21,12 @@
<button label="Senden" name="send_btn"/>
<button label="Speichern ([AMOUNT] L$)" name="upload_btn"/>
<flyout_button label="Speichern" name="save_btn" tool_tip="Bild als Datei speichern">
- <flyout_button_item name="save_item">
- Speichern
- </flyout_button_item>
- <flyout_button_item name="saveas_item">
- Speichern unter...
- </flyout_button_item>
+ <flyout_button.item name="save_item">
+ Speichern
+ </flyout_button.item>
+ <flyout_button.item name="saveas_item">
+ Speichern unter...
+ </flyout_button.item>
</flyout_button>
<button label="Abbrechen" name="discard_btn"/>
<button label="Mehr &gt;&gt;" name="more_btn" tool_tip="Erweiterte Optionen"/>
@@ -38,75 +38,33 @@
Format
</text>
<combo_box label="Auflösung" name="postcard_size_combo">
- <combo_item name="CurrentWindow">
- Aktuelles Fenster
- </combo_item>
- <combo_item name="640x480">
- 640x480
- </combo_item>
- <combo_item name="800x600">
- 800x600
- </combo_item>
- <combo_item name="1024x768">
- 1024x768
- </combo_item>
- <combo_item name="Custom">
- Benutzerdefiniert
- </combo_item>
+ <combo_box.item name="CurrentWindow" label="Aktuelles Fenster" />
+ <combo_box.item name="640x480" label="640x480" />
+ <combo_box.item name="800x600" label="800x600" />
+ <combo_box.item name="1024x768" label="1024x768" />
+ <combo_box.item name="Custom" label="Benutzerdefiniert" />
</combo_box>
<combo_box label="Auflösung" name="texture_size_combo">
- <combo_item name="CurrentWindow">
- Aktuelles Fenster
- </combo_item>
- <combo_item name="Small(128x128)">
- Klein (128x128)
- </combo_item>
- <combo_item name="Medium(256x256)">
- Mittel (256x256)
- </combo_item>
- <combo_item name="Large(512x512)">
- Groß (512x512)
- </combo_item>
- <combo_item name="Custom">
- Benutzerdefiniert
- </combo_item>
+ <combo_box.item name="CurrentWindow" label="Aktuelles Fenster" />
+ <combo_box.item name="Small(128x128)" label="Klein (128x128)" />
+ <combo_box.item name="Medium(256x256)" label="Mittel (256x256)" />
+ <combo_box.item name="Large(512x512)" label="Groß (512x512)" />
+ <combo_box.item name="Custom" label="Benutzerdefiniert" />
</combo_box>
<combo_box label="Auflösung" name="local_size_combo">
- <combo_item name="CurrentWindow">
- Aktuelles Fenster
- </combo_item>
- <combo_item name="320x240">
- 320x240
- </combo_item>
- <combo_item name="640x480">
- 640x480
- </combo_item>
- <combo_item name="800x600">
- 800x600
- </combo_item>
- <combo_item name="1024x768">
- 1024x768
- </combo_item>
- <combo_item name="1280x1024">
- 1280x1024
- </combo_item>
- <combo_item name="1600x1200">
- 1600x1200
- </combo_item>
- <combo_item name="Custom">
- Benutzerdefiniert
- </combo_item>
+ <combo_box.item name="CurrentWindow" label="Aktuelles Fenster" />
+ <combo_box.item name="320x240" label="320x240" />
+ <combo_box.item name="640x480" label="640x480" />
+ <combo_box.item name="800x600" label="800x600" />
+ <combo_box.item name="1024x768" label="1024x768" />
+ <combo_box.item name="1280x1024" label="1280x1024" />
+ <combo_box.item name="1600x1200" label="1600x1200" />
+ <combo_box.item name="Custom" label="Benutzerdefiniert" />
</combo_box>
<combo_box label="Format" name="local_format_combo">
- <combo_item name="PNG">
- PNG
- </combo_item>
- <combo_item name="JPEG">
- JPEG
- </combo_item>
- <combo_item name="BMP">
- BMP
- </combo_item>
+ <combo_box.item name="PNG" label="PNG" />
+ <combo_box.item name="JPEG" label="JPEG" />
+ <combo_box.item name="BMP" label="BMP" />
</combo_box>
<spinner label="Breite" name="snapshot_width"/>
<spinner label="Höhe" name="snapshot_height"/>
@@ -116,15 +74,9 @@
Aufnehmen:
</text>
<combo_box label="Bildlayer" name="layer_types" width="132" left="73">
- <combo_item name="Colors">
- Farben
- </combo_item>
- <combo_item name="Depth">
- Tiefe
- </combo_item>
- <combo_item name="ObjectMattes">
- Objektmasken
- </combo_item>
+ <combo_box.item name="Colors" label="Farben" />
+ <combo_box.item name="Depth" label="Tiefe" />
+ <combo_box.item name="ObjectMattes" label="Objektmasken" />
</combo_box>
<check_box label="Interface auf Foto anzeigen" name="ui_check"/>
<check_box label="HUD-Objekte auf Foto anzeigen" name="hud_check"/>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_general.xml b/indra/newview/skins/default/xui/de/panel_preferences_general.xml
index 40b4909e84..92b45bf5a5 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_general.xml
@@ -10,15 +10,9 @@
</radio_group>
<check_box label="Startposition auf Anmeldebildschirm anzeigen" name="show_location_checkbox"/>
<combo_box name="fade_out_combobox">
- <combo_item name="Never">
- Nie
- </combo_item>
- <combo_item name="Show Temporarily">
- Temporär anzeigen
- </combo_item>
- <combo_item name="Always">
- Immer
- </combo_item>
+ <combo_box.item name="Never" label="Nie" />
+ <combo_box.item name="Show Temporarily" label="Temporär anzeigen" />
+ <combo_box.item name="Always" label="Immer" />
</combo_box>
<check_box label="Kleine Avatarnamen" name="small_avatar_names_checkbox"/>
<check_box label="Meinen Namen auf meinem Bildschirm ausblenden" name="show_my_name_checkbox"/>
@@ -80,49 +74,29 @@ Alterseinstufung zugreifen:
&lt;Region eingeben&gt;
</string>
<combo_box name="crash_behavior_combobox" width="166">
- <combo_item name="Askbeforesending">
- Vor dem Senden fragen
- </combo_item>
- <combo_item name="Alwayssend">
- Immer senden
- </combo_item>
- <combo_item name="Neversend">
- Nie senden
- </combo_item>
+ <combo_box.item name="Askbeforesending" label="Vor dem Senden fragen" />
+ <combo_box.item name="Alwayssend" label="Immer senden" />
+ <combo_box.item name="Neversend" label="Nie senden" />
</combo_box>
<combo_box name="language_combobox" width="166">
- <combo_item name="System Default Language">
- Betriebssystem-Einstellung
- </combo_item>
- <combo_item name="English">
- English (Englisch)
- </combo_item>
- <combo_item name="Danish">
- Danks (Dänisch) - Beta
- </combo_item>
- <combo_item name="Deutsch(German)">
- Deutsch - Beta
- </combo_item>
- <combo_item name="Spanish">
- Español (Spanisch) - Beta
- </combo_item>
- <combo_item name="French">
- Français (Französisch) - Beta
- </combo_item>
+ <combo_box.item name="System Default Language" label="Betriebssystem-Einstellung" />
+ <combo_box.item name="English" label="English (Englisch)" />
+ <combo_box.item name="Danish" label="Danks (Dänisch) - Beta" />
+ <combo_box.item name="Deutsch(German)" label="Deutsch - Beta" />
+ <combo_box.item name="Spanish" label="Español (Spanisch) - Beta" />
+ <combo_box.item name="French" label="Français (Französisch) - Beta" />
+ <combo_box.item name="Hungarian" label="Magyar (Ungarisch) - Beta" />
+ <combo_box.item name="Polish" label="Polski (Polnisch) - Beta" />
+ <combo_box.item name="Portugese" label="Português (Portugiesisch) - Beta" />
+ <combo_box.item name="Chinese" label="中文 (简体) (Chinesisch) - Beta" />
+ <combo_box.item name="(Japanese)" label="日本語 (Japanisch) - Beta" />
+ <combo_box.item name="(Korean)" label="한국어 (Koreanisch) - Beta" />
<combo_item name="Italian">
Italiano (Italienisch) - Beta
</combo_item>
- <combo_item name="Hungarian">
- Magyar (Ungarisch) - Beta
- </combo_item>
<combo_item name="Dutch">
Nederlands (Niederländisch) - Beta
</combo_item>
- <combo_item name="Polish">
- Polski (Polnisch) - Beta
- </combo_item>
- <combo_item name="Portugese">
- Português (Portugiesisch) - Beta
</combo_item>
<combo_item name="Russian">
Русский (Russian) - Beta
@@ -132,16 +106,6 @@ Alterseinstufung zugreifen:
</combo_item>
<combo_item name="Ukrainian">
Українська (Ukrainisch) - Beta
- </combo_item>
- <combo_item name="Chinese">
- 中文 (简体) (Chinesisch) - Beta
- </combo_item>
- <combo_item name="(Japanese)">
- 日本語 (Japanisch) - Beta
- </combo_item>
- <combo_item name="(Korean)">
- 한국어 (Koreanisch) - Beta
- </combo_item>
</combo_box>
<check_box label="Objekten Sprache mitteilen" name="language_is_public" tool_tip="In-Welt-Objekten wird Ihre bevorzugte Spracheinstellung mitgeteilt."/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml
index 0e256bd8b8..3e3b8df646 100644
--- a/indra/newview/skins/default/xui/es/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_about_land.xml
@@ -47,13 +47,13 @@
<text length="1" name="For sale to" type="string">
En venta a: [BUYER]
</text>
- <text width="216" length="1" name="Sell with landowners objects in parcel." type="string">
+ <text length="1" name="Sell with landowners objects in parcel." type="string">
Los objetos se incluyen en la venta.
</text>
- <text width="216" length="1" name="Selling with no objects in parcel." type="string">
+ <text length="1" name="Selling with no objects in parcel." type="string">
Los objetos no se incluyen en la venta.
</text>
- <button font="SansSerifSmall" bottom="-245" left="275" width="165" label="Cancelar la venta del terreno" label_selected="Cancelar la venta del terreno" name="Cancel Land Sale"/>
+ <button font="SansSerifSmall" left="275" width="165" label="Cancelar la venta del terreno" label_selected="Cancelar la venta del terreno" name="Cancel Land Sale"/>
<text length="1" name="Claimed:" type="string">
Reclamada:
</text>
@@ -194,7 +194,7 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
<text length="1" name="Simulator primitive usage:" type="string">
Simulador de uso de prims:
</text>
- <text name="objects_available" left="204" width="250" >
+ <text name="objects_available" left="214" width="230" >
[COUNT] de un máximo de [MAX] ([AVAILABLE] disponibles)
</text>
<string name="objects_available_text">
@@ -206,19 +206,19 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
<text length="1" name="Primitives parcel supports:" type="string" width="200">
Prims que admite la parcela:
</text>
- <text name="object_contrib_text" left="204" width="152">
+ <text name="object_contrib_text" left="214" width="152">
[COUNT]
</text>
<text length="1" name="Primitives on parcel:" type="string">
Prims en la parcela:
</text>
- <text name="total_objects_text" left="204" width="48">
+ <text name="total_objects_text" left="214" width="48">
[COUNT]
</text>
<text length="1" name="Owned by parcel owner:" type="string" left="14" width="180" >
Del propietario de la parcela:
</text>
- <text name="owner_objects_text" left="204" width="48">
+ <text name="owner_objects_text" left="214" width="48">
[COUNT]
</text>
<button label="Mostrar" label_selected="Mostrar" name="ShowOwner" right="-135" width="60"/>
@@ -226,7 +226,7 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
<text length="1" name="Set to group:" type="string" left="14" width="180">
Del grupo:
</text>
- <text name="group_objects_text" left="204" width="48">
+ <text name="group_objects_text" left="214" width="48">
[COUNT]
</text>
<button label="Mostrar" label_selected="Mostrar" name="ShowGroup" right="-135" width="60"/>
@@ -234,7 +234,7 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
<text length="1" name="Owned by others:" type="string" left="14" width="128">
Propiedad de otros:
</text>
- <text name="other_objects_text" left="204" width="48">
+ <text name="other_objects_text" left="214" width="48">
[COUNT]
</text>
<button label="Mostrar" label_selected="Mostrar" name="ShowOther" right="-135" width="60"/>
@@ -242,7 +242,7 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
<text length="1" name="Selected / sat upon:" type="string" left="14" width="193" >
Seleccionados / con gente sentada:
</text>
- <text name="selected_objects_text" left="204" width="48">
+ <text name="selected_objects_text" left="214" width="48">
[COUNT]
</text>
<text name="Autoreturn" left="4" width="412" >
@@ -299,7 +299,7 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda.
<string name="search_disabled_permissions_tooltip">
Esta opción no esta activada porque usted no puede modificar las opciones de la parcela.
</string>
- <combo_box name="land category with adult" left="282" width="140">
+ <combo_box name="land category with adult">
<combo_item name="AnyCategory">
Cualquier categoría
</combo_item>
@@ -340,45 +340,21 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda.
Otra
</combo_item>
</combo_box>
- <combo_box name="land category" left="282" width="140">
- <combo_item name="AnyCategory">
- Cualquier categoría
- </combo_item>
- <combo_item name="LindenLocation">
- Localización Linden
- </combo_item>
- <combo_item name="Arts&amp;Culture">
- Arte y Cultura
- </combo_item>
- <combo_item name="Business">
- Negocios
- </combo_item>
- <combo_item name="Educational">
- Educativo
- </combo_item>
- <combo_item name="Gaming">
- Juegos de azar
- </combo_item>
- <combo_item name="Hangout">
- Entretenimiento
- </combo_item>
- <combo_item name="NewcomerFriendly">
- Para recién llegados
- </combo_item>
- <combo_item name="Parks&amp;Nature">
- Parques y Naturaleza
- </combo_item>
- <combo_item name="Residential">
- Residencial
- </combo_item>
- <combo_item name="Shopping">
- Compras
- </combo_item>
- <combo_item name="Other">
- Otra
- </combo_item>
+ <combo_box name="land category">
+ <combo_box.item name="AnyCategory" label="Cualquier categoría"/>
+ <combo_box.item name="LindenLocation" label="Localización Linden"/>
+ <combo_box.item name="Arts&amp;Culture" label="Arte y Cultura"/>
+ <combo_box.item name="Business" label="Negocios"/>
+ <combo_box.item name="Educational" label="Educativo"/>
+ <combo_box.item name="Gaming" label="Juegos de azar"/>
+ <combo_box.item name="Hangout" label="Entretenimiento"/>
+ <combo_box.item name="NewcomerFriendly" label="Para recién llegados"/>
+ <combo_box.item name="Parks&amp;Nature" label="Parques y Naturaleza"/>
+ <combo_box.item name="Residential" label="Residencial"/>
+ <combo_box.item name="Shopping" label="Compras"/>
+ <combo_box.item name="Other" label="Otra"/>
</combo_box>
- <button label="?" label_selected="?" name="?" left="427"/>
+ <button label="?" label_selected="?" name="?"/>
<check_box label="Contenido &apos;Mature&apos;" name="MatureCheck" tool_tip=""/>
<string name="mature_check_mature">
Contenido &apos;Mature&apos;
@@ -408,15 +384,9 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda.
Punto de teleporte:
</text>
<combo_box name="landing type" tool_tip="Punto de teleporte: defina cómo manejar en su terreno los teleportes.">
- <combo_item length="1" name="Blocked" type="string">
- Bloqueado
- </combo_item>
- <combo_item length="1" name="LandingPoint" type="string">
- Punto de llegada
- </combo_item>
- <combo_item length="1" name="Anywhere" type="string">
- Cualquiera
- </combo_item>
+ <combo_box.item length="1" name="Blocked" type="string" label="Bloqueado"/>
+ <combo_box.item length="1" name="LandingPoint" type="string" label="Punto de llegada"/>
+ <combo_box.item length="1" name="Anywhere" type="string" label="Cualquiera"/>
</combo_box>
<string name="push_restrict_text">
Sin &apos;empujones&apos;
@@ -497,12 +467,8 @@ música:
<check_box label="Acceso permitido al grupo: [GROUP]" name="GroupCheck" tool_tip="Elija el grupo en la pestaña General."/>
<check_box label="Vender pases a:" name="PassCheck" tool_tip="Permitir acceso temporal a esta parcela"/>
<combo_box name="pass_combo">
- <combo_item name="Anyone">
- Cualquiera
- </combo_item>
- <combo_item name="Group">
- Grupo
- </combo_item>
+ <combo_box.item name="Anyone" label="Cualquiera"/>
+ <combo_box.item name="Group" label="Grupo"/>
</combo_box>
<spinner label="Precio en L$:" name="PriceSpin"/>
<spinner label="Horas de acceso:" name="HoursSpin"/>
diff --git a/indra/newview/skins/default/xui/es/floater_avatar_picker.xml b/indra/newview/skins/default/xui/es/floater_avatar_picker.xml
index 68a56ac678..105111f29f 100644
--- a/indra/newview/skins/default/xui/es/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/es/floater_avatar_picker.xml
@@ -14,15 +14,13 @@
</panel>
<panel label="Cercanos" name="NearMePanel">
<text name="InstructSelectResident">
- Seleccionar un
-residente cercano:
+ Seleccionar un residente cercano:
</text>
- <button font="SansSerifSmall" left_delta="1" width="115" label="Actualizar la lista" label_selected="Actualizar la lista" name="Refresh"/>
- <slider label="Alcance" name="near_me_range" bottom_delta="-36"/>
+ <button label="Actualizar la lista" label_selected="Actualizar la lista" name="Refresh"/>
+ <slider label="Alcance" name="near_me_range"/>
<text name="meters">
Metros
</text>
- <scroll_list bottom_delta="-169" height="159" name="NearMe" />
</panel>
</tab_container>
<button label="Elegir" label_selected="Elegir" name="Select"/>
diff --git a/indra/newview/skins/default/xui/es/floater_build_options.xml b/indra/newview/skins/default/xui/es/floater_build_options.xml
index c3e4acacf0..bbb5b0e36d 100644
--- a/indra/newview/skins/default/xui/es/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/es/floater_build_options.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="Opciones de la cuadrícula">
- <spinner label="Unidad de la cuadrícula (metros)" name="GridResolution" width="250" label_width="192"/>
- <spinner label="Graduación de la cuadrícula (metros)" name="GridDrawSize" width="250" label_width="192"/>
+ <spinner label="Unidad de la cuadrícula (metros)" name="GridResolution"/>
+ <spinner label="Graduación de la cuadrícula (metros)" name="GridDrawSize"/>
<check_box label="Activar subunidades" name="GridSubUnit"/>
<check_box label="Ver la sección transversal" name="GridCrossSection"/>
- <slider label="Opacidad de la cuadrícula" name="GridOpacity" width="250"/>
+ <slider label="Opacidad de la cuadrícula" name="GridOpacity"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_buy_contents.xml b/indra/newview/skins/default/xui/es/floater_buy_contents.xml
index 2346798f94..e93b8bce2d 100644
--- a/indra/newview/skins/default/xui/es/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/es/floater_buy_contents.xml
@@ -6,7 +6,7 @@
<text name="buy_text">
¿Comprar por [AMOUNT] L$ a [NAME]?
</text>
- <button label="Cancelar" label_selected="Cancelar" name="cancel_btn" width="73"/>
+ <button label="Cancelar" label_selected="Cancelar" name="cancel_btn"/>
<button label="Comprar" label_selected="Comprar" name="buy_btn"/>
<check_box label="Vestirse ahora la ropa" name="wear_check"/>
<string name="no_copy_text">
diff --git a/indra/newview/skins/default/xui/es/floater_buy_currency.xml b/indra/newview/skins/default/xui/es/floater_buy_currency.xml
index a01e07e694..b26a9c7494 100644
--- a/indra/newview/skins/default/xui/es/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/es/floater_buy_currency.xml
@@ -22,14 +22,14 @@
<text name="buy_action">
[NAME] [PRICE] L$
</text>
- <text name="currency_action" width="50">
- Comprar
+ <text name="currency_action">
+ Comprar L$
</text>
- <line_editor name="currency_amt" width="65" left_delta="50">
+ <line_editor name="currency_amt">
1234
</line_editor>
- <text name="currency_est" width="138" left_delta="68">
- L$ por, aprox., [USD] US$
+ <text name="currency_est">
+ por, aprox., [USD] US$
</text>
<text name="getting_data">
Obteniendo los datos...
@@ -63,6 +63,6 @@ Aumente la cantidad a comprar.
<button label="Cancelar" name="cancel_btn"/>
<button label="Comprar" name="buy_btn"/>
<string name="buy_currency">
- Compre [LINDENS] L$ por, aprox., [USD] US$
+ Comprar L$ [LINDENS] por, aprox., [USD] U$D
</string>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_color_picker.xml b/indra/newview/skins/default/xui/es/floater_color_picker.xml
index c220c48cb0..238853c58d 100644
--- a/indra/newview/skins/default/xui/es/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/es/floater_color_picker.xml
@@ -25,7 +25,6 @@
Color actual:
</text>
<text name="(Drag below to save.)">
- (Arrástrelo abajo
- para guardarlo.)
+ (Arrástrelo abajo para guardarlo)
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml
index 9ee7fc3ead..dd74505239 100644
--- a/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml
@@ -57,9 +57,9 @@
<text name="WL12amHash2">
|
</text>
- <button font="SansSerifSmall" width="96" left="546" label="Añadir un punto" label_selected="Añadir un punto" name="WLAddKey"/>
- <button font="SansSerifSmall" width="96" left="546" label="Quitar un punto" label_selected="Quitar un punto" name="WLDeleteKey"/>
- <text font="SansSerifSmall" name="WLCurKeyFrameText" width="190">
+ <button label="Añadir un punto" label_selected="Añadir un punto" name="WLAddKey"/>
+ <button label="Quitar un punto" label_selected="Quitar un punto" name="WLDeleteKey"/>
+ <text name="WLCurKeyFrameText">
Configuración del fotograma clave:
</text>
<text name="WLCurKeyTimeText">
@@ -86,9 +86,9 @@
</text>
<button label="Probar" label_selected="Probar" name="WLAnimSky"/>
<button label="Parar" label_selected="Parar" name="WLStopAnimSky"/>
- <button width="150" font="SansSerifSmall" label="Usar el horario del estado" label_selected="Ir al horario del estado" name="WLUseLindenTime"/>
- <button left="440" width="180" font="SansSerifSmall" label="Guardar este tipo de día" label_selected="Guardar este tipo de día" name="WLSaveDayCycle"/>
- <button left="440" width="180" font="SansSerifSmall" label="Cargar y probar un tipo de día" label_selected="Cargar y probar un tipo de día" name="WLLoadDayCycle"/>
+ <button label="Usar el horario del estado" label_selected="Ir al horario del estado" name="WLUseLindenTime"/>
+ <button label="Guardar este tipo de día" label_selected="Guardar este tipo de día" name="WLSaveDayCycle"/>
+ <button label="Cargar y probar un tipo de día" label_selected="Cargar y probar un tipo de día" name="WLLoadDayCycle"/>
</panel>
</tab_container>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_env_settings.xml b/indra/newview/skins/default/xui/es/floater_env_settings.xml
index 65710fc5ed..8b9bfe7362 100644
--- a/indra/newview/skins/default/xui/es/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/es/floater_env_settings.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Environment Editor Floater" title="Editor del entorno">
<text name="EnvTimeText">
- Duración de
-un día
+ Duración de un día
</text>
<text name="EnvTimeText2">
12:00 PM
@@ -11,16 +10,14 @@ un día
Nubosidad
</text>
<text name="EnvWaterColorText">
- Color del
-agua
+ Color del agua
</text>
<color_swatch label="" name="EnvWaterColor" tool_tip="Pulse para abrir el selector de color"/>
<text name="EnvWaterFogText">
- Claridad del
-agua
+ Claridad del agua
</text>
- <button bottom="-144" label="Usar el horario del estado" name="EnvUseEstateTimeButton" width="155"/>
- <button label="Cielo avanzado" name="EnvAdvancedSkyButton" width="155" left="167" />
- <button label="Agua avanzada" name="EnvAdvancedWaterButton" width="155" left="326"/>
+ <button label="Usar el horario del estado" name="EnvUseEstateTimeButton"/>
+ <button label="Cielo avanzado" name="EnvAdvancedSkyButton"/>
+ <button label="Agua avanzada" name="EnvAdvancedWaterButton"/>
<button label="?" name="EnvSettingsHelpButton"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_gesture.xml b/indra/newview/skins/default/xui/es/floater_gesture.xml
index e7f1a7aca2..4f19286d01 100644
--- a/indra/newview/skins/default/xui/es/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/es/floater_gesture.xml
@@ -1,10 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="gestures" title="Gestos disponibles">
<text name="help_label">
- Pulse dos veces en un gesto para reproducir las animaciones
-y sonidos.
+ Pulse dos veces en un gesto para reproducir las animaciones y sonidos.
</text>
- <scroll_list bottom_delta="-385" height="360" name="gesture_list">
+ <scroll_list name="gesture_list">
<column label="Botón" name="trigger"/>
<column label="Tecla" name="shortcut"/>
<column label="Nombre" name="name"/>
diff --git a/indra/newview/skins/default/xui/es/floater_inspect.xml b/indra/newview/skins/default/xui/es/floater_inspect.xml
index 026081bc04..7a9f76de0f 100644
--- a/indra/newview/skins/default/xui/es/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/es/floater_inspect.xml
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="inspect" title="Examinar objetos" min_width="450">
+<floater name="inspect" title="Examinar objetos">
<scroll_list name="object_list" tool_tip="Seleccione un objeto de esta lista para realzarlo en el mundo">
<column label="Nombre del objeto" name="object_name"/>
- <column label="Propietario" name="owner_name"/>
- <column label="Creador" name="creator_name"/>
+ <column label="Nombre del propietario" name="owner_name"/>
+ <column label="Nombre del creador" name="creator_name"/>
<column label="Fecha de creación" name="creation_date"/>
</scroll_list>
- <button width="185" label="Ver el perfil del propietario..." label_selected="" name="button owner" tool_tip="Ver el perfil del propietario del objeto realzado"/>
- <button width="165" left="205" label="Ver el perfil del creador..." label_selected="" name="button creator" tool_tip="Ver el perfil del creador original del objeto realzado"/>
+ <button label="Ver el perfil del propietario..." label_selected="" name="button owner" tool_tip="Ver el perfil del propietario del objeto realzado"/>
+ <button label="Ver el perfil del creadir..." label_selected="" name="button creator" tool_tip="Ver el perfil del creador original del objeto realzado"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml
index d0283afa38..d341de17e9 100644
--- a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml
@@ -11,14 +11,14 @@
<check_box label="Sonidos" name="check_sound"/>
<check_box label="Texturas" name="check_texture"/>
<check_box label="Fotos" name="check_snapshot"/>
- <button label="Todo" label_selected="Todo" name="All" width="70"/>
- <button label="Nada" label_selected="Nada" name="None" width="70" bottom_delta="0" left="83"/>
- <check_box label="Mostrar siempre las&#10;carpetas" name="check_show_empty"/>
- <check_box label="Desde el fin de sesión" name="check_since_logoff" bottom_delta="-36"/>
+ <button label="Todo" label_selected="Todo" name="All"/>
+ <button label="Nada" label_selected="Nada" name="None"/>
+ <check_box label="Mostrar siempre las carpetas" name="check_show_empty"/>
+ <check_box label="Desde el fin de sesión" name="check_since_logoff"/>
<text length="1" name="- OR -" type="string">
- O -
</text>
<spinner label="horas atrás" name="spin_hours_ago"/>
<spinner label="días atrás" name="spin_days_ago"/>
- <button label="Cerrar" label_selected="Cerrar" name="Close" bottom_delta="-30"/>
+ <button label="Cerrar" label_selected="Cerrar" name="Close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_lagmeter.xml b/indra/newview/skins/default/xui/es/floater_lagmeter.xml
index 1af0bb065c..7d499750de 100644
--- a/indra/newview/skins/default/xui/es/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/es/floater_lagmeter.xml
@@ -4,26 +4,23 @@
<text name="client">
Cliente:
</text>
- <text name="client_text" font="SansSerifSmall">
+ <text name="client_text">
Normal
</text>
- <text left="30" name="client_lag_cause" right="-10" />
<button label="" label_selected="" name="network_lagmeter" tool_tip="Estado del lag de la red"/>
<text name="network">
Red:
</text>
- <text name="network_text" font="SansSerifSmall">
+ <text name="network_text">
Normal
</text>
- <text left="30" name="network_lag_cause" right="-10" />
<button label="" label_selected="" name="server_lagmeter" tool_tip="Estado del lag del servidor"/>
<text name="server">
Servidor:
</text>
- <text name="server_text" font="SansSerifSmall">
+ <text name="server_text">
Normal
</text>
- <text left="30" name="server_lag_cause" right="-32" />
<button label="?" name="server_help"/>
<button label="&gt;&gt;" name="minimize"/>
<string name="max_title_msg">
@@ -120,10 +117,10 @@
20
</string>
<string name="server_frame_time_critical_msg">
- Frecuencia (framerate) por debajo de [SERVER_FRAME_RATE_CRITICAL]
+ Frecuencia del simulador -framerate- por debajo de [SERVER_FRAME_RATE_CRITICAL]
</string>
<string name="server_frame_time_warning_msg">
- Frecuencia (framerate) entre [SERVER_FRAME_RATE_CRITICAL] y [SERVER_FRAME_RATE_WARNING]
+ Frecuencia del simulador -framerate- entre [SERVER_FRAME_RATE_CRITICAL] y [SERVER_FRAME_RATE_WARNING]
</string>
<string name="server_frame_time_normal_msg">
Normal
diff --git a/indra/newview/skins/default/xui/es/floater_land_holdings.xml b/indra/newview/skins/default/xui/es/floater_land_holdings.xml
index 5df319905d..5c08b04055 100644
--- a/indra/newview/skins/default/xui/es/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/es/floater_land_holdings.xml
@@ -8,7 +8,7 @@
<column label="" name="hidden"/>
</scroll_list>
<button label="Teleportar" label_selected="Teleportar" name="Teleport" tool_tip="Teleportar al centro de este terreno."/>
- <button width="130" label="Mostrar en el mapa" label_selected="Mostrar en el mapa" name="Show on Map" tool_tip="Mostrar este terreno en el mapa del mundo."/>
+ <button label="Mostrar en el mapa" label_selected="Mostrar en el mapa" name="Show on Map" tool_tip="Mostrar este terreno en el mapa del mundo."/>
<text name="contrib_label">
Contribuciones a sus grupos:
</text>
diff --git a/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml
index 226c3482af..00a6995575 100644
--- a/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="script ed float" title="Script: script nuevo">
<button label="Reiniciar" label_selected="Reiniciar" name="Reset"/>
- <check_box label="Ejecutándose" name="running" left="4"/>
- <check_box label="Mono" name="mono" left="106"/>
+ <check_box label="Ejecutándose" name="running"/>
+ <check_box label="Mono" name="mono"/>
<string name="not_allowed">
No está autorizado para ver este script.
</string>
diff --git a/indra/newview/skins/default/xui/es/floater_lsl_guide.xml b/indra/newview/skins/default/xui/es/floater_lsl_guide.xml
index 859a2d3812..c1e431f274 100644
--- a/indra/newview/skins/default/xui/es/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/es/floater_lsl_guide.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="script ed float" title="Wiki de LSL">
<check_box label="Seguir al cursor" name="lock_check"/>
- <combo_box label="Bloquear" name="history_combo" left_delta="120" width="70"/>
- <button label="Atrás" name="back_btn" left_delta="75"/>
+ <combo_box label="Bloquear" name="history_combo"/>
+ <button label="Atrás" name="back_btn"/>
<button label="Adelante" name="fwd_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_media_browser.xml b/indra/newview/skins/default/xui/es/floater_media_browser.xml
index 79c8980c02..9b60b28537 100644
--- a/indra/newview/skins/default/xui/es/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/es/floater_media_browser.xml
@@ -2,11 +2,10 @@
<floater name="floater_about" title="Navegador">
<layout_stack name="stack1">
<layout_panel name="nav_controls">
- <button label="Atrás" name="back" width="75"/>
- <button label="Adelante" name="forward" left_delta="75" width="70"/>
- <button label="Actualizar" name="reload" left_delta="75"/>
- <combo_box left_delta="75" name="address" width="510"/>
- <button label="Ir" name="go" left_delta="515"/>
+ <button label="Atrás" name="back"/>
+ <button label="Adelante" name="forward"/>
+ <button label="Actualizar" name="reload"/>
+ <button label="Ir" name="go"/>
</layout_panel>
<layout_panel name="parcel_owner_controls">
<button label="Enviar a la parcela la URL actual" name="assign"/>
diff --git a/indra/newview/skins/default/xui/es/floater_mute_object.xml b/indra/newview/skins/default/xui/es/floater_mute_object.xml
index 0cf38c09ee..a2b87b67ab 100644
--- a/indra/newview/skins/default/xui/es/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/es/floater_mute_object.xml
@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="mute by name" title="Ignorar un objeto según su nombre">
- <text name="message" bottom_delta="-40">
- Ignorar según el nombre sólo afecta al chat y los MI del
-objeto, no a sus sonidos.
+ <text name="message">
+ Ignorar según el nombre sólo afecta al chat y los MI del objeto, no a sus sonidos.
Debe escribir exactamente el nombre del objeto.
</text>
- <line_editor name="object_name" bottom_delta="-58">
+ <line_editor name="object_name">
Nombre del objeto
</line_editor>
<button label="OK" name="OK"/>
diff --git a/indra/newview/skins/default/xui/es/floater_pay.xml b/indra/newview/skins/default/xui/es/floater_pay.xml
index 136e6a6f01..9770e90bf4 100644
--- a/indra/newview/skins/default/xui/es/floater_pay.xml
+++ b/indra/newview/skins/default/xui/es/floater_pay.xml
@@ -6,17 +6,16 @@
<button label="20 L$" label_selected="20 L$" name="fastpay 20"/>
<button label="Pagar" label_selected="Pagar" name="pay btn"/>
<button label="Cancelar" label_selected="Cancelar" name="cancel btn"/>
- <text length="1" name="payee_label" type="string" left="5" width="105">
+ <text length="1" name="payee_label" type="string">
Pagar al residente:
</text>
- <text length="1" name="payee_name" type="string" left="115">
+ <text length="1" name="payee_name" type="string">
[FIRST] [LAST]
</text>
- <text length="1" name="fastpay text" type="string" width="100" halign="left">
+ <text length="1" name="fastpay text" type="string">
Pago rápido:
</text>
- <text length="1" name="amount text" type="string" left="4" >
+ <text length="1" name="amount text" type="string">
Cantidad:
</text>
- <line_editor left="60" name="amount" width="55"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_pay_object.xml b/indra/newview/skins/default/xui/es/floater_pay_object.xml
index 770ecc6ae5..86b3af76f8 100644
--- a/indra/newview/skins/default/xui/es/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/es/floater_pay_object.xml
@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Give Money" title="">
- <text length="1" name="payee_group" type="string" left="5" width="110">
+ <text length="1" name="payee_group" type="string">
Pagar al grupo:
</text>
- <text length="1" name="payee_resident" type="string" left="5" width="110">
+ <text length="1" name="payee_resident" type="string">
Pagar al residente:
</text>
- <text length="1" name="payee_name" type="string" left="120" width="180">
+ <text length="1" name="payee_name" type="string">
[FIRST] [LAST]
</text>
- <text length="1" name="object_name_label" type="string" left="5" width="110">
+ <text length="1" name="object_name_label" type="string">
A través del objeto:
</text>
- <text length="1" name="object_name_text" type="string" left="120" width="180">
+ <text length="1" name="object_name_text" type="string">
...
</text>
<text length="1" name="fastpay text" type="string">
diff --git a/indra/newview/skins/default/xui/es/floater_preferences.xml b/indra/newview/skins/default/xui/es/floater_preferences.xml
index df7fc93dd9..56e99e2285 100644
--- a/indra/newview/skins/default/xui/es/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/es/floater_preferences.xml
@@ -1,9 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Preferences" title="Preferencias" min_width="350" width="646">
+<floater name="Preferences" title="Preferencias">
<button label="OK" label_selected="OK" name="OK"/>
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
<button label="Aplicar" label_selected="Aplicar" name="Apply"/>
- <button label="Acerca de..." label_selected="Acerca de..." name="About..." />
+ <button label="Acerca de" label_selected="Acerca de" name="About..."/>
<button label="Ayuda" label_selected="Ayuda" name="Help"/>
- <tab_container name="pref core" tab_width="146" width="646" />
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_animation.xml b/indra/newview/skins/default/xui/es/floater_preview_animation.xml
index 0f2762022a..cea2273089 100644
--- a/indra/newview/skins/default/xui/es/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/es/floater_preview_animation.xml
@@ -3,6 +3,6 @@
<text length="1" name="desc txt" type="string">
Descripción:
</text>
- <button left="12" width="142" label="Ejecutarla en el mundo" label_selected="Parar" name="Anim play btn" tool_tip="Ejecutar esta animación de modo que puedan verla los demás."/>
- <button left="156" width="136" label="Ejecutarla para usted" label_selected="Parar" name="Anim audition btn" tool_tip="Ejecutar esta animación de modo que sólo la vea usted."/>
+ <button label="Ejecutarla en el mundo" label_selected="Parar" name="Anim play btn" tool_tip="Ejecutar esta animación de modo que puedan verla los demás."/>
+ <button label="Ejecutarla para usted" label_selected="Parar" name="Anim audition btn" tool_tip="Ejecutar esta animación de modo que sólo la vea usted."/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_script_search.xml b/indra/newview/skins/default/xui/es/floater_script_search.xml
index dc05370c2b..9cabed9e36 100644
--- a/indra/newview/skins/default/xui/es/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/es/floater_script_search.xml
@@ -1,15 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script search" title="Buscar en el script" width="320">
- <check_box label="Indiferente mays./mins." name="case_text" left="75"/>
- <button label="Buscar" label_selected="Buscar" name="search_btn" width="85"/>
- <button label="Reemplazar" label_selected="Reemplazar" name="replace_btn" left="100" width="85"/>
- <button label="Reemplazar todos" label_selected="Reemplazar todos" name="replace_all_btn" left="190" width="122"/>
- <text length="1" name="txt" type="string" width="65">
+<floater name="script search" title="Buscar en el script">
+ <check_box label="Indiferente mays./mins." name="case_text"/>
+ <button label="Buscar" label_selected="Buscar" name="search_btn"/>
+ <button label="Reemplazar" label_selected="Reemplazar" name="replace_btn"/>
+ <button label="Reemplazar todos" label_selected="Reemplazar todos" name="replace_all_btn"/>
+ <text length="1" name="txt" type="string">
Buscar
</text>
- <text length="1" name="txt2" type="string" width="65">
+ <text length="1" name="txt2" type="string">
Reemplazar
</text>
- <line_editor left="75" name="search_text" width="240" />
- <line_editor left="75" name="replace_text" width="240" />
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_select_key.xml b/indra/newview/skins/default/xui/es/floater_select_key.xml
index 9c889df63a..132985864c 100644
--- a/indra/newview/skins/default/xui/es/floater_select_key.xml
+++ b/indra/newview/skins/default/xui/es/floater_select_key.xml
@@ -2,6 +2,6 @@
<floater name="modal container" title="">
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
<text name="Save item as:">
- Pulse una tecla para seleccionarla
+ Pulse una tecla para seleccionar
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_telehub.xml b/indra/newview/skins/default/xui/es/floater_telehub.xml
index 74084e9db9..921577751a 100644
--- a/indra/newview/skins/default/xui/es/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/es/floater_telehub.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="telehub" title="Punto de Teleporte" min_height="310" height="310">
+<floater name="telehub" title="Punto de Teleporte">
<text name="status_text_connected">
Punto de Teleporte conectado al objeto [OBJECT]
</text>
@@ -9,24 +9,20 @@
<text name="help_text_connected">
Para quitar, pulse Desconectar.
</text>
- <text name="help_text_not_connected" height="38" bottom_delta="-18">
- Seleccione el objeto y pulse Conectar el Punto
-de Teleporte.
+ <text name="help_text_not_connected">
+ Seleccione el objeto y pulse Conectar el Punto de Teleporte.
</text>
<button label="Conectar el Punto de Teleporte" name="connect_btn"/>
<button label="Desconectar" name="disconnect_btn"/>
<text name="spawn_points_text">
- Sucursales (posiciónes, no objetos):
+ Spawn Points (positions, not objects):
</text>
<button label="Añadir sucursales" name="add_spawn_point_btn"/>
<button label="Quitar sucursales" name="remove_spawn_point_btn"/>
<text name="spawn_point_help">
- Seleccione el objeto y pulse Añadir para
-especificar la posición.
+ Seleccione el objeto y pulse Añadir para especificar la posición.
Hecho eso, puede mover o borrar el objeto.
-Las posiciones son relativas al centro del
-Punto de Teleporte.
-Seleccione un ítem de la lista para mostrar su
-posición en el mundo.
+Las posiciones son relativas al centro del Punto de Teleporte.
+Seleccione un ítem de la lista para mostrar su posición en el mundo.
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
index 477d546806..8c3882f0c8 100644
--- a/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
@@ -9,8 +9,8 @@
<text length="1" name="unknown" type="string">
Dimensiones: [DIMENSIONS]
</text>
- <button label="Por defecto" label_selected="Por defecto" name="Default" width="84"/>
- <button label="Ninguna" label_selected="Ninguna" name="None" left="90"/>
+ <button label="Por defecto" label_selected="Por defecto" name="Default"/>
+ <button label="Ninguna" label_selected="Ninguna" name="None"/>
<button label="Blanca" label_selected="Blanca" name="Blank"/>
<check_box label="Ver las carpetas" name="show_folders_check"/>
<search_editor label="Escriba aquí para buscar una" name="inventory search editor"/>
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index e6ff6b0fa5..15c66c8366 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Construir" width="288">
+<floater name="toolbox floater" title="">
<button label="" label_selected="" name="button focus" tool_tip="Visión"/>
<button label="" label_selected="" name="button move" tool_tip="Mover"/>
<button label="" label_selected="" name="button edit" tool_tip="Editar"/>
@@ -19,7 +19,7 @@
<text name="text ruler mode">
Ajuste:
</text>
- <combo_box name="combobox grid mode" width="82">
+ <combo_box name="combobox grid mode">
<combo_item name="World">
Mundo
</combo_item>
@@ -34,8 +34,8 @@
<check_box label="Estirar las texturas" name="checkbox stretch textures"/>
<check_box label="Usar la cuadrícula" name="checkbox snap to grid"/>
<button label="Opciones..." label_selected="Opciones..." name="Options..."/>
- <text name="text status" width="280">
- Arrastrar para mover, Mayús.+arrastrar para copiar
+ <text name="text status">
+ Arrastrar para mover, arrastrar + Mayús. para copiar
</text>
<button label="" label_selected="" name="ToolCube" tool_tip="Cubo"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
@@ -63,7 +63,7 @@
<check_box label="Suavizar" name="radio smooth"/>
<check_box label="Escarpar" name="radio noise"/>
<check_box label="Restablecer" name="radio revert"/>
- <button label="Aplicar" label_selected="Aplicar" name="button apply to selection" tool_tip="Modificar el terreno seleccionado" left="146"/>
+ <button label="Aplicar" label_selected="Aplicar" name="button apply to selection" tool_tip="Modificar el terreno seleccionado"/>
<text name="Bulldozer:">
Bulldozer:
</text>
@@ -73,13 +73,13 @@
<text name="Strength:">
Fuerza
</text>
- <text name="obj_count" left="134">
+ <text name="obj_count">
Objetos seleccionados: [COUNT]
</text>
- <text name="prim_count" left="134">
+ <text name="prim_count">
primitivas: [COUNT]
</text>
- <tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" width="288">
+ <tab_container name="Object Info Tabs">
<panel label="General" name="General">
<text name="Name:">
Nombre:
@@ -144,12 +144,12 @@
El próximo propietario puede:
</text>
<check_box label="Modificarlo" name="checkbox next owner can modify"/>
- <check_box label="Copiarlo" name="checkbox next owner can copy" left_delta="80"/>
- <check_box label="Revenderlo/Darlo" name="checkbox next owner can transfer" left_delta="67"/>
- <text name="label click action" width="180">
+ <check_box label="Copiarlo" name="checkbox next owner can copy"/>
+ <check_box label="Revenderlo/Darlo" name="checkbox next owner can transfer"/>
+ <text name="label click action">
Al pulsarlo con el botón izquierdo:
</text>
- <combo_box name="clickaction" width="192">
+ <combo_box name="clickaction">
<combo_item name="Touch/grab(default)">
Tocar/Agarrar (por defecto)
</combo_item>
@@ -206,7 +206,7 @@
Debe seleccionar todo el objeto para definir los permisos.
</string>
<string name="Cost Default">
- Precio: L$
+ Precio: L$
</string>
<string name="Cost Total">
Precio total: L$
@@ -223,7 +223,7 @@
</panel>
<panel label="Objeto" name="Object">
<text name="select_single">
- Seleccione un sólo prim para editarlo.
+ Seleccione un único prim para editar los parámetros.
</text>
<text name="edit_object">
Modificar los parámetros del objeto:
@@ -277,7 +277,7 @@
</combo_item>
</combo_box>
<text name="label basetype">
- Tipo de objeto a construir
+ Tipo de objeto para construir
</text>
<combo_box name="comboBaseType">
<combo_item name="Box">
@@ -334,7 +334,7 @@
</combo_item>
</combo_box>
<text name="text twist">
- Torsión: Inicio y Fin
+ La torsión: Inicio y Fin
</text>
<spinner label="I" name="Twist Begin"/>
<spinner label="F" name="Twist End"/>
@@ -397,9 +397,9 @@
</combo_item>
</combo_box>
</panel>
- <panel label="Caracter." name="Features">
+ <panel label="Características" name="Features">
<text name="select_single">
- Seleccione un sólo prim para editarlo.
+ Seleccione un sólo prim para editar las características.
</text>
<text name="edit_object">
Editar las características del objeto:
@@ -431,11 +431,11 @@
<text name="glow label">
Resplandor
</text>
- <check_box label="Brillo al &#10;máximo" name="checkbox fullbright" bottom_delta="-21"/>
+ <check_box label="Brillo al máximo" name="checkbox fullbright"/>
<text name="tex gen">
Detallado
</text>
- <combo_box name="combobox texgen" width="86">
+ <combo_box name="combobox texgen">
<combo_item name="Default">
Por defecto
</combo_item>
@@ -530,29 +530,27 @@
Rotación (grados)
</text>
<string name="string repeats per meter">
- Repeticiones por m.
+ Repeticiones por metro
</string>
<string name="string repeats per face">
Repeticiones por cara
</string>
<text name="rpt">
- Repeticiones por m.
+ Repeticiones por metro
</text>
- <spinner left="118" name="TexRot" width="62" />
- <spinner left="118" name="rptctrl" width="62" />
- <button label="Aplicar" label_selected="Aplicar" name="button apply" left_delta="72"/>
+ <button label="Aplicar" label_selected="Aplicar" name="button apply"/>
<text name="tex offset">
Desplazar
</text>
<spinner label="Horizontal (U)" name="TexOffsetU"/>
<spinner label="Vertical (V)" name="TexOffsetV"/>
- <text name="textbox autofix" width="180">
+ <text name="textbox autofix">
Centrar la textura para los media
(primero debe subirla)
</text>
- <button label="Alinear" label_selected="Alinear" name="button align" left="180"/>
+ <button label="Alinear" label_selected="Alinear" name="button align"/>
</panel>
- <panel label="Contenido " name="Contents">
+ <panel label="Contenido" name="Contents">
<button label="Script nuevo" label_selected="Script nuevo" name="button new script"/>
<button label="Permisos..." name="button permissions"/>
</panel>
@@ -567,19 +565,19 @@
<text name="label_area">
Superficie: [AREA] m²
</text>
- <button label="Acerca del terreno..." label_selected="Acerca del terreno..." name="button about land" width="140"/>
+ <button label="Acerca del terreno..." label_selected="Acerca del terreno..." name="button about land"/>
<check_box label="Mostrar los propietarios" name="checkbox show owners" tool_tip="El color de las parcelas es según su propietario"/>
- <button label="?" label_selected="?" name="button show owners help" left_delta="150"/>
+ <button label="?" label_selected="?" name="button show owners help"/>
<text name="label_parcel_modify">
Modificar la parcela
</text>
- <button label="Subdividir..." label_selected="Subdividir..." name="button subdivide land" width="140"/>
- <button label="Unir..." label_selected="Unir..." name="button join land" width="140"/>
+ <button label="Subdividir..." label_selected="Subdividir..." name="button subdivide land"/>
+ <button label="Unir..." label_selected="Unir..." name="button join land"/>
<text name="label_parcel_trans">
Transacciones de terreno
</text>
- <button label="Comprar terreno..." label_selected="Comprar terreno..." name="button buy land" width="140"/>
- <button label="Abandonar el terreno..." label_selected="Abandonar el terreno..." name="button abandon land" width="140"/>
+ <button label="Comprar terreno..." label_selected="Comprar terreno..." name="button buy land"/>
+ <button label="Abandonar el terreno..." label_selected="Abandonar el terreno..." name="button abandon land"/>
</panel>
<string name="status_rotate">
Arrastre las bandas de color para girar el objeto
@@ -588,7 +586,7 @@
Pulse y arrastre para estirar el lado seleccionado
</string>
<string name="status_move">
- Arrastrar para mover, Mayús.+arrastrar para copiar
+ Arrastrar para mover, arrastrar + Mayús. para copiar
</string>
<string name="status_modifyland">
Mantenga pulsado para modificar el terreno
diff --git a/indra/newview/skins/default/xui/es/floater_top_objects.xml b/indra/newview/skins/default/xui/es/floater_top_objects.xml
index 95f2c39d42..ce0c22062b 100644
--- a/indra/newview/skins/default/xui/es/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/es/floater_top_objects.xml
@@ -11,26 +11,23 @@
<column label="Tiempo" name="time"/>
<column label="Tiempo en Mono" name="mono_time"/>
</scroll_list>
- <line_editor font="SansSerifSmall" left="140" name="id_editor" width="280"/>
- <line_editor font="SansSerifSmall" left="140" name="object_name_editor" width="280"/>
- <line_editor font="SansSerifSmall" left="140" name="owner_name_editor" width="280"/>
<text name="id_text">
ID del objeto:
</text>
- <button label="Mostrar la baliza" name="show_beacon_btn" width="115"/>
+ <button label="Mostrar la baliza" name="show_beacon_btn"/>
<text name="obj_name_text">
Nombre del objeto:
</text>
- <button label="Filtro" name="filter_object_btn" width="115"/>
- <text name="owner_name_text" width="130">
+ <button label="Filtro" name="filter_object_btn"/>
+ <text name="owner_name_text">
Nombre del propietario:
</text>
- <button label="Filtro" name="filter_owner_btn" width="115"/>
- <button label="Devolver lo seleccionado" name="return_selected_btn" width="170"/>
- <button label="Devolver todo" name="return_all_btn" left="190"/>
- <button label="Desactivar lo seleccionado" name="disable_selected_btn" width="170"/>
- <button label="Desactivar todo" name="disable_all_btn" left="190"/>
- <button label="Actualizar" name="refresh_btn" width="115"/>
+ <button label="Filtro" name="filter_owner_btn"/>
+ <button label="Devolver lo seleccionado" name="return_selected_btn"/>
+ <button label="Devolver todo" name="return_all_btn"/>
+ <button label="Desactivar lo seleccionado" name="disable_selected_btn"/>
+ <button label="Desactivar todo" name="disable_all_btn"/>
+ <button label="Actualizar" name="refresh_btn"/>
<string name="top_scripts_title">
Scripts según su uso
</string>
diff --git a/indra/newview/skins/default/xui/es/floater_url_entry.xml b/indra/newview/skins/default/xui/es/floater_url_entry.xml
index f7c85ff068..abdd69b090 100644
--- a/indra/newview/skins/default/xui/es/floater_url_entry.xml
+++ b/indra/newview/skins/default/xui/es/floater_url_entry.xml
@@ -1,9 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="url_entry" title="">
<text name="media_label">
- URL del media:
+ URL para media:
</text>
- <combo_box left="106" name="media_entry" width="354" />
<button label="OK" name="ok_btn"/>
<button label="Cancelar" name="cancel_btn"/>
<button label="Limpiar" name="clear_btn"/>
diff --git a/indra/newview/skins/default/xui/es/floater_water.xml b/indra/newview/skins/default/xui/es/floater_water.xml
index 934fc7882b..5a759af5ff 100644
--- a/indra/newview/skins/default/xui/es/floater_water.xml
+++ b/indra/newview/skins/default/xui/es/floater_water.xml
@@ -11,20 +11,20 @@
<text name="BHText">
Color del agua
</text>
- <button label="?" name="WaterFogColorHelp" left="175" />
+ <button label="?" name="WaterFogColorHelp"/>
<color_swatch label="" name="WaterFogColor" tool_tip="Pulse para abrir el selector de color"/>
<text name="WaterFogDensText">
Transparencia
</text>
- <button label="?" name="WaterFogDensityHelp" left="175" />
+ <button label="?" name="WaterFogDensityHelp"/>
<text name="WaterUnderWaterFogModText">
Modificar la claridad del agua
</text>
- <button label="?" name="WaterUnderWaterFogModHelp" left="175" />
+ <button label="?" name="WaterUnderWaterFogModHelp"/>
<text name="BDensText">
Tamaño de las ondulaciones
</text>
- <button label="?" name="WaterNormalScaleHelp" left="405"/>
+ <button label="?" name="WaterNormalScaleHelp"/>
<text name="BHText2">
1
</text>
@@ -37,29 +37,29 @@
<text name="HDText">
Escala de Fresnel
</text>
- <button label="?" name="WaterFresnelScaleHelp" left="405"/>
+ <button label="?" name="WaterFresnelScaleHelp"/>
<text name="FresnelOffsetText">
Coeficiente de reflexión
</text>
- <button label="?" name="WaterFresnelOffsetHelp" left="405"/>
+ <button label="?" name="WaterFresnelOffsetHelp"/>
<text name="DensMultText">
Refracción de la superficie
</text>
- <button label="?" name="WaterScaleAboveHelp" left="640"/>
+ <button label="?" name="WaterScaleAboveHelp"/>
<text name="WaterScaleBelowText">
Refracción bajo la superficie
</text>
- <button label="?" name="WaterScaleBelowHelp" left="640"/>
+ <button label="?" name="WaterScaleBelowHelp"/>
<text name="MaxAltText">
Desenfoque
</text>
- <button label="?" name="WaterBlurMultiplierHelp" left="640"/>
+ <button label="?" name="WaterBlurMultiplierHelp"/>
</panel>
<panel label="Imagen" name="Waves">
<text name="BHText">
Sentido de la onda grande
</text>
- <button label="?" name="WaterWave1Help" left="170"/>
+ <button label="?" name="WaterWave1Help"/>
<text name="WaterWave1DirXText">
X
</text>
@@ -69,7 +69,7 @@
<text name="BHText2">
Sentido de la onda pequeña
</text>
- <button label="?" name="WaterWave2Help" left="170"/>
+ <button label="?" name="WaterWave2Help"/>
<text name="WaterWave2DirXText">
X
</text>
diff --git a/indra/newview/skins/default/xui/es/floater_windlight_options.xml b/indra/newview/skins/default/xui/es/floater_windlight_options.xml
index e240dea0b5..79b70d4d59 100644
--- a/indra/newview/skins/default/xui/es/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/es/floater_windlight_options.xml
@@ -6,7 +6,7 @@
<button label="Nuevo" label_selected="Nuevo" name="WLNewPreset"/>
<button label="Guardar" label_selected="Guardar" name="WLSavePreset"/>
<button label="Borrar" label_selected="Borrar" name="WLDeletePreset"/>
- <button font="SansSerifSmall" width="150" left_delta="90" label="Editor del ciclo de un día" label_selected="Editor del ciclo de un día" name="WLDayCycleMenuButton"/>
+ <button label="Editor del ciclo de un día" label_selected="Editor del ciclo de un día" name="WLDayCycleMenuButton"/>
<tab_container name="WindLight Tabs">
<panel label="Atmósfera" name="Atmosphere">
<text name="BHText">
@@ -122,7 +122,7 @@
<text name="WLCloudColorText">
Color de las nubes
</text>
- <button label="?" name="WLCloudColorHelp" left="190" />
+ <button label="?" name="WLCloudColorHelp"/>
<text name="BHText">
R
</text>
@@ -138,7 +138,7 @@
<text name="WLCloudColorText2">
Posición/Densidad de las nubes
</text>
- <button label="?" name="WLCloudDensityHelp" left="190"/>
+ <button label="?" name="WLCloudDensityHelp"/>
<text name="BHText5">
X
</text>
@@ -156,12 +156,11 @@
Altitud de las nubes
</text>
<button label="?" name="WLCloudScaleHelp"/>
- <text name="WLCloudDetailText" font="SansSerifSmall">
- Detalle de las nubes
-(Posición/Densidad)
+ <text name="WLCloudDetailText">
+ Detalle de las nubes (Posición/Densidad)
</text>
<button label="?" name="WLCloudDetailHelp"/>
- <text name="BHText8" bottom="-113">
+ <text name="BHText8">
X
</text>
<text name="BHText9">
@@ -170,19 +169,18 @@
<text name="BHText10">
D
</text>
- <slider bottom="-127" name="WLCloudDetailX"/>
<text name="WLCloudScrollXText">
- Velocidad de X
+ Velocidad de las nubes: X
</text>
<button label="?" name="WLCloudScrollXHelp"/>
<check_box label="Bloquear" name="WLCloudLockX"/>
<text name="WLCloudScrollYText">
- Velocidad de Y
+ Velocidad de las nubes: Y
</text>
<button label="?" name="WLCloudScrollYHelp"/>
<check_box label="Bloquear" name="WLCloudLockY"/>
<check_box label="Incluir nubes clásicas" name="DrawClassicClouds"/>
- <button label="?" name="WLClassicCloudsHelp" left="618"/>
+ <button label="?" name="WLClassicCloudsHelp"/>
</panel>
</tab_container>
<string name="WLDefaultSkyNames">
diff --git a/indra/newview/skins/default/xui/es/panel_group_general.xml b/indra/newview/skins/default/xui/es/panel_group_general.xml
index 68245ffb70..e5fd4b3aae 100644
--- a/indra/newview/skins/default/xui/es/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_general.xml
@@ -37,9 +37,9 @@ Ponga su ratón sobre las opciones para más información.
(los propietarios aparecen en negrilla)
</text>
<name_list name="visible_members">
- <column label="Nombre del miembro" name="name" relwidth="0.40"/>
- <column label="Etiqueta" name="title" relwidth="0.25"/>
- <column label="Última conexión" name="online" relwidth="0.35"/>
+ <column label="Nombre del miembro" name="name"/>
+ <column label="Etiqueta" name="title"/>
+ <column label="Última conexión" name="online"/>
</name_list>
<text name="text_group_preferences">
Preferencias del grupo
@@ -47,9 +47,9 @@ Ponga su ratón sobre las opciones para más información.
<panel name="preferences_container">
<check_box label="Mostrar en la búsqueda" name="show_in_group_list" tool_tip="Dejar que la gente vea este grupo en los resultados de la búsqueda."/>
<check_box label="Inscripción libre" name="open_enrollement" tool_tip="Definir si se admiten al grupo nuevos miembros sin que sea preciso invitárseles."/>
- <check_box label="Cuota de inscripción&#10; en L$:" name="check_enrollment_fee" tool_tip="Define si se requiere una cuota para entrar al grupo."/>
- <spinner width="60" left_delta="130" name="spin_enrollment_fee" tool_tip="Cuando está marcado &apos;Cuota de inscripción&apos;, los miembros nuevos deben pagar esta cuota para entrar al grupo."/>
- <combo_box bottom_delta="-38" width="150" name="group_mature_check" tool_tip="Establece si la información de su grupo es &apos;mature&apos;.">
+ <check_box label="Cuota de inscripción en L$" name="check_enrollment_fee" tool_tip="Define si se requiere una cuota para entrar al grupo."/>
+ <spinner name="spin_enrollment_fee" tool_tip="Cuando está marcado &apos;Cuota de inscripción&apos;, los miembros nuevos deben pagar esta cuota para entrar al grupo."/>
+ <combo_box name="group_mature_check" tool_tip="Establece si la información de su grupo es &apos;mature&apos;.">
<combo_item name="select_mature">
- Elegir Calificación -
</combo_item>
diff --git a/indra/newview/skins/default/xui/es/panel_group_invite.xml b/indra/newview/skins/default/xui/es/panel_group_invite.xml
index f66f0c473a..5f5f2c6e2e 100644
--- a/indra/newview/skins/default/xui/es/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_invite.xml
@@ -1,14 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Invitar a un miembro" name="invite_panel" width="224">
- <text name="help_text" height="72" bottom_delta="-96" width="214">
- Puede seleccionar a varios residentes
-para invitarles a su grupo. Para
-empezar, pulse &apos;Abrir el selector de
-residentes&apos;.
+<panel label="Invitar a un miembro" name="invite_panel">
+ <text name="help_text">
+ Puede seleccionar a varios residentes para
+invitarles a su grupo. Para empezar, pulse
+&apos;Abrir el selector de residentes&apos;.
</text>
- <button bottom_delta="-10" label="Abrir el selector de residentes" name="add_button" tool_tip=""/>
- <name_list height="156" bottom_delta="-160" name="invitee_list" tool_tip="Para seleccionar a varios residentes, mantenga pulsada la tecla Ctrl y vaya pulsando sus nombres."/>
- <button left_delta="-7" width="214" label="Eliminar de la lista a los seleccionados" name="remove_button" tool_tip="Elimina los residentes seleccionados de la lista de invitaciones."/>
+ <button label="Abrir el selector de residentes" name="add_button" tool_tip=""/>
+ <name_list name="invitee_list" tool_tip="Para seleccionar a varios residentes, mantenga pulsada la tecla Ctrl y vaya pulsando sus nombres."/>
+ <button label="Eliminar de la lista a los seleccionados" name="remove_button" tool_tip="Elimina los residentes seleccionados de la lista de invitaciones."/>
<text name="role_text">
Elegir qué rol asignarles:
</text>
diff --git a/indra/newview/skins/default/xui/es/panel_group_land_money.xml b/indra/newview/skins/default/xui/es/panel_group_land_money.xml
index b4ea0dbeda..32473b8133 100644
--- a/indra/newview/skins/default/xui/es/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_land_money.xml
@@ -13,17 +13,17 @@
<string name="loading_txt">
Cargando...
</string>
- <text name="group_land_heading" width="250">
+ <text name="group_land_heading">
Terreno propiedad del grupo
</text>
<scroll_list name="group_parcel_list">
- <column label="Parcela" name="name" width="100"/>
- <column label="Región" name="location" width="100"/>
- <column label="Tipo" name="type" width="100"/>
- <column label="Superficie" name="area" width="81"/>
+ <column label="Parcela" name="name"/>
+ <column label="Región" name="location"/>
+ <column label="Tipo" name="type"/>
+ <column label="Superficie" name="area"/>
<column label="" name="hidden"/>
</scroll_list>
- <button label="Mostrar en el mapa" label_selected="Mostrar en el mapa" name="map_button" left="282" width="130"/>
+ <button label="Mostrar en el mapa" label_selected="Mostrar en el mapa" name="map_button"/>
<text name="total_contributed_land_label">
Contribución total:
</text>
@@ -52,8 +52,7 @@
m² ([AMOUNT] máx.)
</text>
<text name="group_over_limit_text">
- Los miembros del grupo deben contribuir con más créditos de terreno
-para mantener el terreno en uso.
+ Los miembros del grupo deben contribuir con más créditos de terreno para mantener el terreno en uso.
</text>
<text name="group_money_heading">
L$ del grupo
diff --git a/indra/newview/skins/default/xui/es/panel_group_notices.xml b/indra/newview/skins/default/xui/es/panel_group_notices.xml
index 1ca673332b..8215575362 100644
--- a/indra/newview/skins/default/xui/es/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_notices.xml
@@ -1,7 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Avisos" name="notices_tab">
<text name="help_text">
- Los avisos son una forma rápida de comunicación dentro de un grupo, difundiendo un mensaje y, si se quiere, añadiéndole un ítem. Los avisos sólo los reciben los miembros del grupo cuyo rol tiene adjudicada tal habilidad. Puede desactivar los avisos en la pestaña General.
+ Los avisos son una forma rápida de comunicación dentro
+de un grupo, difundiendo un mensaje y,
+si se quiere, añadiéndole un ítem. Los avisos sólo
+los reciben los miembros del grupo cuyo rol
+tiene adjudicada tal habilidad. Puede desactivar
+los avisos en la pestaña General
</text>
<text name="no_notices_text">
No hay avisos pasados.
@@ -11,9 +16,9 @@
Archivo de avisos del grupo
</text>
<text name="lbl2">
- Los avisos se mantienen durante 14 días. Pulse en la lista de abajo el que
-quiere ver. Pulse el botón &apos;Actualizar&apos; para comprobar si se han recibido avisos
-nuevos. Las listas de avisos tienen un límite de 200 avisos por día.
+ Los avisos se mantienen durante 14 días. Pulse en la lista de abajo el que quiere ver.
+Pulse el botón &apos;Actualizar&apos; para comprobar si se han recibido avisos nuevos.
+Las listas de avisos tienen un límite de 200 avisos por día.
</text>
<scroll_list name="notice_list">
<column label="Asunto" name="subject"/>
@@ -30,8 +35,8 @@ nuevos. Las listas de avisos tienen un límite de 200 avisos por día.
Crear un aviso
</text>
<text name="lbl2">
- Para enviar un aviso, debe escribir un asunto. Puede añadir un
-ítem al aviso arrastrándolo desde su inventario a este panel.
+ Para enviar un aviso, debe escribir un asunto. Puede añadir un ítem
+al aviso arrastrándolo desde su inventario a este panel.
Los ítems anexados deben ser copiables y transferibles,
y no se puede enviar una carpeta.
</text>
diff --git a/indra/newview/skins/default/xui/es/panel_group_roles.xml b/indra/newview/skins/default/xui/es/panel_group_roles.xml
index 2739a3da5e..8cc1a4ba9d 100644
--- a/indra/newview/skins/default/xui/es/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_roles.xml
@@ -12,9 +12,7 @@
Miembros y Roles
</text>
<text name="static2">
- Los miembros del grupo tienen asignados roles con distintas capacidades.
-Estas configuraciones son fácilmente personalizables, para facilitar una
-mayor flexibilidad y organización.
+ Los miembros del grupo tienen asignados roles con distintas capacidades. Estas configuraciones son fácilmente personalizables, para facilitar una mayor flexibilidad y organización.
</text>
</panel>
<panel name="roles_header">
@@ -22,14 +20,12 @@ mayor flexibilidad y organización.
Roles
</text>
<text name="role_properties_modifiable">
- Elija un rol de los de abajo. Puede modificar su nombre, su
-descripción, y la etiqueta de los miembros.
+ Elija un rol de los de abajo. Puede modificar su nombre, su descripción, y la etiqueta de los miembros.
</text>
<text name="role_properties_not_modifiable">
- Elija un rol de los de abajo para ver sus propiedades, miembros, y qué
-capacidades tiene asignadas.
+ Elija un rol de los de abajo para ver sus propiedades, miembros, y qué capacidades tiene asignadas.
</text>
- <text bottom_delta="-28" name="role_actions_modifiable">
+ <text name="role_actions_modifiable">
También puede asignar capacidades al rol.
</text>
<text name="role_actions_not_modifiable">
@@ -41,32 +37,29 @@ capacidades tiene asignadas.
Capacidades
</text>
<text name="static2">
- Puede ver una descripción de la capacidad, y qué miembros y roles pueden
-realizarla.
+ Puede ver una descripción de la capacidad, y qué miembros y roles pueden realizarla.
</text>
</panel>
- <tab_container height="164" name="roles_tab_container">
- <panel height="148" label="Miembros" name="members_sub_tab" tool_tip="Miembros">
- <line_editor bottom="127" name="search_text"/>
- <button label="Buscar" name="search_button" width="75"/>
- <button label="Verlos todos" name="show_all_button" left_delta="80"/>
- <name_list name="member_list" bottom_delta="-105" height="104" >
+ <tab_container name="roles_tab_container">
+ <panel label="Miembros" name="members_sub_tab" tool_tip="Miembros">
+ <button label="Buscar" name="search_button"/>
+ <button label="Verlos todos" name="show_all_button"/>
+ <name_list name="member_list">
<column label="Nombre del miembro" name="name"/>
<column label="Cuotas donadas" name="donated"/>
<column label="Última conexión" name="online"/>
</name_list>
- <button label="Invitar a un nuevo miembro..." name="member_invite" width="175"/>
+ <button label="Invitar a un nuevo miembro..." name="member_invite"/>
<button label="Expulsar del grupo" name="member_eject"/>
<string name="help_text">
Puede añadir o quitar los roles asignados a los miembros.
Seleccione varios nombres manteniendo pulsada la tecla Ctrl y pulsando en cada uno de ellos.
</string>
</panel>
- <panel height="148" label="Roles" name="roles_sub_tab">
- <line_editor bottom="127" name="search_text"/>
- <button label="Buscar" name="search_button" width="75"/>
- <button label="Verlos todos" name="show_all_button" left_delta="80"/>
- <scroll_list name="role_list" bottom_delta="-104" height="104">
+ <panel label="Roles" name="roles_sub_tab">
+ <button label="Buscar" name="search_button"/>
+ <button label="Verlos todos" name="show_all_button"/>
+ <scroll_list name="role_list">
<column label="Nombre del rol" name="name"/>
<column label="Etiqueta" name="title"/>
<column label="Miembros" name="members"/>
@@ -80,11 +73,10 @@ Seleccione varios nombres manteniendo pulsada la tecla Ctrl y pulsando en cada u
Los roles de &apos;Todos&apos; y &apos;Propietarios&apos; son especiales, y no pueden eliminarse.
</string>
</panel>
- <panel height="148" label="Capacidades" name="actions_sub_tab">
- <line_editor bottom="127" name="search_text"/>
- <button label="Buscar" name="search_button" width="75"/>
- <button label="Verlos todos" name="show_all_button" left_delta="80"/>
- <scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Elija una capacidad para verla más en detalle.">
+ <panel label="Capacidades" name="actions_sub_tab">
+ <button label="Buscar" name="search_button"/>
+ <button label="Verlos todos" name="show_all_button"/>
+ <scroll_list name="action_list" tool_tip="Elija una capacidad para verla más en detalle.">
<column label="" name="icon"/>
<column label="" name="action"/>
</scroll_list>
diff --git a/indra/newview/skins/default/xui/es/panel_groups.xml b/indra/newview/skins/default/xui/es/panel_groups.xml
index 232de85522..1259ded62f 100644
--- a/indra/newview/skins/default/xui/es/panel_groups.xml
+++ b/indra/newview/skins/default/xui/es/panel_groups.xml
@@ -1,11 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="groups">
- <scroll_list bottom="50" name="group list"/>
- <text bottom="16" height="32" name="groupdesc" width="268">
- El grupo que tiene activado actualmente se
-muestra en negrilla.
+ <text name="groupdesc">
+ El grupo que tiene activado actualmente se muestra en negrilla
</text>
- <text bottom="3" name="groupcount" width="268">
+ <text name="groupcount">
Pertenece a [COUNT] grupo/s (de un máximo de [MAX]).
</text>
<button label="MI/Llamar" name="IM" tool_tip="Abrir una sesión de mensajes instantáneos"/>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_general.xml b/indra/newview/skins/default/xui/es/panel_preferences_general.xml
index 9e5cd88603..b711821e5f 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_general.xml
@@ -10,15 +10,9 @@
</radio_group>
<check_box label="Ver mi posición inicial en la pantalla de inicio de sesión" name="show_location_checkbox"/>
<combo_box name="fade_out_combobox" width="166">
- <combo_item name="Never">
- Nunca
- </combo_item>
- <combo_item name="Show Temporarily">
- Mostrarlos temporalmente
- </combo_item>
- <combo_item name="Always">
- Siempre
- </combo_item>
+ <combo_box.item name="Never" label="Nunca"/>
+ <combo_box.item name="Show Temporarily" label="Mostrarlos temporalmente"/>
+ <combo_box.item name="Always" label="Siempre"/>
</combo_box>
<check_box label="Nombres de avatar en pequeño" name="small_avatar_names_checkbox"/>
<check_box label="No ver mi nombre en mi pantalla" name="show_my_name_checkbox"/>
@@ -80,49 +74,29 @@ contenido calificado:
&lt;escriba el nombre de la región&gt;
</string>
<combo_box name="crash_behavior_combobox" width="166">
- <combo_item length="1" name="Askbeforesending" type="string">
- Preguntar antes de enviar
- </combo_item>
- <combo_item length="1" name="Alwayssend" type="string">
- Enviar siempre
- </combo_item>
- <combo_item length="1" name="Neversend" type="string">
- No enviar nunca
- </combo_item>
+ <combo_box.item length="1" name="Askbeforesending" type="string" label="Preguntar antes de enviar"/>
+ <combo_box.item length="1" name="Alwayssend" type="string" label="Enviar siempre"/>
+ <combo_box.item length="1" name="Neversend" type="string" label="No enviar nunca"/>
</combo_box>
<combo_box name="language_combobox" width="166">
- <combo_item name="System Default Language">
- Predeterminado del sistema
- </combo_item>
- <combo_item length="1" name="English" type="string">
- English (Inglés)
- </combo_item>
- <combo_item name="Danish">
- Dansk (Danés) - Beta
- </combo_item>
- <combo_item length="1" name="Deutsch(German)" type="string">
- Deutsch (Alemán) - Beta
- </combo_item>
- <combo_item name="Spanish" type="string">
- Español - Beta
- </combo_item>
- <combo_item length="1" name="French" type="string">
- Français (Francés) - Beta
- </combo_item>
+ <combo_box.item name="System Default Language" label="Predeterminado del sistema"/>
+ <combo_box.item length="1" name="English" type="string" label="English (Inglés)"/>
+ <combo_box.item name="Danish" label="Dansk (Danés) - Beta"/>
+ <combo_box.item length="1" name="Deutsch(German)" type="string" label="Deutsch (Alemán) - Beta"/>
+ <combo_box.item name="Spanish" type="string" label="Español - Beta"/>
+ <combo_box.item length="1" name="French" type="string" label="Français (Francés) - Beta"/>
+ <combo_box.item name="Hungarian" label="Magyar (Húngaro) - Beta"/>
+ <combo_box.item name="Polish" label="Polski (Polaco) - Beta"/>
+ <combo_box.item name="Portugese" label="Portugués (Portugués) - Beta"/>
+ <combo_box.item length="1" name="Chinese" type="string" label="中文 (简体) (Chino) - Beta"/>
+ <combo_box.item length="1" name="(Japanese)" type="string" label="日本語 (Japonés) - Beta"/>
+ <combo_box.item length="1" name="(Korean)" type="string" label="한국어 (Coreano) - Beta"/>
<combo_item name="Italian">
Italiano - Beta
</combo_item>
- <combo_item name="Hungarian">
- Magyar (Húngaro) - Beta
- </combo_item>
<combo_item name="Dutch">
Nederlands (Neerlandés) - Beta
</combo_item>
- <combo_item name="Polish">
- Polski (Polaco) - Beta
- </combo_item>
- <combo_item name="Portugese">
- Portugués (Portugués) - Beta
</combo_item>
<combo_item name="Russian">
Русский (Ruso) - Beta
@@ -132,16 +106,6 @@ contenido calificado:
</combo_item>
<combo_item name="Ukrainian">
Українська (Ucraniano) - Beta
- </combo_item>
- <combo_item length="1" name="Chinese" type="string">
- 中文 (简体) (Chino) - Beta
- </combo_item>
- <combo_item length="1" name="(Japanese)" type="string">
- 日本語 (Japonés) - Beta
- </combo_item>
- <combo_item length="1" name="(Korean)" type="string">
- 한국어 (Coreano) - Beta
- </combo_item>
</combo_box>
<check_box label="Compartir el idioma con los objetos" name="language_is_public" tool_tip="Hace que los objetos con script del mundo sepan su idioma preferido."/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_covenant.xml b/indra/newview/skins/default/xui/es/panel_region_covenant.xml
index 220479098b..3f9e782bd7 100644
--- a/indra/newview/skins/default/xui/es/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_covenant.xml
@@ -22,15 +22,14 @@
Última modificación el miér. 31 de dic. de 1969, 16:00:00
</text>
<button label="?" name="covenant_help"/>
- <text_editor name="covenant_editor" bottom="-263" height="178" >
+ <text_editor name="covenant_editor">
No se ha aportado un contrato para este estado.
</text_editor>
<button label="Cambiar" name="reset_covenant"/>
<text name="covenant_help_text">
- Los cambios en el contrato se mostrarán en todas las parcelas
- del estado.
+ Los cambios en el contrato se mostrarán en todas las parcelas del estado.
</text>
- <text name="covenant_instructions" bottom_delta="-31" >
+ <text name="covenant_instructions">
Para cambiar el contrato de este estado, arrastre y suelte una nota.
</text>
<text name="region_section_lbl">
@@ -76,7 +75,6 @@
El terreno comprado en esta región se podrá unir o subdividir.
</string>
<string name="can_not_change">
- El terreno comprado en esta región no se podrá unir ni
-subdividir.
+ El terreno comprado en esta región no se podrá unir ni subdividir.
</string>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_debug.xml b/indra/newview/skins/default/xui/es/panel_region_debug.xml
index a7999cc54d..a722235243 100644
--- a/indra/newview/skins/default/xui/es/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_debug.xml
@@ -7,13 +7,13 @@
desconocida
</text>
<check_box label="Desactivar los scripts" name="disable_scripts_check" tool_tip="Descativar todos los scripts en esta región"/>
- <button label="?" name="disable_scripts_help" left="215"/>
+ <button label="?" name="disable_scripts_help"/>
<check_box label="Desactivar las colisiones" name="disable_collisions_check" tool_tip="Desactiva las colisiones (no las de avatares) en esta región"/>
- <button label="?" name="disable_collisions_help" left="215"/>
+ <button label="?" name="disable_collisions_help"/>
<check_box label="Desactivar las propiedades físicas" name="disable_physics_check" tool_tip="Desactiva toda la física en esta región"/>
- <button label="?" name="disable_physics_help" left="215"/>
+ <button label="?" name="disable_physics_help"/>
<button label="Aplicar" name="apply_btn"/>
- <text name="objret_text_lbl" width="130">
+ <text name="objret_text_lbl">
Devolver el objeto
</text>
<text name="resident_text_lbl">
@@ -30,10 +30,10 @@
<check_box label="Devolver sólo los objetos que están en terreno de otro" name="return_other_land" tool_tip="Devolver sólo los objetos que están en terreno de otro"/>
<check_box label="Devolver los objetos de cualquier región de este estado" name="return_estate_wide" tool_tip="Devolver los objetos de todas las regiones que forman este estado"/>
<button label="Devolver" name="return_btn"/>
- <button width="280" label="Listar los objetos que colisionan..." name="top_colliders_btn" tool_tip="Lista de los objetos con más posibles colisiones potenciales"/>
- <button label="?" name="top_colliders_help" left="297"/>
- <button width="280" label="Listar los scripts según su uso..." name="top_scripts_btn" tool_tip="Lista de los objetos que más tiempo emplean ejecutando scripts"/>
- <button label="?" name="top_scripts_help" left="297"/>
+ <button label="Listar los objetos que colisionan..." name="top_colliders_btn" tool_tip="Lista de los objetos con más posibles colisiones potenciales"/>
+ <button label="?" name="top_colliders_help"/>
+ <button label="Listar los scripts según su uso..." name="top_scripts_btn" tool_tip="Lista de los objetos que más tiempo emplean ejecutando scripts"/>
+ <button label="?" name="top_scripts_help"/>
<button label="Reiniciar la región" name="restart_btn" tool_tip="Cuenta atrás de 2 minutos y reiniciar la región"/>
<button label="?" name="restart_help"/>
<button label="Retrasar el reinicio" name="cancel_restart_btn" tool_tip="Retrasar una hora el reinicio de la región"/>
diff --git a/indra/newview/skins/default/xui/es/panel_region_estate.xml b/indra/newview/skins/default/xui/es/panel_region_estate.xml
index f16ec89cb0..93155d828d 100644
--- a/indra/newview/skins/default/xui/es/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_estate.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Estado" name="Estate">
<text name="estate_help_text">
- Los cambios en las configuraciones de esta
-pestaña afectarán a todas las regiones del estado.
+ Los cambios en las configuraciones de esta pestaña afectarán a todas
+las regiones de este estado.
</text>
<text name="estate_text">
Estado:
@@ -24,16 +24,16 @@ pestaña afectarán a todas las regiones del estado.
<check_box label="Permitir el acceso público" name="externally_visible_check"/>
<button label="?" name="externally_visible_help"/>
<text name="Only Allow">
- Impedir el acceso a Residentes...
+ Impedir el acceso a:
</text>
- <check_box label="sin información de pago archivada" name="limit_payment" tool_tip="Impedir el acceso a los residentes no identificados."/>
- <check_box label="que no han verificado si son adultos" name="limit_age_verified" tool_tip="Impedir el acceso a residentes que no hayan verificado su edad. Para más información, vea support.secondlife.com"/>
+ <check_box label="Residentes sin información de pago archivada" name="limit_payment" tool_tip="Impedir el acceso a los residentes no identificados."/>
+ <check_box label="Residentes de los que no se ha verificado si son adultos" name="limit_age_verified" tool_tip="Impedir el acceso a residentes que no hayan verificado su edad. Para más información, vea support.secondlife.com"/>
<check_box label="Permitir el chat de voz" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<check_box label="Permitir el teleporte a cualquier punto" name="allow_direct_teleport"/>
<button label="?" name="allow_direct_teleport_help"/>
- <text name="abuse_email_text" width="260">
- Dirección de correo-e para infracciones:
+ <text name="abuse_email_text">
+ Dirección de correo electrónico para infracciones:
</text>
<string name="email_unsupported">
Característica no disponible
@@ -63,7 +63,7 @@ pestaña afectarán a todas las regiones del estado.
<text name="ban_resident_label">
Residentes con el acceso prohibido:
</text>
- <button label="?" name="ban_resident_help" right="476"/>
+ <button label="?" name="ban_resident_help"/>
<button label="Quitar..." name="remove_banned_avatar_btn"/>
<button label="Añadir..." name="add_banned_avatar_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_general.xml b/indra/newview/skins/default/xui/es/panel_region_general.xml
index 155161489e..64169e427b 100644
--- a/indra/newview/skins/default/xui/es/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_general.xml
@@ -30,11 +30,11 @@
<button label="?" name="land_resell_help"/>
<check_box label="Permitir unir/dividir el terreno" name="allow_parcel_changes_check"/>
<button label="?" name="parcel_changes_help"/>
- <check_box label="Bloquear el mostrar el terreno en &#10;la búsqueda." name="block_parcel_search_check" tool_tip="Permitir que la gente vea esta región y sus parcelas en los resultados de la búsqueda."/>
+ <check_box label="Bloquear el mostrar el terreno en la búsqueda." name="block_parcel_search_check" tool_tip="Permitir que la gente vea esta región y sus parcelas en los resultados de la búsqueda."/>
<button label="?" name="parcel_search_help"/>
- <spinner label="Nº máximo de avatares" name="agent_limit_spin" label_width="120" width="180"/>
+ <spinner label="Nº máximo de avatares" name="agent_limit_spin"/>
<button label="?" name="agent_limit_help"/>
- <spinner label="Plus de objetos" name="object_bonus_spin" label_width="120" width="180"/>
+ <spinner label="Plus de objetos" name="object_bonus_spin"/>
<button label="?" name="object_bonus_help"/>
<text label="Calificación" name="access_text">
Calificación:
@@ -54,6 +54,6 @@
<button label="Aplicar" name="apply_btn"/>
<button label="Teleportar a su Base a un usuario..." name="kick_btn"/>
<button label="Teleportar a su Base a todos los usuarios..." name="kick_all_btn"/>
- <button label="Enviar un mensaje a toda la región..." name="im_btn" width="250" />
- <button label="Administrar el Punto de Teleporte..." name="manage_telehub_btn" width="210"/>
+ <button label="Enviar un mensaje a toda la región..." name="im_btn"/>
+ <button label="Administrar el Punto de Teleporte..." name="manage_telehub_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_terrain.xml b/indra/newview/skins/default/xui/es/panel_region_terrain.xml
index 903b826a0b..df333c0c5e 100644
--- a/indra/newview/skins/default/xui/es/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_terrain.xml
@@ -8,9 +8,9 @@
</text>
<spinner label="Nivel del agua" name="water_height_spin"/>
<button label="?" name="water_height_help"/>
- <spinner label="Límite de elevación del &#10;terreno" name="terrain_raise_spin"/>
+ <spinner label="Límite de elevación del terreno" name="terrain_raise_spin"/>
<button label="?" name="terrain_raise_help"/>
- <spinner label="Límite de bajada del &#10;terreno" name="terrain_lower_spin" bottom_delta="-34"/>
+ <spinner label="Límite de bajada del terreno" name="terrain_lower_spin"/>
<button label="?" name="terrain_lower_help"/>
<check_box label="Usar el Sol del estado" name="use_estate_sun_check"/>
<button label="?" name="use_estate_sun_help"/>
@@ -18,10 +18,10 @@
<button label="?" name="fixed_sun_help"/>
<slider label="Fase" name="sun_hour_slider"/>
<button label="Aplicar" name="apply_btn"/>
- <button width="230" label="Descargar el RAW del terreno..." name="download_raw_btn" tool_tip="Disponible sólo para los propietarios del estado, no para los administradores"/>
- <button left="246" label="?" name="download_raw_help"/>
- <button width="230" label="Subir un RAW para el terreno..." name="upload_raw_btn" tool_tip="Disponible sólo para los propietarios del estado, no para los administradores"/>
- <button left="246" label="?" name="upload_raw_help"/>
- <button width="230" label="Predeterminar este terreno" name="bake_terrain_btn" tool_tip="Definir el terreno actual como punto medio para los límites de elevación/bajada"/>
- <button left="246" label="?" name="bake_terrain_help"/>
+ <button label="Descargar el RAW del terreno..." name="download_raw_btn" tool_tip="Disponible sólo para los propietarios del estado, no para los administradores"/>
+ <button label="?" name="download_raw_help"/>
+ <button label="Subir un RAW para el terreno..." name="upload_raw_btn" tool_tip="Disponible sólo para los propietarios del estado, no para los administradores"/>
+ <button label="?" name="upload_raw_help"/>
+ <button label="Predeterminar este terreno" name="bake_terrain_btn" tool_tip="Definir el terreno actual como punto medio para los límites de elevación/bajada"/>
+ <button label="?" name="bake_terrain_help"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_texture.xml b/indra/newview/skins/default/xui/es/panel_region_texture.xml
index 5540358f97..d7f42ac41c 100644
--- a/indra/newview/skins/default/xui/es/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_texture.xml
@@ -6,7 +6,7 @@
<text name="region_text">
desconocida
</text>
- <text name="detail_texture_text" width="380">
+ <text name="detail_texture_text">
Texturas del terreno (se requieren archivos .tga de 512x512 y 24 bites)
</text>
<text name="height_text_lbl">
diff --git a/indra/newview/skins/default/xui/fr/floater_customize.xml b/indra/newview/skins/default/xui/fr/floater_customize.xml
index 89b3705570..b1d7edbe52 100644
--- a/indra/newview/skins/default/xui/fr/floater_customize.xml
+++ b/indra/newview/skins/default/xui/fr/floater_customize.xml
@@ -183,7 +183,7 @@ votre avatar. Vous pouvez aussi en créer de nouveaux et les porter.
Emplacement : [PATH]
</text>
<text length="1" name="not worn instructions" type="string">
- Pour porter une nouvelle chemise, faites-en glisser une de votre inventaire
+ Pour changer de chemise, faites-en glisser une de votre inventaire
jusqu&apos;à votre avatar. Vous pouvez aussi en créer une nouvelle et la porter.
</text>
<text length="1" name="no modify instructions" type="string">
@@ -217,7 +217,7 @@ jusqu&apos;à votre avatar. Vous pouvez aussi en créer une nouvelle et la porte
Emplacement : [PATH]
</text>
<text length="1" name="not worn instructions" type="string">
- Pour porter un nouveau pantalon, faites-en glisser un de votre inventaire
+ Pour changer de pantalon, faites-en glisser un de votre inventaire
jusqu&apos;à votre avatar. Vous pouvez aussi en créer un nouveau et le porter.
</text>
<text length="1" name="no modify instructions" type="string">
@@ -244,7 +244,7 @@ jusqu&apos;à votre avatar. Vous pouvez aussi en créer un nouveau et le porter.
Emplacement : [PATH]
</text>
<text length="1" name="not worn instructions" type="string">
- Pour porter de nouvelles chaussures, faites-en glisser une paire de votre
+ Pour changer de chaussures, faites-en glisser une paire de votre
inventaire jusqu&apos;à votre avatar. Vous pouvez aussi en créer une
nouvelle paire et la porter.
</text>
@@ -279,7 +279,7 @@ nouvelle paire et la porter.
Emplacement : [PATH]
</text>
<text length="1" name="not worn instructions" type="string">
- Pour porter de nouvelles chaussettes, faites-en glisser une paire de votre
+ Pour changer de chaussettes, faites-en glisser une paire de votre
inventaire jusqu&apos;à votre avatar. Vous pouvez aussi en créer une
nouvelle paire et la porter.
</text>
@@ -314,8 +314,8 @@ nouvelle paire et la porter.
Emplacement : [PATH]
</text>
<text length="1" name="not worn instructions" type="string">
- Pour porter une nouvelle veste, faites-en glisser une de votre inventaire
-jusqu&apos;à votre avatar. Vous pouvez aussi en créer une nouvelle et la porter.
+ Pour changer de veste, faites-en glisser une de votre inventaire jusqu&apos;à
+votre avatar. Vous pouvez aussi en créer une nouvelle et la porter.
</text>
<text length="1" name="no modify instructions" type="string">
Vous n&apos;avez pas la permission de modifier cet objet.
@@ -349,7 +349,7 @@ jusqu&apos;à votre avatar. Vous pouvez aussi en créer une nouvelle et la porte
Emplacement : [PATH]
</text>
<text length="1" name="not worn instructions" type="string">
- Pour porter de nouveaux gants, faites-les glisser à partir de votre
+ Pour changer de gants, faites-en glisser une paire à partir de votre
inventaire. Vous pouvez aussi en créer une nouvelle paire et la porter.
</text>
<text length="1" name="no modify instructions" type="string">
@@ -383,7 +383,7 @@ inventaire. Vous pouvez aussi en créer une nouvelle paire et la porter.
Emplacement : [PATH]
</text>
<text length="1" name="not worn instructions" type="string">
- Pour porter de nouveaux sous-vêtements, faites-les glisser à partir de
+ Pour changer de sous-vêtement, faites-en glisser une paire à partir de
votre inventaire. Vous pouvez aussi en créer des nouveaux et les porter.
</text>
<text length="1" name="no modify instructions" type="string">
@@ -418,7 +418,7 @@ votre inventaire. Vous pouvez aussi en créer des nouveaux et les porter.
Emplacement : [PATH]
</text>
<text length="1" name="not worn instructions" type="string">
- Pour porter de nouveaux sous-vêtements, faites-les glisser à partir de
+ Pour changer de sous-vêtement, faites-en glisser une paire à partir de
votre inventaire. Vous pouvez aussi en créer des nouveaux et les porter.
</text>
<text length="1" name="no modify instructions" type="string">
@@ -453,8 +453,8 @@ votre inventaire. Vous pouvez aussi en créer des nouveaux et les porter.
Emplacement : [PATH]
</text>
<text length="1" name="not worn instructions" type="string">
- Pour porter une nouvelle jupe, faites-en glisser une à partir de votre
-inventaire. Vous pouvez aussi en créer une nouvelle et la porter.
+ Pour changer de jupe, faites-en glisser une à partir de votre inventaire.
+Vous pouvez aussi en créer une nouvelle et la porter.
</text>
<text length="1" name="no modify instructions" type="string">
Vous n&apos;avez pas la permission de modifier cet objet.
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory.xml b/indra/newview/skins/default/xui/fr/floater_inventory.xml
index 7173025d18..071c0ae133 100644
--- a/indra/newview/skins/default/xui/fr/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/floater_inventory.xml
@@ -29,8 +29,8 @@
<menu_item_call label="Nouvelle veste" name="New Jacket"/>
<menu_item_call label="Nouvelle jupe" name="New Skirt"/>
<menu_item_call label="Nouveaux gants" name="New Gloves"/>
- <menu_item_call label="Nouveaux sous-vêtements (haut)" name="New Undershirt"/>
- <menu_item_call label="Nouveaux sous-vêtements (bas)" name="New Underpants"/>
+ <menu_item_call label="Nouveau tricot" name="New Undershirt"/>
+ <menu_item_call label="Nouveaux sous-vêtements" name="New Underpants"/>
</menu>
<menu name="New Body Parts">
<menu_item_call label="Nouvelle silhouette" name="New Shape"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml
index cb7e618232..090f5f6bc9 100644
--- a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml
@@ -12,13 +12,13 @@
<check_box label="Textures" name="check_texture"/>
<check_box label="Photos" name="check_snapshot"/>
<button label="Tout" label_selected="Tout" name="All" width="70"/>
- <button label="Aucun" label_selected="Aucun" name="None" width="70" bottom_delta="0" left="83"/>
- <check_box label="Toujours montrer &#10;les dossiers" name="check_show_empty" bottom_delta="-20"/>
- <check_box label="Depuis la déconnexion" name="check_since_logoff" bottom_delta="-36"/>
+ <button label="Aucun" label_selected="Aucun" name="None" width="70" bottom="-260" left="83"/>
+ <check_box label="Toujours montrer &#10;les dossiers" name="check_show_empty" bottom="-284"/>
+ <check_box label="Depuis la déconnexion" name="check_since_logoff" bottom="-318"/>
<text length="1" name="- OR -" type="string">
Ou il y a...
</text>
<spinner label="Heures" name="spin_hours_ago"/>
<spinner label="Jours" name="spin_days_ago"/>
- <button label="Fermer" label_selected="Fermer" name="Close" bottom_delta="-30"/>
+ <button label="Fermer" label_selected="Fermer" name="Close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
index 8ee3a23b95..a22d0a2934 100644
--- a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
+++ b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
@@ -11,8 +11,8 @@
<text name="note_label_2">
[NOTE2]
</text>
- <button label="Commencer" name="start_btn" width="85"/>
- <button label="Stop" name="stop_btn" left="100"/>
- <button label="Libérer" name="release_btn" left="177"/>
+ <button label="Commencer" name="start_btn" />
+ <button label="Stop" name="stop_btn" />
+ <button label="Libérer" name="release_btn" />
<button label="Fermer" name="close_btn" />
</floater>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
index 23e1e74035..7c366e8bdc 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
@@ -10,15 +10,9 @@
</radio_group>
<check_box label="Afficher le lieu de départ sur l&apos;écran de connexion" name="show_location_checkbox"/>
<combo_box name="fade_out_combobox" width="166">
- <combo_item name="Never">
- Jamais
- </combo_item>
- <combo_item name="Show Temporarily">
- Afficher temporairement
- </combo_item>
- <combo_item name="Always">
- Toujours
- </combo_item>
+ <combo_box.item name="Never" label="Jamais"/>
+ <combo_box.item name="Show Temporarily" label="Afficher temporairement"/>
+ <combo_box.item name="Always" label="Toujours"/>
</combo_box>
<check_box label="Nom des avatars en petit" name="small_avatar_names_checkbox"/>
<check_box label="Masquer mon nom sur mon écran" name="show_my_name_checkbox"/>
@@ -81,68 +75,34 @@ de sélection :
&lt;Saisissez le nom de la région&gt;
</string>
<combo_box name="crash_behavior_combobox" width="166">
- <combo_item length="1" name="Askbeforesending" type="string">
- Demander avant d&apos;envoyer
- </combo_item>
- <combo_item length="1" name="Alwayssend" type="string">
- Toujours envoyer
- </combo_item>
- <combo_item length="1" name="Neversend" type="string">
- Ne jamais envoyer
- </combo_item>
+ <combo_box.item length="1" name="Askbeforesending" type="string" label="Demander avant d&apos;envoyer"/>
+ <combo_box.item length="1" name="Alwayssend" type="string" label="Toujours envoyer"/>
+ <combo_box.item length="1" name="Neversend" type="string" label="Ne jamais envoyer"/>
</combo_box>
<combo_box name="language_combobox" width="166">
- <combo_item name="System Default Language">
- Choix par défaut
- </combo_item>
- <combo_item length="1" name="English" type="string">
- English (Anglais)
- </combo_item>
- <combo_item length="1" name="Danish" type="string">
- Dansk (Danois) - Bêta
- </combo_item>
- <combo_item length="1" name="Deutsch(German)" type="string">
- Deutsch (Allemand) - Bêta
- </combo_item>
- <combo_item name="Spanish">
- Español (Espagnol) - Bêta
- </combo_item>
- <combo_item name="French">
- Français - Bêta
- </combo_item>
+ <combo_box.item name="System Default Language" label="Choix par défaut"/>
+ <combo_box.item length="1" name="English" type="string" label="English (Anglais)"/>
+ <combo_box.item length="1" name="Danish" type="string" label="Dansk (Danois) - Bêta"/>
+ <combo_box.item length="1" name="Deutsch(German)" type="string" label="Deutsch (Allemand) - Bêta"/>
+ <combo_box.item name="Spanish" label="Español (Espagnol) - Bêta"/>
+ <combo_box.item name="French" label="Français - Bêta"/>
+ <combo_box.item name="Hungarian" label="Magyar (Hongrois) - Bêta"/>
+ <combo_box.item name="Polish" label="Polski (Polonais) - Bêta"/>
+ <combo_box.item name="Portugese" label="Portugués (Portugais) - Bêta"/>
+ <combo_box.item name="Russian" label="Русский (Russe) - Bêta"/>
+ <combo_box.item name="Ukrainian" label="Українська (Ukrainien) - Bêta"/>
+ <combo_box.item length="1" name="Chinese" type="string" label="中文 (简体) (Chinois) - Bêta"/>
+ <combo_box.item length="1" name="(Japanese)" type="string" label="日本語 (Japonais) - Bêta"/>
+ <combo_box.item length="1" name="(Korean)" type="string" label="한국어 (Coréen) - Bêta"/>
<combo_item name="Italian">
Italiano (Italien) - Bêta
</combo_item>
- <combo_item name="Hungarian">
- Magyar (Hongrois) - Bêta
- </combo_item>
<combo_item name="Dutch">
Nederlands (Néerlandais) - Bêta
</combo_item>
- <combo_item name="Polish">
- Polski (Polonais) - Bêta
- </combo_item>
- <combo_item name="Portugese">
- Portugués (Portugais) - Bêta
- </combo_item>
- <combo_item name="Russian">
- Русский (Russe) - Bêta
</combo_item>
<combo_item name="Turkish">
Türkçe (Turc) - Bêta
- </combo_item>
- <combo_item name="Ukrainian">
- Українська (Ukrainien) - Bêta
- </combo_item>
- <combo_item length="1" name="Chinese" type="string">
- 中文 (简体) (Chinois) - Bêta
- </combo_item>
- <combo_item length="1" name="(Japanese)" type="string">
- 日本語 (Japonais) - Bêta
- </combo_item>
- <combo_item length="1" name="(Korean)" type="string">
- 한국어 (Coréen) - Bêta
- </combo_item>
</combo_box>
<check_box label="Partager la langue avec les objets" name="language_is_public" tool_tip="Cette option permet de faire connaître aux objets du Monde votre langue favorite."/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml
index 6e70a04cab..4f57067cd2 100644
--- a/indra/newview/skins/default/xui/it/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/it/floater_about_land.xml
@@ -303,7 +303,7 @@ Solamente terreni più grandi possono essere abilitati nella ricerca.
<string name="search_disabled_permissions_tooltip">
Questa opzione è disabilitata perchè tu non puoi modificare le opzioni di questo terreno.
</string>
- <combo_box name="land category with adult" left="282" width="140">
+ <combo_box name="land category with adult">
<combo_item name="AnyCategory">
Tutte le categorie
</combo_item>
@@ -344,45 +344,21 @@ Solamente terreni più grandi possono essere abilitati nella ricerca.
Altro
</combo_item>
</combo_box>
- <combo_box name="land category" left="282" width="140">
- <combo_item name="AnyCategory">
- Tutte le categorie
- </combo_item>
- <combo_item name="LindenLocation">
- Luogo dei Linden
- </combo_item>
- <combo_item name="Arts&amp;Culture">
- Arte &amp; Cultura
- </combo_item>
- <combo_item name="Business">
- Affari
- </combo_item>
- <combo_item name="Educational">
- Educazione
- </combo_item>
- <combo_item name="Gaming">
- Gioco
- </combo_item>
- <combo_item name="Hangout">
- Divertimento
- </combo_item>
- <combo_item name="NewcomerFriendly">
- Accoglienza nuovi residenti
- </combo_item>
- <combo_item name="Parks&amp;Nature">
- Parchi &amp; Natura
- </combo_item>
- <combo_item name="Residential">
- Residenziale
- </combo_item>
- <combo_item name="Shopping">
- Shopping
- </combo_item>
- <combo_item name="Other">
- Altro
- </combo_item>
+ <combo_box name="land category">
+ <combo_box.item name="AnyCategory" label="Tutte le categorie"/>
+ <combo_box.item name="LindenLocation" label="Luogo dei Linden"/>
+ <combo_box.item name="Arts&amp;Culture" label="Arte &amp; Cultura"/>
+ <combo_box.item name="Business" label="Affari"/>
+ <combo_box.item name="Educational" label="Educazione"/>
+ <combo_box.item name="Gaming" label="Gioco"/>
+ <combo_box.item name="Hangout" label="Divertimento"/>
+ <combo_box.item name="NewcomerFriendly" label="Accoglienza nuovi residenti"/>
+ <combo_box.item name="Parks&amp;Nature" label="Parchi &amp; Natura"/>
+ <combo_box.item name="Residential" label="Residenziale"/>
+ <combo_box.item name="Shopping" label="Shopping"/>
+ <combo_box.item name="Other" label="Altro"/>
</combo_box>
- <button label="?" label_selected="?" name="?" left="427"/>
+ <button label="?" label_selected="?" name="?"/>
<check_box label="Contenuto Mature" name="MatureCheck" tool_tip=" "/>
<string name="mature_check_mature">
Contenuto Mature
@@ -412,15 +388,9 @@ Solamente terreni più grandi possono essere abilitati nella ricerca.
Rotte dei teleport:
</text>
<combo_box width="140" name="landing type" tool_tip="Rotte dei teleport -- seleziona come vuoi organizzare i teleport nella tua terra.">
- <combo_item name="Blocked">
- Bloccati
- </combo_item>
- <combo_item name="LandingPoint">
- Punto di atterraggio
- </combo_item>
- <combo_item name="Anywhere">
- Ovunque
- </combo_item>
+ <combo_box.item name="Blocked" label="Bloccati"/>
+ <combo_box.item name="LandingPoint" label="Punto di atterraggio"/>
+ <combo_box.item name="Anywhere" label="Ovunque"/>
</combo_box>
<string name="push_restrict_text">
Nessuna spinta
@@ -501,12 +471,8 @@ Media:
<check_box label="Permetti accesso al gruppo: [GROUP]" name="GroupCheck" tool_tip="Imposta il gruppo nel pannello generale."/>
<check_box label="Vendi pass a:" name="PassCheck" tool_tip="Permetti in questo terreno l&apos;accesso temporaneo"/>
<combo_box name="pass_combo">
- <combo_item name="Anyone">
- Chiunque
- </combo_item>
- <combo_item name="Group">
- Gruppo
- </combo_item>
+ <combo_box.item name="Anyone" label="Chiunque"/>
+ <combo_box.item name="Group" label="Gruppo"/>
</combo_box>
<spinner label="Prezzo in L$:" name="PriceSpin"/>
<spinner label="Ore di accesso:" name="HoursSpin"/>
diff --git a/indra/newview/skins/default/xui/it/floater_avatar_picker.xml b/indra/newview/skins/default/xui/it/floater_avatar_picker.xml
index a223e30fb5..4e63c3b7d6 100644
--- a/indra/newview/skins/default/xui/it/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/it/floater_avatar_picker.xml
@@ -14,15 +14,13 @@
</panel>
<panel label="Vicino a me" name="NearMePanel">
<text name="InstructSelectResident">
- Seleziona un residente
-nelle vicinanze:
+ Seleziona un residente nelle vicinanze:
</text>
- <button font="SansSerifSmall" left_delta="6" width="110" label="Aggiorna la lista" label_selected="Aggiorna l&apos;elenco" name="Refresh"/>
- <slider label="Range" name="near_me_range" bottom_delta="-36"/>
+ <button label="Aggiorna la lista" label_selected="Aggiorna l&apos;elenco" name="Refresh"/>
+ <slider label="Range" name="near_me_range"/>
<text name="meters">
Metri
</text>
- <scroll_list bottom_delta="-169" height="159" name="NearMe" />
</panel>
</tab_container>
<button label="Seleziona" label_selected="Seleziona" name="Select"/>
diff --git a/indra/newview/skins/default/xui/it/floater_build_options.xml b/indra/newview/skins/default/xui/it/floater_build_options.xml
index 2c60aeda2b..340d70851c 100644
--- a/indra/newview/skins/default/xui/it/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/it/floater_build_options.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="Opzioni della griglia">
- <spinner label="Unità di misura della griglia (metri)" name="GridResolution" width="250" label_width="192"/>
- <spinner label="Estensione della griglia (metri)" name="GridDrawSize" width="250" label_width="192"/>
+ <spinner label="Unità di misura della griglia (metri)" name="GridResolution"/>
+ <spinner label="Estensione della griglia (metri)" name="GridDrawSize"/>
<check_box label="Abilita sotto-unità di movimento" name="GridSubUnit"/>
<check_box label="Mostra piani d&apos;intersezione" name="GridCrossSection"/>
- <slider label="Trasparenza della griglia" name="GridOpacity" width="250"/>
+ <slider label="Trasparenza della griglia" name="GridOpacity"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_buy_contents.xml b/indra/newview/skins/default/xui/it/floater_buy_contents.xml
index 2836f98970..dce10d5493 100644
--- a/indra/newview/skins/default/xui/it/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/it/floater_buy_contents.xml
@@ -6,9 +6,9 @@
<text name="buy_text">
Compra per [AMOUNT]L$ da [NAME]?
</text>
- <button label="Annulla" label_selected="Annulla" name="cancel_btn" width="73"/>
- <button label="Compra" label_selected="Compra" name="buy_btn" width="73" left_delta="-77"/>
- <check_box label="Indossa adesso &#10;l&apos;indumento" name="wear_check" bottom="-234" left_delta="-125"/>
+ <button label="Annulla" label_selected="Annulla" name="cancel_btn"/>
+ <button label="Compra" label_selected="Compra" name="buy_btn"/>
+ <check_box label="Indossa adesso l&apos;indumento" name="wear_check"/>
<string name="no_copy_text">
(non copiabile)
</string>
diff --git a/indra/newview/skins/default/xui/it/floater_buy_currency.xml b/indra/newview/skins/default/xui/it/floater_buy_currency.xml
index a24f0dbe7a..aa840b4de4 100644
--- a/indra/newview/skins/default/xui/it/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/it/floater_buy_currency.xml
@@ -22,14 +22,14 @@
<text name="buy_action">
[NAME] [PRICE]L$
</text>
- <text name="currency_action" width="45">
+ <text name="currency_action">
Compra
</text>
<line_editor name="currency_amt">
1234
</line_editor>
<text name="currency_est">
- L$ per circa [USD]US$
+ L$ per circa [USD]US$
</text>
<text name="getting_data">
Dati in ricezione...
@@ -64,6 +64,6 @@ Devi aumentare l&apos;importo da acquistare.
<button label="Cancella" name="cancel_btn"/>
<button label="Acquista" name="buy_btn"/>
<string name="buy_currency">
- acquistare [LINDENS] L$ per circa [USD] US$
+ Compra [LINDENS] L$ per circa [USD] US$
</string>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml
index 4c62d4f5a2..cac43c9b8a 100644
--- a/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml
@@ -4,31 +4,31 @@
<panel label="Ciclo giorno/notte" name="Day Cycle">
<button label="?" name="WLDayCycleHelp"/>
<text name="WL12am">
- 0:00
+ 12
</text>
<text name="WL3am">
- 3:00
+ 3
</text>
<text name="WL6am">
- 6:00
+ 6
</text>
<text name="WL9amHash">
- 9:00
+ 9
</text>
<text name="WL12pmHash">
- 12:00
+ 24
</text>
<text name="WL3pm">
- 15:00
+ 15
</text>
<text name="WL6pm">
- 18:00
+ 18
</text>
<text name="WL9pm">
- 21:00
+ 21
</text>
<text name="WL12am2">
- 24:00
+ 12
</text>
<text name="WL12amHash">
|
@@ -57,9 +57,9 @@
<text name="WL12amHash2">
|
</text>
- <button font="SansSerifSmall" width="96" left="546" label="Aggiungi voce" label_selected="Aggiungi voce" name="WLAddKey"/>
- <button font="SansSerifSmall" width="96" left="546" label="Cancella voce" label_selected="Cancella voce" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText" width="210" left="17">
+ <button label="Aggiungi voce" label_selected="Aggiungi voce" name="WLAddKey"/>
+ <button label="Cancella voce" label_selected="Cancella voce" name="WLDeleteKey"/>
+ <text name="WLCurKeyFrameText">
Impostazioni del fotogramma chiave:
</text>
<text name="WLCurKeyTimeText">
@@ -84,9 +84,9 @@
<text name="DayCycleText3">
Anteprima:
</text>
- <button width="55" font="SansSerifSmall" label="Avvia" label_selected="Avvia" name="WLAnimSky"/>
- <button width="55" left_delta="60" font="SansSerifSmall" label="Arresta!" label_selected="Arresta" name="WLStopAnimSky"/>
- <button left_delta="60" width="150" font="SansSerifSmall" label="Usa l&apos;ora della proprietà" label_selected="Vai all&apos;ora della proprietà" name="WLUseLindenTime"/>
+ <button label="Avvia" label_selected="Avvia" name="WLAnimSky"/>
+ <button label="Arresta!" label_selected="Arresta" name="WLStopAnimSky"/>
+ <button label="Usa l&apos;ora della proprietà" label_selected="Vai all&apos;ora della proprietà" name="WLUseLindenTime"/>
<button label="Salva il test del giorno" label_selected="Salva il test del giorno" name="WLSaveDayCycle"/>
<button label="Carica il test del giorno" label_selected="Carica il test del giorno" name="WLLoadDayCycle"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/floater_env_settings.xml b/indra/newview/skins/default/xui/it/floater_env_settings.xml
index 36f97bda81..58fbff5dc9 100644
--- a/indra/newview/skins/default/xui/it/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/it/floater_env_settings.xml
@@ -1,26 +1,22 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Environment Editor Floater" title="Editor dell&apos;ambiente">
<text name="EnvTimeText">
- Ora del
-giorno
+ Ora del giorno
</text>
<text name="EnvTimeText2">
12:00 PM
</text>
<text name="EnvCloudText">
- Intensità delle
-Nuvole
+ Intensità delle Nuvole
</text>
<text name="EnvWaterColorText">
- Colore
-dell&apos;Acqua
+ Colore dell&apos;Acqua
</text>
<color_swatch label="" name="EnvWaterColor" tool_tip="Clicca per aprire la tavolozza dei colori"/>
<text name="EnvWaterFogText">
- Nebbiosità
-dell&apos;acqua
+ Nebbiosità dell&apos;acqua
</text>
- <button bottom="-144" label="Usa orario della regione" name="EnvUseEstateTimeButton" width="145"/>
+ <button label="Usa orario della regione" name="EnvUseEstateTimeButton"/>
<button label="Cielo avanzato" name="EnvAdvancedSkyButton"/>
<button label="Acqua avanzata" name="EnvAdvancedWaterButton"/>
<button label="?" name="EnvSettingsHelpButton"/>
diff --git a/indra/newview/skins/default/xui/it/floater_gesture.xml b/indra/newview/skins/default/xui/it/floater_gesture.xml
index 997e13ecb5..27008e97a1 100644
--- a/indra/newview/skins/default/xui/it/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/it/floater_gesture.xml
@@ -1,13 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="gestures" title="Gesture attive">
<text name="help_label">
- Fai doppio click su una gesture per azionare animazioni
-e suoni.
+ Fai doppio click su una gesture per azionare animazioni e suoni.
</text>
- <scroll_list bottom_delta="-385" height="360" name="gesture_list">
- <column label="Frase scatenante" name="trigger" width="106"/>
- <column label="Pulsante" name="shortcut" width="65"/>
- <column label="Nome" name="name" width="129"/>
+ <scroll_list name="gesture_list">
+ <column label="Frase scatenante" name="trigger"/>
+ <column label="Pulsante" name="shortcut"/>
+ <column label="Nome" name="name"/>
</scroll_list>
<button label="Nuova" name="new_gesture_btn"/>
<button label="Modifica" name="edit_btn"/>
diff --git a/indra/newview/skins/default/xui/it/floater_inspect.xml b/indra/newview/skins/default/xui/it/floater_inspect.xml
index 6028c40557..cbf2935c77 100644
--- a/indra/newview/skins/default/xui/it/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/it/floater_inspect.xml
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="inspect" title="Ispeziona oggetti" min_width="450">
+<floater name="inspect" title="Ispeziona oggetti">
<scroll_list name="object_list" tool_tip="Seleziona un oggetto da questo elenco per evidenziarlo inworld">
<column label="Nome dell&apos;oggetto" name="object_name"/>
- <column label="Proprietario" name="owner_name"/>
- <column label="Creatore" name="creator_name"/>
+ <column label="Nome del proprietario" name="owner_name"/>
+ <column label="Nome del creatore" name="creator_name"/>
<column label="Data di creazione" name="creation_date"/>
</scroll_list>
- <button width="185" label="Vedi il profilo del proprietario..." label_selected="" name="button owner" tool_tip="Vedi il profilo del proprietario dell&apos;oggetto evidenziato"/>
- <button width="165" left="205" label="Vedi il profilo del creatore..." label_selected="" name="button creator" tool_tip="Vedi il profilo del creatore originale dell&apos;oggetto evidenziato"/>
+ <button label="Vedi il profilo del proprietario..." label_selected="" name="button owner" tool_tip="Vedi il profilo del proprietario dell&apos;oggetto evidenziato"/>
+ <button label="Vedi il profilo del creatore..." label_selected="" name="button creator" tool_tip="Vedi il profilo del creatore originale dell&apos;oggetto evidenziato"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml
index c2c05b4023..935e1d7049 100644
--- a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory Finder" title="Inventario_Cose_recenti" width="165">
+<floater name="Inventory Finder" title="Inventario_Cose_recenti">
<check_box label="Animazioni" name="check_animation"/>
<check_box label="Biglietti da visita" name="check_calling_card"/>
<check_box label="Abiti" name="check_clothing"/>
diff --git a/indra/newview/skins/default/xui/it/floater_joystick.xml b/indra/newview/skins/default/xui/it/floater_joystick.xml
index ced227a845..dcd637f199 100644
--- a/indra/newview/skins/default/xui/it/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/it/floater_joystick.xml
@@ -3,24 +3,23 @@
<check_box name="enable_joystick">
Abilita Joystick:
</check_box>
- <text left="120" name="joystick_type" width="380"/>
- <spinner label="Mapping: asse X" name="JoystickAxis1" label_width="140" width="180" left="12"/>
- <spinner label="Mapping: asse Y" name="JoystickAxis2" label_width="134" width="174" left="205"/>
- <spinner label="Mapping: asse Z" name="JoystickAxis0" label_width="94" width="134" left="390"/>
- <spinner label="Mapping: direzione o Pitch" name="JoystickAxis4" label_width="140" width="180" left="12"/>
- <spinner label="Mapping: altitudine o Yaw" name="JoystickAxis5" label_width="134" width="174" left="205"/>
- <spinner label="Mapping del Roll" name="JoystickAxis3" label_width="94" width="134" left="390"/>
- <spinner label="Mapping dello Zoom" name="JoystickAxis6" label_width="140" width="180" left="12"/>
- <check_box label="Zoom diretto" name="ZoomDirect" left="205"/>
+ <spinner label="Mapping asse X" name="JoystickAxis1"/>
+ <spinner label="Mapping asse Y" name="JoystickAxis2"/>
+ <spinner label="Mapping asse Z" name="JoystickAxis0"/>
+ <spinner label="Mapping della direzione o Pitch" name="JoystickAxis4"/>
+ <spinner label="Mapping dell&apos;altitudine o Yaw" name="JoystickAxis5"/>
+ <spinner label="Mapping del Roll" name="JoystickAxis3"/>
+ <spinner label="Mapping dello Zoom" name="JoystickAxis6"/>
+ <check_box label="Zoom diretto" name="ZoomDirect"/>
<check_box label="Cursore 3D" name="Cursor3D"/>
<check_box label="Auto livellamento" name="AutoLeveling"/>
- <text name="Control Modes:" left="3" width="113">
+ <text name="Control Modes:">
Modalità di controllo:
</text>
<check_box name="JoystickAvatarEnabled">
Avatar
</check_box>
- <check_box name="JoystickBuildEnabled" left="192">
+ <check_box name="JoystickBuildEnabled">
Costruire
</check_box>
<check_box name="JoystickFlycamEnabled">
@@ -35,14 +34,14 @@
<text name="ZScale">
Regolazione Z
</text>
- <text name="PitchScale" left="3" width="112">
- Regolazione: Pitch
+ <text name="PitchScale">
+ Regolazione della direzione o Pitch
</text>
- <text name="YawScale" left="3" width="112">
- Regolazione: Yaw
+ <text name="YawScale">
+ Regolazione dell&apos;altitudine o Yaw
</text>
- <text name="RollScale" left="3" width="112">
- Regolazione: Roll
+ <text name="RollScale">
+ Regolazione del Roll
</text>
<text name="XDeadZone">
Angolo morto X
@@ -53,22 +52,22 @@
<text name="ZDeadZone">
Angolo morto Z
</text>
- <text name="PitchDeadZone" left="3" width="112">
- Angolo morto: Pitch
+ <text name="PitchDeadZone">
+ Angolo morto della direzione o Pitch
</text>
- <text name="YawDeadZone" left="3" width="112">
- Angolo morto: Yaw
+ <text name="YawDeadZone">
+ Angolo morto dell&apos;altitudine o Yaw
</text>
- <text name="RollDeadZone" left="3" width="112">
- Angolo morto: Roll
+ <text name="RollDeadZone">
+ Angolo morto del Roll
</text>
<text name="Feathering">
Smussamento
</text>
- <text name="ZoomScale2" width="135" left="6">
+ <text name="ZoomScale2">
Regolazione dello zoom
</text>
- <text name="ZoomDeadZone" width="135" left="6">
+ <text name="ZoomDeadZone">
Angolo morto dello zoom
</text>
<button label="SpaceNavigator Defaults" name="SpaceNavigatorDefaults"/>
diff --git a/indra/newview/skins/default/xui/it/floater_lagmeter.xml b/indra/newview/skins/default/xui/it/floater_lagmeter.xml
index af70ad9d31..d14f12ea4a 100644
--- a/indra/newview/skins/default/xui/it/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/it/floater_lagmeter.xml
@@ -1,27 +1,24 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_lagmeter" title="Misuratore del lag">
<button label="" label_selected="" name="client_lagmeter" tool_tip="Stato del lag del programma in locale"/>
- <text left="30" name="client_lag_cause" right="-10" />
- <text left="30" name="network_lag_cause" right="-10" />
- <text left="30" name="server_lag_cause" right="-32" />
<text name="client">
Programma in locale:
</text>
- <text name="client_text" left="145" font="SansSerifSmall">
+ <text name="client_text">
Normale
</text>
<button label="" label_selected="" name="network_lagmeter" tool_tip="Stato del lag del network"/>
<text name="network">
Network:
</text>
- <text name="network_text" font="SansSerifSmall">
+ <text name="network_text">
Normale
</text>
<button label="" label_selected="" name="server_lagmeter" tool_tip="Stato del lag del server"/>
<text name="server">
Server:
</text>
- <text name="server_text" font="SansSerifSmall">
+ <text name="server_text">
Normale
</text>
<button label="?" name="server_help"/>
@@ -51,10 +48,10 @@
Normale, finestra sullo sfondo
</string>
<string name="client_frame_time_critical_msg">
- Velocità dei frame al di sotto di [CLIENT_FRAME_RATE_CRITICAL]
+ Velocità dei frame del programma in locale al di sotto di [CLIENT_FRAME_RATE_CRITICAL]
</string>
<string name="client_frame_time_warning_msg">
- Velocità dei frame tra [CLIENT_FRAME_RATE_CRITICAL] e [CLIENT_FRAME_RATE_WARNING]
+ Velocità dei frame del programma in locale tra [CLIENT_FRAME_RATE_CRITICAL] e [CLIENT_FRAME_RATE_WARNING]
</string>
<string name="client_frame_time_normal_msg">
Normale
@@ -120,10 +117,10 @@
20
</string>
<string name="server_frame_time_critical_msg">
- Velocità dei frame al di sotto di [SERVER_FRAME_RATE_CRITICAL]
+ Velocità del simulatore al di sotto di [SERVER_FRAME_RATE_CRITICAL]
</string>
<string name="server_frame_time_warning_msg">
- Velocità dei frame tra [SERVER_FRAME_RATE_CRITICAL] e [SERVER_FRAME_RATE_WARNING]
+ Velocità del simulatore tra [SERVER_FRAME_RATE_CRITICAL] e [SERVER_FRAME_RATE_WARNING]
</string>
<string name="server_frame_time_normal_msg">
Normale
diff --git a/indra/newview/skins/default/xui/it/floater_land_holdings.xml b/indra/newview/skins/default/xui/it/floater_land_holdings.xml
index 85661c28d7..6ac84b854f 100644
--- a/indra/newview/skins/default/xui/it/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/it/floater_land_holdings.xml
@@ -7,7 +7,7 @@
<column label="Area" name="area"/>
</scroll_list>
<button label="Teletrasportati" label_selected="Teletrasportati" name="Teleport" tool_tip="Teletrasportati al centro di questo terreno."/>
- <button width="130" label="Mostra sulla mappa" label_selected="Mostra sulla mappa" name="Show on Map" tool_tip="Mostra questo terreno sulla mappa."/>
+ <button label="Mostra sulla mappa" label_selected="Mostra sulla mappa" name="Show on Map" tool_tip="Mostra questo terreno sulla mappa."/>
<text name="contrib_label">
Contributi ai tuoi gruppi:
</text>
@@ -19,21 +19,21 @@
Proprietà di terreni consentite per l&apos;attuale piano di pagamento:
</text>
<text name="allowed_text">
- [AREA] m²
+ [AREA] metri quadrati
</text>
<text name="current_label">
Attuale proprietà di terreni:
</text>
<text name="current_text">
- [AREA] m²
+ [AREA] metri quadrati
</text>
<text name="available_label">
Quantità disponibile per ulteriori acquisti di terreno:
</text>
<text name="available_text">
- [AREA] m²
+ [AREA] metri quadrati
</text>
<string name="area_string">
- [AREA] m²
+ [AREA] metri quadrati
</string>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml
index bb1f6116cf..55195a00f1 100644
--- a/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="script ed float" title="Script: Nuovo script">
<button label="Ripristina" label_selected="Ripristina" name="Reset"/>
- <check_box label="In esecuzione" name="running" left="4"/>
- <check_box label="Mono" name="mono" left="106"/>
+ <check_box label="In esecuzione" name="running"/>
+ <check_box label="Mono" name="mono"/>
<string name="not_allowed">
Non sei autorizzato a visualizzare questo script.
</string>
diff --git a/indra/newview/skins/default/xui/it/floater_lsl_guide.xml b/indra/newview/skins/default/xui/it/floater_lsl_guide.xml
index ec62dd087d..6a27703ad6 100644
--- a/indra/newview/skins/default/xui/it/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/it/floater_lsl_guide.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="script ed float" title="LSL Wiki">
<check_box label="Segui il cursore" name="lock_check"/>
- <combo_box label="Blocca" name="history_combo" left_delta="120" width="70"/>
- <button label="Indietro" name="back_btn" left_delta="75"/>
+ <combo_box label="Blocca" name="history_combo"/>
+ <button label="Indietro" name="back_btn"/>
<button label="Avanti" name="fwd_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_media_browser.xml b/indra/newview/skins/default/xui/it/floater_media_browser.xml
index 4d3462b348..1c906f5a4d 100644
--- a/indra/newview/skins/default/xui/it/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/it/floater_media_browser.xml
@@ -2,11 +2,10 @@
<floater name="floater_about" title="Browser multimediale">
<layout_stack name="stack1">
<layout_panel name="nav_controls">
- <button label="Indietro" name="back" width="75"/>
- <button label="Avanti" name="forward" left_delta="75" width="70"/>
- <button label="Ricarica" name="reload" left_delta="75"/>
- <combo_box left_delta="75" name="address" width="510"/>
- <button label="Vai" name="go" left_delta="515"/>
+ <button label="Indietro" name="back"/>
+ <button label="Avanti" name="forward"/>
+ <button label="Ricarica" name="reload"/>
+ <button label="Vai" name="go"/>
</layout_panel>
<layout_panel name="parcel_owner_controls">
<button label="Invia questo URL al terreno" name="assign"/>
diff --git a/indra/newview/skins/default/xui/it/floater_mute_object.xml b/indra/newview/skins/default/xui/it/floater_mute_object.xml
index 6bacdcab41..4b7370bad0 100644
--- a/indra/newview/skins/default/xui/it/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/it/floater_mute_object.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="mute by name" title="Ignora l&apos;oggetto dal nome">
<text name="message">
- Ignora per nome ha effetti sull&apos;oggetto in chat e IM, non
-nei suoni. Devi scrivere esattamente il nome dell&apos;oggetto.
+ Ignora per nome ha effetti sull&apos;oggetto in chat e IM, non nei suoni.
+Devi scrivere esattamente il nome dell&apos;oggetto.
</text>
<line_editor name="object_name">
Nome dell&apos;oggetto
</line_editor>
- <button label="OK" name="OK"/>
+ <button label="Ok" name="OK"/>
<button label="Annulla" name="Cancel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_pay.xml b/indra/newview/skins/default/xui/it/floater_pay.xml
index 4889f97ec7..dbf374a67c 100644
--- a/indra/newview/skins/default/xui/it/floater_pay.xml
+++ b/indra/newview/skins/default/xui/it/floater_pay.xml
@@ -1,22 +1,21 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Give Money" title="">
- <button label="1 L$" label_selected="1 L$" name="fastpay 1" left="118" width="80" />
- <button label="5 L$" label_selected="5 L$" name="fastpay 5" left="210"/>
- <button label="10 L$" label_selected="10 L$" name="fastpay 10" left="118" width="80" />
- <button label="20 L$" label_selected="20 L$" name="fastpay 20" left="210"/>
- <button label="Paga" label_selected="Paga" name="pay btn" left="127"/>
- <button label="Annulla" label_selected="Annulla" name="cancel btn" left="210"/>
- <text name="payee_label" left="5" width="105">
+ <button label="1 L$" label_selected="1 L$" name="fastpay 1"/>
+ <button label="5 L$" label_selected="5 L$" name="fastpay 5"/>
+ <button label="10 L$" label_selected="10 L$" name="fastpay 10"/>
+ <button label="20 L$" label_selected="20 L$" name="fastpay 20"/>
+ <button label="Paga" label_selected="Paga" name="pay btn"/>
+ <button label="Annulla" label_selected="Annulla" name="cancel btn"/>
+ <text name="payee_label">
Paga residente:
</text>
- <text name="payee_name" left="115">
+ <text name="payee_name">
[FIRST] [LAST]
</text>
- <text name="fastpay text" width="110" halign="left">
+ <text name="fastpay text">
Pagamento veloce:
</text>
- <text name="amount text" left="4" >
+ <text name="amount text">
Ammontare:
</text>
- <line_editor left="70" name="amount" width="49"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_pay_object.xml b/indra/newview/skins/default/xui/it/floater_pay_object.xml
index c41c0ba41e..021b2d7647 100644
--- a/indra/newview/skins/default/xui/it/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/it/floater_pay_object.xml
@@ -1,31 +1,30 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Give Money" title="">
- <text name="payee_group" width="100" halign="left">
+ <text name="payee_group">
Paga il gruppo:
</text>
- <text name="payee_resident" width="120" halign="left">
+ <text name="payee_resident">
Paga il residente:
</text>
- <text name="payee_name" left="120">
+ <text name="payee_name">
[FIRST] [LAST]
</text>
- <text name="object_name_label" left="5" width="110" halign="left">
+ <text name="object_name_label">
Mediante l&apos;oggetto:
</text>
- <text name="object_name_text" left="120" >
+ <text name="object_name_text">
...
</text>
- <text name="fastpay text" width="115" halign="left">
+ <text name="fastpay text">
Pagamento diretto:
</text>
- <text name="amount text" left="5" halign="left">
+ <text name="amount text">
Ammontare:
</text>
- <button label="1 L$" label_selected="1 L$" name="fastpay 1" left="125" width="70"/>
- <button label="5 L$" label_selected="5 L$" name="fastpay 5" left="200" width="70"/>
- <button label="10 L$" label_selected="10 L$" name="fastpay 10" left="125" width="70"/>
- <button label="20 L$" label_selected="20 L$" name="fastpay 20" left="200" width="70"/>
+ <button label="1 L$" label_selected="1 L$" name="fastpay 1"/>
+ <button label="5 L$" label_selected="5 L$" name="fastpay 5"/>
+ <button label="10 L$" label_selected="10 L$" name="fastpay 10"/>
+ <button label="20 L$" label_selected="20 L$" name="fastpay 20"/>
<button label="Paga" label_selected="Paga" name="pay btn"/>
<button label="Cancella" label_selected="Cancella" name="cancel btn"/>
- <line_editor left="74" name="amount" width="50" />
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_preferences.xml b/indra/newview/skins/default/xui/it/floater_preferences.xml
index 6277300bee..726b6dd70b 100644
--- a/indra/newview/skins/default/xui/it/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/it/floater_preferences.xml
@@ -1,9 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Preferences" title="Preferenze" min_width="350" width="646">
+<floater name="Preferences" title="Preferenze">
<button label="OK" label_selected="OK" name="OK"/>
<button label="Annulla" label_selected="Annulla" name="Cancel"/>
<button label="Applica" label_selected="Applica" name="Apply"/>
<button label="Informazioni..." label_selected="Informazioni..." name="About..."/>
<button label="Aiuto" label_selected="Aiuto" name="Help"/>
- <tab_container name="pref core" tab_width="146" width="646" />
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_animation.xml b/indra/newview/skins/default/xui/it/floater_preview_animation.xml
index e9e0252613..95a8a96066 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_animation.xml
@@ -3,6 +3,6 @@
<text name="desc txt">
Descrizione:
</text>
- <button left="20" width="131" label="Esegui inworld" label_selected="Ferma" name="Anim play btn" tool_tip="Esegui questa animazione così che altri possano vederla."/>
- <button left="162" width="125" label="Esegui localmente" label_selected="Ferma" name="Anim audition btn" tool_tip="Esegui questa animazione così che solo tu possa vederla."/>
+ <button label="Esegui inworld" label_selected="Ferma" name="Anim play btn" tool_tip="Esegui questa animazione così che altri possano vederla."/>
+ <button label="Esegui localmente" label_selected="Ferma" name="Anim audition btn" tool_tip="Esegui questa animazione così che solo tu possa vederla."/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_script_search.xml b/indra/newview/skins/default/xui/it/floater_script_search.xml
index 470fb76135..ebd8ee359f 100644
--- a/indra/newview/skins/default/xui/it/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/it/floater_script_search.xml
@@ -1,15 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script search" title="Cerca Script" width="320">
- <check_box label="Senza distinzione tra maiuscole e minuscole" name="case_text" left="65"/>
- <button label="Cerca" label_selected="Cerca" name="search_btn" width="85"/>
- <button label="Sostituisci" label_selected="Sostituisci" name="replace_btn" left="100" width="85"/>
- <button label="Sostituisci tutto" label_selected="Sostituisci tutto" name="replace_all_btn" left="190" width="122"/>
- <text name="txt" width="60">
+<floater name="script search" title="Cerca Script">
+ <check_box label="Senza distinzione tra maiuscole e minuscole" name="case_text"/>
+ <button label="Cerca" label_selected="Cerca" name="search_btn"/>
+ <button label="Sostituisci" label_selected="Sostituisci" name="replace_btn"/>
+ <button label="Sostituisci tutto" label_selected="Sostituisci tutto" name="replace_all_btn"/>
+ <text name="txt">
Cerca
</text>
- <text name="txt2" width="60">
+ <text name="txt2">
Sostituisci
</text>
- <line_editor left="65" name="search_text" width="240" />
- <line_editor left="65" name="replace_text" width="240" />
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_telehub.xml b/indra/newview/skins/default/xui/it/floater_telehub.xml
index 0c5199dbc7..5de215522d 100644
--- a/indra/newview/skins/default/xui/it/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/it/floater_telehub.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="telehub" title="Telehub" min_height="310" height="310" width="286">
+<floater name="telehub" title="Telehub">
<text name="status_text_connected">
Telehub connesso all&apos;oggetto [OBJECT]
</text>
@@ -10,23 +10,19 @@
Per rimuovere, clicca Disconnetti.
</text>
<text name="help_text_not_connected">
- Seleziona l&apos;oggetto e clicca Connetti Telehub.
+ Seleziona l&apos;oggetto e clicca connetti Telehub.
</text>
<button label="Connetti Telehub" name="connect_btn"/>
<button label="Disconnetti" name="disconnect_btn"/>
- <text name="spawn_points_text" width="265">
+ <text name="spawn_points_text">
Rigenera i punti (posizioni, non oggetti):
</text>
- <scroll_list name="spawn_points_list" width="265" />
- <button width="165" label="Aggiungi punti rigenerazione" name="add_spawn_point_btn"/>
- <button width="105" left="175" label="Rimuovi punti" name="remove_spawn_point_btn"/>
+ <button label="Aggiungi punti rigenerazione" name="add_spawn_point_btn"/>
+ <button label="Rimuovi punti rigenerazione" name="remove_spawn_point_btn"/>
<text name="spawn_point_help">
- Seleziona un oggetto e clicca su aggiungi per
-specificarne la posizione.
+ Seleziona un oggetto e clicca su aggiungi per specificarne la posizione.
Potrai quindi muovere o rimuovere l&apos;oggetto.
Le posizioni sono relative al centro del telehub.
-
-Seleziona un elemento per vederne la posizione
-globale.
+Seleziona un elemento per vederne la posizione globale.
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_top_objects.xml b/indra/newview/skins/default/xui/it/floater_top_objects.xml
index 470e21769c..ff6e9eb730 100644
--- a/indra/newview/skins/default/xui/it/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/it/floater_top_objects.xml
@@ -4,33 +4,30 @@
In caricamento...
</text>
<scroll_list name="objects_list">
- <column label="Punteggio" name="score" width="84"/>
- <column label="Nome" name="name" width="84"/>
- <column label="Proprietario" name="owner" width="84"/>
- <column label="Ubicazione" name="location" width="84"/>
- <column label="Ora" name="time" width="84"/>
- <column label="Ora (Mono)" name="mono_time" width="84"/>
+ <column label="Punteggio" name="score"/>
+ <column label="Nome" name="name"/>
+ <column label="Proprietario" name="owner"/>
+ <column label="Ubicazione" name="location"/>
+ <column label="Ora" name="time"/>
+ <column label="Ora (Mono)" name="mono_time"/>
</scroll_list>
- <line_editor font="SansSerifSmall" left="90" name="id_editor" width="280"/>
- <line_editor font="SansSerifSmall" left="90" name="object_name_editor" width="280"/>
- <line_editor font="SansSerifSmall" left="90" name="owner_name_editor" width="280"/>
<text name="id_text">
ID oggetto:
</text>
- <button label="Mostra segnali luminosi" name="show_beacon_btn" width="150"/>
+ <button label="Mostra segnali luminosi" name="show_beacon_btn"/>
<text name="obj_name_text">
Nome oggetto:
</text>
- <button label="Filtro" name="filter_object_btn" width="150"/>
+ <button label="Filtro" name="filter_object_btn"/>
<text name="owner_name_text">
Nome oggetto:
</text>
- <button label="Filtro" name="filter_owner_btn" width="150"/>
- <button label="Restituisci selezionato" name="return_selected_btn" width="150"/>
- <button label="Restituisci tutti" name="return_all_btn" left="170"/>
- <button label="Disabilita selezionato" name="disable_selected_btn" width="150"/>
- <button label="Disabilita per tutti" name="disable_all_btn" left="170"/>
- <button label="Aggiorna" name="refresh_btn" width="150"/>
+ <button label="Filtro" name="filter_owner_btn"/>
+ <button label="Restituisci selezionato" name="return_selected_btn"/>
+ <button label="Restituisci tutti" name="return_all_btn"/>
+ <button label="Disabilita selezionato" name="disable_selected_btn"/>
+ <button label="Disabilita per tutti" name="disable_all_btn"/>
+ <button label="Aggiorna" name="refresh_btn"/>
<string name="top_scripts_title">
Script pesanti
</string>
diff --git a/indra/newview/skins/default/xui/it/floater_url_entry.xml b/indra/newview/skins/default/xui/it/floater_url_entry.xml
index 9ad1a0dce5..2968b19d80 100644
--- a/indra/newview/skins/default/xui/it/floater_url_entry.xml
+++ b/indra/newview/skins/default/xui/it/floater_url_entry.xml
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="url_entry" title="">
<text name="media_label">
- URL Media:
+ Media URL:
</text>
<button label="OK" name="ok_btn"/>
<button label="Annulla" name="cancel_btn"/>
- <button label="Elimina" name="clear_btn"/>
+ <button label="Cancella" name="clear_btn"/>
<text name="loading_label">
In caricamento...
</text>
diff --git a/indra/newview/skins/default/xui/it/floater_water.xml b/indra/newview/skins/default/xui/it/floater_water.xml
index 33f91ed1c8..6665d97e2a 100644
--- a/indra/newview/skins/default/xui/it/floater_water.xml
+++ b/indra/newview/skins/default/xui/it/floater_water.xml
@@ -1,9 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Water Floater" title="Editor avanzato dell&apos;acqua">
- <text name="KeyFramePresetsText" width="224">
+ <text name="KeyFramePresetsText">
Impostazioni predeterminate dell&apos;acqua:
</text>
- <combo_box left_delta="230" name="WaterPresetsCombo" width="150" />
<button label="Nuovo" label_selected="Nuovo" name="WaterNewPreset"/>
<button label="Salva" label_selected="Salva" name="WaterSavePreset"/>
<button label="Cancella" label_selected="Cancella" name="WaterDeletePreset"/>
@@ -12,21 +11,20 @@
<text name="BHText">
Colore della nebbiosità dell&apos;acqua
</text>
- <button label="?" name="WaterFogColorHelp" left="209"/>
+ <button label="?" name="WaterFogColorHelp"/>
<color_swatch label="" name="WaterFogColor" tool_tip="Clicca per aprire la selezione colore"/>
- <text name="WaterFogDensText" font="SansSerifSmall">
- Esponente di densità della nebbia&#10; dell&apos;acqua
+ <text name="WaterFogDensText">
+ Esponente di densità  della nebbia dell&apos;acqua
</text>
- <slider bottom_delta="-40" name="WaterFogDensity"/>
- <button label="?" name="WaterFogDensityHelp" left="209"/>
- <text name="WaterUnderWaterFogModText" font="SansSerifSmall" bottom="-140">
+ <button label="?" name="WaterFogDensityHelp"/>
+ <text name="WaterUnderWaterFogModText">
Regolatore effetto nebbia subacquea
</text>
- <button label="?" name="WaterUnderWaterFogModHelp" left="209"/>
+ <button label="?" name="WaterUnderWaterFogModHelp"/>
<text name="BDensText">
Scala di riflessione delle onde
</text>
- <button label="?" name="WaterNormalScaleHelp" left="415"/>
+ <button label="?" name="WaterNormalScaleHelp"/>
<text name="BHText2">
1
</text>
@@ -39,31 +37,29 @@
<text name="HDText">
Scala Fresnel
</text>
- <button label="?" name="WaterFresnelScaleHelp" left="415"/>
+ <button label="?" name="WaterFresnelScaleHelp"/>
<text name="FresnelOffsetText">
Offset Fresnel
</text>
- <button label="?" name="WaterFresnelOffsetHelp" left="415"/>
- <text name="DensMultText" font="SansSerifSmall">
- Scala di rifrazione nell&apos;acqua&#10; dall&apos;alto
+ <button label="?" name="WaterFresnelOffsetHelp"/>
+ <text name="DensMultText">
+ Scala di rifrazione nell&apos;acqua dall&apos;alto
</text>
- <slider bottom_delta="-40" name="WaterScaleAbove"/>
- <button label="?" name="WaterScaleAboveHelp" left="650"/>
- <text name="WaterScaleBelowText" font="SansSerifSmall" bottom="-70">
- Scala di rifrazione nell&apos;acqua&#10; dal basso
+ <button label="?" name="WaterScaleAboveHelp"/>
+ <text name="WaterScaleBelowText">
+ Scala di rifrazione nell&apos;acqua dal basso
</text>
- <slider bottom_delta="-40" name="WaterScaleBelow"/>
- <button label="?" name="WaterScaleBelowHelp" left="650"/>
- <text name="MaxAltText" bottom="-122">
+ <button label="?" name="WaterScaleBelowHelp"/>
+ <text name="MaxAltText">
Moltiplicatore della sfocatura
</text>
- <button label="?" name="WaterBlurMultiplierHelp" left="650"/>
+ <button label="?" name="WaterBlurMultiplierHelp"/>
</panel>
<panel label="Immagine" name="Waves">
<text name="BHText">
Direzione della grande onda
</text>
- <button label="?" name="WaterWave1Help" left="170"/>
+ <button label="?" name="WaterWave1Help"/>
<text name="WaterWave1DirXText">
X
</text>
@@ -73,7 +69,7 @@
<text name="BHText2">
Direzione della piccola onda
</text>
- <button label="?" name="WaterWave2Help" left="170"/>
+ <button label="?" name="WaterWave2Help"/>
<text name="WaterWave2DirXText">
X
</text>
diff --git a/indra/newview/skins/default/xui/it/floater_windlight_options.xml b/indra/newview/skins/default/xui/it/floater_windlight_options.xml
index 5076c777dc..aa99e1d883 100644
--- a/indra/newview/skins/default/xui/it/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/it/floater_windlight_options.xml
@@ -4,15 +4,15 @@
Cieli predefiniti:
</text>
<button label="Nuovo" label_selected="Nuovo" name="WLNewPreset"/>
- <button label="Salva" label_selected="Salva" name="WLSavePreset" left_delta="72"/>
- <button label="Elimina" label_selected="Elimina" name="WLDeletePreset" left_delta="72"/>
- <button font="SansSerifSmall" width="165" left_delta="85" label="Editor del ciclo giorno/notte" label_selected="Editor del ciclo giorno/notte" name="WLDayCycleMenuButton"/>
+ <button label="Salva" label_selected="Salva" name="WLSavePreset"/>
+ <button label="Elimina" label_selected="Elimina" name="WLDeletePreset"/>
+ <button label="Editor del ciclo giorno/notte" label_selected="Editor del ciclo giorno/notte" name="WLDayCycleMenuButton"/>
<tab_container name="WindLight Tabs">
<panel label="Atmosfera" name="Atmosphere">
<text name="BHText">
Blu dell&apos;Orizzonte
</text>
- <button label="?" name="WLBlueHorizonHelp" left="189"/>
+ <button label="?" name="WLBlueHorizonHelp"/>
<text name="BHText2">
R
</text>
@@ -25,14 +25,14 @@
<text name="BHText5">
I
</text>
- <text name="BDensText" font="SansSerifSmall">
+ <text name="BDensText">
Altezza della Foschia all&apos;Orizzonte
</text>
- <button label="?" name="WLHazeHorizonHelp" left="189" />
+ <button label="?" name="WLHazeHorizonHelp"/>
<text name="BDensText2">
Densità del Blu
</text>
- <button label="?" name="WLBlueDensityHelp" />
+ <button label="?" name="WLBlueDensityHelp"/>
<text name="BHText6">
R
</text>
@@ -52,15 +52,15 @@
<text name="DensMultText">
Moltiplicatore di Densità
</text>
- <button label="?" name="WLDensityMultHelp" left="645"/>
+ <button label="?" name="WLDensityMultHelp"/>
<text name="WLDistanceMultText">
Moltiplicatore della Distanza
</text>
- <button label="?" name="WLDistanceMultHelp" left="645"/>
+ <button label="?" name="WLDistanceMultHelp"/>
<text name="MaxAltText">
Altitudine Massima
</text>
- <button label="?" name="WLMaxAltitudeHelp" left="645"/>
+ <button label="?" name="WLMaxAltitudeHelp"/>
</panel>
<panel label="Illuminazione" name="Lighting">
<text name="SLCText">
@@ -151,15 +151,15 @@
<text name="WLCloudCoverageText">
Copertura delle Nuvole
</text>
- <button label="?" name="WLCloudCoverageHelp" left="415"/>
+ <button label="?" name="WLCloudCoverageHelp"/>
<text name="WLCloudScaleText">
Altitudine delle Nuvole
</text>
- <button label="?" name="WLCloudScaleHelp" left="415"/>
+ <button label="?" name="WLCloudScaleHelp"/>
<text name="WLCloudDetailText">
Dettagli Nuvole (XY/ Densità)
</text>
- <button label="?" name="WLCloudDetailHelp" left="415"/>
+ <button label="?" name="WLCloudDetailHelp"/>
<text name="BHText8">
X
</text>
@@ -170,17 +170,17 @@
D
</text>
<text name="WLCloudScrollXText">
- Scorrimento delle X
+ Scorrimento delle nuvole X
</text>
<button label="?" name="WLCloudScrollXHelp"/>
<check_box label="Blocca" name="WLCloudLockX"/>
<text name="WLCloudScrollYText">
- Scorrimento delle Y
+ Scorrimento delle nuvole Y
</text>
<button label="?" name="WLCloudScrollYHelp"/>
<check_box label="Blocca" name="WLCloudLockY"/>
<check_box label="Mostra le Nuvole Classiche" name="DrawClassicClouds"/>
- <button label="?" name="WLClassicCloudsHelp" left="645"/>
+ <button label="?" name="WLClassicCloudsHelp"/>
</panel>
</tab_container>
<string name="WLDefaultSkyNames">
diff --git a/indra/newview/skins/default/xui/it/panel_friends.xml b/indra/newview/skins/default/xui/it/panel_friends.xml
index e2eb3dd6e7..78e0d542f3 100644
--- a/indra/newview/skins/default/xui/it/panel_friends.xml
+++ b/indra/newview/skins/default/xui/it/panel_friends.xml
@@ -16,5 +16,5 @@
<button label="Teleport..." name="offer_teleport_btn" tool_tip="Offri a questo amico un teleport per dove sei tu ora"/>
<button label="Paga..." name="pay_btn" tool_tip="Dai Linden dollar (L$) a questo amico"/>
<button label="Rimuovi..." name="remove_btn" tool_tip="Rimuovi questa persona dalla tua lista amici"/>
- <button label="Aggiungi..." name="add_btn" tool_tip="Offri amicizia ad un residente"/>
+ <button label="Aggiungi come amico..." name="add_btn" tool_tip="Offri amicizia ad un residente"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_general.xml b/indra/newview/skins/default/xui/it/panel_group_general.xml
index 2c04ec776c..cc044a2e56 100644
--- a/indra/newview/skins/default/xui/it/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_general.xml
@@ -48,7 +48,7 @@ Passa il mouse sulle opzioni per un aiuto aggiuntivo.
<check_box label="Mostra nella ricerca" name="show_in_group_list" tool_tip="Lascia che i residenti vedano questo gruppo nella ricerca."/>
<check_box label="Iscrizione libera" name="open_enrollement" tool_tip="Imposta se questo gruppo permette ai nuovi membri di unirsi senza essere invitati."/>
<check_box label="Tassa di iscrizione: L$" name="check_enrollment_fee" tool_tip="Imposta se richiedere una tassa di iscrizione per unirsi al gruppo."/>
- <spinner width="60" left_delta="136" name="spin_enrollment_fee" tool_tip="I nuovi membri devono pagare questa tassa per unirsi al gruppo. La tassa di iscrizione è selezionata."/>
+ <spinner name="spin_enrollment_fee" tool_tip="I nuovi membri devono pagare questa tassa per unirsi al gruppo. La tassa di iscrizione è selezionata."/>
<combo_box name="group_mature_check" tool_tip="Imposta se le informazioni sul tuo gruppo sono da considerarsi Mature.">
<combo_item name="select_mature">
- Seleziona -
diff --git a/indra/newview/skins/default/xui/it/panel_group_invite.xml b/indra/newview/skins/default/xui/it/panel_group_invite.xml
index cc426f7cd2..d75b3a46e8 100644
--- a/indra/newview/skins/default/xui/it/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_invite.xml
@@ -2,8 +2,8 @@
<panel label="Invita una persona" name="invite_panel">
<text name="help_text">
Puoi selezionare più di un residente
-da invitare nel tuo gruppo. Clicca su
-&apos;Scelta residenti&apos; per iniziare.
+da invitare nel tuo gruppo. Clicca su &apos;Scelta
+residenti&apos; per iniziare.
</text>
<button label="Scelta residenti" name="add_button" tool_tip=""/>
<name_list name="invitee_list" tool_tip="Tieni premuto il tasto ctrl e clicca i nomi dei residenti per avere una selezione multipla."/>
diff --git a/indra/newview/skins/default/xui/it/panel_group_land_money.xml b/indra/newview/skins/default/xui/it/panel_group_land_money.xml
index 5f54d8cd25..907ce8ea5a 100644
--- a/indra/newview/skins/default/xui/it/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_land_money.xml
@@ -13,7 +13,7 @@
<string name="loading_txt">
Attendi...
</string>
- <text name="group_land_heading" width="250">
+ <text name="group_land_heading">
Terra posseduta dal gruppo
</text>
<scroll_list name="group_parcel_list">
@@ -22,24 +22,24 @@
<column label="Tipo" name="type"/>
<column label="Area" name="area"/>
</scroll_list>
- <button label="Mostra sulla mappa" label_selected="Mostra sulla mappa" name="map_button" left="282" width="130"/>
+ <button label="Mostra sulla mappa" label_selected="Mostra sulla mappa" name="map_button"/>
<text name="total_contributed_land_label">
Total Contribution:
</text>
<text name="total_contributed_land_value">
- [AREA] m²
+ [AREA] metri quadri
</text>
<text name="total_land_in_use_label">
Terra totale in uso:
</text>
<text name="total_land_in_use_value">
- [AREA] m²
+ [AREA] metri quadri
</text>
<text name="land_available_label">
Terra disponibile:
</text>
<text name="land_available_value">
- [AREA] m²
+ [AREA] metri quadri
</text>
<text name="your_contribution_label">
Il tuo contributo:
@@ -48,11 +48,10 @@
Non è possibile impostare i tuoi contributi in terra.
</string>
<text name="your_contribution_max_value">
- m² ([AMOUNT] massimo)
+ metri quadri ([AMOUNT] massimo)
</text>
<text name="group_over_limit_text">
- I membri del gruppo devono contribuire con più crediti per mantenere
-la quantità  di terra in uso.
+ I membri del gruppo devono contribuire con più crediti per mantenere la quantità  di terra in uso.
</text>
<text name="group_money_heading">
L$ del gruppo
@@ -67,15 +66,15 @@ la quantità  di terra in uso.
<text_editor name="group_money_details_text">
Calcolo...
</text_editor>
- <button width="90" label="&lt; Precedente" label_selected="&lt; Precedente" name="earlier_details_button" tool_tip="Vai ai dettagli precedenti"/>
- <button left_delta="260" width="90" label="Successivo &gt;" label_selected="Successivo &gt;" name="later_details_button" tool_tip="Vai ai dettagli successivi"/>
+ <button label="&lt; Precedente" label_selected="&lt; Precedente" name="earlier_details_button" tool_tip="Vai ai dettagli precedenti"/>
+ <button label="Successivo &gt;" label_selected="Successivo &gt;" name="later_details_button" tool_tip="Vai ai dettagli successivi"/>
</panel>
<panel label="Vendite" name="group_money_sales_tab">
<text_editor name="group_money_sales_text">
Calcolo...
</text_editor>
- <button width="90" label="&lt; Precedente" label_selected="&lt; Precedente" name="earlier_sales_button" tool_tip="Vai ai dettagli precedenti"/>
- <button left_delta="260" width="90" label="Successivo &gt;" label_selected="Successivo &gt;" name="later_sales_button" tool_tip="Vai ai dettagli successivi"/>
+ <button label="&lt; Precedente" label_selected="&lt; Precedente" name="earlier_sales_button" tool_tip="Vai ai dettagli precedenti"/>
+ <button label="Successivo &gt;" label_selected="Successivo &gt;" name="later_sales_button" tool_tip="Vai ai dettagli successivi"/>
</panel>
</tab_container>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_notices.xml b/indra/newview/skins/default/xui/it/panel_group_notices.xml
index 6bf0f1e8c0..7f1f37d67e 100644
--- a/indra/newview/skins/default/xui/it/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_notices.xml
@@ -1,8 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Notice" name="notices_tab">
<string name="help_text">
- Le notice sono un modo veloce per comunicare in un gruppo diffondendo un messaggio e recapitando un eventuale oggetto allegato. Le notice arrivano solo ai membri del gruppo il cui ruolo è abilitato a riceverli.
-Puoi disattivare la ricezione delle notice nella finestra principale.
+ Le notice sono un modo veloce per comunicare in un
+gruppo diffondendo un messaggio e recapitando un
+eventuale oggetto allegato. Le notice arrivano solo ai
+membri del gruppo il cui ruolo è abilitato a riceverli.
+Puoi disattivare la ricezione delle notice
+nella finestra principale.
</string>
<string name="no_notices_text">
Non ci sono vecchie notice.
@@ -12,9 +16,9 @@ Puoi disattivare la ricezione delle notice nella finestra principale.
Archivio delle notice del gruppo
</text>
<text name="lbl2">
- Le notice sono conservate per 14 giorni. Clicca la notice qui sotto che desideri
-leggere. Clicca il bottone &apos;Aggiorna&apos; per controllare se sono arrivate nuove
-notice. Il numero delle notice è limitato a 200 notice per gruppo al giorno.
+ Le notice sono conservate per 14 giorni. Clicca la notice qui sotto che desideri leggere.
+Clicca il bottone &apos;Aggiorna&apos; per controllare se sono arrivate nuove notice.
+Il numero delle notice è limitato a 200 notice per gruppo al giorno.
</text>
<scroll_list name="notice_list">
<column label="Oggetto" name="subject"/>
@@ -32,22 +36,19 @@ notice. Il numero delle notice è limitato a 200 notice per gruppo al giorno.
</text>
<text name="lbl2">
Devi scrivere l&apos;oggetto della notice per poterla inviare.
-Puoi aggiungere un solo allegato alla notice trascinandolo dal
-tuo inventario in questa finestra. L&apos;allegato deve essere
-copiabile e cedibile, e non puoi allegare una cartella.
+Puoi aggiungere un solo allegato alla notice trascinandolo
+dal tuo inventario in questa finestra. L&apos;allegato deve essere copiabile e cedibile,
+e non puoi allegare una cartella.
</text>
- <text name="lbl3" left="20">
+ <text name="lbl3">
Oggetto:
</text>
- <line_editor name="create_subject" width="251" left_delta="61"/>
- <text name="lbl4" left="15" width="60">
+ <text name="lbl4">
Messaggio:
</text>
- <text_editor name="create_message" left_delta="66" width="330"/>
- <text name="lbl5" width="68">
+ <text name="lbl5">
Allega:
</text>
- <line_editor name="create_inventory_name" width="190" left_delta="74"/>
<button label="Rimuovi allegato" label_selected="Rimuovi allegato" name="remove_attachment"/>
<button label="Invia la notice" label_selected="Invia la notice" name="send_notice"/>
<panel name="drop_target" tool_tip="Trascina un oggetto dall&apos;inventario sulla casella del messaggio per inviarlo con la notice. Devi avere il permesso di copia e trasferimento dell&apos;oggetto per poterlo inviare con la notice."/>
@@ -57,7 +58,7 @@ copiabile e cedibile, e non puoi allegare una cartella.
Notice archiviate
</text>
<text name="lbl2">
- Per mandare una nuova notice, clicca &apos;Crea una nuova notice&apos; qui sopra.
+ Per mandare una nuova notice, clicca il bottone &apos;Crea una nuova notice&apos; qui sopra.
</text>
<text name="lbl3">
Oggetto:
diff --git a/indra/newview/skins/default/xui/it/panel_group_roles.xml b/indra/newview/skins/default/xui/it/panel_group_roles.xml
index 8dfdd5a46e..2629b91db5 100644
--- a/indra/newview/skins/default/xui/it/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_roles.xml
@@ -12,9 +12,8 @@
Membri &amp; Ruoli
</text>
<text name="static2">
- I membri del Gruppo hanno ricevuto ruoli con delle abilità. Queste
-impostazioni possono essere facilmente personalizzate, permettendo
-una maggiore organizzazione e flessibilità.
+ I membri del Gruppo hanno ricevuto ruoli con delle abilità. Queste impostazioni possono
+essere facilmente personalizzate, permettendo una maggiore organizzazione e flessibilità.
</text>
</panel>
<panel name="roles_header">
@@ -22,14 +21,12 @@ una maggiore organizzazione e flessibilità.
Ruoli
</text>
<text name="role_properties_modifiable">
- Seleziona un ruolo qui sotto. È possibile modificarne il nome,
-la descrizione e il titolo.
+ Seleziona un ruolo qui sotto. È possibile modificarne il nome, la descrizione e il titolo.
</text>
<text name="role_properties_not_modifiable">
- Seleziona un ruolo qui sotto per vederne le proprietà, i membri
-e i permessi abilitati.
+ Seleziona un ruolo qui sotto per vederne le proprietà, i membri e i permessi abilitati.
</text>
- <text bottom_delta="-28" name="role_actions_modifiable">
+ <text name="role_actions_modifiable">
Puoi anche assegnare abilità al ruolo.
</text>
<text name="role_actions_not_modifiable">
@@ -45,17 +42,16 @@ e i permessi abilitati.
eseguire tali abilità.
</text>
</panel>
- <tab_container height="164" name="roles_tab_container">
- <panel height="148" label="Membri" name="members_sub_tab" tool_tip="Membri">
- <line_editor bottom="127" name="search_text"/>
- <button label="Cerca" name="search_button" width="75"/>
- <button label="Mostra tutti" name="show_all_button" left_delta="80"/>
- <name_list name="member_list" bottom_delta="-105" height="104" >
+ <tab_container name="roles_tab_container">
+ <panel label="Membri" name="members_sub_tab" tool_tip="Membri">
+ <button label="Cerca" name="search_button"/>
+ <button label="Mostra tutti" name="show_all_button"/>
+ <name_list name="member_list">
<column label="Nome del membro" name="name"/>
<column label="Contributo donato" name="donated"/>
<column label="Ultimo accesso" name="online"/>
</name_list>
- <button label="Invita un nuovo membro..." name="member_invite" width="165"/>
+ <button label="Invita un nuovo membro ..." name="member_invite"/>
<button label="Espellere dal gruppo" name="member_eject"/>
<string name="help_text">
Puoi aggiungere o rimuovere i ruoli assegnati ai membri.
@@ -63,11 +59,10 @@ Seleziona più membri tenendo premuto il tasto Ctrl e
cliccando sui loro nomi.
</string>
</panel>
- <panel height="148" label="Ruoli" name="roles_sub_tab">
- <line_editor bottom="127" name="search_text"/>
- <button label="Cerca" name="search_button" width="75"/>
- <button label="Mostra tutti" name="show_all_button" left_delta="80"/>
- <scroll_list name="role_list" bottom_delta="-104" height="104">
+ <panel label="Ruoli" name="roles_sub_tab">
+ <button label="Cerca" name="search_button"/>
+ <button label="Mostra tutti" name="show_all_button"/>
+ <scroll_list name="role_list">
<column label="Nome del ruolo" name="name"/>
<column label="Titolo" name="title"/>
<column label="Membri" name="members"/>
@@ -84,11 +79,10 @@ compresi il ruolo base o &apos;Membro&apos; e il ruolo del Capogruppo.
I ruoli &apos;Membro&apos; e &apos;Capogruppo&apos; sono ruoli speciali e non possono essere eliminati.
</string>
</panel>
- <panel height="148" label="Abilità" name="actions_sub_tab">
- <line_editor bottom="127" name="search_text"/>
- <button label="Cerca" name="search_button" width="75"/>
- <button label="Visualizza tutto" name="show_all_button" left_delta="80"/>
- <scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Seleziona una abilità per vederne maggiori dettagli."/>
+ <panel label="Abilità" name="actions_sub_tab">
+ <button label="Cerca" name="search_button"/>
+ <button label="Visualizza tutto" name="show_all_button"/>
+ <scroll_list name="action_list" tool_tip="Seleziona una abilità per vederne maggiori dettagli."/>
<string name="help_text">
Le abilità permettono ai membri nei ruoli di fare cose specifiche
in questo gruppo. C&apos;è una vasta gamma di abilità.
diff --git a/indra/newview/skins/default/xui/it/panel_groups.xml b/indra/newview/skins/default/xui/it/panel_groups.xml
index 43fd36710e..75bccb71a3 100644
--- a/indra/newview/skins/default/xui/it/panel_groups.xml
+++ b/indra/newview/skins/default/xui/it/panel_groups.xml
@@ -1,12 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="groups">
- <scroll_list bottom="50" name="group list"/>
- <text bottom="16" height="32" name="groupdesc" width="268">
- Il tuo gruppo attualmente attivo è visualizzato
-in grassetto.
+ <text name="groupdesc">
+ Il tuo gruppo attualmente attivo è visualizzato in grassetto.
</text>
- <text bottom="3" name="groupcount" width="268">
- Appartieni a [COUNT] gruppo/i (su un massimo di [MAX]).
+ <text name="groupcount">
+ Appartieni a [COUNT] gruppi (su un massimo di [MAX]).
</text>
<button label="IM/Chiama" name="IM" tool_tip="Apri una sessione di IM/Instant Messages"/>
<button label="Informazioni" name="Info"/>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_general.xml b/indra/newview/skins/default/xui/it/panel_preferences_general.xml
index aadd86d055..620cd33c0a 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_general.xml
@@ -10,15 +10,9 @@
</radio_group>
<check_box label="Mostra il punto di partenza nella schermata d&apos;inizio" name="show_location_checkbox"/>
<combo_box name="fade_out_combobox" width="166">
- <combo_item name="Never">
- Mai
- </combo_item>
- <combo_item name="Show Temporarily">
- Mostra temporanemente
- </combo_item>
- <combo_item name="Always">
- Sempre
- </combo_item>
+ <combo_box.item name="Never" label="Mai"/>
+ <combo_box.item name="Show Temporarily" label="Mostra temporanemente"/>
+ <combo_box.item name="Always" label="Sempre"/>
</combo_box>
<check_box label="Nomi avatar in piccolo" name="small_avatar_names_checkbox"/>
<check_box label="Nascondi il mio nome sul mio schermo" name="show_my_name_checkbox"/>
@@ -80,50 +74,29 @@ contenuto di tipo:
&lt;Scrivi il nome della regione&gt;
</string>
<combo_box name="crash_behavior_combobox" width="166">
- <combo_item name="Askbeforesending">
- Chiedi prima di inviare
- </combo_item>
- <combo_item name="Alwayssend">
- Invia sempre
- </combo_item>
- <combo_item name="Neversend">
- Non inviare mai
- </combo_item>
+ <combo_box.item name="Askbeforesending" label="Chiedi prima di inviare"/>
+ <combo_box.item name="Alwayssend" label="Invia sempre"/>
+ <combo_box.item name="Neversend" label="Non inviare mai"/>
</combo_box>
<combo_box name="language_combobox" width="166">
- <combo_item name="System Default Language">
- Default di sistema
- </combo_item>
- <combo_item name="English">
- English
- </combo_item>
- <combo_item name="Danish">
- Dansk (Danese) - Beta
- </combo_item>
- <combo_item name="Deutsch(German)">
- Deutsch (Tedesco) - Beta
- </combo_item>
- <combo_item name="Spanish">
- Español (Spagnolo) - Beta
- </combo_item>
- <combo_item name="French">
- Français (Francese) - Beta
- </combo_item>
+ <combo_box.item name="System Default Language" label="Default di sistema"/>
+ <combo_box.item name="English" label="English"/>
+ <combo_box.item name="Danish" label="Dansk (Danese) - Beta"/>
+ <combo_box.item name="Deutsch(German)" label="Deutsch (Tedesco) - Beta"/>
+ <combo_box.item name="Spanish" label="Español (Spagnolo) - Beta"/>
+ <combo_box.item name="French" label="Français (Francese) - Beta"/>
+ <combo_box.item name="Hungarian" label="Magyar (Ungherese) - Beta"/>
+ <combo_box.item name="Polish" label="Polski (Polacco) - Beta"/>
+ <combo_box.item name="Portugese" label="Portugués (Portoghese) - Beta"/>
+ <combo_box.item name="Chinese" label="中文 (简体) (Cinese) - Beta"/>
+ <combo_box.item name="(Japanese)" label="日本語 (Giapponese) - Beta"/>
+ <combo_box.item name="(Korean)" label="한국어 (Coreano) - Beta"/>
<combo_item name="Italian">
Italiano - Beta
</combo_item>
- <combo_item name="Hungarian">
- Magyar (Ungherese) - Beta
- </combo_item>
<combo_item name="Dutch">
Nederlands (Olandese) - Beta
</combo_item>
- <combo_item name="Polish">
- Polski (Polacco) - Beta
- </combo_item>
- <combo_item name="Portugese">
- Portugués (Portoghese) - Beta
- </combo_item>
<combo_item name="Russian">
Русский (Russo) - Beta
</combo_item>
@@ -133,15 +106,6 @@ contenuto di tipo:
<combo_item name="Ukrainian">
Українська (Ukraino) - Beta
</combo_item>
- <combo_item name="Chinese">
- 中文 (简体) (Cinese) - Beta
- </combo_item>
- <combo_item name="(Japanese)">
- 日本語 (Giapponese) - Beta
- </combo_item>
- <combo_item name="(Korean)">
- 한국어 (Coreano) - Beta
- </combo_item>
</combo_box>
<check_box label="Condividi la tua lingua con gli oggetti" name="language_is_public" tool_tip="Questo fa in modo che gli oggetti inworld riconoscano la tua lingua."/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_region_covenant.xml b/indra/newview/skins/default/xui/it/panel_region_covenant.xml
index 9dfecde317..802156ea0b 100644
--- a/indra/newview/skins/default/xui/it/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_covenant.xml
@@ -22,17 +22,15 @@
Ultima modifica Merc 31 Dic 1969 16:00:00
</text>
<button label="?" name="covenant_help"/>
- <text_editor name="covenant_editor" bottom="-247" height="162" >
+ <text_editor name="covenant_editor">
Per questa proprietà non è stato emesso alcun regolamento.
</text_editor>
<button label="Ripristina" name="reset_covenant"/>
- <text bottom="-25" name="covenant_help_text">
- Le modifiche nel regolamento saranno visibili su tutti i terreni
- della proprietà.
+ <text name="covenant_help_text">
+ Le modifiche nel regolamento saranno visibili su tutti i terreni della proprietà.
</text>
- <text bottom_delta="-36" name="covenant_instructions">
- Trascina e rilascia una notecard per cambiare il regolamento di
- questa proprietà.
+ <text name="covenant_instructions">
+ Trascina e rilascia una notecard per cambiare il regolamento di questa proprietà.
</text>
<text name="region_section_lbl">
Regione:
@@ -40,31 +38,31 @@
<text name="region_name_lbl">
Nome:
</text>
- <text name="region_name_text" left="126">
+ <text name="region_name_text">
leyla
</text>
<text name="region_landtype_lbl">
Tipo:
</text>
- <text name="region_landtype_text" left="126">
+ <text name="region_landtype_text">
Mainland / Homestead
</text>
- <text name="region_maturity_lbl" width="115">
+ <text name="region_maturity_lbl">
Categoria di accesso:
</text>
- <text name="region_maturity_text" left="126">
+ <text name="region_maturity_text">
Adult
</text>
<text name="resellable_lbl">
Rivendita:
</text>
- <text name="resellable_clause" left="126">
+ <text name="resellable_clause">
La terra in questa regione non può essere rivenduta.
</text>
<text name="changeable_lbl">
Suddividi:
</text>
- <text name="changeable_clause" left="126">
+ <text name="changeable_clause">
La terra in questa regione non può essere unita/suddivisa.
</text>
<string name="can_resell">
@@ -74,11 +72,9 @@
Un terreno acquistato in questa regione non può essere rivenduto.
</string>
<string name="can_change">
- Un terreno acquistato in questa regione può essere unito o
-suddiviso.
+ Un terreno acquistato in questa regione può essere unito o suddiviso.
</string>
<string name="can_not_change">
- Un terreno acquistato in questa regione non può essere unito o
-suddiviso.
+ Un terreno acquistato in questa regione non può essere unito o suddiviso.
</string>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_region_debug.xml b/indra/newview/skins/default/xui/it/panel_region_debug.xml
index 85fb968ab4..fddc14e85c 100644
--- a/indra/newview/skins/default/xui/it/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_debug.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Debug" name="Debug">
+<panel label="Debug - individuazione errori" name="Debug">
<text name="region_text_lbl">
Regione:
</text>
@@ -13,7 +13,7 @@
<check_box label="Disabilita la fisica" name="disable_physics_check" tool_tip="Disabilita tutta la fisica dei corpi in questa regione"/>
<button label="?" name="disable_physics_help"/>
<button label="Applica" name="apply_btn"/>
- <text name="objret_text_lbl" width="130">
+ <text name="objret_text_lbl">
Restituisci oggetti
</text>
<text name="resident_text_lbl">
@@ -30,10 +30,10 @@
<check_box label="Restituisci solo gli oggetti che sono sulle terre altrui" name="return_other_land" tool_tip="Restituisci solo gli oggetti che sono in terreni appartenenti a qualcun altro"/>
<check_box label="Restituisci gli oggetti in ogni regione di questi possedimenti" name="return_estate_wide" tool_tip="Restituisci tutti gli oggetti nelle varie regioni che costituiscono l&apos;insieme dei possedimenti terrieri"/>
<button label="Restituisci" name="return_btn"/>
- <button width="280" label="Visualizza l&apos;elenco dei maggiori collidenti..." name="top_colliders_btn" tool_tip="Elenco degli oggetti che stanno potenzialmente subendo le maggiori collisioni"/>
- <button label="?" name="top_colliders_help" left="297"/>
- <button width="280" label="Visualizza l&apos;elenco degli script più pesanti..." name="top_scripts_btn" tool_tip="Elenco degli oggetti che impiegano più tempo a far girare gli script"/>
- <button label="?" name="top_scripts_help" left="297"/>
+ <button label="Visualizza l&apos;elenco dei maggiori collidenti..." name="top_colliders_btn" tool_tip="Elenco degli oggetti che stanno potenzialmente subendo le maggiori collisioni"/>
+ <button label="?" name="top_colliders_help"/>
+ <button label="Visualizza l&apos;elenco degli script più pesanti..." name="top_scripts_btn" tool_tip="Elenco degli oggetti che impiegano più tempo a far girare gli script"/>
+ <button label="?" name="top_scripts_help"/>
<button label="Riavvia la regione" name="restart_btn" tool_tip="Dai 2 minuti di tempo massimo e fai riavviare la regione"/>
<button label="?" name="restart_help"/>
<button label="Ritarda il riavvio" name="cancel_restart_btn" tool_tip="Ritarda il riavvio della regione di un&apos;ora"/>
diff --git a/indra/newview/skins/default/xui/it/panel_region_estate.xml b/indra/newview/skins/default/xui/it/panel_region_estate.xml
index 5b95b7378b..a27e3a716c 100644
--- a/indra/newview/skins/default/xui/it/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_estate.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Proprietà immobiliari" name="Estate">
<text name="estate_help_text">
- I cambiamenti alle impostazioni in questa finestra
-avranno effetto su tutte le regioni della proprietà.
+ I cambiamenti alle impostazioni in questa finestra avranno effetto su tutte
+le regioni della proprietà.
</text>
- <text name="estate_text" width="140">
+ <text name="estate_text">
Proprietà immobiliari:
</text>
<text name="estate_name">
@@ -24,15 +24,15 @@ avranno effetto su tutte le regioni della proprietà.
<check_box label="Permetti accesso pubblico" name="externally_visible_check"/>
<button label="?" name="externally_visible_help"/>
<text name="Only Allow">
- Limita l&apos;accesso a residenti...
+ Limita l&apos;accesso a:
</text>
- <check_box label="che hanno dato info. di pagamento" name="limit_payment" tool_tip="Blocca residenti non identificati."/>
+ <check_box label="residenti che hanno dato informazioni di pagamento" name="limit_payment" tool_tip="Blocca residenti non identificati."/>
<check_box label="Adulti con età verificata" name="limit_age_verified" tool_tip="Blocca residenti che non hanno verificato la loro età. Per maggiori informazioni vai a support.secondlife.com."/>
<check_box label="Permetti la chat voice" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<check_box label="Permetti teleport diretto" name="allow_direct_teleport"/>
<button label="?" name="allow_direct_teleport_help"/>
- <text name="abuse_email_text" width="230">
+ <text name="abuse_email_text">
Indirizzo email per la denuncia di abuso:
</text>
<string name="email_unsupported">
@@ -40,8 +40,8 @@ avranno effetto su tutte le regioni della proprietà.
</string>
<button label="?" name="abuse_email_address_help"/>
<button label="Applica" name="apply_btn"/>
- <button font="SansSerifSmall" label="Espelli persona dalle proprietà..." name="kick_user_from_estate_btn"/>
- <button font="SansSerifSmall" label="Manda un messaggio di le proprietà..." name="message_estate_btn"/>
+ <button label="Espelli persona dalle proprietà..." name="kick_user_from_estate_btn"/>
+ <button label="Manda un messaggio ai residenti di tutte le tue proprietà..." name="message_estate_btn"/>
<text name="estate_manager_label">
Manager delle proprietà:
</text>
diff --git a/indra/newview/skins/default/xui/it/panel_region_general.xml b/indra/newview/skins/default/xui/it/panel_region_general.xml
index d3afc1c63a..fffe51770e 100644
--- a/indra/newview/skins/default/xui/it/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_general.xml
@@ -3,19 +3,19 @@
<text name="region_text_lbl">
Regione:
</text>
- <text name="region_text" left="70">
+ <text name="region_text">
sconosciuta
</text>
<text name="version_channel_text_lbl">
Versione:
</text>
- <text name="version_channel_text" left="70">
+ <text name="version_channel_text">
sconosciuta
</text>
<text name="region_type_lbl">
Tipo:
</text>
- <text name="region_type" left="70">
+ <text name="region_type">
sconosciuto
</text>
<check_box label="Proibisci la modifica del terreno" name="block_terraform_check"/>
@@ -27,19 +27,19 @@
<check_box label="Limita gli urti" name="restrict_pushobject"/>
<button label="?" name="restrict_pushobject_help"/>
<check_box label="Abilita la rivendita del terreno" name="allow_land_resell_check"/>
- <button label="?" name="land_resell_help" left="260"/>
+ <button label="?" name="land_resell_help"/>
<check_box label="Abilita unione/suddivisione del terreno" name="allow_parcel_changes_check"/>
- <button label="?" name="parcel_changes_help" left="260" />
+ <button label="?" name="parcel_changes_help"/>
<check_box label="Proibisci che il terreno appaia nelle ricerche" name="block_parcel_search_check" tool_tip="Permetti che le persone vedano questa regione e le sue suddivisioni nei risultati delle ricerche"/>
- <button label="?" name="parcel_search_help" left="260"/>
- <spinner label="Limite massimo di avatar" name="agent_limit_spin" label_width="135" width="190"/>
+ <button label="?" name="parcel_search_help"/>
+ <spinner label="Limite massimo di avatar" name="agent_limit_spin"/>
<button label="?" name="agent_limit_help"/>
- <spinner label="Bonus di oggetti" name="object_bonus_spin" label_width="135" width="190"/>
+ <spinner label="Bonus di oggetti" name="object_bonus_spin"/>
<button label="?" name="object_bonus_help"/>
- <text label="Maturità" name="access_text" width="120">
+ <text label="Maturità" name="access_text">
Categoria di accesso:
</text>
- <combo_box label="Mature" name="access_combo" left="126" width="74">
+ <combo_box label="Mature" name="access_combo">
<combo_item name="Adult">
Adult
</combo_item>
@@ -55,5 +55,5 @@
<button label="Teletrasporta a casa un utente..." name="kick_btn"/>
<button label="Teletrasporta a casa tutti gli utenti..." name="kick_all_btn"/>
<button label="Invia messaggio alla regione..." name="im_btn"/>
- <button label="Gestisci snodo di teleport..." name="manage_telehub_btn" width="210"/>
+ <button label="Gestisci snodo di teleport..." name="manage_telehub_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_region_terrain.xml b/indra/newview/skins/default/xui/it/panel_region_terrain.xml
index 92044bae11..70072275eb 100644
--- a/indra/newview/skins/default/xui/it/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_terrain.xml
@@ -8,9 +8,9 @@
</text>
<spinner label="Altezza dell&apos;acqua" name="water_height_spin"/>
<button label="?" name="water_height_help"/>
- <spinner label="Limite di altezza del &#10;terreno" name="terrain_raise_spin"/>
+ <spinner label="Limite di altezza del terreno" name="terrain_raise_spin"/>
<button label="?" name="terrain_raise_help"/>
- <spinner label="Limite di abbassamento &#10;del terreno" name="terrain_lower_spin" bottom_delta="-34"/>
+ <spinner label="Limite di abbassamento del terreno" name="terrain_lower_spin"/>
<button label="?" name="terrain_lower_help"/>
<check_box label="Usa il sole della regione" name="use_estate_sun_check"/>
<button label="?" name="use_estate_sun_help"/>
@@ -22,6 +22,6 @@
<button label="?" name="download_raw_help"/>
<button label="Carica terreno RAW..." name="upload_raw_btn" tool_tip="Disponibile solo per i proprietari del terreno, non per i manager"/>
<button label="?" name="upload_raw_help"/>
- <button width="170" label="Trasforma il terreno" name="bake_terrain_btn" tool_tip="Imposta il terreno corrente come punto medio per i limiti di innalzamento/abbassamento"/>
- <button left="190" label="?" name="bake_terrain_help"/>
+ <button label="Trasforma il terreno" name="bake_terrain_btn" tool_tip="Imposta il terreno corrente come punto medio per i limiti di innalzamento/abbassamento"/>
+ <button label="?" name="bake_terrain_help"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_region_texture.xml b/indra/newview/skins/default/xui/it/panel_region_texture.xml
index 254700e9f1..4e39db9b1d 100644
--- a/indra/newview/skins/default/xui/it/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_texture.xml
@@ -6,7 +6,7 @@
<text name="region_text">
sconosciuto
</text>
- <text name="detail_texture_text" width="380">
+ <text name="detail_texture_text">
Texture del terreno (è necessario siano 512x512, 24 bit .tga files)
</text>
<text name="height_text_lbl">
@@ -48,10 +48,10 @@
Questi valori rappresentano l&apos;intervallo di miscelazione delle texture qui sopra.
</text>
<text name="height_text_lbl11">
- Misurato in metri, il valore più BASSO corrisponde all&apos;altezza MASSIMA della
+ Misurato in metri, il valore più BASSO corrisponde all&apos;altezza MASSIMA della Texture #1,
</text>
<text name="height_text_lbl12">
-   Texture #1, e il valore più ALTO all&apos;altezza MINIMA della Texture #4.
+ e il valore più ALTO all&apos;altezza MINIMA della Texture #4.
</text>
<button label="Applica" name="apply_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/teleport_strings.xml b/indra/newview/skins/default/xui/it/teleport_strings.xml
index 57e81bc41e..4ef802dc5b 100644
--- a/indra/newview/skins/default/xui/it/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/it/teleport_strings.xml
@@ -25,7 +25,7 @@ www.secondlife.com/support
Gli oggetti da te indossati non sono ancoa arrivati. Attendi ancora qualche secondo o scollegati e ricollegati prima di provare a teleportarti.
</message>
<message name="too_many_uploads_tport">
- Il server della regione è al momento occupato e la tua richiesta di teletrasporto non può essere soddisfatta entro breve tempo. Per favore prova di nuovo tra qualche minuto o spostati in un&apos;area meno affollata.
+ La gestione dati della regione è al momento occupata e la tua richiesta di teletrasporto non può essere soddisfatta entro breve tempo. Per favore prova di nuovo tra qualche minuto o spostati in un&apos;area meno affollata.
</message>
<message name="expired_tport">
Spiacenti, il sistema non riesce a soddisfare la tua richiesta di teletrasporto entro un tempo ragionevole. Riprova tra qualche minuto.
@@ -42,34 +42,34 @@ www.secondlife.com/support
</message_set>
<message_set name="progress">
<message name="sending_dest">
- In invio a destinazione.
+ In invio verso la destinazione.
</message>
<message name="redirecting">
In reindirizzamento ad una nuova destinazione.
</message>
<message name="relaying">
- In reinvio a destinazione.
+ In ritrasmissione alla destinazione.
</message>
<message name="sending_home">
- In invio verso la destinazione casa.
+ In invio la richiesta di ubicazione casa.
</message>
<message name="sending_landmark">
- In invio verso la destinazione del landmark.
+ In invio la richiesta della destinazione del landmark.
</message>
<message name="completing">
Teletrasporto completato
</message>
<message name="resolving">
- Elaborazione della destinazione in corso...
+ Destinazione in elaborazione.
</message>
<message name="contacting">
- Contattando la nuova regione.
+ Si sta contattando la nuova regione.
</message>
<message name="arriving">
- In arrivo a destinazione...
+ In arrivo...
</message>
<message name="requesting">
- Avvio teletrasporto....
+ Teletrasporto in avvio...
</message>
</message_set>
</teleport_messages>
diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml
index c8195d8f38..26c8a46270 100644
--- a/indra/newview/skins/default/xui/ja/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml
@@ -345,42 +345,18 @@
</combo_item>
</combo_box>
<combo_box name="land category">
- <combo_item name="AnyCategory">
- 全カテゴリー
- </combo_item>
- <combo_item name="LindenLocation">
- Linden所在地
- </combo_item>
- <combo_item name="Arts&amp;Culture">
- アート&amp;カルチャー
- </combo_item>
- <combo_item name="Business">
- ビジネス
- </combo_item>
- <combo_item name="Educational">
- 教育的
- </combo_item>
- <combo_item name="Gaming">
- ゲーム
- </combo_item>
- <combo_item name="Hangout">
- たまり場
- </combo_item>
- <combo_item name="NewcomerFriendly">
- 新住人に好意的
- </combo_item>
- <combo_item name="Parks&amp;Nature">
- 公園と自然
- </combo_item>
- <combo_item name="Residential">
- 住宅用
- </combo_item>
- <combo_item name="Shopping">
- ショッピング
- </combo_item>
- <combo_item name="Other">
- その他
- </combo_item>
+ <combo_box.item name="AnyCategory" label="全カテゴリー"/>
+ <combo_box.item name="LindenLocation" label="Linden所在地"/>
+ <combo_box.item name="Arts&amp;Culture" label="アート&amp;カルチャー"/>
+ <combo_box.item name="Business" label="ビジネス"/>
+ <combo_box.item name="Educational" label="教育的"/>
+ <combo_box.item name="Gaming" label="ゲーム"/>
+ <combo_box.item name="Hangout" label="たまり場"/>
+ <combo_box.item name="NewcomerFriendly" label="新住人に好意的"/>
+ <combo_box.item name="Parks&amp;Nature" label="公園と自然"/>
+ <combo_box.item name="Residential" label="住宅用"/>
+ <combo_box.item name="Shopping" label="ショッピング"/>
+ <combo_box.item name="Other" label="その他"/>
</combo_box>
<button label="?" label_selected="?" name="?"/>
<check_box label="Matureコンテンツ" name="MatureCheck" tool_tip=""/>
@@ -412,15 +388,9 @@
テレポート制限:
</text>
<combo_box name="landing type" tool_tip="Teleport Routing -- select how to handle teleports onto your land.">
- <combo_item length="1" name="Blocked" type="string">
- 不可
- </combo_item>
- <combo_item length="1" name="LandingPoint" type="string">
- 着地点
- </combo_item>
- <combo_item length="1" name="Anywhere" type="string">
- どこでも
- </combo_item>
+ <combo_box.item length="1" name="Blocked" type="string" label="不可"/>
+ <combo_box.item length="1" name="LandingPoint" type="string" label="着地点"/>
+ <combo_box.item length="1" name="Anywhere" type="string" label="どこでも"/>
</combo_box>
<string name="push_restrict_text">
プッシングを制限
@@ -499,12 +469,8 @@
<check_box label="グループ・アクセスを許可:[GROUP]" name="GroupCheck" tool_tip="[一般]タブで、グループを選択してください。"/>
<check_box label="入場許可を販売:" name="PassCheck" tool_tip="この区画への一時的なアクセスを許可"/>
<combo_box name="pass_combo">
- <combo_item name="Anyone">
- 誰でも
- </combo_item>
- <combo_item name="Group">
- グループ
- </combo_item>
+ <combo_box.item name="Anyone" label="誰でも"/>
+ <combo_box.item name="Group" label="グループ"/>
</combo_box>
<spinner label="価格(L$):" name="PriceSpin"/>
<spinner label="アクセス時間:" name="HoursSpin"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_buy_contents.xml b/indra/newview/skins/default/xui/ja/floater_buy_contents.xml
index 8bf660d71d..1ea10324b3 100644
--- a/indra/newview/skins/default/xui/ja/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/ja/floater_buy_contents.xml
@@ -1,15 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="floater_buy_contents" title="コンテンツを購入" width="340" min_width="340">
- <text name="contains_text" width="320">
+<floater name="floater_buy_contents" title="コンテンツを購入">
+ <text name="contains_text">
[NAME]の内容:
</text>
- <scroll_list name="item_list" width="310"/>
- <text name="buy_text" width="320">
+ <text name="buy_text">
コンテンツを[NAME]からL$[AMOUNT]で購入しますか?
</text>
- <button label="取り消し" label_selected="取り消し" name="cancel_btn" width="73"/>
- <button label="購入" label_selected="購入" name="buy_btn" width="73" left_delta="-77"/>
- <check_box label="今すぐ服を着る" name="wear_check" left_delta="-125"/>
+ <button label="取り消し" label_selected="取り消し" name="cancel_btn" />
+ <button label="購入" label_selected="購入" name="buy_btn" />
+ <check_box label="今すぐ服を着る" name="wear_check" />
<text name="no_copy_text">
(コピーなし)
</text>
diff --git a/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml
index 693446b21a..8286d29973 100644
--- a/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml
+++ b/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml
@@ -6,6 +6,6 @@
アイテムを別名で保存:
</text>
<line_editor name="name ed">
- New [DESC]
+ 新規[DESC]
</line_editor>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
index 019d42c40a..f55dbf9009 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
@@ -52,8 +52,7 @@
平方メートル ([AMOUNT]最大)
</text>
<text name="group_over_limit_text">
- 使用中の土地をサポートするには、グループ・メンバーがさらに多
-くの土地クレジットを提供する必要があります。
+ 使用中の土地をサポートするには、グループ・メンバーがさらに多くの土地クレジットを提供する必要があります。
</text>
<text name="group_money_heading">
グループL$
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
index 83b21b87d2..3e3d62640f 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
@@ -10,15 +10,9 @@
</radio_group>
<check_box label="ログイン画面にログイン位置を表示" name="show_location_checkbox"/>
<combo_box name="fade_out_combobox">
- <combo_item name="Never">
- なし
- </combo_item>
- <combo_item name="Show Temporarily">
- 一時的に表示
- </combo_item>
- <combo_item name="Always">
- いつも
- </combo_item>
+ <combo_box.item name="Never" label="なし"/>
+ <combo_box.item name="Show Temporarily" label="一時的に表示"/>
+ <combo_box.item name="Always" label="いつも"/>
</combo_box>
<check_box label="小さなアバター名" name="small_avatar_names_checkbox"/>
<check_box label="画面上で自分の名前を隠す" name="show_my_name_checkbox"/>
@@ -79,68 +73,34 @@
&lt;地域の名前入力&gt;
</string>
<combo_box name="crash_behavior_combobox">
- <combo_item length="1" name="Askbeforesending" type="string">
- 送る前に確認する
- </combo_item>
- <combo_item length="1" name="Alwayssend" type="string">
- 常に送信
- </combo_item>
- <combo_item length="1" name="Neversend" type="string">
- 送信しない
- </combo_item>
+ <combo_box.item length="1" name="Askbeforesending" type="string" label="送る前に確認する"/>
+ <combo_box.item length="1" name="Alwayssend" type="string" label="常に送信"/>
+ <combo_box.item length="1" name="Neversend" type="string" label="送信しない"/>
</combo_box>
<combo_box name="language_combobox">
- <combo_item length="1" name="System Default Language" type="string">
- システム・デフォルト
- </combo_item>
- <combo_item length="1" name="English" type="string">
- English (英語)
- </combo_item>
- <combo_item length="1" name="Danish" type="string">
- Dansk (デンマーク語) – ベータ
- </combo_item>
- <combo_item length="1" name="Deutsch(German)" type="string">
- Deutsch (ドイツ語) – ベータ
- </combo_item>
- <combo_item length="1" name="Spanish" type="string">
- Español (スペイン語) – ベータ
- </combo_item>
- <combo_item length="1" name="French" type="string">
- Français (フランス語) – ベータ
- </combo_item>
+ <combo_box.item length="1" name="System Default Language" type="string" label="システム・デフォルト"/>
+ <combo_box.item length="1" name="English" type="string" label="English (英語)"/>
+ <combo_box.item length="1" name="Danish" type="string" label="Dansk (デンマーク語) – ベータ"/>
+ <combo_box.item length="1" name="Deutsch(German)" type="string" label="Deutsch (ドイツ語) – ベータ"/>
+ <combo_box.item length="1" name="Spanish" type="string" label="Español (スペイン語) – ベータ"/>
+ <combo_box.item length="1" name="French" type="string" label="Français (フランス語) – ベータ"/>
+ <combo_box.item name="Hungarian" label="Magyar (ハンガリー語) - ベータ"/>
+ <combo_box.item name="Polish" label="Polski (ポーランド語) - ベータ"/>
+ <combo_box.item length="1" name="Portugese" type="string" label="Português (ポルトガル語) – ベータ"/>
+ <combo_box.item name="Russian" label="Русский (ロシア語) - ベータ"/>
+ <combo_box.item name="Ukrainian" label="Українська (ウクライナ語) - ベータ"/>
+ <combo_box.item length="1" name="Chinese" type="string" label="中文 (简体) (中国語) - ベータ"/>
+ <combo_box.item length="1" name="(Japanese)" type="string" label="日本語 – ベータ"/>
+ <combo_box.item length="1" name="(Korean)" type="string" label="한국어 (韓国語) – ベータ"/>
<combo_item name="Italian">
Italiano (イタリア語) - ベータ
</combo_item>
- <combo_item name="Hungarian">
- Magyar (ハンガリー語) - ベータ
- </combo_item>
<combo_item name="Dutch">
Nederlands (オランダ語) - ベータ
</combo_item>
- <combo_item name="Polish">
- Polski (ポーランド語) - ベータ
- </combo_item>
- <combo_item length="1" name="Portugese" type="string">
- Português (ポルトガル語) – ベータ
- </combo_item>
- <combo_item name="Russian">
- Русский (ロシア語) - ベータ
</combo_item>
<combo_item name="Turkish">
Türkçe (トルコ語) - ベータ
- </combo_item>
- <combo_item name="Ukrainian">
- Українська (ウクライナ語) - ベータ
- </combo_item>
- <combo_item length="1" name="Chinese" type="string">
- 中文 (简体) (中国語) - ベータ
- </combo_item>
- <combo_item length="1" name="(Japanese)" type="string">
- 日本語 – ベータ
- </combo_item>
- <combo_item length="1" name="(Korean)" type="string">
- 한국어 (韓国語) – ベータ
- </combo_item>
</combo_box>
<check_box label="言語をオブジェクトと共有" name="language_is_public" tool_tip="優先言語をインワールドのオブジェクトが認識する"/>
</panel>
diff --git a/indra/newview/skins/default/xui/nl/floater_about_land.xml b/indra/newview/skins/default/xui/nl/floater_about_land.xml
index f2aa9ff47c..44c2ebccf7 100644
--- a/indra/newview/skins/default/xui/nl/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/nl/floater_about_land.xml
@@ -147,31 +147,31 @@
<text name="region_name_lbl">
Naam:
</text>
- <text name="region_name_text" left="114">
+ <text name="region_name_text">
leyla
</text>
<text name="region_landtype_lbl">
Type:
</text>
- <text name="region_landtype_text" left="114">
+ <text name="region_landtype_text">
Mainland / Homestead
</text>
<text name="region_maturity_lbl">
Inhoudscategorie:
</text>
- <text name="region_maturity_text" left="114">
+ <text name="region_maturity_text">
Adult
</text>
<text name="resellable_lbl">
Doorverkopen:
</text>
- <text name="resellable_clause" left="114">
+ <text name="resellable_clause">
Land in deze regio mag niet worden doorverkocht.
</text>
<text name="changeable_lbl">
Opsplitsen:
</text>
- <text name="changeable_clause" left="114" width="340">
+ <text name="changeable_clause">
Land in deze regio mag niet worden samengevoegd/opgesplitst.
</text>
<string name="can_resell">
@@ -343,42 +343,18 @@ of opgedeeld.
</combo_item>
</combo_box>
<combo_box name="land category">
- <combo_item name="AnyCategory">
- Alle categorieën
- </combo_item>
- <combo_item name="LindenLocation">
- Linden Locatie
- </combo_item>
- <combo_item name="Arts&amp;Culture">
- Kunst &amp; Cultuur
- </combo_item>
- <combo_item name="Business">
- Zakelijk
- </combo_item>
- <combo_item name="Educational">
- Educatief
- </combo_item>
- <combo_item name="Gaming">
- Spelen
- </combo_item>
- <combo_item name="Hangout">
- Ontmoetingsplaats
- </combo_item>
- <combo_item name="NewcomerFriendly">
- Nieuwkomervriendelijk
- </combo_item>
- <combo_item name="Parks&amp;Nature">
- Parken &amp; Natuur
- </combo_item>
- <combo_item name="Residential">
- Woongebied
- </combo_item>
- <combo_item name="Shopping">
- Winkelen
- </combo_item>
- <combo_item name="Other">
- Anders
- </combo_item>
+ <combo_box.item name="AnyCategory" label="Alle categorieën"/>
+ <combo_box.item name="LindenLocation" label="Linden Locatie"/>
+ <combo_box.item name="Arts&amp;Culture" label="Kunst &amp; Cultuur"/>
+ <combo_box.item name="Business" label="Zakelijk"/>
+ <combo_box.item name="Educational" label="Educatief"/>
+ <combo_box.item name="Gaming" label="Spelen"/>
+ <combo_box.item name="Hangout" label="Ontmoetingsplaats"/>
+ <combo_box.item name="NewcomerFriendly" label="Nieuwkomervriendelijk"/>
+ <combo_box.item name="Parks&amp;Nature" label="Parken &amp; Natuur"/>
+ <combo_box.item name="Residential" label="Woongebied"/>
+ <combo_box.item name="Shopping" label="Winkelen"/>
+ <combo_box.item name="Other" label="Anders"/>
</combo_box>
<button label="?" label_selected="?" name="?"/>
<check_box label="Mature inhoud" name="MatureCheck" tool_tip=" "/>
@@ -405,20 +381,14 @@ of opgedeeld.
(none)
</string>
<button width="70" label="Instellen" label_selected="Instellen" name="Set" tool_tip="Stelt het landingspunt in waar bezoekers arriveren. Wordt ingesteld op uw avatar&apos;s positie binnen dit perceel."/>
- <button width="80" left="311" label="Opschonen" label_selected="Opschonen" name="Clear" tool_tip="Landingspunt leegmaken"/>
+ <button width="70" left="311" label="Opschonen" label_selected="Opschonen" name="Clear" tool_tip="Landingspunt leegmaken"/>
<text name="Teleport Routing: ">
Teleport routering:
</text>
<combo_box name="landing type" tool_tip="Teleport routering -- selecteer hoe teleports naar uw land moeten worden afgehandeld.">
- <combo_item name="Blocked">
- Geblokkeerd
- </combo_item>
- <combo_item name="LandingPoint">
- Landingsplaats
- </combo_item>
- <combo_item name="Anywhere">
- Overal
- </combo_item>
+ <combo_box.item name="Blocked" label="Geblokkeerd"/>
+ <combo_box.item name="LandingPoint" label="Landingsplaats"/>
+ <combo_box.item name="Anywhere" label="Overal"/>
</combo_box>
<string name="push_restrict_text">
Niet duwen
@@ -496,12 +466,8 @@ hebt geklikt.)
<check_box label="Groepstoegang toestaan: [GROUP]" name="GroupCheck" tool_tip="Stel de groep in op het tabblad Algemeen"/>
<check_box label="Verkoop toegangspassen aan:" name="PassCheck" tool_tip="Tijdelijke toegang tot dit perceel toestaan"/>
<combo_box name="pass_combo" left_delta="190">
- <combo_item name="Anyone">
- Iedereen
- </combo_item>
- <combo_item name="Group">
- Groep
- </combo_item>
+ <combo_box.item name="Anyone" label="Iedereen"/>
+ <combo_box.item name="Group" label="Groep"/>
</combo_box>
<spinner label="Prijs in L$:" name="PriceSpin" label_width="168" width="228" />
<spinner label="Toegangsuren" name="HoursSpin" label_width="168" width="228" />
diff --git a/indra/newview/skins/default/xui/nl/floater_buy_contents.xml b/indra/newview/skins/default/xui/nl/floater_buy_contents.xml
index df0614b3d2..0c513c923a 100644
--- a/indra/newview/skins/default/xui/nl/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/nl/floater_buy_contents.xml
@@ -6,7 +6,7 @@
<text name="buy_text">
Koop voor L$[AMOUNT] van [NAME]?
</text>
- <button label="Annuleren" label_selected="Annuleren" name="cancel_btn" width="73"/>
+ <button label="Annuleren" label_selected="Annuleren" name="cancel_btn"/>
<button label="Koop" label_selected="Koop" name="buy_btn"/>
<check_box label="Draag kleding nu" name="wear_check"/>
<string name="no_copy_text">
diff --git a/indra/newview/skins/default/xui/nl/floater_color_picker.xml b/indra/newview/skins/default/xui/nl/floater_color_picker.xml
index 25294e17e2..24b242e15c 100644
--- a/indra/newview/skins/default/xui/nl/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/nl/floater_color_picker.xml
@@ -18,14 +18,13 @@
<text name="l_val_text">
Lum:
</text>
- <check_box label="Direct toepassen" name="apply_immediate"/>
+ <check_box label="Meteen toepassen" name="apply_immediate"/>
<button label="Annuleren" label_selected="Annuleren" name="cancel_btn"/>
<button label="Selecteer" label_selected="Selecteer" name="select_btn"/>
<text name="Current color:">
Huidige kleur:
</text>
<text name="(Drag below to save.)">
- (Sleep naar beneden
- om op te slaan.)
+ (Sleep naar beneden om op te slaan.)
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_env_settings.xml b/indra/newview/skins/default/xui/nl/floater_env_settings.xml
index d66c0b2205..d212f544c5 100644
--- a/indra/newview/skins/default/xui/nl/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/nl/floater_env_settings.xml
@@ -1,10 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Environment Editor Floater" title="Omgeving editor">
- <text bottom="-42" name="EnvTimeText">
- Tijd van de
-dag
+ <text name="EnvTimeText">
+ Tijd van de dag
</text>
- <text bottom_delta="-36" name="EnvTimeText2">
+ <text name="EnvTimeText2">
0:00
</text>
<text name="EnvCloudText">
diff --git a/indra/newview/skins/default/xui/nl/floater_inspect.xml b/indra/newview/skins/default/xui/nl/floater_inspect.xml
index 96c9d59f90..d4fa75d94f 100644
--- a/indra/newview/skins/default/xui/nl/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/nl/floater_inspect.xml
@@ -2,10 +2,10 @@
<floater name="inspect" title="Objecten inspecteren">
<scroll_list name="object_list" tool_tip="Selecteer een object van deze lijst om het in-wereld te markeren">
<column label="Objectnaam" name="object_name"/>
- <column label="Eigenaar" name="owner_name"/>
- <column label="Maker" name="creator_name"/>
+ <column label="Eigenaarnaam" name="owner_name"/>
+ <column label="Makernaam:" name="creator_name"/>
<column label="Aanmaakdatum" name="creation_date"/>
</scroll_list>
- <button label="Toon profiel eigenaar..." label_selected="" name="button owner" tool_tip="Bekijk het profiel van de eigenaar van het gemarkeerde object"/>
- <button label="Toon profiel maker..." label_selected="" name="button creator" tool_tip="Bekijk het profiel van de originele maker van het gemarkeerde object"/>
+ <button label="Bekijk eigenaarprofiel..." label_selected="" name="button owner" tool_tip="Bekijk het profiel van de eigenaar van het gemarkeerde object"/>
+ <button label="Bekijk makerprofiel..." label_selected="" name="button creator" tool_tip="Bekijk het profiel van de originele maker van het gemarkeerde object"/>
</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_joystick.xml b/indra/newview/skins/default/xui/nl/floater_joystick.xml
index dcdddd0492..27556a89f8 100644
--- a/indra/newview/skins/default/xui/nl/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/nl/floater_joystick.xml
@@ -1,9 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Joystick" title="Joystick configuratie">
- <check_box name="enable_joystick" width="80">
- Joystick inschakelen:
+ <check_box name="enable_joystick">
+ Joystick inschakelen
</check_box>
- <text left="146" name="joystick_type" width="360"/>
<spinner label="X-as mapping" name="JoystickAxis1"/>
<spinner label="Y-as mapping" name="JoystickAxis2"/>
<spinner label="Z-as mapping" name="JoystickAxis0"/>
@@ -53,7 +52,7 @@
<text name="ZDeadZone">
Z dode zone
</text>
- <text name="PitchDeadZone" left="4" width="110">
+ <text name="PitchDeadZone">
Stampen dode zone
</text>
<text name="YawDeadZone">
@@ -71,9 +70,9 @@
<text name="ZoomDeadZone">
Zoom dode zone
</text>
- <button label="SpaceNavigator standaardwaarden" name="SpaceNavigatorDefaults" width="200" font="SansSerifSmall"/>
+ <button label="SpaceNavigator standaardwaarden" name="SpaceNavigatorDefaults"/>
<button label="OK" label_selected="OK" name="ok_btn"/>
- <button label="Annuleren" label_selected="Annuleren" name="cancel_btn" left_delta="110"/>
+ <button label="Annuleren" label_selected="Annuleren" name="cancel_btn"/>
<string name="JoystickMonitor">
Joystick monitor
</string>
diff --git a/indra/newview/skins/default/xui/nl/floater_mute_object.xml b/indra/newview/skins/default/xui/nl/floater_mute_object.xml
index ca3b34c3a2..efc12f29e2 100644
--- a/indra/newview/skins/default/xui/nl/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/nl/floater_mute_object.xml
@@ -1,11 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="mute by name" title="Negeer object op naam">
- <text name="message" bottom_delta="-40">
- Negeer op naam heeft alleen invloed op object chat
-en IM, niet op geluiden. U dient de naam van het object
-exact te typen.
+ <text name="message">
+ Negeer op naam heeft alleen invloed op object chat en IM, niet op geluiden. U dient de naam van het object exact te typen.
</text>
- <line_editor name="object_name" bottom_delta="-58">
+ <line_editor name="object_name">
Object naam
</line_editor>
<button label="Ok" name="OK"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_openobject.xml b/indra/newview/skins/default/xui/nl/floater_openobject.xml
index 10b502be1c..58ca71505a 100644
--- a/indra/newview/skins/default/xui/nl/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/nl/floater_openobject.xml
@@ -3,6 +3,6 @@
<text name="object_name">
[DESC]:
</text>
- <button label="Kopiëren naar inventaris" label_selected="Kopiëren naar inventaris" name="copy_to_inventory_button" width="140"/>
- <button label="Kopiëren en dragen" label_selected="Kopiëren en dragen" name="copy_and_wear_button" left="164"/>
+ <button label="Kopiëren naar inventaris" label_selected="Kopiëren naar inventaris" name="copy_to_inventory_button"/>
+ <button label="Kopiëren en dragen" label_selected="Kopiëren en dragen" name="copy_and_wear_button"/>
</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_pay.xml b/indra/newview/skins/default/xui/nl/floater_pay.xml
index 4018ebdc93..3255412439 100644
--- a/indra/newview/skins/default/xui/nl/floater_pay.xml
+++ b/indra/newview/skins/default/xui/nl/floater_pay.xml
@@ -6,10 +6,10 @@
<button label="L$20" label_selected="L$20" name="fastpay 20"/>
<button label="Betaal" label_selected="Betaal" name="pay btn"/>
<button label="Annuleren" label_selected="Annuleren" name="cancel btn"/>
- <text name="payee_label" width="100">
+ <text name="payee_label">
Betaal inwoner:
</text>
- <text name="payee_name" left="110">
+ <text name="payee_name">
[FIRST] [LAST]
</text>
<text name="fastpay text">
diff --git a/indra/newview/skins/default/xui/nl/floater_pay_object.xml b/indra/newview/skins/default/xui/nl/floater_pay_object.xml
index d3826648f2..23a161ac14 100644
--- a/indra/newview/skins/default/xui/nl/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/nl/floater_pay_object.xml
@@ -1,21 +1,21 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Give Money" title="">
- <text name="payee_group" left="5" width="90" halign="left">
+ <text name="payee_group">
Betaal groep:
</text>
- <text name="payee_resident" left="5" width="90" halign="left">
+ <text name="payee_resident">
Betaal inwoner:
</text>
- <text name="payee_name" left="100" width="200">
+ <text name="payee_name">
[FIRST] [LAST]
</text>
- <text name="object_name_label" left="5" width="90" halign="left">
+ <text name="object_name_label">
Via object:
</text>
- <text name="object_name_text" left="100" width="200">
+ <text name="object_name_text">
...
</text>
- <text name="fastpay text" halign="left">
+ <text name="fastpay text">
Snel betalen:
</text>
<text name="amount text">
diff --git a/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml b/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml
index c1c9492286..d19b5523f5 100644
--- a/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/nl/floater_perm_prefs.xml
@@ -9,7 +9,7 @@
</text>
<check_box label="Wijzigen" name="next_owner_modify"/>
<check_box label="Kopiëren" name="next_owner_copy"/>
- <check_box label="Verkopen/weggeven" name="next_owner_transfer" left_delta="80"/>
+ <check_box label="Verkopen/weggeven" name="next_owner_transfer"/>
</panel>
<button label="OK" label_selected="OK" name="ok"/>
<button label="Annuleren" label_selected="Annuleren" name="cancel"/>
diff --git a/indra/newview/skins/default/xui/nl/floater_select_key.xml b/indra/newview/skins/default/xui/nl/floater_select_key.xml
index c8daa10ab6..da97c03a6c 100644
--- a/indra/newview/skins/default/xui/nl/floater_select_key.xml
+++ b/indra/newview/skins/default/xui/nl/floater_select_key.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="modal container" title="">
<button label="Annuleren" label_selected="Annuleren" name="Cancel"/>
- <text name="Save item as:" left="12" width="220">
- Druk op een toets om die te selecteren
+ <text name="Save item as:">
+ Druk een toets om te selecteren
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_telehub.xml b/indra/newview/skins/default/xui/nl/floater_telehub.xml
index 5a8abc208a..b1fc80cf3c 100644
--- a/indra/newview/skins/default/xui/nl/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/nl/floater_telehub.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="telehub" title="Telehub" width="292">
+<floater name="telehub" title="Telehub">
<text name="status_text_connected">
Telehub verbonden met object [OBJECT]
</text>
@@ -13,21 +13,13 @@
Selecteer objecten klik Verbind telehub
</text>
<button label="Verbind telehub" name="connect_btn"/>
- <button label="Verbinding verbreken" name="disconnect_btn" width="128"/>
+ <button label="Verbinding verbreken" name="disconnect_btn"/>
<text name="spawn_points_text">
Spawnpunten (posities, niet objecten):
</text>
- <scroll_list bottom_delta="-44" draw_border="true" follows="left|top" font="SansSerifSmall"
- height="40" left="10" multi_select="false" name="spawn_points_list"
- width="230" />
-
<button label="Spawn toevoegen" name="add_spawn_point_btn"/>
<button label="Verwijder Spawn" name="remove_spawn_point_btn"/>
- <text name="spawn_point_help" width="290">
- Selecteer object en klik Toevoegen om positie
-te specificeren. U kunt het object daarna verplaatsen
-of verwijderen. Posities zijn relatief ten opzichte
-van het middelpunt van de telehub. Selecteer een
-item in de lijst om de positie in de wereld te tonen.
+ <text name="spawn_point_help">
+ Selecteer object en klik Toevoegen om positie te specificeren. U kunt het object daarna verplaatsen of verwijderen. Posities zijn relatief ten opzichte van het middelpunt van de telehub. Selecteer een item in de lijst om de positie in de wereld te tonen.
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml
index 13a68747c6..440a31097d 100644
--- a/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/nl/floater_texture_ctrl.xml
@@ -9,12 +9,12 @@
<text name="unknown">
Afmetingen: [DIMENSIONS]
</text>
- <button label="Standaard" label_selected="Standaard" name="Default" width="70"/>
- <button label="Geen" label_selected="Geen" name="None" left="80"/>
+ <button label="Standaard" label_selected="Standaard" name="Default"/>
+ <button label="Geen" label_selected="Geen" name="None"/>
<button label="Blanco" label_selected="Blanco" name="Blank"/>
<check_box label="Toon mappen" name="show_folders_check"/>
<search_editor label="Type hier om te zoeken" name="inventory search editor"/>
- <check_box label="Direct toepassen" name="apply_immediate_check"/>
+ <check_box label="Meteen toepassen" name="apply_immediate_check"/>
<button label="Annuleren" label_selected="Annuleren" name="Cancel"/>
<button label="Selecteren" label_selected="Selecteren" name="Select"/>
<string name="pick title">
diff --git a/indra/newview/skins/default/xui/nl/floater_tools.xml b/indra/newview/skins/default/xui/nl/floater_tools.xml
index 42cf22aa15..c7f99195dd 100644
--- a/indra/newview/skins/default/xui/nl/floater_tools.xml
+++ b/indra/newview/skins/default/xui/nl/floater_tools.xml
@@ -1,25 +1,25 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Bouwen" width="288">
+<floater name="toolbox floater" title="">
<button label="" label_selected="" name="button focus" tool_tip="Focus"/>
<button label="" label_selected="" name="button move" tool_tip="Verplaats"/>
<button label="" label_selected="" name="button edit" tool_tip="Bewerk"/>
<button label="" label_selected="" name="button create" tool_tip="Maak"/>
<button label="" label_selected="" name="button land" tool_tip="Land"/>
<check_box label="Zoom" name="radio zoom"/>
- <check_box label="Roteren (Ctrl)" name="radio orbit"/>
+ <check_box label="Draaien (Ctrl)" name="radio orbit"/>
<check_box label="Verplaatsen (Ctrl-Shift)" name="radio pan"/>
<check_box label="Verplaatsen" name="radio move"/>
<check_box label="Optillen (Ctrl)" name="radio lift"/>
- <check_box label="Roteren (Ctrl-Shift)" name="radio spin"/>
+ <check_box label="Draaien (Ctrl-Shift)" name="radio spin"/>
<check_box label="Positie" name="radio position"/>
- <check_box label="Roteren (Ctrl)" name="radio rotate"/>
+ <check_box label="Draaien (Ctrl)" name="radio rotate"/>
<check_box label="Uitrekken (Ctrl-Shift)" name="radio stretch"/>
<check_box label="Selecteer textuur" name="radio select face"/>
<check_box label="Bewerk gekoppelde onderdelen" name="checkbox edit linked parts"/>
<text name="text ruler mode">
Liniaal:
</text>
- <combo_box name="combobox grid mode" width="78" left_delta="38">
+ <combo_box name="combobox grid mode">
<combo_item name="World">
Wereld
</combo_item>
@@ -30,18 +30,18 @@
Referentie
</combo_item>
</combo_box>
- <check_box left="136" label="Beide zijden uitrekken" name="checkbox uniform"/>
- <check_box left="136" label="Texturen uitrekken" name="checkbox stretch textures"/>
- <check_box left="136" label="Gebruik grid" name="checkbox snap to grid"/>
- <button label="Opties..." label_selected="Opties..." name="Options..." height="18" bottom_delta="-15"/>
- <text name="text status" width="280">
+ <check_box label="Beide zijden uitrekken" name="checkbox uniform"/>
+ <check_box label="Texturen uitrekken" name="checkbox stretch textures"/>
+ <check_box label="Gebruik grid" name="checkbox snap to grid"/>
+ <button label="Opties..." label_selected="Opties..." name="Options..."/>
+ <text name="text status">
Sleep om te verplaatsen, Shift-slepen om te kopiëren
</text>
<button label="" label_selected="" name="ToolCube" tool_tip="Kubus"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
<button label="" label_selected="" name="ToolPyramid" tool_tip="Piramide"/>
<button label="" label_selected="" name="ToolTetrahedron" tool_tip="Tetrahedron"/>
- <button label="" label_selected="" name="ToolCylinder" tool_tip="Cilinder"/>
+ <button label="" label_selected="" name="ToolCylinder" tool_tip="Cylinder"/>
<button label="" label_selected="" name="ToolHemiCylinder" tool_tip="Halve cilinder"/>
<button label="" label_selected="" name="ToolCone" tool_tip="Kegel"/>
<button label="" label_selected="" name="ToolHemiCone" tool_tip="Halve kegel"/>
@@ -73,13 +73,13 @@
<text name="Strength:">
Sterkte
</text>
- <text name="obj_count" left="134">
+ <text name="obj_count">
Geselecteerde objecten: [COUNT]
</text>
- <text name="prim_count" left="134">
+ <text name="prim_count">
primitieven: [COUNT]
</text>
- <tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" width="288">
+ <tab_container name="Object Info Tabs">
<panel label="Algemeen" name="General">
<text name="Name:">
Naam:
@@ -95,7 +95,7 @@
</text>
<button label="Profiel..." label_selected="Profiel..." name="button creator profile"/>
<text name="Owner:">
- Eigenaar:
+ Eigenaar
</text>
<text name="Owner Name">
Thrax Linden
@@ -112,7 +112,7 @@
Permissies:
</text>
<text name="perm_modify">
- U kunt dit object wijzigen.
+ U kunt dit object wijzigen
</text>
<check_box label="Deel met groep" name="checkbox share with group" tool_tip="Alle leden van de ingestelde groep toestaan om te delen en uw permissies voor dit object te gebruiken. U moet &apos;Overdragen&apos; om rolbeperkingen in te schakelen."/>
<string name="text deed continued">
@@ -144,12 +144,12 @@
Volgende eigenaar kan:
</text>
<check_box label="Wijzigen" name="checkbox next owner can modify"/>
- <check_box label="Kopiëren" name="checkbox next owner can copy" left_delta="80"/>
- <check_box label="Verkopen/weggeven" name="checkbox next owner can transfer" left_delta="67"/>
+ <check_box label="Kopiëren" name="checkbox next owner can copy"/>
+ <check_box label="Verkopen/weggeven" name="checkbox next owner can transfer"/>
<text name="label click action">
Wanneer links-geklikt:
</text>
- <combo_box name="clickaction" width="178">
+ <combo_box name="clickaction">
<combo_item name="Touch/grab(default)">
Aanraken/pakken (standaard)
</combo_item>
@@ -191,19 +191,19 @@
F:
</text>
<string name="text modify info 1">
- U kunt dit object wijzigen.
+ U kunt dit object wijzigen
</string>
<string name="text modify info 2">
- U kunt deze objecten wijzigen.
+ U kunt deze objecten wijzigen
</string>
<string name="text modify info 3">
- U kunt dit object niet wijzigen.
+ U kunt dit object niet wijzigen
</string>
<string name="text modify info 4">
- U kunt deze objecten niet wijzigen.
+ U kunt deze objecten niet wijzigen
</string>
<string name="text modify warning">
- U moet het hele object selecteren om permissies in te stellen.
+ U moet het hele object selecteren om permissies in te stellen
</string>
<string name="Cost Default">
Prijs: L$
@@ -358,7 +358,7 @@
Deuk begin en einde
</text>
<text name="advanced_slice">
- Uitsnede begin en einde
+ Uitsnede Begin en Einde
</text>
<spinner label="B" name="Path Limit Begin"/>
<spinner label="E" name="Path Limit End"/>
@@ -370,7 +370,7 @@
<text name="text radius delta">
Straal
</text>
- <text name="text revolutions" width="84">
+ <text name="text revolutions">
Omwentelingen
</text>
<texture_picker label="Sculpt textuur" name="sculpt texture control" tool_tip="Klik om een afbeelding te kiezen"/>
@@ -405,14 +405,14 @@
Bewerk objectkenmerken:
</text>
<check_box label="Flexibiliteit" name="Flexible1D Checkbox Ctrl" tool_tip="Staat toe dat objecten kunnen buigen om de Z-as. (alleen aan de client kant)"/>
- <spinner label="Zachtheid" name="FlexNumSections" width="143" label_width="80"/>
- <spinner label="Zwaartekracht" name="FlexGravity" width="143" label_width="80"/>
- <spinner label="Slepen" name="FlexFriction" width="143" label_width="80"/>
- <spinner label="Wind" name="FlexWind" width="143" label_width="80"/>
- <spinner label="Spanning" name="FlexTension" width="143" label_width="80"/>
- <spinner label="Kracht X" name="FlexForceX" width="143" label_width="80"/>
- <spinner label="Kracht Y" name="FlexForceY" width="143" label_width="80"/>
- <spinner label="Kracht Z" name="FlexForceZ" width="143" label_width="80"/>
+ <spinner label="Zachtheid" name="FlexNumSections"/>
+ <spinner label="Zwaartekracht" name="FlexGravity"/>
+ <spinner label="Slepen" name="FlexFriction"/>
+ <spinner label="Wind" name="FlexWind"/>
+ <spinner label="Spanning" name="FlexTension"/>
+ <spinner label="Kracht X" name="FlexForceX"/>
+ <spinner label="Kracht Y" name="FlexForceY"/>
+ <spinner label="Kracht Z" name="FlexForceZ"/>
<check_box label="Licht" name="Light Checkbox Ctrl" tool_tip="Zorgt dat het object licht uitstraalt"/>
<text name="label color">
Kleur
@@ -425,13 +425,13 @@
<panel label="Textuur" name="Texture">
<texture_picker label="Textuur" name="texture control" tool_tip="Klik om een afbeelding te kiezen"/>
<color_swatch label="Kleur" name="colorswatch" tool_tip="Klik om kleurkiezer to openen"/>
- <text name="color trans" width="100">
+ <text name="color trans">
Transparantie %
</text>
<text name="glow label">
Gloed
</text>
- <check_box label="Volledige &#10;helderheid" name="checkbox fullbright" bottom_delta="-21"/>
+ <check_box label="Volledige helderheid" name="checkbox fullbright"/>
<text name="tex gen">
Mapping
</text>
@@ -536,7 +536,7 @@
Herhalingen per zijde
</string>
<text name="rpt">
- Herhalingen per m
+ Herhalingen per meter
</text>
<button label="Toepassen" label_selected="Toepassen" name="button apply"/>
<text name="tex offset">
@@ -545,15 +545,13 @@
<spinner label="Horizontaal (U)" name="TexOffsetU"/>
<spinner label="Verticaal (V)" name="TexOffsetV"/>
<text name="textbox autofix">
- Mediatextuur uitlijnen
-(moet eerst laden)
+ Mediatextuur uitlijnen (moet eerst laden)
</text>
- <button label="Uitlijnen" label_selected="Uitlijnen" name="button align" left="155" />
+ <button label="Uitlijnen" label_selected="Uitlijnen" name="button align"/>
</panel>
<panel label="Inhoud" name="Contents">
<button label="Nieuw script" label_selected="Nieuw script..." name="button new script"/>
<button label="Permissies..." name="button permissions"/>
- <panel name="ContentsInventory" width="272" />
</panel>
</tab_container>
<panel name="land info panel">
@@ -561,14 +559,14 @@
Perceel Informatie
</text>
<text name="label_area_price">
- Prijs: L$[PRICE] voor [AREA] m².
+ Prijs: L$[PRICE] voor [AREA] m2.
</text>
<text name="label_area">
- Gebied: [AREA] m².
+ Gebied: [AREA] m2.
</text>
<button label="Over land..." label_selected="Over land..." name="button about land"/>
<check_box label="Toon Eigenaren" name="checkbox show owners" tool_tip="Kleur percelen op basis van hun eigendom"/>
- <button label="?" label_selected="?" name="button show owners help" left_delta="105"/>
+ <button label="?" label_selected="?" name="button show owners help"/>
<text name="label_parcel_modify">
Wijzig Perceel
</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_top_objects.xml b/indra/newview/skins/default/xui/nl/floater_top_objects.xml
index cc252352eb..e79ee4ea56 100644
--- a/indra/newview/skins/default/xui/nl/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/nl/floater_top_objects.xml
@@ -4,29 +4,29 @@
Laden…
</text>
<scroll_list name="objects_list">
- <column label="Score" name="score" width="84"/>
- <column label="Naam" name="name" width="84"/>
- <column label="Eigenaar" name="owner" width="84"/>
- <column label="Locatie" name="location" width="84"/>
- <column label="Tijd" name="time" width="84"/>
- <column label="Mono tijd" name="mono_time" width="84"/>
+ <column label="Score" name="score"/>
+ <column label="Naam" name="name"/>
+ <column label="Eigenaar" name="owner"/>
+ <column label="Locatie" name="location"/>
+ <column label="Tijd" name="time"/>
+ <column label="Mono tijd" name="mono_time"/>
</scroll_list>
- <text name="id_text" left="2">
+ <text name="id_text">
Object ID:
</text>
<button label="Toon baken" name="show_beacon_btn"/>
- <text name="obj_name_text" left="2">
+ <text name="obj_name_text">
Object naam:
</text>
<button label="Filter" name="filter_object_btn"/>
- <text name="owner_name_text" left="2">
+ <text name="owner_name_text">
Eigenaar naam:
</text>
<button label="Filter" name="filter_owner_btn"/>
- <button label="Geselecteerde retourneren" name="return_selected_btn" width="170"/>
- <button label="Alles retourneren" name="return_all_btn" left="190"/>
- <button label="Geselecteerde uitschakelen" name="disable_selected_btn" width="170"/>
- <button label="Alles uitschakelen" name="disable_all_btn" left="190"/>
+ <button label="Geselecteerde retourneren" name="return_selected_btn"/>
+ <button label="Alles retourneren" name="return_all_btn"/>
+ <button label="Geselecteerde uitschakelen" name="disable_selected_btn"/>
+ <button label="Alles uitschakelen" name="disable_all_btn"/>
<button label="Verversen" name="refresh_btn"/>
<string name="top_scripts_title">
Top scripts
diff --git a/indra/newview/skins/default/xui/nl/floater_url_entry.xml b/indra/newview/skins/default/xui/nl/floater_url_entry.xml
index 6926f09390..23ea21bcc5 100644
--- a/indra/newview/skins/default/xui/nl/floater_url_entry.xml
+++ b/indra/newview/skins/default/xui/nl/floater_url_entry.xml
@@ -4,8 +4,8 @@
Media URL:
</text>
<button label="OK" name="ok_btn"/>
- <button label="Annuleren" name="cancel_btn" width="80"/>
- <button label="Leegmaken" name="clear_btn" width="80"/>
+ <button label="Annuleren" name="cancel_btn"/>
+ <button label="Leegmaken" name="clear_btn"/>
<text name="loading_label">
Laden…
</text>
diff --git a/indra/newview/skins/default/xui/nl/floater_water.xml b/indra/newview/skins/default/xui/nl/floater_water.xml
index 2238008fd8..38ec15d1a0 100644
--- a/indra/newview/skins/default/xui/nl/floater_water.xml
+++ b/indra/newview/skins/default/xui/nl/floater_water.xml
@@ -1,12 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Water Floater" title="Geavanceerde water editor">
- <combo_box bottom="-50" height="18" left_delta="116" name="WaterPresetsCombo" width="150" />
<text name="KeyFramePresetsText">
Watervoorinstellingen
</text>
- <button label="Nieuw" label_selected="Nieuw" name="WaterNewPreset" left_delta="190"/>
+ <button label="Nieuw" label_selected="Nieuw" name="WaterNewPreset"/>
<button label="Opslaan" label_selected="Opslaan" name="WaterSavePreset"/>
- <button label="Verwijderen" label_selected="Verwijderen" name="WaterDeletePreset" width="80"/>
+ <button label="Verwijderen" label_selected="Verwijderen" name="WaterDeletePreset"/>
<tab_container name="Water Tabs">
<panel label="Instellingen" name="Settings">
<text name="BHText">
diff --git a/indra/newview/skins/default/xui/nl/panel_friends.xml b/indra/newview/skins/default/xui/nl/panel_friends.xml
index eaf6e5d55b..2f43ee0a53 100644
--- a/indra/newview/skins/default/xui/nl/panel_friends.xml
+++ b/indra/newview/skins/default/xui/nl/panel_friends.xml
@@ -11,10 +11,10 @@
<column name="icon_edit_mine" tool_tip="Vriend kan objecten wijzigen, verwijderen of oppakken"/>
<column name="icon_edit_theirs" tool_tip="U kunt de objecten van deze vriend bewerken"/>
</scroll_list>
- <button label="IM/Oproepen" name="im_btn" tool_tip="Open Instant Message sessie" width="86"/>
- <button label="Profiel" name="profile_btn" tool_tip="Toon afbeelding, groepen en andere informatie" width="86"/>
- <button label="Teleport..." name="offer_teleport_btn" tool_tip="Bied deze vriend een teleport naar uw huidige locatie aan" width="86"/>
- <button label="Betaal..." name="pay_btn" tool_tip="Geef Linden dollars (L$) aan deze vriend" width="86"/>
- <button label="Verwijderen..." name="remove_btn" tool_tip="Verwijder deze persoon van uw vriendenlijst" width="86"/>
- <button label="Toevoegen..." name="add_btn" tool_tip="Bied vriendschap aan een inwoner aan" width="86"/>
+ <button label="IM/Oproepen" name="im_btn" tool_tip="Open Instant Message sessie"/>
+ <button label="Profiel" name="profile_btn" tool_tip="Toon afbeelding, groepen en andere informatie"/>
+ <button label="Teleport..." name="offer_teleport_btn" tool_tip="Bied deze vriend een teleport naar uw huidige locatie aan"/>
+ <button label="Betaal..." name="pay_btn" tool_tip="Geef Linden dollars (L$) aan deze vriend"/>
+ <button label="Verwijderen..." name="remove_btn" tool_tip="Verwijder deze persoon van uw vriendenlijst"/>
+ <button label="Toevoegen..." name="add_btn" tool_tip="Bied vriendschap aan een inwoner aan"/>
</panel>
diff --git a/indra/newview/skins/default/xui/nl/panel_group_general.xml b/indra/newview/skins/default/xui/nl/panel_group_general.xml
index 7b78c845cd..9982a527f4 100644
--- a/indra/newview/skins/default/xui/nl/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/nl/panel_group_general.xml
@@ -16,18 +16,18 @@ Laat uw muis boven de opties zweven voor meer help.
<text name="prepend_founded_by">
Opgericht door
</text>
- <text name="founder_name" left_delta="84">
+ <text name="founder_name">
(wachten)
</text>
- <text name="group_charter_label" width="244">
+ <text name="group_charter_label">
Groepcharter
</text>
<texture_picker label="Groepinsigne" name="insignia" tool_tip="Klik om een afbeelding te kiezen"/>
- <text_editor name="charter" width="244">
+ <text_editor name="charter">
Groepcharter
</text_editor>
<button label="Deelnemen (L$0)" label_selected="Deelnemen (L$0)" name="join_button"/>
- <button label="Gedetailleerde weergave" label_selected="Gedetailleerde weergave" name="info_button" width="154"/>
+ <button label="Gedetailleerde weergave" label_selected="Gedetailleerde weergave" name="info_button"/>
<text name="text_owners_and_visible_members">
Eigenaren en zichtbare leden
</text>
@@ -43,10 +43,10 @@ Laat uw muis boven de opties zweven voor meer help.
Groepvoorkeuren
</text>
<panel name="preferences_container">
- <check_box label="Toon in zoeken" name="show_in_group_list" tool_tip="Stelt in of deze groep zichtbaar is in de zoekresultaten."/>
+ <check_box label="Toon in zoeken" name="show_in_group_list" tool_tip="Laat mensen deze groep zien in zoekresultaten."/>
<check_box label="Vrije toegang" name="open_enrollement" tool_tip="Stelt in of deze groep toestaat dat nieuwe leden lid kunnen worden zonder uitgenodigd te zijn."/>
<check_box label="Contributiebijdrage: L$" name="check_enrollment_fee" tool_tip="Stelt in of er een contributiebijdrage vereist is om lid te worden van de groep."/>
- <spinner name="spin_enrollment_fee" tool_tip="Nieuwe leden moeten deze bijdrage betalen om deel te nemen aan de groep wanneer &quot;Contributie bijdrage&quot; is aangevinkt." width="58" left_delta="142"/>
+ <spinner name="spin_enrollment_fee" tool_tip="Nieuwe leden moeten deze bijdrage betalen om deel te nemen aan de groep wanneer &quot;Contributie bijdrage&quot; is aangevinkt."/>
<combo_box name="group_mature_check" tool_tip="Stelt in of uw groepsinformatie als mature beschouwd wordt.">
<combo_item name="select_mature">
- Selecteer -
@@ -64,15 +64,14 @@ Laat uw muis boven de opties zweven voor meer help.
</text>
<combo_box name="active_title" tool_tip="Stelt de titel in die in uw avatar&apos;s naamlabel verschijnt wanneer deze groep actief is."/>
</panel>
- <check_box label="Ontvang groepsberichten" name="receive_notices" tool_tip="Stelt in of u berichten van deze groep wilt ontvangen. Verwijder het vinkje wanneer u spam ontvangt van deze groep." left_delta="-4"/>
+ <check_box label="Ontvang groepsberichten" name="receive_notices" tool_tip="Stelt in of u berichten van deze groep wilt ontvangen. Verwijder het vinkje wanneer u spam ontvangt van deze groep."/>
<check_box label="Toon deze groep in mijn profiel" name="list_groups_in_profile" tool_tip="Stelt in of u deze groep in uw profiel wil laten zien"/>
</panel>
<string name="incomplete_member_data_str">
Ledendata ophalen
</string>
<string name="confirm_group_create_str">
- Het maken van deze groep zal u L$ 100 kosten. Weet u ECHT héél zeker dat u L$ 100 wilt betalen om deze groep te maken?
-
-WEES U ER VAN BEWUST, dat als er niemand binnen 48 uur lid wordt van deze groep, deze weer ontmanteld zal worden. Hierbij zal ook de groepsnaam onbeschikbaar blijven voor toekomstig gebruik!
+ Het maken van deze groep zal u L$100 kosten. Weet u echt, echt, ECHT zeker dat u L$100 wil besteden om deze groep te maken?
+Wees u ervan bewust dat, indien niemand anders binnen 48 uur lid wordt van deze groep, deze ontmanteld zal worden, waarbij de groepsnaam onbeschikbaar zal blijven voor toekomstig gebruik.
</string>
</panel>
diff --git a/indra/newview/skins/default/xui/nl/panel_group_invite.xml b/indra/newview/skins/default/xui/nl/panel_group_invite.xml
index e012d88ff5..004fdc4bee 100644
--- a/indra/newview/skins/default/xui/nl/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/nl/panel_group_invite.xml
@@ -1,18 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Nodig een lid uit" name="invite_panel">
<text name="help_text">
- U kunt meerdere inwoners selecteren
-om voor uw groep uit te nodigen. Klik
-&apos;Open inwonerkiezer&apos; om te starten.
+ U kunt meerdere inwoners selecteren om voor uw groep uit te nodigen. Klik &apos;Open inwonerkiezer&apos; om te starten.
</text>
<button label="Open inwonerkiezer" name="add_button" tool_tip=""/>
<name_list name="invitee_list" tool_tip="Houd de Ctrl-toets vast en klik de namen van de inwoners om meerdere te selecteren."/>
<button label="Verwijder geselecteerden van lijst" name="remove_button" tool_tip="Verwijderd hierboven geselecteerde inwoners van de uitnodigingslijst."/>
<text name="role_text">
- Kies welke rol aan hen wordt
-toegewezen:
+ Kies welke rol aan hen wordt toegewezen:
</text>
- <combo_box name="role_name" tool_tip="Kies uit de lijst met rollen waarvoor u toestemming heeft om leden toe te wijzen." bottom_delta="-30"/>
+ <combo_box name="role_name" tool_tip="Kies uit de lijst met rollen waarvoor u toestemming heeft om leden toe te wijzen."/>
<button label="Verzend uitnodigingen" name="ok_button"/>
<button label="Annuleren" name="cancel_button"/>
<string name="confirm_invite_owner_str">
diff --git a/indra/newview/skins/default/xui/nl/panel_group_notices.xml b/indra/newview/skins/default/xui/nl/panel_group_notices.xml
index 68f3c87f7d..41aff527dd 100644
--- a/indra/newview/skins/default/xui/nl/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/nl/panel_group_notices.xml
@@ -11,9 +11,7 @@
Groepsberichtenarchief
</text>
<text name="lbl2">
- Berichten worden 14 dagen bewaard. Klik hieronder het bericht dat u wilt
-bekijken. Klik de &apos;Verversen&apos; knop om te controleren of nieuwe berichten zijn
-ontvangen. Berichtenlijsten zijn gelimiteerd tot 200 berichten groep per dag.
+ Berichten worden 14 dagen bewaard. Klik hieronder het bericht dat u wilt bekijken. Klik de &apos;Verversen&apos; knop om te controleren of nieuwe berichten zijn ontvangen. Berichtenlijsten zijn gelimiteerd tot 200 berichten groep per dag.
</text>
<scroll_list name="notice_list">
<column label="Onderwerp" name="subject"/>
@@ -30,25 +28,18 @@ ontvangen. Berichtenlijsten zijn gelimiteerd tot 200 berichten groep per dag.
Maak een bericht
</text>
<text name="lbl2">
- U dient een onderwerp in te voeren om een bericht te versturen.
-U kunt een enkel item aan een bericht toevoegen door het van
-uw inventaris naar dit paneel te slepen. Bevestigde items
-moeten kopieerbaar en overdraagbaar zijn en u kunt geen
-mappen versturen.
+ U dient een onderwerp in te voeren om een bericht te versturen. U kunt een enkel item aan een bericht toevoegen door het van uw inventaris naar dit paneel te slepen. Bevestigde items moeten kopieerbaar en overdraagbaar zijn en u kunt geen mappen versturen.
</text>
- <text bottom_delta="-79" halign="right" left="10" name="lbl3" width="60">
+ <text name="lbl3">
Onderwerp:
</text>
- <line_editor name="create_subject" width="331" left_delta="71"/>
- <text bottom_delta="-18" halign="right" left="10" name="lbl4" width="60">
+ <text name="lbl4">
Bericht:
</text>
- <text_editor name="create_message" bottom_delta="-90" height="104" left_delta="71" width="330"/>
- <line_editor name="create_inventory_name" width="190" left_delta="71"/>
- <text name="lbl5" left="10">
+ <text name="lbl5">
Bevestig:
</text>
- <button label="Verwijder bevestiging" label_selected="Verwijder bevestiging" name="remove_attachment"/>
+ <button label="Verwijder bevestiging:" label_selected="Verwijder bevestiging:" name="remove_attachment"/>
<button label="Verzend bericht" label_selected="Verzend bericht" name="send_notice"/>
<panel name="drop_target" tool_tip="Sleep een inventarisitem op het berichtvenster om het met het bericht mee te sturen. U dient permissie te hebben om het object te kopiëren en over te dragen wilt u het met het bericht mee kunnen sturen."/>
</panel>
@@ -65,7 +56,6 @@ mappen versturen.
<text name="lbl4">
Bericht:
</text>
- <button label="Open bevestiging" label_selected="Open bevestiging" name="open_attachment" width="118"/>
- <line_editor left="128" name="view_inventory_name" width="256"/>
+ <button label="Open bevestiging" label_selected="Open bevestiging" name="open_attachment"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/nl/panel_group_roles.xml b/indra/newview/skins/default/xui/nl/panel_group_roles.xml
index ffaaa8137a..50aabb0433 100644
--- a/indra/newview/skins/default/xui/nl/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/nl/panel_group_roles.xml
@@ -12,9 +12,7 @@
Leden &amp; Rollen
</text>
<text name="static2">
- Groepsleden krijgen Rollen met Mogelijkheden toegekend. Deze instellingen
-kunnen eenvoudig aangepast worden, zodat meer organisatie en flexibiliteit
-mogelijk is.
+ Groepsleden krijgen Rollen met Mogelijkheden toegekend. Deze instellingen kunnen eenvoudig aangepast worden, zodat meer organisatie en flexibiliteit mogelijk is.
</text>
</panel>
<panel name="roles_header">
@@ -22,14 +20,12 @@ mogelijk is.
Rollen
</text>
<text name="role_properties_modifiable">
- Selecteer een Rol hieronder. U kunt zijn Naam, Omschrijving en
-Lid Titel wijzigen.
+ Selecteer een Rol hieronder. U kunt zijn Naam, Omschrijving en Lid Titel wijzigen.
</text>
<text name="role_properties_not_modifiable">
- Selecteer een Rol hieronder om zijn eigenschappen, Leden en
-toegestane Mogelijkheden te bekijken.
+ Selecteer een Rol hieronder om zijn eigenschappen, Leden en toegestane Mogelijkheden te bekijken.
</text>
- <text bottom_delta="-28" name="role_actions_modifiable">
+ <text name="role_actions_modifiable">
U kunt ook Mogelijkheden aan de Rol toekennen.
</text>
<text name="role_actions_not_modifiable">
@@ -41,16 +37,14 @@ toegestane Mogelijkheden te bekijken.
Mogelijkheden
</text>
<text name="static2">
- U kunt de Omschrijving van een Mogelijkheid bekijken en welke Rollen en
-Leden de Mogelijkheid kunnen uitvoeren.
+ U kunt de Omschrijving van een Mogelijkheid bekijken en welke Rollen en Leden de Mogelijkheid kunnen uitvoeren.
</text>
</panel>
- <tab_container height="164" name="roles_tab_container">
- <panel height="148" label="Leden" name="members_sub_tab" tool_tip="Leden">
- <line_editor bottom="127" name="search_text"/>
+ <tab_container name="roles_tab_container">
+ <panel label="Leden" name="members_sub_tab" tool_tip="Leden">
<button label="Zoeken" name="search_button"/>
<button label="Alles Tonen" name="show_all_button"/>
- <name_list bottom_delta="-105" height="104" name="member_list">
+ <name_list name="member_list">
<column label="Lid Naam" name="name"/>
<column label="Gedoneerde Tier" name="donated"/>
<column label="Laatste Login" name="online"/>
@@ -61,16 +55,15 @@ Leden de Mogelijkheid kunnen uitvoeren.
U kunt Rollen aan Leden toewijzen of van Leden afnemen. Selecteer meerdere Leden door de Ctrl toets ingedrukt te houden en op hun namen te klikken.
</string>
</panel>
- <panel height="148" label="Rollen" name="roles_sub_tab">
- <line_editor bottom="127" name="search_text"/>
+ <panel label="Rollen" name="roles_sub_tab">
<button label="Zoeken" name="search_button"/>
<button label="Alles Tonen" name="show_all_button"/>
- <scroll_list bottom_delta="-104" height="104" name="role_list">
+ <scroll_list name="role_list">
<column label="Rol Naam" name="name"/>
<column label="Titel" name="title"/>
<column label="Leden" name="members"/>
</scroll_list>
- <button label="Nieuwe Rol Maken..." name="role_create"/>
+ <button label="Nieuwe Rol Maken ..." name="role_create"/>
<button label="Rol Verwijderen" name="role_delete"/>
<string name="help_text">
Rollen hebben een titel en een toegestane lijst met Mogelijkheden die Leden kunnen uitvoeren. Leden kunnen tot 1 of meer Rollen behoren. Een groep kan tot 10 Rollen bevatten, inclusief de Iedereen en Eigenaren Rollen.
@@ -79,11 +72,10 @@ Leden de Mogelijkheid kunnen uitvoeren.
De &apos;Iedereen&apos; en &apos;Eigenaren&apos; Rollen zijn speciaal en kunnen niet verwijderd worden.
</string>
</panel>
- <panel height="148" label="Mogelijkheden" name="actions_sub_tab">
- <line_editor bottom="127" name="search_text"/>
+ <panel label="Mogelijkheden" name="actions_sub_tab">
<button label="Zoeken" name="search_button"/>
<button label="Alles Tonen" name="show_all_button"/>
- <scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Selecteer een Mogelijkheid om meer details te bekijken."/>
+ <scroll_list name="action_list" tool_tip="Selecteer een Mogelijkheid om meer details te bekijken."/>
<string name="help_text">
Mogelijkheden stellen leden in staat om specifieke dingen in een groep te doen. Er is een brede variëteit aan Mogelijkheden.
</string>
diff --git a/indra/newview/skins/default/xui/nl/panel_groups.xml b/indra/newview/skins/default/xui/nl/panel_groups.xml
index a0c77b83ff..5b66eddb73 100644
--- a/indra/newview/skins/default/xui/nl/panel_groups.xml
+++ b/indra/newview/skins/default/xui/nl/panel_groups.xml
@@ -3,13 +3,13 @@
<text name="groupdesc">
Uw huidige actieve groep wordt vet getoond.
</text>
- <text name="groupcount" width="300">
+ <text name="groupcount">
U behoort tot [COUNT] groepen (maximaal [MAX]).
</text>
- <button label="IM/Oproepen" name="IM" tool_tip="Open Instant Message sessie" width="86"/>
- <button label="Info" name="Info" width="86"/>
- <button label="Activeren" name="Activate" width="86"/>
- <button label="Verlaten" name="Leave" width="86"/>
- <button label="Maak…" name="Create" width="86"/>
- <button label="Zoeken…" name="Search..." width="86"/>
+ <button label="IM/Oproepen" name="IM" tool_tip="Open Instant Message sessie"/>
+ <button label="Info" name="Info"/>
+ <button label="Activeren" name="Activate"/>
+ <button label="Verlaten" name="Leave"/>
+ <button label="Maak…" name="Create"/>
+ <button label="Zoeken…" name="Search..."/>
</panel>
diff --git a/indra/newview/skins/default/xui/nl/panel_region_estate.xml b/indra/newview/skins/default/xui/nl/panel_region_estate.xml
index 7a5fa801d9..731887dc5d 100644
--- a/indra/newview/skins/default/xui/nl/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/nl/panel_region_estate.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Estate" name="Estate">
<text name="estate_help_text">
- Wijzigingen van instellingen op dit tabblad
-zullen alle regio&apos;s in de estate beïnvloeden.
+ Wijzigingen van instellingen op dit tabblad zullen alle regio&apos;s in de estate beïnvloeden.
</text>
<text name="estate_text">
Estate:
@@ -11,7 +10,7 @@ zullen alle regio&apos;s in de estate beïnvloeden.
(onbekend)
</text>
<text name="owner_text">
- Eigenaar:
+ Eigenaar
</text>
<text name="estate_owner">
(onbekend)
@@ -26,22 +25,21 @@ zullen alle regio&apos;s in de estate beïnvloeden.
<text name="Only Allow">
Beperk toegang tot:
</text>
- <check_box label="Inwoners met betalingsinformatie &#10;opgeslagen" name="limit_payment" tool_tip="Verban ongeïdentificeerde inwoners."/>
- <check_box label="Leeftijdgeverifieerde volwassenen" name="limit_age_verified" tool_tip="Verban inwoners die hun leeftijd niet geverifieerd hebben. Zie support.secondlife.com voor meer informatie." bottom_delta="-30"/>
+ <check_box label="Inwoners met betalingsinformatie opgeslagen" name="limit_payment" tool_tip="Verban ongeïdentificeerde inwoners."/>
+ <check_box label="Leeftijdgeverifieerde volwassenen" name="limit_age_verified" tool_tip="Verban inwoners die hun leeftijd niet geverifieerd hebben. Zie support.secondlife.com voor meer informatie."/>
<check_box label="Voice chat toestaan" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
<check_box label="Directe teleport toestaan" name="allow_direct_teleport"/>
<button label="?" name="allow_direct_teleport_help"/>
- <text name="abuse_email_text" bottom_delta="-23">
+ <text name="abuse_email_text">
Misbruik e-mail adres:
</text>
- <line_editor bottom_delta="-14" name="abuse_email_address" />
<string name="email_unsupported">
Optie niet ondersteund
</string>
<button label="?" name="abuse_email_address_help"/>
- <button label="Toepassen" name="apply_btn" bottom_delta="-22"/>
- <button label="Gebruiker verwijderen van estate..." name="kick_user_from_estate_btn"/>
+ <button label="Toepassen" name="apply_btn"/>
+ <button label="Gebruiker verwijderen van estate" name="kick_user_from_estate_btn"/>
<button label="Zend bericht naar estate..." name="message_estate_btn"/>
<text name="estate_manager_label">
Estate beheerders:
diff --git a/indra/newview/skins/default/xui/nl/panel_region_general.xml b/indra/newview/skins/default/xui/nl/panel_region_general.xml
index fe69fe9d9a..9ed822ac13 100644
--- a/indra/newview/skins/default/xui/nl/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/nl/panel_region_general.xml
@@ -29,9 +29,9 @@
<check_box label="Landverkoop toestaan" name="allow_land_resell_check"/>
<button label="?" name="land_resell_help"/>
<check_box label="Samenvoegen/opsplitsen land toestaan" name="allow_parcel_changes_check"/>
- <button label="?" name="parcel_changes_help" left="240"/>
+ <button label="?" name="parcel_changes_help"/>
<check_box label="Blokkeer zichtbaarheid land in zoeken" name="block_parcel_search_check" tool_tip="Laat mensen deze regio en zijn percelen in zoekresultaten zien"/>
- <button label="?" name="parcel_search_help" left="240"/>
+ <button label="?" name="parcel_search_help"/>
<spinner label="Agent limiet" name="agent_limit_spin"/>
<button label="?" name="agent_limit_help"/>
<spinner label="Object bonus" name="object_bonus_spin"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_about_land.xml b/indra/newview/skins/default/xui/pl/floater_about_land.xml
index 5f4bf4ece6..7612212105 100755
--- a/indra/newview/skins/default/xui/pl/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pl/floater_about_land.xml
@@ -343,42 +343,18 @@ Jedynie większe posiadłości mogą być umieszczone w bazie wyszukiwarki.
</combo_item>
</combo_box>
<combo_box name="land category">
- <combo_item name="AnyCategory">
- Każda
- </combo_item>
- <combo_item name="LindenLocation">
- Linden Lokacja
- </combo_item>
- <combo_item name="Arts&amp;Culture">
- Sztuka i Kultura
- </combo_item>
- <combo_item name="Business">
- Biznes
- </combo_item>
- <combo_item name="Educational">
- Edukacyjna
- </combo_item>
- <combo_item name="Gaming">
- Gra
- </combo_item>
- <combo_item name="Hangout">
- Poznawanie ludzi
- </combo_item>
- <combo_item name="NewcomerFriendly">
- Przyjazna dla nowych
- </combo_item>
- <combo_item name="Parks&amp;Nature">
- Parki i Natura
- </combo_item>
- <combo_item name="Residential">
- Mieszkalna
- </combo_item>
- <combo_item name="Shopping">
- Komercja/Sklepy
- </combo_item>
- <combo_item name="Other">
- Inna
- </combo_item>
+ <combo_box.item name="AnyCategory" label="Każda"/>
+ <combo_box.item name="LindenLocation" label="Linden Lokacja"/>
+ <combo_box.item name="Arts&amp;Culture" label="Sztuka i Kultura"/>
+ <combo_box.item name="Business" label="Biznes"/>
+ <combo_box.item name="Educational" label="Edukacyjna"/>
+ <combo_box.item name="Gaming" label="Gra"/>
+ <combo_box.item name="Hangout" label="Poznawanie ludzi"/>
+ <combo_box.item name="NewcomerFriendly" label="Przyjazna dla nowych"/>
+ <combo_box.item name="Parks&amp;Nature" label="Parki i Natura"/>
+ <combo_box.item name="Residential" label="Mieszkalna"/>
+ <combo_box.item name="Shopping" label="Komercja/Sklepy"/>
+ <combo_box.item name="Other" label="Inna"/>
</combo_box>
<button label="?" label_selected="?" name="?"/>
<check_box label="Treść &apos;Mature&apos;" name="MatureCheck" tool_tip=""/>
@@ -410,15 +386,9 @@ Jedynie większe posiadłości mogą być umieszczone w bazie wyszukiwarki.
Trasa Teleportacji:
</text>
<combo_box name="landing type" tool_tip="Trasa Teleportacj-ustaw w jaki sposób będzie sę odbywać proces telportacji w posiadłości.">
- <combo_item length="1" name="Blocked" type="string">
- Zablokowana
- </combo_item>
- <combo_item length="1" name="LandingPoint" type="string">
- Punkt Lądowania
- </combo_item>
- <combo_item length="1" name="Anywhere" type="string">
- Gdziekolwiek
- </combo_item>
+ <combo_box.item length="1" name="Blocked" type="string" label="Zablokowana"/>
+ <combo_box.item length="1" name="LandingPoint" type="string" label="Punkt Lądowania"/>
+ <combo_box.item length="1" name="Anywhere" type="string" label="Gdziekolwiek"/>
</combo_box>
<string name="push_restrict_text">
Popychanie niedozwolone
@@ -497,12 +467,8 @@ Mediów:
<check_box label="Udostępnij wejście grupie: [GROUP]" name="GroupCheck" tool_tip="Ustaw grupę w głównej zakładce"/>
<check_box label="Sprzedaj wejściówki:" name="PassCheck" tool_tip="Otwórz tymczasowy dostęp do tej posiadłości"/>
<combo_box name="pass_combo">
- <combo_item name="Anyone">
- Każdemu
- </combo_item>
- <combo_item name="Group">
- Grupie
- </combo_item>
+ <combo_box.item name="Anyone" label="Każdemu"/>
+ <combo_box.item name="Group" label="Grupie"/>
</combo_box>
<spinner label="Cena w L$:" name="PriceSpin"/>
<spinner label="Ilość godzin dostępu:" name="HoursSpin"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_joystick.xml b/indra/newview/skins/default/xui/pl/floater_joystick.xml
index 8e21f225ca..8ce113514b 100755
--- a/indra/newview/skins/default/xui/pl/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/pl/floater_joystick.xml
@@ -3,7 +3,6 @@
<check_box name="enable_joystick">
Aktywuj Joystick:
</check_box>
- <text left="130" name="joystick_type" width="360"/>
<spinner label="Kalibracja Osi X" left="20" width="170" label_width="130" name="JoystickAxis1"/>
<spinner label="Kalibracja Osi Y" left="210" width="170" label_width="130" name="JoystickAxis2" />
<spinner label="Kalibracja Osi Z" left="400" width="170" label_width="130" name="JoystickAxis0" />
@@ -14,104 +13,104 @@
<check_box label="Bezpośrednie" left="205" name="ZoomDirect" />
<check_box label="Kursor 3D" left="340" name="Cursor3D" />
<check_box label="Automatyczne" left="450" name="AutoLeveling" />
- <text length="1" left="22" name="Control Modes:" type="string">
+ <text length="1" left="42" name="Control Modes:" type="string">
Kontroluj:
</text>
- <check_box left="130" width="90" name="JoystickAvatarEnabled">
+ <check_box left="150" width="90" name="JoystickAvatarEnabled">
Awatara
</check_box>
- <check_box left="205" width="90" name="JoystickBuildEnabled">
+ <check_box left="249" width="90" name="JoystickBuildEnabled">
Budowanie
</check_box>
- <check_box left="282" width="90" name="JoystickFlycamEnabled">
+ <check_box left="340" width="90" name="JoystickFlycamEnabled">
Kamerę podczas latania
</check_box>
- <text width="104" name="XScale">
+ <text width="124" name="XScale">
Skala X
</text>
- <spinner left="133" name="AvatarAxisScale1" />
- <spinner left="208" name="BuildAxisScale1" />
+ <spinner left="153" name="AvatarAxisScale1" />
+ <spinner left="218" name="BuildAxisScale1" />
<spinner left="283" name="FlycamAxisScale1" />
- <text width="104" name="YScale">
+ <text width="124" name="YScale">
Skala Y
</text>
- <spinner left="133" name="AvatarAxisScale2" />
- <spinner left="208" name="BuildAxisScale2" />
+ <spinner left="153" name="AvatarAxisScale2" />
+ <spinner left="218" name="BuildAxisScale2" />
<spinner left="283" name="FlycamAxisScale2" />
- <text width="104" name="ZScale">
+ <text width="124" name="ZScale">
Skala Z
</text>
- <spinner left="133" name="AvatarAxisScale0" />
- <spinner left="208" name="BuildAxisScale0" />
+ <spinner left="153" name="AvatarAxisScale0" />
+ <spinner left="218" name="BuildAxisScale0" />
<spinner left="283" name="FlycamAxisScale0" />
- <text width="104" name="PitchScale">
+ <text width="124" name="PitchScale">
Skala Wznoszenia
</text>
- <spinner left="133" name="AvatarAxisScale4" />
- <spinner left="208" name="BuildAxisScale4" />
+ <spinner left="153" name="AvatarAxisScale4" />
+ <spinner left="218" name="BuildAxisScale4" />
<spinner left="283" name="FlycamAxisScale4" />
- <text width="104" name="YawScale">
+ <text width="124" name="YawScale">
Skala Odchylania
</text>
- <spinner left="133" name="AvatarAxisScale5" />
- <spinner left="208" name="BuildAxisScale5" />
+ <spinner left="153" name="AvatarAxisScale5" />
+ <spinner left="218" name="BuildAxisScale5" />
<spinner left="283" name="FlycamAxisScale5" />
- <text width="104" name="RollScale">
+ <text width="124" name="RollScale">
Skala Obrotu
</text>
- <spinner left="208" name="BuildAxisScale3" />
+ <spinner left="218" name="BuildAxisScale3" />
<spinner left="283" name="FlycamAxisScale3" />
- <text width="104" name="XDeadZone">
+ <text width="124" name="XDeadZone">
Tolerancja Osi X
</text>
- <spinner left="133" name="AvatarAxisDeadZone1" />
- <spinner left="208" name="BuildAxisDeadZone1" />
+ <spinner left="153" name="AvatarAxisDeadZone1" />
+ <spinner left="218" name="BuildAxisDeadZone1" />
<spinner left="283" name="FlycamAxisDeadZone1" />
- <text width="104" name="YDeadZone">
+ <text width="124" name="YDeadZone">
Tolerancja Osi Y
</text>
- <spinner left="133" name="AvatarAxisDeadZone2" />
- <spinner left="208" name="BuildAxisDeadZone2" />
+ <spinner left="153" name="AvatarAxisDeadZone2" />
+ <spinner left="218" name="BuildAxisDeadZone2" />
<spinner left="283" name="FlycamAxisDeadZone2" />
- <text width="104" name="ZDeadZone">
+ <text width="124" name="ZDeadZone">
Tolerancja Osi Z
</text>
- <spinner left="133" name="AvatarAxisDeadZone0" />
- <spinner left="208" name="BuildAxisDeadZone0" />
+ <spinner left="153" name="AvatarAxisDeadZone0" />
+ <spinner left="218" name="BuildAxisDeadZone0" />
<spinner left="283" name="FlycamAxisDeadZone0" />
- <text width="104" name="PitchDeadZone">
+ <text width="124" name="PitchDeadZone">
Tolerancja Wznoszenia
</text>
- <spinner left="133" name="AvatarAxisDeadZone4" />
- <spinner left="208" name="BuildAxisDeadZone4" />
+ <spinner left="153" name="AvatarAxisDeadZone4" />
+ <spinner left="218" name="BuildAxisDeadZone4" />
<spinner left="283" name="FlycamAxisDeadZone4" />
- <text width="104" name="YawDeadZone">
+ <text width="124" name="YawDeadZone">
Tolerancja Odchylania
</text>
- <spinner left="133" name="AvatarAxisDeadZone5" />
- <spinner left="208" name="BuildAxisDeadZone5" />
+ <spinner left="153" name="AvatarAxisDeadZone5" />
+ <spinner left="218" name="BuildAxisDeadZone5" />
<spinner left="283" name="FlycamAxisDeadZone5" />
- <text width="104" name="RollDeadZone">
+ <text width="124" name="RollDeadZone">
Tolerancja Obrotu
</text>
- <spinner left="208" name="BuildAxisDeadZone3" />
+ <spinner left="218" name="BuildAxisDeadZone3" />
<spinner left="283" name="FlycamAxisDeadZone3" />
- <text width="104" name="Feathering">
+ <text width="124" name="Feathering">
Przenikanie
</text>
- <slider left="125" label="" name="AvatarFeathering" />
- <slider left="200" label="" name="BuildFeathering" />
+ <slider left="145" label="" name="AvatarFeathering" />
+ <slider left="210" label="" name="BuildFeathering" />
<slider left="275" label="" name="FlycamFeathering" />
- <text width="104" name="ZoomScale2">
+ <text width="124" name="ZoomScale2">
Skala Powiększania
</text>
<spinner left="283" label="" name="FlycamAxisScale6" />
- <text width="104" name="ZoomDeadZone">
+ <text width="124" name="ZoomDeadZone">
Tolerancja Powiększania
</text>
<spinner left="283" label="" name="FlycamAxisDeadZone6" />
<button left="366" label="Ustawienia Domyślne" name="SpaceNavigatorDefaults" />
- <button left="366" label="OK" label_selected="OK" name="ok_btn" />
+ <button label="OK" label_selected="OK" name="ok_btn" />
<button label="Anuluj" label_selected="Anuluj" name="cancel_btn" />
<string name="JoystickMonitor">
Monitor Joysticka
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_sound.xml b/indra/newview/skins/default/xui/pl/floater_preview_sound.xml
index 0c8684a8cf..c9dd20128d 100755
--- a/indra/newview/skins/default/xui/pl/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/pl/floater_preview_sound.xml
@@ -8,5 +8,5 @@
tool_tip="Dźwięk będzie słyszalny tylko dla Ciebie." />
<button label="Odtwarzaj w Świecie" label_selected="Odtwarzaj w Świecie"
name="Sound play btn"
- tool_tip="Dźwięk będzie słyszalny przez wszystkich." width="130" left_delta="-136"/>
+ tool_tip="Dźwięk będzie słyszalny przez wszystkich." />
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_telehub.xml b/indra/newview/skins/default/xui/pl/floater_telehub.xml
index 917ab95ecc..b4cf098878 100755
--- a/indra/newview/skins/default/xui/pl/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/pl/floater_telehub.xml
@@ -12,8 +12,8 @@
<text name="help_text_not_connected">
Wybierz obiekt i kliknij Połącz z teleporterem
</text>
- <button label="Połącz z teleporterem" name="connect_btn" width="132" />
- <button label="Rozłącz" name="disconnect_btn" left="152" width="88"/>
+ <button label="Połącz z teleporterem" name="connect_btn" width="122" />
+ <button label="Rozłącz" name="disconnect_btn" left="142" width="98"/>
<text name="spawn_points_text" width="250">
Punkty Składowe (pozycje - nie obiekty!):
</text>
diff --git a/indra/newview/skins/default/xui/pl/floater_tools.xml b/indra/newview/skins/default/xui/pl/floater_tools.xml
index c896222646..380943f4ad 100755
--- a/indra/newview/skins/default/xui/pl/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pl/floater_tools.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Buduj">
+<floater name="toolbox floater" title="">
<button label="" label_selected="" name="button focus" tool_tip="Zbliżenie"/>
<button label="" label_selected="" name="button move" tool_tip="Przesunięcie"/>
<button label="" label_selected="" name="button edit" tool_tip="Edycja"/>
@@ -311,10 +311,10 @@
</combo_item>
</combo_box>
<text name="text cut">
- Wykrój początek i koniec
+ Wykrój
</text>
- <spinner label="P" name="cut begin"/>
- <spinner label="K" name="cut end"/>
+ <spinner label="B" name="cut begin"/>
+ <spinner label="E" name="cut end"/>
<text name="text hollow">
Wydrążenie
</text>
@@ -343,8 +343,8 @@
<text name="text twist">
Skręcenie
</text>
- <spinner label="P" name="Twist Begin"/>
- <spinner label="K" name="Twist End"/>
+ <spinner label="B" name="Twist Begin"/>
+ <spinner label="E" name="Twist End"/>
<text name="scale_taper">
Zwężenie
</text>
@@ -367,8 +367,8 @@
<text name="advanced_slice">
Przetnij początek i koniec
</text>
- <spinner label="P" name="Path Limit Begin"/>
- <spinner label="K" name="Path Limit End"/>
+ <spinner label="B" name="Path Limit Begin"/>
+ <spinner label="E" name="Path Limit End"/>
<text name="text taper2">
Zwężenie
</text>
@@ -434,15 +434,15 @@
<panel label="Tekstura" name="Texture">
<texture_picker label="Tekstura" name="texture control" tool_tip="Kliknij by wybrać obraz"/>
<color_swatch label="Kolor" name="colorswatch" tool_tip="Kliknij by wybrać kolor"/>
- <text name="color trans" left="170" width="99">
- Przezroczystość%
+ <text name="color trans">
+ Przezroczystość %
</text>
- <spinner left="170" name="ColorTrans"/>
- <text name="glow label" left="170">
+ <spinner name="ColorTrans"/>
+ <text name="glow label">
Blask
</text>
- <spinner left="170" name="glow"/>
- <check_box label="Jaskrawość" name="checkbox fullbright" left="170"/>
+ <spinner name="glow"/>
+ <check_box label="Jaskrawość" name="checkbox fullbright"/>
<text name="tex gen">
Mapowanie
</text>
@@ -561,7 +561,7 @@
Dopasuj Teksturę Mediów
(najpierw załaduj)
</text>
- <button label="Dopasuj" label_selected="Dopasuj" name="button align" left="160"/>
+ <button label="Dopasuj" label_selected="Dopasuj" name="button align"/>
</panel>
<panel label="Treść" name="Contents">
<button label="Nowy Skrypt" label_selected="Nowy Skrypt..." name="button new script"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml
index 79db9db822..fee7ed60f5 100644
--- a/indra/newview/skins/default/xui/pt/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml
@@ -301,7 +301,7 @@ Apenas lotes maiores podem ser listados na busca.
<string name="search_disabled_permissions_tooltip">
Esta opção está desabilitada porque você não pode modificar as opções deste lote.
</string>
- <combo_box name="land category with adult" left="265" width="155">
+ <combo_box name="land category with adult">
<combo_item name="AnyCategory">
Qualquer Categoria
</combo_item>
@@ -342,43 +342,19 @@ Apenas lotes maiores podem ser listados na busca.
Outros
</combo_item>
</combo_box>
- <combo_box name="land category" left="265" width="155">
- <combo_item name="AnyCategory">
- Qualquer Categoria
- </combo_item>
- <combo_item name="LindenLocation">
- Locação Linden
- </combo_item>
- <combo_item name="Arts&amp;Culture">
- Artes e Cultura
- </combo_item>
- <combo_item name="Business">
- Negócios
- </combo_item>
- <combo_item name="Educational">
- Educacional
- </combo_item>
- <combo_item name="Gaming">
- Jogo
- </combo_item>
- <combo_item name="Hangout">
- Lazer
- </combo_item>
- <combo_item name="NewcomerFriendly">
- Amigável para novatos
- </combo_item>
- <combo_item name="Parks&amp;Nature">
- Parques e Natureza
- </combo_item>
- <combo_item name="Residential">
- Residencial
- </combo_item>
- <combo_item name="Shopping">
- Compras
- </combo_item>
- <combo_item name="Other">
- Outros
- </combo_item>
+ <combo_box left="276" name="land category" width="146">
+ <combo_box.item name="AnyCategory" label="Qualquer Categoria"/>
+ <combo_box.item name="LindenLocation" label="Locação Linden"/>
+ <combo_box.item name="Arts&amp;Culture" label="Artes e Cultura"/>
+ <combo_box.item name="Business" label="Negócios"/>
+ <combo_box.item name="Educational" label="Educacional"/>
+ <combo_box.item name="Gaming" label="Jogo"/>
+ <combo_box.item name="Hangout" label="Lazer"/>
+ <combo_box.item name="NewcomerFriendly" label="Amigável para novatos"/>
+ <combo_box.item name="Parks&amp;Nature" label="Parques e Natureza"/>
+ <combo_box.item name="Residential" label="Residencial"/>
+ <combo_box.item name="Shopping" label="Compras"/>
+ <combo_box.item name="Other" label="Outros"/>
</combo_box>
<button label="?" label_selected="?" left="426" name="?"/>
<check_box label="Conteúdo Mature" name="MatureCheck" tool_tip=""/>
@@ -409,16 +385,10 @@ Apenas lotes maiores podem ser listados na busca.
<text length="1" name="Teleport Routing: " type="string">
Rota de Tele-transporte:
</text>
- <combo_box width="160" left="140" name="landing type" tool_tip="Rota de Teletransporte -- Selecione como tratar os tele-transportes no seu lote.">
- <combo_item length="1" name="Blocked" type="string">
- Bloqueado
- </combo_item>
- <combo_item length="1" name="LandingPoint" type="string">
- Ponto de Aterrissagem
- </combo_item>
- <combo_item length="1" name="Anywhere" type="string">
- Qualquer lugar
- </combo_item>
+ <combo_box left="140" name="landing type" tool_tip="Rota de Teletransporte -- Selecione como tratar os tele-transportes no seu lote." width="140">
+ <combo_box.item length="1" name="Blocked" type="string" label="Bloqueado"/>
+ <combo_box.item length="1" name="LandingPoint" type="string" label="Ponto de Aterrissagem"/>
+ <combo_box.item length="1" name="Anywhere" type="string" label="Qualquer lugar"/>
</combo_box>
<string name="push_restrict_text">
Sem Empurrar
@@ -499,12 +469,8 @@ Mídia:
<check_box label="Permitir Acesso do Grupo: [GROUP]" name="GroupCheck" tool_tip="Definir grupo na aba Geral."/>
<check_box label="Vender passes para:" name="PassCheck" tool_tip="Permite acesso temporário a este terreno"/>
<combo_box name="pass_combo">
- <combo_item name="Anyone">
- Qualquer um
- </combo_item>
- <combo_item name="Group">
- Grupo
- </combo_item>
+ <combo_box.item name="Anyone" label="Qualquer um"/>
+ <combo_box.item name="Group" label="Grupo"/>
</combo_box>
<spinner label="Preço em L$:" name="PriceSpin"/>
<spinner label="Horas de Acesso:" name="HoursSpin"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml b/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
index 4e1598c8fa..8f433a635d 100644
--- a/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="avatarpicker" title="Escolha o Residente" min_width="285" width="285">
- <tab_container name="ResidentChooserTabs" width="275">
+<floater name="avatarpicker" title="Escolha o Residente">
+ <tab_container name="ResidentChooserTabs">
<panel label="Buscar" name="SearchPanel">
<text name="InstructSearchResidentName">
Digite parte do nome do Residente:
@@ -14,15 +14,13 @@
</panel>
<panel label="Próximo a Mim" name="NearMePanel">
<text name="InstructSelectResident">
- Selecione residente
-próximo:
+ Selecione residente próximo:
</text>
- <button font="SansSerifSmall" left_delta="1" width="115" label="Atualizar Lista" label_selected="Atualizar Lista" name="Refresh"/>
- <slider label="Faixa" name="near_me_range" bottom_delta="-36"/>
+ <button label="Atualizar Lista" label_selected="Atualizar Lista" name="Refresh"/>
+ <slider label="Faixa" name="near_me_range"/>
<text name="meters">
Metros
</text>
- <scroll_list bottom_delta="-169" height="159" name="NearMe" />
</panel>
</tab_container>
<button label="Selecionar" label_selected="Selecionar" name="Select"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_build_options.xml b/indra/newview/skins/default/xui/pt/floater_build_options.xml
index ebc9d0f0c8..4dfebc3abd 100644
--- a/indra/newview/skins/default/xui/pt/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/pt/floater_build_options.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="Opções de grade">
- <spinner label="Uni. Grade (metros)" name="GridResolution" width="180" label_width="122"/>
- <spinner label="Ext. da Grade (metros)" name="GridDrawSize" width="180" label_width="122"/>
+ <spinner label="Uni. Grade (metros)" name="GridResolution"/>
+ <spinner label="Ext. da Grade (metros)" name="GridDrawSize"/>
<check_box label="Habilitar ajuste de sub-grade" name="GridSubUnit"/>
<check_box label="Mostrar as seções de cruzamento" name="GridCrossSection"/>
- <slider label="Opacidade da grade" name="GridOpacity" width="220"/>
+ <slider label="Opacidade da grade" name="GridOpacity"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_contents.xml b/indra/newview/skins/default/xui/pt/floater_buy_contents.xml
index 3e8713d59e..0c1fb77a08 100644
--- a/indra/newview/skins/default/xui/pt/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/pt/floater_buy_contents.xml
@@ -6,9 +6,9 @@
<text name="buy_text">
Comprar por L$[AMOUNT] de(a) [NAME]?
</text>
- <button label="Cancelar" label_selected="Cancelar" name="cancel_btn" width="73"/>
- <button label="Comprar" label_selected="Comprar" name="buy_btn" width="73" left_delta="-77"/>
- <check_box label="Vestir roupa agora" name="wear_check" left_delta="-130"/>
+ <button label="Cancelar" label_selected="Cancelar" name="cancel_btn"/>
+ <button label="Comprar" label_selected="Comprar" name="buy_btn"/>
+ <check_box label="Vestir roupa agora" name="wear_check"/>
<string name="no_copy_text">
(sem copiar)
</string>
diff --git a/indra/newview/skins/default/xui/pt/floater_color_picker.xml b/indra/newview/skins/default/xui/pt/floater_color_picker.xml
index 95dd53ccd4..475280b013 100644
--- a/indra/newview/skins/default/xui/pt/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/pt/floater_color_picker.xml
@@ -19,14 +19,12 @@
Lum:
</text>
<check_box label="Aplicar imediatamente" name="apply_immediate"/>
- <button left_delta="150" name="color_pipette" />
- <button left_delta="55" label="Cancelar" label_selected="Cancelar" name="cancel_btn"/>
+ <button label="Cancelar" label_selected="Cancelar" name="cancel_btn"/>
<button label="Selecionar" label_selected="Selecionar" name="select_btn"/>
<text name="Current color:">
Cor atual:
</text>
<text name="(Drag below to save.)">
- (Arraste abaixo
- para salvar.)
+ (Arraste abaixo para salvar.)
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
index f02cca9c25..5049b87a56 100644
--- a/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
+++ b/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
@@ -4,35 +4,35 @@
<panel label="Ciclo do dia" name="Day Cycle">
<button label="?" name="WLDayCycleHelp"/>
<text name="WL12am">
- 0:00
+ 12:00 meia-noite
</text>
<text name="WL3am">
- 3:00
+ 3:00 da manhã
</text>
<text name="WL6am">
- 6:00
+ 6:00 da manhã
</text>
<text name="WL9amHash">
- 9:00
+ 9:00 da manhã
</text>
<text name="WL12pmHash">
- 12:00
+ 12:00 meio dia
</text>
<text name="WL3pm">
- 15:00
+ 3:00 da tarde
</text>
<text name="WL6pm">
- 18:00
+ 6:00 da tarde
</text>
<text name="WL9pm">
- 21:00
+ 9:00 da noite
</text>
<text name="WL12am2">
- 24:00
+ 12:00 meia noite
</text>
- <button font="SansSerifSmall" width="96" left="546" label="Adicionar chave" label_selected="Adicionar chave" name="WLAddKey"/>
- <button font="SansSerifSmall" width="96" left="546" label="Apagar chave" label_selected="Apagar chave" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText" width="190" left="17">
+ <button label="Add Key" label_selected="Adicionar chave" name="WLAddKey"/>
+ <button label="Apagar chave" label_selected="Apagar chave" name="WLDeleteKey"/>
+ <text name="WLCurKeyFrameText">
Configurações de Quadro-chave:
</text>
<text name="WLCurKeyTimeText">
@@ -47,7 +47,7 @@
<text name="DayCycleText">
Grudar:
</text>
- <combo_box label="5 minutos" name="WLSnapOptions" width="85"/>
+ <combo_box label="5 minutos" name="WLSnapOptions"/>
<text name="DayCycleText2">
Duração do Ciclo:
</text>
@@ -59,7 +59,7 @@
</text>
<button label="Tocar" label_selected="Tocar" name="WLAnimSky"/>
<button label="Pare!" label_selected="Pare" name="WLStopAnimSky"/>
- <button width="175" font="SansSerifSmall" label="Usar o horário da Propriedade" label_selected="Ir para o horário da Propriedade" name="WLUseLindenTime"/>
+ <button label="Usar o horário da Propriedade" label_selected="Ir para o horário da Propriedade" name="WLUseLindenTime"/>
<button label="Salvar o Dia teste" label_selected="Salvar o Dia teste" name="WLSaveDayCycle"/>
<button label="Carregar o Dia teste" label_selected="Carregar o Dia teste" name="WLLoadDayCycle"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/floater_env_settings.xml b/indra/newview/skins/default/xui/pt/floater_env_settings.xml
index d3ed760551..b1c85a32b7 100644
--- a/indra/newview/skins/default/xui/pt/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/pt/floater_env_settings.xml
@@ -7,19 +7,17 @@
12:00 PM
</text>
<text name="EnvCloudText">
- Cobertura de
-Nuvens
+ Cobertura de Nuvens
</text>
<text name="EnvWaterColorText">
Cor da água
</text>
<color_swatch label="" name="EnvWaterColor" tool_tip="Clique para abrir o Editor de cores"/>
<text name="EnvWaterFogText">
- Névoa da
-água
+ Névoa da água
</text>
- <button bottom="-144" label="Usar hora da propriedade" name="EnvUseEstateTimeButton" width="155"/>
- <button label="Céu Avançado" name="EnvAdvancedSkyButton" width="155" left="167"/>
- <button label="Água Avançada" name="EnvAdvancedWaterButton" width="155" left="326"/>
+ <button label="Usar hora da propriedade" name="EnvUseEstateTimeButton"/>
+ <button label="Céu Avançado" name="EnvAdvancedSkyButton"/>
+ <button label="Água Avançada" name="EnvAdvancedWaterButton"/>
<button label="?" name="EnvSettingsHelpButton"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_inspect.xml b/indra/newview/skins/default/xui/pt/floater_inspect.xml
index f3c23f008e..f3d4b0f33f 100644
--- a/indra/newview/skins/default/xui/pt/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/pt/floater_inspect.xml
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="inspect" title="Inspecionar Objeto" min_width="450">
+<floater name="inspect" title="Inspecionar Objeto">
<scroll_list name="object_list" tool_tip="Selecione um objeto nesta lista para destacá-lo in-world">
<column label="Nome do Objeto" name="object_name"/>
- <column label="Proprietário" name="owner_name"/>
- <column label="Criador" name="creator_name"/>
+ <column label="Nome do Proprietário" name="owner_name"/>
+ <column label="Nome do Criador" name="creator_name"/>
<column label="Data de Criação" name="creation_date"/>
</scroll_list>
- <button width="185" label="Ver Perfil do Proprietário..." label_selected="" name="button owner" tool_tip="Veja o perfil do proprietário do objeto destacado"/>
- <button width="165" left="205" label="Ver perfil do criador..." label_selected="" name="button creator" tool_tip="Veja o perfil do criador original do objeto destacado"/>
+ <button label="Ver Perfil do Proprietário..." label_selected="" name="button owner" tool_tip="Veja o perfil do proprietário do objeto destacado"/>
+ <button label="Ver perfil do criador..." label_selected="" name="button creator" tool_tip="Veja o perfil do criador original do objeto destacado"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml
index ed36826800..634e236650 100644
--- a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory Finder" title="itens_de_inventário_recentes" width="165">
+<floater name="Inventory Finder" title="itens_de_inventário_recentes">
<check_box label="Animação" name="check_animation"/>
<check_box label="Cartões de chamadas" name="check_calling_card"/>
<check_box label="Roupas" name="check_clothing"/>
@@ -13,8 +13,8 @@
<check_box label="Fotos" name="check_snapshot"/>
<button label="Tudo" label_selected="Tudo" name="All"/>
<button label="Nenhum" label_selected="Nenhum" name="None"/>
- <check_box label="Sempre mostrar as pastas" name="check_show_empty" left="3"/>
- <check_box label="Desde o Logoff" name="check_since_logoff" left="3"/>
+ <check_box label="Sempre mostrar as pastas" name="check_show_empty"/>
+ <check_box label="Desde o Logoff" name="check_since_logoff"/>
<text length="1" name="- OR -" type="string">
- OU -
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_joystick.xml b/indra/newview/skins/default/xui/pt/floater_joystick.xml
index 0bc3928710..6c2e4a5144 100644
--- a/indra/newview/skins/default/xui/pt/floater_joystick.xml
+++ b/indra/newview/skins/default/xui/pt/floater_joystick.xml
@@ -3,15 +3,14 @@
<check_box name="enable_joystick">
Habilitar Joystick:
</check_box>
- <text left="135" name="joystick_type" width="360"/>
- <spinner label="Mapeamento: eixo X" name="JoystickAxis1" label_width="124" width="164"/>
- <spinner label="Mapeamento: eixo Y" name="JoystickAxis2" label_width="124" width="164"/>
- <spinner label="Mapeamento: eixo Z" name="JoystickAxis0" label_width="124" width="164"/>
- <spinner label="Mapeamento: Elevação" name="JoystickAxis4" label_width="124" width="164"/>
- <spinner label="Mapeamento: Guinada" name="JoystickAxis5" label_width="124" width="164"/>
- <spinner label="Mapeamento: Rolagem" name="JoystickAxis3" label_width="124" width="164"/>
- <spinner label="Mapeamento: Zoom" name="JoystickAxis6" label_width="124" width="164"/>
- <check_box label="Zoom Direto" name="ZoomDirect" left="194"/>
+ <spinner label="Mapeamento do eixo X" name="JoystickAxis1"/>
+ <spinner label="Mapeamento do eixo Y" name="JoystickAxis2"/>
+ <spinner label="Mapeamento do Eixo Z" name="JoystickAxis0"/>
+ <spinner label="Mapeamento da Elevação" name="JoystickAxis4"/>
+ <spinner label="Mapeamento da Guinada" name="JoystickAxis5"/>
+ <spinner label="Mapeamento da Rolagem" name="JoystickAxis3"/>
+ <spinner label="Mapeamento do Zoom" name="JoystickAxis6"/>
+ <check_box label="Zoom Direto" name="ZoomDirect"/>
<check_box label="Cursor 3D" name="Cursor3D"/>
<check_box label="Nível Automático" name="AutoLeveling"/>
<text name="Control Modes:">
@@ -20,7 +19,7 @@
<check_box name="JoystickAvatarEnabled">
Avatar
</check_box>
- <check_box name="JoystickBuildEnabled" left="192">
+ <check_box name="JoystickBuildEnabled">
Construir
</check_box>
<check_box name="JoystickFlycamEnabled">
@@ -35,13 +34,13 @@
<text name="ZScale">
Escala Z
</text>
- <text name="PitchScale" left="3" width="115">
+ <text name="PitchScale">
Escala de Elevação
</text>
- <text name="YawScale" left="3" width="115">
+ <text name="YawScale">
Escala da Guinada
</text>
- <text name="RollScale" left="3" width="115">
+ <text name="RollScale">
Escala de Rolagem
</text>
<text name="XDeadZone">
@@ -53,14 +52,14 @@
<text name="ZDeadZone">
Zona Morta Z
</text>
- <text name="PitchDeadZone" left="3" width="115">
- Zona Morta: Elevação
+ <text name="PitchDeadZone">
+ Zona Morta da Elevação
</text>
- <text name="YawDeadZone" left="3" width="115">
- Zona Morta: Guinada
+ <text name="YawDeadZone">
+ Zona Morta da Guinada
</text>
- <text name="RollDeadZone" left="3" width="115">
- Zona Morta: Rolagem
+ <text name="RollDeadZone">
+ Zona Morta de Rolagem
</text>
<text name="Feathering">
Alisar
@@ -68,10 +67,10 @@
<text name="ZoomScale2">
Escala de Zoom
</text>
- <text name="ZoomDeadZone" width="110" left="4">
+ <text name="ZoomDeadZone">
Zona Morta de Zoom
</text>
- <button label="Padrões do SpaceNavigator" name="SpaceNavigatorDefaults" font="SansSerifSmall"/>
+ <button label="Padrões do Navegador Espacial" name="SpaceNavigatorDefaults"/>
<button label="OK" label_selected="OK" name="ok_btn"/>
<button label="Cancelar" label_selected="Cancelar" name="cancel_btn"/>
<string name="JoystickMonitor">
diff --git a/indra/newview/skins/default/xui/pt/floater_lagmeter.xml b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml
index 6657641992..9dbad7099e 100644
--- a/indra/newview/skins/default/xui/pt/floater_lagmeter.xml
+++ b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml
@@ -1,27 +1,24 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_lagmeter" title="Medidor de Atraso">
<button label="" label_selected="" name="client_lagmeter" tool_tip="Status de atraso no Cliente"/>
- <text left="30" name="client_lag_cause" right="-10" />
- <text left="30" name="network_lag_cause" right="-10" />
- <text left="30" name="server_lag_cause" right="-32" />
<text name="client">
Cliente:
</text>
- <text name="client_text" font="SansSerifSmall">
+ <text name="client_text">
Normal
</text>
<button label="" label_selected="" name="network_lagmeter" tool_tip="Status de atraso na rede"/>
<text name="network">
Rede:
</text>
- <text name="network_text" font="SansSerifSmall">
+ <text name="network_text">
Normal
</text>
<button label="" label_selected="" name="server_lagmeter" tool_tip="Status de atraso no servidor"/>
<text name="server">
Servidor:
</text>
- <text name="server_text" font="SansSerifSmall">
+ <text name="server_text">
Normal
</text>
<button label="?" name="server_help"/>
@@ -120,10 +117,10 @@
20
</string>
<string name="server_frame_time_critical_msg">
- Taxa de quadros abaixo de [SERVER_FRAME_RATE_CRITICAL]
+ Taxa de quadros do simulador abaixo de [SERVER_FRAME_RATE_CRITICAL]
</string>
<string name="server_frame_time_warning_msg">
- Taxa de quadros entre [SERVER_FRAME_RATE_CRITICAL] e [SERVER_FRAME_RATE_WARNING]
+ Taxa de quadros do simulador entre [SERVER_FRAME_RATE_CRITICAL] e [SERVER_FRAME_RATE_WARNING]
</string>
<string name="server_frame_time_normal_msg">
Normal
diff --git a/indra/newview/skins/default/xui/pt/floater_land_holdings.xml b/indra/newview/skins/default/xui/pt/floater_land_holdings.xml
index 4734d665ef..1a640c9793 100644
--- a/indra/newview/skins/default/xui/pt/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/pt/floater_land_holdings.xml
@@ -7,7 +7,7 @@
<column label="Área" name="area"/>
</scroll_list>
<button label="Teletransporte" label_selected="Teletransporte" name="Teleport" tool_tip="Teletransportar para o centro do terreno."/>
- <button width="130" label="Mostrar no mapa" label_selected="Mostrar no mapa" name="Show on Map" tool_tip="Mostrar esse terreno no mapa do mundo."/>
+ <button label="Mostrar no mapa" label_selected="Mostrar no mapa" name="Show on Map" tool_tip="Mostrar esse terreno no mapa do mundo."/>
<text name="contrib_label">
Contribuições para os seus grupos:
</text>
@@ -15,22 +15,22 @@
<column label="Grupo" name="group"/>
<column label="Área" name="area"/>
</scroll_list>
- <text name="allowed_label" width="380">
+ <text name="allowed_label">
Propriedades de terreno permitidas com o plano de pagamento atual:
</text>
- <text name="allowed_text" left_delta="390">
+ <text name="allowed_text">
[AREA] m²
</text>
<text name="current_label">
Propriedades de terrenos atuais:
</text>
- <text name="current_text" left_delta="390">
+ <text name="current_text">
[AREA] m²
</text>
<text name="available_label">
Disponível para compra de terras:
</text>
- <text name="available_text" left_delta="390">
+ <text name="available_text">
[AREA] m²
</text>
<string name="area_string">
diff --git a/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
index d2654de589..af45fa5873 100644
--- a/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
@@ -2,7 +2,7 @@
<floater name="script ed float" title="Script: Novo Script">
<button label="Resetar" label_selected="Resetar" name="Reset"/>
<check_box label="Correndo" name="running"/>
- <check_box label="Mono" name="mono" left="86"/>
+ <check_box label="Mono" name="mono"/>
<string name="not_allowed">
Você não tem permissão para visualizar este script.
</string>
diff --git a/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml b/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
index 4f60ef23a6..e7e4a22937 100644
--- a/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="script ed float" title="LSL Wiki">
<check_box label="Seguir o Cursor" name="lock_check" />
- <combo_box label="Bloquear" name="history_combo" left_delta="120" width="70"/>
- <button label="Anterior" name="back_btn" left_delta="75"/>
+ <combo_box label="Bloquear" name="history_combo" />
+ <button label="Anterior" name="back_btn" />
<button label="Posterior" name="fwd_btn" />
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_mute_object.xml b/indra/newview/skins/default/xui/pt/floater_mute_object.xml
index 7ec0051a7d..d967f527ae 100644
--- a/indra/newview/skins/default/xui/pt/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/pt/floater_mute_object.xml
@@ -1,12 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="mute by name" title="Silenciar objeto pelo nome">
<text name="message">
- Silenciar pelo nome afeta apenas conversa de objeto e MI,
-não sons. Você deve digitar o nome exato do objeto.
+ Silenciar pelo nome afeta apenas conversa de objeto e MI, não sons. Você deve digitar o nome exato do objeto.
</text>
<line_editor name="object_name">
Nome do objeto
</line_editor>
- <button label="OK" name="OK"/>
+ <button label="Ok" name="OK"/>
<button label="Cancelar" name="Cancel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_pay.xml b/indra/newview/skins/default/xui/pt/floater_pay.xml
index 2eb1c5c1bf..6b094d07f6 100644
--- a/indra/newview/skins/default/xui/pt/floater_pay.xml
+++ b/indra/newview/skins/default/xui/pt/floater_pay.xml
@@ -9,7 +9,7 @@
<text type="string" length="1" name="payee_label" width="110" left="5">
Pagar residente:
</text>
- <text type="string" length="1" name="payee_name" left="115">
+ <text type="string" length="1" name="payee_name" left="110">
[FIRST] [LAST]
</text>
<text type="string" length="1" name="fastpay text" width="120" halign="left">
diff --git a/indra/newview/skins/default/xui/pt/floater_preferences.xml b/indra/newview/skins/default/xui/pt/floater_preferences.xml
index 0e9ef768b5..eb28e99713 100644
--- a/indra/newview/skins/default/xui/pt/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preferences.xml
@@ -1,9 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Preferences" title="Preferências" min_width="332" width="628">
+<floater name="Preferences" title="Preferências">
<button label="OK" label_selected="OK" name="OK"/>
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
<button label="Aplicar" label_selected="Aplicar" name="Apply"/>
<button label="Sobre" label_selected="Sobre" name="About..."/>
<button label="Ajuda" label_selected="Ajuda" name="Help"/>
- <tab_container name="pref core" tab_width="128" width="628" />
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_sound.xml b/indra/newview/skins/default/xui/pt/floater_preview_sound.xml
index b62146b92a..b61508480d 100644
--- a/indra/newview/skins/default/xui/pt/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preview_sound.xml
@@ -3,6 +3,6 @@
<text length="1" name="desc txt" type="string">
Descrição:
</text>
- <button left_delta="-132" label="Executar in-World" label_selected="Executar in-World" name="Sound play btn" tool_tip="Executar este som para que todos possam ouvi-lo."/>
- <button width="135" left="152" label="Executar Localmente" label_selected="Executar Localmente" name="Sound audition btn" tool_tip="Executar este som somente para você ouvir."/>
+ <button label="Executar in-World" label_selected="Executar in-World" name="Sound play btn" tool_tip="Executar este som para que todos possam ouvi-lo."/>
+ <button label="Executar Localmente" label_selected="Executar Localmente" name="Sound audition btn" tool_tip="Executar este som somente para você ouvir."/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_script_search.xml b/indra/newview/skins/default/xui/pt/floater_script_search.xml
index 5c1393107f..aaf1ea4339 100644
--- a/indra/newview/skins/default/xui/pt/floater_script_search.xml
+++ b/indra/newview/skins/default/xui/pt/floater_script_search.xml
@@ -1,15 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="script search" title="Busca de Script" width="320">
- <check_box label="Não diferenciar Maiúsculas de Minúsculas" name="case_text" left="75"/>
- <button label="Buscar" label_selected="Buscar" name="search_btn" width="85"/>
- <button label="Substituir" label_selected="Substituir" name="replace_btn" left="100" width="85"/>
- <button label="Substituir Tudo" label_selected="Substituir Tudo" name="replace_all_btn" left="190" width="122"/>
- <text length="1" name="txt" type="string" width="65">
+<floater name="script search" title="Busca de Script">
+ <check_box label="Não diferenciar Maiúsculas de Minúsculas" name="case_text"/>
+ <button label="Buscar" label_selected="Buscar" name="search_btn"/>
+ <button label="Substituir" label_selected="Substituir" name="replace_btn"/>
+ <button label="Substituir Tudo" label_selected="Substituir Tudo" name="replace_all_btn"/>
+ <text length="1" name="txt" type="string">
Buscar
</text>
- <text length="1" name="txt2" type="string" width="65">
+ <text length="1" name="txt2" type="string">
Substituir
</text>
- <line_editor left="75" name="search_text" width="240" />
- <line_editor left="75" name="replace_text" width="240" />
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_telehub.xml b/indra/newview/skins/default/xui/pt/floater_telehub.xml
index 11886c7cab..f2634be852 100644
--- a/indra/newview/skins/default/xui/pt/floater_telehub.xml
+++ b/indra/newview/skins/default/xui/pt/floater_telehub.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="telehub" title="Telehub" min_height="310" height="310" width="286">
+<floater name="telehub" title="Telehub">
<text name="status_text_connected">
Telehub conectado ao objeto [OBJECT]
</text>
@@ -14,19 +14,15 @@
</text>
<button label="Conectar Telehub" name="connect_btn"/>
<button label="Desconectar" name="disconnect_btn"/>
- <text name="spawn_points_text" width="265">
+ <text name="spawn_points_text">
Pontos de Nascimento (posições, não objetos):
</text>
- <scroll_list name="spawn_points_list" width="265" />
- <button width="135" label="Adicionar Nascimento" name="add_spawn_point_btn"/>
- <button width="130" label="Remover Nascimento" name="remove_spawn_point_btn" left="150"/>
+ <button label="Adicionar Nascimento" name="add_spawn_point_btn"/>
+ <button label="Remover Nascimento" name="remove_spawn_point_btn"/>
<text name="spawn_point_help">
- Selecione um objeto e clique Adicionar para
-especificar a posição.
-Em seguida, você pode mover ou apagar o objeto.
+ Selecione um objeto e clique Adicionar para especificar
+a posição. Em seguida, você pode mover ou apagar o objeto.
As posições são relativas ao centro do telehub.
-
-Selecione um item na lista para mostrar a posição
-in-world.
+Selecione um item na lista para mostrar a posição in-world.
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
index 4f5054da73..9a3d14c0ea 100644
--- a/indra/newview/skins/default/xui/pt/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="toolbox floater" title="" short_title="Construir" width="288">
+<floater name="toolbox floater" title="">
<button label="" label_selected="" name="button focus" tool_tip="Foco"/>
<button label="" label_selected="" name="button move" tool_tip="Mover"/>
<button label="" label_selected="" name="button edit" tool_tip="Editar"/>
@@ -34,7 +34,7 @@
<check_box label="Esticar Texturas" name="checkbox stretch textures"/>
<check_box label="Usar Grade" name="checkbox snap to grid"/>
<button label="Opções..." label_selected="Opções..." name="Options..."/>
- <text name="text status" width="280">
+ <text name="text status">
Arraste para mover, shift+Arrastar para Copiar
</text>
<button label="" label_selected="" name="ToolCube" tool_tip="Cubo"/>
@@ -73,13 +73,13 @@
<text name="Strength:">
Força
</text>
- <text name="obj_count" left="134">
+ <text name="obj_count">
Objetos selecionados: [COUNT]
</text>
- <text name="prim_count" left="134">
+ <text name="prim_count">
primitivas: [COUNT]
</text>
- <tab_container name="Object Info Tabs" tab_max_width="60" tab_min_width="30" width="288">
+ <tab_container name="Object Info Tabs">
<panel label="Comum" name="General">
<text name="Name:">
Nome:
@@ -105,7 +105,7 @@
Grupo:
</text>
<text name="Group Name Proxy">
- The Lindens
+ Os Lindens
</text>
<button label="Definir..." label_selected="Definir..." name="button set group"/>
<text name="Permissions:">
@@ -144,12 +144,12 @@
Próximo Proprietário pode:
</text>
<check_box label="Modificar" name="checkbox next owner can modify"/>
- <check_box label="Copiar" name="checkbox next owner can copy" left_delta="80"/>
- <check_box label="Revender/Dar" name="checkbox next owner can transfer" left_delta="67"/>
- <text name="label click action" width="220">
+ <check_box label="Copiar" name="checkbox next owner can copy"/>
+ <check_box label="Revender/Dar" name="checkbox next owner can transfer"/>
+ <text name="label click action">
Quando clicado com o botão esquerdo:
</text>
- <combo_box name="clickaction" width="192">
+ <combo_box name="clickaction">
<combo_item name="Touch/grab(default)">
Tocar/Pegar (padrão)
</combo_item>
@@ -176,7 +176,7 @@
B:
</text>
<text name="O:">
- O:
+ O;
</text>
<text name="G:">
G:
@@ -222,7 +222,7 @@
</string>
</panel>
<panel label="Objeto" name="Object">
- <text name="select_single" width="272">
+ <text name="select_single">
Selecione apenas uma primitiva para editar os parâmetros.
</text>
<text name="edit_object">
@@ -306,10 +306,10 @@
</combo_item>
</combo_box>
<text name="text cut">
- Recorte Início e final
+ Recorte inicial e final
</text>
- <spinner label="I" name="cut begin"/>
- <spinner label="F" name="cut end"/>
+ <spinner label="B" name="cut begin"/>
+ <spinner label="E" name="cut end"/>
<text name="text hollow">
Vazio
</text>
@@ -336,8 +336,8 @@
<text name="text twist">
Torcer no Início e final
</text>
- <spinner label="I" name="Twist Begin"/>
- <spinner label="F" name="Twist End"/>
+ <spinner label="B" name="Twist Begin"/>
+ <spinner label="E" name="Twist End"/>
<text name="scale_taper">
Afinar
</text>
@@ -351,17 +351,17 @@
</text>
<spinner label="X" name="Shear X"/>
<spinner label="Y" name="Shear Y"/>
- <text name="advanced_cut" width="156">
- Perfil Recortado no Início e fim
+ <text name="advanced_cut">
+ Perfil Recortado no Início e Final
</text>
<text name="advanced_dimple">
- Cova Início e final
+ Cova Início e Final
</text>
<text name="advanced_slice">
- Pedaço Início e fim
+ Pedaço Início (B) e Fim (E)
</text>
- <spinner label="I" name="Path Limit Begin"/>
- <spinner label="F" name="Path Limit End"/>
+ <spinner label="B" name="Path Limit Begin"/>
+ <spinner label="E" name="Path Limit End"/>
<text name="text taper2">
Afinar
</text>
@@ -398,7 +398,7 @@
</combo_box>
</panel>
<panel label="Recursos" name="Features">
- <text name="select_single" width="272">
+ <text name="select_single">
Selecione apenas uma primitiva para editar suas características.
</text>
<text name="edit_object">
@@ -425,7 +425,7 @@
<panel label="Textura" name="Texture">
<texture_picker label="Textura" name="texture control" tool_tip="Clique para escolher uma imagem"/>
<color_swatch label="Cor" name="colorswatch" tool_tip="Clique para abrir o Seletor de Cores"/>
- <text name="color trans" width="100">
+ <text name="color trans">
Transparência %
</text>
<text name="glow label">
@@ -463,7 +463,7 @@
<text name="label bumpiness">
Ondulação
</text>
- <combo_box name="combobox bumpiness" width="100" >
+ <combo_box name="combobox bumpiness">
<combo_item name="None">
Nenhum
</combo_item>
@@ -477,7 +477,7 @@
Granulação
</combo_item>
<combo_item name="bark">
- Casca
+ casca
</combo_item>
<combo_item name="bricks">
Tijolos
@@ -507,7 +507,7 @@
Revestimento
</combo_item>
<combo_item name="stonetile">
- Empedrado
+ empedrado
</combo_item>
<combo_item name="stucco">
Grafiato
@@ -516,7 +516,7 @@
Sulcos
</combo_item>
<combo_item name="weave">
- Weave
+ weave
</combo_item>
</combo_box>
<text name="tex scale">
@@ -552,7 +552,6 @@
<panel label="Conteúdo" name="Contents">
<button label="Novo Script" label_selected="Novo Script..." name="button new script"/>
<button label="Permissões..." name="button permissions"/>
- <panel name="ContentsInventory" width="272" />
</panel>
</tab_container>
<panel name="land info panel">
@@ -567,7 +566,7 @@
</text>
<button label="Sobre a Terra..." label_selected="Sobre a Terra..." name="button about land"/>
<check_box label="Mostrar donos" name="checkbox show owners" tool_tip="Colorir lotes de acordo com seus donos"/>
- <button label="?" label_selected="?" name="button show owners help" left_delta="100"/>
+ <button label="?" label_selected="?" name="button show owners help"/>
<text name="label_parcel_modify">
Modificar Lote
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_top_objects.xml b/indra/newview/skins/default/xui/pt/floater_top_objects.xml
index cd94b51b16..694100297d 100644
--- a/indra/newview/skins/default/xui/pt/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/pt/floater_top_objects.xml
@@ -19,17 +19,14 @@
Nome do Objeto:
</text>
<button label="Filtro" name="filter_object_btn"/>
- <text name="owner_name_text" width="130">
+ <text name="owner_name_text">
Nome do Proprietário:
</text>
- <line_editor font="SansSerifSmall" left="140" name="id_editor" width="280"/>
- <line_editor font="SansSerifSmall" left="140" name="object_name_editor" width="280"/>
- <line_editor font="SansSerifSmall" left="140" name="owner_name_editor" width="280"/>
<button label="Filtro" name="filter_owner_btn"/>
- <button label="Retornar Selecionado" name="return_selected_btn" width="170"/>
- <button label="Retornar Tudo" name="return_all_btn" left="190"/>
- <button label="Desabilitar Selecionado" name="disable_selected_btn" width="170"/>
- <button label="Desabilitar Tudo" name="disable_all_btn" left="190"/>
+ <button label="Retornar Selecionado" name="return_selected_btn"/>
+ <button label="Retornar Tudo" name="return_all_btn"/>
+ <button label="Desabilitar Selecionado" name="disable_selected_btn"/>
+ <button label="Desabilitar Tudo" name="disable_all_btn"/>
<button label="Atualizar" name="refresh_btn"/>
<string name="top_scripts_title">
Principais Scripts
diff --git a/indra/newview/skins/default/xui/pt/floater_url_entry.xml b/indra/newview/skins/default/xui/pt/floater_url_entry.xml
index 48af8de363..a4ae5e2e3d 100644
--- a/indra/newview/skins/default/xui/pt/floater_url_entry.xml
+++ b/indra/newview/skins/default/xui/pt/floater_url_entry.xml
@@ -3,7 +3,6 @@
<text name="media_label">
URL da Mídia:
</text>
- <combo_box left="100" name="media_entry" width="360" />
<button label="OK" name="ok_btn"/>
<button label="Cancelar" name="cancel_btn"/>
<button label="Limpar" name="clear_btn"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_water.xml b/indra/newview/skins/default/xui/pt/floater_water.xml
index ceb4414058..007eb3f6ba 100644
--- a/indra/newview/skins/default/xui/pt/floater_water.xml
+++ b/indra/newview/skins/default/xui/pt/floater_water.xml
@@ -1,9 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Water Floater" title="Editor de Água Avançado">
- <text name="KeyFramePresetsText" width="154">
+ <text name="KeyFramePresetsText">
Pré-configurações da Água:
</text>
- <combo_box left_delta="160" name="WaterPresetsCombo" width="150" />
<button label="Novo" label_selected="Novo" name="WaterNewPreset"/>
<button label="Salvar" label_selected="Salvar" name="WaterSavePreset"/>
<button label="Deletar" label_selected="Deletar" name="WaterDeletePreset"/>
@@ -17,15 +16,15 @@
<text name="WaterFogDensText">
Expoente da Densidade de névoa
</text>
- <button label="?" name="WaterFogDensityHelp" left="209"/>
+ <button label="?" name="WaterFogDensityHelp"/>
<text name="WaterUnderWaterFogModText">
Modificador da névoa Subaquática
</text>
- <button label="?" name="WaterUnderWaterFogModHelp" left="209"/>
+ <button label="?" name="WaterUnderWaterFogModHelp"/>
<text name="BDensText">
Escala da Marola de Reflexão
</text>
- <button label="?" name="WaterNormalScaleHelp" left="415"/>
+ <button label="?" name="WaterNormalScaleHelp"/>
<text name="BHText2">
1
</text>
@@ -38,29 +37,29 @@
<text name="HDText">
Escala de Fresnel
</text>
- <button label="?" name="WaterFresnelScaleHelp" left="415"/>
+ <button label="?" name="WaterFresnelScaleHelp"/>
<text name="FresnelOffsetText">
Deslocamento de Fresnel
</text>
- <button label="?" name="WaterFresnelOffsetHelp" left="415"/>
+ <button label="?" name="WaterFresnelOffsetHelp"/>
<text name="DensMultText">
Refratar a Escala para Cima
</text>
- <button label="?" name="WaterScaleAboveHelp" left="640"/>
+ <button label="?" name="WaterScaleAboveHelp"/>
<text name="WaterScaleBelowText">
Refratar a Escala para Baixo
</text>
- <button label="?" name="WaterScaleBelowHelp" left="640"/>
+ <button label="?" name="WaterScaleBelowHelp"/>
<text name="MaxAltText">
Multiplicador de Difusão
</text>
- <button label="?" name="WaterBlurMultiplierHelp" left="640"/>
+ <button label="?" name="WaterBlurMultiplierHelp"/>
</panel>
<panel label="Imagem" name="Waves">
<text name="BHText">
Direção da Onda Maior
</text>
- <button label="?" name="WaterWave1Help" left="170"/>
+ <button label="?" name="WaterWave1Help"/>
<text name="WaterWave1DirXText">
X
</text>
@@ -70,7 +69,7 @@
<text name="BHText2">
Direção da Onda Pequena
</text>
- <button label="?" name="WaterWave2Help" left="170"/>
+ <button label="?" name="WaterWave2Help"/>
<text name="WaterWave2DirXText">
X
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
index 0de8bd22f8..f86775c770 100644
--- a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
@@ -1,13 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="WindLight floater" title="Editor de Céu Avançado">
- <text name="KeyFramePresetsText" width="130">
+ <text name="KeyFramePresetsText">
Pré-definições de Céu:
</text>
- <combo_box left_delta="130" name="WLPresetsCombo"/>
<button label="Novo" label_selected="Novo" name="WLNewPreset"/>
- <button label="Salvar" label_selected="Salvar" name="WLSavePreset" left_delta="72"/>
- <button label="Deletar" label_selected="Deletar" name="WLDeletePreset" left_delta="72"/>
- <button label="Editor de Ciclos do Dia" label_selected="Editor de Ciclos do Dia" name="WLDayCycleMenuButton" width="150" left_delta="84" />
+ <button label="Salvar" label_selected="Salvar" name="WLSavePreset"/>
+ <button label="Deletar" label_selected="Deletar" name="WLDeletePreset"/>
+ <button label="Editor de Ciclos do Dia" label_selected="Editor de Ciclos do Dia" name="WLDayCycleMenuButton" width="150" left_delta="95" />
<tab_container name="WindLight Tabs">
<panel label="Atmosfera" name="Atmosphere">
<text name="BHText">
@@ -53,15 +52,15 @@
<text name="DensMultText">
Multiplicador de Densidade
</text>
- <button label="?" name="WLDensityMultHelp" left="635"/>
+ <button label="?" name="WLDensityMultHelp"/>
<text name="WLDistanceMultText">
Multiplicador de Distância
</text>
- <button label="?" name="WLDistanceMultHelp" left="635"/>
+ <button label="?" name="WLDistanceMultHelp"/>
<text name="MaxAltText">
Altitude Máxima
</text>
- <button label="?" name="WLMaxAltitudeHelp" left="635"/>
+ <button label="?" name="WLMaxAltitudeHelp"/>
</panel>
<panel label="Iluminação" name="Lighting">
<text name="SLCText">
@@ -157,10 +156,10 @@
Escala da Nuvem
</text>
<button label="?" name="WLCloudScaleHelp"/>
- <text name="WLCloudDetailText" font="SansSerifSmall">
- Detalhe da Nuvem (XY/Densidade)
+ <text name="WLCloudDetailText">
+ Detalhe da Nuvem (XY/Densidade)
</text>
- <button label="?" name="WLCloudDetailHelp" left="421"/>
+ <button label="?" name="WLCloudDetailHelp"/>
<text name="BHText8">
X
</text>
@@ -181,7 +180,7 @@
<button label="?" name="WLCloudScrollYHelp"/>
<check_box label="Travar" name="WLCloudLockY"/>
<check_box label="Desenhar Nuvens Clássicas" name="DrawClassicClouds"/>
- <button label="?" name="WLClassicCloudsHelp" left="645"/>
+ <button label="?" name="WLClassicCloudsHelp"/>
</panel>
</tab_container>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/panel_friends.xml b/indra/newview/skins/default/xui/pt/panel_friends.xml
index d430d637ad..afd7b79eaa 100644
--- a/indra/newview/skins/default/xui/pt/panel_friends.xml
+++ b/indra/newview/skins/default/xui/pt/panel_friends.xml
@@ -11,10 +11,10 @@
<column name="icon_edit_mine" tool_tip="Amigo pode editar, apagar ou pegar seus objetos"/>
<column name="icon_edit_theirs" tool_tip="Você pode editar os objetos deste amigo"/>
</scroll_list>
- <button width="86" label="MI/Chamar" name="im_btn" tool_tip="Abrir sessão de Mensagem Instantânea"/>
- <button width="86" label="Perfil" name="profile_btn" tool_tip="Mostrar foto, grupos e outras informações"/>
- <button width="86" label="Teletransp..." name="offer_teleport_btn" tool_tip="Oferecer a este amigo o teletransporte para sua localização atual"/>
- <button width="86" label="Pagar..." name="pay_btn" tool_tip="Dar Linden dólares (L$) a este amigo"/>
- <button width="86" label="Remover..." name="remove_btn" tool_tip="Remover esta pessoa de sua lista de amigos"/>
- <button width="86" label="Adicionar..." name="add_btn" tool_tip="Oferecer amizade a um residente"/>
+ <button label="MI/Chamar" name="im_btn" tool_tip="Abrir sessão de Mensagem Instantânea"/>
+ <button label="Perfil" name="profile_btn" tool_tip="Mostrar foto, grupos e outras informações"/>
+ <button label="Teletransporte..." name="offer_teleport_btn" tool_tip="Oferecer a este amigo o teletransporte para sua localização atual"/>
+ <button label="Pagar..." name="pay_btn" tool_tip="Dar Linden dólares (L$) a este amigo"/>
+ <button label="Remover..." name="remove_btn" tool_tip="Remover esta pessoa de sua lista de amigos"/>
+ <button label="Adicionar..." name="add_btn" tool_tip="Oferecer amizade a um residente"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_general.xml b/indra/newview/skins/default/xui/pt/panel_group_general.xml
index 185ed77576..f4941eabd9 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_general.xml
@@ -14,7 +14,7 @@
<text name="prepend_founded_by">
Fundado por:
</text>
- <text name="founder_name" left_delta="74" >
+ <text name="founder_name">
(espera)
</text>
<text name="group_charter_label">
@@ -44,8 +44,8 @@
<check_box label="Mostre na busca" name="show_in_group_list" tool_tip="Deixe as pessoas verem este grupo nos resultados de busca."/>
<check_box label="Adesão aberta" name="open_enrollement" tool_tip="Definir se este grupo permite que novos membros entrem sem serem convidados"/>
<check_box label="Taxa de adesão: L$" name="check_enrollment_fee" tool_tip="Define se é necessária uma taxa de adesão para se unir ao grupo."/>
- <spinner width="60" left_delta="120" name="spin_enrollment_fee" tool_tip="Os novos membros devem pagar esta taxa para se unir ao grupo quando a Taxa de Adesão está marcada."/>
- <combo_box width="170" name="group_mature_check" tool_tip="Define se a informação do seu grupo é considerada mature.">
+ <spinner name="spin_enrollment_fee" tool_tip="Os novos membros devem pagar esta taxa para se unir ao grupo quando a Taxa de Adesão está marcada."/>
+ <combo_box name="group_mature_check" tool_tip="Define se a informação do seu grupo é considerada mature.">
<combo_item name="select_mature">
- Selecionar Maturidade -
</combo_item>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_invite.xml b/indra/newview/skins/default/xui/pt/panel_group_invite.xml
index a02a17139b..e9c7bab3db 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_invite.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Convidar um membro" name="invite_panel" width="224">
- <text name="help_text" width="214">
+<panel label="Convidar um membro" name="invite_panel">
+ <text name="help_text">
Voce pode selecionar vários residentes
-para convidar ao seu grupo. Clique
-&apos;Abrir Seletor de Residente&apos; para iniciar.
+para convidar ao seu grupo. Clique &apos;Abrir
+Seletor de Residente&apos; para iniciar.
</text>
<button label="Abrir Seletor de Residente" name="add_button" tool_tip=""/>
<name_list name="invitee_list" tool_tip="Mantenha apertada a tecla Control e clique nos nomes dos residentes para uma seleção múltipla."/>
- <button left_delta="-7" width="214" label="Remove os selecionados acima da lista" name="remove_button" tool_tip="Remove os residentes selecionados acima da lista de convite."/>
+ <button label="Remove Selected from List" name="remove_button" tool_tip="Remove os residentes selecionados acima da lista de convite."/>
<text name="role_text">
Escolha que Função atribuir a eles:
</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_land_money.xml b/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
index 103da6d67d..f5e96869d7 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
@@ -13,7 +13,7 @@
<string name="loading_txt">
Carregando...
</string>
- <text name="group_land_heading" width="250">
+ <text name="group_land_heading">
Terra percentente ao grupo
</text>
<scroll_list name="group_parcel_list">
@@ -22,7 +22,7 @@
<column label="Tipo" name="type"/>
<column label="Área" name="area"/>
</scroll_list>
- <button label="Mostrar no Mapa" label_selected="Mostrar no Mapa" name="map_button" left="282" width="130"/>
+ <button label="Mostrar no Mapa" label_selected="Mostrar no Mapa" name="map_button"/>
<text name="total_contributed_land_label">
Contribuição Total:
</text>
@@ -51,8 +51,7 @@
m² ([AMOUNT] máxima)
</text>
<text name="group_over_limit_text">
- Membros do grupo precisam contribuir com mais créditos de Terra para
-garantir a terra em uso.
+ Membros do grupo precisam contribuir com mais créditos de Terra para garantir a terra em uso.
</text>
<text name="group_money_heading">
Grupo L$
@@ -67,8 +66,8 @@ garantir a terra em uso.
<text_editor name="group_money_details_text">
Computando...
</text_editor>
- <button label="&lt; Mais Cedo" label_selected="&lt; Cedo" name="earlier_details_button" tool_tip="Voltar no Tempo"/>
- <button label="Mais Tarde &gt;" label_selected="Tarde &gt;" name="later_details_button" tool_tip="Adiantar o Tempo"/>
+ <button label="&lt; Cedo" label_selected="&lt; Cedo" name="earlier_details_button" tool_tip="Voltar no Tempo"/>
+ <button label="Tarde &gt;" label_selected="Tarde &gt;" name="later_details_button" tool_tip="Adiantar o Tempo"/>
</panel>
<panel label="Vendas" name="group_money_sales_tab">
<text_editor name="group_money_sales_text">
diff --git a/indra/newview/skins/default/xui/pt/panel_group_notices.xml b/indra/newview/skins/default/xui/pt/panel_group_notices.xml
index 008e8144c6..1285a24ace 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_notices.xml
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Notícias" name="notices_tab">
<text name="help_text">
- As notícias são uma maneira rápida de comunicar-se através de um grupo transmitindo uma mensagem e entregando um item anexo, opcionalmente. As notícias vão apenas a membros do grupo que têm a função habilitada para receber notícias. Você pode desligar Notícias na aba Geral.
+ As notícias são uma maneira rápida de
+comunicar-se através de um grupo transmitindo uma mensagem e
+entregando um item anexo, opcionalmente. As notícias vão apenas a membros
+do grupo que têm a função habilitada para receber notícias. Você pode desligar
+Notícias na aba Geral.
</text>
<text name="no_notices_text">
Não existem notícias anteriores.
@@ -11,9 +15,9 @@
Arquivo de notícias do grupo
</text>
<text name="lbl2">
- As notícias são mantidas por 14 dias. Clique na notícia abaixo que você deseja
-ver. Clique no botão “Atualizar” para verificar se novas notícias foram
-recebidas. Listas de aviso estão limitadas a 200 por grupo, diariamente.
+ As notícias são mantidas por 14 dias. Clique na notícia abaixo que você deseja ver.
+Clique no botão “Atualizar” para verificar se novas notícias foram recebidas.
+Listas de aviso estão limitadas a 200 por grupo, diariamente.
</text>
<scroll_list name="notice_list">
<column label="Assunto" name="subject"/>
@@ -35,18 +39,15 @@ adicionar um item simples à notícia, arrastando-o do seu
Inventário para o painel. Itens anexados devem ser copiáveis
e transferíveis e você não pode mandar uma pasta.
</text>
- <text name="lbl3" left="20">
+ <text name="lbl3">
Assunto:
</text>
- <line_editor name="create_subject" width="251" left_delta="61"/>
- <text name="lbl4" left="15" width="60">
+ <text name="lbl4">
Mensagem:
</text>
- <text_editor name="create_message" left_delta="66" width="330"/>
- <text name="lbl5" width="68">
+ <text name="lbl5">
Anexo:
</text>
- <line_editor name="create_inventory_name" width="190" left_delta="74"/>
<button label="Remover o anexo" label_selected="Remover o anexo" name="remove_attachment"/>
<button label="Enviar notícia" label_selected="Enviar notícia" name="send_notice"/>
<panel name="drop_target" tool_tip="Arraste um item do inventário para dentro da caixa de mensagem para enviá-lo com a notícia. Você deve ter permissão para copiar e transferir o objeto, para enviá-lo com a notícia."/>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_roles.xml b/indra/newview/skins/default/xui/pt/panel_group_roles.xml
index 087cf0c107..32ed839bd8 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_roles.xml
@@ -13,8 +13,7 @@
</text>
<text name="static2">
São atribuídas funções com habilidades aos membros do grupo.
-Estes ajustes podem ser facilmente customizados para uma flexibilidade
-e organização maiores.
+Estes ajustes podem ser facilmente customizados para uma flexibilidade e organização maiores.
</text>
</panel>
<panel name="roles_header">
@@ -22,14 +21,12 @@ e organização maiores.
Funções
</text>
<text name="role_properties_modifiable">
- Selecionar uma função abaixo. Você pode modificar o nome, a descrição
-e o título do membro.
+ Selecionar uma função abaixo. Você pode modificar o nome, a descrição e o título do membro.
</text>
<text name="role_properties_not_modifiable">
- Selecione uma função abaixo para ver suas propriedades, membros e
-habilidades permitidas.
+ Selecione uma função abaixo para ver suas propriedades, membros e habilidades permitidas.
</text>
- <text bottom_delta="-28" name="role_actions_modifiable">
+ <text name="role_actions_modifiable">
Você também pode atribuir habilidades à função.
</text>
<text name="role_actions_not_modifiable">
@@ -41,31 +38,28 @@ habilidades permitidas.
Habilidades
</text>
<text name="static2">
- Você pode ver a descrição de uma habilidade e quais funções e membros
-podem executar essa habilidade.
+ Você pode ver a descrição de uma habilidade e quais funções e membros podem executar essa habilidade.
</text>
</panel>
- <tab_container height="164" name="roles_tab_container">
- <panel height="148" label="Membros" name="members_sub_tab" tool_tip="Membros">
- <line_editor bottom="127" name="search_text"/>
- <button label="Pesquisar" name="search_button" width="75"/>
- <button label="Mostrar todos" name="show_all_button" left_delta="80"/>
- <name_list name="member_list" bottom_delta="-105" height="104" >
+ <tab_container name="roles_tab_container">
+ <panel label="Membros" name="members_sub_tab" tool_tip="Membros">
+ <button label="Pesquisar" name="search_button"/>
+ <button label="Mostrar todos" name="show_all_button"/>
+ <name_list name="member_list">
<column label="Nome do membro" name="name"/>
<column label="Tarifa doada" name="donated"/>
<column label="Último login" name="online"/>
</name_list>
- <button label="Convidar Novo Membro..." name="member_invite" width="165"/>
+ <button label="Convidar Novo Membro ..." name="member_invite"/>
<button label="Ejetar do Grupo" name="member_eject"/>
<string name="help_text">
Você pode adicionar ou remover as funções designadas aos membros. Selecione vários membros, segurando a tecla Ctrl e clicando em seus nomes.
</string>
</panel>
- <panel height="148" label="Funções" name="roles_sub_tab">
- <line_editor bottom="127" name="search_text"/>
- <button label="Busca" name="search_button" width="75"/>
- <button label="Mostrar todos" name="show_all_button" left_delta="80"/>
- <scroll_list name="role_list" bottom_delta="-104" height="104">
+ <panel label="Funções" name="roles_sub_tab">
+ <button label="Busca" name="search_button"/>
+ <button label="Mostrar todos" name="show_all_button"/>
+ <scroll_list name="role_list">
<column label="Nome da função" name="name"/>
<column label="Título" name="title"/>
<column label="Membro" name="members"/>
@@ -81,11 +75,10 @@ permitidas que os membros podem executar. Os membros poderão ter um ou mais fun
As funções &apos;todos&apos; e &apos;donos&apos; são especiais e não podem ser deletadas.
</string>
</panel>
- <panel height="148" label="Habilidades" name="actions_sub_tab">
- <line_editor bottom="127" name="search_text"/>
- <button label="Busca" name="search_button" width="75"/>
- <button label="Mostrar todos" name="show_all_button" left_delta="80"/>
- <scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Selecione uma habilidade para ver mais detalhes."/>
+ <panel label="Habilidades" name="actions_sub_tab">
+ <button label="Busca" name="search_button"/>
+ <button label="Mostrar todos" name="show_all_button"/>
+ <scroll_list name="action_list" tool_tip="Selecione uma habilidade para ver mais detalhes."/>
<string name="help_text">
As habilidades permitem que os membros nas funções façam coisas específicas dentro do grupo.
Há uma grande variedade de habilidades.
diff --git a/indra/newview/skins/default/xui/pt/panel_groups.xml b/indra/newview/skins/default/xui/pt/panel_groups.xml
index aaea1178a6..8a886ef8b1 100644
--- a/indra/newview/skins/default/xui/pt/panel_groups.xml
+++ b/indra/newview/skins/default/xui/pt/panel_groups.xml
@@ -1,15 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="groups">
- <text name="groupdesc" width="268">
+ <text name="groupdesc">
Seu grupo ativo atual es&apos;ta mostrado em negrito.
</text>
- <text name="groupcount" width="300">
+ <text name="groupcount">
Você pertence a [COUNT] grupos (de no máximo [MAX]).
+aximo
</text>
- <button width="86" label="MI/Chamada" name="IM" tool_tip="Abrir sessão de Mensagem Instantânea"/>
- <button width="86" label="Informações" name="Info"/>
- <button width="86" label="Ativar" name="Activate"/>
- <button width="86" label="Deixar" name="Leave"/>
- <button width="86" label="Criar..." name="Create"/>
- <button width="86" label="Buscar..." name="Search..."/>
+ <button label="MI/Chamada" name="IM" tool_tip="Abrir sessão de Mensagem Instantânea"/>
+ <button label="Informações" name="Info"/>
+ <button label="Ativar" name="Activate"/>
+ <button label="Deixar" name="Leave"/>
+ <button label="Criar..." name="Create"/>
+ <button label="Buscar..." name="Search..."/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
index fde3551b8b..d82330cc78 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
@@ -10,15 +10,9 @@
</radio_group>
<check_box label="Mostrar Posição Inicial na Tela de Login" name="show_location_checkbox"/>
<combo_box name="fade_out_combobox" width="166">
- <combo_item name="Never">
- Nunca
- </combo_item>
- <combo_item name="Show Temporarily">
- Mostrar Temporariamente
- </combo_item>
- <combo_item name="Always">
- Sempre
- </combo_item>
+ <combo_box.item name="Never" label="Nunca"/>
+ <combo_box.item name="Show Temporarily" label="Mostrar Temporariamente"/>
+ <combo_box.item name="Always" label="Sempre"/>
</combo_box>
<check_box label="Avatar com Nomes Pequenos" name="small_avatar_names_checkbox"/>
<check_box label="Ocultar meu Nome na minha Tela" name="show_my_name_checkbox"/>
@@ -80,49 +74,29 @@ conteúdo classificado:
Digite o nome da Região
</string>
<combo_box name="crash_behavior_combobox" width="166">
- <combo_item length="1" name="Askbeforesending" type="string">
- Perguntar antes de enviar
- </combo_item>
- <combo_item length="1" name="Alwayssend" type="string">
- Sempre enviar
- </combo_item>
- <combo_item length="1" name="Neversend" type="string">
- Nunca Enviar
- </combo_item>
+ <combo_box.item length="1" name="Askbeforesending" type="string" label="Perguntar antes de enviar"/>
+ <combo_box.item length="1" name="Alwayssend" type="string" label="Sempre enviar"/>
+ <combo_box.item length="1" name="Neversend" type="string" label="Nunca Enviar"/>
</combo_box>
<combo_box name="language_combobox" width="166">
- <combo_item name="System Default Language">
- Padrão do Sistema
- </combo_item>
- <combo_item name="English">
- English (Inglês)
- </combo_item>
- <combo_item name="Danish">
- Dansk (Dinamarquês) - Beta
- </combo_item>
- <combo_item name="Deutsch(German)">
- Deutsch (Alemão) - Beta
- </combo_item>
- <combo_item name="Spanish">
- Español (Espanhol) - Beta
- </combo_item>
- <combo_item name="French">
- Français (Francês) - Beta
- </combo_item>
+ <combo_box.item name="System Default Language" label="Padrão do Sistema"/>
+ <combo_box.item name="English" label="English (Inglês)"/>
+ <combo_box.item name="Danish" label="Dansk (Dinamarquês) - Beta"/>
+ <combo_box.item name="Deutsch(German)" label="Deutsch (Alemão) - Beta"/>
+ <combo_box.item name="Spanish" label="Español (Espanhol) - Beta"/>
+ <combo_box.item name="French" label="Français (Francês) - Beta"/>
+ <combo_box.item name="Hungarian" label="Magyar (Húngaro) - Beta"/>
+ <combo_box.item name="Polish" label="Polski (Polonês) - Beta"/>
+ <combo_box.item name="Portugese" label="Português - Beta"/>
+ <combo_box.item name="Chinese" label="中文 (简体) (Chinês) - Beta"/>
+ <combo_box.item name="(Japanese)" label="日本語 (Japonês) - Beta"/>
+ <combo_box.item name="(Korean)" label="한국어 (Coreano) - Beta"/>
<combo_item name="Italian">
Italiano - Beta
</combo_item>
- <combo_item name="Hungarian">
- Magyar (Húngaro) - Beta
- </combo_item>
<combo_item name="Dutch">
Nederlands (Holandês) - Beta
</combo_item>
- <combo_item name="Polish">
- Polski (Polonês) - Beta
- </combo_item>
- <combo_item name="Portugese">
- Português - Beta
</combo_item>
<combo_item name="Russian">
Русский (Russo) - Beta
@@ -132,16 +106,6 @@ conteúdo classificado:
</combo_item>
<combo_item name="Ukrainian">
Українська (Ucraniano) - Beta
- </combo_item>
- <combo_item name="Chinese">
- 中文 (简体) (Chinês) - Beta
- </combo_item>
- <combo_item name="(Japanese)">
- 日本語 (Japonês) - Beta
- </combo_item>
- <combo_item name="(Korean)">
- 한국어 (Coreano) - Beta
- </combo_item>
</combo_box>
<check_box label="Compartilhar a linguagem com objetos" name="language_is_public" tool_tip="Isto permite que os objetos no mundo conheçam sua linguagem preferida."/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_covenant.xml b/indra/newview/skins/default/xui/pt/panel_region_covenant.xml
index 4977a1fac9..6218e4eafb 100644
--- a/indra/newview/skins/default/xui/pt/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_covenant.xml
@@ -22,22 +22,20 @@
Última modificação: Quarta, 31 de dezembro de 1969 às 16:00:00 horas
</text>
<button label="?" name="covenant_help"/>
- <text_editor name="covenant_editor" bottom="-247" height="162" >
+ <text_editor name="covenant_editor">
Não há nenhuma regra fornecida para esta Propriedade.
</text_editor>
<button label="Resetar" name="reset_covenant"/>
<text bottom="-25" name="covenant_help_text">
- As mudanças das regras serão mostradas em todos os lotes
- da propriedade.
+ As mudanças das regras serão mostradas em todos os lotes da propriedade.
</text>
- <text bottom_delta="-36" name="covenant_instructions">
- Arraste e solte um notecard, para mudar as Regras desta
- Propriedade.
+ <text name="covenant_instructions">
+ Arraste e solte um notecard, para mudar as Regras desta Propriedade.
</text>
- <text bottom_delta="-36" name="region_section_lbl">
+ <text name="region_section_lbl">
Região:
</text>
- <text name="region_name_lbl">
+ <text bottom_delta="-31" name="region_name_lbl">
Nome:
</text>
<text name="region_name_text">
@@ -74,11 +72,9 @@
Terras compradas na região não poderão ser revendidas.
</string>
<string name="can_change">
- O terreno comprado nesta região pode ser compartilhado ou
-subdividido.
+ O terreno comprado nesta região pode ser compartilhado ou subdividido.
</string>
<string name="can_not_change">
- O terreno comprado nesta região não pode ser compartilhado
-ou subdividido.
+ O terreno comprado nesta região não pode ser compartilhado ou subdividido.
</string>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_debug.xml b/indra/newview/skins/default/xui/pt/panel_region_debug.xml
index 724df20155..93c5d27648 100644
--- a/indra/newview/skins/default/xui/pt/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_debug.xml
@@ -13,7 +13,7 @@
<check_box label="Desabilitar física" name="disable_physics_check" tool_tip="Desabilitar toda a físíca nesta região"/>
<button label="?" name="disable_physics_help"/>
<button label="Aplicar" name="apply_btn"/>
- <text name="objret_text_lbl" width="130">
+ <text name="objret_text_lbl">
Retornar objeto
</text>
<text name="resident_text_lbl">
@@ -30,10 +30,10 @@
<check_box label="Retornar apenas aqueles objetos na terra de alguém" name="return_other_land" tool_tip="Retornar apenas objetos que estejam na terra pertencente a alguém"/>
<check_box label="Retornar objetos em cada região desta propriedade" name="return_estate_wide" tool_tip="Retornar objetos em todas as regiões que constituem esta propriedade"/>
<button label="Retornar" name="return_btn"/>
- <button width="280" label="Pegar os principais colidentes..." name="top_colliders_btn" tool_tip="Lista dos objetos que experimentam as mais potenciais colisões"/>
- <button label="?" name="top_colliders_help" left="297"/>
- <button width="280" label="Pegar Principais Scripts..." name="top_scripts_btn" tool_tip="Lista de objetos gastando mais tempo rodando scripts"/>
- <button label="?" name="top_scripts_help" left="297"/>
+ <button label="Pegar os principais colidentes..." name="top_colliders_btn" tool_tip="Lista dos objetos que experimentam as mais potenciais colisões"/>
+ <button label="?" name="top_colliders_help"/>
+ <button label="Pegar Principais Scripts..." name="top_scripts_btn" tool_tip="Lista de objetos gastando mais tempo rodando scripts"/>
+ <button label="?" name="top_scripts_help"/>
<button label="Reiniciar a Região" name="restart_btn" tool_tip="Dar 2 minutos de contagem regressiva e reiniciar a região"/>
<button label="?" name="restart_help"/>
<button label="Atrasar o Reinicio" name="cancel_restart_btn" tool_tip="Atrasar o reinicio da região por uma hora"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_estate.xml b/indra/newview/skins/default/xui/pt/panel_region_estate.xml
index f43402be15..c236b95ca1 100644
--- a/indra/newview/skins/default/xui/pt/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_estate.xml
@@ -24,9 +24,9 @@ todas as regiões desta propriedade.
<check_box label="Permitir acesso público" name="externally_visible_check"/>
<button label="?" name="externally_visible_help"/>
<text name="Only Allow">
- Acesso restrito a Residentes...
+ Acesso restrito a:
</text>
- <check_box label="com info. de pagamento em arquivo" name="limit_payment" tool_tip="Banir residentes não identificados."/>
+ <check_box label="Residentes com informações de pagamento em arquivo" name="limit_payment" tool_tip="Banir residentes não identificados."/>
<check_box label="Adultos com idade verificada" name="limit_age_verified" tool_tip="Banir residentes que não tenham confirmado a sua idade. Ver support.secondlife.com para mais informações."/>
<check_box label="Permitir conversa de voz" name="voice_chat_check"/>
<button label="?" name="voice_chat_help"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_terrain.xml b/indra/newview/skins/default/xui/pt/panel_region_terrain.xml
index b9b0e9d90f..9b8fc48fb9 100644
--- a/indra/newview/skins/default/xui/pt/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_terrain.xml
@@ -8,9 +8,9 @@
</text>
<spinner label="Altura da água" name="water_height_spin"/>
<button label="?" name="water_height_help"/>
- <spinner label="Limite do aumento do &#10;terreno" name="terrain_raise_spin"/>
+ <spinner label="Limite do aumento do terreno" name="terrain_raise_spin"/>
<button label="?" name="terrain_raise_help"/>
- <spinner label="Limite mais baixo do &#10;terreno" name="terrain_lower_spin" bottom_delta="-34"/>
+ <spinner label="Limite mais baixo do terreno" name="terrain_lower_spin"/>
<button label="?" name="terrain_lower_help"/>
<check_box label="Usar o sol da propriedade" name="use_estate_sun_check"/>
<button label="?" name="use_estate_sun_help"/>
@@ -18,10 +18,10 @@
<button label="?" name="fixed_sun_help"/>
<slider label="Fase" name="sun_hour_slider"/>
<button label="Aplicar" name="apply_btn"/>
- <button label="Download de terreno RAW..." name="download_raw_btn" tool_tip="Não disponível aos gerentes, somente aos proprietários."/>
+ <button label="Download de terreno RAW ..." name="download_raw_btn" tool_tip="Não disponível aos gerentes, somente aos proprietários."/>
<button label="?" name="download_raw_help"/>
<button label="Upload de terreno RAW..." name="upload_raw_btn" tool_tip="Não disponível aos gerentes, somente aos proprietários."/>
<button label="?" name="upload_raw_help"/>
- <button width="170" label="Nivelar o terreno" name="bake_terrain_btn" tool_tip="Ajustar terreno atual como o ponto médio para os limites de aumento/decréscimo"/>
- <button left="190" label="?" name="bake_terrain_help"/>
+ <button label="Nivelar o terreno" name="bake_terrain_btn" tool_tip="Ajustar terreno atual como o ponto médio para os limites de aumento/decréscimo"/>
+ <button label="?" name="bake_terrain_help"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_texture.xml b/indra/newview/skins/default/xui/pt/panel_region_texture.xml
index 4787b59a8d..8d7bdfe97b 100644
--- a/indra/newview/skins/default/xui/pt/panel_region_texture.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_texture.xml
@@ -6,7 +6,7 @@
<text name="region_text">
desconhecido
</text>
- <text name="detail_texture_text" width="380">
+ <text name="detail_texture_text">
Texturas de Terreno (requer 512x512, arquivos 24 bit .tga )
</text>
<text name="height_text_lbl">
diff --git a/indra/newview/tests/llagentaccess_test.cpp b/indra/newview/tests/llagentaccess_test.cpp
index 42872d85fb..e08193f785 100644
--- a/indra/newview/tests/llagentaccess_test.cpp
+++ b/indra/newview/tests/llagentaccess_test.cpp
@@ -29,6 +29,8 @@
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
+
+#include "linden_common.h"
#include "../test/lltut.h"
#include "../llagentaccess.h"
diff --git a/indra/newview/tests/llcapabilitylistener_test.cpp b/indra/newview/tests/llcapabilitylistener_test.cpp
index f66ae9404f..b965379c9c 100644
--- a/indra/newview/tests/llcapabilitylistener_test.cpp
+++ b/indra/newview/tests/llcapabilitylistener_test.cpp
@@ -24,9 +24,9 @@
#include "../test/lltut.h"
#include "../llcapabilityprovider.h"
#include "lluuid.h"
-#include "llerrorcontrol.h"
#include "tests/networkio.h"
#include "tests/commtest.h"
+#include "tests/wrapllerrs.h"
#include "stringize.h"
#if defined(LL_WINDOWS)
@@ -104,28 +104,6 @@ namespace tut
typedef llcapears_group::object llcapears_object;
llcapears_group llsdmgr("llcapabilitylistener");
- struct CaptureError: public LLError::OverrideFatalFunction
- {
- CaptureError():
- LLError::OverrideFatalFunction(boost::bind(&CaptureError::operator(), this, _1))
- {
- LLError::setPrintLocation(false);
- }
-
- struct FatalException: public std::runtime_error
- {
- FatalException(const std::string& what): std::runtime_error(what) {}
- };
-
- void operator()(const std::string& message)
- {
- error = message;
- throw FatalException(message);
- }
-
- std::string error;
- };
-
template<> template<>
void llcapears_object::test<1>()
{
@@ -137,10 +115,10 @@ namespace tut
std::string threw;
try
{
- CaptureError capture;
+ WrapLL_ERRS capture;
regionPump.post(request);
}
- catch (const CaptureError::FatalException& e)
+ catch (const WrapLL_ERRS::FatalException& e)
{
threw = e.what();
}
@@ -184,10 +162,10 @@ namespace tut
std::string threw;
try
{
- CaptureError capture;
+ WrapLL_ERRS capture;
regionPump.post(request);
}
- catch (const CaptureError::FatalException& e)
+ catch (const WrapLL_ERRS::FatalException& e)
{
threw = e.what();
}
@@ -246,10 +224,10 @@ namespace tut
std::string threw;
try
{
- CaptureError capture;
+ WrapLL_ERRS capture;
regionPump.post(request);
}
- catch (const CaptureError::FatalException& e)
+ catch (const WrapLL_ERRS::FatalException& e)
{
threw = e.what();
}
diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
new file mode 100644
index 0000000000..75db76df27
--- /dev/null
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -0,0 +1,416 @@
+/**
+ * @file lllogininstance_test.cpp
+ * @brief Test for lllogininstance.cpp.
+ *
+ * $LicenseInfo:firstyear=2008&license=internal$
+ * Copyright (c) 2008, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header
+#include "../llviewerprecompiledheaders.h"
+// Own header
+#include "../lllogininstance.h"
+// STL headers
+// std headers
+// external library headers
+// other Linden headers
+#include "../test/lltut.h"
+#include "llevents.h"
+
+#if defined(LL_WINDOWS)
+#pragma warning(disable: 4355) // using 'this' in base-class ctor initializer expr
+#endif
+
+// Constants
+const std::string VIEWERLOGIN_URI("viewerlogin_uri");
+const std::string VIEWERLOGIN_GRIDLABEL("viewerlogin_grid");
+
+const std::string APPVIEWER_SERIALNUMBER("appviewer_serialno");
+
+// Link seams.
+
+//-----------------------------------------------------------------------------
+static LLEventStream gTestPump("test_pump");
+
+#include "lllogin.h"
+static std::string gLoginURI;
+static LLSD gLoginCreds;
+static bool gDisconnectCalled = false;
+class LLLogin::Impl
+{
+};
+LLLogin::LLLogin() {}
+LLLogin::~LLLogin() {}
+LLEventPump& LLLogin::getEventPump() { return gTestPump; }
+void LLLogin::connect(const std::string& uri, const LLSD& credentials)
+{
+ gLoginURI = uri;
+ gLoginCreds = credentials;
+}
+
+void LLLogin::disconnect()
+{
+ gDisconnectCalled = true;
+}
+
+//-----------------------------------------------------------------------------
+#include "../llviewernetwork.h"
+unsigned char gMACAddress[MAC_ADDRESS_BYTES] = {'1','2','3','4','5','6'}; /* Flawfinder: ignore */
+
+LLViewerLogin::LLViewerLogin() {}
+LLViewerLogin::~LLViewerLogin() {}
+void LLViewerLogin::getLoginURIs(std::vector<std::string>& uris) const
+{
+ uris.push_back(VIEWERLOGIN_URI);
+}
+std::string LLViewerLogin::getGridLabel() const { return VIEWERLOGIN_GRIDLABEL; }
+
+//-----------------------------------------------------------------------------
+#include "../llviewercontrol.h"
+LLControlGroup gSavedSettings("Global");
+std::string gCurrentVersion = "invalid_version";
+
+LLControlGroup::LLControlGroup(const std::string& name) :
+ LLInstanceTracker<LLControlGroup, std::string>(name){}
+LLControlGroup::~LLControlGroup() {}
+void LLControlGroup::setBOOL(const std::string& name, BOOL val) {}
+BOOL LLControlGroup::getBOOL(const std::string& name) { return FALSE; }
+U32 LLControlGroup::saveToFile(const std::string& filename, BOOL nondefault_only) { return 1; }
+void LLControlGroup::setString(const std::string& name, const std::string& val) {}
+std::string LLControlGroup::getString(const std::string& name) { return "test_string"; }
+BOOL LLControlGroup::declareBOOL(const std::string& name, BOOL initial_val, const std::string& comment, BOOL persist) { return TRUE; }
+BOOL LLControlGroup::declareString(const std::string& name, const std::string &initial_val, const std::string& comment, BOOL persist) { return TRUE; }
+
+#include "lluicolortable.h"
+void LLUIColorTable::saveUserSettings(void)const {}
+
+//-----------------------------------------------------------------------------
+#include "../llurlsimstring.h"
+LLURLSimString LLURLSimString::sInstance;
+bool LLURLSimString::parse() { return true; }
+
+//-----------------------------------------------------------------------------
+#include "llnotifications.h"
+#include "llfloaterreg.h"
+static std::string gTOSType;
+static LLEventPump * gTOSReplyPump = NULL;
+
+//static
+LLFloater* LLFloaterReg::showInstance(const std::string& name, const LLSD& key, BOOL focus)
+{
+ gTOSType = name;
+ gTOSReplyPump = &LLEventPumps::instance().obtain(key["reply_pump"]);
+ return NULL;
+}
+
+//-----------------------------------------------------------------------------
+// LLNotifications
+class MockNotifications : public LLNotificationsInterface
+{
+ boost::function<void (const LLSD&, const LLSD&)> mResponder;
+ int mAddedCount;
+
+public:
+ MockNotifications() :
+ mResponder(0),
+ mAddedCount(0)
+ {
+ }
+
+ virtual ~MockNotifications() {}
+
+ /* virtual */ LLNotificationPtr add(
+ const std::string& name,
+ const LLSD& substitutions,
+ const LLSD& payload,
+ LLNotificationFunctorRegistry::ResponseFunctor functor)
+ {
+ mResponder = functor;
+ mAddedCount++;
+ return LLNotificationPtr((LLNotification*)NULL);
+ }
+
+ void sendYesResponse()
+ {
+ LLSD notification;
+ LLSD response;
+ response = 1;
+ mResponder(notification, response);
+ }
+
+ void sendNoResponse()
+ {
+ LLSD notification;
+ LLSD response;
+ response = 2;
+ mResponder(notification, response);
+ }
+
+ void sendBogusResponse()
+ {
+ LLSD notification;
+ LLSD response;
+ response = 666;
+ mResponder(notification, response);
+ }
+
+ int addedCount() { return mAddedCount; }
+};
+
+S32 LLNotification::getSelectedOption(const LLSD& notification, const LLSD& response)
+{
+ return response.asInteger();
+}
+
+// misc
+std::string xml_escape_string(const std::string& in)
+{
+ return in;
+}
+
+/*****************************************************************************
+* TUT
+*****************************************************************************/
+namespace tut
+{
+ struct lllogininstance_data
+ {
+ lllogininstance_data() : logininstance(LLLoginInstance::getInstance())
+ {
+ // Global initialization
+ gLoginURI.clear();
+ gLoginCreds.clear();
+ gDisconnectCalled = false;
+
+ gTOSType = ""; // Set to invalid value.
+ gTOSReplyPump = 0; // clear the callback.
+
+
+ gSavedSettings.declareBOOL("NoInventoryLibrary", FALSE, "", FALSE);
+ gSavedSettings.declareBOOL("ConnectAsGod", FALSE, "", FALSE);
+ gSavedSettings.declareBOOL("UseDebugMenus", FALSE, "", FALSE);
+ gSavedSettings.declareBOOL("ForceMandatoryUpdate", FALSE, "", FALSE);
+ gSavedSettings.declareString("ClientSettingsFile", "test_settings.xml", "", FALSE);
+ gSavedSettings.declareString("VersionChannelName", "test_version_string", "", FALSE);
+ gSavedSettings.declareString("NextLoginLocation", "", "", FALSE);
+ gSavedSettings.declareBOOL("LoginLastLocation", FALSE, "", FALSE);
+
+ credentials["first"] = "testfirst";
+ credentials["last"] = "testlast";
+ credentials["passwd"] = "testpass";
+
+ logininstance->setNotificationsInterface(&notifications);
+ }
+
+ LLLoginInstance* logininstance;
+ LLSD credentials;
+ MockNotifications notifications;
+ };
+
+ typedef test_group<lllogininstance_data> lllogininstance_group;
+ typedef lllogininstance_group::object lllogininstance_object;
+ lllogininstance_group llsdmgr("lllogininstance");
+
+ template<> template<>
+ void lllogininstance_object::test<1>()
+ {
+ set_test_name("Test Simple Success And Disconnect");
+
+ // Test default connect.
+ logininstance->connect(credentials);
+
+ ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI);
+
+ // Dummy success response.
+ LLSD response;
+ response["state"] = "online";
+ response["progress"] = 1.0;
+ response["transfer_rate"] = 7;
+ response["data"] = "test_data";
+
+ gTestPump.post(response);
+
+ ensure("Success response", logininstance->authSuccess());
+ ensure_equals("Test Response Data", logininstance->getResponse().asString(), "test_data");
+
+ logininstance->disconnect();
+
+ ensure_equals("Called Login Module Disconnect", gDisconnectCalled, true);
+
+ response.clear();
+ response["state"] = "offline";
+ response["progress"] = 0.0;
+ response["transfer_rate"] = 0;
+ response["data"] = "test_data";
+
+ gTestPump.post(response);
+
+ ensure("Disconnected", !(logininstance->authSuccess()));
+ }
+
+ template<> template<>
+ void lllogininstance_object::test<2>()
+ {
+ set_test_name("Test User TOS/Critical message Interaction");
+
+ const std::string test_uri = "testing-uri";
+
+ // Test default connect.
+ logininstance->connect(test_uri, credentials);
+
+ // connect should call LLLogin::connect to init gLoginURI and gLoginCreds.
+ ensure_equals("Default connect uri", gLoginURI, "testing-uri");
+ ensure_equals("Default for agree to tos", gLoginCreds["params"]["agree_to_tos"].asBoolean(), false);
+ ensure_equals("Default for read critical", gLoginCreds["params"]["read_critical"].asBoolean(), false);
+
+ // TOS failure response.
+ LLSD response;
+ response["state"] = "offline";
+ response["progress"] = 0.0;
+ response["transfer_rate"] = 7;
+ response["data"]["reason"] = "tos";
+ gTestPump.post(response);
+
+ ensure_equals("TOS Dialog type", gTOSType, "message_tos");
+ ensure("TOS callback given", gTOSReplyPump != 0);
+ gTOSReplyPump->post(false); // Call callback denying TOS.
+ ensure("No TOS, failed auth", logininstance->authFailure());
+
+ // Start again.
+ logininstance->connect(test_uri, credentials);
+ gTestPump.post(response); // Fail for tos again.
+ gTOSReplyPump->post(true); // Accept tos, should reconnect w/ agree_to_tos.
+ ensure_equals("Accepted agree to tos", gLoginCreds["params"]["agree_to_tos"].asBoolean(), true);
+ ensure("Incomplete login status", !logininstance->authFailure() && !logininstance->authSuccess());
+
+ // Fail connection, attempt connect again.
+ // The new request should have reset agree to tos to default.
+ response["data"]["reason"] = "key"; // bad creds.
+ gTestPump.post(response);
+ ensure("TOS auth failure", logininstance->authFailure());
+
+ logininstance->connect(test_uri, credentials);
+ ensure_equals("Reset to default for agree to tos", gLoginCreds["params"]["agree_to_tos"].asBoolean(), false);
+
+ // Critical Message failure response.
+ logininstance->connect(test_uri, credentials);
+ response["data"]["reason"] = "critical"; // Change response to "critical message"
+ gTestPump.post(response);
+
+ ensure_equals("TOS Dialog type", gTOSType, "message_critical");
+ ensure("TOS callback given", gTOSReplyPump != 0);
+ gTOSReplyPump->post(true);
+ ensure_equals("Accepted read critical message", gLoginCreds["params"]["read_critical"].asBoolean(), true);
+ ensure("Incomplete login status", !logininstance->authFailure() && !logininstance->authSuccess());
+
+ // Fail then attempt new connection
+ response["data"]["reason"] = "key"; // bad creds.
+ gTestPump.post(response);
+ ensure("TOS auth failure", logininstance->authFailure());
+ logininstance->connect(test_uri, credentials);
+ ensure_equals("Default for agree to tos", gLoginCreds["params"]["read_critical"].asBoolean(), false);
+ }
+
+ template<> template<>
+ void lllogininstance_object::test<3>()
+ {
+ set_test_name("Test Mandatory Update User Accepts");
+
+ // Part 1 - Mandatory Update, with User accepts response.
+ // Test connect with update needed.
+ logininstance->connect(credentials);
+
+ ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI);
+
+ // Update needed failure response.
+ LLSD response;
+ response["state"] = "offline";
+ response["progress"] = 0.0;
+ response["transfer_rate"] = 7;
+ response["data"]["reason"] = "update";
+ gTestPump.post(response);
+
+ ensure_equals("Notification added", notifications.addedCount(), 1);
+
+ notifications.sendYesResponse();
+
+ ensure("Disconnected", !(logininstance->authSuccess()));
+ }
+
+ template<> template<>
+ void lllogininstance_object::test<4>()
+ {
+ set_test_name("Test Mandatory Update User Decline");
+
+ // Test connect with update needed.
+ logininstance->connect(credentials);
+
+ ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI);
+
+ // Update needed failure response.
+ LLSD response;
+ response["state"] = "offline";
+ response["progress"] = 0.0;
+ response["transfer_rate"] = 7;
+ response["data"]["reason"] = "update";
+ gTestPump.post(response);
+
+ ensure_equals("Notification added", notifications.addedCount(), 1);
+ notifications.sendNoResponse();
+
+ ensure("Disconnected", !(logininstance->authSuccess()));
+ }
+
+ template<> template<>
+ void lllogininstance_object::test<6>()
+ {
+ set_test_name("Test Optional Update User Accept");
+
+ // Part 3 - Mandatory Update, with bogus response.
+ // Test connect with update needed.
+ logininstance->connect(credentials);
+
+ ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI);
+
+ // Update needed failure response.
+ LLSD response;
+ response["state"] = "offline";
+ response["progress"] = 0.0;
+ response["transfer_rate"] = 7;
+ response["data"]["reason"] = "optional";
+ gTestPump.post(response);
+
+ ensure_equals("Notification added", notifications.addedCount(), 1);
+ notifications.sendYesResponse();
+
+ ensure("Disconnected", !(logininstance->authSuccess()));
+ }
+
+ template<> template<>
+ void lllogininstance_object::test<7>()
+ {
+ set_test_name("Test Optional Update User Denies");
+
+ // Part 3 - Mandatory Update, with bogus response.
+ // Test connect with update needed.
+ logininstance->connect(credentials);
+
+ ensure_equals("Default connect uri", gLoginURI, VIEWERLOGIN_URI);
+
+ // Update needed failure response.
+ LLSD response;
+ response["state"] = "offline";
+ response["progress"] = 0.0;
+ response["transfer_rate"] = 7;
+ response["data"]["reason"] = "optional";
+ gTestPump.post(response);
+
+ ensure_equals("Notification added", notifications.addedCount(), 1);
+ notifications.sendNoResponse();
+
+ // User skips, should be reconnecting.
+ ensure_equals("reconnect uri", gLoginURI, VIEWERLOGIN_URI);
+ ensure_equals("skipping optional update", gLoginCreds["params"]["skipoptional"].asBoolean(), true);
+ }
+}
diff --git a/indra/newview/tests/llxmlrpclistener_test.cpp b/indra/newview/tests/llxmlrpclistener_test.cpp
new file mode 100644
index 0000000000..c94ba0a3e8
--- /dev/null
+++ b/indra/newview/tests/llxmlrpclistener_test.cpp
@@ -0,0 +1,230 @@
+/*
+ * @file llxmlrpclistener_test.cpp
+ * @author Nat Goodspeed
+ * @date 2009-03-20
+ * @brief Test for llxmlrpclistener.
+ *
+ * $LicenseInfo:firstyear=2009&license=internal$
+ * Copyright (c) 2009, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header
+#include "../llviewerprecompiledheaders.h"
+// associated header
+#include "../llxmlrpclistener.h"
+// STL headers
+#include <iomanip>
+// std headers
+// external library headers
+// other Linden headers
+#include "../test/lltut.h"
+#include "../llxmlrpctransaction.h"
+#include "llevents.h"
+#include "lleventfilter.h"
+#include "llsd.h"
+#include "llcontrol.h"
+#include "tests/wrapllerrs.h"
+
+LLControlGroup gSavedSettings("Global");
+
+/*****************************************************************************
+* TUT
+*****************************************************************************/
+namespace tut
+{
+ struct data
+ {
+ data():
+ pumps(LLEventPumps::instance()),
+ uri("http://127.0.0.1:8000")
+ {
+ // These variables are required by machinery used by
+ // LLXMLRPCTransaction. The values reflect reality for this test
+ // executable; hopefully these values are correct.
+ gSavedSettings.declareBOOL("BrowserProxyEnabled", FALSE, "", FALSE); // don't persist
+ gSavedSettings.declareBOOL("NoVerifySSLCert", TRUE, "", FALSE); // don't persist
+ }
+
+ // LLEventPump listener signature
+ bool captureReply(const LLSD& r)
+ {
+ reply = r;
+ return false;
+ }
+
+ LLSD reply;
+ LLEventPumps& pumps;
+ std::string uri;
+ };
+ typedef test_group<data> llxmlrpclistener_group;
+ typedef llxmlrpclistener_group::object object;
+ llxmlrpclistener_group llxmlrpclistenergrp("llxmlrpclistener");
+
+ template<> template<>
+ void object::test<1>()
+ {
+ set_test_name("request validation");
+ WrapLL_ERRS capture;
+ LLSD request;
+ request["uri"] = uri;
+ std::string threw;
+ try
+ {
+ pumps.obtain("LLXMLRPCTransaction").post(request);
+ }
+ catch (const WrapLL_ERRS::FatalException& e)
+ {
+ threw = e.what();
+ }
+ ensure_contains("threw exception", threw, "missing params");
+ ensure_contains("identified missing", threw, "method");
+ ensure_contains("identified missing", threw, "reply");
+ }
+
+ template<> template<>
+ void object::test<2>()
+ {
+ set_test_name("param types validation");
+ WrapLL_ERRS capture;
+ LLSD request;
+ request["uri"] = uri;
+ request["method"] = "hello";
+ request["reply"] = "reply";
+ LLSD& params(request["params"]);
+ params["who"]["specifically"] = "world"; // LLXMLRPCListener only handles scalar params
+ std::string threw;
+ try
+ {
+ pumps.obtain("LLXMLRPCTransaction").post(request);
+ }
+ catch (const WrapLL_ERRS::FatalException& e)
+ {
+ threw = e.what();
+ }
+ ensure_contains("threw exception", threw, "unknown type");
+ }
+
+ template<> template<>
+ void object::test<3>()
+ {
+ set_test_name("success case");
+ LLSD request;
+ request["uri"] = uri;
+ request["method"] = "hello";
+ request["reply"] = "reply";
+ LLSD& params(request["params"]);
+ params["who"] = "world";
+ // Set up a timeout filter so we don't spin forever waiting.
+ LLEventTimeout watchdog;
+ // Connect the timeout filter to the reply pump.
+ LLTempBoundListener temp(
+ pumps.obtain("reply").
+ listen("watchdog", boost::bind(&LLEventTimeout::post, boost::ref(watchdog), _1)));
+ // Now connect our target listener to the timeout filter.
+ watchdog.listen("captureReply", boost::bind(&data::captureReply, this, _1));
+ // Kick off the request...
+ reply.clear();
+ pumps.obtain("LLXMLRPCTransaction").post(request);
+ // Set the timer
+ F32 timeout(10);
+ watchdog.eventAfter(timeout, LLSD().insert("timeout", 0));
+ // and pump "mainloop" until we get something, whether from
+ // LLXMLRPCListener or from the watchdog filter.
+ LLTimer timer;
+ F32 start = timer.getElapsedTimeF32();
+ LLEventPump& mainloop(pumps.obtain("mainloop"));
+ while (reply.isUndefined())
+ {
+ mainloop.post(LLSD());
+ }
+ ensure("timeout works", (timer.getElapsedTimeF32() - start) < (timeout + 1));
+ ensure_equals(reply["responses"]["hi_there"].asString(), "Hello, world!");
+ }
+
+ template<> template<>
+ void object::test<4>()
+ {
+ set_test_name("bogus method");
+ LLSD request;
+ request["uri"] = uri;
+ request["method"] = "goodbye";
+ request["reply"] = "reply";
+ LLSD& params(request["params"]);
+ params["who"] = "world";
+ // Set up a timeout filter so we don't spin forever waiting.
+ LLEventTimeout watchdog;
+ // Connect the timeout filter to the reply pump.
+ LLTempBoundListener temp(
+ pumps.obtain("reply").
+ listen("watchdog", boost::bind(&LLEventTimeout::post, boost::ref(watchdog), _1)));
+ // Now connect our target listener to the timeout filter.
+ watchdog.listen("captureReply", boost::bind(&data::captureReply, this, _1));
+ // Kick off the request...
+ reply.clear();
+ pumps.obtain("LLXMLRPCTransaction").post(request);
+ // Set the timer
+ F32 timeout(10);
+ watchdog.eventAfter(timeout, LLSD().insert("timeout", 0));
+ // and pump "mainloop" until we get something, whether from
+ // LLXMLRPCListener or from the watchdog filter.
+ LLTimer timer;
+ F32 start = timer.getElapsedTimeF32();
+ LLEventPump& mainloop(pumps.obtain("mainloop"));
+ while (reply.isUndefined())
+ {
+ mainloop.post(LLSD());
+ }
+ ensure("timeout works", (timer.getElapsedTimeF32() - start) < (timeout + 1));
+ ensure_equals("XMLRPC error", reply["status"].asString(), "XMLRPCError");
+ }
+
+ template<> template<>
+ void object::test<5>()
+ {
+ set_test_name("bad type");
+ LLSD request;
+ request["uri"] = uri;
+ request["method"] = "getdict";
+ request["reply"] = "reply";
+ (void)request["params"];
+ // Set up a timeout filter so we don't spin forever waiting.
+ LLEventTimeout watchdog;
+ // Connect the timeout filter to the reply pump.
+ LLTempBoundListener temp(
+ pumps.obtain("reply").
+ listen("watchdog", boost::bind(&LLEventTimeout::post, boost::ref(watchdog), _1)));
+ // Now connect our target listener to the timeout filter.
+ watchdog.listen("captureReply", boost::bind(&data::captureReply, this, _1));
+ // Kick off the request...
+ reply.clear();
+ pumps.obtain("LLXMLRPCTransaction").post(request);
+ // Set the timer
+ F32 timeout(10);
+ watchdog.eventAfter(timeout, LLSD().insert("timeout", 0));
+ // and pump "mainloop" until we get something, whether from
+ // LLXMLRPCListener or from the watchdog filter.
+ LLTimer timer;
+ F32 start = timer.getElapsedTimeF32();
+ LLEventPump& mainloop(pumps.obtain("mainloop"));
+ while (reply.isUndefined())
+ {
+ mainloop.post(LLSD());
+ }
+ ensure("timeout works", (timer.getElapsedTimeF32() - start) < (timeout + 1));
+ ensure_equals(reply["status"].asString(), "BadType");
+ ensure_contains("bad type", reply["responses"]["nested_dict"].asString(), "bad XMLRPC type");
+ }
+} // namespace tut
+
+/*****************************************************************************
+* Resolve link errors: use real machinery here, since we intend to exchange
+* actual XML with a peer process.
+*****************************************************************************/
+// Including llxmlrpctransaction.cpp drags in the static LLXMLRPCListener
+// instantiated there. That's why it works to post requests to the LLEventPump
+// named "LLXMLRPCTransaction".
+#include "../llxmlrpctransaction.cpp"
+#include "llcontrol.cpp"
+#include "llxmltree.cpp"
+#include "llxmlparser.cpp"
diff --git a/indra/newview/tests/test_llxmlrpc_peer.py b/indra/newview/tests/test_llxmlrpc_peer.py
new file mode 100644
index 0000000000..cb8f7d26c4
--- /dev/null
+++ b/indra/newview/tests/test_llxmlrpc_peer.py
@@ -0,0 +1,59 @@
+#!/usr/bin/python
+"""\
+@file test_llxmlrpc_peer.py
+@author Nat Goodspeed
+@date 2008-10-09
+@brief This script asynchronously runs the executable (with args) specified on
+ the command line, returning its result code. While that executable is
+ running, we provide dummy local services for use by C++ tests.
+
+$LicenseInfo:firstyear=2008&license=viewergpl$
+Copyright (c) 2008, Linden Research, Inc.
+$/LicenseInfo$
+"""
+
+import os
+import sys
+from threading import Thread
+from SimpleXMLRPCServer import SimpleXMLRPCServer
+
+mydir = os.path.dirname(__file__) # expected to be .../indra/newview/tests/
+sys.path.insert(0, os.path.join(mydir, os.pardir, os.pardir, "lib", "python"))
+sys.path.insert(1, os.path.join(mydir, os.pardir, os.pardir, "llmessage", "tests"))
+from testrunner import run, debug
+
+class TestServer(SimpleXMLRPCServer):
+ def _dispatch(self, method, params):
+ try:
+ func = getattr(self, method)
+ except AttributeError:
+ raise Exception('method "%s" is not supported' % method)
+ else:
+ # LLXMLRPCListener constructs XMLRPC parameters that arrive as a
+ # 1-tuple containing a dict.
+ return func(**(params[0]))
+
+ def hello(self, who):
+ # LLXMLRPCListener expects a dict return.
+ return {"hi_there": "Hello, %s!" % who}
+
+ def getdict(self):
+ return dict(nested_dict=dict(a=17, b=5))
+
+ def log_request(self, code, size=None):
+ # For present purposes, we don't want the request splattered onto
+ # stderr, as it would upset devs watching the test run
+ pass
+
+ def log_error(self, format, *args):
+ # Suppress error output as well
+ pass
+
+class ServerRunner(Thread):
+ def run(self):
+ server = TestServer(('127.0.0.1', 8000))
+ debug("Starting XMLRPC server...\n")
+ server.serve_forever()
+
+if __name__ == "__main__":
+ sys.exit(run(server=ServerRunner(name="xmlrpc"), *sys.argv[1:]))
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index e85fddbc99..7084fca865 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -1,735 +1,796 @@
-#!/usr/bin/python
-# @file viewer_manifest.py
-# @author Ryan Williams
-# @brief Description of all installer viewer files, and methods for packaging
-# them into installers for all supported platforms.
-#
-# $LicenseInfo:firstyear=2006&license=viewergpl$
-#
-# Copyright (c) 2006-2009, Linden Research, Inc.
-#
-# Second Life Viewer Source Code
-# The source code in this file ("Source Code") is provided by Linden Lab
-# to you under the terms of the GNU General Public License, version 2.0
-# ("GPL"), unless you have obtained a separate licensing agreement
-# ("Other License"), formally executed by you and Linden Lab. Terms of
-# the GPL can be found in doc/GPL-license.txt in this distribution, or
-# online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
-#
-# There are special exceptions to the terms and conditions of the GPL as
-# it is applied to this Source Code. View the full text of the exception
-# in the file doc/FLOSS-exception.txt in this software distribution, or
-# online at
-# http://secondlifegrid.net/programs/open_source/licensing/flossexception
-#
-# By copying, modifying or distributing this software, you acknowledge
-# that you have read and understood your obligations described above,
-# and agree to abide by those obligations.
-#
-# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
-# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
-# COMPLETENESS OR PERFORMANCE.
-# $/LicenseInfo$
-import sys
-import os.path
-import re
-import tarfile
-viewer_dir = os.path.dirname(__file__)
-# add llmanifest library to our path so we don't have to muck with PYTHONPATH
-sys.path.append(os.path.join(viewer_dir, '../lib/python/indra/util'))
-from llmanifest import LLManifest, main, proper_windows_path, path_ancestors
-
-class ViewerManifest(LLManifest):
- def construct(self):
- super(ViewerManifest, self).construct()
- self.exclude("*.svn*")
- self.path(src="../../scripts/messages/message_template.msg", dst="app_settings/message_template.msg")
- self.path(src="../../etc/message.xml", dst="app_settings/message.xml")
-
- if self.prefix(src="app_settings"):
- self.exclude("logcontrol.xml")
- self.exclude("logcontrol-dev.xml")
- self.path("*.pem")
- self.path("*.ini")
- self.path("*.xml")
- self.path("*.db2")
-
- # include the entire shaders directory recursively
- self.path("shaders")
- # ... and the entire windlight directory
- self.path("windlight")
- self.end_prefix("app_settings")
-
- if self.prefix(src="character"):
- self.path("*.llm")
- self.path("*.xml")
- self.path("*.tga")
- self.end_prefix("character")
-
- # Include our fonts
- if self.prefix(src="fonts"):
- self.path("*.ttf")
- self.path("*.txt")
- self.end_prefix("fonts")
-
- # skins
- if self.prefix(src="skins"):
- self.path("paths.xml")
- # include the entire textures directory recursively
- if self.prefix(src="*/textures"):
- self.path("*/*.tga")
- self.path("*/*.j2c")
- self.path("*/*.jpg")
- self.path("*/*.png")
- self.path("*.tga")
- self.path("*.j2c")
- self.path("*.jpg")
- self.path("*.png")
- self.path("textures.xml")
- self.end_prefix("*/textures")
- self.path("*/xui/*/*.xml")
- self.path("*/xui/*/widgets/*.xml")
- self.path("*/*.xml")
-
- # Local HTML files (e.g. loading screen)
- if self.prefix(src="*/html"):
- self.path("*.png")
- self.path("*/*/*.html")
- self.path("*/*/*.gif")
- self.end_prefix("*/html")
- self.end_prefix("skins")
-
- # Files in the newview/ directory
- self.path("gpu_table.txt")
-
- def login_channel(self):
- """Channel reported for login and upgrade purposes ONLY;
- used for A/B testing"""
- # NOTE: Do not return the normal channel if login_channel
- # is not specified, as some code may branch depending on
- # whether or not this is present
- return self.args.get('login_channel')
-
- def grid(self):
- return self.args['grid']
- def channel(self):
- return self.args['channel']
- def channel_unique(self):
- return self.channel().replace("Second Life", "").strip()
- def channel_oneword(self):
- return "".join(self.channel_unique().split())
- def channel_lowerword(self):
- return self.channel_oneword().lower()
-
- def flags_list(self):
- """ Convenience function that returns the command-line flags
- for the grid"""
-
- # Set command line flags relating to the target grid
- grid_flags = ''
- if not self.default_grid():
- grid_flags = "--grid %(grid)s "\
- "--helperuri http://preview-%(grid)s.secondlife.com/helpers/" %\
- {'grid':self.grid()}
-
- # set command line flags for channel
- channel_flags = ''
- if self.login_channel() and self.login_channel() != self.channel():
- # Report a special channel during login, but use default
- channel_flags = '--channel "%s"' % (self.login_channel())
- elif not self.default_channel():
- channel_flags = '--channel "%s"' % self.channel()
-
- # Deal with settings
- setting_flags = ''
- if not self.default_channel() or not self.default_grid():
- if self.default_grid():
- setting_flags = '--settings settings_%s.xml'\
- % self.channel_lowerword()
- else:
- setting_flags = '--settings settings_%s_%s.xml'\
- % (self.grid(), self.channel_lowerword())
-
- return " ".join((channel_flags, grid_flags, setting_flags)).strip()
-
-
-class WindowsManifest(ViewerManifest):
- def final_exe(self):
- if self.default_channel():
- if self.default_grid():
- return "SecondLife.exe"
- else:
- return "SecondLifePreview.exe"
- else:
- return ''.join(self.channel().split()) + '.exe'
-
-
- def construct(self):
- super(WindowsManifest, self).construct()
- # the final exe is complicated because we're not sure where it's coming from,
- # nor do we have a fixed name for the executable
- self.path(self.find_existing_file('debug/secondlife-bin.exe', 'release/secondlife-bin.exe', 'relwithdebinfo/secondlife-bin.exe'), dst=self.final_exe())
- # need to get the kdu dll from any of the build directories as well
- try:
- self.path(self.find_existing_file('../llkdu/%s/llkdu.dll' % self.args['configuration'],
- '../../libraries/i686-win32/lib/release/llkdu.dll'),
- dst='llkdu.dll')
- pass
- except:
- print "Skipping llkdu.dll"
- pass
- self.path(src="licenses-win32.txt", dst="licenses.txt")
-
- self.path("featuretable.txt")
-
- # For use in crash reporting (generates minidumps)
- self.path("dbghelp.dll")
-
- # For using FMOD for sound... DJS
- self.path("fmod.dll")
-
- # For textures
- if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""):
- self.path("openjpeg.dll")
- self.end_prefix()
-
- # Plugin host application
- if self.prefix(src='../llplugin/slplugin/%s' % self.args['configuration'], dst="llplugin"):
- self.path("slplugin.exe")
- self.end_prefix()
-
- # Media plugins - QuickTime
- if self.prefix(src='../media_plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"):
- self.path("media_plugin_quicktime.dll")
- self.end_prefix()
-
- # Media plugins - WebKit/Qt
- if self.prefix(src='../media_plugins/webkit/%s' % self.args['configuration'], dst="llplugin"):
- self.path("media_plugin_webkit.dll")
- self.end_prefix()
-
- # For WebKit/Qt plugin runtimes
- if self.prefix(src="../../libraries/i686-win32/lib/release", dst="llplugin"):
- self.path("libeay32.dll")
- self.path("qtcore4.dll")
- self.path("qtgui4.dll")
- self.path("qtnetwork4.dll")
- self.path("qtopengl4.dll")
- self.path("qtwebkit4.dll")
- self.path("ssleay32.dll")
- self.end_prefix()
-
- # For WebKit/Qt plugin runtimes (image format plugins)
- if self.prefix(src="../../libraries/i686-win32/lib/release/imageformats", dst="llplugin/imageformats"):
- self.path("qgif4.dll")
- self.path("qico4.dll")
- self.path("qjpeg4.dll")
- self.path("qmng4.dll")
- self.path("qsvg4.dll")
- self.path("qtiff4.dll")
- self.end_prefix()
-
- # These need to be installed as a SxS assembly, currently a 'private' assembly.
- # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx
- if self.prefix(src=self.args['configuration'], dst=""):
- if self.args['configuration'] == 'Debug':
- self.path("msvcr80d.dll")
- self.path("msvcp80d.dll")
- self.path("Microsoft.VC80.DebugCRT.manifest")
- else:
- self.path("msvcr80.dll")
- self.path("msvcp80.dll")
- self.path("Microsoft.VC80.CRT.manifest")
- self.end_prefix()
-
- # The config file name needs to match the exe's name.
- self.path(src="%s/secondlife-bin.exe.config" % self.args['configuration'], dst=self.final_exe() + ".config")
-
- # Vivox runtimes
- if self.prefix(src="vivox-runtime/i686-win32", dst=""):
- self.path("SLVoice.exe")
- self.path("alut.dll")
- self.path("vivoxsdk.dll")
- self.path("ortp.dll")
- self.path("wrap_oal.dll")
- self.end_prefix()
-
- # pull in the crash logger and updater from other projects
- self.path(src=self.find_existing_file( # tag:"crash-logger" here as a cue to the exporter
- "../win_crash_logger/debug/windows-crash-logger.exe",
- "../win_crash_logger/release/windows-crash-logger.exe",
- "../win_crash_logger/relwithdebinfo/windows-crash-logger.exe"),
- dst="win_crash_logger.exe")
- self.path(src=self.find_existing_file(
- "../win_updater/debug/windows-updater.exe",
- "../win_updater/release/windows-updater.exe",
- "../win_updater/relwithdebinfo/windows-updater.exe"),
- dst="updater.exe")
-
- # For google-perftools tcmalloc allocator.
- if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""):
- self.path("libtcmalloc_minimal.dll")
- self.end_prefix()
-
-
- def nsi_file_commands(self, install=True):
- def wpath(path):
- if path.endswith('/') or path.endswith(os.path.sep):
- path = path[:-1]
- path = path.replace('/', '\\')
- return path
-
- result = ""
- dest_files = [pair[1] for pair in self.file_list if pair[0] and os.path.isfile(pair[1])]
- # sort deepest hierarchy first
- dest_files.sort(lambda a,b: cmp(a.count(os.path.sep),b.count(os.path.sep)) or cmp(a,b))
- dest_files.reverse()
- out_path = None
- for pkg_file in dest_files:
- rel_file = os.path.normpath(pkg_file.replace(self.get_dst_prefix()+os.path.sep,''))
- installed_dir = wpath(os.path.join('$INSTDIR', os.path.dirname(rel_file)))
- pkg_file = wpath(os.path.normpath(pkg_file))
- if installed_dir != out_path:
- if install:
- out_path = installed_dir
- result += 'SetOutPath ' + out_path + '\n'
- if install:
- result += 'File ' + pkg_file + '\n'
- else:
- result += 'Delete ' + wpath(os.path.join('$INSTDIR', rel_file)) + '\n'
- # at the end of a delete, just rmdir all the directories
- if not install:
- deleted_file_dirs = [os.path.dirname(pair[1].replace(self.get_dst_prefix()+os.path.sep,'')) for pair in self.file_list]
- # find all ancestors so that we don't skip any dirs that happened to have no non-dir children
- deleted_dirs = []
- for d in deleted_file_dirs:
- deleted_dirs.extend(path_ancestors(d))
- # sort deepest hierarchy first
- deleted_dirs.sort(lambda a,b: cmp(a.count(os.path.sep),b.count(os.path.sep)) or cmp(a,b))
- deleted_dirs.reverse()
- prev = None
- for d in deleted_dirs:
- if d != prev: # skip duplicates
- result += 'RMDir ' + wpath(os.path.join('$INSTDIR', os.path.normpath(d))) + '\n'
- prev = d
-
- return result
-
- def package_finish(self):
- # a standard map of strings for replacing in the templates
- substitution_strings = {
- 'version' : '.'.join(self.args['version']),
- 'version_short' : '.'.join(self.args['version'][:-1]),
- 'version_dashes' : '-'.join(self.args['version']),
- 'final_exe' : self.final_exe(),
- 'grid':self.args['grid'],
- 'grid_caps':self.args['grid'].upper(),
- # escape quotes becase NSIS doesn't handle them well
- 'flags':self.flags_list().replace('"', '$\\"'),
- 'channel':self.channel(),
- 'channel_oneword':self.channel_oneword(),
- 'channel_unique':self.channel_unique(),
- }
-
- version_vars = """
- !define INSTEXE "%(final_exe)s"
- !define VERSION "%(version_short)s"
- !define VERSION_LONG "%(version)s"
- !define VERSION_DASHES "%(version_dashes)s"
- """ % substitution_strings
- if self.default_channel():
- if self.default_grid():
- # release viewer
- installer_file = "Second_Life_%(version_dashes)s_Setup.exe"
- grid_vars_template = """
- OutFile "%(installer_file)s"
- !define INSTFLAGS "%(flags)s"
- !define INSTNAME "SecondLife"
- !define SHORTCUT "Second Life"
- !define URLNAME "secondlife"
- Caption "Second Life ${VERSION}"
- """
- else:
- # beta grid viewer
- installer_file = "Second_Life_%(version_dashes)s_(%(grid_caps)s)_Setup.exe"
- grid_vars_template = """
- OutFile "%(installer_file)s"
- !define INSTFLAGS "%(flags)s"
- !define INSTNAME "SecondLife%(grid_caps)s"
- !define SHORTCUT "Second Life (%(grid_caps)s)"
- !define URLNAME "secondlife%(grid)s"
- !define UNINSTALL_SETTINGS 1
- Caption "Second Life %(grid)s ${VERSION}"
- """
- else:
- # some other channel on some grid
- installer_file = "Second_Life_%(version_dashes)s_%(channel_oneword)s_Setup.exe"
- grid_vars_template = """
- OutFile "%(installer_file)s"
- !define INSTFLAGS "%(flags)s"
- !define INSTNAME "SecondLife%(channel_oneword)s"
- !define SHORTCUT "%(channel)s"
- !define URLNAME "secondlife"
- !define UNINSTALL_SETTINGS 1
- Caption "%(channel)s ${VERSION}"
- """
- if 'installer_name' in self.args:
- installer_file = self.args['installer_name']
- else:
- installer_file = installer_file % substitution_strings
- substitution_strings['installer_file'] = installer_file
-
- tempfile = "secondlife_setup_tmp.nsi"
- # the following replaces strings in the nsi template
- # it also does python-style % substitution
- self.replace_in("installers/windows/installer_template.nsi", tempfile, {
- "%%VERSION%%":version_vars,
- "%%SOURCE%%":self.get_src_prefix(),
- "%%GRID_VARS%%":grid_vars_template % substitution_strings,
- "%%INSTALL_FILES%%":self.nsi_file_commands(True),
- "%%DELETE_FILES%%":self.nsi_file_commands(False)})
-
- # We use the Unicode version of NSIS, available from
- # http://www.scratchpaper.com/
- NSIS_path = 'C:\\Program Files\\NSIS\\Unicode\\makensis.exe'
- self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile))
- # self.remove(self.dst_path_of(tempfile))
- # If we're on a build machine, sign the code using our Authenticode certificate. JC
- sign_py = os.path.expandvars("${SIGN}")
- if not sign_py or sign_py == "${SIGN}":
- sign_py = 'C:\\buildscripts\\code-signing\\sign.py'
- else:
- sign_py = sign_py.replace('\\', '\\\\\\\\')
- python = os.path.expandvars("${PYTHON}")
- if not python or python == "${PYTHON}":
- python = 'python'
- if os.path.exists(sign_py):
- self.run_command("%s %s %s" % (python, sign_py, self.dst_path_of(installer_file).replace('\\', '\\\\\\\\')))
- else:
- print "Skipping code signing,", sign_py, "does not exist"
- self.created_path(self.dst_path_of(installer_file))
- self.package_file = installer_file
-
-
-class DarwinManifest(ViewerManifest):
- def construct(self):
- # copy over the build result (this is a no-op if run within the xcode script)
- self.path(self.args['configuration'] + "/Second Life.app", dst="")
-
- if self.prefix(src="", dst="Contents"): # everything goes in Contents
- self.path("Info-SecondLife.plist", dst="Info.plist")
-
- # copy additional libs in <bundle>/Contents/MacOS/
- self.path("../../libraries/universal-darwin/lib_release/libndofdev.dylib", dst="MacOS/libndofdev.dylib")
-
- # most everything goes in the Resources directory
- if self.prefix(src="", dst="Resources"):
- super(DarwinManifest, self).construct()
-
- if self.prefix("cursors_mac"):
- self.path("*.tif")
- self.end_prefix("cursors_mac")
-
- self.path("licenses-mac.txt", dst="licenses.txt")
- self.path("featuretable_mac.txt")
- self.path("SecondLife.nib")
-
- # If we are not using the default channel, use the 'Firstlook
- # icon' to show that it isn't a stable release.
- if self.default_channel() and self.default_grid():
- self.path("secondlife.icns")
- else:
- self.path("secondlife_firstlook.icns", "secondlife.icns")
- self.path("SecondLife.nib")
-
- # Translations
- self.path("English.lproj")
- self.path("German.lproj")
- self.path("Japanese.lproj")
- self.path("Korean.lproj")
- self.path("da.lproj")
- self.path("es.lproj")
- self.path("fr.lproj")
- self.path("hu.lproj")
- self.path("it.lproj")
- self.path("nl.lproj")
- self.path("pl.lproj")
- self.path("pt.lproj")
- self.path("ru.lproj")
- self.path("tr.lproj")
- self.path("uk.lproj")
- self.path("zh-Hans.lproj")
-
- # SLVoice and vivox lols
- self.path("vivox-runtime/universal-darwin/libalut.dylib", "libalut.dylib")
- self.path("vivox-runtime/universal-darwin/libopenal.dylib", "libopenal.dylib")
- self.path("vivox-runtime/universal-darwin/libortp.dylib", "libortp.dylib")
- self.path("vivox-runtime/universal-darwin/libvivoxsdk.dylib", "libvivoxsdk.dylib")
- self.path("vivox-runtime/universal-darwin/SLVoice", "SLVoice")
-
- # need to get the kdu dll from any of the build directories as well
- try:
- self.path(self.find_existing_file('../llkdu/%s/libllkdu.dylib' % self.args['configuration'],
- "../../libraries/universal-darwin/lib_release/libllkdu.dylib"),
- dst='libllkdu.dylib')
- pass
- except:
- print "Skipping libllkdu.dylib"
- pass
-
- #libfmodwrapper.dylib
- self.path(self.args['configuration'] + "/libfmodwrapper.dylib", "libfmodwrapper.dylib")
-
- # our apps
- self.path("../mac_crash_logger/" + self.args['configuration'] + "/mac-crash-logger.app", "mac-crash-logger.app")
- self.path("../mac_updater/" + self.args['configuration'] + "/mac-updater.app", "mac-updater.app")
-
- # plugins
- if self.prefix(src="", dst="llplugin"):
- self.path("../llplugin/slplugin/" + self.args['configuration'] + "/SLPlugin", "SLPlugin")
- self.path("../media_plugins/quicktime/" + self.args['configuration'] + "/media_plugin_quicktime.dylib", "media_plugin_quicktime.dylib")
- self.path("../media_plugins/webkit/" + self.args['configuration'] + "/media_plugin_webkit.dylib", "media_plugin_webkit.dylib")
- self.path("../../libraries/universal-darwin/lib_release/libllqtwebkit.dylib", "libllqtwebkit.dylib")
-
- self.end_prefix("llplugin")
-
- # command line arguments for connecting to the proper grid
- self.put_in_file(self.flags_list(), 'arguments.txt')
-
- self.end_prefix("Resources")
-
- self.end_prefix("Contents")
-
- # NOTE: the -S argument to strip causes it to keep enough info for
- # annotated backtraces (i.e. function names in the crash log). 'strip' with no
- # arguments yields a slightly smaller binary but makes crash logs mostly useless.
- # This may be desirable for the final release. Or not.
- if ("package" in self.args['actions'] or
- "unpacked" in self.args['actions']):
- self.run_command('strip -S "%(viewer_binary)s"' %
- { 'viewer_binary' : self.dst_path_of('Contents/MacOS/Second Life')})
-
-
- def package_finish(self):
- channel_standin = 'Second Life' # hah, our default channel is not usable on its own
- if not self.default_channel():
- channel_standin = self.channel()
-
- imagename="SecondLife_" + '_'.join(self.args['version'])
-
- # MBW -- If the mounted volume name changes, it breaks the .DS_Store's background image and icon positioning.
- # If we really need differently named volumes, we'll need to create multiple DS_Store file images, or use some other trick.
-
- volname="Second Life Installer" # DO NOT CHANGE without understanding comment above
-
- if self.default_channel():
- if not self.default_grid():
- # beta case
- imagename = imagename + '_' + self.args['grid'].upper()
- else:
- # first look, etc
- imagename = imagename + '_' + self.channel_oneword().upper()
-
- sparsename = imagename + ".sparseimage"
- finalname = imagename + ".dmg"
- # make sure we don't have stale files laying about
- self.remove(sparsename, finalname)
-
- self.run_command('hdiutil create "%(sparse)s" -volname "%(vol)s" -fs HFS+ -type SPARSE -megabytes 400 -layout SPUD' % {
- 'sparse':sparsename,
- 'vol':volname})
-
- # mount the image and get the name of the mount point and device node
- hdi_output = self.run_command('hdiutil attach -private "' + sparsename + '"')
- devfile = re.search("/dev/disk([0-9]+)[^s]", hdi_output).group(0).strip()
- volpath = re.search('HFS\s+(.+)', hdi_output).group(1).strip()
-
- # Copy everything in to the mounted .dmg
-
- if self.default_channel() and not self.default_grid():
- app_name = "Second Life " + self.args['grid']
- else:
- app_name = channel_standin.strip()
-
- # Hack:
- # Because there is no easy way to coerce the Finder into positioning
- # the app bundle in the same place with different app names, we are
- # adding multiple .DS_Store files to svn. There is one for release,
- # one for release candidate and one for first look. Any other channels
- # will use the release .DS_Store, and will look broken.
- # - Ambroff 2008-08-20
- dmg_template = os.path.join(
- 'installers',
- 'darwin',
- '%s-dmg' % "".join(self.channel_unique().split()).lower())
-
- if not os.path.exists (self.src_path_of(dmg_template)):
- dmg_template = os.path.join ('installers', 'darwin', 'release-dmg')
-
- for s,d in {self.get_dst_prefix():app_name + ".app",
- os.path.join(dmg_template, "_VolumeIcon.icns"): ".VolumeIcon.icns",
- os.path.join(dmg_template, "background.jpg"): "background.jpg",
- os.path.join(dmg_template, "_DS_Store"): ".DS_Store"}.items():
- print "Copying to dmg", s, d
- self.copy_action(self.src_path_of(s), os.path.join(volpath, d))
-
- # Hide the background image, DS_Store file, and volume icon file (set their "visible" bit)
- self.run_command('SetFile -a V "' + os.path.join(volpath, ".VolumeIcon.icns") + '"')
- self.run_command('SetFile -a V "' + os.path.join(volpath, "background.jpg") + '"')
- self.run_command('SetFile -a V "' + os.path.join(volpath, ".DS_Store") + '"')
-
- # Create the alias file (which is a resource file) from the .r
- self.run_command('rez "' + self.src_path_of("installers/darwin/release-dmg/Applications-alias.r") + '" -o "' + os.path.join(volpath, "Applications") + '"')
-
- # Set the alias file's alias and custom icon bits
- self.run_command('SetFile -a AC "' + os.path.join(volpath, "Applications") + '"')
-
- # Set the disk image root's custom icon bit
- self.run_command('SetFile -a C "' + volpath + '"')
-
- # Unmount the image
- self.run_command('hdiutil detach -force "' + devfile + '"')
-
- print "Converting temp disk image to final disk image"
- self.run_command('hdiutil convert "%(sparse)s" -format UDZO -imagekey zlib-level=9 -o "%(final)s"' % {'sparse':sparsename, 'final':finalname})
- # get rid of the temp file
- self.package_file = finalname
- self.remove(sparsename)
-
-class LinuxManifest(ViewerManifest):
- def construct(self):
- super(LinuxManifest, self).construct()
- self.path("licenses-linux.txt","licenses.txt")
- self.path("res/ll_icon.png","secondlife_icon.png")
- if self.prefix("linux_tools", dst=""):
- self.path("client-readme.txt","README-linux.txt")
- self.path("client-readme-voice.txt","README-linux-voice.txt")
- self.path("client-readme-joystick.txt","README-linux-joystick.txt")
- self.path("wrapper.sh","secondlife")
- self.path("handle_secondlifeprotocol.sh", "etc/handle_secondlifeprotocol.sh")
- self.path("register_secondlifeprotocol.sh", "etc/register_secondlifeprotocol.sh")
- self.path("refresh_desktop_app_entry.sh", "etc/refresh_desktop_app_entry.sh")
- self.path("launch_url.sh","etc/launch_url.sh")
- self.path("install.sh")
- self.end_prefix("linux_tools")
-
- # Create an appropriate gridargs.dat for this package, denoting required grid.
- self.put_in_file(self.flags_list(), 'etc/gridargs.dat')
-
-
- def package_finish(self):
- if 'installer_name' in self.args:
- installer_name = self.args['installer_name']
- else:
- installer_name_components = ['SecondLife_', self.args.get('arch')]
- installer_name_components.extend(self.args['version'])
- installer_name = "_".join(installer_name_components)
- if self.default_channel():
- if not self.default_grid():
- installer_name += '_' + self.args['grid'].upper()
- else:
- installer_name += '_' + self.channel_oneword().upper()
-
- # Fix access permissions
- self.run_command("""
- find %(dst)s -type d | xargs --no-run-if-empty chmod 755;
- find %(dst)s -type f -perm 0700 | xargs --no-run-if-empty chmod 0755;
- find %(dst)s -type f -perm 0500 | xargs --no-run-if-empty chmod 0555;
- find %(dst)s -type f -perm 0600 | xargs --no-run-if-empty chmod 0644;
- find %(dst)s -type f -perm 0400 | xargs --no-run-if-empty chmod 0444;
- true""" % {'dst':self.get_dst_prefix() })
- self.package_file = installer_name + '.tar.bz2'
-
- # temporarily move directory tree so that it has the right
- # name in the tarfile
- self.run_command("mv %(dst)s %(inst)s" % {
- 'dst': self.get_dst_prefix(),
- 'inst': self.build_path_of(installer_name)})
- try:
- # --numeric-owner hides the username of the builder for
- # security etc.
- self.run_command('tar -C %(dir)s --numeric-owner -cjf '
- '%(inst_path)s.tar.bz2 %(inst_name)s' % {
- 'dir': self.get_build_prefix(),
- 'inst_name': installer_name,
- 'inst_path':self.build_path_of(installer_name)})
- finally:
- self.run_command("mv %(inst)s %(dst)s" % {
- 'dst': self.get_dst_prefix(),
- 'inst': self.build_path_of(installer_name)})
-
-class Linux_i686Manifest(LinuxManifest):
- def construct(self):
- super(Linux_i686Manifest, self).construct()
-
- # install either the libllkdu we just built, or a prebuilt one, in
- # decreasing order of preference. for linux package, this goes to bin/
- try:
- self.path(self.find_existing_file('../llkdu/libllkdu.so',
- '../../libraries/i686-linux/lib_release_client/libllkdu.so'),
- dst='bin/libllkdu.so')
- # keep this one to preserve syntax, open source mangling removes previous lines
- pass
- except:
- print "Skipping libllkdu.so - not found"
- pass
-
- self.path("secondlife-stripped","bin/do-not-directly-run-secondlife-bin")
- self.path("../linux_crash_logger/linux-crash-logger-stripped","bin/linux-crash-logger.bin")
- self.path("../linux_updater/linux-updater-stripped", "bin/linux-updater.bin")
- if self.prefix("res-sdl"):
- self.path("*")
- # recurse
- self.end_prefix("res-sdl")
-
- # plugins
- if self.prefix(src="", dst="bin/llplugin"):
- self.path("../llplugin/slplugin/SLPlugin", "SLPlugin")
- self.path("../media_plugins/webkit/libmedia_plugin_webkit.so", "libmedia_plugin_webkit.so")
- self.path("../media_plugins/gstreamer010/libmedia_plugin_gstreamer010.so", "libmedia_plugin_quicktime.so")
- self.end_prefix("bin/llplugin")
-
- self.path("featuretable_linux.txt")
- #self.path("secondlife-i686.supp")
-
- if self.prefix("../../libraries/i686-linux/lib_release_client", dst="lib"):
- #self.path("libkdu_v42R.so", "libkdu.so")
- self.path("libfmod-3.75.so")
- self.path("libapr-1.so.0")
- self.path("libaprutil-1.so.0")
- self.path("libdb-4.2.so")
- self.path("libcrypto.so.0.9.7")
- self.path("libexpat.so.1")
- self.path("libssl.so.0.9.7")
- self.path("libuuid.so", "libuuid.so.1")
- self.path("libSDL-1.2.so.0")
- self.path("libELFIO.so")
- self.path("libopenjpeg.so.1.3.0", "libopenjpeg.so.1.3")
- self.path("libalut.so")
- self.path("libopenal.so", "libopenal.so.1")
- self.end_prefix("lib")
-
- # Vivox runtimes
- if self.prefix(src="vivox-runtime/i686-linux", dst="bin"):
- self.path("SLVoice")
- self.end_prefix()
- if self.prefix(src="vivox-runtime/i686-linux", dst="lib"):
- self.path("libortp.so")
- self.path("libvivoxsdk.so")
- self.end_prefix("lib")
-
-class Linux_x86_64Manifest(LinuxManifest):
- def construct(self):
- super(Linux_x86_64Manifest, self).construct()
- self.path("secondlife-stripped","bin/do-not-directly-run-secondlife-bin")
- self.path("../linux_crash_logger/linux-crash-logger-stripped","linux-crash-logger.bin")
- if self.prefix("res-sdl"):
- self.path("*")
- # recurse
- self.end_prefix("res-sdl")
-
- self.path("featuretable_linux.txt")
- self.path("secondlife-i686.supp")
-
-if __name__ == "__main__":
- main()
+#!/usr/bin/python
+# @file viewer_manifest.py
+# @author Ryan Williams
+# @brief Description of all installer viewer files, and methods for packaging
+# them into installers for all supported platforms.
+#
+# $LicenseInfo:firstyear=2006&license=viewergpl$
+#
+# Copyright (c) 2006-2009, Linden Research, Inc.
+#
+# Second Life Viewer Source Code
+# The source code in this file ("Source Code") is provided by Linden Lab
+# to you under the terms of the GNU General Public License, version 2.0
+# ("GPL"), unless you have obtained a separate licensing agreement
+# ("Other License"), formally executed by you and Linden Lab. Terms of
+# the GPL can be found in doc/GPL-license.txt in this distribution, or
+# online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+#
+# There are special exceptions to the terms and conditions of the GPL as
+# it is applied to this Source Code. View the full text of the exception
+# in the file doc/FLOSS-exception.txt in this software distribution, or
+# online at
+# http://secondlifegrid.net/programs/open_source/licensing/flossexception
+#
+# By copying, modifying or distributing this software, you acknowledge
+# that you have read and understood your obligations described above,
+# and agree to abide by those obligations.
+#
+# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+# COMPLETENESS OR PERFORMANCE.
+# $/LicenseInfo$
+import sys
+import os.path
+import re
+import tarfile
+viewer_dir = os.path.dirname(__file__)
+# add llmanifest library to our path so we don't have to muck with PYTHONPATH
+sys.path.append(os.path.join(viewer_dir, '../lib/python/indra/util'))
+from llmanifest import LLManifest, main, proper_windows_path, path_ancestors
+
+class ViewerManifest(LLManifest):
+ def construct(self):
+ super(ViewerManifest, self).construct()
+ self.exclude("*.svn*")
+ self.path(src="../../scripts/messages/message_template.msg", dst="app_settings/message_template.msg")
+ self.path(src="../../etc/message.xml", dst="app_settings/message.xml")
+
+ if self.prefix(src="app_settings"):
+ self.exclude("logcontrol.xml")
+ self.exclude("logcontrol-dev.xml")
+ self.path("*.pem")
+ self.path("*.ini")
+ self.path("*.xml")
+ self.path("*.db2")
+
+ # include the entire shaders directory recursively
+ self.path("shaders")
+ # ... and the entire windlight directory
+ self.path("windlight")
+ self.end_prefix("app_settings")
+
+ if self.prefix(src="character"):
+ self.path("*.llm")
+ self.path("*.xml")
+ self.path("*.tga")
+ self.end_prefix("character")
+
+ # Include our fonts
+ if self.prefix(src="fonts"):
+ self.path("*.ttf")
+ self.path("*.txt")
+ self.end_prefix("fonts")
+
+ # skins
+ if self.prefix(src="skins"):
+ self.path("paths.xml")
+ # include the entire textures directory recursively
+ if self.prefix(src="*/textures"):
+ self.path("*/*.tga")
+ self.path("*/*.j2c")
+ self.path("*/*.jpg")
+ self.path("*/*.png")
+ self.path("*.tga")
+ self.path("*.j2c")
+ self.path("*.jpg")
+ self.path("*.png")
+ self.path("textures.xml")
+ self.end_prefix("*/textures")
+ self.path("*/xui/*/*.xml")
+ self.path("*/xui/*/widgets/*.xml")
+ self.path("*/*.xml")
+
+ # Local HTML files (e.g. loading screen)
+ if self.prefix(src="*/html"):
+ self.path("*.png")
+ self.path("*/*/*.html")
+ self.path("*/*/*.gif")
+ self.end_prefix("*/html")
+ self.end_prefix("skins")
+
+ # Files in the newview/ directory
+ self.path("gpu_table.txt")
+
+ def login_channel(self):
+ """Channel reported for login and upgrade purposes ONLY;
+ used for A/B testing"""
+ # NOTE: Do not return the normal channel if login_channel
+ # is not specified, as some code may branch depending on
+ # whether or not this is present
+ return self.args.get('login_channel')
+
+ def grid(self):
+ return self.args['grid']
+ def channel(self):
+ return self.args['channel']
+ def channel_unique(self):
+ return self.channel().replace("Second Life", "").strip()
+ def channel_oneword(self):
+ return "".join(self.channel_unique().split())
+ def channel_lowerword(self):
+ return self.channel_oneword().lower()
+
+ def flags_list(self):
+ """ Convenience function that returns the command-line flags
+ for the grid"""
+
+ # Set command line flags relating to the target grid
+ grid_flags = ''
+ if not self.default_grid():
+ grid_flags = "--grid %(grid)s "\
+ "--helperuri http://preview-%(grid)s.secondlife.com/helpers/" %\
+ {'grid':self.grid()}
+
+ # set command line flags for channel
+ channel_flags = ''
+ if self.login_channel() and self.login_channel() != self.channel():
+ # Report a special channel during login, but use default
+ channel_flags = '--channel "%s"' % (self.login_channel())
+ elif not self.default_channel():
+ channel_flags = '--channel "%s"' % self.channel()
+
+ # Deal with settings
+ setting_flags = ''
+ if not self.default_channel() or not self.default_grid():
+ if self.default_grid():
+ setting_flags = '--settings settings_%s.xml'\
+ % self.channel_lowerword()
+ else:
+ setting_flags = '--settings settings_%s_%s.xml'\
+ % (self.grid(), self.channel_lowerword())
+
+ return " ".join((channel_flags, grid_flags, setting_flags)).strip()
+
+
+class WindowsManifest(ViewerManifest):
+ def final_exe(self):
+ if self.default_channel():
+ if self.default_grid():
+ return "SecondLife.exe"
+ else:
+ return "SecondLifePreview.exe"
+ else:
+ return ''.join(self.channel().split()) + '.exe'
+
+
+ def test_msvcrt_and_copy_action(self, src, dst):
+ # This can is used to test a dll manifest.
+ # It is used as a temporary override during the construct method
+ from test_win32_manifest import test_assembly_binding
+ if src and (os.path.exists(src) or os.path.islink(src)):
+ # ensure that destination path exists
+ self.cmakedirs(os.path.dirname(dst))
+ self.created_paths.append(dst)
+ if not os.path.isdir(src):
+ if(self.args['configuration'].lower() == 'debug'):
+ test_assembly_binding(src, "Microsoft.VC80.DebugCRT", "8.0.50727.4053")
+ else:
+ test_assembly_binding(src, "Microsoft.VC80.CRT", "8.0.50727.4053")
+ self.ccopy(src,dst)
+ else:
+ raise Exception("Directories are not supported by test_CRT_and_copy_action()")
+ else:
+ print "Doesn't exist:", src
+
+ def enable_crt_check(self):
+ WindowsManifest.copy_action = WindowsManifest.test_msvcrt_and_copy_action
+
+ def disable_crt_check(self):
+ del WindowsManifest.copy_action
+
+ def construct(self):
+ super(WindowsManifest, self).construct()
+ # Find secondlife-bin.exe in the 'configuration' dir, then rename it to the result of final_exe.
+ self.path(src='%s/secondlife-bin.exe' % self.args['configuration'], dst=self.final_exe())
+
+ self.enable_crt_check()
+
+ # Plugin host application
+ self.path(os.path.join(os.pardir,
+ 'llplugin', 'slplugin', self.args['configuration'], "slplugin.exe"),
+ "slplugin.exe")
+
+ # need to get the llcommon.dll from the build directory as well
+ if self.prefix(src=self.args['configuration'], dst=""):
+ try:
+ self.path('llcommon.dll')
+ self.path('libapr-1.dll')
+ self.path('libaprutil-1.dll')
+ self.path('libapriconv-1.dll')
+ except RuntimeError:
+ print "Skipping llcommon.dll (assuming llcommon was linked statically)"
+ self.end_prefix()
+
+ # need to get the kdu dll from the build directory as well
+ try:
+ self.path('%s/llkdu.dll' % self.args['configuration'], dst='llkdu.dll')
+ except RuntimeError:
+ print "Skipping llkdu.dll"
+
+ self.disable_crt_check()
+
+ self.path(src="licenses-win32.txt", dst="licenses.txt")
+ self.path("featuretable.txt")
+
+ # For use in crash reporting (generates minidumps)
+ self.path("dbghelp.dll")
+
+ # For using FMOD for sound... DJS
+ self.path("fmod.dll")
+
+ self.enable_crt_check()
+
+ # For textures
+ if self.prefix(src=self.args['configuration'], dst=""):
+ if(self.args['configuration'].lower() == 'debug'):
+ self.path("openjpegd.dll")
+ else:
+ self.path("openjpeg.dll")
+ self.end_prefix()
+
+ # Media plugins - QuickTime
+ if self.prefix(src='../media_plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"):
+ self.path("media_plugin_quicktime.dll")
+ self.end_prefix()
+
+ # Media plugins - WebKit/Qt
+ if self.prefix(src='../media_plugins/webkit/%s' % self.args['configuration'], dst="llplugin"):
+ self.path("media_plugin_webkit.dll")
+ self.end_prefix()
+
+ if self.prefix(src="../../libraries/i686-win32/lib/release", dst="llplugin"):
+ self.path("libeay32.dll")
+ self.path("qtcore4.dll")
+ self.path("qtgui4.dll")
+ self.path("qtnetwork4.dll")
+ self.path("qtopengl4.dll")
+ self.path("qtwebkit4.dll")
+ self.path("ssleay32.dll")
+ self.end_prefix()
+
+ # For WebKit/Qt plugin runtimes (image format plugins)
+ if self.prefix(src="../../libraries/i686-win32/lib/release/imageformats", dst="llplugin/imageformats"):
+ self.path("qgif4.dll")
+ self.path("qico4.dll")
+ self.path("qjpeg4.dll")
+ self.path("qmng4.dll")
+ self.path("qsvg4.dll")
+ self.path("qtiff4.dll")
+ self.end_prefix()
+
+ self.disable_crt_check()
+
+ # These need to be installed as a SxS assembly, currently a 'private' assembly.
+ # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx
+ if self.prefix(src=self.args['configuration'], dst=""):
+ if self.args['configuration'] == 'Debug':
+ self.path("msvcr80d.dll")
+ self.path("msvcp80d.dll")
+ self.path("Microsoft.VC80.DebugCRT.manifest")
+ else:
+ self.path("msvcr80.dll")
+ self.path("msvcp80.dll")
+ self.path("Microsoft.VC80.CRT.manifest")
+ self.end_prefix()
+
+ # The config file name needs to match the exe's name.
+ self.path(src="%s/secondlife-bin.exe.config" % self.args['configuration'], dst=self.final_exe() + ".config")
+
+ # Vivox runtimes
+ if self.prefix(src=self.args['configuration'], dst=""):
+ self.path("SLVoice.exe")
+ self.path("alut.dll")
+ self.path("vivoxsdk.dll")
+ self.path("ortp.dll")
+ self.path("wrap_oal.dll")
+ self.end_prefix()
+
+ # pull in the crash logger and updater from other projects
+ # tag:"crash-logger" here as a cue to the exporter
+ self.path(src='../win_crash_logger/%s/windows-crash-logger.exe' % self.args['configuration'],
+ dst="win_crash_logger.exe")
+ self.path(src='../win_updater/%s/windows-updater.exe' % self.args['configuration'],
+ dst="updater.exe")
+
+ # For google-perftools tcmalloc allocator.
+ try:
+ self.path('%s/libtcmalloc_minimal.dll' % self.args['configuration'])
+ except:
+ print "Skipping libtcmalloc_minimal.dll"
+ pass
+
+ def nsi_file_commands(self, install=True):
+ def wpath(path):
+ if path.endswith('/') or path.endswith(os.path.sep):
+ path = path[:-1]
+ path = path.replace('/', '\\')
+ return path
+
+ result = ""
+ dest_files = [pair[1] for pair in self.file_list if pair[0] and os.path.isfile(pair[1])]
+ # sort deepest hierarchy first
+ dest_files.sort(lambda a,b: cmp(a.count(os.path.sep),b.count(os.path.sep)) or cmp(a,b))
+ dest_files.reverse()
+ out_path = None
+ for pkg_file in dest_files:
+ rel_file = os.path.normpath(pkg_file.replace(self.get_dst_prefix()+os.path.sep,''))
+ installed_dir = wpath(os.path.join('$INSTDIR', os.path.dirname(rel_file)))
+ pkg_file = wpath(os.path.normpath(pkg_file))
+ if installed_dir != out_path:
+ if install:
+ out_path = installed_dir
+ result += 'SetOutPath ' + out_path + '\n'
+ if install:
+ result += 'File ' + pkg_file + '\n'
+ else:
+ result += 'Delete ' + wpath(os.path.join('$INSTDIR', rel_file)) + '\n'
+ # at the end of a delete, just rmdir all the directories
+ if not install:
+ deleted_file_dirs = [os.path.dirname(pair[1].replace(self.get_dst_prefix()+os.path.sep,'')) for pair in self.file_list]
+ # find all ancestors so that we don't skip any dirs that happened to have no non-dir children
+ deleted_dirs = []
+ for d in deleted_file_dirs:
+ deleted_dirs.extend(path_ancestors(d))
+ # sort deepest hierarchy first
+ deleted_dirs.sort(lambda a,b: cmp(a.count(os.path.sep),b.count(os.path.sep)) or cmp(a,b))
+ deleted_dirs.reverse()
+ prev = None
+ for d in deleted_dirs:
+ if d != prev: # skip duplicates
+ result += 'RMDir ' + wpath(os.path.join('$INSTDIR', os.path.normpath(d))) + '\n'
+ prev = d
+
+ return result
+
+ def package_finish(self):
+ # a standard map of strings for replacing in the templates
+ substitution_strings = {
+ 'version' : '.'.join(self.args['version']),
+ 'version_short' : '.'.join(self.args['version'][:-1]),
+ 'version_dashes' : '-'.join(self.args['version']),
+ 'final_exe' : self.final_exe(),
+ 'grid':self.args['grid'],
+ 'grid_caps':self.args['grid'].upper(),
+ # escape quotes becase NSIS doesn't handle them well
+ 'flags':self.flags_list().replace('"', '$\\"'),
+ 'channel':self.channel(),
+ 'channel_oneword':self.channel_oneword(),
+ 'channel_unique':self.channel_unique(),
+ }
+
+ version_vars = """
+ !define INSTEXE "%(final_exe)s"
+ !define VERSION "%(version_short)s"
+ !define VERSION_LONG "%(version)s"
+ !define VERSION_DASHES "%(version_dashes)s"
+ """ % substitution_strings
+ if self.default_channel():
+ if self.default_grid():
+ # release viewer
+ installer_file = "Second_Life_%(version_dashes)s_Setup.exe"
+ grid_vars_template = """
+ OutFile "%(installer_file)s"
+ !define INSTFLAGS "%(flags)s"
+ !define INSTNAME "SecondLife"
+ !define SHORTCUT "Second Life"
+ !define URLNAME "secondlife"
+ Caption "Second Life ${VERSION}"
+ """
+ else:
+ # beta grid viewer
+ installer_file = "Second_Life_%(version_dashes)s_(%(grid_caps)s)_Setup.exe"
+ grid_vars_template = """
+ OutFile "%(installer_file)s"
+ !define INSTFLAGS "%(flags)s"
+ !define INSTNAME "SecondLife%(grid_caps)s"
+ !define SHORTCUT "Second Life (%(grid_caps)s)"
+ !define URLNAME "secondlife%(grid)s"
+ !define UNINSTALL_SETTINGS 1
+ Caption "Second Life %(grid)s ${VERSION}"
+ """
+ else:
+ # some other channel on some grid
+ installer_file = "Second_Life_%(version_dashes)s_%(channel_oneword)s_Setup.exe"
+ grid_vars_template = """
+ OutFile "%(installer_file)s"
+ !define INSTFLAGS "%(flags)s"
+ !define INSTNAME "SecondLife%(channel_oneword)s"
+ !define SHORTCUT "%(channel)s"
+ !define URLNAME "secondlife"
+ !define UNINSTALL_SETTINGS 1
+ Caption "%(channel)s ${VERSION}"
+ """
+ if 'installer_name' in self.args:
+ installer_file = self.args['installer_name']
+ else:
+ installer_file = installer_file % substitution_strings
+ substitution_strings['installer_file'] = installer_file
+
+ tempfile = "secondlife_setup_tmp.nsi"
+ # the following replaces strings in the nsi template
+ # it also does python-style % substitution
+ self.replace_in("installers/windows/installer_template.nsi", tempfile, {
+ "%%VERSION%%":version_vars,
+ "%%SOURCE%%":self.get_src_prefix(),
+ "%%GRID_VARS%%":grid_vars_template % substitution_strings,
+ "%%INSTALL_FILES%%":self.nsi_file_commands(True),
+ "%%DELETE_FILES%%":self.nsi_file_commands(False)})
+
+ # We use the Unicode version of NSIS, available from
+ # http://www.scratchpaper.com/
+ # Check two paths, one for Program Files, and one for Program Files (x86).
+ # Yay 64bit windows.
+ NSIS_path = os.path.expandvars('${ProgramFiles}\\NSIS\\Unicode\\makensis.exe')
+ if not os.path.exists(NSIS_path):
+ NSIS_path = os.path.expandvars('${ProgramFiles(x86)}\\NSIS\\Unicode\\makensis.exe')
+ self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile))
+ # self.remove(self.dst_path_of(tempfile))
+ # If we're on a build machine, sign the code using our Authenticode certificate. JC
+ sign_py = os.path.expandvars("${SIGN}")
+ if not sign_py or sign_py == "${SIGN}":
+ sign_py = 'C:\\buildscripts\\code-signing\\sign.py'
+ else:
+ sign_py = sign_py.replace('\\', '\\\\\\\\')
+ python = os.path.expandvars("${PYTHON}")
+ if not python or python == "${PYTHON}":
+ python = 'python'
+ if os.path.exists(sign_py):
+ self.run_command("%s %s %s" % (python, sign_py, self.dst_path_of(installer_file).replace('\\', '\\\\\\\\')))
+ else:
+ print "Skipping code signing,", sign_py, "does not exist"
+ self.created_path(self.dst_path_of(installer_file))
+ self.package_file = installer_file
+
+
+class DarwinManifest(ViewerManifest):
+ def construct(self):
+ # copy over the build result (this is a no-op if run within the xcode script)
+ self.path(self.args['configuration'] + "/Second Life.app", dst="")
+
+ if self.prefix(src="", dst="Contents"): # everything goes in Contents
+ self.path("Info-SecondLife.plist", dst="Info.plist")
+
+ # copy additional libs in <bundle>/Contents/MacOS/
+ self.path("../../libraries/universal-darwin/lib_release/libndofdev.dylib", dst="MacOS/libndofdev.dylib")
+ self.path(os.path.join(os.pardir, "llplugin", "slplugin", self.args['configuration'],
+ "SLPlugin"),
+ os.path.join("MacOS", "SLPlugin"))
+
+ # most everything goes in the Resources directory
+ if self.prefix(src="", dst="Resources"):
+ super(DarwinManifest, self).construct()
+
+ if self.prefix("cursors_mac"):
+ self.path("*.tif")
+ self.end_prefix("cursors_mac")
+
+ self.path("licenses-mac.txt", dst="licenses.txt")
+ self.path("featuretable_mac.txt")
+ self.path("SecondLife.nib")
+
+ # If we are not using the default channel, use the 'Firstlook
+ # icon' to show that it isn't a stable release.
+ if self.default_channel() and self.default_grid():
+ self.path("secondlife.icns")
+ else:
+ self.path("secondlife_firstlook.icns", "secondlife.icns")
+ self.path("SecondLife.nib")
+
+ # Translations
+ self.path("English.lproj")
+ self.path("German.lproj")
+ self.path("Japanese.lproj")
+ self.path("Korean.lproj")
+ self.path("da.lproj")
+ self.path("es.lproj")
+ self.path("fr.lproj")
+ self.path("hu.lproj")
+ self.path("it.lproj")
+ self.path("nl.lproj")
+ self.path("pl.lproj")
+ self.path("pt.lproj")
+ self.path("ru.lproj")
+ self.path("tr.lproj")
+ self.path("uk.lproj")
+ self.path("zh-Hans.lproj")
+
+ # SLVoice and vivox lols
+ self.path("vivox-runtime/universal-darwin/libalut.dylib", "libalut.dylib")
+ self.path("vivox-runtime/universal-darwin/libopenal.dylib", "libopenal.dylib")
+ self.path("vivox-runtime/universal-darwin/libortp.dylib", "libortp.dylib")
+ self.path("vivox-runtime/universal-darwin/libvivoxsdk.dylib", "libvivoxsdk.dylib")
+ self.path("vivox-runtime/universal-darwin/SLVoice", "SLVoice")
+
+ libdir = "../../libraries/universal-darwin/lib_release"
+ dylibs = {}
+
+ # need to get the kdu dll from any of the build directories as well
+ for lib in "llkdu", "llcommon":
+ libfile = "lib%s.dylib" % lib
+ try:
+ self.path(self.find_existing_file(os.path.join(os.pardir,
+ lib,
+ self.args['configuration'],
+ libfile),
+ os.path.join(libdir, libfile)),
+ dst=libfile)
+ except RuntimeError:
+ print "Skipping %s" % libfile
+ dylibs[lib] = False
+ else:
+ dylibs[lib] = True
+
+ if dylibs["llcommon"]:
+ for libfile in ("libapr-1.0.3.7.dylib",
+ "libaprutil-1.0.3.8.dylib",
+ "libexpat.0.5.0.dylib"):
+ self.path(os.path.join(libdir, libfile), libfile)
+
+ #libfmodwrapper.dylib
+ self.path(self.args['configuration'] + "/libfmodwrapper.dylib", "libfmodwrapper.dylib")
+
+ # our apps
+ self.path("../mac_crash_logger/" + self.args['configuration'] + "/mac-crash-logger.app", "mac-crash-logger.app")
+ self.path("../mac_updater/" + self.args['configuration'] + "/mac-updater.app", "mac-updater.app")
+
+ # plugins
+ if self.prefix(src="", dst="llplugin"):
+ self.path("../media_plugins/quicktime/" + self.args['configuration'] + "/media_plugin_quicktime.dylib", "media_plugin_quicktime.dylib")
+ self.path("../media_plugins/webkit/" + self.args['configuration'] + "/media_plugin_webkit.dylib", "media_plugin_webkit.dylib")
+ self.path("../../libraries/universal-darwin/lib_release/libllqtwebkit.dylib", "libllqtwebkit.dylib")
+
+ self.end_prefix("llplugin")
+
+ # command line arguments for connecting to the proper grid
+ self.put_in_file(self.flags_list(), 'arguments.txt')
+
+ self.end_prefix("Resources")
+
+ self.end_prefix("Contents")
+
+ # NOTE: the -S argument to strip causes it to keep enough info for
+ # annotated backtraces (i.e. function names in the crash log). 'strip' with no
+ # arguments yields a slightly smaller binary but makes crash logs mostly useless.
+ # This may be desirable for the final release. Or not.
+ if ("package" in self.args['actions'] or
+ "unpacked" in self.args['actions']):
+ self.run_command('strip -S "%(viewer_binary)s"' %
+ { 'viewer_binary' : self.dst_path_of('Contents/MacOS/Second Life')})
+
+
+ def package_finish(self):
+ channel_standin = 'Second Life' # hah, our default channel is not usable on its own
+ if not self.default_channel():
+ channel_standin = self.channel()
+
+ imagename="SecondLife_" + '_'.join(self.args['version'])
+
+ # MBW -- If the mounted volume name changes, it breaks the .DS_Store's background image and icon positioning.
+ # If we really need differently named volumes, we'll need to create multiple DS_Store file images, or use some other trick.
+
+ volname="Second Life Installer" # DO NOT CHANGE without understanding comment above
+
+ if self.default_channel():
+ if not self.default_grid():
+ # beta case
+ imagename = imagename + '_' + self.args['grid'].upper()
+ else:
+ # first look, etc
+ imagename = imagename + '_' + self.channel_oneword().upper()
+
+ sparsename = imagename + ".sparseimage"
+ finalname = imagename + ".dmg"
+ # make sure we don't have stale files laying about
+ self.remove(sparsename, finalname)
+
+ self.run_command('hdiutil create "%(sparse)s" -volname "%(vol)s" -fs HFS+ -type SPARSE -megabytes 400 -layout SPUD' % {
+ 'sparse':sparsename,
+ 'vol':volname})
+
+ # mount the image and get the name of the mount point and device node
+ hdi_output = self.run_command('hdiutil attach -private "' + sparsename + '"')
+ devfile = re.search("/dev/disk([0-9]+)[^s]", hdi_output).group(0).strip()
+ volpath = re.search('HFS\s+(.+)', hdi_output).group(1).strip()
+
+ # Copy everything in to the mounted .dmg
+
+ if self.default_channel() and not self.default_grid():
+ app_name = "Second Life " + self.args['grid']
+ else:
+ app_name = channel_standin.strip()
+
+ # Hack:
+ # Because there is no easy way to coerce the Finder into positioning
+ # the app bundle in the same place with different app names, we are
+ # adding multiple .DS_Store files to svn. There is one for release,
+ # one for release candidate and one for first look. Any other channels
+ # will use the release .DS_Store, and will look broken.
+ # - Ambroff 2008-08-20
+ dmg_template = os.path.join(
+ 'installers',
+ 'darwin',
+ '%s-dmg' % "".join(self.channel_unique().split()).lower())
+
+ if not os.path.exists (self.src_path_of(dmg_template)):
+ dmg_template = os.path.join ('installers', 'darwin', 'release-dmg')
+
+ for s,d in {self.get_dst_prefix():app_name + ".app",
+ os.path.join(dmg_template, "_VolumeIcon.icns"): ".VolumeIcon.icns",
+ os.path.join(dmg_template, "background.jpg"): "background.jpg",
+ os.path.join(dmg_template, "_DS_Store"): ".DS_Store"}.items():
+ print "Copying to dmg", s, d
+ self.copy_action(self.src_path_of(s), os.path.join(volpath, d))
+
+ # Hide the background image, DS_Store file, and volume icon file (set their "visible" bit)
+ self.run_command('SetFile -a V "' + os.path.join(volpath, ".VolumeIcon.icns") + '"')
+ self.run_command('SetFile -a V "' + os.path.join(volpath, "background.jpg") + '"')
+ self.run_command('SetFile -a V "' + os.path.join(volpath, ".DS_Store") + '"')
+
+ # Create the alias file (which is a resource file) from the .r
+ self.run_command('rez "' + self.src_path_of("installers/darwin/release-dmg/Applications-alias.r") + '" -o "' + os.path.join(volpath, "Applications") + '"')
+
+ # Set the alias file's alias and custom icon bits
+ self.run_command('SetFile -a AC "' + os.path.join(volpath, "Applications") + '"')
+
+ # Set the disk image root's custom icon bit
+ self.run_command('SetFile -a C "' + volpath + '"')
+
+ # Unmount the image
+ self.run_command('hdiutil detach -force "' + devfile + '"')
+
+ print "Converting temp disk image to final disk image"
+ self.run_command('hdiutil convert "%(sparse)s" -format UDZO -imagekey zlib-level=9 -o "%(final)s"' % {'sparse':sparsename, 'final':finalname})
+ # get rid of the temp file
+ self.package_file = finalname
+ self.remove(sparsename)
+
+class LinuxManifest(ViewerManifest):
+ def construct(self):
+ super(LinuxManifest, self).construct()
+ self.path("licenses-linux.txt","licenses.txt")
+ self.path("res/ll_icon.png","secondlife_icon.png")
+ if self.prefix("linux_tools", dst=""):
+ self.path("client-readme.txt","README-linux.txt")
+ self.path("client-readme-voice.txt","README-linux-voice.txt")
+ self.path("client-readme-joystick.txt","README-linux-joystick.txt")
+ self.path("wrapper.sh","secondlife")
+ self.path("handle_secondlifeprotocol.sh", "etc/handle_secondlifeprotocol.sh")
+ self.path("register_secondlifeprotocol.sh", "etc/register_secondlifeprotocol.sh")
+ self.path("refresh_desktop_app_entry.sh", "etc/refresh_desktop_app_entry.sh")
+ self.path("launch_url.sh","etc/launch_url.sh")
+ self.path("install.sh")
+ self.end_prefix("linux_tools")
+
+ # Create an appropriate gridargs.dat for this package, denoting required grid.
+ self.put_in_file(self.flags_list(), 'etc/gridargs.dat')
+
+
+ def package_finish(self):
+ if 'installer_name' in self.args:
+ installer_name = self.args['installer_name']
+ else:
+ installer_name_components = ['SecondLife_', self.args.get('arch')]
+ installer_name_components.extend(self.args['version'])
+ installer_name = "_".join(installer_name_components)
+ if self.default_channel():
+ if not self.default_grid():
+ installer_name += '_' + self.args['grid'].upper()
+ else:
+ installer_name += '_' + self.channel_oneword().upper()
+
+ # Fix access permissions
+ self.run_command("""
+ find %(dst)s -type d | xargs --no-run-if-empty chmod 755;
+ find %(dst)s -type f -perm 0700 | xargs --no-run-if-empty chmod 0755;
+ find %(dst)s -type f -perm 0500 | xargs --no-run-if-empty chmod 0555;
+ find %(dst)s -type f -perm 0600 | xargs --no-run-if-empty chmod 0644;
+ find %(dst)s -type f -perm 0400 | xargs --no-run-if-empty chmod 0444;
+ true""" % {'dst':self.get_dst_prefix() })
+ self.package_file = installer_name + '.tar.bz2'
+
+ # temporarily move directory tree so that it has the right
+ # name in the tarfile
+ self.run_command("mv %(dst)s %(inst)s" % {
+ 'dst': self.get_dst_prefix(),
+ 'inst': self.build_path_of(installer_name)})
+ try:
+ # --numeric-owner hides the username of the builder for
+ # security etc.
+ self.run_command('tar -C %(dir)s --numeric-owner -cjf '
+ '%(inst_path)s.tar.bz2 %(inst_name)s' % {
+ 'dir': self.get_build_prefix(),
+ 'inst_name': installer_name,
+ 'inst_path':self.build_path_of(installer_name)})
+ finally:
+ self.run_command("mv %(inst)s %(dst)s" % {
+ 'dst': self.get_dst_prefix(),
+ 'inst': self.build_path_of(installer_name)})
+
+class Linux_i686Manifest(LinuxManifest):
+ def construct(self):
+ super(Linux_i686Manifest, self).construct()
+
+ # install either the libllkdu we just built, or a prebuilt one, in
+ # decreasing order of preference. for linux package, this goes to bin/
+ for lib, destdir in ("llkdu", "bin"), ("llcommon", "lib"):
+ libfile = "lib%s.so" % lib
+ try:
+ self.path(self.find_existing_file(os.path.join(os.pardir, lib, libfile),
+ '../../libraries/i686-linux/lib_release_client/%s' % libfile),
+ dst=os.path.join(destdir, libfile))
+ # keep this one to preserve syntax, open source mangling removes previous lines
+ pass
+ except RuntimeError:
+ print "Skipping %s - not found" % libfile
+ pass
+
+ self.path("secondlife-stripped","bin/do-not-directly-run-secondlife-bin")
+ self.path("../linux_crash_logger/linux-crash-logger-stripped","bin/linux-crash-logger.bin")
+ self.path("../linux_updater/linux-updater-stripped", "bin/linux-updater.bin")
+ self.path("../llplugin/slplugin/SLPlugin", "bin/SLPlugin")
+ if self.prefix("res-sdl"):
+ self.path("*")
+ # recurse
+ self.end_prefix("res-sdl")
+
+ # plugins
+ if self.prefix(src="", dst="bin/llplugin"):
+ self.path("../media_plugins/webkit/libmedia_plugin_webkit.so", "libmedia_plugin_webkit.so")
+ self.path("../media_plugins/gstreamer010/libmedia_plugin_gstreamer010.so", "libmedia_plugin_quicktime.so")
+ self.end_prefix("bin/llplugin")
+
+ self.path("featuretable_linux.txt")
+ #self.path("secondlife-i686.supp")
+
+ if self.prefix("../../libraries/i686-linux/lib_release_client", dst="lib"):
+ #self.path("libkdu_v42R.so", "libkdu.so")
+ self.path("libfmod-3.75.so")
+ self.path("libapr-1.so.0")
+ self.path("libaprutil-1.so.0")
+ self.path("libdb-4.2.so")
+ self.path("libcrypto.so.0.9.7")
+ self.path("libexpat.so.1")
+ self.path("libssl.so.0.9.7")
+ self.path("libuuid.so", "libuuid.so.1")
+ self.path("libSDL-1.2.so.0")
+ self.path("libELFIO.so")
+ self.path("libopenjpeg.so.1.3.0", "libopenjpeg.so.1.3")
+ self.path("libalut.so")
+ self.path("libopenal.so", "libopenal.so.1")
+ self.end_prefix("lib")
+
+ # Vivox runtimes
+ if self.prefix(src="vivox-runtime/i686-linux", dst="bin"):
+ self.path("SLVoice")
+ self.end_prefix()
+ if self.prefix(src="vivox-runtime/i686-linux", dst="lib"):
+ self.path("libortp.so")
+ self.path("libvivoxsdk.so")
+ self.end_prefix("lib")
+
+class Linux_x86_64Manifest(LinuxManifest):
+ def construct(self):
+ super(Linux_x86_64Manifest, self).construct()
+ self.path("secondlife-stripped","bin/do-not-directly-run-secondlife-bin")
+ self.path("../linux_crash_logger/linux-crash-logger-stripped","linux-crash-logger.bin")
+ if self.prefix("res-sdl"):
+ self.path("*")
+ # recurse
+ self.end_prefix("res-sdl")
+
+ self.path("featuretable_linux.txt")
+ self.path("secondlife-i686.supp")
+
+if __name__ == "__main__":
+ main()