diff options
Diffstat (limited to 'indra/newview')
687 files changed, 10947 insertions, 15456 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 5ed4ad2259..1194e558f1 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -13,6 +13,7 @@ include(ELFIO) include(FMOD) include(OPENAL) include(FindOpenGL) +include(JsonCpp) include(LLAudio) include(LLCharacter) include(LLCommon) @@ -46,6 +47,7 @@ include(CMakeCopyIfDifferent) include_directories( ${DBUSGLIB_INCLUDE_DIRS} ${ELFIO_INCLUDE_DIR} + ${JSONCPP_INCLUDE_DIRS} ${GLOD_INCLUDE_DIR} ${LLAUDIO_INCLUDE_DIRS} ${LLCHARACTER_INCLUDE_DIRS} @@ -88,6 +90,7 @@ set(viewer_SOURCE_FILES llappviewerlistener.cpp llassetuploadqueue.cpp llassetuploadresponders.cpp + llattachmentsmgr.cpp llaudiosourcevo.cpp llavataractions.cpp llavatariconctrl.cpp @@ -97,6 +100,7 @@ set(viewer_SOURCE_FILES llbottomtray.cpp llbox.cpp llbreadcrumbview.cpp + llbrowsernotification.cpp llbuycurrencyhtml.cpp llcallbacklist.cpp llcallfloater.cpp @@ -212,6 +216,7 @@ set(viewer_SOURCE_FILES llfloatersearch.cpp llfloatersellland.cpp llfloatersettingsdebug.cpp + llfloatersidetraytab.cpp llfloatersnapshot.cpp llfloatertelehub.cpp llfloatertestinspectors.cpp @@ -221,7 +226,6 @@ set(viewer_SOURCE_FILES llfloatertos.cpp llfloateruipreview.cpp llfloaterurlentry.cpp - llfloatervoicedevicesettings.cpp llfloatervoiceeffect.cpp llfloaterwater.cpp llfloaterwhitelistentry.cpp @@ -239,6 +243,7 @@ set(viewer_SOURCE_FILES llgroupiconctrl.cpp llgrouplist.cpp llgroupmgr.cpp + llhints.cpp llhomelocationresponder.cpp llhudeffect.cpp llhudeffectbeam.cpp @@ -311,6 +316,7 @@ set(viewer_SOURCE_FILES llnotificationalerthandler.cpp llnotificationgrouphandler.cpp llnotificationhandlerutil.cpp + llnotificationhinthandler.cpp llnotificationmanager.cpp llnotificationofferhandler.cpp llnotificationscripthandler.cpp @@ -319,6 +325,7 @@ set(viewer_SOURCE_FILES lloutfitslist.cpp lloutfitobserver.cpp lloutputmonitorctrl.cpp + llpanelappearancetab.cpp llpanelavatar.cpp llpanelavatartag.cpp llpanelblockedlist.cpp @@ -369,6 +376,7 @@ set(viewer_SOURCE_FILES llpaneltiptoast.cpp llpanelvoiceeffect.cpp llpaneltopinfobar.cpp + llpanelvoicedevicesettings.cpp llpanelvolume.cpp llpanelvolumepulldown.cpp llpanelwearing.cpp @@ -467,6 +475,7 @@ set(viewer_SOURCE_FILES lltracker.cpp lltransientdockablefloater.cpp lltransientfloatermgr.cpp + lltranslate.cpp lluilistener.cpp lluploaddialog.cpp llurl.cpp @@ -615,6 +624,7 @@ set(viewer_HEADER_FILES llappviewerlistener.h llassetuploadqueue.h llassetuploadresponders.h + llattachmentsmgr.h llaudiosourcevo.h llavataractions.h llavatariconctrl.h @@ -741,6 +751,7 @@ set(viewer_HEADER_FILES llfloatersearch.h llfloatersellland.h llfloatersettingsdebug.h + llfloatersidetraytab.h llfloatersnapshot.h llfloatertelehub.h llfloatertestinspectors.h @@ -750,7 +761,6 @@ set(viewer_HEADER_FILES llfloatertos.h llfloateruipreview.h llfloaterurlentry.h - llfloatervoicedevicesettings.h llfloatervoiceeffect.h llfloaterwater.h llfloaterwhitelistentry.h @@ -768,6 +778,7 @@ set(viewer_HEADER_FILES llgroupiconctrl.h llgrouplist.h llgroupmgr.h + llhints.h llhomelocationresponder.h llhudeffect.h llhudeffectbeam.h @@ -892,6 +903,7 @@ set(viewer_HEADER_FILES llpanelprofileview.h llpanelteleporthistory.h llpaneltiptoast.h + llpanelvoicedevicesettings.h llpanelvoiceeffect.h llpaneltopinfobar.h llpanelvolume.h @@ -995,6 +1007,7 @@ set(viewer_HEADER_FILES lltracker.h lltransientdockablefloater.h lltransientfloatermgr.h + lltranslate.h lluiconstants.h lluilistener.h lluploaddialog.h @@ -1317,6 +1330,7 @@ set(viewer_APPSETTINGS_FILES app_settings/cmd_line.xml app_settings/grass.xml app_settings/high_graphics.xml + app_settings/ignorable_dialogs.xml app_settings/keys.ini app_settings/keywords.ini app_settings/logcontrol.xml @@ -1494,6 +1508,7 @@ if (WINDOWS) ${GOOGLE_PERF_TOOLS_SOURCE} ${CMAKE_CURRENT_SOURCE_DIR}/licenses-win32.txt ${CMAKE_CURRENT_SOURCE_DIR}/featuretable.txt + ${CMAKE_CURRENT_SOURCE_DIR}/featuretable_xp.txt ${CMAKE_CURRENT_SOURCE_DIR}/dbghelp.dll ${CMAKE_CURRENT_SOURCE_DIR}/fmod.dll ${ARCH_PREBUILT_DIRS_RELEASE}/libeay32.dll @@ -1668,6 +1683,7 @@ target_link_libraries(${VIEWER_BINARY_NAME} ${FMODWRAPPER_LIBRARY} # must come after LLAudio ${GLOD_LIBRARIES} ${OPENGL_LIBRARIES} + ${JSONCPP_LIBRARIES} ${SDL_LIBRARY} ${SMARTHEAP_LIBRARY} ${UI_LIBRARIES} @@ -1678,6 +1694,7 @@ target_link_libraries(${VIEWER_BINARY_NAME} ${CRYPTO_LIBRARIES} ${LLLOGIN_LIBRARIES} ${LLCONVEXDECOMP_LIBRARY} + ${TCMALLOC_LIBRARIES} ) build_version(viewer) diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml index 5f143431de..00d69f805e 100644 --- a/indra/newview/app_settings/cmd_line.xml +++ b/indra/newview/app_settings/cmd_line.xml @@ -296,7 +296,7 @@ <key>multiple</key> <map> <key>desc</key> - <string>Allow multple viewers.</string> + <string>Allow multiple viewers.</string> <key>map-to</key> <string>AllowMultipleViewers</string> </map> diff --git a/indra/newview/app_settings/ignorable_dialogs.xml b/indra/newview/app_settings/ignorable_dialogs.xml index d0e1f62a84..0720ccee49 100644 --- a/indra/newview/app_settings/ignorable_dialogs.xml +++ b/indra/newview/app_settings/ignorable_dialogs.xml @@ -1,10 +1,10 @@ <?xml version="1.0" ?> <llsd> <map> - <key>FirstAppearance</key> + <key>FirstInventoryOffer</key> <map> <key>Comment</key> - <string>Enables FirstAppearance warning dialog</string> + <string>Shows hint when a person or object offers resident an inventory item</string> <key>Persist</key> <integer>1</integer> <key>Type</key> @@ -12,120 +12,54 @@ <key>Value</key> <integer>1</integer> </map> - <key>FirstAttach</key> - <map> - <key>Comment</key> - <string>Enables FirstAttach warning dialog</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> - <key>FirstBalanceDecrease</key> - <map> - <key>Comment</key> - <string>Enables FirstBalanceDecrease warning dialog</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> - <key>FirstBalanceIncrease</key> - <map> - <key>Comment</key> - <string>Enables FirstBalanceIncrease warning dialog</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> - <key>FirstBuild</key> - <map> - <key>Comment</key> - <string>Enables FirstBuild warning dialog</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> - <key>FirstDebugMenus</key> - <map> - <key>Comment</key> - <string>Enables FirstDebugMenus warning dialog</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> - <key>FirstFlexible</key> - <map> - <key>Comment</key> - <string>Enables FirstFlexible warning dialog</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> - <key>FirstGoTo</key> - <map> - <key>Comment</key> - <string>Enables FirstGoTo warning dialog</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> - <key>FirstInventory</key> - <map> - <key>Comment</key> - <string>Enables FirstInventory warning dialog</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> - <key>FirstLeftClickNoHit</key> - <map> - <key>Comment</key> - <string>Enables FirstLeftClickNoHit warning dialog</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> - <key>FirstMap</key> - <map> - <key>Comment</key> - <string>Enables FirstMap warning dialog</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> - <key>FirstMedia</key> + <key>FirstNotUseDestinationGuide</key> + <map> + <key>Comment</key> + <string>Shows hint when resident doesn't activate destination guide</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstNotUseSidePanel</key> + <map> + <key>Comment</key> + <string>Shows hint when resident doesn't activate side panel</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstNotMoving</key> + <map> + <key>Comment</key> + <string>Shows hint when resident doesn't move</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstReceiveLindens</key> + <map> + <key>Comment</key> + <string>Shows hint when resident receives linden dollars</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>FirstOtherChatBeforeUser</key> <map> <key>Comment</key> - <string>Enables FirstMedia warning dialog</string> + <string>Shows hint when someone else chats first</string> <key>Persist</key> <integer>1</integer> <key>Type</key> @@ -155,43 +89,11 @@ <key>Value</key> <integer>1</integer> </map> - <key>FirstSculptedPrim</key> - <map> - <key>Comment</key> - <string>Enables FirstSculptedPrim warning dialog</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> + <key>FirstSit</key> <map> <key>Comment</key> - <string>Enables FirstSit warning dialog</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> - <key>FirstTeleport</key> - <map> - <key>Comment</key> - <string>Enables FirstTeleport warning dialog</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> - <key>FirstVoice</key> - <map> - <key>Comment</key> - <string>Enables FirstVoice warning dialog</string> + <string>Shows hint when someone sits for the first time</string> <key>Persist</key> <integer>1</integer> <key>Type</key> diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 96d2fd05e5..24d37c2442 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1147,6 +1147,17 @@ <key>Value</key> <string /> </map> + <key>CacheNumberOfRegionsForObjects</key> + <map> + <key>Comment</key> + <string>Controls number of regions to be cached for objects, ranges from 16 to 128.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <integer>128</integer> + </map> <key>CacheSize</key> <map> <key>Comment</key> @@ -2688,6 +2699,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>DoubleClickTeleport</key> + <map> + <key>Comment</key> + <string>Enable double-click to teleport where allowed</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>DragAndDropToolTipDelay</key> <map> <key>Comment</key> @@ -2798,6 +2820,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>EffectScriptChatParticles</key> + <map> + <key>Comment</key> + <string>1 = normal behavior, 0 = disable display of swirling lights when scripts communicate</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>EnableRippleWater</key> <map> <key>Comment</key> @@ -2820,6 +2853,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>EnableUIHints</key> + <map> + <key>Comment</key> + <string>Toggles UI hint popups</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>EnableVoiceChat</key> <map> <key>Comment</key> @@ -3804,7 +3848,7 @@ <key>Comment</key> <string>URL for the web page to display in the Home side panel</string> <key>Persist</key> - <integer>0</integer> + <integer>1</integer> <key>Type</key> <string>String</string> <key>Value</key> @@ -4680,6 +4724,17 @@ <key>Value</key> <integer>1</integer> </map> + <key>MiniMapAutoCenter</key> + <map> + <key>Comment</key> + <string>Center the focal point of the minimap.</string> + <key>Persist</key> + <integer>0</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>Marker</key> <map> <key>Comment</key> @@ -5186,6 +5241,17 @@ <key>Value</key> <real>3.0</real> </map> + <key>MediaEnablePopups</key> + <map> + <key>Comment</key> + <string>If true, enable targeted links and javascript in media to open new media browser windows without a prompt.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>MediaOnAPrimUI</key> <map> <key>Comment</key> @@ -6518,6 +6584,17 @@ <key>Value</key> <real>1.0</real> </map> + <key>MediaBrowserWindowLimit</key> + <map> + <key>Comment</key> + <string>Maximum number of media brower windows that can be open at once (0 for no limit)</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>5</integer> + </map> <key>MediaRollOffRate</key> <map> <key>Comment</key> @@ -8008,6 +8085,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>RenderHighlightSelections</key> + <map> + <key>Comment</key> + <string>Show selection outlines on objects</string> + <key>Persist</key> + <integer>0</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>RenderHiddenSelections</key> <map> <key>Comment</key> @@ -8017,7 +8105,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <integer>1</integer> + <integer>0</integer> </map> <key>RenderHideGroupTitle</key> <map> @@ -8493,6 +8581,17 @@ <key>Value</key> <real>1.0</real> </map> + <key>MeshStreamingCostScaler</key> + <map> + <key>Comment</key> + <string>DEBUG</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.25f</real> + </map> <key>MeshThreadCount</key> <map> <key>Comment</key> @@ -9041,7 +9140,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <integer>1</integer> + <integer>0</integer> </map> <key>GroupListShowIcons</key> <map> @@ -9065,6 +9164,17 @@ <key>Value</key> <integer>1</integer> </map> + <key>FriendsListShowPermissions</key> + <map> + <key>Comment</key> + <string>Show/hide permission icons in the friend list</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>NearbyListShowIcons</key> <map> <key>Comment</key> @@ -10022,6 +10132,28 @@ <key>Value</key> <integer>1</integer> </map> + <key>TranslateLanguage</key> + <map> + <key>Comment</key> + <string>Translate Language specifier</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>String</string> + <key>Value</key> + <string>default</string> + </map> + <key>TranslateChat</key> + <map> + <key>Comment</key> + <string>Translate incoming chat messages</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>TutorialURL</key> <map> <key>Comment</key> @@ -12133,5 +12265,38 @@ <key>Value</key> <integer>10</integer> </map> + <key>NotMovingHintTimeout</key> + <map> + <key>Comment</key> + <string>Number of seconds to wait for resident to move before displaying move hint.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>120.0</real> + </map> + <key>DestinationGuideHintTimeout</key> + <map> + <key>Comment</key> + <string>Number of seconds to wait before telling resident about destination guide.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>600.0</real> + </map> + <key>SidePanelHintTimeout</key> + <map> + <key>Comment</key> + <string>Number of seconds to wait before telling resident about side panel.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>300.0</real> + </map> </map> </llsd> diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index 5705aa8b05..f3d6e73043 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -1,4 +1,4 @@ -version 22 +version 23 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences // Should be combined into one table @@ -82,7 +82,7 @@ RenderTerrainDetail 1 0 RenderTerrainLODFactor 1 1 RenderTreeLODFactor 1 0 RenderUseImpostors 1 1 -RenderVolumeLODFactor 1 0 +RenderVolumeLODFactor 1 0.5 VertexShaderEnable 1 0 WindLightUseAtmosShaders 1 0 WLSkyDetail 1 48 @@ -554,4 +554,3 @@ list NVIDIA_GeForce_Go_7800 RenderShaderLightingMaxLevel 1 2 list NVIDIA_GeForce_Go_7900 RenderShaderLightingMaxLevel 1 2 - diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index fda897756e..2b68e62924 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -1,4 +1,4 @@ -version 21 +version 22 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences // Should be combined into one table @@ -80,7 +80,7 @@ RenderTerrainDetail 1 0 RenderTerrainLODFactor 1 1 RenderTreeLODFactor 1 0 RenderUseImpostors 1 1 -RenderVolumeLODFactor 1 0 +RenderVolumeLODFactor 1 0.5 VertexShaderEnable 1 0 WindLightUseAtmosShaders 1 0 WLSkyDetail 1 48 diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index 2095f3a81d..4fba47e3df 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -1,4 +1,4 @@ -version 21 +version 22 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences // Should be combined into one table @@ -81,7 +81,7 @@ RenderTerrainDetail 1 0 RenderTerrainLODFactor 1 1 RenderTreeLODFactor 1 0 RenderUseImpostors 1 1 -RenderVolumeLODFactor 1 0 +RenderVolumeLODFactor 1 0.5 RenderWaterReflections 1 0 VertexShaderEnable 1 0 WindLightUseAtmosShaders 1 0 diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt new file mode 100644 index 0000000000..9b901022c4 --- /dev/null +++ b/indra/newview/featuretable_xp.txt @@ -0,0 +1,554 @@ +version 23 + +// NOTE: This is mostly identical to featuretable_mac.txt with a few differences +// Should be combined into one table + +// +// Generates lists of feature mask that can be applied on top of each other. +// +// // Begin comments +// list <name> +// Starts a feature list named <name> +// <name> <available> <recommended> +// <name> is the name of a feature +// <available> is 0 or 1, whether the feature is available +// <recommended> is an F32 which is the recommended value +// +// For now, the first list read sets up all of the default values +// + + +// +// All contains everything at their default settings for high end machines +// NOTE: All settings are set to the MIN of applied values, including 'all'! +// +list all +RenderAnisotropic 1 1 +RenderAvatarCloth 1 1 +RenderAvatarLODFactor 1 1.0 +RenderAvatarMaxVisible 1 12 +RenderAvatarVP 1 1 +RenderCubeMap 1 1 +RenderDelayVBUpdate 1 0 +RenderFarClip 1 256 +RenderFlexTimeFactor 1 1.0 +RenderFogRatio 1 4.0 +RenderGamma 1 0 +RenderGlowResolutionPow 1 9 +RenderGround 1 1 +RenderMaxPartCount 1 8192 +RenderNightBrightness 1 1.0 +RenderObjectBump 1 1 +RenderReflectionDetail 1 4 +RenderTerrainDetail 1 1 +RenderTerrainLODFactor 1 2.0 +RenderTreeLODFactor 1 1.0 +RenderUseImpostors 1 1 +RenderVBOEnable 1 1 +RenderVolumeLODFactor 1 2.0 +UseStartScreen 1 1 +UseOcclusion 1 1 +VertexShaderEnable 1 1 +WindLightUseAtmosShaders 1 1 +WLSkyDetail 1 128 +Disregard128DefaultDrawDistance 1 1 +Disregard96DefaultDrawDistance 1 1 +RenderTextureMemoryMultiple 1 1.0 +RenderShaderLightingMaxLevel 1 3 +SkyUseClassicClouds 1 1 +RenderDeferred 1 0 +RenderDeferredSSAO 1 0 +RenderShadowDetail 1 0 +WatchdogDisabled 1 1 +RenderUseStreamVBO 1 1 + +// +// Low Graphics Settings +// +list Low +RenderAnisotropic 1 0 +RenderAvatarCloth 1 0 +RenderAvatarLODFactor 1 0 +RenderAvatarMaxVisible 1 3 +RenderAvatarVP 1 0 +RenderFarClip 1 64 +RenderFlexTimeFactor 1 0 +RenderGlowResolutionPow 1 8 +RenderMaxPartCount 1 0 +RenderObjectBump 1 0 +RenderReflectionDetail 1 0 +RenderTerrainDetail 1 0 +RenderTerrainLODFactor 1 1 +RenderTreeLODFactor 1 0 +RenderUseImpostors 1 1 +RenderVolumeLODFactor 1 0.5 +VertexShaderEnable 1 0 +WindLightUseAtmosShaders 1 0 +WLSkyDetail 1 48 +SkyUseClassicClouds 1 0 +RenderDeferred 1 0 +RenderDeferredSSAO 1 0 +RenderShadowDetail 1 0 + + +// +// Mid Graphics Settings +// +list Mid +RenderAnisotropic 1 0 +RenderAvatarCloth 1 0 +RenderAvatarLODFactor 1 0.5 +RenderAvatarVP 1 1 +RenderFarClip 1 96 +RenderFlexTimeFactor 1 1.0 +RenderGlowResolutionPow 1 8 +RenderMaxPartCount 1 2048 +RenderObjectBump 1 1 +RenderReflectionDetail 1 0 +RenderTerrainDetail 1 1 +RenderTerrainLODFactor 1 1.0 +RenderTreeLODFactor 1 0.5 +RenderUseImpostors 1 1 +RenderVolumeLODFactor 1 1.125 +VertexShaderEnable 1 1 +WindLightUseAtmosShaders 1 0 +WLSkyDetail 1 48 +RenderDeferred 1 0 +RenderDeferredSSAO 1 0 +RenderShadowDetail 1 0 + + +// +// High Graphics Settings (purty) +// +list High +RenderAnisotropic 1 1 +RenderAvatarCloth 1 0 +RenderAvatarLODFactor 1 1.0 +RenderAvatarVP 1 1 +RenderFarClip 1 128 +RenderFlexTimeFactor 1 1.0 +RenderGlowResolutionPow 1 9 +RenderMaxPartCount 1 4096 +RenderObjectBump 1 1 +RenderReflectionDetail 1 2 +RenderTerrainDetail 1 1 +RenderTerrainLODFactor 1 2.0 +RenderTreeLODFactor 1 0.5 +RenderUseImpostors 1 1 +RenderVolumeLODFactor 1 1.125 +VertexShaderEnable 1 1 +WindLightUseAtmosShaders 1 1 +WLSkyDetail 1 48 +RenderDeferred 1 0 +RenderDeferredSSAO 1 0 +RenderShadowDetail 1 0 + + +// +// Ultra graphics (REALLY PURTY!) +// +list Ultra +RenderAnisotropic 1 1 +RenderAvatarCloth 1 1 +RenderAvatarLODFactor 1 1.0 +RenderAvatarVP 1 1 +RenderFarClip 1 256 +RenderFlexTimeFactor 1 1.0 +RenderGlowResolutionPow 1 9 +RenderMaxPartCount 1 8192 +RenderObjectBump 1 1 +RenderReflectionDetail 1 4 +RenderTerrainDetail 1 1 +RenderTerrainLODFactor 1 2.0 +RenderTreeLODFactor 1 1.0 +RenderUseImpostors 1 1 +RenderVolumeLODFactor 1 2.0 +VertexShaderEnable 1 1 +WindLightUseAtmosShaders 1 1 +WLSkyDetail 1 128 +RenderDeferred 1 0 +RenderDeferredSSAO 1 0 +RenderShadowDetail 1 0 + +// +// Class Unknown Hardware (unknown) +// +list Unknown +RenderVBOEnable 1 0 + +// +// Class 0 Hardware (just old) +// +list Class0 +RenderVBOEnable 1 1 + +// +// Class 1 Hardware +// +list Class1 +RenderVBOEnable 1 1 + +// +// Class 2 Hardware (make it purty) +// +list Class2 +RenderVBOEnable 1 1 + +// +// Class 3 Hardware (make it purty) +// +list Class3 +RenderVBOEnable 1 1 + +// +// No Pixel Shaders available +// +list NoPixelShaders +RenderAvatarVP 0 0 +RenderAvatarCloth 0 0 +RenderReflectionDetail 0 0 +VertexShaderEnable 0 0 +WindLightUseAtmosShaders 0 0 +RenderDeferred 0 0 +RenderDeferredSSAO 0 0 +RenderShadowDetail 0 0 + +// +// No Vertex Shaders available +// +list NoVertexShaders +RenderAvatarVP 0 0 +RenderAvatarCloth 0 0 +RenderReflectionDetail 0 0 +VertexShaderEnable 0 0 +WindLightUseAtmosShaders 0 0 +RenderDeferred 0 0 +RenderDeferredSSAO 0 0 +RenderShadowDetail 0 0 + +// +// "Default" setups for safe, low, medium, high +// +list safe +RenderAnisotropic 1 0 +RenderAvatarCloth 0 0 +RenderAvatarVP 0 0 +RenderObjectBump 0 0 +RenderMaxPartCount 1 1024 +RenderTerrainDetail 1 0 +RenderUseImpostors 0 0 +RenderVBOEnable 1 0 +RenderReflectionDetail 0 0 +WindLightUseAtmosShaders 0 0 +RenderDeferred 0 0 +RenderDeferredSSAO 0 0 +RenderShadowDetail 0 0 + +// +// CPU based feature masks +// + +// 1Ghz or less (equiv) +list CPUSlow +RenderMaxPartCount 1 1024 + +// +// RAM based feature masks +// +list RAM256MB +RenderObjectBump 0 0 + +// +// Graphics card based feature masks +// +list OpenGLPre15 +RenderVBOEnable 1 0 + +list Intel +RenderAnisotropic 1 0 + +list GeForce2 +RenderAnisotropic 1 0 +RenderMaxPartCount 1 2048 +RenderTerrainDetail 1 0 +RenderVBOEnable 1 1 + +list SiS +UseOcclusion 0 0 + + +list Intel_830M +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 +RenderUseImpostors 0 0 + +list Intel_845G +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 +RenderUseImpostors 0 0 + +list Intel_855GM +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 +RenderUseImpostors 0 0 + +list Intel_865G +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 +RenderUseImpostors 0 0 + +list Intel_900 +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 +RenderUseImpostors 0 0 + +list Intel_915GM +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 +RenderUseImpostors 0 0 + +list Intel_915G +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 +RenderUseImpostors 0 0 + +list Intel_945GM +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 + +list Intel_945G +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 + +list Intel_950 +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 + +list Intel_965 +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 +RenderUseImpostors 1 0 +UseOcclusion 0 0 + +list Intel_G33 +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 + +list Intel_G45 +WindLightUseAtmosShaders 0 0 + +list Intel_Bear_Lake +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 + +list Intel_Broadwater +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 + +list Intel_Brookdale +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 + +list Intel_Eaglelake +WindLightUseAtmosShaders 0 0 + +list Intel_Montara +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 + +list Intel_Springdale +RenderTerrainDetail 1 0 +RenderVBOEnable 1 0 + + +list ATI_FireGL_5200 +RenderVBOEnable 1 0 +WindLightUseAtmosShaders 0 0 + + +list ATI_Mobility_Radeon_7xxx +RenderVBOEnable 0 0 + +list ATI_Radeon_7xxx +RenderVBOEnable 0 0 + +list ATI_All-in-Wonder_Radeon +RenderVBOEnable 0 0 + +list ATI_All-in-Wonder_7500 +RenderVBOEnable 0 0 + +list ATI_Mobility_Radeon_9600 +Disregard96DefaultDrawDistance 1 0 + + +/// tweaked ATI to 96 Draw distance + +list ATI_Radeon_9000 +Disregard96DefaultDrawDistance 1 0 +list ATI_Radeon_9200 +Disregard96DefaultDrawDistance 1 0 +list ATI_Radeon_9500 +Disregard96DefaultDrawDistance 1 0 +list ATI_Radeon_9600 +Disregard96DefaultDrawDistance 1 0 + +/// tweaked ATI to 128 draw distance + +list ATI_Radeon_X300 +Disregard128DefaultDrawDistance 1 0 +RenderVBOEnable 1 0 +list ATI_Radeon_X400 +Disregard128DefaultDrawDistance 1 0 +RenderVBOEnable 1 0 +list ATI_Radeon_X500 +Disregard128DefaultDrawDistance 1 0 +RenderVBOEnable 1 0 +list ATI_Radeon_X600 +Disregard128DefaultDrawDistance 1 0 +RenderVBOEnable 1 0 +list ATI_Radeon_X700 +Disregard128DefaultDrawDistance 1 0 +RenderVBOEnable 1 0 +list ATI_Radeon_X1300 +Disregard128DefaultDrawDistance 1 0 +RenderVBOEnable 1 0 +UseStartScreen 0 0 +list ATI_Radeon_X1400 +Disregard128DefaultDrawDistance 1 0 +RenderVBOEnable 1 0 +list ATI_Radeon_X1500 +Disregard128DefaultDrawDistance 1 0 +RenderVBOEnable 1 0 +UseStartScreen 0 0 +list ATI_Radeon_X1600 +Disregard128DefaultDrawDistance 1 0 +RenderVBOEnable 1 0 +list ATI_Radeon_X1700 +Disregard128DefaultDrawDistance 1 0 +RenderVBOEnable 1 0 +list ATI_Mobility_Radeon_X1xxx +Disregard128DefaultDrawDistance 1 0 +RenderVBOEnable 1 0 + +list ATI_Radeon_HD_2300 +Disregard128DefaultDrawDistance 1 0 +list ATI_Radeon_HD_2400 +Disregard128DefaultDrawDistance 1 0 +list ATI_ASUS_AH24xx +Disregard128DefaultDrawDistance 1 0 + + +// Avatar hardware skinning causes invisible avatars +// on various ATI chipsets on drivers before 8.2 + +list ATIOldDriver +RenderAvatarVP 0 0 +RenderAvatarCloth 0 0 + +// ATI cards generally perform better when not using VBOs for streaming data + +list ATI +RenderUseStreamVBO 1 0 + +/// Tweaked NVIDIA + +list NVIDIA_GeForce_FX_5100 +Disregard96DefaultDrawDistance 1 0 +list NVIDIA_GeForce_FX_5200 +Disregard96DefaultDrawDistance 1 0 +list NVIDIA_GeForce_FX_5500 +Disregard96DefaultDrawDistance 1 0 +list NVIDIA_GeForce_FX_5600 +Disregard96DefaultDrawDistance 1 0 + +list NVIDIA_GeForce_FX_Go5100 +Disregard96DefaultDrawDistance 1 0 +list NVIDIA_GeForce_FX_Go5200 +Disregard96DefaultDrawDistance 1 0 +list NVIDIA_GeForce_FX_Go5300 +Disregard96DefaultDrawDistance 1 0 +list NVIDIA_GeForce_FX_Go5500 +Disregard96DefaultDrawDistance 1 0 +list NVIDIA_GeForce_FX_Go5600 +Disregard96DefaultDrawDistance 1 0 + +list NVIDIA_GeForce_6100 +Disregard128DefaultDrawDistance 1 0 +list NVIDIA_GeForce_6200 +Disregard128DefaultDrawDistance 1 0 +list NVIDIA_GeForce_6500 +Disregard128DefaultDrawDistance 1 0 +list NVIDIA_GeForce_6600 +Disregard128DefaultDrawDistance 1 0 + +list NVIDIA_G73 +Disregard128DefaultDrawDistance 1 0 + +list NVIDIA_GeForce_Go_6100 +RenderVBOEnable 1 0 +Disregard128DefaultDrawDistance 1 0 +list NVIDIA_GeForce_Go_6200 +RenderVBOEnable 1 0 +Disregard128DefaultDrawDistance 1 0 +list NVIDIA_GeForce_Go_6500 +RenderVBOEnable 1 0 +Disregard128DefaultDrawDistance 1 0 +list NVIDIA_GeForce_Go_6600 +RenderVBOEnable 1 0 +Disregard128DefaultDrawDistance 1 0 +list NVIDIA_GeForce_Go_6700 +RenderVBOEnable 1 0 +Disregard128DefaultDrawDistance 1 0 +list NVIDIA_GeForce_Go_6800 +RenderVBOEnable 1 0 +Disregard128DefaultDrawDistance 1 0 +list NVIDIA_GeForce_Go_6 +RenderVBOEnable 1 0 +Disregard128DefaultDrawDistance 1 0 + +list NVIDIA_GeForce_7000 +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_7100 +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_7200 +Disregard128DefaultDrawDistance 1 0 +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_7300 +Disregard128DefaultDrawDistance 1 0 +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_7400 +Disregard128DefaultDrawDistance 1 0 +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_7500 +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_7600 +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_7700 +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_7800 +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_7900 +RenderShaderLightingMaxLevel 1 2 + +list NVIDIA_GeForce_Go_7200 +Disregard128DefaultDrawDistance 1 0 +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_Go_7300 +Disregard128DefaultDrawDistance 1 0 +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_Go_7300_LE +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_Go_7400 +Disregard128DefaultDrawDistance 1 0 +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_Go_7600 +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_Go_7700 +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_Go_7800 +RenderShaderLightingMaxLevel 1 2 +list NVIDIA_GeForce_Go_7900 +RenderShaderLightingMaxLevel 1 2 + diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 49ae58d53a..d1cd335783 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -45,7 +45,7 @@ RequestExecutionLevel admin ; on Vista we must be admin because we write to Prog # *TODO: Move these into the language files themselves LangString LanguageCode ${LANG_DANISH} "da" LangString LanguageCode ${LANG_GERMAN} "de" -Langstring LanguageCode ${LANG_ENGLISH} "en" +LangString LanguageCode ${LANG_ENGLISH} "en" LangString LanguageCode ${LANG_SPANISH} "es" LangString LanguageCode ${LANG_FRENCH} "fr" LangString LanguageCode ${LANG_JAPANESE} "ja" diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 1f90e1e009..a44b970f36 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -44,6 +44,7 @@ #include "llcallingcard.h" #include "llchannelmanager.h" #include "llconsole.h" +#include "llfirstuse.h" #include "llfloatercamera.h" #include "llfloaterreg.h" #include "llfloatertools.h" @@ -173,6 +174,7 @@ LLAgent::LLAgent() : mbAlwaysRun(false), mbRunning(false), + mbTeleportKeepsLookAt(false), mAgentAccess(gSavedSettings), mTeleportState( TELEPORT_NONE ), @@ -199,8 +201,6 @@ LLAgent::LLAgent() : mbFlagsDirty(FALSE), mbFlagsNeedReset(FALSE), - mbJump(FALSE), - mAutoPilot(FALSE), mAutoPilotFlyOnStop(FALSE), mAutoPilotTargetGlobal(), @@ -232,8 +232,9 @@ LLAgent::LLAgent() : mControlsTakenPassedOnCount[i] = 0; } - mListener.reset(new LLAgentListener(*this)); + + mMoveTimer.stop(); } // Requires gSavedSettings to be initialized. @@ -242,6 +243,8 @@ LLAgent::LLAgent() : //----------------------------------------------------------------------------- void LLAgent::init() { + mMoveTimer.start(); + gSavedSettings.declareBOOL("SlowMotionAnimation", FALSE, "Declared in code", FALSE); gSavedSettings.getControl("SlowMotionAnimation")->getSignal()->connect(boost::bind(&handleSlowMotionAnimation, _2)); @@ -306,6 +309,9 @@ void LLAgent::ageChat() //----------------------------------------------------------------------------- void LLAgent::moveAt(S32 direction, bool reset) { + mMoveTimer.reset(); + LLFirstUse::notMoving(false); + // age chat timer so it fades more quickly when you are intentionally moving ageChat(); @@ -331,6 +337,9 @@ void LLAgent::moveAt(S32 direction, bool reset) //----------------------------------------------------------------------------- void LLAgent::moveAtNudge(S32 direction) { + mMoveTimer.reset(); + LLFirstUse::notMoving(false); + // age chat timer so it fades more quickly when you are intentionally moving ageChat(); @@ -353,6 +362,9 @@ void LLAgent::moveAtNudge(S32 direction) //----------------------------------------------------------------------------- void LLAgent::moveLeft(S32 direction) { + mMoveTimer.reset(); + LLFirstUse::notMoving(false); + // age chat timer so it fades more quickly when you are intentionally moving ageChat(); @@ -375,6 +387,9 @@ void LLAgent::moveLeft(S32 direction) //----------------------------------------------------------------------------- void LLAgent::moveLeftNudge(S32 direction) { + mMoveTimer.reset(); + LLFirstUse::notMoving(false); + // age chat timer so it fades more quickly when you are intentionally moving ageChat(); @@ -397,6 +412,9 @@ void LLAgent::moveLeftNudge(S32 direction) //----------------------------------------------------------------------------- void LLAgent::moveUp(S32 direction) { + mMoveTimer.reset(); + LLFirstUse::notMoving(false); + // age chat timer so it fades more quickly when you are intentionally moving ageChat(); @@ -542,6 +560,9 @@ void LLAgent::toggleFlying() { BOOL fly = !gAgent.getFlying(); + gAgent.mMoveTimer.reset(); + LLFirstUse::notMoving(false); + gAgent.setFlying( fly ); gAgentCamera.resetView(); } @@ -1539,6 +1560,11 @@ void LLAgent::propagate(const F32 dt) //----------------------------------------------------------------------------- void LLAgent::updateAgentPosition(const F32 dt, const F32 yaw_radians, const S32 mouse_x, const S32 mouse_y) { + if (mMoveTimer.getStarted() && mMoveTimer.getElapsedTimeF32() > gSavedSettings.getF32("NotMovingHintTimeout")) + { + LLFirstUse::notMoving(); + } + propagate(dt); // static S32 cameraUpdateCount = 0; @@ -2967,12 +2993,6 @@ void LLAgent::processScriptControlChange(LLMessageSystem *msg, void **) total_count++; } } - - // Any control taken? If so, might be first time. - //if (total_count > 0) - //{ - //LLFirstUse::useOverrideKeys(); - //} } else { @@ -3255,7 +3275,11 @@ bool LLAgent::teleportCore(bool is_local) // local logic LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TELEPORT_COUNT); - if (!is_local) + if (is_local) + { + gAgent.setTeleportState( LLAgent::TELEPORT_LOCAL ); + } + else { gTeleportDisplay = TRUE; gAgent.setTeleportState( LLAgent::TELEPORT_START ); @@ -3274,13 +3298,15 @@ bool LLAgent::teleportCore(bool is_local) void LLAgent::teleportRequest( const U64& region_handle, - const LLVector3& pos_local) + const LLVector3& pos_local, + bool look_at_from_camera) { LLViewerRegion* regionp = getRegion(); - if(regionp && teleportCore()) + bool is_local = (region_handle == to_region_handle(getPositionGlobal())); + if(regionp && teleportCore(is_local)) { - llinfos << "TeleportRequest: '" << region_handle << "':" << pos_local - << llendl; + LL_INFOS("") << "TeleportLocationRequest: '" << region_handle << "':" + << pos_local << LL_ENDL; LLMessageSystem* msg = gMessageSystem; msg->newMessage("TeleportLocationRequest"); msg->nextBlockFast(_PREHASH_AgentData); @@ -3290,6 +3316,10 @@ void LLAgent::teleportRequest( msg->addU64("RegionHandle", region_handle); msg->addVector3("Position", pos_local); LLVector3 look_at(0,1,0); + if (look_at_from_camera) + { + look_at = LLViewerCamera::getInstance()->getAtAxis(); + } msg->addVector3("LookAt", look_at); sendReliableMessage(); } @@ -3401,6 +3431,16 @@ void LLAgent::teleportViaLocation(const LLVector3d& pos_global) } } +// Teleport to global position, but keep facing in the same direction +void LLAgent::teleportViaLocationLookAt(const LLVector3d& pos_global) +{ + mbTeleportKeepsLookAt = true; + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); // detach camera form avatar, so it keeps direction + U64 region_handle = to_region_handle(pos_global); + LLVector3 pos_local = (LLVector3)(pos_global - from_region_handle(region_handle)); + teleportRequest(region_handle, pos_local, getTeleportKeepsLookAt()); +} + void LLAgent::setTeleportState(ETeleportState state) { mTeleportState = state; @@ -3408,18 +3448,28 @@ void LLAgent::setTeleportState(ETeleportState state) { LLFloaterReg::hideInstance("snapshot"); } - if (mTeleportState == TELEPORT_MOVING) + + switch (mTeleportState) { + case TELEPORT_NONE: + mbTeleportKeepsLookAt = false; + break; + + case TELEPORT_MOVING: // We're outa here. Save "back" slurl. LLAgentUI::buildSLURL(mTeleportSourceSLURL); - } - else if(mTeleportState == TELEPORT_ARRIVING) - { + break; + + case TELEPORT_ARRIVING: // First two position updates after a teleport tend to be weird LLViewerStats::getInstance()->mAgentPositionSnaps.mCountOfNextUpdatesToIgnore = 2; // Let the interested parties know we've teleported. LLViewerParcelMgr::getInstance()->onTeleportFinished(false, getPositionGlobal()); + break; + + default: + break; } } diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 3ac7699301..2857a2cc47 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -270,6 +270,7 @@ public: private: LLFrameTimer mFidgetTimer; LLFrameTimer mFocusObjectFadeTimer; + LLFrameTimer mMoveTimer; F32 mNextFidgetTime; S32 mCurrentFidget; @@ -345,6 +346,7 @@ public: private: bool mbAlwaysRun; // Should the avatar run by default rather than walk? bool mbRunning; // Is the avatar trying to run right now? + bool mbTeleportKeepsLookAt; // Try to keep look-at after teleport is complete //-------------------------------------------------------------------- // Sit and stand @@ -365,14 +367,6 @@ private: BOOL mIsBusy; //-------------------------------------------------------------------- - // Jump - //-------------------------------------------------------------------- -public: - BOOL getJump() const { return mbJump; } -private: - BOOL mbJump; - - //-------------------------------------------------------------------- // Grab //-------------------------------------------------------------------- public: @@ -512,7 +506,8 @@ public: TELEPORT_REQUESTED = 2, // Waiting for source simulator to respond TELEPORT_MOVING = 3, // Viewer has received destination location from source simulator TELEPORT_START_ARRIVAL = 4, // Transition to ARRIVING. Viewer has received avatar update, etc., from destination simulator - TELEPORT_ARRIVING = 5 // Make the user wait while content "pre-caches" + TELEPORT_ARRIVING = 5, // Make the user wait while content "pre-caches" + TELEPORT_LOCAL = 6 // Teleporting in-sim without showing the progress screen }; public: @@ -530,12 +525,15 @@ private: //-------------------------------------------------------------------- public: void teleportRequest(const U64& region_handle, - const LLVector3& pos_local); // Go to a named location home + const LLVector3& pos_local, // Go to a named location home + bool look_at_from_camera = false); void teleportViaLandmark(const LLUUID& landmark_id); // Teleport to a landmark void teleportHome() { teleportViaLandmark(LLUUID::null); } // Go home void teleportViaLure(const LLUUID& lure_id, BOOL godlike); // To an invited location void teleportViaLocation(const LLVector3d& pos_global); // To a global location - this will probably need to be deprecated + void teleportViaLocationLookAt(const LLVector3d& pos_global);// To a global location, preserving camera rotation void teleportCancel(); // May or may not be allowed by server + bool getTeleportKeepsLookAt() { return mbTeleportKeepsLookAt; } // Whether look-at reset after teleport protected: bool teleportCore(bool is_local = false); // Stuff for all teleports; returns true if the teleport can proceed diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 5db16d9250..d1880992e5 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1625,11 +1625,14 @@ void LLAgentWearables::queryWearableCache() gAgentQueryManager.mActiveCacheQueries[baked_index] = gAgentQueryManager.mWearablesCacheQueryID; } - - llinfos << "Requesting texture cache entry for " << num_queries << " baked textures" << llendl; - gMessageSystem->sendReliable(gAgent.getRegion()->getHost()); - gAgentQueryManager.mNumPendingQueries++; - gAgentQueryManager.mWearablesCacheQueryID++; + //VWR-22113: gAgent.getRegion() can return null if invalid, seen here on logout + if(gAgent.getRegion()) + { + llinfos << "Requesting texture cache entry for " << num_queries << " baked textures" << llendl; + gMessageSystem->sendReliable(gAgent.getRegion()->getHost()); + gAgentQueryManager.mNumPendingQueries++; + gAgentQueryManager.mWearablesCacheQueryID++; + } } LLUUID LLAgentWearables::computeBakedTextureHash(LLVOAvatarDefines::EBakedTextureIndex baked_index, @@ -1885,7 +1888,7 @@ void LLAgentWearables::userAttachMultipleAttachments(LLInventoryModel::item_arra msg->nextBlockFast(_PREHASH_ObjectData ); msg->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID()); msg->addUUIDFast(_PREHASH_OwnerID, item->getPermissions().getOwner()); - msg->addU8Fast(_PREHASH_AttachmentPt, 0 ); // Wear at the previous or default attachment point + msg->addU8Fast(_PREHASH_AttachmentPt, 0 | ATTACHMENT_ADD); // Wear at the previous or default attachment point pack_permissions_slam(msg, item->getFlags(), item->getPermissions()); msg->addStringFast(_PREHASH_Name, item->getName()); msg->addStringFast(_PREHASH_Description, item->getDescription()); diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 87de7e76bd..a043c0c67a 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -37,6 +37,7 @@ #include "llagentcamera.h" #include "llagentwearables.h" #include "llappearancemgr.h" +#include "llattachmentsmgr.h" #include "llcommandhandler.h" #include "lleventtimer.h" #include "llgesturemgr.h" @@ -2650,6 +2651,8 @@ LLAppearanceMgr::LLAppearanceMgr(): mUnlockOutfitTimer.reset(new LLOutfitUnLockTimer(gSavedSettings.getS32( "OutfitOperationsTimeout"))); + + gIdleCallbacks.addFunction(&LLAttachmentsMgr::onIdle,NULL); } LLAppearanceMgr::~LLAppearanceMgr() diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index c07d891800..deb22f7b20 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -271,6 +271,7 @@ const F64 FRAME_STALL_THRESHOLD = 1.0; LLTimer gRenderStartTime; LLFrameTimer gForegroundTime; +LLFrameTimer gLoggedInTime; LLTimer gLogoutTimer; static const F32 LOGOUT_REQUEST_TIME = 6.f; // this will be cut short by the LogoutReply msg. F32 gLogoutMaxTime = LOGOUT_REQUEST_TIME; @@ -306,7 +307,7 @@ BOOL gLogoutInProgress = FALSE; //////////////////////////////////////////////////////////// // Internal globals... that should be removed. -static std::string gArgs; +static std::string gArgs = "Mesh Beta"; const std::string MARKER_FILE_NAME("SecondLife.exec_marker"); const std::string ERROR_MARKER_FILE_NAME("SecondLife.error_marker"); @@ -369,19 +370,19 @@ bool create_text_segment_icon_from_url_match(LLUrlMatch* match,LLTextBase* base) if(gAgent.isInGroup(match_id, TRUE)) { - LLGroupIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLGroupIconCtrl>(); + LLGroupIconCtrl::Params icon_params; icon_params.group_id = match_id; icon_params.rect = LLRect(0, 16, 16, 0); icon_params.visible = true; - icon = LLUICtrlFactory::instance().createWidget<LLGroupIconCtrl>(icon_params); + icon = LLUICtrlFactory::instance().create<LLGroupIconCtrl>(icon_params); } else { - LLAvatarIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLAvatarIconCtrl>(); + LLAvatarIconCtrl::Params icon_params; icon_params.avatar_id = match_id; icon_params.rect = LLRect(0, 16, 16, 0); icon_params.visible = true; - icon = LLUICtrlFactory::instance().createWidget<LLAvatarIconCtrl>(icon_params); + icon = LLUICtrlFactory::instance().create<LLAvatarIconCtrl>(icon_params); } LLInlineViewSegment::Params params; @@ -600,6 +601,7 @@ LLAppViewer::LLAppViewer() : setupErrorHandling(); sInstance = this; + gLoggedInTime.stop(); } LLAppViewer::~LLAppViewer() @@ -940,8 +942,9 @@ bool LLAppViewer::init() //EXT-7013 - On windows for some locale (Japanese) standard //datetime formatting functions didn't support some parameters such as "weekday". + //Names for days and months localized in xml are also useful for Polish locale(STORM-107). std::string language = LLControlGroup::getInstance(sGlobalSettingsName)->getString("Language"); - if(language == "ja") + if(language == "ja" || language == "pl") { LLStringOps::setupWeekDaysNames(LLTrans::getString("dateTimeWeekdaysNames")); LLStringOps::setupWeekDaysShortNames(LLTrans::getString("dateTimeWeekdaysShortNames")); @@ -3049,14 +3052,6 @@ void LLAppViewer::migrateCacheDirectory() #endif // LL_WINDOWS || LL_DARWIN } -//static -S32 LLAppViewer::getCacheVersion() -{ - static const S32 cache_version = 7; - - return cache_version ; -} - void dumpVFSCaches() { llinfos << "======= Static VFS ========" << llendl; @@ -3095,23 +3090,40 @@ void dumpVFSCaches() SetCurrentDirectory(w_str); #endif } + +//static +U32 LLAppViewer::getTextureCacheVersion() +{ + //viewer texture cache version, change if the texture cache format changes. + const U32 TEXTURE_CACHE_VERSION = 7; + + return TEXTURE_CACHE_VERSION ; +} + +//static +U32 LLAppViewer::getObjectCacheVersion() +{ + // Viewer object cache version, change if object update + // format changes. JC + const U32 INDRA_OBJECT_CACHE_VERSION = 14; + + return INDRA_OBJECT_CACHE_VERSION; +} + bool LLAppViewer::initCache() { mPurgeCache = false; - BOOL disable_texture_cache = FALSE ; BOOL read_only = mSecondInstance ? TRUE : FALSE; LLAppViewer::getTextureCache()->setReadOnly(read_only) ; + LLVOCache::getInstance()->setReadOnly(read_only); - if (gSavedSettings.getS32("LocalCacheVersion") != LLAppViewer::getCacheVersion()) + BOOL texture_cache_mismatch = FALSE ; + if (gSavedSettings.getS32("LocalCacheVersion") != LLAppViewer::getTextureCacheVersion()) { - if(read_only) + texture_cache_mismatch = TRUE ; + if(!read_only) { - disable_texture_cache = TRUE ; //if the cache version of this viewer is different from the running one, this viewer can not use the texture cache. - } - else - { - mPurgeCache = true; // Purge cache if the version number is different. - gSavedSettings.setS32("LocalCacheVersion", LLAppViewer::getCacheVersion()); + gSavedSettings.setS32("LocalCacheVersion", LLAppViewer::getTextureCacheVersion()); } } @@ -3162,9 +3174,11 @@ bool LLAppViewer::initCache() const S64 MAX_CACHE_SIZE = 1024*MB; cache_size = llmin(cache_size, MAX_CACHE_SIZE); S64 texture_cache_size = ((cache_size * 8)/10); - S64 extra = LLAppViewer::getTextureCache()->initCache(LL_PATH_CACHE, texture_cache_size, disable_texture_cache); + S64 extra = LLAppViewer::getTextureCache()->initCache(LL_PATH_CACHE, texture_cache_size, texture_cache_mismatch); texture_cache_size -= extra; + LLVOCache::getInstance()->initCache(LL_PATH_CACHE, gSavedSettings.getU32("CacheNumberOfRegionsForObjects"), getObjectCacheVersion()) ; + LLSplashScreen::update(LLTrans::getString("StartupInitializingVFS")); // Init the VFS @@ -3327,6 +3341,7 @@ void LLAppViewer::purgeCache() { LL_INFOS("AppCache") << "Purging Cache and Texture Cache..." << llendl; LLAppViewer::getTextureCache()->purgeCache(LL_PATH_CACHE); + LLVOCache::getInstance()->removeCache(LL_PATH_CACHE); std::string mask = gDirUtilp->getDirDelimiter() + "*.*"; gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,""),mask); } @@ -4313,6 +4328,7 @@ void LLAppViewer::pingMainloopTimeout(const std::string& state, F32 secs) void LLAppViewer::handleLoginComplete() { + gLoggedInTime.start(); initMainloopTimeout("Mainloop Init"); // Store some data to DebugInfo in case of a freeze. diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 0b862a92a1..f62bff3623 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -100,7 +100,8 @@ public: static LLImageDecodeThread* getImageDecodeThread() { return sImageDecodeThread; } static LLTextureFetch* getTextureFetch() { return sTextureFetch; } - static S32 getCacheVersion() ; + static U32 getTextureCacheVersion() ; + static U32 getObjectCacheVersion() ; const std::string& getSerialNumber() { return mSerialNumber; } @@ -313,6 +314,7 @@ extern U32 gFrameStalls; extern LLTimer gRenderStartTime; extern LLFrameTimer gForegroundTime; +extern LLFrameTimer gLoggedInTime; extern F32 gLogoutMaxTime; extern LLTimer gLogoutTimer; diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index d44fb84f14..3bd9903879 100644 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -42,7 +42,6 @@ #include "llinventorydefines.h" #include "llinventoryobserver.h" #include "llinventorypanel.h" -#include "llfloaterimportcollada.h" #include "llpermissionsflags.h" #include "llpreviewnotecard.h" #include "llpreviewscript.h" @@ -325,7 +324,7 @@ LLNewAgentInventoryResponder::LLNewAgentInventoryResponder( void LLNewAgentInventoryResponder::error(U32 statusNum, const std::string& reason) { LLAssetUploadResponder::error(statusNum, reason); - LLImportColladaAssetCache::getInstance()->assetUploaded(mVFileID, LLUUID(), FALSE); + //LLImportColladaAssetCache::getInstance()->assetUploaded(mVFileID, LLUUID(), FALSE); } @@ -334,7 +333,7 @@ void LLNewAgentInventoryResponder::uploadFailure(const LLSD& content) { LLAssetUploadResponder::uploadFailure(content); - LLImportColladaAssetCache::getInstance()->assetUploaded(mVFileID, content["new_asset"], FALSE); + //LLImportColladaAssetCache::getInstance()->assetUploaded(mVFileID, content["new_asset"], FALSE); } //virtual @@ -424,7 +423,7 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content) userdata); } - LLImportColladaAssetCache::getInstance()->assetUploaded(mVFileID, content["new_asset"], TRUE); + //LLImportColladaAssetCache::getInstance()->assetUploaded(mVFileID, content["new_asset"], TRUE); } LLSendTexLayerResponder::LLSendTexLayerResponder(const LLSD& post_data, diff --git a/indra/newview/llattachmentsmgr.cpp b/indra/newview/llattachmentsmgr.cpp new file mode 100644 index 0000000000..c9543988a6 --- /dev/null +++ b/indra/newview/llattachmentsmgr.cpp @@ -0,0 +1,131 @@ +/** + * @file llattachmentsmgr.cpp + * @brief Manager for initiating attachments changes on the viewer + * + * $LicenseInfo:firstyear=2004&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llattachmentsmgr.h" + +#include "llagent.h" +#include "llinventorymodel.h" +#include "lltooldraganddrop.h" // pack_permissions_slam +#include "llviewerinventory.h" +#include "llviewerregion.h" +#include "message.h" + + +LLAttachmentsMgr::LLAttachmentsMgr() +{ +} + +LLAttachmentsMgr::~LLAttachmentsMgr() +{ +} + +void LLAttachmentsMgr::addAttachment(const LLUUID& item_id, + const U8 attachment_pt, + const BOOL add) +{ + AttachmentsInfo attachment; + attachment.mItemID = item_id; + attachment.mAttachmentPt = attachment_pt; + attachment.mAdd = add; + mPendingAttachments.push_back(attachment); +} + +// static +void LLAttachmentsMgr::onIdle(void *) +{ + LLAttachmentsMgr::instance().onIdle(); +} + +void LLAttachmentsMgr::onIdle() +{ + S32 obj_count = mPendingAttachments.size(); + if (obj_count == 0) + { + return; + } + + // Limit number of packets to send + const S32 MAX_PACKETS_TO_SEND = 10; + const S32 OBJECTS_PER_PACKET = 4; + const S32 MAX_OBJECTS_TO_SEND = MAX_PACKETS_TO_SEND * OBJECTS_PER_PACKET; + if( obj_count > MAX_OBJECTS_TO_SEND ) + { + obj_count = MAX_OBJECTS_TO_SEND; + } + + LLUUID compound_msg_id; + compound_msg_id.generate(); + LLMessageSystem* msg = gMessageSystem; + + + S32 i = 0; + for (attachments_vec_t::const_iterator iter = mPendingAttachments.begin(); + iter != mPendingAttachments.end(); + ++iter) + { + if( 0 == (i % OBJECTS_PER_PACKET) ) + { + // Start a new message chunk + msg->newMessageFast(_PREHASH_RezMultipleAttachmentsFromInv); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_HeaderData); + msg->addUUIDFast(_PREHASH_CompoundMsgID, compound_msg_id ); + msg->addU8Fast(_PREHASH_TotalObjects, obj_count ); + msg->addBOOLFast(_PREHASH_FirstDetachAll, false ); + } + + const AttachmentsInfo &attachment = (*iter); + LLViewerInventoryItem* item = gInventory.getItem(attachment.mItemID); + if (!item) + { + llinfos << "Attempted to add non-existant item ID:" << attachment.mItemID << llendl; + continue; + } + S32 attachment_pt = attachment.mAttachmentPt; + if (attachment.mAdd) + attachment_pt |= ATTACHMENT_ADD; + + msg->nextBlockFast(_PREHASH_ObjectData ); + msg->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID()); + msg->addUUIDFast(_PREHASH_OwnerID, item->getPermissions().getOwner()); + msg->addU8Fast(_PREHASH_AttachmentPt, attachment_pt); + pack_permissions_slam(msg, item->getFlags(), item->getPermissions()); + msg->addStringFast(_PREHASH_Name, item->getName()); + msg->addStringFast(_PREHASH_Description, item->getDescription()); + + if( (i+1 == obj_count) || ((OBJECTS_PER_PACKET-1) == (i % OBJECTS_PER_PACKET)) ) + { + // End of message chunk + msg->sendReliable( gAgent.getRegion()->getHost() ); + } + i++; + } + + mPendingAttachments.clear(); +} diff --git a/indra/newview/llattachmentsmgr.h b/indra/newview/llattachmentsmgr.h new file mode 100644 index 0000000000..1d8ab74dfd --- /dev/null +++ b/indra/newview/llattachmentsmgr.h @@ -0,0 +1,73 @@ +/** + * @file llattachmentsmgr.h + * @brief Batches up attachment requests and sends them all + * in one message. + * + * $LicenseInfo:firstyear=2004&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLATTACHMENTSMGR_H +#define LL_LLATTACHMENTSMGR_H + +#include "llsingleton.h" + +class LLViewerInventoryItem; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// LLAttachmentsMgr +// +// The sole purpose of this class is to take attachment +// requests, queue them up, and send them all at once. +// This handles situations where the viewer may request +// a bunch of attachments at once in a short period of +// time, where each of the requests would normally be +// sent as a separate message versus being batched into +// one single message. +// +// The intent of this batching is to reduce viewer->server +// traffic. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +class LLAttachmentsMgr: public LLSingleton<LLAttachmentsMgr> +{ +public: + LLAttachmentsMgr(); + virtual ~LLAttachmentsMgr(); + + void addAttachment(const LLUUID& item_id, + const U8 attachment_pt, + const BOOL add); + static void onIdle(void *); +protected: + void onIdle(); +private: + struct AttachmentsInfo + { + LLUUID mItemID; + U8 mAttachmentPt; + BOOL mAdd; + }; + + typedef std::vector<AttachmentsInfo> attachments_vec_t; + attachments_vec_t mPendingAttachments; +}; + +#endif diff --git a/indra/newview/llaudiosourcevo.cpp b/indra/newview/llaudiosourcevo.cpp index 50363ea2e7..4f66560e07 100644 --- a/indra/newview/llaudiosourcevo.cpp +++ b/indra/newview/llaudiosourcevo.cpp @@ -41,11 +41,8 @@ LLAudioSourceVO::LLAudioSourceVO(const LLUUID &sound_id, const LLUUID& owner_id, const F32 gain, LLViewerObject *objectp) : LLAudioSource(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX), - mObjectp(objectp), - mActualGain(gain) + mObjectp(objectp) { - setAmbient(FALSE); - updateGain(); update(); } @@ -60,18 +57,18 @@ LLAudioSourceVO::~LLAudioSourceVO() void LLAudioSourceVO::setGain(const F32 gain) { - mActualGain = llclamp(gain, 0.f, 1.f); - updateGain(); + mGain = llclamp(gain, 0.f, 1.f); } -void LLAudioSourceVO::updateGain() +void LLAudioSourceVO::updateMute() { - if (!mObjectp) + if (!mObjectp || mObjectp->isDead()) { + mSourceMuted = true; return; } - BOOL mute = FALSE; + bool mute = false; LLVector3d pos_global; if (mObjectp->isAttachment()) @@ -90,21 +87,21 @@ void LLAudioSourceVO::updateGain() { pos_global = mObjectp->getPositionGlobal(); } - + if (!LLViewerParcelMgr::getInstance()->canHearSound(pos_global)) { - mute = TRUE; + mute = true; } if (!mute) { if (LLMuteList::getInstance()->isMuted(mObjectp->getID())) { - mute = TRUE; + mute = true; } else if (LLMuteList::getInstance()->isMuted(mOwnerID, LLMute::flagObjectSounds)) { - mute = TRUE; + mute = true; } else if (mObjectp->isAttachment()) { @@ -116,24 +113,38 @@ void LLAudioSourceVO::updateGain() if (parent && LLMuteList::getInstance()->isMuted(parent->getID())) { - mute = TRUE; + mute = true; } } } - if (!mute) + if (mute != mSourceMuted) { - mGain = mActualGain; - } - else - { - mGain = 0.f; + mSourceMuted = mute; + if (mSourceMuted) + { + // Stop the sound. + this->play(LLUUID::null); + } + else + { + // Muted sounds keep there data at all times, because + // it's the place where the audio UUID is stored. + // However, it's possible that mCurrentDatap is + // NULL when this source did only preload sounds. + if (mCurrentDatap) + { + // Restart the sound. + this->play(mCurrentDatap->getID()); + } + } } } - void LLAudioSourceVO::update() { + updateMute(); + if (!mObjectp) { return; @@ -145,7 +156,11 @@ void LLAudioSourceVO::update() return; } - updateGain(); + if (mSourceMuted) + { + return; + } + if (mObjectp->isHUDAttachment()) { mPositionGlobal = gAgentCamera.getCameraPositionGlobal(); diff --git a/indra/newview/llaudiosourcevo.h b/indra/newview/llaudiosourcevo.h index 4b70f8bc20..339c3d6916 100644 --- a/indra/newview/llaudiosourcevo.h +++ b/indra/newview/llaudiosourcevo.h @@ -48,11 +48,10 @@ public: /*virtual*/ void setGain(const F32 gain); private: - void updateGain(); + void updateMute(); private: LLPointer<LLViewerObject> mObjectp; - F32 mActualGain; // The "real" gain, when not off due to parcel effects }; #endif // LL_LLAUDIOSOURCEVO_H diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 1e59e5b805..97db869a52 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -695,6 +695,7 @@ void LLAvatarActions::toggleBlock(const LLUUID& id) LLMuteList::getInstance()->add(mute); } } + // static bool LLAvatarActions::canOfferTeleport(const LLUUID& id) { @@ -710,6 +711,21 @@ bool LLAvatarActions::canOfferTeleport(const LLUUID& id) return true; } +// static +bool LLAvatarActions::canOfferTeleport(const uuid_vec_t& ids) +{ + bool result = true; + for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it) + { + if(!canOfferTeleport(*it)) + { + result = false; + break; + } + } + return result; +} + void LLAvatarActions::inviteToGroup(const LLUUID& id) { LLFloaterGroupPicker* widget = LLFloaterReg::showTypedInstance<LLFloaterGroupPicker>("group_picker", LLSD(id)); diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h index d106a83eea..a3ee7ba948 100644 --- a/indra/newview/llavataractions.h +++ b/indra/newview/llavataractions.h @@ -177,12 +177,18 @@ public: static void csr(const LLUUID& id, std::string name); /** - * Checks whether can offer teleport to the avatar - * Can't offer only for offline friends + * Checks whether we can offer a teleport to the avatar, only offline friends + * cannot be offered a teleport. + * + * @return false if avatar is a friend and not visibly online */ static bool canOfferTeleport(const LLUUID& id); - + /** + * @return false if any one of the specified avatars a friend and not visibly online + */ + static bool canOfferTeleport(const uuid_vec_t& ids); + private: static bool callbackAddFriend(const LLSD& notification, const LLSD& response); static bool callbackAddFriendWithMessage(const LLSD& notification, const LLSD& response); diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index 57e186b6a8..b7c8cb1de8 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -96,6 +96,20 @@ void LLAvatarList::setSpeakingIndicatorsVisible(bool visible) } } +void LLAvatarList::showPermissions(bool visible) +{ + // Save the value for new items to use. + mShowPermissions = visible; + + // Enable or disable showing permissions icons for all existing items. + std::vector<LLPanel*> items; + getItems(items); + for(std::vector<LLPanel*>::const_iterator it = items.begin(), end_it = items.end(); it != end_it; ++it) + { + static_cast<LLAvatarListItem*>(*it)->setShowPermissions(mShowPermissions); + } +} + static bool findInsensitive(std::string haystack, const std::string& needle_upper) { LLStringUtil::toUpper(haystack); @@ -113,6 +127,7 @@ LLAvatarList::Params::Params() , show_info_btn("show_info_btn", true) , show_profile_btn("show_profile_btn", true) , show_speaking_indicator("show_speaking_indicator", true) +, show_permissions_granted("show_permissions_granted", false) { } @@ -127,6 +142,7 @@ LLAvatarList::LLAvatarList(const Params& p) , mShowInfoBtn(p.show_info_btn) , mShowProfileBtn(p.show_profile_btn) , mShowSpeakingIndicator(p.show_speaking_indicator) +, mShowPermissions(p.show_permissions_granted) { setCommitOnSelectionChange(true); @@ -383,6 +399,7 @@ void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is item->setShowInfoBtn(mShowInfoBtn); item->setShowProfileBtn(mShowProfileBtn); item->showSpeakingIndicator(mShowSpeakingIndicator); + item->setShowPermissions(mShowPermissions); item->setDoubleClickCallback(boost::bind(&LLAvatarList::onItemDoubleClicked, this, _1, _2, _3, _4)); @@ -498,7 +515,7 @@ LLAvalineListItem::LLAvalineListItem(bool hide_number/* = true*/) : LLAvatarList , mIsHideNumber(hide_number) { // should not use buildPanel from the base class to ensure LLAvalineListItem::postBuild is called. - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_list_item.xml"); + buildFromFile( "panel_avatar_list_item.xml"); } BOOL LLAvalineListItem::postBuild() diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index 83faa53c28..9d3dcb75f3 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -54,7 +54,8 @@ public: show_last_interaction_time, // show most recent interaction time. *HACK: move this to a derived class show_info_btn, show_profile_btn, - show_speaking_indicator; + show_speaking_indicator, + show_permissions_granted; Params(); }; @@ -78,6 +79,7 @@ public: void toggleIcons(); void setSpeakingIndicatorsVisible(bool visible); + void showPermissions(bool visible); void sortByName(); void setShowIcons(std::string param_name); bool getIconsVisible() const { return mShowIcons; } @@ -115,6 +117,7 @@ private: bool mShowInfoBtn; bool mShowProfileBtn; bool mShowSpeakingIndicator; + bool mShowPermissions; LLTimer* mLITUpdateTimer; // last interaction time update timer std::string mIconParamName; diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index eead0c9b3e..784188eb0c 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -66,16 +66,22 @@ LLAvatarListItem::LLAvatarListItem(bool not_from_ui_factory/* = true*/) mAvatarIcon(NULL), mAvatarName(NULL), mLastInteractionTime(NULL), + mIconPermissionOnline(NULL), + mIconPermissionMap(NULL), + mIconPermissionEditMine(NULL), + mIconPermissionEditTheirs(NULL), mSpeakingIndicator(NULL), mInfoBtn(NULL), mProfileBtn(NULL), mOnlineStatus(E_UNKNOWN), mShowInfoBtn(true), - mShowProfileBtn(true) + mShowProfileBtn(true), + mShowPermissions(false), + mHovered(false) { if (not_from_ui_factory) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_list_item.xml"); + buildFromFile("panel_avatar_list_item.xml"); } // *NOTE: mantipov: do not use any member here. They can be uninitialized here in case instance // is created from the UICtrlFactory @@ -92,7 +98,16 @@ BOOL LLAvatarListItem::postBuild() mAvatarIcon = getChild<LLAvatarIconCtrl>("avatar_icon"); mAvatarName = getChild<LLTextBox>("avatar_name"); mLastInteractionTime = getChild<LLTextBox>("last_interaction"); - + + mIconPermissionOnline = getChild<LLIconCtrl>("permission_online_icon"); + mIconPermissionMap = getChild<LLIconCtrl>("permission_map_icon"); + mIconPermissionEditMine = getChild<LLIconCtrl>("permission_edit_mine_icon"); + mIconPermissionEditTheirs = getChild<LLIconCtrl>("permission_edit_theirs_icon"); + mIconPermissionOnline->setVisible(false); + mIconPermissionMap->setVisible(false); + mIconPermissionEditMine->setVisible(false); + mIconPermissionEditTheirs->setVisible(false); + mSpeakingIndicator = getChild<LLOutputMonitorCtrl>("speaking_indicator"); mInfoBtn = getChild<LLButton>("info_btn"); mProfileBtn = getChild<LLButton>("profile_btn"); @@ -131,8 +146,10 @@ void LLAvatarListItem::onMouseEnter(S32 x, S32 y, MASK mask) mInfoBtn->setVisible(mShowInfoBtn); mProfileBtn->setVisible(mShowProfileBtn); + mHovered = true; LLPanel::onMouseEnter(x, y, mask); + showPermissions(mShowPermissions); updateChildren(); } @@ -142,8 +159,10 @@ void LLAvatarListItem::onMouseLeave(S32 x, S32 y, MASK mask) mInfoBtn->setVisible(false); mProfileBtn->setVisible(false); + mHovered = false; LLPanel::onMouseLeave(x, y, mask); + showPermissions(false); updateChildren(); } @@ -152,6 +171,12 @@ void LLAvatarListItem::changed(U32 mask) { // no need to check mAvatarId for null in this case setOnline(LLAvatarTracker::instance().isBuddyOnline(mAvatarId)); + + if (mask & LLFriendObserver::POWERS) + { + showPermissions(mShowPermissions && mHovered); + updateChildren(); + } } void LLAvatarListItem::setOnline(bool online) @@ -236,10 +261,7 @@ void LLAvatarListItem::setAvatarId(const LLUUID& id, const LLUUID& session_id, b void LLAvatarListItem::showLastInteractionTime(bool show) { - if (show) - return; - - mLastInteractionTime->setVisible(false); + mLastInteractionTime->setVisible(show); updateChildren(); } @@ -250,17 +272,11 @@ void LLAvatarListItem::setLastInteractionTime(U32 secs_since) void LLAvatarListItem::setShowInfoBtn(bool show) { - // Already done? Then do nothing. - if(mShowInfoBtn == show) - return; mShowInfoBtn = show; } void LLAvatarListItem::setShowProfileBtn(bool show) { - // Already done? Then do nothing. - if(mShowProfileBtn == show) - return; mShowProfileBtn = show; } @@ -279,7 +295,9 @@ void LLAvatarListItem::setAvatarIconVisible(bool visible) { // Already done? Then do nothing. if (mAvatarIcon->getVisible() == (BOOL)visible) + { return; + } // Show/hide avatar icon. mAvatarIcon->setVisible(visible); @@ -328,7 +346,7 @@ const std::string LLAvatarListItem::getAvatarName() const return mAvatarName->getValue(); } -//== PRIVATE SECITON ========================================================== +//== PRIVATE SECTION ========================================================== void LLAvatarListItem::setNameInternal(const std::string& name, const std::string& highlight) { @@ -438,10 +456,22 @@ void LLAvatarListItem::initChildrenWidths(LLAvatarListItem* avatar_item) //info btn width + padding S32 info_btn_width = avatar_item->mProfileBtn->getRect().mLeft - avatar_item->mInfoBtn->getRect().mLeft; + // online permission icon width + padding + S32 permission_online_width = avatar_item->mInfoBtn->getRect().mLeft - avatar_item->mIconPermissionOnline->getRect().mLeft; + + // map permission icon width + padding + S32 permission_map_width = avatar_item->mIconPermissionOnline->getRect().mLeft - avatar_item->mIconPermissionMap->getRect().mLeft; + + // edit my objects permission icon width + padding + S32 permission_edit_mine_width = avatar_item->mIconPermissionMap->getRect().mLeft - avatar_item->mIconPermissionEditMine->getRect().mLeft; + + // edit their objects permission icon width + padding + S32 permission_edit_theirs_width = avatar_item->mIconPermissionEditMine->getRect().mLeft - avatar_item->mIconPermissionEditTheirs->getRect().mLeft; + // last interaction time textbox width + padding - S32 last_interaction_time_width = avatar_item->mInfoBtn->getRect().mLeft - avatar_item->mLastInteractionTime->getRect().mLeft; + S32 last_interaction_time_width = avatar_item->mIconPermissionEditTheirs->getRect().mLeft - avatar_item->mLastInteractionTime->getRect().mLeft; - // icon width + padding + // avatar icon width + padding S32 icon_width = avatar_item->mAvatarName->getRect().mLeft - avatar_item->mAvatarIcon->getRect().mLeft; sLeftPadding = avatar_item->mAvatarIcon->getRect().mLeft; @@ -451,9 +481,14 @@ void LLAvatarListItem::initChildrenWidths(LLAvatarListItem* avatar_item) sChildrenWidths[--index] = icon_width; sChildrenWidths[--index] = 0; // for avatar name we don't need its width, it will be calculated as "left available space" sChildrenWidths[--index] = last_interaction_time_width; + sChildrenWidths[--index] = permission_edit_theirs_width; + sChildrenWidths[--index] = permission_edit_mine_width; + sChildrenWidths[--index] = permission_map_width; + sChildrenWidths[--index] = permission_online_width; sChildrenWidths[--index] = info_btn_width; sChildrenWidths[--index] = profile_btn_width; sChildrenWidths[--index] = speaking_indicator_width; + llassert(index == 0); } void LLAvatarListItem::updateChildren() @@ -532,6 +567,27 @@ void LLAvatarListItem::updateChildren() LL_DEBUGS("AvatarItemReshape") << "name rect after: " << name_view_rect << LL_ENDL; } +bool LLAvatarListItem::showPermissions(bool visible) +{ + const LLRelationship* relation = LLAvatarTracker::instance().getBuddyInfo(getAvatarId()); + if(relation && visible) + { + mIconPermissionOnline->setVisible(relation->isRightGrantedTo(LLRelationship::GRANT_ONLINE_STATUS)); + mIconPermissionMap->setVisible(relation->isRightGrantedTo(LLRelationship::GRANT_MAP_LOCATION)); + mIconPermissionEditMine->setVisible(relation->isRightGrantedTo(LLRelationship::GRANT_MODIFY_OBJECTS)); + mIconPermissionEditTheirs->setVisible(relation->isRightGrantedFrom(LLRelationship::GRANT_MODIFY_OBJECTS)); + } + else + { + mIconPermissionOnline->setVisible(false); + mIconPermissionMap->setVisible(false); + mIconPermissionEditMine->setVisible(false); + mIconPermissionEditTheirs->setVisible(false); + } + + return NULL != relation; +} + LLView* LLAvatarListItem::getItemChildView(EAvatarListItemChildIndex child_view_index) { LLView* child_view = mAvatarName; @@ -548,7 +604,19 @@ LLView* LLAvatarListItem::getItemChildView(EAvatarListItemChildIndex child_view_ child_view = mLastInteractionTime; break; case ALIC_SPEAKER_INDICATOR: - child_view = mSpeakingIndicator; + child_view = mSpeakingIndicator; + break; + case ALIC_PERMISSION_ONLINE: + child_view = mIconPermissionOnline; + break; + case ALIC_PERMISSION_MAP: + child_view = mIconPermissionMap; + break; + case ALIC_PERMISSION_EDIT_MINE: + child_view = mIconPermissionEditMine; + break; + case ALIC_PERMISSION_EDIT_THEIRS: + child_view = mIconPermissionEditTheirs; break; case ALIC_INFO_BUTTON: child_view = mInfoBtn; diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h index ba9c3574d5..52a1a59a2f 100644 --- a/indra/newview/llavatarlistitem.h +++ b/indra/newview/llavatarlistitem.h @@ -42,6 +42,7 @@ #include "llcallingcard.h" // for LLFriendObserver class LLAvatarIconCtrl; +class LLIconCtrl; class LLAvatarListItem : public LLPanel, public LLFriendObserver { @@ -100,6 +101,7 @@ public: void setShowProfileBtn(bool show); void setShowInfoBtn(bool show); void showSpeakingIndicator(bool show); + void setShowPermissions(bool show) { mShowPermissions = show; }; void showLastInteractionTime(bool show); void setAvatarIconVisible(bool visible); @@ -119,6 +121,15 @@ protected: LLAvatarIconCtrl* mAvatarIcon; + /// Indicator for permission to see me online. + LLIconCtrl* mIconPermissionOnline; + /// Indicator for permission to see my position on the map. + LLIconCtrl* mIconPermissionMap; + /// Indicator for permission to edit my objects. + LLIconCtrl* mIconPermissionEditMine; + /// Indicator for permission to edit their objects. + LLIconCtrl* mIconPermissionEditTheirs; + private: typedef enum e_online_status { @@ -138,6 +149,10 @@ private: ALIC_SPEAKER_INDICATOR, ALIC_PROFILE_BUTTON, ALIC_INFO_BUTTON, + ALIC_PERMISSION_ONLINE, + ALIC_PERMISSION_MAP, + ALIC_PERMISSION_EDIT_MINE, + ALIC_PERMISSION_EDIT_THEIRS, ALIC_INTERACTION_TIME, ALIC_NAME, ALIC_ICON, @@ -165,6 +180,13 @@ private: void updateChildren(); /** + * Update visibility of active permissions icons. + * + * Need to call updateChildren() afterwards to sort out their layout. + */ + bool showPermissions(bool visible); + + /** * Gets child view specified by index. * * This method implemented via switch by all EAvatarListItemChildIndex values. @@ -187,6 +209,12 @@ private: bool mShowInfoBtn; bool mShowProfileBtn; + /// indicates whether to show icons representing permissions granted + bool mShowPermissions; + + /// true when the mouse pointer is hovering over this item + bool mHovered; + static bool sStaticInitialized; // this variable is introduced to improve code readability static S32 sLeftPadding; // padding to first left visible child (icon or name) static S32 sRightNamePadding; // right padding from name to next visible child diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 0e5e8d0fe7..074145c056 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -47,6 +47,7 @@ #include "llagentcamera.h" #include "llchiclet.h" #include "llfloatercamera.h" +#include "llhints.h" #include "llimfloater.h" // for LLIMFloater #include "llnearbychatbar.h" #include "llspeakbutton.h" @@ -55,6 +56,48 @@ #include "lltoolmgr.h" #include "llviewerparcelmgr.h" +#include "llviewerwindow.h" +#include "llsdserialize.h" + +// Distance from mouse down on which drag'n'drop should be started. +#define DRAG_START_DISTANCE 3 + +static const std::string SORTING_DATA_FILE_NAME = "bottomtray_buttons_order.xml"; + +LLDefaultChildRegistry::Register<LLBottomtrayButton> bottomtray_button("bottomtray_button"); + +// LLBottomtrayButton methods + +// virtual +BOOL LLBottomtrayButton::handleHover(S32 x, S32 y, MASK mask) +{ + S32 screenX, screenY; + localPointToScreen(x, y, &screenX, &screenY); + // pass hover to bottomtray + LLBottomTray::getInstance()->onDraggableButtonHover(screenX, screenY); + return FALSE; +} +//virtual +BOOL LLBottomtrayButton::handleMouseUp(S32 x, S32 y, MASK mask) +{ + S32 screenX, screenY; + localPointToScreen(x, y, &screenX, &screenY); + // pass mouse up to bottomtray + LLBottomTray::getInstance()->onDraggableButtonMouseUp(this, screenX, screenY); + LLButton::handleMouseUp(x, y, mask); + return FALSE; +} +//virtual +BOOL LLBottomtrayButton::handleMouseDown(S32 x, S32 y, MASK mask) +{ + S32 screenX, screenY; + localPointToScreen(x, y, &screenX, &screenY); + // pass mouse up to bottomtray + LLBottomTray::getInstance()->onDraggableButtonMouseDown(this, screenX, screenY); + LLButton::handleMouseDown(x, y, mask); + return FALSE; +} + static void update_build_button_enable_state() { bool can_edit = LLToolMgr::getInstance()->canEdit(); @@ -68,10 +111,6 @@ template class LLBottomTray* LLSingleton<class LLBottomTray>::getInstance(); namespace { const std::string& PANEL_CHICLET_NAME = "chiclet_list_panel"; - const std::string& PANEL_CHATBAR_NAME = "chat_bar"; - const std::string& PANEL_MOVEMENT_NAME = "movement_panel"; - const std::string& PANEL_CAMERA_NAME = "cam_panel"; - const std::string& PANEL_GESTURE_NAME = "gesture_panel"; S32 get_panel_min_width(LLLayoutStack* stack, LLView* panel) { @@ -79,7 +118,7 @@ namespace llassert(stack); if ( stack && panel && panel->getVisible() ) { - stack->getPanelMinSize(panel->getName(), &minimal_width, NULL); + stack->getPanelMinSize(panel->getName(), &minimal_width); } return minimal_width; } @@ -90,7 +129,7 @@ namespace llassert(stack); if ( stack && panel && panel->getVisible() ) { - stack->getPanelMaxSize(panel->getName(), &max_width, NULL); + stack->getPanelMaxSize(panel->getName(), &max_width); } return max_width; } @@ -112,26 +151,30 @@ class LLBottomTrayLite public: LLBottomTrayLite() : mNearbyChatBar(NULL), + mChatBarContainer(NULL), mGesturePanel(NULL) { mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL); - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_bottomtray_lite.xml"); + buildFromFile("panel_bottomtray_lite.xml"); // Necessary for focus movement among child controls setFocusRoot(TRUE); } BOOL postBuild() { - mNearbyChatBar = getChild<LLNearbyChatBar>("chat_bar"); + mNearbyChatBar = findChild<LLNearbyChatBar>("chat_bar"); + mChatBarContainer = getChild<LLLayoutPanel>("chat_bar_layout_panel"); mGesturePanel = getChild<LLPanel>("gesture_panel"); // Hide "show_nearby_chat" button - LLLineEditor* chat_box = mNearbyChatBar->getChatBox(); - LLUICtrl* show_btn = mNearbyChatBar->getChild<LLUICtrl>("show_nearby_chat"); - S32 delta_width = show_btn->getRect().getWidth(); - show_btn->setVisible(FALSE); - chat_box->reshape(chat_box->getRect().getWidth() + delta_width, chat_box->getRect().getHeight()); - + if (mNearbyChatBar) + { + LLLineEditor* chat_box = mNearbyChatBar->getChatBox(); + LLUICtrl* show_btn = mNearbyChatBar->getChild<LLUICtrl>("show_nearby_chat"); + S32 delta_width = show_btn->getRect().getWidth(); + show_btn->setVisible(FALSE); + chat_box->reshape(chat_box->getRect().getWidth() + delta_width, chat_box->getRect().getHeight()); + } return TRUE; } @@ -144,6 +187,7 @@ public: } LLNearbyChatBar* mNearbyChatBar; + LLLayoutPanel* mChatBarContainer; LLPanel* mGesturePanel; }; @@ -152,13 +196,18 @@ LLBottomTray::LLBottomTray(const LLSD&) mSpeakPanel(NULL), mSpeakBtn(NULL), mNearbyChatBar(NULL), - mToolbarStack(NULL) -, mMovementButton(NULL) -, mResizeState(RS_NORESIZE) -, mBottomTrayContextMenu(NULL) -, mCamButton(NULL) -, mBottomTrayLite(NULL) -, mIsInLiteMode(false) + mChatBarContainer(NULL), + mToolbarStack(NULL), + mMovementButton(NULL), + mResizeState(RS_NORESIZE), + mBottomTrayContextMenu(NULL), + mCamButton(NULL), + mBottomTrayLite(NULL), + mIsInLiteMode(false), + mDragStarted(false), + mDraggedItem(NULL), + mLandingTab(NULL), + mCheckForDrag(false) { // Firstly add ourself to IMSession observers, so we catch session events // before chiclets do that. @@ -166,7 +215,7 @@ LLBottomTray::LLBottomTray(const LLSD&) mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL); - LLUICtrlFactory::getInstance()->buildPanel(this,"panel_bottomtray.xml"); + buildFromFile("panel_bottomtray.xml"); LLUICtrl::CommitCallbackRegistry::defaultRegistrar().add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraItem, _2)); @@ -183,6 +232,9 @@ LLBottomTray::LLBottomTray(const LLSD&) mBottomTrayLite->setFollowsAll(); mBottomTrayLite->setVisible(FALSE); } + + mImageDragIndication = LLUI::getUIImage(getString("DragIndicationImageName")); + mDesiredNearbyChatWidth = mNearbyChatBar ? mNearbyChatBar->getRect().getWidth() : 0; } LLBottomTray::~LLBottomTray() @@ -195,7 +247,7 @@ LLBottomTray::~LLBottomTray() if (mNearbyChatBar) { // store custom width of chatbar panel. - S32 custom_width = mNearbyChatBar->getRect().getWidth(); + S32 custom_width = mChatBarContainer->getRect().getWidth(); gSavedSettings.setS32("ChatBarCustomWidth", custom_width); } @@ -390,7 +442,7 @@ S32 LLBottomTray::notifyParent(const LLSD& info) const std::string& name = info["view_name"]; // expected only resize of nearby chatbar - if (mNearbyChatBar->getName() != name) return LLPanel::notifyParent(info); + if (mChatBarContainer->getName() != name) return LLPanel::notifyParent(info); const S32 new_width = info["new_width"]; @@ -420,8 +472,8 @@ void LLBottomTray::updateContextMenu(S32 x, S32 y, MASK mask) { LLUICtrl* edit_box = mNearbyChatBar->getChild<LLUICtrl>("chat_box"); - S32 local_x = x - mNearbyChatBar->getRect().mLeft - edit_box->getRect().mLeft; - S32 local_y = y - mNearbyChatBar->getRect().mBottom - edit_box->getRect().mBottom; + S32 local_x = x - mChatBarContainer->getRect().mLeft - edit_box->getRect().mLeft; + S32 local_y = y - mChatBarContainer->getRect().mBottom - edit_box->getRect().mBottom; bool in_edit_box = edit_box->pointInView(local_x, local_y); @@ -474,10 +526,14 @@ BOOL LLBottomTray::postBuild() mBottomTrayContextMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_bottomtray.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); gMenuHolder->addChild(mBottomTrayContextMenu); + mNearbyChatBar = findChild<LLNearbyChatBar>("chat_bar"); + LLHints::registerHintTarget("chat_bar", mNearbyChatBar->LLView::getHandle()); + + mChatBarContainer = getChild<LLLayoutPanel>("chat_bar_layout_panel"); - mNearbyChatBar = getChild<LLNearbyChatBar>("chat_bar"); mToolbarStack = getChild<LLLayoutStack>("toolbar_stack"); mMovementButton = getChild<LLButton>("movement_btn"); + LLHints::registerHintTarget("move_btn", mMovementButton->getHandle()); mCamButton = getChild<LLButton>("camera_btn"); setRightMouseDownCallback(boost::bind(&LLBottomTray::showBottomTrayContextMenu,this, _2, _3,_4)); @@ -510,11 +566,251 @@ BOOL LLBottomTray::postBuild() showWellButton(RS_IM_WELL, !LLIMWellWindow::getInstance()->isWindowEmpty()); showWellButton(RS_NOTIFICATION_WELL, !LLNotificationWellWindow::getInstance()->isWindowEmpty()); + loadButtonsOrder(); + LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(boost::bind(&update_build_button_enable_state)); return TRUE; } +//Drag-n-drop + +void LLBottomTray::onDraggableButtonMouseDown(LLUICtrl* ctrl, S32 x, S32 y) +{ + if (ctrl == NULL) return; + LLView* parent_view = ctrl->getParent(); + if(parent_view != NULL) + { + // we actually drag'n'drop panel (not button) in code, so have to find a parent + // of button which called this method on mouse down. + LLPanel* parent = dynamic_cast<LLPanel*>(parent_view); + // It may happen that we clicked not usual button, but button inside widget(speak, gesture) + // so we'll need to get a level higher to reach layout panel as a parent. + if(parent == NULL) parent = dynamic_cast<LLPanel*>(parent_view->getParent()); + if (parent && parent->getVisible()) + { + mDraggedItem = parent; + mCheckForDrag = true; + mStartX = x; + mStartY = y; + } + } +} + +LLPanel* LLBottomTray::findChildPanelByLocalCoords(S32 x, S32 y) +{ + LLPanel* ctrl = 0; + S32 screenX, screenY; + const child_list_t* list = mToolbarStack->getChildList(); + + localPointToScreen(x, y, &screenX, &screenY); + + // look for a child panel which contains the point (screenX, screenY) in it's rectangle + for (child_list_const_iter_t i = list->begin(); i != list->end(); ++i) + { + LLRect rect; + localRectToScreen((*i)->getRect(), &rect); + + if (rect.pointInRect(screenX, screenY)) + { + ctrl = dynamic_cast<LLPanel*>(*i); + break; + } + } + + return ctrl; +} + +void LLBottomTray::onDraggableButtonHover(S32 x, S32 y) +{ + // if mouse down on draggable item was done, check whether we should start DnD + if (mCheckForDrag) + { + // Start drag'n'drop if mouse cursor was dragged away frome mouse down location enough + if(sqrt((float)((mStartX-x)*(mStartX-x)+(mStartY-y)*(mStartY-y))) > DRAG_START_DISTANCE) + { + mDragStarted = true; + mCheckForDrag = false; + } + } + if (mDragStarted) + { + // Check whether the cursor is over draggable area, find which panel it is and set is as + // landing tab for drag'n'drop + if(isCursorOverDraggableArea(x, y)) + { + LLPanel* panel = findChildPanelByLocalCoords(x,y); + if (panel && panel != mDraggedItem) mLandingTab = panel; + gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROWDRAG); + } + else + { + gViewerWindow->getWindow()->setCursor(UI_CURSOR_NO); + } + } +} + +bool LLBottomTray::isCursorOverDraggableArea(S32 x, S32 y) +{ + bool result = getRect().pointInRect(x, y); + result = result && mNearbyChatBar->calcScreenRect().mRight < x; + result = result && mChicletPanel->calcScreenRect().mRight > x; + return result; +} + +void LLBottomTray::updateButtonsOrdersAfterDnD() +{ + // *TODO: change implementation of this method to support simplify it + // (and according to future possible changes in the way button order is saved between sessions). + state_object_map_t::const_iterator it = mStateProcessedObjectMap.begin(); + state_object_map_t::const_iterator it_end = mStateProcessedObjectMap.end(); + // Speak button is currently the only draggable button not in mStateProcessedObjectMap, + // so if dragged_state is not found in that map, it should be RS_BUTTON_SPEAK. Change this code if any other + // exclusions from mStateProcessedObjectMap will become draggable. + EResizeState dragged_state = RS_BUTTON_SPEAK; + EResizeState landing_state = RS_NORESIZE; + bool landing_state_found = false; + // Find states for dragged item and landing tab + for (; it != it_end; ++it) + { + if (it->second == mDraggedItem) + { + dragged_state = it->first; + } + else if (it->second == mLandingTab) + { + landing_state = it->first; + landing_state_found = true; + } + } + + // Update order of buttons according to drag'n'drop + mButtonsOrder.erase(std::find(mButtonsOrder.begin(), mButtonsOrder.end(), dragged_state)); + if (!landing_state_found && mLandingTab == getChild<LLPanel>(PANEL_CHICLET_NAME)) + { + mButtonsOrder.push_back(dragged_state); + } + else + { + if (!landing_state_found) landing_state = RS_BUTTON_SPEAK; + mButtonsOrder.insert(std::find(mButtonsOrder.begin(), mButtonsOrder.end(), landing_state), dragged_state); + } + // Synchronize button process order with their order + resize_state_vec_t::const_iterator it1 = mButtonsOrder.begin(); + const resize_state_vec_t::const_iterator it_end1 = mButtonsOrder.end(); + resize_state_vec_t::iterator it2 = mButtonsProcessOrder.begin(); + for (; it1 != it_end1; ++it1) + { + // Skip Speak because it is not in mButtonsProcessOrder(it's the reason why mButtonsOrder was introduced). + // If any other draggable items will be added to bottomtray later, they should also be skipped here. + if (*it1 != RS_BUTTON_SPEAK) + { + *it2 = *it1; + ++it2; + } + } + + saveButtonsOrder(); +} + +void LLBottomTray::saveButtonsOrder() +{ + std::string user_dir = gDirUtilp->getLindenUserDir(); + if (user_dir.empty()) return; + + std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME); + LLSD settings_llsd; + int i = 0; + const resize_state_vec_t::const_iterator it_end = mButtonsOrder.end(); + // we use numbers as keys for map which is saved in file and contains resize states as its values + for (resize_state_vec_t::const_iterator it = mButtonsOrder.begin(); it != it_end; ++it, i++) + { + std::string str = llformat("%d", i); + settings_llsd[str] = *it; + } + llofstream file; + file.open(filename); + LLSDSerialize::toPrettyXML(settings_llsd, file); +} + +void LLBottomTray::loadButtonsOrder() +{ + // load per-resident sorting information + std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME); + + LLSD settings_llsd; + llifstream file; + file.open(filename); + if (!file.is_open()) return; + + LLSDSerialize::fromXML(settings_llsd, file); + + + mButtonsOrder.clear(); + mButtonsProcessOrder.clear(); + int i = 0; + // getting button order from file + for (LLSD::map_const_iterator iter = settings_llsd.beginMap(); + iter != settings_llsd.endMap(); ++iter, ++i) + { + std::string str = llformat("%d", i); + EResizeState state = (EResizeState)settings_llsd[str].asInteger(); + mButtonsOrder.push_back(state); + // RS_BUTTON_SPEAK is skipped, because it shouldn't be in mButtonsProcessOrder (it does not hide or shrink). + if (state != RS_BUTTON_SPEAK) + { + mButtonsProcessOrder.push_back(state); + } + } + + // There are other panels in layout stack order of which is not saved. Also, panels order of which is saved, + // are already in layout stack but in wrong order. The most convenient way to place them is moving them + // to front one by one (because in this case we don't have to pass the panel before which we want to insert our + // panel to movePanel()). So panels are moved in order from the end of mButtonsOrder vector(reverse iterator is used). + const resize_state_vec_t::const_reverse_iterator it_end = mButtonsOrder.rend(); + // placing panels in layout stack according to button order which we loaded in previous for + for (resize_state_vec_t::const_reverse_iterator it = mButtonsOrder.rbegin(); it != it_end; ++it, ++i) + { + LLPanel* panel_to_move = *it == RS_BUTTON_SPEAK ? mSpeakPanel : mStateProcessedObjectMap[*it]; + mToolbarStack->movePanel(panel_to_move, NULL, true); // prepend + } + // Nearbychat is not stored in order settings file, but it must be the first of the panels, so moving it + // manually here + mToolbarStack->movePanel(mNearbyChatBar, NULL, true); +} + +void LLBottomTray::onDraggableButtonMouseUp(LLUICtrl* ctrl, S32 x, S32 y) +{ + //if mouse up happened over area where drop is possible, change order of buttons + if (mLandingTab != NULL && mDraggedItem != NULL && mDragStarted) + { + if(isCursorOverDraggableArea(x, y)) + { + // change order of panels in layout stack + mToolbarStack->movePanel(mDraggedItem, (LLPanel*)mLandingTab); + // change order of buttons in order vectors + updateButtonsOrdersAfterDnD(); + } + } + gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW); + mDragStarted = false; + mDraggedItem = NULL; + mLandingTab = NULL; + mCheckForDrag = false; +} + +void LLBottomTray::draw() +{ + LLPanel::draw(); + if (mLandingTab) + { + static S32 w = mImageDragIndication->getWidth(); + static S32 h = mImageDragIndication->getHeight(); + LLRect rect = mLandingTab->calcScreenRect(); + mImageDragIndication->draw(rect.mLeft - w/2, rect.getHeight(), w, h); + } +} + bool LLBottomTray::onContextMenuItemEnabled(const LLSD& userdata) { std::string item = userdata.asString(); @@ -679,14 +975,15 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent) // we can not to do this from postBuild because reshape is called from parent view on startup // creation after it and reset width according to resize logic. static bool needs_restore_custom_state = true; - if (mNearbyChatBar && needs_restore_custom_state) + if (mChatBarContainer && needs_restore_custom_state) { // restore custom width of chatbar panel. S32 new_width = gSavedSettings.getS32("ChatBarCustomWidth"); if (new_width > 0) { + mDesiredNearbyChatWidth = new_width; processChatbarCustomization(new_width); - mNearbyChatBar->reshape(new_width, mNearbyChatBar->getRect().getHeight()); + mChatBarContainer->reshape(new_width, mChatBarContainer->getRect().getHeight()); } needs_restore_custom_state = false; } @@ -700,6 +997,9 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width) const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth(); const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth(); + // There are four steps of processing width decrease. If in one of them required width was reached, + // further are not needed. + // 1. Decreasing width of chiclet panel. if (chiclet_panel_width > chiclet_panel_min_width) { // we have some space to decrease chiclet panel @@ -725,8 +1025,15 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width) << llendl; } - const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); + S32 buttons_freed_width = 0; + // 2. Decreasing width of buttons. + if (still_should_be_processed) + { + processShrinkButtons(delta_width, buttons_freed_width); + } + // 3. Decreasing width of nearby chat. const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mNearbyChatBar); + const S32 chatbar_panel_width = mChatBarContainer->getRect().getWidth(); if (still_should_be_processed && chatbar_panel_width > chatbar_panel_min_width) { // we have some space to decrease chatbar panel @@ -739,7 +1046,11 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width) still_should_be_processed = delta_width < 0; - mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mNearbyChatBar->getRect().getHeight()); + // chatbar should only be shrunk here, not stretched + if(delta_panel > 0) + { + mChatBarContainer->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mChatBarContainer->getRect().getHeight()); + } log(mNearbyChatBar, "after processing panel decreasing via nearby chatbar panel"); @@ -750,11 +1061,9 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width) } S32 extra_shrink_width = 0; - S32 buttons_freed_width = 0; + // 4. Hiding buttons if needed. if (still_should_be_processed) { - processShrinkButtons(delta_width, buttons_freed_width); - processHideButtons(delta_width, buttons_freed_width); if (delta_width < 0) @@ -766,10 +1075,15 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width) if (buttons_freed_width > 0) { - log(mNearbyChatBar, "before applying compensative width"); - mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() + buttons_freed_width, mNearbyChatBar->getRect().getHeight() ); - log(mNearbyChatBar, "after applying compensative width"); - lldebugs << buttons_freed_width << llendl; + S32 nearby_needed_width = mDesiredNearbyChatWidth - mNearbyChatBar->getRect().getWidth(); + if (nearby_needed_width > 0) + { + S32 compensative_width = nearby_needed_width > buttons_freed_width ? buttons_freed_width : nearby_needed_width; + log(mNearbyChatBar, "before applying compensative width"); + mChatBarContainer->reshape(mChatBarContainer->getRect().getWidth() + compensative_width, mChatBarContainer->getRect().getHeight() ); + log(mNearbyChatBar, "after applying compensative width"); + lldebugs << buttons_freed_width << llendl; + } } } @@ -783,18 +1097,12 @@ void LLBottomTray::processWidthIncreased(S32 delta_width) const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth(); static const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth(); - const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth(); - static const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mNearbyChatBar); - static const S32 chatbar_panel_max_width = get_panel_max_width(mToolbarStack, mNearbyChatBar); - - const S32 chatbar_available_shrink_width = chatbar_panel_width - chatbar_panel_min_width; const S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; // how many room we have to show hidden buttons - S32 total_available_width = delta_width + chatbar_available_shrink_width + available_width_chiclet; + S32 total_available_width = delta_width + available_width_chiclet; lldebugs << "Processing extending, available width:" - << ", chatbar - " << chatbar_available_shrink_width << ", chiclets - " << available_width_chiclet << ", total - " << total_available_width << llendl; @@ -803,8 +1111,6 @@ void LLBottomTray::processWidthIncreased(S32 delta_width) processShowButtons(available_width); - processExtendButtons(available_width); - // if we have to show/extend some buttons but resized delta width is not enough... S32 processed_width = total_available_width - available_width; if (processed_width > delta_width) @@ -815,21 +1121,7 @@ void LLBottomTray::processWidthIncreased(S32 delta_width) // 1. use delta width of resizing required_to_process_width -= delta_width; - // 2. use width available via decreasing of nearby chat panel - S32 chatbar_shrink_width = required_to_process_width; - if (chatbar_available_shrink_width < chatbar_shrink_width) - { - chatbar_shrink_width = chatbar_available_shrink_width; - } - - log(mNearbyChatBar, "increase width: before applying compensative width"); - mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - chatbar_shrink_width, mNearbyChatBar->getRect().getHeight() ); - if (mNearbyChatBar) log(mNearbyChatBar, "after applying compensative width"); - lldebugs << chatbar_shrink_width << llendl; - - // 3. use width available via decreasing of chiclet panel - required_to_process_width -= chatbar_shrink_width; - + // 2. use width available via decreasing of chiclet panel if (required_to_process_width > 0) { mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_to_process_width, mChicletPanel->getParent()->getRect().getHeight()); @@ -844,10 +1136,10 @@ void LLBottomTray::processWidthIncreased(S32 delta_width) // how many space can nearby chatbar take? - S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth(); - if (delta_width > 0 && chatbar_panel_width_ < chatbar_panel_max_width) + S32 chatbar_panel_width_ = mChatBarContainer->getRect().getWidth(); + if (delta_width > 0 && chatbar_panel_width_ < mDesiredNearbyChatWidth) { - S32 delta_panel_max = chatbar_panel_max_width - chatbar_panel_width_; + S32 delta_panel_max = mDesiredNearbyChatWidth - chatbar_panel_width_; S32 delta_panel = llmin(delta_width, delta_panel_max); lldebugs << "Unprocesed delta width: " << delta_width << ", can be applied to chatbar: " << delta_panel_max @@ -855,9 +1147,13 @@ void LLBottomTray::processWidthIncreased(S32 delta_width) << llendl; delta_width -= delta_panel_max; - mNearbyChatBar->reshape(chatbar_panel_width_ + delta_panel, mNearbyChatBar->getRect().getHeight()); + mChatBarContainer->reshape(chatbar_panel_width_ + delta_panel, mChatBarContainer->getRect().getHeight()); log(mNearbyChatBar, "applied unprocessed delta width"); } + if (delta_width > 0) + { + processExtendButtons(delta_width); + } } void LLBottomTray::processShowButtons(S32& available_width) @@ -977,7 +1273,7 @@ void LLBottomTray::processShrinkButtons(S32& required_width, S32& buttons_freed_ S32 panel_min_width = 0; std::string panel_name = mSpeakPanel->getName(); - bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width, NULL); + bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width); if (!success) { lldebugs << "Panel was not found to get its min width: " << panel_name << llendl; @@ -1023,7 +1319,7 @@ void LLBottomTray::processShrinkButton(EResizeState processed_object_type, S32& S32 panel_width = panel->getRect().getWidth(); S32 panel_min_width = 0; std::string panel_name = panel->getName(); - bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width, NULL); + bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width); S32 possible_shrink_width = panel_width - panel_min_width; if (!success) @@ -1187,6 +1483,9 @@ void LLBottomTray::initResizeStateContainers() mButtonsProcessOrder.push_back(RS_BUTTON_WORLD_MAP); mButtonsProcessOrder.push_back(RS_BUTTON_MINI_MAP); + mButtonsOrder.push_back(RS_BUTTON_SPEAK); + mButtonsOrder.insert(mButtonsOrder.end(), mButtonsProcessOrder.begin(), mButtonsProcessOrder.end()); + // init default widths // process buttons that can be hidden on resize... @@ -1239,7 +1538,7 @@ void LLBottomTray::setButtonsControlsAndListeners() // set control name for Build button. It is not enough to link it with Button.SetFloaterToggle in xml std::string vis_control_name = LLFloaterReg::declareVisibilityControl("build"); // Set the button control value (toggle state) to the floater visibility control (Sets the value as well) - build_btn->setControlVariable(LLUI::sSettingGroups["floater"]->getControl(vis_control_name)); + build_btn->setControlVariable(LLFloater::getControlGroup()->getControl(vis_control_name)); } bool LLBottomTray::toggleShowButton(LLBottomTray::EResizeState button_type, const LLSD& new_visibility) @@ -1312,7 +1611,7 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible { // Calculate the possible shrunk width as difference between current and minimal widths const S32 chatbar_shrunk_width = - mNearbyChatBar->getRect().getWidth() - get_panel_min_width(mToolbarStack, mNearbyChatBar); + mChatBarContainer->getRect().getWidth() - get_panel_min_width(mToolbarStack, mChatBarContainer); S32 sum_of_min_widths = get_panel_min_width(mToolbarStack, mSpeakPanel); S32 sum_of_curr_widths = get_curr_width(mSpeakPanel); @@ -1332,7 +1631,7 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible // Minimal width of current panel S32 minimal_width = 0; - mToolbarStack->getPanelMinSize(cur_panel->getName(), &minimal_width, NULL); + mToolbarStack->getPanelMinSize(cur_panel->getName(), &minimal_width); if ( (available_width + possible_shrunk_width) >= minimal_width) { @@ -1409,10 +1708,12 @@ void LLBottomTray::processChatbarCustomization(S32 new_width) { if (NULL == mNearbyChatBar) return; - const S32 delta_width = mNearbyChatBar->getRect().getWidth() - new_width; + const S32 delta_width = mChatBarContainer->getRect().getWidth() - new_width; if (delta_width == 0) return; + mDesiredNearbyChatWidth = new_width; + LLView * chiclet_layout_panel = mChicletPanel->getParent(); const S32 chiclet_min_width = get_panel_min_width(mToolbarStack, chiclet_layout_panel); const S32 chiclet_panel_width = chiclet_layout_panel->getRect().getWidth(); diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index 05fed53936..095ccb7ffb 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -33,26 +33,48 @@ #ifndef LL_LLBOTTOMPANEL_H #define LL_LLBOTTOMPANEL_H -#include "llmenugl.h" - #include "llpanel.h" #include "llimview.h" -#include "llcombobox.h" +#include "llbutton.h" class LLChicletPanel; -class LLLineEditor; class LLLayoutStack; -class LLNotificationChiclet; class LLSpeakButton; class LLNearbyChatBar; class LLIMChiclet; class LLBottomTrayLite; +class LLLayoutPanel; +class LLMenuGL; // Build time optimization, generate once in .cpp file #ifndef LLBOTTOMTRAY_CPP extern template class LLBottomTray* LLSingleton<class LLBottomTray>::getInstance(); #endif +/** + * Class for buttons that should have drag'n'drop ability in bottomtray. + * These buttons pass mouse events handling to bottomtray. + */ +class LLBottomtrayButton : public LLButton +{ +public: + struct Params : public LLInitParam::Block<Params, LLButton::Params> + { + Params(){} + }; + /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); + /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); + /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); + +protected: + LLBottomtrayButton(const Params& p) + : LLButton(p) + { + + } + friend class LLUICtrlFactory; +}; + class LLBottomTray : public LLSingleton<LLBottomTray> , public LLPanel @@ -107,6 +129,20 @@ public: */ LLIMChiclet* createIMChiclet(const LLUUID& session_id); + // Below are methods that were introduced or overriden in bottomtray to handle drag'n'drop + + virtual void draw(); + + /** + * These three methods handle drag'n'drop, they may be called directly from child buttons. + * handleHover and other virtual handle* couldn't be used here, because we should call LLPanel::handle*, + * but x and y here are often outside of bottomtray. + */ + void onDraggableButtonHover(S32 x, S32 y); + void onDraggableButtonMouseDown(LLUICtrl* button, S32 x, S32 y); + void onDraggableButtonMouseUp(LLUICtrl* button, S32 x, S32 y); + + private: typedef enum e_resize_status_type { @@ -140,6 +176,29 @@ private: | RS_BUTTON_BUILD | RS_BUTTON_SEARCH | RS_BUTTON_WORLD_MAP | RS_BUTTON_MINI_MAP }EResizeState; + // Below are three methods that were introduced to handle drag'n'drop + + /** + * finds a panel under the specified LOCAL point + */ + LLPanel* findChildPanelByLocalCoords(S32 x, S32 y); + + /** + * checks whether the cursor is over an area where the dragged button may be dropped + */ + bool isCursorOverDraggableArea(S32 x, S32 y); + + /** + * Updates process(shrink/show/hide) order of buttons and order in which they'll be stored for further save/load. + * It is called when dragged button is dropped + */ + void updateButtonsOrdersAfterDnD(); + + // saves order of buttons to file on disk + void saveButtonsOrder(); + // reads order of buttons from file on disk + void loadButtonsOrder(); + /** * Updates child controls size and visibility when it is necessary to reduce total width. * @@ -366,6 +425,13 @@ private: * Contains order in which child buttons should be processed in show/hide, extend/shrink methods. */ resize_state_vec_t mButtonsProcessOrder; + /** + * Contains order in which child buttons are shown. + * It traces order of all bottomtray buttons that may change place via drag'n'drop and should + * save and load it between sessions. mButtonsProcessOrder is not enough for it because it contains only + * buttons that may be hidden. + */ + resize_state_vec_t mButtonsOrder; protected: @@ -377,16 +443,53 @@ protected: void onContextMenuItemClicked(const LLSD& userdata); bool onContextMenuItemEnabled(const LLSD& userdata); + // Either default or saved after user's manual resize width of nearby chat. + // Nearby chat will not always have it, because sometimes it can be shrunk on resize, + // but when possible it will be restored back to this value. + S32 mDesiredNearbyChatWidth; LLChicletPanel* mChicletPanel; LLPanel* mSpeakPanel; LLSpeakButton* mSpeakBtn; LLNearbyChatBar* mNearbyChatBar; + LLLayoutPanel* mChatBarContainer; LLLayoutStack* mToolbarStack; LLMenuGL* mBottomTrayContextMenu; LLButton* mCamButton; LLButton* mMovementButton; LLBottomTrayLite* mBottomTrayLite; bool mIsInLiteMode; + + // Drag'n'Drop + + /** + * Is true if mouse down happened on draggable button. + * Set false whether on drag start or on mouse up. + */ + bool mCheckForDrag; + /** + * These two variables hold corrdinates of mouse down on draggable button. + * They are used to compare with current coordinates of cursor and determine whether drag'n'drop should start. + */ + S32 mStartX; + S32 mStartY; + /** + * True if drag'n'drop is happening. + */ + bool mDragStarted; + + /** + * Pointer to panel which is currently dragged (though it seems to user that button is dragged, + * we are changing place of layout panel). + */ + LLPanel* mDraggedItem; + /** + * Panel before which the dragged button will be inserted. + */ + LLPanel* mLandingTab; + /** + * Image used to show position where dragged button will be dropped. + */ + LLUIImage* mImageDragIndication; }; #endif // LL_LLBOTTOMPANEL_H diff --git a/indra/newview/llbrowsernotification.cpp b/indra/newview/llbrowsernotification.cpp new file mode 100644 index 0000000000..d6a813d608 --- /dev/null +++ b/indra/newview/llbrowsernotification.cpp @@ -0,0 +1,48 @@ +/** + * @file llbrowsernotification.cpp + * @brief Notification Handler Class for browser popups + * + * $LicenseInfo:firstyear=2000&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + + +#include "llviewerprecompiledheaders.h" // must be first include + +#include "llnotificationhandler.h" +#include "llnotifications.h" +#include "llfloaterreg.h" +#include "llmediactrl.h" + +using namespace LLNotificationsUI; + +bool LLBrowserNotification::processNotification(const LLSD& notify) +{ + LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID()); + if (!notification) return false; + + LLMediaCtrl* media_instance = LLMediaCtrl::getInstance(notification->getPayload()["media_id"].asUUID()); + if (media_instance) + { + media_instance->showNotification(notification); + } + return false; +} diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index a03fe79512..00a343c99c 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -147,7 +147,7 @@ BOOL LLCallFloater::postBuild() childSetAction("leave_call_btn", boost::bind(&LLCallFloater::leaveCall, this)); - mNonAvatarCaller = getChild<LLNonAvatarCaller>("non_avatar_caller"); + mNonAvatarCaller = findChild<LLNonAvatarCaller>("non_avatar_caller"); mNonAvatarCaller->setVisible(FALSE); LLView *anchor_panel = LLBottomTray::getInstance()->getChild<LLView>("speak_flyout_btn"); diff --git a/indra/newview/llcallingcard.h b/indra/newview/llcallingcard.h index 47b0dcb903..057a4fe455 100644 --- a/indra/newview/llcallingcard.h +++ b/indra/newview/llcallingcard.h @@ -51,7 +51,7 @@ class LLFriendObserver public: // This enumeration is a way to refer to what changed in a more // human readable format. You can mask the value provided by - // chaged() to see if the observer is interested in the change. + // changed() to see if the observer is interested in the change. enum { NONE = 0, diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp index 967db21244..6e58be8174 100644 --- a/indra/newview/llchatbar.cpp +++ b/indra/newview/llchatbar.cpp @@ -126,7 +126,7 @@ BOOL LLChatBar::postBuild() mInputEditor->setPassDelete(TRUE); mInputEditor->setReplaceNewlinesWithSpaces(FALSE); - mInputEditor->setMaxTextLength(1023); + mInputEditor->setMaxTextLength(DB_CHAT_MSG_STR_LEN); mInputEditor->setEnableLineHistory(TRUE); mIsBuilt = TRUE; @@ -565,12 +565,20 @@ void LLChatBar::sendChatFromViewer(const std::string &utf8text, EChatType type, void LLChatBar::sendChatFromViewer(const LLWString &wtext, EChatType type, BOOL animate) { + // as soon as we say something, we no longer care about teaching the user + // how to chat + gWarningSettings.setBOOL("FirstOtherChatBeforeUser", FALSE); + // Look for "/20 foo" channel chats. S32 channel = 0; LLWString out_text = stripChannelNumber(wtext, &channel); std::string utf8_out_text = wstring_to_utf8str(out_text); - std::string utf8_text = wstring_to_utf8str(wtext); + if (!utf8_out_text.empty()) + { + utf8_out_text = utf8str_truncate(utf8_out_text, MAX_MSG_STR_LEN); + } + std::string utf8_text = wstring_to_utf8str(wtext); utf8_text = utf8str_trim(utf8_text); if (!utf8_text.empty()) { @@ -673,11 +681,30 @@ public: bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web) { - if (tokens.size() < 2) return false; + bool retval = false; + // Need at least 2 tokens to have a valid message. + if (tokens.size() < 2) + { + retval = false; + } + else + { S32 channel = tokens[0].asInteger(); + // VWR-19499 Restrict function to chat channels greater than 0. + if ((channel > 0) && (channel < 2147483647)) + { + retval = true; + // Say mesg on channel std::string mesg = tokens[1].asString(); send_chat_from_viewer(mesg, CHAT_TYPE_NORMAL, channel); - return true; + } + else + { + retval = false; + // Tell us this is an unsupported SLurl. + } + } + return retval; } }; diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 7204e6c39c..f962147b1f 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -107,7 +107,7 @@ public: static LLChatHistoryHeader* createInstance(const std::string& file_name) { LLChatHistoryHeader* pInstance = new LLChatHistoryHeader; - LLUICtrlFactory::getInstance()->buildPanel(pInstance, file_name); + pInstance->buildFromFile(file_name); return pInstance; } @@ -402,7 +402,7 @@ protected: return; } - LLTextBase* name = getChild<LLTextBase>("user_name"); + LLTextBox* name = getChild<LLTextBox>("user_name"); LLRect sticky_rect = name->getRect(); S32 icon_x = llmin(sticky_rect.mLeft + name->getTextBoundingRect().getWidth() + 7, sticky_rect.mRight - 3); sInfoCtrl->setOrigin(icon_x, sticky_rect.getCenterY() - sInfoCtrl->getRect().getHeight() / 2 ) ; @@ -502,12 +502,17 @@ void LLChatHistory::initFromParams(const LLChatHistory::Params& p) const S32 NEW_TEXT_NOTICE_HEIGHT = 20; - LLPanel::Params panel_p; + LLLayoutPanel::Params panel_p; panel_p.name = "spacer"; panel_p.background_visible = false; panel_p.has_border = false; panel_p.mouse_opaque = false; - stackp->addPanel(LLUICtrlFactory::create<LLPanel>(panel_p), 0, 30, S32_MAX, S32_MAX, true, false, LLLayoutStack::ANIMATE); + panel_p.min_dim = 30; + panel_p.max_dim = S32_MAX; + panel_p.auto_resize = true; + panel_p.user_resize = false; + + stackp->addPanel(LLUICtrlFactory::create<LLLayoutPanel>(panel_p), LLLayoutStack::ANIMATE); panel_p.name = "new_text_notice_holder"; LLRect new_text_notice_rect = getLocalRect(); @@ -516,7 +521,10 @@ void LLChatHistory::initFromParams(const LLChatHistory::Params& p) panel_p.background_opaque = true; panel_p.background_visible = true; panel_p.visible = false; - mMoreChatPanel = LLUICtrlFactory::create<LLPanel>(panel_p); + panel_p.min_dim = 0; + panel_p.auto_resize = false; + panel_p.user_resize = false; + mMoreChatPanel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p); LLTextBox::Params text_p(p.more_chat_text); text_p.rect = mMoreChatPanel->getLocalRect(); @@ -525,7 +533,7 @@ void LLChatHistory::initFromParams(const LLChatHistory::Params& p) mMoreChatText = LLUICtrlFactory::create<LLTextBox>(text_p, mMoreChatPanel); mMoreChatText->setClickedCallback(boost::bind(&LLChatHistory::onClickMoreText, this)); - stackp->addPanel(mMoreChatPanel, 0, 0, S32_MAX, S32_MAX, false, false, LLLayoutStack::ANIMATE); + stackp->addPanel(mMoreChatPanel, LLLayoutStack::ANIMATE); } @@ -766,7 +774,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL if (notification != NULL) { LLIMToastNotifyPanel* notify_box = new LLIMToastNotifyPanel( - notification, chat.mSessionID); + notification, chat.mSessionID, LLRect::null, !use_plain_text_chat_history); //we can't set follows in xml since it broke toasts behavior notify_box->setFollowsLeft(); notify_box->setFollowsRight(); diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h index fa1f2e04a4..ddc456a5d2 100644 --- a/indra/newview/llchathistory.h +++ b/indra/newview/llchathistory.h @@ -144,7 +144,7 @@ class LLChatHistory : public LLUICtrl S32 mTopHeaderPad; S32 mBottomHeaderPad; - LLPanel* mMoreChatPanel; + class LLLayoutPanel* mMoreChatPanel; LLTextBox* mMoreChatText; LLTextEditor* mEditor; typedef std::set<std::string> unread_chat_source_t; diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp index 35a244c461..b1c878ed76 100644 --- a/indra/newview/llchatitemscontainerctrl.cpp +++ b/indra/newview/llchatitemscontainerctrl.cpp @@ -57,7 +57,7 @@ static const S32 msg_height_pad = 5; LLNearbyChatToastPanel* LLNearbyChatToastPanel::createInstance() { LLNearbyChatToastPanel* item = new LLNearbyChatToastPanel(); - LLUICtrlFactory::getInstance()->buildPanel(item, "panel_chat_item.xml"); + item->buildFromFile("panel_chat_item.xml"); item->setFollows(FOLLOWS_NONE); return item; } diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index 29ead762d7..94c614fd0c 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -403,12 +403,20 @@ void LLCOFWearables::refresh() mCOFVersion = catp->getVersion(); + // Save current scrollbar position. + typedef std::map<LLFlatListView*, LLRect> scroll_pos_map_t; + scroll_pos_map_t saved_scroll_pos; + + saved_scroll_pos[mAttachments] = mAttachments->getVisibleContentRect(); + saved_scroll_pos[mClothing] = mClothing->getVisibleContentRect(); + saved_scroll_pos[mBodyParts] = mBodyParts->getVisibleContentRect(); + + // Save current selection. typedef std::vector<LLSD> values_vector_t; typedef std::map<LLFlatListView*, values_vector_t> selection_map_t; selection_map_t preserve_selection; - // Save current selection mAttachments->getSelectedValues(preserve_selection[mAttachments]); mClothing->getSelectedValues(preserve_selection[mClothing]); mBodyParts->getSelectedValues(preserve_selection[mBodyParts]); @@ -456,6 +464,15 @@ void LLCOFWearables::refresh() list->setCommitOnSelectionChange(true); } + + // Restore previous scrollbar position. + for (scroll_pos_map_t::const_iterator it = saved_scroll_pos.begin(); it != saved_scroll_pos.end(); ++it) + { + LLFlatListView* list = it->first; + LLRect scroll_pos = it->second; + + list->scrollToShowRect(scroll_pos); + } } @@ -714,4 +731,25 @@ void LLCOFWearables::onListRightClick(LLUICtrl* ctrl, S32 x, S32 y, LLListContex } } +void LLCOFWearables::selectClothing(LLWearableType::EType clothing_type) +{ + std::vector<LLPanel*> clothing_items; + + mClothing->getItems(clothing_items); + + std::vector<LLPanel*>::iterator it; + + for (it = clothing_items.begin(); it != clothing_items.end(); ++it ) + { + LLPanelClothingListItem* clothing_item = dynamic_cast<LLPanelClothingListItem*>(*it); + + if (clothing_item && clothing_item->getWearableType() == clothing_type) + { // clothing item has specified LLWearableType::EType. Select it and exit. + + mClothing->selectItem(clothing_item); + break; + } + } +} + //EOF diff --git a/indra/newview/llcofwearables.h b/indra/newview/llcofwearables.h index d981fa4196..1f8d6d0c94 100644 --- a/indra/newview/llcofwearables.h +++ b/indra/newview/llcofwearables.h @@ -86,6 +86,11 @@ public: LLCOFCallbacks& getCOFCallbacks() { return mCOFCallbacks; } + /** + * Selects first clothing item with specified LLWearableType::EType from clothing list + */ + void selectClothing(LLWearableType::EType clothing_type); + protected: void populateAttachmentsAndBodypartsLists(const LLInventoryModel::item_array_t& cof_items); diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp index 268d9958d1..a42677845e 100644 --- a/indra/newview/llcompilequeue.cpp +++ b/indra/newview/llcompilequeue.cpp @@ -89,7 +89,6 @@ LLFloaterScriptQueue::LLFloaterScriptQueue(const LLSD& key) : mDone(false), mMono(false) { - //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_queue.xml", FALSE); } // Destroys the object diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp index 654daa770e..2b92b228b3 100644 --- a/indra/newview/llcurrencyuimanager.cpp +++ b/indra/newview/llcurrencyuimanager.cpp @@ -164,6 +164,7 @@ void LLCurrencyUIManager::Impl::updateCurrencyInfo() keywordArgs.appendString( "secureSessionId", gAgent.getSecureSessionID().asString()); + keywordArgs.appendString("language", LLUI::getLanguage()); keywordArgs.appendInt("currencyBuy", mUserCurrencyBuy); keywordArgs.appendString("viewerChannel", gSavedSettings.getString("VersionChannelName")); keywordArgs.appendInt("viewerMajorVersion", LLVersionInfo::getMajor()); @@ -225,6 +226,7 @@ void LLCurrencyUIManager::Impl::startCurrencyBuy(const std::string& password) keywordArgs.appendString( "secureSessionId", gAgent.getSecureSessionID().asString()); + keywordArgs.appendString("language", LLUI::getLanguage()); keywordArgs.appendInt("currencyBuy", mUserCurrencyBuy); if (mUSDCurrencyEstimated) { diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp index ed35546ca3..a3d2941114 100644 --- a/indra/newview/lldynamictexture.cpp +++ b/indra/newview/lldynamictexture.cpp @@ -54,6 +54,13 @@ LLViewerDynamicTexture::LLViewerDynamicTexture(S32 width, S32 height, S32 compon { llassert((1 <= components) && (components <= 4)); + if(gGLManager.mDebugGPU) + { + if(components == 3) + { + mComponents = 4 ; //convert to 32bits. + } + } generateGLTexture(); llassert( 0 <= order && order < ORDER_COUNT ); diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index f0c2469977..5e10f60aba 100644 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -121,7 +121,6 @@ LLExpandableTextBox::LLTextBoxEx::LLTextBoxEx(const Params& p) void LLExpandableTextBox::LLTextBoxEx::reshape(S32 width, S32 height, BOOL called_from_parent) { - hideExpandText(); LLTextEditor::reshape(width, height, called_from_parent); if (getTextPixelHeight() > getRect().getHeight()) diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 29edbc2b03..e1e0dd8f3e 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -581,8 +581,8 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color) } else { - mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex); mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0); + mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex); } gGL.popMatrix(); diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index 36aee733fd..e693aae9a1 100644 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -125,7 +125,7 @@ BOOL LLFastTimerView::handleRightMouseDown(S32 x, S32 y, MASK mask) { S32 bar_idx = MAX_VISIBLE_HISTORY - ((y - mBarRect.mBottom) * (MAX_VISIBLE_HISTORY + 2) / mBarRect.getHeight()); bar_idx = llclamp(bar_idx, 0, MAX_VISIBLE_HISTORY); - mPrintStats = bar_idx; + mPrintStats = LLFastTimer::NamedTimer::HISTORY_NUM - mScrollIndex - bar_idx; } return FALSE; } @@ -142,6 +142,17 @@ LLFastTimer::NamedTimer* LLFastTimerView::getLegendID(S32 y) return NULL; } +BOOL LLFastTimerView::handleDoubleClick(S32 x, S32 y, MASK mask) +{ + for(timer_tree_iterator_t it = begin_timer_tree(LLFastTimer::NamedTimer::getRootNamedTimer()); + it != end_timer_tree(); + ++it) + { + (*it)->setCollapsed(false); + } + return TRUE; +} + BOOL LLFastTimerView::handleMouseDown(S32 x, S32 y, MASK mask) { @@ -955,7 +966,7 @@ void LLFastTimerView::draw() { legend_stat += ", "; } - first = true; + first = false; legend_stat += idp->getName(); if (idp->getCollapsed()) @@ -982,8 +993,7 @@ void LLFastTimerView::draw() U64 ticks; if (mPrintStats > 0) { - S32 hidx = (mPrintStats - 1) - mScrollIndex; - ticks = idp->getHistoricalCount(hidx); + ticks = idp->getHistoricalCount(mPrintStats); } else { diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h index e604a1f84d..5b43539b4e 100644 --- a/indra/newview/llfasttimerview.h +++ b/indra/newview/llfasttimerview.h @@ -55,6 +55,7 @@ private: public: virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); + virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); virtual BOOL handleHover(S32 x, S32 y, MASK mask); diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index 6b7a257a4b..751d5b8fcd 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -167,22 +167,13 @@ public: if (!region_name.empty()) { - LLToolTip::Params params; std::string extra_message = llformat("%s (%d, %d, %d)", region_name.c_str(), mLandmarkInfoGetter.getPosX(), mLandmarkInfoGetter.getPosY(), mLandmarkInfoGetter.getPosZ()); + LLToolTip::Params params; params.message = llformat("%s\n%s", getLabelSelected().c_str(), extra_message.c_str()); - - LLRect rect = calcScreenRect(); - LLFontGL* standart_font = LLFontGL::getFontSansSerif(); - if(standart_font) - { - S32 w = llmax((S32)(standart_font->getWidthF32(getLabelSelected())+0.5),(S32)(standart_font->getWidthF32(extra_message)+0.5)); - rect.mRight = rect.mLeft + w; - params.max_width = w; - } - - params.sticky_rect = rect; + params.max_width = 1000; + params.sticky_rect = calcScreenRect(); LLToolTipMgr::instance().show(params); } @@ -667,16 +658,23 @@ void LLFavoritesBarCtrl::draw() } } -LLXMLNodePtr LLFavoritesBarCtrl::getButtonXMLNode() +const LLButton::Params& LLFavoritesBarCtrl::getButtonParams() { - LLXMLNodePtr buttonXMLNode = NULL; - bool success = LLUICtrlFactory::getLayeredXMLNode("favorites_bar_button.xml", buttonXMLNode); - if (!success) + static LLButton::Params button_params; + static bool params_initialized = false; + + if (!params_initialized) { - llwarns << "Failed to create Favorites Bar button from favorites_bar_button.xml" << llendl; - buttonXMLNode = NULL; + LLXMLNodePtr button_xml_node; + if(LLUICtrlFactory::getLayeredXMLNode("favorites_bar_button.xml", button_xml_node)) + { + LLXUIParser parser; + parser.readXUI(button_xml_node, button_params, "favorites_bar_button.xml"); + } + params_initialized = true; } - return buttonXMLNode; + + return button_params; } void LLFavoritesBarCtrl::updateButtons() @@ -688,11 +686,8 @@ void LLFavoritesBarCtrl::updateButtons() return; } - static LLXMLNodePtr buttonXMLNode = getButtonXMLNode(); - if (buttonXMLNode.isNull()) - { - return; - } + const LLButton::Params& button_params = getButtonParams(); + if(mItems.empty()) { mBarLabel->setVisible(TRUE); @@ -768,7 +763,7 @@ void LLFavoritesBarCtrl::updateButtons() int j = first_changed_item_index; for (; j < mItems.count(); j++) { - last_new_button = createButton(mItems[j], buttonXMLNode, last_right_edge); + last_new_button = createButton(mItems[j], button_params, last_right_edge); if (!last_new_button) { break; @@ -786,8 +781,7 @@ void LLFavoritesBarCtrl::updateButtons() //or there are some new favorites, or width had been changed // so if we need to display chevron button, we must update dropdown items too. mUpdateDropDownItems = true; - S32 buttonHGap = 2; // default value - buttonXMLNode->getAttributeS32("left", buttonHGap); + S32 buttonHGap = button_params.rect.left; // default value LLRect rect; // Chevron button should stay right aligned rect.setOriginAndSize(getRect().mRight - mChevronButton->getRect().getWidth() - buttonHGap, 0, @@ -814,12 +808,10 @@ void LLFavoritesBarCtrl::updateButtons() } } -LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem> item, LLXMLNodePtr &buttonXMLNode, S32 x_offset) +LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem> item, const LLButton::Params& button_params, S32 x_offset) { - S32 def_button_width = 120; - buttonXMLNode->getAttributeS32("width", def_button_width); - S32 button_x_delta = 2; // default value - buttonXMLNode->getAttributeS32("left", button_x_delta); + S32 def_button_width = button_params.rect.width; + S32 button_x_delta = button_params.rect.left; // default value S32 curr_x = x_offset; /** @@ -837,13 +829,16 @@ LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem { return NULL; } - fav_btn = LLUICtrlFactory::defaultBuilder<LLFavoriteLandmarkButton>(buttonXMLNode, this, NULL); + LLButton::Params fav_btn_params(button_params); + fav_btn = LLUICtrlFactory::create<LLFavoriteLandmarkButton>(fav_btn_params); if (NULL == fav_btn) { llwarns << "Unable to create LLFavoriteLandmarkButton widget: " << item->getName() << llendl; return NULL; } + addChild(fav_btn); + LLRect butt_rect (fav_btn->getRect()); fav_btn->setLandmarkID(item->getUUID()); butt_rect.setOriginAndSize(curr_x + button_x_delta, fav_btn->getRect().mBottom, width, fav_btn->getRect().getHeight()); diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h index 2c6d8d1580..62f2825bbe 100644 --- a/indra/newview/llfavoritesbar.h +++ b/indra/newview/llfavoritesbar.h @@ -77,8 +77,8 @@ public: protected: void updateButtons(); - LLButton* createButton(const LLPointer<LLViewerInventoryItem> item, LLXMLNodePtr &root, S32 x_offset ); - LLXMLNodePtr getButtonXMLNode(); + LLButton* createButton(const LLPointer<LLViewerInventoryItem> item, const LLButton::Params& button_params, S32 x_offset ); + const LLButton::Params& getButtonParams(); BOOL collectFavoriteItems(LLInventoryModel::item_array_t &items); void onButtonClick(LLUUID id); diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index f32fcd6b7f..c8ff95ba77 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -73,8 +73,8 @@ const char FEATURE_TABLE_VER_FILENAME[] = "featuretable_linux.%s.txt"; const char FEATURE_TABLE_FILENAME[] = "featuretable_solaris.txt"; const char FEATURE_TABLE_VER_FILENAME[] = "featuretable_solaris.%s.txt"; #else -const char FEATURE_TABLE_FILENAME[] = "featuretable.txt"; -const char FEATURE_TABLE_VER_FILENAME[] = "featuretable.%s.txt"; +const char FEATURE_TABLE_FILENAME[] = "featuretable%s.txt"; +const char FEATURE_TABLE_VER_FILENAME[] = "featuretable%s.%s.txt"; #endif const char GPU_TABLE_FILENAME[] = "gpu_table.txt"; @@ -226,10 +226,30 @@ BOOL LLFeatureManager::loadFeatureTables() // first table is install with app std::string app_path = gDirUtilp->getAppRODataDir(); app_path += gDirUtilp->getDirDelimiter(); - app_path += FEATURE_TABLE_FILENAME; + std::string filename; + std::string http_filename; +#if LL_WINDOWS + std::string os_string = LLAppViewer::instance()->getOSInfo().getOSStringSimple(); + if (os_string.find("Microsoft Windows XP") == 0) + { + filename = llformat(FEATURE_TABLE_FILENAME, "_xp"); + http_filename = llformat(FEATURE_TABLE_VER_FILENAME, "_xp", LLVersionInfo::getVersion().c_str()); + } + else + { + filename = llformat(FEATURE_TABLE_FILENAME, ""); + http_filename = llformat(FEATURE_TABLE_VER_FILENAME, "", LLVersionInfo::getVersion().c_str()); + } +#else + filename = FEATURE_TABLE_FILENAME; + http_filename = llformat(FEATURE_TABLE_VER_FILENAME, LLVersionInfo::getVersion().c_str()); +#endif + + app_path += filename; + + // second table is downloaded with HTTP - std::string http_filename = llformat(FEATURE_TABLE_VER_FILENAME, LLVersionInfo::getVersion().c_str()); std::string http_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, http_filename); // use HTTP table if it exists @@ -494,7 +514,35 @@ private: std::string mFilename; }; -void fetch_table(std::string table) +void fetch_feature_table(std::string table) +{ + const std::string base = gSavedSettings.getString("FeatureManagerHTTPTable"); + +#if LL_WINDOWS + std::string os_string = LLAppViewer::instance()->getOSInfo().getOSStringSimple(); + std::string filename; + if (os_string.find("Microsoft Windows XP") == 0) + { + filename = llformat(table.c_str(), "_xp", LLVersionInfo::getVersion().c_str()); + } + else + { + filename = llformat(table.c_str(), "", LLVersionInfo::getVersion().c_str()); + } +#else + const std::string filename = llformat(table.c_str(), LLVersionInfo::getVersion().c_str()); +#endif + + const std::string url = base + "/" + filename; + + const std::string path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, filename); + + llinfos << "LLFeatureManager fetching " << url << " into " << path << llendl; + + LLHTTPClient::get(url, new LLHTTPFeatureTableResponder(path)); +} + +void fetch_gpu_table(std::string table) { const std::string base = gSavedSettings.getString("FeatureManagerHTTPTable"); @@ -512,8 +560,8 @@ void fetch_table(std::string table) // fetch table(s) from a website (S3) void LLFeatureManager::fetchHTTPTables() { - fetch_table(FEATURE_TABLE_VER_FILENAME); - fetch_table(GPU_TABLE_VER_FILENAME); + fetch_feature_table(FEATURE_TABLE_VER_FILENAME); + fetch_gpu_table(GPU_TABLE_VER_FILENAME); } diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp index b3fdf60b11..9044bc7f5c 100644 --- a/indra/newview/llfirstuse.cpp +++ b/indra/newview/llfirstuse.cpp @@ -36,7 +36,7 @@ // library includes #include "indra_constants.h" -#include "llnotificationsutil.h" +#include "llnotifications.h" // viewer includes #include "llagent.h" // for gAgent.inPrelude() @@ -45,7 +45,7 @@ #include "llappviewer.h" #include "lltracker.h" -/* + // static std::set<std::string> LLFirstUse::sConfigVariables; @@ -76,211 +76,109 @@ void LLFirstUse::resetFirstUse() gWarningSettings.setBOOL(*iter, TRUE); } } -*/ -/* - -// Called whenever the viewer detects that your balance went up -void LLFirstUse::useBalanceIncrease(S32 delta) -{ - if (gWarningSettings.getBOOL("FirstBalanceIncrease")) - { - gWarningSettings.setBOOL("FirstBalanceIncrease", FALSE); - - LLSD args; - args["AMOUNT"] = llformat("%d",delta); - LLNotificationsUtil::add("FirstBalanceIncrease", args); - } -} - - -// Called whenever the viewer detects your balance went down -void LLFirstUse::useBalanceDecrease(S32 delta) -{ - if (gWarningSettings.getBOOL("FirstBalanceDecrease")) - { - gWarningSettings.setBOOL("FirstBalanceDecrease", FALSE); - - LLSD args; - args["AMOUNT"] = llformat("%d",-delta); - LLNotificationsUtil::add("FirstBalanceDecrease", args); - } -} - // static -void LLFirstUse::useSit() +void LLFirstUse::otherAvatarChatFirst(bool enable) { - // Our orientation island uses sitting to teach vehicle driving - // so just never show this message. JC - //if (gWarningSettings.getBOOL("FirstSit")) - //{ - // gWarningSettings.setBOOL("FirstSit", FALSE); - // - // LLNotificationsUtil::add("FirstSit"); - //} + firstUseNotification("FirstOtherChatBeforeUser", enable, "HintChat", LLSD(), LLSD().with("target", "chat_bar").with("direction", "top_right").with("distance", 24)); } // static -void LLFirstUse::useMap() +void LLFirstUse::sit(bool enable) { - if (gWarningSettings.getBOOL("FirstMap")) - { - gWarningSettings.setBOOL("FirstMap", FALSE); - - LLNotificationsUtil::add("FirstMap"); - } + firstUseNotification("FirstSit", enable, "HintSit", LLSD(), LLSD().with("target", "stand_btn").with("direction", "top")); } // static -void LLFirstUse::useGoTo() +void LLFirstUse::newInventory(bool enable) { - // nothing for now JC + // turning this off until bug EXP-62 can be fixed (inventory hint appears for new users when their initial inventory is acquired) + // firstUseNotification("FirstInventoryOffer", enable, "HintInventory", LLSD(), LLSD().with("target", "inventory_btn").with("direction", "left")); } // static -void LLFirstUse::useBuild() +void LLFirstUse::useSandbox() { - if (gWarningSettings.getBOOL("FirstBuild")) - { - gWarningSettings.setBOOL("FirstBuild", FALSE); - - LLNotificationsUtil::add("FirstBuild"); - } + firstUseNotification("FirstSandbox", true, "FirstSandbox", LLSD().with("HOURS", SANDBOX_CLEAN_FREQ).with("TIME", SANDBOX_FIRST_CLEAN_HOUR)); } - - */ -/* -// static -void LLFirstUse::useLeftClickNoHit() -{ - if (gWarningSettings.getBOOL("FirstLeftClickNoHit")) - { - gWarningSettings.setBOOL("FirstLeftClickNoHit", FALSE); - LLNotificationsUtil::add("FirstLeftClickNoHit"); - } -} -*/ -/* // static -void LLFirstUse::useTeleport() +void LLFirstUse::notUsingDestinationGuide(bool enable) { - if (gWarningSettings.getBOOL("FirstTeleport")) - { - LLVector3d teleportDestination = LLTracker::getTrackedPositionGlobal(); - if(teleportDestination != LLVector3d::zero) - { - gWarningSettings.setBOOL("FirstTeleport", FALSE); - - LLNotificationsUtil::add("FirstTeleport"); - } - } + // not doing this yet + //firstUseNotification("FirstNotUseDestinationGuide", enable, "HintDestinationGuide", LLSD(), LLSD().with("target", "dest_guide_btn").with("direction", "left")); } -*/ -// static -void LLFirstUse::useOverrideKeys() -{ - // Our orientation island uses key overrides to teach vehicle driving - // so don't show this message until you get off OI. JC - if (!gAgent.inPrelude()) - { - if (gWarningSettings.getBOOL("FirstOverrideKeys")) - { - gWarningSettings.setBOOL("FirstOverrideKeys", FALSE); - LLNotificationsUtil::add("FirstOverrideKeys"); - } - } -} -/* // static -void LLFirstUse::useAttach() +void LLFirstUse::notUsingSidePanel(bool enable) { - // nothing for now + // not doing this yet + //firstUseNotification("FirstNotUseSidePanel", enable, "HintSidePanel", LLSD(), LLSD().with("target", "side_panel_btn").with("direction", "left")); } // static -void LLFirstUse::useAppearance() +void LLFirstUse::notMoving(bool enable) { - if (gWarningSettings.getBOOL("FirstAppearance")) - { - gWarningSettings.setBOOL("FirstAppearance", FALSE); - - LLNotificationsUtil::add("FirstAppearance"); - } + firstUseNotification("FirstNotMoving", enable, "HintMove", LLSD(), LLSD().with("target", "move_btn").with("direction", "top")); } // static -void LLFirstUse::useInventory() +void LLFirstUse::receiveLindens(bool enable) { - if (gWarningSettings.getBOOL("FirstInventory")) - { - gWarningSettings.setBOOL("FirstInventory", FALSE); - - LLNotificationsUtil::add("FirstInventory"); - } + firstUseNotification("FirstReceiveLindens", enable, "HintLindenDollar", LLSD(), LLSD().with("target", "linden_balance").with("direction", "bottom")); } -*/ -// static -void LLFirstUse::useSandbox() +//static +void LLFirstUse::firstUseNotification(const std::string& control_var, bool enable, const std::string& notification_name, LLSD args, LLSD payload) { - if (gWarningSettings.getBOOL("FirstSandbox")) - { - gWarningSettings.setBOOL("FirstSandbox", FALSE); + init(); - LLSD args; - args["HOURS"] = llformat("%d",SANDBOX_CLEAN_FREQ); - args["TIME"] = llformat("%d",SANDBOX_FIRST_CLEAN_HOUR); - LLNotificationsUtil::add("FirstSandbox", args); - } -} -/* -// static -void LLFirstUse::useFlexible() -{ - if (gWarningSettings.getBOOL("FirstFlexible")) + if (enable) { - gWarningSettings.setBOOL("FirstFlexible", FALSE); - - LLNotificationsUtil::add("FirstFlexible"); - } -} + if (gSavedSettings.getBOOL("EnableUIHints")) + { + LL_DEBUGS("LLFirstUse") << "Trigger first use notification " << notification_name << LL_ENDL; -// static -void LLFirstUse::useDebugMenus() -{ - if (gWarningSettings.getBOOL("FirstDebugMenus")) + // if notification doesn't already exist and this notification hasn't been disabled... + if (gWarningSettings.getBOOL(control_var)) + { // create new notification + LLNotifications::instance().add(LLNotification::Params().name(notification_name).substitutions(args).payload(payload.with("control_var", control_var))); + } + } + } + else { - gWarningSettings.setBOOL("FirstDebugMenus", FALSE); - - LLNotificationsUtil::add("FirstDebugMenus"); + LL_DEBUGS("LLFirstUse") << "Disabling first use notification " << notification_name << LL_ENDL; + LLNotifications::instance().cancelByName(notification_name); + // redundantly clear settings var here, in case there are no notifications to cancel + gWarningSettings.setBOOL(control_var, FALSE); } + } // static -void LLFirstUse::useSculptedPrim() +void LLFirstUse::init() { - if (gWarningSettings.getBOOL("FirstSculptedPrim")) + static bool initialized = false; + if (!initialized) { - gWarningSettings.setBOOL("FirstSculptedPrim", FALSE); - - LLNotificationsUtil::add("FirstSculptedPrim"); - + LLNotifications::instance().getChannel("Hints")->connectChanged(&processNotification); } + initialized = true; } -// static -void LLFirstUse::useMedia() +//static +bool LLFirstUse::processNotification(const LLSD& notify) { - if (gWarningSettings.getBOOL("FirstMedia")) + if (notify["sigtype"].asString() == "delete") { - gWarningSettings.setBOOL("FirstMedia", FALSE); - - // Popup removed as a short-term fix for EXT-1643. - // Ultimately, the plan is to kill all First Use dialogs - //LLNotificationsUtil::add("FirstMedia"); + LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID()); + if (notification) + { + // disable any future notifications + gWarningSettings.setBOOL(notification->getPayload()["control_var"], FALSE); + } } + return false; } -*/ diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h index 3c7551f6cb..174706f1f4 100644 --- a/indra/newview/llfirstuse.h +++ b/indra/newview/llfirstuse.h @@ -76,10 +76,13 @@ object or from inventory. 14. First time you create/edit a sculpted prim. */ +class LLNotification; + + class LLFirstUse { public: -/* + // Add a config variable to be reset on resetFirstUse() static void addConfigVariable(const std::string& var); @@ -87,35 +90,21 @@ public: static void disableFirstUse(); static void resetFirstUse(); - // These methods are called each time the appropriate action is - // taken. The functions themselves handle only showing the dialog - // the first time, or subsequent times if the user wishes. - static void useBalanceIncrease(S32 delta); - static void useBalanceDecrease(S32 delta); - static void useSit(); - static void useMap(); - static void useGoTo(); - static void useBuild(); -// static void useLeftClickNoHit(); - static void useTeleport(); -*/ - static void useOverrideKeys(); -/* - static void useAttach(); - static void useAppearance(); - static void useInventory(); - */ + static void otherAvatarChatFirst(bool enable = true); + static void sit(bool enable = true); + static void notUsingDestinationGuide(bool enable = true); + static void notUsingSidePanel(bool enable = true); + static void notMoving(bool enable = true); + static void newInventory(bool enable = true); + static void receiveLindens(bool enable = true); static void useSandbox(); -/* - static void useFlexible(); - static void useDebugMenus(); - static void useSculptedPrim(); - static void useMedia(); - protected: + static void firstUseNotification(const std::string& control_var, bool enable, const std::string& notification_name, LLSD args = LLSD(), LLSD payload = LLSD()); static std::set<std::string> sConfigVariables; -*/ + + static void init(); + static bool processNotification(const LLSD& notify); }; #endif diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index 62336b03bf..ccc3d90059 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -698,6 +698,8 @@ BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable) } volume->updateRelativeXform(); + + if (mRenderRes > -1) { LLFastTimer t(FTM_DO_FLEXIBLE_UPDATE); doFlexibleUpdate(); diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index 4bd3151f2e..d122d8780f 100644 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -100,7 +100,6 @@ public: LLFloaterAbout::LLFloaterAbout(const LLSD& key) : LLFloater(key) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_about.xml"); } diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp index 5cab770c42..252c7b51ae 100644 --- a/indra/newview/llfloaterauction.cpp +++ b/indra/newview/llfloaterauction.cpp @@ -74,7 +74,6 @@ LLFloaterAuction::LLFloaterAuction(const LLSD& key) : LLFloater(key), mParcelID(-1) { -// LLUICtrlFactory::getInstance()->buildFloater(this, "floater_auction.xml"); mCommitCallbackRegistrar.add("ClickSnapshot", boost::bind(&LLFloaterAuction::onClickSnapshot, this)); mCommitCallbackRegistrar.add("ClickSellToAnyone", boost::bind(&LLFloaterAuction::onClickSellToAnyone, this)); mCommitCallbackRegistrar.add("ClickStartAuction", boost::bind(&LLFloaterAuction::onClickStartAuction, this)); diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp index 9391c761b7..9f96a22f56 100644 --- a/indra/newview/llfloateravatarpicker.cpp +++ b/indra/newview/llfloateravatarpicker.cpp @@ -79,7 +79,6 @@ LLFloaterAvatarPicker::LLFloaterAvatarPicker(const LLSD& key) mNearMeListComplete(FALSE), mCloseOnSelect(FALSE) { -// LLUICtrlFactory::getInstance()->buildFloater(this, "floater_avatar_picker.xml"); mCommitCallbackRegistrar.add("Refresh.FriendList", boost::bind(&LLFloaterAvatarPicker::populateFriend, this)); } diff --git a/indra/newview/llfloateravatartextures.cpp b/indra/newview/llfloateravatartextures.cpp index 847462a6c3..efc020aa2a 100644 --- a/indra/newview/llfloateravatartextures.cpp +++ b/indra/newview/llfloateravatartextures.cpp @@ -46,7 +46,6 @@ LLFloaterAvatarTextures::LLFloaterAvatarTextures(const LLSD& id) : LLFloater(id), mID(id.asUUID()) { -// LLUICtrlFactory::getInstance()->buildFloater(this, "floater_avatar_textures.xml"); } LLFloaterAvatarTextures::~LLFloaterAvatarTextures() diff --git a/indra/newview/llfloaterbeacons.cpp b/indra/newview/llfloaterbeacons.cpp index 975c888a2b..3058eacd48 100644 --- a/indra/newview/llfloaterbeacons.cpp +++ b/indra/newview/llfloaterbeacons.cpp @@ -42,8 +42,6 @@ LLFloaterBeacons::LLFloaterBeacons(const LLSD& seed) : LLFloater(seed) { -// LLUICtrlFactory::getInstance()->buildFloater(this, "floater_beacons.xml"); - // Initialize pipeline states from saved settings. // OK to do at floater constructor time because beacons do not display unless the floater is open // therefore it is OK to not initialize the pipeline state before needed. diff --git a/indra/newview/llfloaterbuildoptions.cpp b/indra/newview/llfloaterbuildoptions.cpp index 30e9428df9..e59693aa92 100644 --- a/indra/newview/llfloaterbuildoptions.cpp +++ b/indra/newview/llfloaterbuildoptions.cpp @@ -46,7 +46,6 @@ LLFloaterBuildOptions::LLFloaterBuildOptions(const LLSD& key) : LLFloater(key) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_build_options.xml"); } LLFloaterBuildOptions::~LLFloaterBuildOptions() diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp index 766fc0723c..d2138bcb3c 100644 --- a/indra/newview/llfloaterbulkpermission.cpp +++ b/indra/newview/llfloaterbulkpermission.cpp @@ -63,7 +63,6 @@ LLFloaterBulkPermission::LLFloaterBulkPermission(const LLSD& seed) mDone(FALSE) { mID.generate(); -// LLUICtrlFactory::getInstance()->buildFloater(this,"floater_bulk_perms.xml"); mCommitCallbackRegistrar.add("BulkPermission.Apply", boost::bind(&LLFloaterBulkPermission::onApplyBtn, this)); mCommitCallbackRegistrar.add("BulkPermission.Close", boost::bind(&LLFloaterBulkPermission::onCloseBtn, this)); mCommitCallbackRegistrar.add("BulkPermission.CheckAll", boost::bind(&LLFloaterBulkPermission::onCheckAll, this)); diff --git a/indra/newview/llfloaterbump.cpp b/indra/newview/llfloaterbump.cpp index e925796526..c9275ce8cc 100644 --- a/indra/newview/llfloaterbump.cpp +++ b/indra/newview/llfloaterbump.cpp @@ -51,7 +51,6 @@ LLFloaterBump::LLFloaterBump(const LLSD& key) : LLFloater(key) { if(gNoRender) return; - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_bumps.xml"); } diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp index 32add57737..f46a2be0fa 100644 --- a/indra/newview/llfloaterbuy.cpp +++ b/indra/newview/llfloaterbuy.cpp @@ -51,7 +51,6 @@ LLFloaterBuy::LLFloaterBuy(const LLSD& key) : LLFloater(key) { -// LLUICtrlFactory::getInstance()->buildFloater(this, "floater_buy_object.xml"); } BOOL LLFloaterBuy::postBuild() diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp index 77fb5590df..a7388d21a3 100644 --- a/indra/newview/llfloaterbuycontents.cpp +++ b/indra/newview/llfloaterbuycontents.cpp @@ -41,6 +41,7 @@ #include "llinventorydefines.h" #include "llinventoryfunctions.h" #include "llinventorymodel.h" // for gInventory +#include "llfirstuse.h" #include "llfloaterreg.h" #include "llfloaterinventory.h" // for LLInventoryIcon::getIcon #include "llnotificationsutil.h" @@ -54,7 +55,6 @@ LLFloaterBuyContents::LLFloaterBuyContents(const LLSD& key) : LLFloater(key) { -// LLUICtrlFactory::getInstance()->buildFloater(this, "floater_buy_contents.xml"); } BOOL LLFloaterBuyContents::postBuild() @@ -284,6 +284,10 @@ void LLFloaterBuyContents::onClickBuy() // it doesn't match region info then sale is canceled. LLSelectMgr::getInstance()->sendBuy(gAgent.getID(), category_id, mSaleInfo); + // NOTE: do this here instead of on receipt of object, since contents are transfered + // via a generic BulkUpdateInventory message with no way of distinguishing it from + // other inventory operations + LLFirstUse::newInventory(); closeFloater(); } diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 69824b3843..e48e1ab64f 100644 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -294,7 +294,6 @@ LLFloaterBuyLandUI::LLFloaterBuyLandUI(const LLSD& key) { LLViewerParcelMgr::getInstance()->addObserver(&mParcelSelectionObserver); -// LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_buy_land.xml"); } LLFloaterBuyLandUI::~LLFloaterBuyLandUI() @@ -758,6 +757,7 @@ void LLFloaterBuyLandUI::runWebSitePrep(const std::string& password) keywordArgs.appendString( "secureSessionId", gAgent.getSecureSessionID().asString()); + keywordArgs.appendString("language", LLUI::getLanguage()); keywordArgs.appendString("levelId", newLevel); keywordArgs.appendInt("billableArea", mIsForGroup ? 0 : mParcelBillableArea); diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index f181872faa..73715e4726 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -351,7 +351,7 @@ BOOL LLFloaterCamera::postBuild() setTitleVisible(TRUE); // restore title visibility after chrome applying mRotate = getChild<LLJoystickCameraRotate>(ORBIT); - mZoom = getChild<LLPanelCameraZoom>(ZOOM); + mZoom = findChild<LLPanelCameraZoom>(ZOOM); mTrack = getChild<LLJoystickCameraTrack>(PAN); assignButton2Mode(CAMERA_CTRL_MODE_MODES, "avatarview_btn"); diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp index 89e745f651..69f1774ff8 100644 --- a/indra/newview/llfloatercolorpicker.cpp +++ b/indra/newview/llfloatercolorpicker.cpp @@ -107,9 +107,8 @@ LLFloaterColorPicker::LLFloaterColorPicker (LLColorSwatchCtrl* swatch, BOOL show mCanApplyImmediately ( show_apply_immediate ), mContextConeOpacity ( 0.f ) { - // build the majority of the gui using the factory builder - LLUICtrlFactory::getInstance()->buildFloater ( this, "floater_color_picker.xml", NULL ); - + buildFromFile ( "floater_color_picker.xml"); + // create user interface for this picker createUI (); diff --git a/indra/newview/llfloaterdaycycle.cpp b/indra/newview/llfloaterdaycycle.cpp index aacb543267..22816ee802 100644 --- a/indra/newview/llfloaterdaycycle.cpp +++ b/indra/newview/llfloaterdaycycle.cpp @@ -59,7 +59,6 @@ const F32 LLFloaterDayCycle::sHoursPerDay = 24.0f; LLFloaterDayCycle::LLFloaterDayCycle(const LLSD& key) : LLFloater(key) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_day_cycle_options.xml"); } BOOL LLFloaterDayCycle::postBuild() diff --git a/indra/newview/llfloaterenvsettings.cpp b/indra/newview/llfloaterenvsettings.cpp index 337d4934e1..fcaef1f34b 100644 --- a/indra/newview/llfloaterenvsettings.cpp +++ b/indra/newview/llfloaterenvsettings.cpp @@ -50,7 +50,6 @@ LLFloaterEnvSettings::LLFloaterEnvSettings(const LLSD& key) : LLFloater(key) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_env_settings.xml"); } // virtual LLFloaterEnvSettings::~LLFloaterEnvSettings() diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp index f95112a8ab..2dbe324586 100644 --- a/indra/newview/llfloatergodtools.cpp +++ b/indra/newview/llfloatergodtools.cpp @@ -121,8 +121,6 @@ LLFloaterGodTools::LLFloaterGodTools(const LLSD& key) mFactoryMap["region"] = LLCallbackMap(createPanelRegion, this); mFactoryMap["objects"] = LLCallbackMap(createPanelObjects, this); mFactoryMap["request"] = LLCallbackMap(createPanelRequest, this); -// LLUICtrlFactory::getInstance()->buildFloater(this, "floater_god_tools.xml"); - } BOOL LLFloaterGodTools::postBuild() diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp index 3cd2154531..234a09d157 100644 --- a/indra/newview/llfloatergroups.cpp +++ b/indra/newview/llfloatergroups.cpp @@ -338,11 +338,10 @@ void LLPanelGroups::onGroupList(LLUICtrl* ctrl, void* userdata) if(self) self->enableButtons(); } -void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 powers_mask) +void init_group_list(LLScrollListCtrl* group_list, const LLUUID& highlight_id, U64 powers_mask) { S32 count = gAgent.mGroups.count(); LLUUID id; - LLCtrlListInterface *group_list = ctrl->getListInterface(); if (!group_list) return; group_list->operateOnAll(LLCtrlListInterface::OP_DELETE); @@ -366,10 +365,12 @@ void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 pow element["columns"][0]["font"]["name"] = "SANSSERIF"; element["columns"][0]["font"]["style"] = style; - group_list->addElement(element, ADD_SORTED); + group_list->addElement(element); } } + group_list->sortOnce(0, TRUE); + // add "none" to list at top { std::string style = "NORMAL"; diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp index 2985626bd7..77af054522 100644 --- a/indra/newview/llfloaterhardwaresettings.cpp +++ b/indra/newview/llfloaterhardwaresettings.cpp @@ -56,7 +56,6 @@ LLFloaterHardwareSettings::LLFloaterHardwareSettings(const LLSD& key) mFogRatio(0.0), mProbeHardwareOnStartup(FALSE) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_hardware_settings.xml"); } LLFloaterHardwareSettings::~LLFloaterHardwareSettings() diff --git a/indra/newview/llfloaterhud.cpp b/indra/newview/llfloaterhud.cpp index 930bbe9e6b..ba8e99cb7e 100644 --- a/indra/newview/llfloaterhud.cpp +++ b/indra/newview/llfloaterhud.cpp @@ -60,8 +60,6 @@ LLFloaterHUD::LLFloaterHUD(const LLSD& key) return; } - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_hud.xml"); - // Don't grab the focus as it will impede performing in-world actions // while using the HUD setIsChrome(TRUE); diff --git a/indra/newview/llfloaterimportcollada.cpp b/indra/newview/llfloaterimportcollada.cpp index 000347f68c..dd1cf67ebf 100644 --- a/indra/newview/llfloaterimportcollada.cpp +++ b/indra/newview/llfloaterimportcollada.cpp @@ -29,8 +29,11 @@ * $/LicenseInfo$ */ + #include "llviewerprecompiledheaders.h" +#if 0 //DEPRECATED + #include "llfloaterimportcollada.h" #include "dae.h" @@ -1111,3 +1114,4 @@ void LLImportCollada::onCommitCancel(LLUICtrl*, void*) getInstance()->endImport(); } +#endif diff --git a/indra/newview/llfloaterimportcollada.h b/indra/newview/llfloaterimportcollada.h index 4eb263901b..a165bb8dca 100644 --- a/indra/newview/llfloaterimportcollada.h +++ b/indra/newview/llfloaterimportcollada.h @@ -30,6 +30,8 @@ * $/LicenseInfo$ */ +#if 0 //DEPRECATED + #ifndef LL_LLFLOATERIMPORTCOLLADA_H #define LL_LLFLOATERIMPORTCOLLADA_H @@ -136,3 +138,5 @@ private: }; #endif // LL_LLFLOATERIMPORTCOLLADA_H + +#endif //DEPRECATED diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp index 8e7f7e083c..691f1b206c 100644 --- a/indra/newview/llfloaterinspect.cpp +++ b/indra/newview/llfloaterinspect.cpp @@ -47,7 +47,6 @@ LLFloaterInspect::LLFloaterInspect(const LLSD& key) : LLFloater(key), mDirty(FALSE) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inspect.xml"); mCommitCallbackRegistrar.add("Inspect.OwnerProfile", boost::bind(&LLFloaterInspect::onClickOwnerProfile, this)); mCommitCallbackRegistrar.add("Inspect.CreatorProfile", boost::bind(&LLFloaterInspect::onClickCreatorProfile, this)); mCommitCallbackRegistrar.add("Inspect.SelectObject", boost::bind(&LLFloaterInspect::onSelectObject, this)); diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp index 4bffd41d29..1e15b86762 100644 --- a/indra/newview/llfloaterinventory.cpp +++ b/indra/newview/llfloaterinventory.cpp @@ -60,7 +60,7 @@ LLFloaterInventory::~LLFloaterInventory() BOOL LLFloaterInventory::postBuild() { - mPanelMainInventory = getChild<LLPanelMainInventory>("Inventory Panel"); + mPanelMainInventory = findChild<LLPanelMainInventory>("Inventory Panel"); return TRUE; } diff --git a/indra/newview/llfloaterjoystick.cpp b/indra/newview/llfloaterjoystick.cpp index e1994bb8bc..c37798c330 100644 --- a/indra/newview/llfloaterjoystick.cpp +++ b/indra/newview/llfloaterjoystick.cpp @@ -44,8 +44,6 @@ LLFloaterJoystick::LLFloaterJoystick(const LLSD& data) : LLFloater(data) { - //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_joystick.xml"); - initFromSettings(); } diff --git a/indra/newview/llfloaterlagmeter.cpp b/indra/newview/llfloaterlagmeter.cpp index a92273521f..68b1770bb2 100644 --- a/indra/newview/llfloaterlagmeter.cpp +++ b/indra/newview/llfloaterlagmeter.cpp @@ -47,7 +47,6 @@ const std::string LAG_GOOD_IMAGE_NAME = "lag_status_good.tga"; LLFloaterLagMeter::LLFloaterLagMeter(const LLSD& key) : LLFloater(key) { -// LLUICtrlFactory::getInstance()->buildFloater(this, "floater_lagmeter.xml"); mCommitCallbackRegistrar.add("LagMeter.ClickShrink", boost::bind(&LLFloaterLagMeter::onClickShrink, this)); } diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 625b443abc..a1692d2b76 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -254,8 +254,6 @@ LLFloaterLand::LLFloaterLand(const LLSD& seed) mFactoryMap["land_media_panel"] = LLCallbackMap(createPanelLandMedia, this); mFactoryMap["land_access_panel"] = LLCallbackMap(createPanelLandAccess, this); - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_about_land.xml", false); - sObserver = new LLParcelSelectionObserver(); LLViewerParcelMgr::getInstance()->addObserver( sObserver ); } @@ -2440,7 +2438,7 @@ void LLPanelLandAccess::refresh() suffix.append(" " + parent_floater->getString("Remaining") + ")"); } if (mListAccess) - mListAccess->addNameItem(entry.mID, ADD_SORTED, TRUE, suffix); + mListAccess->addNameItem(entry.mID, ADD_DEFAULT, TRUE, suffix); } } @@ -2481,7 +2479,7 @@ void LLPanelLandAccess::refresh() } suffix.append(" " + parent_floater->getString("Remaining") + ")"); } - mListBanned->addNameItem(entry.mID, ADD_SORTED, TRUE, suffix); + mListBanned->addNameItem(entry.mID, ADD_DEFAULT, TRUE, suffix); } } diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp index 31f20fbd29..98e9b74278 100644 --- a/indra/newview/llfloaterlandholdings.cpp +++ b/indra/newview/llfloaterlandholdings.cpp @@ -60,7 +60,6 @@ LLFloaterLandHoldings::LLFloaterLandHoldings(const LLSD& key) mSortColumn(""), mSortAscending(TRUE) { -// LLUICtrlFactory::getInstance()->buildFloater(floater, "floater_land_holdings.xml"); } BOOL LLFloaterLandHoldings::postBuild() @@ -69,10 +68,9 @@ BOOL LLFloaterLandHoldings::postBuild() childSetAction("Show on Map", onClickMap, this); // Grant list - getChild<LLScrollListCtrl>("grant list")->setDoubleClickCallback(onGrantList, this); - - LLCtrlListInterface *list = childGetListInterface("grant list"); - if (!list) return TRUE; + LLScrollListCtrl* grant_list = getChild<LLScrollListCtrl>("grant list"); + grant_list->sortByColumnIndex(0, TRUE); + grant_list->setDoubleClickCallback(onGrantList, this); S32 count = gAgent.mGroups.count(); for(S32 i = 0; i < count; ++i) @@ -91,7 +89,7 @@ BOOL LLFloaterLandHoldings::postBuild() element["columns"][1]["value"] = areastr; element["columns"][1]["font"] = "SANSSERIF"; - list->addElement(element, ADD_SORTED); + grant_list->addElement(element); } center(); diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp index df176a1f6d..d0b3789f73 100644 --- a/indra/newview/llfloatermap.cpp +++ b/indra/newview/llfloatermap.cpp @@ -53,7 +53,10 @@ // // Constants // -const F32 MAP_MINOR_DIR_THRESHOLD = 0.08f; + +// The minor cardinal direction labels are hidden if their height is more +// than this proportion of the map. +const F32 MAP_MINOR_DIR_THRESHOLD = 0.07f; const S32 MAP_PADDING_LEFT = 0; const S32 MAP_PADDING_TOP = 2; const S32 MAP_PADDING_RIGHT = 2; @@ -75,7 +78,6 @@ LLFloaterMap::LLFloaterMap(const LLSD& key) mTextBoxSouthWest(NULL), mMap(NULL) { - //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_map.xml", FALSE); } LLFloaterMap::~LLFloaterMap() diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp index 434d0681ab..d20092e344 100644 --- a/indra/newview/llfloatermediabrowser.cpp +++ b/indra/newview/llfloatermediabrowser.cpp @@ -45,7 +45,11 @@ #include "llviewermedia.h" #include "llviewerparcelmedia.h" #include "llcombobox.h" +#include "llwindow.h" +#include "lllayoutstack.h" +#include "llcheckboxctrl.h" +#include "llnotifications.h" // TEMP #include "llsdutil.h" @@ -53,10 +57,124 @@ LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& key) : LLFloater(key) { -// LLUICtrlFactory::getInstance()->buildFloater(this, "floater_media_browser.xml"); +} +//static +void LLFloaterMediaBrowser::create(const std::string &url, const std::string& target, const std::string& uuid) +{ + lldebugs << "url = " << url << ", target = " << target << ", uuid = " << uuid << llendl; + + std::string tag = target; + + if(target.empty() || target == "_blank") + { + if(!uuid.empty()) + { + tag = uuid; + } + else + { + // create a unique tag for this instance + LLUUID id; + id.generate(); + tag = id.asString(); + } + } + + S32 browser_window_limit = gSavedSettings.getS32("MediaBrowserWindowLimit"); + + if(LLFloaterReg::findInstance("media_browser", tag) != NULL) + { + // There's already a media browser for this tag, so we won't be opening a new window. + } + else if(browser_window_limit != 0) + { + // showInstance will open a new window. Figure out how many media browsers are already open, + // and close the least recently opened one if this will put us over the limit. + + LLFloaterReg::const_instance_list_t &instances = LLFloaterReg::getFloaterList("media_browser"); + lldebugs << "total instance count is " << instances.size() << llendl; + + for(LLFloaterReg::const_instance_list_t::const_iterator iter = instances.begin(); iter != instances.end(); iter++) + { + lldebugs << " " << (*iter)->getKey() << llendl; + } + + if(instances.size() >= (size_t)browser_window_limit) + { + // Destroy the least recently opened instance + (*instances.begin())->closeFloater(); + } + } + + LLFloaterMediaBrowser *browser = dynamic_cast<LLFloaterMediaBrowser*> (LLFloaterReg::showInstance("media_browser", tag)); + llassert(browser); + if(browser) + { + browser->mUUID = uuid; + + // tell the browser instance to load the specified URL + browser->openMedia(url, target); + LLViewerMedia::proxyWindowOpened(target, uuid); + } } +//static +void LLFloaterMediaBrowser::closeRequest(const std::string &uuid) +{ + LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("media_browser"); + lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl; + for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter) + { + LLFloaterMediaBrowser* i = dynamic_cast<LLFloaterMediaBrowser*>(*iter); + lldebugs << " " << i->mUUID << llendl; + if (i && i->mUUID == uuid) + { + i->closeFloater(false); + return; + } + } +} + +//static +void LLFloaterMediaBrowser::geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height) +{ + LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("media_browser"); + lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl; + for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter) + { + LLFloaterMediaBrowser* i = dynamic_cast<LLFloaterMediaBrowser*>(*iter); + lldebugs << " " << i->mUUID << llendl; + if (i && i->mUUID == uuid) + { + i->geometryChanged(x, y, width, height); + return; + } +} +} + +void LLFloaterMediaBrowser::geometryChanged(S32 x, S32 y, S32 width, S32 height) +{ + // Make sure the layout of the browser control is updated, so this calculation is correct. + LLLayoutStack::updateClass(); + + // TODO: need to adjust size and constrain position to make sure floaters aren't moved outside the window view, etc. + LLCoordWindow window_size; + getWindow()->getSize(&window_size); + + // Adjust width and height for the size of the chrome on the Media Browser window. + width += getRect().getWidth() - mBrowser->getRect().getWidth(); + height += getRect().getHeight() - mBrowser->getRect().getHeight(); + + LLRect geom; + geom.setOriginAndSize(x, window_size.mY - (y + height), width, height); + + lldebugs << "geometry change: " << geom << llendl; + + handleReshape(geom,false); +} + + void LLFloaterMediaBrowser::draw() { getChildView("go")->setEnabled(!mAddressCombo->getValue().asString().empty()); @@ -99,6 +217,7 @@ BOOL LLFloaterMediaBrowser::postBuild() mAddressCombo = getChild<LLComboBox>("address"); mAddressCombo->setCommitCallback(onEnterAddress, this); + mAddressCombo->sortByName(); childSetAction("back", onClickBack, this); childSetAction("forward", onClickForward, this); @@ -114,6 +233,7 @@ BOOL LLFloaterMediaBrowser::postBuild() childSetAction("assign", onClickAssign, this); buildURLHistory(); + return TRUE; } @@ -154,6 +274,7 @@ std::string LLFloaterMediaBrowser::getSupportURL() //virtual void LLFloaterMediaBrowser::onClose(bool app_quitting) { + LLViewerMedia::proxyWindowClosed(mUUID); //setVisible(FALSE); destroy(); } @@ -170,7 +291,17 @@ void LLFloaterMediaBrowser::handleMediaEvent(LLPluginClassMedia* self, EMediaEve getChildView("back")->setEnabled(self->getHistoryBackAvailable()); getChildView("forward")->setEnabled(self->getHistoryForwardAvailable()); } + else if(event == MEDIA_EVENT_CLOSE_REQUEST) + { + // The browser instance wants its window closed. + closeFloater(); + } + else if(event == MEDIA_EVENT_GEOMETRY_CHANGE) + { + geometryChanged(self->getGeometryX(), self->getGeometryY(), self->getGeometryWidth(), self->getGeometryHeight()); + } } + void LLFloaterMediaBrowser::setCurrentURL(const std::string& url) { mCurrentURL = url; @@ -179,7 +310,7 @@ void LLFloaterMediaBrowser::setCurrentURL(const std::string& url) if (mCurrentURL != "about:blank") { mAddressCombo->remove(mCurrentURL); - mAddressCombo->add(mCurrentURL, ADD_SORTED); + mAddressCombo->add(mCurrentURL); mAddressCombo->selectByValue(mCurrentURL); // Serialize url history @@ -191,12 +322,6 @@ void LLFloaterMediaBrowser::setCurrentURL(const std::string& url) getChildView("reload")->setEnabled(TRUE); } -void LLFloaterMediaBrowser::onOpen(const LLSD& media_url) -{ - LLFloater::onOpen(media_url); - openMedia(media_url.asString()); -} - //static void LLFloaterMediaBrowser::onEnterAddress(LLUICtrl* ctrl, void* user_data) { @@ -322,9 +447,12 @@ void LLFloaterMediaBrowser::onClickSeek(void* user_data) if(self->mBrowser->getMediaPlugin()) self->mBrowser->getMediaPlugin()->start(2.0f); } -void LLFloaterMediaBrowser::openMedia(const std::string& media_url) +void LLFloaterMediaBrowser::openMedia(const std::string& media_url, const std::string& target) { mBrowser->setHomePageUrl(media_url); + mBrowser->setTarget(target); mBrowser->navigateTo(media_url); setCurrentURL(media_url); } + + diff --git a/indra/newview/llfloatermediabrowser.h b/indra/newview/llfloatermediabrowser.h index c315f9e797..8eb6c89e1c 100644 --- a/indra/newview/llfloatermediabrowser.h +++ b/indra/newview/llfloatermediabrowser.h @@ -39,23 +39,30 @@ class LLComboBox; class LLMediaCtrl; +class LLNotification; class LLFloaterMediaBrowser : public LLFloater, public LLViewerMediaObserver { public: + LOG_CLASS(LLFloaterMediaBrowser); LLFloaterMediaBrowser(const LLSD& key); + static void create(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null); + + static void closeRequest(const std::string &uuid); + static void geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height); + void geometryChanged(S32 x, S32 y, S32 width, S32 height); + /*virtual*/ BOOL postBuild(); /*virtual*/ void onClose(bool app_quitting); /*virtual*/ void draw(); - /*virtual*/ void onOpen(const LLSD& key); // inherited from LLViewerMediaObserver /*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event); - void openMedia(const std::string& media_url); + void openMedia(const std::string& media_url, const std::string& target); void buildURLHistory(); std::string getSupportURL(); void setCurrentURL(const std::string& url); @@ -77,6 +84,8 @@ private: LLMediaCtrl* mBrowser; LLComboBox* mAddressCombo; std::string mCurrentURL; + boost::shared_ptr<LLNotification> mCurNotification; + std::string mUUID; }; #endif // LL_LLFLOATERMEDIABROWSER_H diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 088c9e6546..f98a708dae 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -297,6 +297,14 @@ BOOL LLFloaterModelPreview::postBuild() childSetCommitCallback("preview_lod_combo", onPreviewLODCommit, this); + childSetCommitCallback("upload_skin", onUploadSkinCommit, this); + childSetCommitCallback("upload_joints", onUploadJointsCommit, this); + + childSetCommitCallback("debug scale", onDebugScaleCommit, this); + + childDisable("upload_skin"); + childDisable("upload_joints"); + const U32 width = 512; const U32 height = 512; @@ -318,6 +326,11 @@ LLFloaterModelPreview::~LLFloaterModelPreview() { sInstance = NULL; + if ( mModelPreview->containsRiggedAsset() ) + { + gAgentAvatarp->resetJointPositions(); + } + delete mModelPreview; if (mGLName) @@ -343,6 +356,23 @@ void LLFloaterModelPreview::setLODMode(S32 lod, S32 mode) { if (mode == 0) { + if (lod != LLModel::LOD_PHYSICS) + { + for (S32 i = lod; i > 0; i--) + { + mModelPreview->clearModel(lod); + } + } + else + { + mModelPreview->clearModel(lod); + } + + mModelPreview->refresh(); + mModelPreview->calcResourceCost(); + } + else if (mode == 1) + { loadModel(lod); } else if (mode != mModelPreview->mLODMode[lod]) @@ -356,7 +386,7 @@ void LLFloaterModelPreview::setLODMode(S32 lod, S32 mode) LLSpinCtrl* lim = getChild<LLSpinCtrl>(limit_name[lod], TRUE); - if (mode == 1) //triangle count + if (mode == 2) //triangle count { U32 tri_count = 0; for (LLModelLoader::model_list::iterator iter = mModelPreview->mBaseModel.begin(); @@ -384,6 +414,48 @@ void LLFloaterModelPreview::setLimit(S32 lod, S32 limit) } } +//static +void LLFloaterModelPreview::onDebugScaleCommit(LLUICtrl*,void* userdata) +{ + LLFloaterModelPreview *fp =(LLFloaterModelPreview *)userdata; + + if (!fp->mModelPreview) + { + return; + } + + fp->mModelPreview->calcResourceCost(); +} + +//static +void LLFloaterModelPreview::onUploadJointsCommit(LLUICtrl*,void* userdata) +{ + LLFloaterModelPreview *fp =(LLFloaterModelPreview *)userdata; + + if (!fp->mModelPreview) + { + return; + } + + fp->mModelPreview->refresh(); +} + +//static +void LLFloaterModelPreview::onUploadSkinCommit(LLUICtrl*,void* userdata) +{ + LLFloaterModelPreview *fp =(LLFloaterModelPreview *)userdata; + + if (!fp->mModelPreview) + { + return; + } + + fp->mModelPreview->refresh(); + fp->mModelPreview->resetPreviewTarget(); + fp->mModelPreview->clearBuffers(); +} + +//static void LLFloaterModelPreview::onPreviewLODCommit(LLUICtrl* ctrl, void* userdata) { LLFloaterModelPreview *fp =(LLFloaterModelPreview *)userdata; @@ -1304,6 +1376,106 @@ void LLModelLoader::run() model->mBindShapeMatrix = rotation; }*/ + //The joint transfom map that we'll populate below + std::map<std::string,LLMatrix4> jointTransforms; + jointTransforms.clear(); + + //Some collada setup for accessing the skeleton + daeElement* pElement = 0; + dae.getDatabase()->getElement( &pElement, 0, 0, "skeleton" ); + domInstance_controller::domSkeleton* pSkeleton = daeSafeCast<domInstance_controller::domSkeleton>( pElement ); + if ( pSkeleton ) + { + //Get the root node of the skeleton + daeElement* pSkeletonRootNode = pSkeleton->getValue().getElement(); + if ( pSkeletonRootNode ) + { + //Once we have the root node - start acccessing it's joint components + static const int jointCnt = mJointMap.size(); + std::map<std::string, std::string> :: const_iterator jointIt = mJointMap.begin(); + bool missingID = false; + //Loop over all the possible joints within the .dae - using the allowed joint list in the ctor. + for ( int i=0; i<jointCnt; ++i, ++jointIt ) + { + //Build a joint for the resolver to work with + char str[64]={0}; + sprintf(str,"./%s",(*jointIt).second.c_str() ); + //llwarns<<"Joint "<< str <<llendl; + + //Setup the resolver + daeSIDResolver resolver( pSkeletonRootNode, str ); + + //Look for the joint + domNode* pJoint = daeSafeCast<domNode>(resolver.getElement()); + if ( pJoint ) + { + //Pull out the translate id and store it in the jointTranslations map + daeSIDResolver jointResolver( pJoint, "./translate" ); + domTranslate* pTranslate = daeSafeCast<domTranslate>( jointResolver.getElement() ); + + LLMatrix4 workingTransform; + + //Translation + if ( pTranslate ) + { + domFloat3 jointTrans = pTranslate->getValue(); + LLVector3 singleJointTranslation( jointTrans[0], jointTrans[1], jointTrans[2] ); + workingTransform.setTranslation( singleJointTranslation ); + } + else + { + missingID = true; + llwarns<< "No translation sid!" << llendl; + } + //Store the joint transform w/respect to it's name. + jointTransforms[(*jointIt).second.c_str()] = workingTransform; + + } + else + { + missingID = true; + llwarns<< "Missing joint." << llendl; + } + } + + //If anything failed in regards to extracting the skeleton, joints or translation id, + //mention it + if ( missingID ) + { + llwarns<< "Partial jointmap found in asset - did you mean to just have a partial map?" << llendl; + } + + //Set the joint translations on the avatar + //The joints are reset in the dtor + jointIt = mJointMap.begin(); + for ( int i=0; i<jointCnt; ++i, ++jointIt ) + { + std::string lookingForJoint = (*jointIt).first.c_str(); + if ( jointTransforms.find( lookingForJoint ) != jointTransforms.end() ) + { + LLMatrix4 jointTransform = jointTransforms[lookingForJoint]; + LLJoint* pJoint = gAgentAvatarp->getJoint( lookingForJoint ); + if ( pJoint ) + { + pJoint->storeCurrentXform( jointTransform.getTranslation() ); + } + else + { + //Most likely an error in the asset. + llwarns<<"Tried to apply joint position from .dae, but it did not exist in the avatar rig." << llendl; + } + } + } + } + else + { + llwarns<<"No root node in this skeleton" << llendl; + } + } + else + { + llwarns<<"No skeleton in this asset" << llendl; + } domSkin::domJoints* joints = skin->getJoints(); @@ -1391,6 +1563,29 @@ void LLModelLoader::run() } } + //We need to construct the alternate bind matrix (which contains the new joint positions) + //in the same order as they were stored in the joint buffer. The joints associated + //with the skeleton are not stored in the same order as they are in the exported joint buffer. + //This remaps the skeletal joints to be in the same order as the joints stored in the model. + std::vector<std::string> :: const_iterator jointIt = model->mJointList.begin(); + static const int jointCnt = model->mJointList.size(); + for ( int i=0; i<jointCnt; ++i, ++jointIt ) + { + std::string lookingForJoint = (*jointIt).c_str(); + //Look for the joint xform that we extracted from the skeleton, using the jointIt as the key + //and store it in the alternate bind matrix + if ( jointTransforms.find( lookingForJoint ) != jointTransforms.end() ) + { + LLMatrix4 jointTransform = jointTransforms[lookingForJoint]; + LLMatrix4 newInverse = model->mInvBindMatrix[i]; + newInverse.setTranslation( jointTransforms[lookingForJoint].getTranslation() ); + model->mAlternateBindMatrix.push_back( newInverse ); + } + else + { + llwarns<<"Possibly misnamed/missing joint [" <<lookingForJoint.c_str()<<" ] "<<llendl; + } + } //grab raw position array @@ -1892,6 +2087,10 @@ U32 LLModelPreview::calcResourceCost() U32 num_points = 0; U32 num_hulls = 0; + F32 debug_scale = mFMP->childGetValue("debug scale").asReal(); + + F32 streaming_cost = 0.f; + for (U32 i = 0; i < mUploadData.size(); ++i) { LLModelInstance& instance = mUploadData[i]; @@ -1903,26 +2102,45 @@ U32 LLModelPreview::calcResourceCost() LLModel::physics_shape& physics_shape = instance.mLOD[LLModel::LOD_PHYSICS] ? instance.mLOD[LLModel::LOD_PHYSICS]->mPhysicsShape : instance.mModel->mPhysicsShape; LLSD ret = LLModel::writeModel("", - instance.mLOD[4], + instance.mLOD[4], instance.mLOD[3], instance.mLOD[2], instance.mLOD[1], instance.mLOD[0], physics_shape, - TRUE); + mFMP->childGetValue("upload_skin").asBoolean(), + mFMP->childGetValue("upload_joints").asBoolean(), + true); cost += gMeshRepo.calcResourceCost(ret); - num_hulls += physics_shape.size(); for (U32 i = 0; i < physics_shape.size(); ++i) { num_points += physics_shape[i].size(); } + + //calculate streaming cost + LLMatrix4 transformation = instance.mTransform; + + LLVector3 position = LLVector3(0, 0, 0) * transformation; + + LLVector3 x_transformed = LLVector3(1, 0, 0) * transformation - position; + LLVector3 y_transformed = LLVector3(0, 1, 0) * transformation - position; + LLVector3 z_transformed = LLVector3(0, 0, 1) * transformation - position; + F32 x_length = x_transformed.normalize(); + F32 y_length = y_transformed.normalize(); + F32 z_length = z_transformed.normalize(); + LLVector3 scale = LLVector3(x_length, y_length, z_length); + + F32 radius = scale.length()*debug_scale; + + streaming_cost += LLMeshRepository::getStreamingCost(ret, radius); } } mFMP->childSetTextArg(info_name[LLModel::LOD_PHYSICS], "[HULLS]", llformat("%d",num_hulls)); mFMP->childSetTextArg(info_name[LLModel::LOD_PHYSICS], "[POINTS]", llformat("%d",num_points)); + mFMP->childSetTextArg("streaming cost", "[COST]", llformat("%.3f", streaming_cost)); updateStatusMessages(); @@ -1971,6 +2189,18 @@ void LLModelPreview::rebuildUploadData() } +void LLModelPreview::clearModel(S32 lod) +{ + if (lod < 0 || lod > LLModel::LOD_PHYSICS) + { + return; + } + + mVertexBuffer[lod].clear(); + mModel[lod].clear(); + mScene[lod].clear(); +} + void LLModelPreview::loadModel(std::string filename, S32 lod) { LLMutexLock lock(this); @@ -1989,13 +2219,13 @@ void LLModelPreview::loadModel(std::string filename, S32 lod) if (lod == 3 && !mGroup.empty()) { - for (std::map<LLModel*, U32>::iterator iter = mGroup.begin(); iter != mGroup.end(); ++iter) + for (std::map<LLPointer<LLModel>, U32>::iterator iter = mGroup.begin(); iter != mGroup.end(); ++iter) { glodDeleteGroup(iter->second); stop_gloderror(); } - for (std::map<LLModel*, U32>::iterator iter = mObject.begin(); iter != mObject.end(); ++iter) + for (std::map<LLPointer<LLModel>, U32>::iterator iter = mObject.begin(); iter != mObject.end(); ++iter) { glodDeleteObject(iter->second); stop_gloderror(); @@ -2055,6 +2285,11 @@ void LLModelPreview::loadModelCallback(S32 lod) mScene[lod] = mModelLoader->mScene; mVertexBuffer[lod].clear(); + if (lod == LLModel::LOD_PHYSICS) + { + mPhysicsMesh.clear(); + } + setPreviewLOD(lod); @@ -2070,12 +2305,17 @@ void LLModelPreview::loadModelCallback(S32 lod) mDirty = true; + resetPreviewTarget(); + + mFMP->mLoading = FALSE; + refresh(); +} + +void LLModelPreview::resetPreviewTarget() +{ mPreviewTarget = (mModelLoader->mExtents[0] + mModelLoader->mExtents[1]) * 0.5f; mPreviewScale = (mModelLoader->mExtents[1] - mModelLoader->mExtents[0]) * 0.5f; setPreviewTarget(mPreviewScale.magVec()*2.f); - - mFMP->mLoading = FALSE; - refresh(); } void LLModelPreview::smoothNormals() @@ -2331,6 +2571,21 @@ void LLModelPreview::scrubMaterials() refresh(); } +bool LLModelPreview::containsRiggedAsset( void ) +{ + //loop through the models and determine if any of them contained a rigged asset, and if so + //return true. + //This is used to cleanup the joint positions after a preview. + for (LLModelLoader::model_list::iterator iter = mBaseModel.begin(); iter != mBaseModel.end(); ++iter) + { + LLModel* pModel = *iter; + if ( pModel->mAlternateBindMatrix.size() > 0 ) + { + return true; + } + } + return false; +} void LLModelPreview::genLODs(S32 which_lod) { if (mBaseModel.empty()) @@ -2338,6 +2593,11 @@ void LLModelPreview::genLODs(S32 which_lod) return; } + if (which_lod == LLModel::LOD_PHYSICS) + { //clear physics mesh map + mPhysicsMesh.clear(); + } + LLVertexBuffer::unbind(); stop_gloderror(); @@ -2365,6 +2625,14 @@ void LLModelPreview::genLODs(S32 which_lod) U32 type_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0; + if (mGroup[mBaseModel[0]] == 0) + { //clear LOD maps + mGroup.clear(); + mObject.clear(); + mPercentage.clear(); + mPatch.clear(); + } + for (LLModelLoader::model_list::iterator iter = mBaseModel.begin(); iter != mBaseModel.end(); ++iter) { //build GLOD objects for each model in base model list LLModel* mdl = *iter; @@ -2395,7 +2663,7 @@ void LLModelPreview::genLODs(S32 which_lod) if (mVertexBuffer[5].empty()) { - genBuffers(5); + genBuffers(5, false); } U32 tri_count = 0; @@ -2436,65 +2704,63 @@ void LLModelPreview::genLODs(S32 which_lod) } - if (which_lod == -1 || mLODMode[which_lod] == 1) - { - //generating LODs for all entries, or this entry has a triangle budget - glodGroupParameteri(mGroup[mdl], GLOD_ADAPT_MODE, GLOD_TRIANGLE_BUDGET); - stop_gloderror(); - } - else - { - //this entry uses error mode - glodGroupParameteri(mGroup[mdl], GLOD_ADAPT_MODE, GLOD_OBJECT_SPACE_ERROR); - stop_gloderror(); - } - - if (which_lod != -1 && mLODMode[which_lod] == 2) - { - glodGroupParameterf(mGroup[mdl], GLOD_OBJECT_SPACE_ERROR_THRESHOLD, llmax(limit/100.f, 0.01f)); - stop_gloderror(); - } - else - { - glodGroupParameterf(mGroup[mdl], GLOD_OBJECT_SPACE_ERROR_THRESHOLD, 0.025f); - stop_gloderror(); - } + //generating LODs for all entries, or this entry has a triangle budget + glodGroupParameteri(mGroup[mdl], GLOD_ADAPT_MODE, GLOD_TRIANGLE_BUDGET); + stop_gloderror(); + + glodGroupParameterf(mGroup[mdl], GLOD_OBJECT_SPACE_ERROR_THRESHOLD, 0.025f); + stop_gloderror(); } S32 start = LLModel::LOD_HIGH; S32 end = 0; - BOOL error_mode = FALSE; - if (which_lod != -1) { start = end = which_lod; - - if (mLODMode[which_lod] == 2) - { - error_mode = TRUE; - } } + std::string combo_name[] = + { + "lowest detail combo", + "low detail combo", + "medium detail combo", + "high detail combo", + "physics detail combo" + }; + + std::string limit_name[] = + { + "lowest limit", + "low limit", + "medium limit", + "high limit", + "physics limit" + }; + for (S32 lod = start; lod >= end; --lod) { - if (!error_mode) + if (which_lod == -1) { - if (which_lod == -1) + if (lod < start) { - if (lod < start) - { - triangle_count /= 3; - } - } - else - { - triangle_count = limit; + triangle_count /= 3; } } + else + { + triangle_count = limit; + } + LLComboBox* combo_box = mFMP->findChild<LLComboBox>(combo_name[lod]); + combo_box->setCurrentByIndex(2); + + LLSpinCtrl* lim = mFMP->getChild<LLSpinCtrl>(limit_name[lod], TRUE); + lim->setMaxValue(base_triangle_count); + lim->setVisible(true); + mModel[lod].clear(); mModel[lod].resize(mBaseModel.size()); mVertexBuffer[lod].clear(); @@ -2509,22 +2775,14 @@ void LLModelPreview::genLODs(S32 which_lod) U32 target_count = U32(mPercentage[base]*triangle_count); - if (error_mode) - { - target_count = base->getNumTriangles(); - } - if (target_count < 4) { target_count = 4; } - if (which_lod == -1 || mLODMode[which_lod] == 1) - { - glodGroupParameteri(mGroup[base], GLOD_MAX_TRIANGLES, target_count); - stop_gloderror(); - } - + glodGroupParameteri(mGroup[base], GLOD_MAX_TRIANGLES, target_count); + stop_gloderror(); + glodAdaptGroup(mGroup[base]); stop_gloderror(); @@ -2599,7 +2857,7 @@ void LLModelPreview::genLODs(S32 which_lod) target_model->mJointList = base->mJointList; target_model->mInvBindMatrix = base->mInvBindMatrix; target_model->mBindShapeMatrix = base->mBindShapeMatrix; - + target_model->mAlternateBindMatrix = base->mAlternateBindMatrix; //copy material list target_model->mMaterialList = base->mMaterialList; @@ -2774,7 +3032,15 @@ void LLModelPreview::setPreviewTarget(F32 distance) mCameraOffset.clearVec(); } -void LLModelPreview::genBuffers(S32 lod) +void LLModelPreview::clearBuffers() +{ + for (U32 i = 0; i < 6; i++) + { + mVertexBuffer[i].clear(); + } +} + +void LLModelPreview::genBuffers(S32 lod, bool avatar_preview) { U32 tri_count = 0; U32 vertex_count = 0; @@ -2825,7 +3091,7 @@ void LLModelPreview::genBuffers(S32 lod) LLVertexBuffer* vb = NULL; - bool skinned = !mdl->mSkinWeights.empty(); + bool skinned = avatar_preview && !mdl->mSkinWeights.empty(); U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0; @@ -2860,13 +3126,12 @@ void LLModelPreview::genBuffers(S32 lod) if (skinned) { - // build vertices and normals for (U32 i = 0; i < num_vertices; i++) { //find closest weight to vf.mVertices[i].mPosition LLVector3 pos(vf.mPositions[i].getF32ptr()); - LLModel::weight_list weight_list = base_mdl->getJointInfluences(pos); + const LLModel::weight_list& weight_list = base_mdl->getJointInfluences(pos); LLVector4 w(0,0,0,0); if (weight_list.size() > 4) @@ -2899,16 +3164,6 @@ void LLModelPreview::genBuffers(S32 lod) } } - - if (lod == 4) - { - for (U32 i = 0; i < 4; i++) - { - LLSpinCtrl* lim = mFMP->getChild<LLSpinCtrl>(limit_name[i], TRUE); - - lim->setMaxValue(tri_count); - } - } } void LLModelPreview::update() @@ -2951,6 +3206,9 @@ BOOL LLModelPreview::render() gl_rect_2d_simple( width, height ); bool avatar_preview = false; + bool upload_skin = mFMP->childGetValue("upload_skin").asBoolean(); + bool upload_joints = mFMP->childGetValue("upload_joints").asBoolean(); + for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter) { for (LLModelLoader::model_instance_list::iterator model_iter = iter->second.begin(); model_iter != iter->second.end(); ++model_iter) @@ -2964,6 +3222,39 @@ BOOL LLModelPreview::render() } } + if (upload_skin && !avatar_preview) + { + mFMP->childSetValue("upload_skin", false); + upload_skin = false; + } + + if (!upload_skin && upload_joints) + { + mFMP->childSetValue("upload_joints", false); + upload_joints = false; + } + + if (!avatar_preview) + { + mFMP->childDisable("upload_skin"); + } + else + { + mFMP->childEnable("upload_skin"); + } + + if (!upload_skin) + { + mFMP->childDisable("upload_joints"); + } + else + { + mFMP->childEnable("upload_joints"); + } + + avatar_preview = avatar_preview && upload_skin; + + mFMP->childSetEnabled("consolidate", !avatar_preview); F32 explode = mFMP->mDecompFloater ? mFMP->mDecompFloater->childGetValue("explode").asReal() : 0.f; @@ -3020,8 +3311,8 @@ BOOL LLModelPreview::render() if (!mBaseModel.empty() && mVertexBuffer[5].empty()) { - genBuffers(-1); - genBuffers(3); + genBuffers(-1, avatar_preview); + //genBuffers(3); //genLODs(); } @@ -3043,7 +3334,7 @@ BOOL LLModelPreview::render() { if (mVertexBuffer[mPreviewLOD].empty()) { - genBuffers(mPreviewLOD); + genBuffers(mPreviewLOD, avatar_preview); } if (!avatar_preview) @@ -3118,7 +3409,7 @@ BOOL LLModelPreview::render() { LLMutexLock(decomp->mMutex); - std::map<LLModel*, std::vector<LLPointer<LLVertexBuffer> > >::iterator iter = + std::map<LLPointer<LLModel>, std::vector<LLPointer<LLVertexBuffer> > >::iterator iter = mPhysicsMesh.find(model); if (iter != mPhysicsMesh.end()) { @@ -3376,7 +3667,8 @@ void LLFloaterModelPreview::onUpload(void* user_data) mp->mModelPreview->rebuildUploadData(); - gMeshRepo.uploadModel(mp->mModelPreview->mUploadData, mp->mModelPreview->mPreviewScale, mp->childGetValue("upload_textures").asBoolean()); + gMeshRepo.uploadModel(mp->mModelPreview->mUploadData, mp->mModelPreview->mPreviewScale, + mp->childGetValue("upload_textures").asBoolean(), mp->childGetValue("upload_skin"), mp->childGetValue("upload_joints")); mp->closeFloater(false); } @@ -3406,7 +3698,7 @@ void LLFloaterModelPreview::onDecompose(void* user_data) void LLFloaterModelPreview::onModelDecompositionComplete(LLModel* model, std::vector<LLPointer<LLVertexBuffer> >& physics_mesh) { if (sInstance && sInstance->mModelPreview) - { + { sInstance->mModelPreview->mPhysicsMesh[model] = physics_mesh; sInstance->mModelPreview->mDirty = true; diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index 148687aecd..8409249182 100644 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -113,18 +113,21 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex LLModelPreview(S32 width, S32 height, LLFloaterModelPreview* fmp); virtual ~LLModelPreview(); + void resetPreviewTarget(); void setPreviewTarget(F32 distance); void setTexture(U32 name) { mTextureName = name; } BOOL render(); void update(); - void genBuffers(S32 lod); + void genBuffers(S32 lod, bool skinned); + void clearBuffers(); void refresh(); void rotate(F32 yaw_radians, F32 pitch_radians); void zoom(F32 zoom_amt); void pan(F32 right, F32 up); virtual BOOL needsRender() { return mNeedsUpdate; } void setPreviewLOD(S32 lod); + void clearModel(S32 lod); void loadModel(std::string filename, S32 lod); void loadModelCallback(S32 lod); void genLODs(S32 which_lod = -1); @@ -135,6 +138,7 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex void rebuildUploadData(); void clearIncompatible(S32 lod); void updateStatusMessages(); + bool containsRiggedAsset( void ); static void textureLoadedCallback( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata ); @@ -168,18 +172,18 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex LLModelLoader::model_list mModel[LLModel::NUM_LODS]; LLModelLoader::model_list mBaseModel; - std::map<LLModel*, U32> mGroup; - std::map<LLModel*, U32> mObject; - std::map<LLModel*, std::vector<U32> > mPatch; + std::map<LLPointer<LLModel>, U32> mGroup; + std::map<LLPointer<LLModel>, U32> mObject; + std::map<LLPointer<LLModel>, std::vector<U32> > mPatch; + std::map<LLPointer<LLModel>, F32> mPercentage; - std::map<LLModel*, F32> mPercentage; - std::map<LLModel*, std::vector<LLPointer<LLVertexBuffer> > > mPhysicsMesh; + std::map<LLPointer<LLModel>, std::vector<LLPointer<LLVertexBuffer> > > mPhysicsMesh; LLMeshUploadThread::instance_list mUploadData; std::set<LLPointer<LLViewerFetchedTexture> > mTextureSet; //map of vertex buffers to models (one vertex buffer in vector per face in model - std::map<LLModel*, std::vector<LLPointer<LLVertexBuffer> > > mVertexBuffer[6]; + std::map<LLModel*, std::vector<LLPointer<LLVertexBuffer> > > mVertexBuffer[LLModel::NUM_LODS+1]; }; class LLFloaterModelPreview : public LLFloater @@ -224,6 +228,10 @@ protected: friend class LLPhysicsDecomp; friend class LLPhysicsDecompFloater; + static void onDebugScaleCommit(LLUICtrl*, void*); + static void onUploadJointsCommit(LLUICtrl*,void*); + static void onUploadSkinCommit(LLUICtrl*,void*); + static void onPreviewLODCommit(LLUICtrl*,void*); static void onHighLODCommit(LLUICtrl*,void*); diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp index 105d7f9201..da1bf59757 100644 --- a/indra/newview/llfloaternotificationsconsole.cpp +++ b/indra/newview/llfloaternotificationsconsole.cpp @@ -43,10 +43,10 @@ const S32 NOTIFICATION_PANEL_HEADER_HEIGHT = 20; const S32 HEADER_PADDING = 38; -class LLNotificationChannelPanel : public LLPanel +class LLNotificationChannelPanel : public LLLayoutPanel { public: - LLNotificationChannelPanel(const std::string& channel_name); + LLNotificationChannelPanel(const Params& p); BOOL postBuild(); private: @@ -58,14 +58,14 @@ private: LLNotificationChannelPtr mChannelRejectsPtr; }; -LLNotificationChannelPanel::LLNotificationChannelPanel(const std::string& channel_name) - : LLPanel() +LLNotificationChannelPanel::LLNotificationChannelPanel(const LLNotificationChannelPanel::Params& p) +: LLLayoutPanel(p) { - mChannelPtr = LLNotifications::instance().getChannel(channel_name); + mChannelPtr = LLNotifications::instance().getChannel(p.name); mChannelRejectsPtr = LLNotificationChannelPtr( - LLNotificationChannel::buildChannel(channel_name + "rejects", mChannelPtr->getParentChannelName(), + LLNotificationChannel::buildChannel(p.name() + "rejects", mChannelPtr->getParentChannelName(), !boost::bind(mChannelPtr->getFilter(), _1))); - LLUICtrlFactory::instance().buildPanel(this, "panel_notifications_channel.xml"); + buildFromFile( "panel_notifications_channel.xml"); } BOOL LLNotificationChannelPanel::postBuild() @@ -173,8 +173,6 @@ LLFloaterNotificationConsole::LLFloaterNotificationConsole(const LLSD& key) : LLFloater(key) { mCommitCallbackRegistrar.add("ClickAdd", boost::bind(&LLFloaterNotificationConsole::onClickAdd, this)); - - //LLUICtrlFactory::instance().buildFloater(this, "floater_notifications_console.xml"); } BOOL LLFloaterNotificationConsole::postBuild() @@ -209,8 +207,13 @@ BOOL LLFloaterNotificationConsole::postBuild() void LLFloaterNotificationConsole::addChannel(const std::string& name, bool open) { LLLayoutStack& stack = getChildRef<LLLayoutStack>("notification_channels"); - LLNotificationChannelPanel* panelp = new LLNotificationChannelPanel(name); - stack.addPanel(panelp, 0, NOTIFICATION_PANEL_HEADER_HEIGHT, S32_MAX, S32_MAX, TRUE, TRUE, LLLayoutStack::ANIMATE); + LLNotificationChannelPanel::Params p; + p.min_dim = NOTIFICATION_PANEL_HEADER_HEIGHT; + p.auto_resize = true; + p.user_resize = true; + p.name = name; + LLNotificationChannelPanel* panelp = new LLNotificationChannelPanel(p); + stack.addPanel(panelp, LLLayoutStack::ANIMATE); LLButton& header_button = panelp->getChildRef<LLButton>("header"); header_button.setToggleState(!open); @@ -254,7 +257,7 @@ LLFloaterNotification::LLFloaterNotification(LLNotification* note) : LLFloater(LLSD()), mNote(note) { - LLUICtrlFactory::instance().buildFloater(this, "floater_notification.xml", NULL); + buildFromFile("floater_notification.xml"); } BOOL LLFloaterNotification::postBuild() diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp index d6f6ba9e5b..8b6619def2 100644 --- a/indra/newview/llfloateropenobject.cpp +++ b/indra/newview/llfloateropenobject.cpp @@ -56,7 +56,6 @@ LLFloaterOpenObject::LLFloaterOpenObject(const LLSD& key) mPanelInventoryObject(NULL), mDirty(TRUE) { -// LLUICtrlFactory::getInstance()->buildFloater(this,"floater_openobject.xml"); mCommitCallbackRegistrar.add("OpenObject.MoveToInventory", boost::bind(&LLFloaterOpenObject::onClickMoveToInventory, this)); mCommitCallbackRegistrar.add("OpenObject.MoveAndWear", boost::bind(&LLFloaterOpenObject::onClickMoveAndWear, this)); } diff --git a/indra/newview/llfloaterperms.cpp b/indra/newview/llfloaterperms.cpp index 7edc27d4c3..d206240383 100644 --- a/indra/newview/llfloaterperms.cpp +++ b/indra/newview/llfloaterperms.cpp @@ -43,7 +43,6 @@ LLFloaterPerms::LLFloaterPerms(const LLSD& seed) : LLFloater(seed) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_perm_prefs.xml"); mCommitCallbackRegistrar.add("Perms.Copy", boost::bind(&LLFloaterPerms::onCommitCopy, this)); mCommitCallbackRegistrar.add("Perms.OK", boost::bind(&LLFloaterPerms::onClickOK, this)); mCommitCallbackRegistrar.add("Perms.Cancel", boost::bind(&LLFloaterPerms::onClickCancel, this)); @@ -121,7 +120,7 @@ U32 LLFloaterPerms::getEveryonePerms(std::string prefix) //static U32 LLFloaterPerms::getNextOwnerPerms(std::string prefix) { - U32 flags = 0; + U32 flags = PERM_MOVE; if ( gSavedSettings.getBOOL(prefix+"NextOwnerCopy") ) { flags |= PERM_COPY; diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp index bcdcd50288..e8e9f76912 100644 --- a/indra/newview/llfloaterpostcard.cpp +++ b/indra/newview/llfloaterpostcard.cpp @@ -76,7 +76,6 @@ LLFloaterPostcard::LLFloaterPostcard(const LLSD& key) mViewerImage(NULL), mHasFirstMsgFocus(false) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_postcard.xml"); } // Destroys the object diff --git a/indra/newview/llfloaterpostprocess.cpp b/indra/newview/llfloaterpostprocess.cpp index 7f27caf68f..2d61109e17 100644 --- a/indra/newview/llfloaterpostprocess.cpp +++ b/indra/newview/llfloaterpostprocess.cpp @@ -42,7 +42,6 @@ LLFloaterPostProcess::LLFloaterPostProcess(const LLSD& key) : LLFloater(key) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_post_process.xml"); } LLFloaterPostProcess::~LLFloaterPostProcess() diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 7791c037d3..b59cd3f4e4 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -55,7 +55,6 @@ #include "llfloaterreg.h" #include "llfloaterabout.h" #include "llfloaterhardwaresettings.h" -#include "llfloatervoicedevicesettings.h" #include "llimfloater.h" #include "llkeyboard.h" #include "llmodaldialog.h" @@ -63,7 +62,9 @@ #include "llnearbychat.h" #include "llnotifications.h" #include "llnotificationsutil.h" +#include "llnotificationtemplate.h" #include "llpanellogin.h" +#include "llpanelvoicedevicesettings.h" #include "llradiogroup.h" #include "llsearchcombobox.h" #include "llsky.h" @@ -137,7 +138,6 @@ LLVoiceSetKeyDialog::LLVoiceSetKeyDialog(const LLSD& key) : LLModalDialog(key), mParent(NULL) { -// LLUICtrlFactory::getInstance()->buildFloater(this, "floater_select_key.xml", NULL); } //virtual @@ -413,12 +413,6 @@ void LLFloaterPreference::apply() hardware_settings->apply(); } - LLFloaterVoiceDeviceSettings* voice_device_settings = LLFloaterReg::findTypedInstance<LLFloaterVoiceDeviceSettings>("pref_voicedevicesettings"); - if(voice_device_settings) - { - voice_device_settings->apply(); - } - gViewerWindow->requestResolutionUpdate(); // for UIScaleFactor LLSliderCtrl* fov_slider = getChild<LLSliderCtrl>("camera_fov"); @@ -493,15 +487,6 @@ void LLFloaterPreference::cancel() // reverts any changes to current skin gSavedSettings.setString("SkinCurrent", sSkin); - - LLFloaterVoiceDeviceSettings* voice_device_settings = LLFloaterReg::findTypedInstance<LLFloaterVoiceDeviceSettings>("pref_voicedevicesettings"); - if (voice_device_settings) - { - voice_device_settings ->cancel(); - } - - LLFloaterReg::hideInstance("pref_voicedevicesettings"); - } void LLFloaterPreference::onOpen(const LLSD& key) @@ -804,7 +789,7 @@ void LLFloaterPreference::buildPopupLists() LLScrollListItem* item = NULL; - bool show_popup = LLUI::sSettingGroups["ignores"]->getBOOL(templatep->mName); + bool show_popup = formp->getIgnored(); if (!show_popup) { if (ignore == LLNotificationForm::IGNORE_WITH_LAST_RESPONSE) @@ -826,13 +811,11 @@ void LLFloaterPreference::buildPopupLists() row["columns"][1]["font"] = "SANSSERIF_SMALL"; row["columns"][1]["width"] = 360; } - item = disabled_popups.addElement(row, - ADD_SORTED); + item = disabled_popups.addElement(row); } else { - item = enabled_popups.addElement(row, - ADD_SORTED); + item = enabled_popups.addElement(row); } if (item) @@ -1158,9 +1141,7 @@ void LLFloaterPreference::onClickDisablePopup() for (itor = items.begin(); itor != items.end(); ++itor) { LLNotificationTemplatePtr templatep = LLNotifications::instance().getTemplate(*(std::string*)((*itor)->getUserdata())); - //gSavedSettings.setWarning(templatep->mName, TRUE); - std::string notification_name = templatep->mName; - LLUI::sSettingGroups["ignores"]->setBOOL(notification_name, FALSE); + templatep->mForm->setIgnored(false); } buildPopupLists(); @@ -1174,7 +1155,7 @@ void LLFloaterPreference::resetAllIgnored() { if (iter->second->mForm->getIgnoreType() != LLNotificationForm::IGNORE_NO) { - LLUI::sSettingGroups["ignores"]->setBOOL(iter->first, TRUE); + iter->second->mForm->setIgnored(true); } } } @@ -1187,7 +1168,7 @@ void LLFloaterPreference::setAllIgnored() { if (iter->second->mForm->getIgnoreType() != LLNotificationForm::IGNORE_NO) { - LLUI::sSettingGroups["ignores"]->setBOOL(iter->first, FALSE); + iter->second->mForm->setIgnored(false); } } } diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp index e4e4713dbc..dd12fa64d3 100644 --- a/indra/newview/llfloaterproperties.cpp +++ b/indra/newview/llfloaterproperties.cpp @@ -108,8 +108,6 @@ LLFloaterProperties::LLFloaterProperties(const LLUUID& item_id) mDirty(TRUE) { mPropertiesObserver = new LLPropertiesObserver(this); - - //LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml"); } // Destroys the object diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 8af4955f92..8c552d0c06 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -167,7 +167,6 @@ LLUUID LLFloaterRegionInfo::sRequestInvoice; LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed) : LLFloater(seed) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_region_info.xml", FALSE); } BOOL LLFloaterRegionInfo::postBuild() @@ -180,32 +179,32 @@ BOOL LLFloaterRegionInfo::postBuild() mInfoPanels.push_back(panel); panel->getCommitCallbackRegistrar().add("RegionInfo.ManageTelehub", boost::bind(&LLPanelRegionInfo::onClickManageTelehub, panel)); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_general.xml"); + panel->buildFromFile("panel_region_general.xml"); mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true)); panel = new LLPanelRegionDebugInfo; mInfoPanels.push_back(panel); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_debug.xml"); + panel->buildFromFile("panel_region_debug.xml"); mTab->addTabPanel(panel); panel = new LLPanelRegionTextureInfo; mInfoPanels.push_back(panel); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_texture.xml"); + panel->buildFromFile("panel_region_texture.xml"); mTab->addTabPanel(panel); panel = new LLPanelRegionTerrainInfo; mInfoPanels.push_back(panel); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_terrain.xml"); + panel->buildFromFile("panel_region_terrain.xml"); mTab->addTabPanel(panel); panel = new LLPanelEstateInfo; mInfoPanels.push_back(panel); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_estate.xml"); + panel->buildFromFile("panel_region_estate.xml"); mTab->addTabPanel(panel); panel = new LLPanelEstateCovenant; mInfoPanels.push_back(panel); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_covenant.xml"); + panel->buildFromFile("panel_region_covenant.xml"); mTab->addTabPanel(panel); gMessageSystem->setHandlerFunc( diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp index 97f192a708..66d7e804ea 100644 --- a/indra/newview/llfloaterreporter.cpp +++ b/indra/newview/llfloaterreporter.cpp @@ -103,7 +103,6 @@ LLFloaterReporter::LLFloaterReporter(const LLSD& key) mCopyrightWarningSeen( FALSE ), mResourceDatap(new LLResourceData()) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_report_abuse.xml"); } // static diff --git a/indra/newview/llfloaterscriptdebug.cpp b/indra/newview/llfloaterscriptdebug.cpp index 4a82f3a11c..ad11a3ac5f 100644 --- a/indra/newview/llfloaterscriptdebug.cpp +++ b/indra/newview/llfloaterscriptdebug.cpp @@ -58,8 +58,6 @@ LLFloaterScriptDebug::LLFloaterScriptDebug(const LLSD& key) : LLMultiFloater(key) { -// LLUICtrlFactory::getInstance()->buildFloater(this, "floater_script_debug.xml"); - // avoid resizing of the window to match // the initial size of the tabbed-childs, whenever a tab is opened or closed mAutoResize = FALSE; @@ -147,8 +145,6 @@ LLFloaterScriptDebugOutput::LLFloaterScriptDebugOutput(const LLSD& object_id) : LLFloater(LLSD(object_id)), mObjectID(object_id.asUUID()) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_script_debug_panel.xml"); - // enabled autocous blocks controling focus via LLFloaterReg::showInstance setAutoFocus(FALSE); } diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp index 571f26e09f..cd792c263c 100644 --- a/indra/newview/llfloaterscriptlimits.cpp +++ b/indra/newview/llfloaterscriptlimits.cpp @@ -115,7 +115,7 @@ BOOL LLFloaterScriptLimits::postBuild() LLPanelScriptLimitsRegionMemory* panel_memory; panel_memory = new LLPanelScriptLimitsRegionMemory; mInfoPanels.push_back(panel_memory); - LLUICtrlFactory::getInstance()->buildPanel(panel_memory, "panel_script_limits_region_memory.xml"); + panel_memory->buildFromFile( "panel_script_limits_region_memory.xml"); mTab->addTabPanel(panel_memory); } @@ -124,7 +124,7 @@ BOOL LLFloaterScriptLimits::postBuild() { LLPanelScriptLimitsAttachment* panel_attachments = new LLPanelScriptLimitsAttachment; mInfoPanels.push_back(panel_attachments); - LLUICtrlFactory::getInstance()->buildPanel(panel_attachments, "panel_script_limits_my_avatar.xml"); + panel_attachments->buildFromFile("panel_script_limits_my_avatar.xml"); mTab->addTabPanel(panel_attachments); } @@ -706,38 +706,44 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content) } } - LLSD element; + LLScrollListItem::Params item_params; + item_params.value = task_id; - element["id"] = task_id; - element["columns"][0]["column"] = "size"; - element["columns"][0]["value"] = llformat("%d", size); - element["columns"][0]["font"] = "SANSSERIF"; - element["columns"][1]["column"] = "urls"; - element["columns"][1]["value"] = llformat("%d", urls); - element["columns"][1]["font"] = "SANSSERIF"; - element["columns"][2]["column"] = "name"; - element["columns"][2]["value"] = name_buf; - element["columns"][2]["font"] = "SANSSERIF"; - element["columns"][3]["column"] = "owner"; - element["columns"][3]["value"] = owner_buf; - element["columns"][3]["font"] = "SANSSERIF"; - element["columns"][4]["column"] = "parcel"; - element["columns"][4]["value"] = parcel_name; - element["columns"][4]["font"] = "SANSSERIF"; - element["columns"][5]["column"] = "location"; - if(has_locations) - { - element["columns"][5]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z); - } - else - { - element["columns"][5]["value"] = ""; - } - element["columns"][5]["font"] = "SANSSERIF"; + LLScrollListCell::Params cell_params; + cell_params.font = LLFontGL::getFontSansSerif(); + + cell_params.column = "size"; + cell_params.value = size; + item_params.columns.add(cell_params); + + cell_params.column = "urls"; + cell_params.value = urls; + item_params.columns.add(cell_params); + + cell_params.column = "name"; + cell_params.value = name_buf; + item_params.columns.add(cell_params); - list->addElement(element, ADD_SORTED); + cell_params.column = "owner"; + cell_params.value = owner_buf; + item_params.columns.add(cell_params); + + cell_params.column = "parcel"; + cell_params.value = parcel_name; + item_params.columns.add(cell_params); + + cell_params.column = "location"; + cell_params.value = has_locations + ? llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z) + : ""; + item_params.columns.add(cell_params); + + list->addRow(item_params); + LLSD element; element["owner_id"] = owner_id; + + element["id"] = task_id; element["local_id"] = local_id; mObjectListItems.push_back(element); } diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index 7661e50eba..3ed4aec89a 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -96,11 +96,7 @@ LLFloaterSearch::LLFloaterSearch(const LLSD& key) : BOOL LLFloaterSearch::postBuild() { mBrowser = getChild<LLMediaCtrl>("browser"); - if (mBrowser) - { - mBrowser->addObserver(this); - mBrowser->setTrusted(true); - } + mBrowser->addObserver(this); return TRUE; } diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp index 41a05055fe..71882fbb83 100644 --- a/indra/newview/llfloatersettingsdebug.cpp +++ b/indra/newview/llfloatersettingsdebug.cpp @@ -39,7 +39,6 @@ LLFloaterSettingsDebug::LLFloaterSettingsDebug(const LLSD& key) : LLFloater(key) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_settings_debug.xml"); mCommitCallbackRegistrar.add("SettingSelect", boost::bind(&LLFloaterSettingsDebug::onSettingSelect, this,_1)); mCommitCallbackRegistrar.add("CommitSettings", boost::bind(&LLFloaterSettingsDebug::onCommitSettings, this)); mCommitCallbackRegistrar.add("ClickDefault", boost::bind(&LLFloaterSettingsDebug::onClickDefault, this)); diff --git a/indra/newview/llfloatersidetraytab.cpp b/indra/newview/llfloatersidetraytab.cpp new file mode 100644 index 0000000000..f13b4db3a0 --- /dev/null +++ b/indra/newview/llfloatersidetraytab.cpp @@ -0,0 +1,45 @@ +/** + * @file llfloatersidetraytab.cpp + * @brief LLFloaterSideTrayTab class definition + * + * $LicenseInfo:firstyear=2010&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloatersidetraytab.h" + +// newview includes +#include "lltransientfloatermgr.h" + +LLFloaterSideTrayTab::LLFloaterSideTrayTab(const LLSD& key, const Params& params) +: LLFloater(key, params) +{ + // Prevent transient floaters (e.g. IM windows) from hiding + // when this floater is clicked. + LLTransientFloaterMgr::getInstance()->addControlView(LLTransientFloaterMgr::GLOBAL, this); +} + +LLFloaterSideTrayTab::~LLFloaterSideTrayTab() +{ + LLTransientFloaterMgr::getInstance()->removeControlView(LLTransientFloaterMgr::GLOBAL, this); +} diff --git a/indra/newview/llfloatersidetraytab.h b/indra/newview/llfloatersidetraytab.h new file mode 100644 index 0000000000..e47f82e8ba --- /dev/null +++ b/indra/newview/llfloatersidetraytab.h @@ -0,0 +1,47 @@ +/** + * @file llfloatersidetraytab.h + * @brief LLFloaterSideTrayTab class definition + * + * $LicenseInfo:firstyear=2010&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLFLOATERSIDETRAYTAB_H +#define LL_LLFLOATERSIDETRAYTAB_H + +#include "llfloater.h" + +/** + * When a side tray tab gets detached, it's wrapped in an instance of this class. + * + * This class helps to make sure that clicking a detached side tray tab doesn't + * make transient floaters (e.g. IM windows) hide, so that it's possible to + * drag an inventory item from detached My Inventory window to a docked IM window, + * i.e. share the item (see VWR-22891). + */ +class LLFloaterSideTrayTab : public LLFloater +{ +public: + LLFloaterSideTrayTab(const LLSD& key, const Params& params = getDefaultParams()); + ~LLFloaterSideTrayTab(); +}; + +#endif // LL_LLFLOATERSIDETRAYTAB_H diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index e8a89bb705..8e86efdd3a 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -41,6 +41,7 @@ #include "llagentcamera.h" #include "llcallbacklist.h" #include "llcriticaldamp.h" +#include "llfloaterperms.h" #include "llui.h" #include "llfocusmgr.h" #include "llbutton.h" @@ -1005,8 +1006,8 @@ void LLSnapshotLivePreview::saveTexture() LLFolderType::FT_SNAPSHOT_CATEGORY, LLInventoryType::IT_SNAPSHOT, PERM_ALL, // Note: Snapshots to inventory is a special case of content upload - PERM_NONE, // that ignores the user's premissions preferences and continues to - PERM_NONE, // always use these fairly permissive hard-coded initial perms. - MG + LLFloaterPerms::getGroupPerms(), // that is more permissive than other uploads + LLFloaterPerms::getEveryonePerms(), "Snapshot : " + pos_string, callback, expected_upload_cost, userdata); gViewerWindow->playSnapshotAnimAndSound(); @@ -2076,7 +2077,6 @@ LLFloaterSnapshot::LLFloaterSnapshot(const LLSD& key) : LLFloater(key), impl (*(new Impl)) { - //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_snapshot.xml", FALSE); } // Destroys the object diff --git a/indra/newview/llfloatertelehub.cpp b/indra/newview/llfloatertelehub.cpp index d945f1a2de..b845fd132d 100644 --- a/indra/newview/llfloatertelehub.cpp +++ b/indra/newview/llfloatertelehub.cpp @@ -51,7 +51,6 @@ LLFloaterTelehub::LLFloaterTelehub(const LLSD& key) mTelehubRot(), mNumSpawn(0) { - //LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_telehub.xml"); } BOOL LLFloaterTelehub::postBuild() diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 653f838779..8a8177abde 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -356,7 +356,6 @@ LLFloaterTools::LLFloaterTools(const LLSD& key) mFactoryMap["Contents"] = LLCallbackMap(createPanelContents, this);//LLPanelContents mFactoryMap["land info panel"] = LLCallbackMap(createPanelLandInfo, this);//LLPanelLandInfo - //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_tools.xml",FALSE); mCommitCallbackRegistrar.add("BuildTool.setTool", boost::bind(&LLFloaterTools::setTool,this, _2)); mCommitCallbackRegistrar.add("BuildTool.commitZoom", boost::bind(&commit_slider_zoom, _1)); mCommitCallbackRegistrar.add("BuildTool.commitRadioFocus", boost::bind(&commit_radio_group_focus, _1)); diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp index a984dd1d51..099b657c7c 100644 --- a/indra/newview/llfloatertopobjects.cpp +++ b/indra/newview/llfloatertopobjects.cpp @@ -64,7 +64,6 @@ void LLFloaterTopObjects::show() } sInstance = new LLFloaterTopObjects(); -// LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_top_objects.xml"); sInstance->center(); } */ diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index 333e44e077..5dc8067648 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -394,7 +394,6 @@ LLFloaterUIPreview::LLFloaterUIPreview(const LLSD& key) mLastDisplayedX(0), mLastDisplayedY(0) { - // called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_ui_preview.xml"); } // Destructor @@ -832,7 +831,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save) if (save) { LLXMLNodePtr floater_write = new LLXMLNode(); - LLUICtrlFactory::getInstance()->buildFloater(*floaterp, path, floater_write); // just build it + (*floaterp)->buildFromFile(path, floater_write); // just build it if (!floater_write->isNull()) { @@ -846,7 +845,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save) } else { - LLUICtrlFactory::getInstance()->buildFloater(*floaterp, path, NULL); // just build it + (*floaterp)->buildFromFile(path); // just build it (*floaterp)->openFloater((*floaterp)->getKey()); (*floaterp)->setCanResize((*floaterp)->isResizable()); } @@ -885,7 +884,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save) if (save) { LLXMLNodePtr panel_write = new LLXMLNode(); - LLUICtrlFactory::getInstance()->buildPanel(panel, path, panel_write); // build it + panel->buildFromFile(path, panel_write); // build it if (!panel_write->isNull()) { @@ -899,7 +898,7 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save) } else { - LLUICtrlFactory::getInstance()->buildPanel(panel, path); // build it + panel->buildFromFile(path); // build it LLRect new_size = panel->getRect(); // get its rectangle panel->setOrigin(0,0); // reset its origin point so it's not offset by -left or other XUI attributes (*floaterp)->setTitle(path); // use the file name as its title, since panels have no guaranteed meaningful name attribute diff --git a/indra/newview/llfloaterurlentry.cpp b/indra/newview/llfloaterurlentry.cpp index 40f6d07286..151cd2a1cd 100644 --- a/indra/newview/llfloaterurlentry.cpp +++ b/indra/newview/llfloaterurlentry.cpp @@ -82,7 +82,7 @@ LLFloaterURLEntry::LLFloaterURLEntry(LLHandle<LLPanel> parent) : LLFloater(LLSD()), mPanelLandMediaHandle(parent) { - LLUICtrlFactory::getInstance()->buildFloater(this, "floater_url_entry.xml", NULL); + buildFromFile("floater_url_entry.xml"); } //----------------------------------------------------------------------------- diff --git a/indra/newview/llfloaterwater.cpp b/indra/newview/llfloaterwater.cpp index 9c3f943013..be4b144f41 100644 --- a/indra/newview/llfloaterwater.cpp +++ b/indra/newview/llfloaterwater.cpp @@ -63,7 +63,6 @@ std::set<std::string> LLFloaterWater::sDefaultPresets; LLFloaterWater::LLFloaterWater(const LLSD& key) : LLFloater(key) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_water.xml"); } LLFloaterWater::~LLFloaterWater() diff --git a/indra/newview/llfloaterwhitelistentry.cpp b/indra/newview/llfloaterwhitelistentry.cpp index 705c8afd00..1ce151d7ed 100644 --- a/indra/newview/llfloaterwhitelistentry.cpp +++ b/indra/newview/llfloaterwhitelistentry.cpp @@ -47,7 +47,6 @@ LLFloaterWhiteListEntry::LLFloaterWhiteListEntry( const LLSD& key ) : LLFloater(key) { -// LLUICtrlFactory::getInstance()->buildFloater(this, "floater_whitelist_entry.xml"); } /////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llfloaterwindlight.cpp b/indra/newview/llfloaterwindlight.cpp index 7131cb5de3..ae98b2cf99 100644 --- a/indra/newview/llfloaterwindlight.cpp +++ b/indra/newview/llfloaterwindlight.cpp @@ -66,7 +66,6 @@ static const F32 WL_SUN_AMBIENT_SLIDER_SCALE = 3.0f; LLFloaterWindLight::LLFloaterWindLight(const LLSD& key) : LLFloater(key) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_windlight_options.xml"); } LLFloaterWindLight::~LLFloaterWindLight() diff --git a/indra/newview/llfloaterwindowsize.cpp b/indra/newview/llfloaterwindowsize.cpp index 5519be6f08..1ab796cb9b 100644 --- a/indra/newview/llfloaterwindowsize.cpp +++ b/indra/newview/llfloaterwindowsize.cpp @@ -86,7 +86,6 @@ public: LLFloaterWindowSize::LLFloaterWindowSize(const LLSD& key) : LLFloater(key) { - //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_window_size.xml"); } LLFloaterWindowSize::~LLFloaterWindowSize() diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index 3afa31b873..7236894542 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -199,7 +199,6 @@ LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key) mFactoryMap["objects_mapview"] = LLCallbackMap(createWorldMapView, NULL); - //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_world_map.xml", FALSE); mCommitCallbackRegistrar.add("WMap.Coordinates", boost::bind(&LLFloaterWorldMap::onCoordinatesCommit, this)); mCommitCallbackRegistrar.add("WMap.Location", boost::bind(&LLFloaterWorldMap::onLocationCommit, this)); mCommitCallbackRegistrar.add("WMap.AvatarCombo", boost::bind(&LLFloaterWorldMap::onAvatarComboCommit, this)); diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index d37886806b..a0cf96bb40 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -356,6 +356,10 @@ BOOL LLFolderView::addFolder( LLFolderViewFolder* folder) { mFolders.insert(mFolders.begin(), folder); } + if (folder->numSelected()) + { + recursiveIncrementNumDescendantsSelected(folder->numSelected()); + } folder->setShowLoadStatus(true); folder->setOrigin(0, 0); folder->reshape(getRect().getWidth(), 0); @@ -698,29 +702,24 @@ BOOL LLFolderView::changeSelection(LLFolderViewItem* selection, BOOL selected) return rv; } -S32 LLFolderView::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items) +void LLFolderView::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items) { - S32 rv = 0; - // now store resulting selection if (mAllowMultiSelect) { LLFolderViewItem *cur_selection = getCurSelectedItem(); - rv = LLFolderViewFolder::extendSelection(selection, cur_selection, items); + LLFolderViewFolder::extendSelection(selection, cur_selection, items); for (S32 i = 0; i < items.count(); i++) { addToSelectionList(items[i]); - rv++; } } else { setSelection(selection, FALSE, FALSE); - rv++; } mSignalSelectCallback = SIGNAL_KEYBOARD_FOCUS; - return rv; } void LLFolderView::sanitizeSelection() @@ -1978,7 +1977,11 @@ void LLFolderView::scrollToShowSelection() { // If items are filtered while background fetch is in progress // scrollbar resets to the first filtered item. See EXT-3981. - if (!LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() && mSelectedItems.size()) + // However we allow scrolling for folder views with mAutoSelectOverride + // (used in Places SP) as an exception because the selection in them + // is not reset during items filtering. See STORM-133. + if ( (!LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() || mAutoSelectOverride) + && mSelectedItems.size() ) { mNeedsScroll = TRUE; } diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index 980f9a34a6..66ab4ce5eb 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -74,7 +74,6 @@ public: virtual void doItem(LLFolderViewItem* item) = 0; }; - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLFolderView // @@ -146,18 +145,18 @@ public: // Record the selected item and pass it down the hierachy. virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus); - + // Used by menu callbacks void setSelectionByID(const LLUUID& obj_id, BOOL take_keyboard_focus); - + // Called once a frame to update the selection if mSelectThisID has been set - void updateSelection(); - + void updateSelection(); + // This method is used to toggle the selection of an item. Walks // children, and keeps track of selected objects. virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected); - virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items); + virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items); virtual std::set<LLUUID> getSelectionList() const; diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index 50b35bfc69..38cc34e19d 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -495,27 +495,34 @@ void LLFolderViewItem::dirtyFilter() // together. BOOL LLFolderViewItem::setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus) { - if( selection == this ) + if (selection == this && !mIsSelected) { - mIsSelected = TRUE; - if(mListener) + selectItem(); + if (mListener) { mListener->selectItem(); } } - else + else if (mIsSelected) // Deselect everything else. { - mIsSelected = FALSE; + deselectItem(); } return mIsSelected; } BOOL LLFolderViewItem::changeSelection(LLFolderViewItem* selection, BOOL selected) { - if(selection == this && mIsSelected != selected) + if (selection == this && mIsSelected != selected) { - mIsSelected = selected; - if(mListener) + if (mIsSelected) + { + deselectItem(); + } + else + { + selectItem(); + } + if (mListener) { mListener->selectItem(); } @@ -524,6 +531,33 @@ BOOL LLFolderViewItem::changeSelection(LLFolderViewItem* selection, BOOL selecte return FALSE; } +void LLFolderViewItem::deselectItem(void) +{ + llassert(mIsSelected); + + mIsSelected = FALSE; + + // Update ancestors' count of selected descendents. + LLFolderViewFolder* parent_folder = getParentFolder(); + if (parent_folder) + { + parent_folder->recursiveIncrementNumDescendantsSelected(-1); + } +} + +void LLFolderViewItem::selectItem(void) +{ + llassert(!mIsSelected); + + mIsSelected = TRUE; + + // Update ancestors' count of selected descendents. + LLFolderViewFolder* parent_folder = getParentFolder(); + if (parent_folder) + { + parent_folder->recursiveIncrementNumDescendantsSelected(1); + } +} BOOL LLFolderViewItem::isMovable() { @@ -1079,6 +1113,7 @@ void LLFolderViewItem::draw() LLFolderViewFolder::LLFolderViewFolder( const LLFolderViewItem::Params& p ): LLFolderViewItem( p ), // 0 = no create time + mNumDescendantsSelected(0), mIsOpen(FALSE), mExpanderHighlighted(FALSE), mCurHeight(0.f), @@ -1464,16 +1499,34 @@ BOOL LLFolderViewFolder::hasFilteredDescendants() return mMostFilteredDescendantGeneration >= getRoot()->getFilter()->getCurrentGeneration(); } +void LLFolderViewFolder::recursiveIncrementNumDescendantsSelected(S32 increment) +{ + LLFolderViewFolder* parent_folder = this; + do + { + parent_folder->mNumDescendantsSelected += increment; + + // Make sure we don't have negative values. + llassert(parent_folder->mNumDescendantsSelected >= 0); + + parent_folder = parent_folder->getParentFolder(); + } + while(parent_folder); +} + // Passes selection information on to children and record selection // information if necessary. BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem, - BOOL take_keyboard_focus) + BOOL take_keyboard_focus) { BOOL rv = FALSE; - if( selection == this ) + if (selection == this) { - mIsSelected = TRUE; - if(mListener) + if (!isSelected()) + { + selectItem(); + } + if (mListener) { mListener->selectItem(); } @@ -1481,7 +1534,10 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem } else { - mIsSelected = FALSE; + if (isSelected()) + { + deselectItem(); + } rv = FALSE; } BOOL child_selected = FALSE; @@ -1513,21 +1569,31 @@ BOOL LLFolderViewFolder::setSelection(LLFolderViewItem* selection, BOOL openitem return rv; } -// This method is used to change the selection of an item. If -// selection is 'this', then note selection as true. Returns TRUE -// if this or a child is now selected. -BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection, - BOOL selected) +// This method is used to change the selection of an item. +// Recursively traverse all children; if 'selection' is 'this' then change +// the select status if necessary. +// Returns TRUE if the selection state of this folder, or of a child, was changed. +BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection, BOOL selected) { BOOL rv = FALSE; if(selection == this) { - mIsSelected = selected; - if(mListener && selected) + if (isSelected() != selected) + { + rv = TRUE; + if (selected) + { + selectItem(); + } + else + { + deselectItem(); + } + } + if (mListener && selected) { mListener->selectItem(); } - rv = TRUE; } for (folders_t::iterator iter = mFolders.begin(); @@ -1551,16 +1617,14 @@ BOOL LLFolderViewFolder::changeSelection(LLFolderViewItem* selection, return rv; } -S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& selected_items) +void LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& selected_items) { - S32 num_selected = 0; - // pass on to child folders first for (folders_t::iterator iter = mFolders.begin(); iter != mFolders.end();) { folders_t::iterator fit = iter++; - num_selected += (*fit)->extendSelection(selection, last_selected, selected_items); + (*fit)->extendSelection(selection, last_selected, selected_items); } // handle selection of our immediate children... @@ -1653,7 +1717,6 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie if (item->changeSelection(item, TRUE)) { selected_items.put(item); - num_selected++; } } } @@ -1663,11 +1726,8 @@ S32 LLFolderViewFolder::extendSelection(LLFolderViewItem* selection, LLFolderVie if (selection->changeSelection(selection, TRUE)) { selected_items.put(selection); - num_selected++; } } - - return num_selected; } void LLFolderViewFolder::destroyView() @@ -1717,6 +1777,10 @@ void LLFolderViewFolder::removeView(LLFolderViewItem* item) return; } // deselect without traversing hierarchy + if (item->isSelected()) + { + item->deselectItem(); + } getRoot()->removeFromSelectionList(item); extractItem(item); delete item; @@ -1732,16 +1796,24 @@ void LLFolderViewFolder::extractItem( LLFolderViewItem* item ) // This is an evil downcast. However, it's only doing // pointer comparison to find if (which it should be ) the // item is in the container, so it's pretty safe. - LLFolderViewFolder* f = reinterpret_cast<LLFolderViewFolder*>(item); + LLFolderViewFolder* f = static_cast<LLFolderViewFolder*>(item); folders_t::iterator ft; ft = std::find(mFolders.begin(), mFolders.end(), f); - if(ft != mFolders.end()) + if (ft != mFolders.end()) { + if ((*ft)->numSelected()) + { + recursiveIncrementNumDescendantsSelected(-(*ft)->numSelected()); + } mFolders.erase(ft); } } else { + if ((*it)->isSelected()) + { + recursiveIncrementNumDescendantsSelected(-1); + } mItems.erase(it); } //item has been removed, need to update filter @@ -1905,6 +1977,10 @@ BOOL LLFolderViewFolder::isRemovable() BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item) { mItems.push_back(item); + if (item->isSelected()) + { + recursiveIncrementNumDescendantsSelected(1); + } item->setRect(LLRect(0, 0, getRect().getWidth(), 0)); item->setVisible(FALSE); addChild( item ); @@ -1918,6 +1994,10 @@ BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item) BOOL LLFolderViewFolder::addFolder(LLFolderViewFolder* folder) { mFolders.push_back(folder); + if (folder->numSelected()) + { + recursiveIncrementNumDescendantsSelected(folder->numSelected()); + } folder->setOrigin(0, 0); folder->reshape(getRect().getWidth(), 0); folder->setVisible(FALSE); diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h index d6e4b2f556..71679f3814 100644 --- a/indra/newview/llfolderviewitem.h +++ b/indra/newview/llfolderviewitem.h @@ -114,7 +114,7 @@ public: // layout constants static const S32 LEFT_PAD = 5; - // LEFT_INDENTATION is set via folder_indentation above + // LEFT_INDENTATION is set via folder_indentation above static const S32 ICON_PAD = 2; static const S32 ICON_WIDTH = 16; static const S32 TEXT_PAD = 1; @@ -127,6 +127,9 @@ public: // Mostly for debugging printout purposes. const std::string& getSearchableLabel() { return mSearchableLabel; } +private: + BOOL mIsSelected; + protected: friend class LLUICtrlFactory; friend class LLFolderViewEventListener; @@ -140,7 +143,6 @@ protected: time_t mCreationDate; LLFolderViewFolder* mParentFolder; LLFolderViewEventListener* mListener; - BOOL mIsSelected; BOOL mIsCurSelection; BOOL mSelectPending; LLFontGL::StyleFlags mLabelStyle; @@ -218,19 +220,23 @@ public: virtual void dirtyFilter(); - // If the selection is 'this' then note that otherwise - // ignore. Returns TRUE if this object was affected. If open is - // TRUE, then folders are opened up along the way to the - // selection. - virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem, - BOOL take_keyboard_focus); + // If 'selection' is 'this' then note that otherwise ignore. + // Returns TRUE if this item ends up being selected. + virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus); - // This method is used to toggle the selection of an item. If - // selection is 'this', then note selection, and return TRUE. + // This method is used to set the selection state of an item. + // If 'selection' is 'this' then note selection. + // Returns TRUE if the selection state of this item was changed. virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected); // this method is used to group select items - virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items){ return FALSE; } + virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items) { } + + // this method is used to deselect this element + void deselectItem(); + + // this method is used to select this element + void selectItem(); // gets multiple-element selection virtual std::set<LLUUID> getSelectionList() const; @@ -244,7 +250,7 @@ public: // destroys this item recursively virtual void destroyView(); - BOOL isSelected() { return mIsSelected; } + BOOL isSelected() const { return mIsSelected; } void setUnselected() { mIsSelected = FALSE; } @@ -253,7 +259,7 @@ public: BOOL getIsCurSelection() { return mIsCurSelection; } BOOL hasVisibleChildren() { return mHasVisibleChildren; } - + void setShowLoadStatus(bool status) { mShowLoadStatus = status; } // Call through to the viewed object and return true if it can be @@ -365,6 +371,13 @@ public: UNKNOWN, TRASH, NOT_TRASH } ETrash; +private: + S32 mNumDescendantsSelected; + +public: // Accessed needed by LLFolderViewItem + void recursiveIncrementNumDescendantsSelected(S32 increment); + S32 numSelected(void) const { return mNumDescendantsSelected + (isSelected() ? 1 : 0); } + protected: typedef std::list<LLFolderViewItem*> items_t; typedef std::list<LLFolderViewFolder*> folders_t; @@ -426,18 +439,19 @@ public: virtual void dirtyFilter(); // Passes selection information on to children and record - // selection information if necessary. Returns TRUE if this object - // (or a child) was affected. - virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem, - BOOL take_keyboard_focus); - - // This method is used to change the selection of an item. If - // selection is 'this', then note selection as true. Returns TRUE - // if this or a child is now selected. + // selection information if necessary. + // Returns TRUE if this object (or a child) ends up being selected. + // If 'openitem' is TRUE then folders are opened up along the way to the selection. + virtual BOOL setSelection(LLFolderViewItem* selection, BOOL openitem, BOOL take_keyboard_focus); + + // This method is used to change the selection of an item. + // Recursively traverse all children; if 'selection' is 'this' then change + // the select status if necessary. + // Returns TRUE if the selection state of this folder, or of a child, was changed. virtual BOOL changeSelection(LLFolderViewItem* selection, BOOL selected); // this method is used to group select items - virtual S32 extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items); + virtual void extendSelection(LLFolderViewItem* selection, LLFolderViewItem* last_selected, LLDynamicArray<LLFolderViewItem*>& items); // Returns true is this object and all of its children can be removed. virtual BOOL isRemovable(); @@ -527,6 +541,7 @@ public: time_t getCreationDate() const; bool isTrash() const; + S32 getNumSelectedDescendants(void) const { return mNumDescendantsSelected; } }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp index 4f9d51ce58..c3e6e1c2dc 100644 --- a/indra/newview/llgrouplist.cpp +++ b/indra/newview/llgrouplist.cpp @@ -283,7 +283,7 @@ mGroupNameBox(NULL), mInfoBtn(NULL), mGroupID(LLUUID::null) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_list_item.xml"); + buildFromFile( "panel_group_list_item.xml"); // Remember group icon width including its padding from the name text box, // so that we can hide and show the icon again later. diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index d464b67105..95cade7b4e 100644 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -1181,8 +1181,8 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data) } else { - if (!rd) llwarns << "Received role data for unkown role " << role_id << " in group " << group_id << llendl; - if (!md) llwarns << "Received role data for unkown member " << member_id << " in group " << group_id << llendl; + if (!rd) llwarns << "Received role data for unknown role " << role_id << " in group " << group_id << llendl; + if (!md) llwarns << "Received role data for unknown member " << member_id << " in group " << group_id << llendl; } } } diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp new file mode 100644 index 0000000000..d837ed8205 --- /dev/null +++ b/indra/newview/llhints.cpp @@ -0,0 +1,381 @@ +/** + * @file llhints.cpp + * @brief Hint popups for displaying context sensitive help in a UI overlay + * + * $LicenseInfo:firstyear=2000&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + + +#include "llviewerprecompiledheaders.h" // must be first include + +#include "llhints.h" + +#include "llbutton.h" +#include "lltextbox.h" +#include "llviewerwindow.h" +#include "llviewercontrol.h" +#include "llsdparam.h" + +class LLHintPopup : public LLPanel +{ +public: + + typedef enum e_popup_direction + { + LEFT, + TOP, + RIGHT, + BOTTOM, + TOP_RIGHT + } EPopupDirection; + + struct PopupDirections : public LLInitParam::TypeValuesHelper<LLHintPopup::EPopupDirection, PopupDirections> + { + static void declareValues() + { + declare("left", LLHintPopup::LEFT); + declare("right", LLHintPopup::RIGHT); + declare("top", LLHintPopup::TOP); + declare("bottom", LLHintPopup::BOTTOM); + declare("top_right", LLHintPopup::TOP_RIGHT); + } + }; + + struct TargetParams : public LLInitParam::Block<TargetParams> + { + Mandatory<std::string> target; + Mandatory<EPopupDirection, PopupDirections> direction; + + TargetParams() + : target("target"), + direction("direction") + {} + }; + + struct Params : public LLInitParam::Block<Params, LLPanel::Params> + { + Mandatory<LLNotificationPtr> notification; + Optional<TargetParams> target_params; + Optional<S32> distance; + Optional<LLUIImage*> left_arrow, + up_arrow, + right_arrow, + down_arrow, + lower_left_arrow; + + Optional<S32> left_arrow_offset, + up_arrow_offset, + right_arrow_offset, + down_arrow_offset; + Optional<F32> fade_in_time, + fade_out_time; + + Params() + : distance("distance"), + left_arrow("left_arrow"), + up_arrow("up_arrow"), + right_arrow("right_arrow"), + down_arrow("down_arrow"), + lower_left_arrow("lower_left_arrow"), + left_arrow_offset("left_arrow_offset"), + up_arrow_offset("up_arrow_offset"), + right_arrow_offset("right_arrow_offset"), + down_arrow_offset("down_arrow_offset"), + fade_in_time("fade_in_time"), + fade_out_time("fade_out_time") + {} + }; + + LLHintPopup(const Params&); + + /*virtual*/ BOOL postBuild(); + + void onClickClose() { hide(); LLNotifications::instance().cancel(mNotification); } + void draw(); + void hide() { if(!mHidden) {mHidden = true; mFadeTimer.reset();} } + +private: + LLNotificationPtr mNotification; + std::string mTarget; + EPopupDirection mDirection; + S32 mDistance; + LLUIImagePtr mArrowLeft, + mArrowUp, + mArrowRight, + mArrowDown, + mArrowDownAndLeft; + S32 mArrowLeftOffset, + mArrowUpOffset, + mArrowRightOffset, + mArrowDownOffset; + LLFrameTimer mFadeTimer; + F32 mFadeInTime, + mFadeOutTime; + bool mHidden; +}; + +static LLDefaultChildRegistry::Register<LLHintPopup> r("hint_popup"); + + +LLHintPopup::LLHintPopup(const LLHintPopup::Params& p) +: mNotification(p.notification), + mDirection(TOP), + mDistance(p.distance), + mArrowLeft(p.left_arrow), + mArrowUp(p.up_arrow), + mArrowRight(p.right_arrow), + mArrowDown(p.down_arrow), + mArrowDownAndLeft(p.lower_left_arrow), + mArrowLeftOffset(p.left_arrow_offset), + mArrowUpOffset(p.up_arrow_offset), + mArrowRightOffset(p.right_arrow_offset), + mArrowDownOffset(p.down_arrow_offset), + mHidden(false), + mFadeInTime(p.fade_in_time), + mFadeOutTime(p.fade_out_time), + LLPanel(p) +{ + if (p.target_params.isProvided()) + { + mDirection = p.target_params.direction; + mTarget = p.target_params.target; + } + buildFromFile( "panel_hint.xml", NULL, p); +} + +BOOL LLHintPopup::postBuild() +{ + LLTextBox& hint_text = getChildRef<LLTextBox>("hint_text"); + hint_text.setText(mNotification->getMessage()); + + getChild<LLButton>("close")->setClickedCallback(boost::bind(&LLHintPopup::onClickClose, this)); + getChild<LLTextBox>("hint_title")->setText(mNotification->getLabel()); + + LLRect text_bounds = hint_text.getTextBoundingRect(); + S32 delta_height = text_bounds.getHeight() - hint_text.getRect().getHeight(); + reshape(getRect().getWidth(), getRect().getHeight() + delta_height); + return TRUE; +} + +void LLHintPopup::draw() +{ + F32 alpha = 1.f; + if (mHidden) + { + alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, mFadeOutTime, 1.f, 0.f); + if (alpha == 0.f) + { + die(); + return; + } + } + else + { + alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, mFadeInTime, 0.f, 1.f); + } + + { LLViewDrawContext context(alpha); + + if (mTarget.empty()) + { + // just draw contents, no arrow, in default position + LLPanel::draw(); + } + else + { + LLView* targetp = LLHints::getHintTarget(mTarget).get(); + if (!targetp) + { + // target widget is no longer valid, go away + die(); + } + else if (!targetp->isInVisibleChain()) + { + // if target is invisible, don't draw, but keep alive in case widget comes back + } + else + { + LLRect target_rect; + targetp->localRectToOtherView(targetp->getLocalRect(), &target_rect, getParent()); + + LLRect my_local_rect = getLocalRect(); + LLRect my_rect; + LLRect arrow_rect; + LLUIImagePtr arrow_imagep; + + switch(mDirection) + { + case LEFT: + my_rect.setCenterAndSize( target_rect.mLeft - (my_local_rect.getWidth() / 2 + mDistance), + target_rect.getCenterY(), + my_local_rect.getWidth(), + my_local_rect.getHeight()); + if (mArrowRight) + { + arrow_rect.setCenterAndSize(my_local_rect.mRight + mArrowRight->getWidth() / 2 + mArrowRightOffset, + my_local_rect.getCenterY(), + mArrowRight->getWidth(), + mArrowRight->getHeight()); + arrow_imagep = mArrowRight; + } + break; + case TOP: + my_rect.setCenterAndSize( target_rect.getCenterX(), + target_rect.mTop + (my_local_rect.getHeight() / 2 + mDistance), + my_local_rect.getWidth(), + my_local_rect.getHeight()); + if (mArrowDown) + { + arrow_rect.setCenterAndSize(my_local_rect.getCenterX(), + my_local_rect.mBottom - mArrowDown->getHeight() / 2 + mArrowDownOffset, + mArrowDown->getWidth(), + mArrowDown->getHeight()); + arrow_imagep = mArrowDown; + } + break; + case RIGHT: + my_rect.setCenterAndSize( target_rect.mRight + (my_local_rect.getWidth() / 2 + mDistance), + target_rect.getCenterY(), + my_local_rect.getWidth(), + my_local_rect.getHeight()); + if (mArrowLeft) + { + arrow_rect.setCenterAndSize(my_local_rect.mLeft - mArrowLeft->getWidth() / 2 + mArrowLeftOffset, + my_local_rect.getCenterY(), + mArrowLeft->getWidth(), + mArrowLeft->getHeight()); + arrow_imagep = mArrowLeft; + } + break; + case BOTTOM: + my_rect.setCenterAndSize( target_rect.getCenterX(), + target_rect.mBottom - (my_local_rect.getHeight() / 2 + mDistance), + my_local_rect.getWidth(), + my_local_rect.getHeight()); + if (mArrowUp) + { + arrow_rect.setCenterAndSize(my_local_rect.getCenterX(), + my_local_rect.mTop + mArrowUp->getHeight() / 2 + mArrowUpOffset, + mArrowUp->getWidth(), + mArrowUp->getHeight()); + arrow_imagep = mArrowUp; + } + break; + case TOP_RIGHT: + my_rect.setCenterAndSize( target_rect.mRight + (my_local_rect.getWidth() / 2), + target_rect.mTop + (my_local_rect.getHeight() / 2 + mDistance), + my_local_rect.getWidth(), + my_local_rect.getHeight()); + if (mArrowDownAndLeft) + { + arrow_rect.setCenterAndSize(my_local_rect.mLeft + mArrowDownAndLeft->getWidth() / 2 + mArrowLeftOffset, + my_local_rect.mBottom - mArrowDownAndLeft->getHeight() / 2 + mArrowDownOffset, + mArrowDownAndLeft->getWidth(), + mArrowDownAndLeft->getHeight()); + arrow_imagep = mArrowDownAndLeft; + } + } + setShape(my_rect); + LLPanel::draw(); + + if (arrow_imagep) arrow_imagep->draw(arrow_rect, LLColor4(1.f, 1.f, 1.f, alpha)); + } + } + } +} + + +LLRegistry<std::string, LLHandle<LLView> > LLHints::sTargetRegistry; +std::map<LLNotificationPtr, class LLHintPopup*> LLHints::sHints; + +//static +void LLHints::show(LLNotificationPtr hint) +{ + LLHintPopup::Params p(LLUICtrlFactory::getDefaultParams<LLHintPopup>()); + + LLParamSDParser parser; + parser.readSD(hint->getPayload(), p, true); + p.notification = hint; + + if (p.validateBlock()) + { + LLHintPopup* popup = new LLHintPopup(p); + + sHints[hint] = popup; + + LLView* hint_holder = gViewerWindow->getHintHolder(); + if (hint_holder) + { + hint_holder->addChild(popup); + popup->centerWithin(hint_holder->getLocalRect()); + } + } +} + +//static +void LLHints::hide(LLNotificationPtr hint) +{ + hint_map_t::iterator found_it = sHints.find(hint); + if (found_it != sHints.end()) + { + found_it->second->hide(); + sHints.erase(found_it); + } +} + +//static +void LLHints::registerHintTarget(const std::string& name, LLHandle<LLView> target) +{ + sTargetRegistry.defaultRegistrar().replace(name, target); +} + +//static +LLHandle<LLView> LLHints::getHintTarget(const std::string& name) +{ + LLHandle<LLView>* handlep = sTargetRegistry.getValue(name); + if (handlep) + { + return *handlep; + } + else + { + return LLHandle<LLView>(); + } +} + +//static +void LLHints::initClass() +{ + sRegister.reference(); + + LLControlVariablePtr control = gSavedSettings.getControl("EnableUIHints"); + control->getSignal()->connect(boost::bind(&showHints, _2)); + gViewerWindow->getHintHolder()->setVisible(control->getValue().asBoolean()); + +} + +//staic +void LLHints::showHints(const LLSD& show) +{ + bool visible = show.asBoolean(); + gViewerWindow->getHintHolder()->setVisible(visible); +} diff --git a/indra/newview/llhints.h b/indra/newview/llhints.h new file mode 100644 index 0000000000..ebffe561b9 --- /dev/null +++ b/indra/newview/llhints.h @@ -0,0 +1,50 @@ +/** + * @file llhints.h + * @brief Hint popups for displaying context sensitive help in a UI overlay + * + * $LicenseInfo:firstyear=2000&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLHINTS_H +#define LL_LLHINTS_H + +#include "llpanel.h" +#include "llnotifications.h" + + +class LLHints : public LLInitClass<LLHints> +{ +public: + static void show(LLNotificationPtr hint); + static void hide(LLNotificationPtr hint); + static void registerHintTarget(const std::string& name, LLHandle<LLView> target); + static LLHandle<LLView> getHintTarget(const std::string& name); + static void initClass(); +private: + static LLRegistry<std::string, LLHandle<LLView> > sTargetRegistry; + typedef std::map<LLNotificationPtr, class LLHintPopup*> hint_map_t; + static hint_map_t sHints; + static void showHints(const LLSD& show); +}; + + +#endif diff --git a/indra/newview/llhudeffectbeam.cpp b/indra/newview/llhudeffectbeam.cpp index 43a8dd1d81..fc8fc3cd0c 100644 --- a/indra/newview/llhudeffectbeam.cpp +++ b/indra/newview/llhudeffectbeam.cpp @@ -311,6 +311,11 @@ void LLHUDEffectBeam::render() } } +void LLHUDEffectBeam::renderForTimer() +{ + render(); +} + void LLHUDEffectBeam::setupParticle(const S32 i) { LLVector3d start_pos_global; diff --git a/indra/newview/llhudeffectbeam.h b/indra/newview/llhudeffectbeam.h index 7365894461..69e2b51e98 100644 --- a/indra/newview/llhudeffectbeam.h +++ b/indra/newview/llhudeffectbeam.h @@ -58,6 +58,7 @@ protected: ~LLHUDEffectBeam(); /*virtual*/ void render(); + /*virtual*/ void renderForTimer(); /*virtual*/ void packData(LLMessageSystem *mesgsys); /*virtual*/ void unpackData(LLMessageSystem *mesgsys, S32 blocknum); private: diff --git a/indra/newview/llhudeffecttrail.cpp b/indra/newview/llhudeffecttrail.cpp index 786491211d..fbba2c354b 100644 --- a/indra/newview/llhudeffecttrail.cpp +++ b/indra/newview/llhudeffecttrail.cpp @@ -286,3 +286,8 @@ void LLHUDEffectSpiral::render() return; } } + +void LLHUDEffectSpiral::renderForTimer() +{ + render(); +} diff --git a/indra/newview/llhudeffecttrail.h b/indra/newview/llhudeffecttrail.h index 60836c2532..033fbeb06d 100644 --- a/indra/newview/llhudeffecttrail.h +++ b/indra/newview/llhudeffecttrail.h @@ -68,6 +68,7 @@ protected: ~LLHUDEffectSpiral(); /*virtual*/ void render(); + /*virtual*/ void renderForTimer(); /*virtual*/ void packData(LLMessageSystem *mesgsys); /*virtual*/ void unpackData(LLMessageSystem *mesgsys, S32 blocknum); private: diff --git a/indra/newview/llhudobject.cpp b/indra/newview/llhudobject.cpp index 2b73ed1dcd..ef53bc65b5 100644 --- a/indra/newview/llhudobject.cpp +++ b/indra/newview/llhudobject.cpp @@ -311,6 +311,27 @@ void LLHUDObject::renderAllForSelect() } // static +void LLHUDObject::renderAllForTimer() +{ + LLHUDObject *hud_objp; + + hud_object_list_t::iterator object_it; + for (object_it = sHUDObjects.begin(); object_it != sHUDObjects.end(); ) + { + hud_object_list_t::iterator cur_it = object_it++; + hud_objp = (*cur_it); + if (hud_objp->getNumRefs() == 1) + { + sHUDObjects.erase(cur_it); + } + else if (hud_objp->isVisible()) + { + hud_objp->renderForTimer(); + } + } +} + +// static void LLHUDObject::sortObjects() { sHUDObjects.sort(hud_object_further_away()); diff --git a/indra/newview/llhudobject.h b/indra/newview/llhudobject.h index d304ac41af..3d64a0c986 100644 --- a/indra/newview/llhudobject.h +++ b/indra/newview/llhudobject.h @@ -75,6 +75,7 @@ public: static void updateAll(); static void renderAll(); static void renderAllForSelect(); + static void renderAllForTimer(); static void cleanupHUDObjects(); @@ -106,6 +107,7 @@ protected: virtual void render() = 0; virtual void renderForSelect() {}; + virtual void renderForTimer() {}; protected: U8 mType; diff --git a/indra/newview/llhudview.cpp b/indra/newview/llhudview.cpp index 261d9f1df7..ae3204e35c 100644 --- a/indra/newview/llhudview.cpp +++ b/indra/newview/llhudview.cpp @@ -56,7 +56,7 @@ const S32 HUD_ARROW_SIZE = 32; LLHUDView::LLHUDView(const LLRect& r) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_hud.xml"); + buildFromFile( "panel_hud.xml"); setShape(r, true); } diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 967f38bfd2..a7a348f072 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -257,14 +257,14 @@ BOOL LLIMFloater::postBuild() } mControlPanel->setSessionId(mSessionID); - mControlPanel->setVisible(gSavedSettings.getBOOL("IMShowControlPanel")); + mControlPanel->getParent()->setVisible(gSavedSettings.getBOOL("IMShowControlPanel")); LLButton* slide_left = getChild<LLButton>("slide_left_btn"); - slide_left->setVisible(mControlPanel->getVisible()); + slide_left->setVisible(mControlPanel->getParent()->getVisible()); slide_left->setClickedCallback(boost::bind(&LLIMFloater::onSlide, this)); LLButton* slide_right = getChild<LLButton>("slide_right_btn"); - slide_right->setVisible(!mControlPanel->getVisible()); + slide_right->setVisible(!mControlPanel->getParent()->getVisible()); slide_right->setClickedCallback(boost::bind(&LLIMFloater::onSlide, this)); mInputEditor = getChild<LLLineEditor>("chat_editor"); @@ -363,12 +363,12 @@ void* LLIMFloater::createPanelAdHocControl(void* userdata) void LLIMFloater::onSlide() { - mControlPanel->setVisible(!mControlPanel->getVisible()); + mControlPanel->getParent()->setVisible(!mControlPanel->getParent()->getVisible()); - gSavedSettings.setBOOL("IMShowControlPanel", mControlPanel->getVisible()); + gSavedSettings.setBOOL("IMShowControlPanel", mControlPanel->getParent()->getVisible()); - getChild<LLButton>("slide_left_btn")->setVisible(mControlPanel->getVisible()); - getChild<LLButton>("slide_right_btn")->setVisible(!mControlPanel->getVisible()); + getChild<LLButton>("slide_left_btn")->setVisible(mControlPanel->getParent()->getVisible()); + getChild<LLButton>("slide_right_btn")->setVisible(!mControlPanel->getParent()->getVisible()); LLLayoutStack* stack = getChild<LLLayoutStack>("im_panels"); if (stack) stack->setAnimate(true); diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index 9eb11a6ac4..8a84c7a9c9 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -100,9 +100,9 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp, if(gAgent.isInGroup(session_id, TRUE)) { - LLGroupIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLGroupIconCtrl>(); + LLGroupIconCtrl::Params icon_params; icon_params.group_id = session_id; - icon = LLUICtrlFactory::instance().createWidget<LLGroupIconCtrl>(icon_params); + icon = LLUICtrlFactory::instance().create<LLGroupIconCtrl>(icon_params); mSessions[session_id] = floaterp; floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id)); @@ -111,9 +111,9 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp, { LLUUID avatar_id = LLIMModel::getInstance()->getOtherParticipantID(session_id); - LLAvatarIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLAvatarIconCtrl>(); + LLAvatarIconCtrl::Params icon_params; icon_params.avatar_id = avatar_id; - icon = LLUICtrlFactory::instance().createWidget<LLAvatarIconCtrl>(icon_params); + icon = LLUICtrlFactory::instance().create<LLAvatarIconCtrl>(icon_params); mSessions[session_id] = floaterp; floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id)); diff --git a/indra/newview/llimhandler.cpp b/indra/newview/llimhandler.cpp index 1cbd273e96..d419f518ee 100644 --- a/indra/newview/llimhandler.cpp +++ b/indra/newview/llimhandler.cpp @@ -121,7 +121,7 @@ bool LLIMHandler::processNotification(const LLSD& notify) { mChannel->killToastByNotificationID(notification->getID()); } - return true; + return false; } //-------------------------------------------------------------------------- diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index 0e3b78df7f..f9f7a65ba9 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -174,7 +174,7 @@ LLFloaterIMPanel::LLFloaterIMPanel(const std::string& session_label, LLUICtrlFactory::getInstance()->buildFloater(this, xml_filename, NULL); setTitle(mSessionLabel); - mInputEditor->setMaxTextLength(1023); + mInputEditor->setMaxTextLength(DB_IM_MSG_STR_LEN); // enable line history support for instant message bar mInputEditor->setEnableLineHistory(TRUE); diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 8adc54df8f..5001319186 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -75,7 +75,6 @@ const static std::string IM_TEXT("message"); const static std::string IM_FROM("from"); const static std::string IM_FROM_ID("from_id"); -const static std::string NO_SESSION("(IM Session Doesn't Exist)"); const static std::string ADHOC_NAME_SUFFIX(" Conference"); const static std::string NEARBY_P2P_BY_OTHER("nearby_P2P_by_other"); @@ -237,25 +236,6 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& new LLSessionTimeoutTimer(mSessionID, SESSION_INITIALIZATION_TIMEOUT); } - // *WORKAROUND: for server hard-coded string in indra\newsim\llsimchatterbox.cpp - if (isAdHocSessionType() && IM_SESSION_INVITE == type) - { - // For an ad-hoc incoming chat name is received from the server and is in a form of "<Avatar's name> Conference" - // Lets update it to localize the "Conference" word. See EXT-8429. - S32 separator_index = mName.rfind(" "); - std::string name = mName.substr(0, separator_index); - ++separator_index; - std::string conference_word = mName.substr(separator_index, mName.length()); - - // additional check that session name is what we expected - if ("Conference" == conference_word) - { - LLStringUtil::format_map_t args; - args["[AGENT_NAME]"] = name; - LLTrans::findString(mName, "conference-title-incoming", args); - } - } - if (IM_NOTHING_SPECIAL == type) { mCallBackEnabled = LLVoiceClient::getInstance()->isSessionCallBackPossible(mSessionID); @@ -272,6 +252,27 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& LLLogChat::loadAllHistory(mHistoryFileName, chat_history); addMessagesFromHistory(chat_history); } + + // Localizing name of ad-hoc session. STORM-153 + // Changing name should happen here- after the history file was created, so that + // history files have consistent (English) names in different locales. + if (isAdHocSessionType() && IM_SESSION_INVITE == type) + { + // Name here has a form of "<Avatar's name> Conference" + // Lets update it to localize the "Conference" word. See EXT-8429. + S32 separator_index = mName.rfind(" "); + std::string name = mName.substr(0, separator_index); + ++separator_index; + std::string conference_word = mName.substr(separator_index, mName.length()); + + // additional check that session name is what we expected + if ("Conference" == conference_word) + { + LLStringUtil::format_map_t args; + args["[AGENT_NAME]"] = name; + LLTrans::findString(mName, "conference-title-incoming", args); + } + } } void LLIMModel::LLIMSession::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction) @@ -627,7 +628,10 @@ bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, co LLIMSession* session = new LLIMSession(session_id, name, type, other_participant_id, ids, voice); mId2SessionMap[session_id] = session; - LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, name, other_participant_id); + // When notifying observer, name of session is used instead of "name", because they may not be the + // same if it is an adhoc session (in this case name is localized in LLIMSession constructor). + std::string session_name = LLIMModel::getInstance()->getName(session_id); + LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, session_name, other_participant_id); return true; @@ -797,14 +801,14 @@ LLIMModel::LLIMSession* LLIMModel::addMessageSilently(const LLUUID& session_id, } -const std::string& LLIMModel::getName(const LLUUID& session_id) const +const std::string LLIMModel::getName(const LLUUID& session_id) const { LLIMSession* session = findIMSession(session_id); if (!session) { llwarns << "session " << session_id << "does not exist " << llendl; - return NO_SESSION; + return LLTrans::getString("no_session_message"); } return session->mName; diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 57d31795ca..8eee2e9b2b 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -236,7 +236,7 @@ public: * For an incoming ad-hoc chat - is received from the server and is in a from of "<Avatar's name> Conference" * It is updated in LLIMModel::LLIMSession's constructor to localize the "Conference". */ - const std::string& getName(const LLUUID& session_id) const; + const std::string getName(const LLUUID& session_id) const; /** * Get number of unread messages in a session with session_id diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index eb23ab95dd..5618cc81c1 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -34,19 +34,20 @@ #include "llinventorybridge.h" // external projects -#include "lltransfersourceasset.h" +#include "lltransfersourceasset.h" #include "llagent.h" #include "llagentcamera.h" #include "llagentwearables.h" #include "llappearancemgr.h" -#include "llavataractions.h" +#include "llattachmentsmgr.h" +#include "llavataractions.h" #include "llfloateropenobject.h" #include "llfloaterreg.h" #include "llfloaterworldmap.h" #include "llfriendcard.h" #include "llgesturemgr.h" -#include "llgiveinventory.h" +#include "llgiveinventory.h" #include "llimfloater.h" #include "llimview.h" #include "llinventoryclipboard.h" @@ -106,7 +107,7 @@ void dec_busy_count() void remove_inventory_category_from_avatar(LLInventoryCategory* category); void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id); bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv*); -bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response); +bool confirm_attachment_rez(const LLSD& notification, const LLSD& response); void teleport_via_landmark(const LLUUID& asset_id); // +=================================================+ @@ -2487,6 +2488,10 @@ void LLFolderBridge::folderOptionsMenu() { disabled_items.push_back(std::string("Remove From Outfit")); } + if (!LLAppearanceMgr::instance().getCanReplaceCOF(mUUID)) + { + disabled_items.push_back(std::string("Replace Outfit")); + } mItems.push_back(std::string("Outfit Separator")); } LLMenuGL* menup = dynamic_cast<LLMenuGL*>(mMenu.get()); @@ -2869,6 +2874,66 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response return false; } +// Returns true if the item can be moved to Current Outfit or any outfit folder. +static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit) +{ + if ((inv_item->getInventoryType() != LLInventoryType::IT_WEARABLE) && + (inv_item->getInventoryType() != LLInventoryType::IT_GESTURE) && + (inv_item->getInventoryType() != LLInventoryType::IT_OBJECT)) + { + return FALSE; + } + + if (move_is_into_current_outfit && get_is_item_worn(inv_item->getUUID())) + { + return FALSE; + } + + return TRUE; +} + +void LLFolderBridge::dropToFavorites(LLInventoryItem* inv_item) +{ + // use callback to rearrange favorite landmarks after adding + // to have new one placed before target (on which it was dropped). See EXT-4312. + LLPointer<AddFavoriteLandmarkCallback> cb = new AddFavoriteLandmarkCallback(); + LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); + LLFolderViewItem* drag_over_item = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL; + if (drag_over_item && drag_over_item->getListener()) + { + cb.get()->setTargetLandmarkId(drag_over_item->getListener()->getUUID()); + } + + copy_inventory_item( + gAgent.getID(), + inv_item->getPermissions().getOwner(), + inv_item->getUUID(), + mUUID, + std::string(), + cb); +} + +void LLFolderBridge::dropToOutfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit) +{ + // BAP - should skip if dup. + if (move_is_into_current_outfit) + { + LLAppearanceMgr::instance().wearItemOnAvatar(inv_item->getUUID(), true, true); + } + else + { + LLPointer<LLInventoryCallback> cb = NULL; + link_inventory_item( + gAgent.getID(), + inv_item->getLinkedUUID(), + mUUID, + inv_item->getName(), + inv_item->getDescription(), + LLAssetType::AT_LINK, + cb); + } +} + // This is used both for testing whether an item can be dropped // into the folder, as well as performing the actual drop, depending // if drop == TRUE. @@ -2881,18 +2946,20 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, if(!isAgentInventory()) return FALSE; // cannot drag into library if (!isAgentAvatarValid()) return FALSE; + const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false); + const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false); + + const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); + const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); + LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource(); BOOL accept = FALSE; LLViewerObject* object = NULL; if(LLToolDragAndDrop::SOURCE_AGENT == source) { const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false); - const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false); - const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false); const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id); - const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); - const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); const BOOL move_is_outof_current_outfit = LLAppearanceMgr::instance().getIsInCOF(inv_item->getUUID()); const BOOL folder_allows_reorder = (mUUID == favorites_id); @@ -2944,14 +3011,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, accept = FALSE; if (move_is_into_current_outfit || move_is_into_outfit) { - if ((inv_item->getInventoryType() != LLInventoryType::IT_WEARABLE) && - (inv_item->getInventoryType() != LLInventoryType::IT_GESTURE) && - (inv_item->getInventoryType() != LLInventoryType::IT_OBJECT)) - accept = FALSE; - } - if (move_is_into_current_outfit && get_is_item_worn(inv_item->getUUID())) - { - accept = FALSE; + accept = can_move_to_outfit(inv_item, move_is_into_current_outfit); } if(accept && drop) @@ -2995,50 +3055,13 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, // (copy the item) else if (favorites_id == mUUID) { - // use callback to rearrange favorite landmarks after adding - // to have new one placed before target (on which it was dropped). See EXT-4312. - LLPointer<AddFavoriteLandmarkCallback> cb = new AddFavoriteLandmarkCallback(); - LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get()); - LLFolderViewItem* drag_over_item = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL; - if (drag_over_item && drag_over_item->getListener()) - { - cb.get()->setTargetLandmarkId(drag_over_item->getListener()->getUUID()); - } - - copy_inventory_item( - gAgent.getID(), - inv_item->getPermissions().getOwner(), - inv_item->getUUID(), - mUUID, - std::string(), - cb); + dropToFavorites(inv_item); } // CURRENT OUTFIT or OUTFIT folder // (link the item) else if (move_is_into_current_outfit || move_is_into_outfit) { - if ((inv_item->getInventoryType() == LLInventoryType::IT_WEARABLE) || - (inv_item->getInventoryType() == LLInventoryType::IT_GESTURE) || - (inv_item->getInventoryType() == LLInventoryType::IT_OBJECT)) - { - // BAP - should skip if dup. - if (move_is_into_current_outfit) - { - LLAppearanceMgr::instance().wearItemOnAvatar(inv_item->getUUID(), true, true); - } - else - { - LLPointer<LLInventoryCallback> cb = NULL; - link_inventory_item( - gAgent.getID(), - inv_item->getLinkedUUID(), - mUUID, - inv_item->getName(), - inv_item->getDescription(), - LLAssetType::AT_LINK, - cb); - } - } + dropToOutfit(inv_item, move_is_into_current_outfit); } // NORMAL or TRASH folder // (move the item, restamp if into trash) @@ -3087,6 +3110,15 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, is_move = TRUE; accept = TRUE; } + + // Don't allow placing an original item into Current Outfit or an outfit folder + // because they must contain only links to wearable items. + // *TODO: Probably we should create a link to an item if it was dragged to outfit or COF. + if(move_is_into_current_outfit || move_is_into_outfit) + { + accept = FALSE; + } + if(drop && accept) { LLMoveInv* move_inv = new LLMoveInv; @@ -3126,15 +3158,36 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, if(item && item->isFinished()) { accept = TRUE; - if(drop) + + if (move_is_into_current_outfit || move_is_into_outfit) { - copy_inventory_item( - gAgent.getID(), - inv_item->getPermissions().getOwner(), - inv_item->getUUID(), - mUUID, - std::string(), - LLPointer<LLInventoryCallback>(NULL)); + accept = can_move_to_outfit(inv_item, move_is_into_current_outfit); + } + + if (accept && drop) + { + // FAVORITES folder + // (copy the item) + if (favorites_id == mUUID) + { + dropToFavorites(inv_item); + } + // CURRENT OUTFIT or OUTFIT folder + // (link the item) + else if (move_is_into_current_outfit || move_is_into_outfit) + { + dropToOutfit(inv_item, move_is_into_current_outfit); + } + else + { + copy_inventory_item( + gAgent.getID(), + inv_item->getPermissions().getOwner(), + inv_item->getUUID(), + mUUID, + std::string(), + LLPointer<LLInventoryCallback>(NULL)); + } } } } @@ -3997,22 +4050,22 @@ std::string LLObjectBridge::getLabelSuffix() const { if (get_is_item_worn(mUUID)) { - if (!isAgentAvatarValid()) + if (!isAgentAvatarValid()) // Error condition, can't figure out attach point { return LLItemBridge::getLabelSuffix() + LLTrans::getString("worn"); } - std::string attachment_point_name = gAgentAvatarp->getAttachedPointName(mUUID); - + if (attachment_point_name == LLStringUtil::null) // Error condition, invalid attach point + { + attachment_point_name = "Invalid Attachment"; + } // e.g. "(worn on ...)" / "(attached to ...)" LLStringUtil::format_map_t args; args["[ATTACHMENT_POINT]"] = LLTrans::getString(attachment_point_name); + return LLItemBridge::getLabelSuffix() + LLTrans::getString("WornOnAttachmentPoint", args); } - else - { - return LLItemBridge::getLabelSuffix(); - } + return LLItemBridge::getLabelSuffix(); } void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment, bool replace) @@ -4043,19 +4096,15 @@ void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attach } } - if (!replace) - { - attach_pt |= ATTACHMENT_ADD; - } - LLSD payload; payload["item_id"] = item_id; // Wear the base object in case this is a link. payload["attachment_point"] = attach_pt; + payload["is_add"] = !replace; if (replace && (attachment && attachment->getNumObjects() > 0)) { - LLNotificationsUtil::add("ReplaceAttachment", LLSD(), payload, confirm_replace_attachment_rez); + LLNotificationsUtil::add("ReplaceAttachment", LLSD(), payload, confirm_attachment_rez); } else { @@ -4063,7 +4112,7 @@ void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attach } } -bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response) +bool confirm_attachment_rez(const LLSD& notification, const LLSD& response) { if (!gAgentAvatarp->canAttachMoreObjects()) { @@ -4081,27 +4130,41 @@ bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& respon if (itemp) { + /* + { + U8 attachment_pt = notification["payload"]["attachment_point"].asInteger(); + + LLMessageSystem* msg = gMessageSystem; + msg->newMessageFast(_PREHASH_RezSingleAttachmentFromInv); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_ObjectData); + msg->addUUIDFast(_PREHASH_ItemID, itemp->getUUID()); + msg->addUUIDFast(_PREHASH_OwnerID, itemp->getPermissions().getOwner()); + msg->addU8Fast(_PREHASH_AttachmentPt, attachment_pt); + pack_permissions_slam(msg, itemp->getFlags(), itemp->getPermissions()); + msg->addStringFast(_PREHASH_Name, itemp->getName()); + msg->addStringFast(_PREHASH_Description, itemp->getDescription()); + msg->sendReliable(gAgent.getRegion()->getHost()); + return false; + } + */ + + // Queue up attachments to be sent in next idle tick, this way the + // attachments are batched up all into one message versus each attachment + // being sent in its own separate attachments message. U8 attachment_pt = notification["payload"]["attachment_point"].asInteger(); - + BOOL is_add = notification["payload"]["is_add"].asBoolean(); - LLMessageSystem* msg = gMessageSystem; - msg->newMessageFast(_PREHASH_RezSingleAttachmentFromInv); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->nextBlockFast(_PREHASH_ObjectData); - msg->addUUIDFast(_PREHASH_ItemID, itemp->getUUID()); - msg->addUUIDFast(_PREHASH_OwnerID, itemp->getPermissions().getOwner()); - msg->addU8Fast(_PREHASH_AttachmentPt, attachment_pt); - pack_permissions_slam(msg, itemp->getFlags(), itemp->getPermissions()); - msg->addStringFast(_PREHASH_Name, itemp->getName()); - msg->addStringFast(_PREHASH_Description, itemp->getDescription()); - msg->sendReliable(gAgent.getRegion()->getHost()); + LLAttachmentsMgr::instance().addAttachment(item_id, + attachment_pt, + is_add); } } return false; } -static LLNotificationFunctorRegistration confirm_replace_attachment_rez_reg("ReplaceAttachment", confirm_replace_attachment_rez); +static LLNotificationFunctorRegistration confirm_replace_attachment_rez_reg("ReplaceAttachment", confirm_attachment_rez); void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index e1bfff7e0c..99db3a9b17 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -302,6 +302,8 @@ protected: menuentry_vec_t getMenuItems() { return mItems; } // returns a copy of current menu items + void dropToFavorites(LLInventoryItem* inv_item); + void dropToOutfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit); //-------------------------------------------------------------------- // Messy hacks for handling folder options diff --git a/indra/newview/llinventoryicon.cpp b/indra/newview/llinventoryicon.cpp index 2201481df3..a044812b66 100644 --- a/indra/newview/llinventoryicon.cpp +++ b/indra/newview/llinventoryicon.cpp @@ -90,6 +90,9 @@ LLIconDictionary::LLIconDictionary() addEntry(LLInventoryIcon::ICONNAME_LINKITEM, new IconEntry("Inv_LinkItem")); addEntry(LLInventoryIcon::ICONNAME_LINKFOLDER, new IconEntry("Inv_LinkItem")); + addEntry(LLInventoryIcon::ICONNAME_MESH, new IconEntry("Inv_Mesh")); + + addEntry(LLInventoryIcon::ICONNAME_INVALID, new IconEntry("Inv_Invalid")); addEntry(LLInventoryIcon::ICONNAME_NONE, new IconEntry("NONE")); } @@ -161,6 +164,8 @@ const std::string& LLInventoryIcon::getIconName(LLAssetType::EType asset_type, case LLAssetType::AT_OBJECT: idx = ICONNAME_OBJECT; break; + case LLAssetType::AT_MESH: + idx = ICONNAME_MESH; default: break; } diff --git a/indra/newview/llinventoryicon.h b/indra/newview/llinventoryicon.h index 6e29012c4c..99e81fa10c 100644 --- a/indra/newview/llinventoryicon.h +++ b/indra/newview/llinventoryicon.h @@ -78,9 +78,10 @@ public: ICONNAME_LINKITEM, ICONNAME_LINKFOLDER, + ICONNAME_MESH, + ICONNAME_INVALID, ICONNAME_COUNT, - ICONNAME_NONE = -1 }; diff --git a/indra/newview/llinventorylistitem.cpp b/indra/newview/llinventorylistitem.cpp index 1ea91103f1..225d0288a9 100644 --- a/indra/newview/llinventorylistitem.cpp +++ b/indra/newview/llinventorylistitem.cpp @@ -302,7 +302,9 @@ LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem } else { - mIconCtrl = dynamic_cast<LLIconCtrl*>(LLUICtrlFactory::createDefaultWidget<LLIconCtrl>("item_icon")); + LLIconCtrl::Params icon_params; + icon_params.name = "item_icon"; + mIconCtrl = LLUICtrlFactory::create<LLIconCtrl>(icon_params); } LLTextBox::Params text_params(params.item_name); @@ -315,7 +317,9 @@ LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem } else { - mTitleCtrl = dynamic_cast<LLTextBox*>(LLUICtrlFactory::createDefaultWidget<LLTextBox>("item_title")); + LLTextBox::Params text_aprams; + text_params.name = "item_title"; + mTitleCtrl = LLUICtrlFactory::create<LLTextBox>(text_params); } } diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 820520df9e..50adae09c0 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -916,6 +916,8 @@ BOOL is_inventorysp_active() // static LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(BOOL auto_open) { + S32 z_min = S32_MAX; + LLInventoryPanel* res = NULL; // A. If the inventory side panel is open, use that preferably. if (is_inventorysp_active()) { @@ -925,11 +927,26 @@ LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(BOOL auto_open) return inventorySP->getActivePanel(); } } + // or if it is in floater undocked from sidetray get it and remember z order of floater to later compare it + // with other inventory floaters order. + else if (!LLSideTray::getInstance()->isTabAttached("sidebar_inventory")) + { + LLSidepanelInventory *inventorySP = + dynamic_cast<LLSidepanelInventory *>(LLSideTray::getInstance()->getPanel("sidepanel_inventory")); + LLFloater* inv_floater = LLFloaterReg::findInstance("side_bar_tab", LLSD("sidebar_inventory")); + if (inventorySP && inv_floater) + { + res = inventorySP->getActivePanel(); + z_min = gFloaterView->getZOrder(inv_floater); + } + else + { + llwarns << "Inventory tab is detached from sidetray, but either panel or floater were not found!" << llendl; + } + } // B. Iterate through the inventory floaters and return whichever is on top. LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("inventory"); - S32 z_min = S32_MAX; - LLInventoryPanel* res = NULL; for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter) { LLFloaterInventory* iv = dynamic_cast<LLFloaterInventory*>(*iter); diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index ae8efc01a3..d1e89ca000 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -53,6 +53,7 @@ #include "llfloaterreg.h" #include "llnotifications.h" #include "llwindow.h" +#include "llviewerwindow.h" #if LL_LINUX || LL_SOLARIS #include "lltrans.h" #endif @@ -108,6 +109,7 @@ void LLLoginInstance::reconnect() std::vector<std::string> uris; LLGridManager::getInstance()->getLoginURIs(uris); mLoginModule->connect(uris.front(), mRequestData); + gViewerWindow->setShowProgress(true); } void LLLoginInstance::disconnect() @@ -245,6 +247,7 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event) LLSD data(LLSD::emptyMap()); data["message"] = message_response; data["reply_pump"] = TOS_REPLY_PUMP; + gViewerWindow->setShowProgress(FALSE); LLFloaterReg::showInstance("message_tos", data); LLEventPumps::instance().obtain(TOS_REPLY_PUMP) .listen(TOS_LISTENER_NAME, @@ -265,6 +268,7 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event) data["certificate"] = response["certificate"]; } + gViewerWindow->setShowProgress(FALSE); LLFloaterReg::showInstance("message_critical", data); LLEventPumps::instance().obtain(TOS_REPLY_PUMP) .listen(TOS_LISTENER_NAME, @@ -408,6 +412,8 @@ void LLLoginInstance::updateApp(bool mandatory, const std::string& auth_msg) { mNotifications->add(notification_name, args, payload, boost::bind(&LLLoginInstance::updateDialogCallback, this, _1, _2)); + + gViewerWindow->setShowProgress(false); } } diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index d6d128eb29..11ba0883cf 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -44,7 +44,6 @@ #include "llviewermedia.h" #include "llviewertexture.h" #include "llviewerwindow.h" -#include "llnotificationsutil.h" #include "llweb.h" #include "llrender.h" #include "llpluginclassmedia.h" @@ -54,6 +53,13 @@ // linden library includes #include "llfocusmgr.h" +#include "llsdutil.h" +#include "lllayoutstack.h" +#include "lliconctrl.h" +#include "lltextbox.h" +#include "llbutton.h" +#include "llcheckboxctrl.h" +#include "llnotifications.h" extern BOOL gRestoreGL; @@ -68,19 +74,21 @@ LLMediaCtrl::Params::Params() texture_width("texture_width", 1024), texture_height("texture_height", 1024), caret_color("caret_color"), - initial_mime_type("initial_mime_type") + initial_mime_type("initial_mime_type"), + media_id("media_id"), + trusted_content("trusted_content", false) { tab_stop(false); } LLMediaCtrl::LLMediaCtrl( const Params& p) : LLPanel( p ), + LLInstanceTracker<LLMediaCtrl, LLUUID>(LLUUID::generateNewID()), mTextureDepthBytes( 4 ), mBorder(NULL), mFrequentUpdates( true ), mForceUpdate( false ), mHomePageUrl( "" ), - mTrusted(false), mIgnoreUIScale( true ), mAlwaysRefresh( false ), mMediaSource( 0 ), @@ -94,7 +102,8 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) : mTextureWidth ( 1024 ), mTextureHeight ( 1024 ), mClearCache(false), - mHomePageMimeType(p.initial_mime_type) + mHomePageMimeType(p.initial_mime_type), + mTrusted(p.trusted_content) { { LLColor4 color = p.caret_color().get(); @@ -167,19 +176,10 @@ void LLMediaCtrl::setTakeFocusOnClick( bool take_focus ) } //////////////////////////////////////////////////////////////////////////////// -void LLMediaCtrl::setTrusted( bool valIn ) -{ - if(mMediaSource) - { - mMediaSource->setTrustedBrowser(valIn); - } - mTrusted = valIn; -} - -//////////////////////////////////////////////////////////////////////////////// // BOOL LLMediaCtrl::handleHover( S32 x, S32 y, MASK mask ) { + if (LLPanel::handleHover(x, y, mask)) return TRUE; convertInputCoords(x, y); if (mMediaSource) @@ -195,6 +195,7 @@ BOOL LLMediaCtrl::handleHover( S32 x, S32 y, MASK mask ) // BOOL LLMediaCtrl::handleScrollWheel( S32 x, S32 y, S32 clicks ) { + if (LLPanel::handleScrollWheel(x, y, clicks)) return TRUE; if (mMediaSource && mMediaSource->hasMedia()) mMediaSource->getMediaPlugin()->scrollEvent(0, clicks, gKeyboard->currentMask(TRUE)); @@ -205,6 +206,7 @@ BOOL LLMediaCtrl::handleScrollWheel( S32 x, S32 y, S32 clicks ) // BOOL LLMediaCtrl::handleMouseUp( S32 x, S32 y, MASK mask ) { + if (LLPanel::handleMouseUp(x, y, mask)) return TRUE; convertInputCoords(x, y); if (mMediaSource) @@ -229,6 +231,7 @@ BOOL LLMediaCtrl::handleMouseUp( S32 x, S32 y, MASK mask ) // BOOL LLMediaCtrl::handleMouseDown( S32 x, S32 y, MASK mask ) { + if (LLPanel::handleMouseDown(x, y, mask)) return TRUE; convertInputCoords(x, y); if (mMediaSource) @@ -248,6 +251,7 @@ BOOL LLMediaCtrl::handleMouseDown( S32 x, S32 y, MASK mask ) // BOOL LLMediaCtrl::handleRightMouseUp( S32 x, S32 y, MASK mask ) { + if (LLPanel::handleRightMouseUp(x, y, mask)) return TRUE; convertInputCoords(x, y); if (mMediaSource) @@ -272,6 +276,7 @@ BOOL LLMediaCtrl::handleRightMouseUp( S32 x, S32 y, MASK mask ) // BOOL LLMediaCtrl::handleRightMouseDown( S32 x, S32 y, MASK mask ) { + if (LLPanel::handleRightMouseDown(x, y, mask)) return TRUE; convertInputCoords(x, y); if (mMediaSource) @@ -291,6 +296,7 @@ BOOL LLMediaCtrl::handleRightMouseDown( S32 x, S32 y, MASK mask ) // BOOL LLMediaCtrl::handleDoubleClick( S32 x, S32 y, MASK mask ) { + if (LLPanel::handleDoubleClick(x, y, mask)) return TRUE; convertInputCoords(x, y); if (mMediaSource) @@ -345,6 +351,85 @@ void LLMediaCtrl::onFocusLost() // BOOL LLMediaCtrl::postBuild () { + LLLayoutStack::Params layout_p; + layout_p.name = "notification_stack"; + layout_p.rect = LLRect(0,getLocalRect().mTop,getLocalRect().mRight, 30); + layout_p.follows.flags = FOLLOWS_ALL; + layout_p.mouse_opaque = false; + layout_p.orientation = "vertical"; + + LLLayoutStack* stackp = LLUICtrlFactory::create<LLLayoutStack>(layout_p); + addChild(stackp); + + LLLayoutPanel::Params panel_p; + panel_p.rect = LLRect(0, 30, 800, 0); + panel_p.min_height = 30; + panel_p.name = "notification_area"; + panel_p.visible = false; + panel_p.user_resize = false; + panel_p.background_visible = true; + panel_p.bg_alpha_image.name = "Yellow_Gradient"; + panel_p.auto_resize = false; + LLLayoutPanel* notification_panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p); + stackp->addChild(notification_panel); + + panel_p = LLUICtrlFactory::getDefaultParams<LLLayoutPanel>(); + panel_p.auto_resize = true; + panel_p.mouse_opaque = false; + LLLayoutPanel* dummy_panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p); + stackp->addChild(dummy_panel); + + layout_p = LLUICtrlFactory::getDefaultParams<LLLayoutStack>(); + layout_p.rect = LLRect(0, 30, 800, 0); + layout_p.follows.flags = FOLLOWS_ALL; + layout_p.orientation = "horizontal"; + stackp = LLUICtrlFactory::create<LLLayoutStack>(layout_p); + notification_panel->addChild(stackp); + + panel_p = LLUICtrlFactory::getDefaultParams<LLLayoutPanel>(); + panel_p.rect.height = 30; + LLLayoutPanel* panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p); + stackp->addChild(panel); + + LLIconCtrl::Params icon_p; + icon_p.name = "notification_icon"; + icon_p.rect = LLRect(5, 23, 21, 8); + panel->addChild(LLUICtrlFactory::create<LLIconCtrl>(icon_p)); + + LLTextBox::Params text_p; + text_p.rect = LLRect(31, 20, 430, 0); + text_p.text_color = LLColor4::black; + text_p.font = LLFontGL::getFontSansSerif(); + text_p.font.style = "BOLD"; + text_p.name = "notification_text"; + text_p.use_ellipses = true; + panel->addChild(LLUICtrlFactory::create<LLTextBox>(text_p)); + + panel_p = LLUICtrlFactory::getDefaultParams<LLLayoutPanel>(); + panel_p.auto_resize = false; + panel_p.user_resize = false; + panel_p.name="form_elements"; + panel_p.rect = LLRect(0, 30, 130, 0); + LLLayoutPanel* form_elements_panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p); + stackp->addChild(form_elements_panel); + + panel_p = LLUICtrlFactory::getDefaultParams<LLLayoutPanel>(); + panel_p.auto_resize = false; + panel_p.user_resize = false; + panel_p.rect = LLRect(0, 30, 25, 0); + LLLayoutPanel* close_panel = LLUICtrlFactory::create<LLLayoutPanel>(panel_p); + stackp->addChild(close_panel); + + LLButton::Params button_p; + button_p.name = "close_notification"; + button_p.rect = LLRect(5, 23, 21, 7); + button_p.image_color=LLUIColorTable::instance().getColor("DkGray_66"); + button_p.image_unselected.name="Icon_Close_Foreground"; + button_p.image_selected.name="Icon_Close_Press"; + button_p.click_callback.function = boost::bind(&LLMediaCtrl::onCloseNotification, this); + + close_panel->addChild(LLUICtrlFactory::create<LLButton>(button_p)); + setVisibleCallback(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2)); return TRUE; } @@ -353,6 +438,7 @@ BOOL LLMediaCtrl::postBuild () // BOOL LLMediaCtrl::handleKeyHere( KEY key, MASK mask ) { + if (LLPanel::handleKeyHere(key, mask)) return TRUE; BOOL result = FALSE; if (mMediaSource) @@ -378,6 +464,7 @@ void LLMediaCtrl::handleVisibilityChange ( BOOL new_visibility ) // BOOL LLMediaCtrl::handleUnicodeCharHere(llwchar uni_char) { + if (LLPanel::handleUnicodeCharHere(uni_char)) return TRUE; BOOL result = FALSE; if (mMediaSource) @@ -578,6 +665,15 @@ void LLMediaCtrl::setHomePageUrl( const std::string& urlIn, const std::string& m } } +void LLMediaCtrl::setTarget(const std::string& target) +{ + mTarget = target; + if (mMediaSource) + { + mMediaSource->setTarget(mTarget); + } +} + //////////////////////////////////////////////////////////////////////////////// // bool LLMediaCtrl::setCaretColor(unsigned int red, unsigned int green, unsigned int blue) @@ -619,6 +715,7 @@ bool LLMediaCtrl::ensureMediaSourceExists() { mMediaSource->setUsedInUI(true); mMediaSource->setHomeURL(mHomePageUrl, mHomePageMimeType); + mMediaSource->setTarget(mTarget); mMediaSource->setVisible( getVisible() ); mMediaSource->addObserver( this ); mMediaSource->setBackgroundColor( getBackgroundColor() ); @@ -830,6 +927,10 @@ void LLMediaCtrl::draw() if ( mBorder && mBorder->getVisible() ) mBorder->setKeyboardFocusHighlight( gFocusMgr.childHasKeyboardFocus( this ) ); + if (mCurNotification && !mCurNotification->isActive()) + { + hideNotification(); + } LLPanel::draw(); @@ -896,6 +997,7 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) case MEDIA_EVENT_NAVIGATE_BEGIN: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_NAVIGATE_BEGIN, url is " << self->getNavigateURI() << LL_ENDL; + hideNotification(); }; break; @@ -930,9 +1032,27 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) case MEDIA_EVENT_CLICK_LINK_HREF: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLICK_LINK_HREF, target is \"" << self->getClickTarget() << "\", uri is " << self->getClickURL() << LL_ENDL; + // retrieve the event parameters + std::string url = self->getClickURL(); + std::string target = self->getClickTarget(); + std::string uuid = self->getClickUUID(); + + LLNotification::Params notify_params; + notify_params.name = "PopupAttempt"; + notify_params.payload = LLSD().with("target", target).with("url", url).with("uuid", uuid).with("media_id", getKey()); + notify_params.functor.function = boost::bind(&LLMediaCtrl::onPopup, this, _1, _2); + + if (mTrusted) + { + LLNotifications::instance().forceResponse(notify_params, 0); + } + else + { + LLNotifications::instance().add(notify_params); + } + break; }; - break; - + case MEDIA_EVENT_CLICK_LINK_NOFOLLOW: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLICK_LINK_NOFOLLOW, uri is " << self->getClickURL() << LL_ENDL; @@ -956,6 +1076,24 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_NAME_CHANGED" << LL_ENDL; }; break; + + case MEDIA_EVENT_CLOSE_REQUEST: + { + LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLOSE_REQUEST" << LL_ENDL; + } + break; + + case MEDIA_EVENT_PICK_FILE_REQUEST: + { + LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_PICK_FILE_REQUEST" << LL_ENDL; + } + break; + + case MEDIA_EVENT_GEOMETRY_CHANGE: + { + LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_GEOMETRY_CHANGE, uuid is " << self->getClickUUID() << LL_ENDL; + } + break; }; // chain all events to any potential observers of this object. @@ -969,3 +1107,113 @@ std::string LLMediaCtrl::getCurrentNavUrl() return mCurrentNavUrl; } +void LLMediaCtrl::onPopup(const LLSD& notification, const LLSD& response) +{ + if (response["open"]) + { + LLWeb::loadURL(notification["payload"]["url"], notification["payload"]["target"], notification["payload"]["uuid"]); + } + else + { + // Make sure the opening instance knows its window open request was denied, so it can clean things up. + LLViewerMedia::proxyWindowClosed(notification["payload"]["uuid"]); + } + +} + +void LLMediaCtrl::onCloseNotification() +{ + LLNotifications::instance().cancel(mCurNotification); +} + +void LLMediaCtrl::onClickIgnore(LLUICtrl* ctrl) +{ + bool check = ctrl->getValue().asBoolean(); + if (mCurNotification && mCurNotification->getForm()->getIgnoreType() == LLNotificationForm::IGNORE_SHOW_AGAIN) + { + // question was "show again" so invert value to get "ignore" + check = !check; + } + mCurNotification->setIgnored(check); +} + +void LLMediaCtrl::onClickNotificationButton(const std::string& name) +{ + if (!mCurNotification) return; + + LLSD response = mCurNotification->getResponseTemplate(); + response[name] = true; + + mCurNotification->respond(response); +} + +void LLMediaCtrl::showNotification(LLNotificationPtr notify) +{ + mCurNotification = notify; + + // add popup here + LLSD payload = notify->getPayload(); + + LLNotificationFormPtr formp = notify->getForm(); + LLLayoutPanel& panel = getChildRef<LLLayoutPanel>("notification_area"); + panel.setVisible(true); + panel.getChild<LLUICtrl>("notification_icon")->setValue(notify->getIcon()); + panel.getChild<LLUICtrl>("notification_text")->setValue(notify->getMessage()); + panel.getChild<LLUICtrl>("notification_text")->setToolTip(notify->getMessage()); + LLNotificationForm::EIgnoreType ignore_type = formp->getIgnoreType(); + LLLayoutPanel& form_elements = panel.getChildRef<LLLayoutPanel>("form_elements"); + form_elements.deleteAllChildren(); + + const S32 FORM_PADDING_HORIZONTAL = 10; + const S32 FORM_PADDING_VERTICAL = 3; + S32 cur_x = FORM_PADDING_HORIZONTAL; + + if (ignore_type != LLNotificationForm::IGNORE_NO) + { + LLCheckBoxCtrl::Params checkbox_p; + checkbox_p.name = "ignore_check"; + checkbox_p.rect = LLRect(cur_x, form_elements.getRect().getHeight() - FORM_PADDING_VERTICAL, cur_x, FORM_PADDING_VERTICAL); + checkbox_p.label = formp->getIgnoreMessage(); + checkbox_p.label_text.text_color = LLColor4::black; + checkbox_p.commit_callback.function = boost::bind(&LLMediaCtrl::onClickIgnore, this, _1); + checkbox_p.initial_value = formp->getIgnored(); + + LLCheckBoxCtrl* check = LLUICtrlFactory::create<LLCheckBoxCtrl>(checkbox_p); + check->setRect(check->getBoundingRect()); + form_elements.addChild(check); + cur_x = check->getRect().mRight + FORM_PADDING_HORIZONTAL; + } + + for (S32 i = 0; i < formp->getNumElements(); i++) + { + LLSD form_element = formp->getElement(i); + if (form_element["type"].asString() == "button") + { + LLButton::Params button_p; + button_p.name = form_element["name"]; + button_p.label = form_element["text"]; + button_p.rect = LLRect(cur_x, form_elements.getRect().getHeight() - FORM_PADDING_VERTICAL, cur_x, FORM_PADDING_VERTICAL); + button_p.click_callback.function = boost::bind(&LLMediaCtrl::onClickNotificationButton, this, form_element["name"].asString()); + button_p.auto_resize = true; + + LLButton* button = LLUICtrlFactory::create<LLButton>(button_p); + button->autoResize(); + form_elements.addChild(button); + + cur_x = button->getRect().mRight + FORM_PADDING_HORIZONTAL; + } + } + + + form_elements.reshape(cur_x, form_elements.getRect().getHeight()); + + //LLWeb::loadURL(payload["url"], payload["target"]); +} + +void LLMediaCtrl::hideNotification() +{ + LLLayoutPanel& panel = getChildRef<LLLayoutPanel>("notification_area"); + panel.setVisible(FALSE); + + mCurNotification.reset(); +} diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h index 784b266d1f..cc0701e4b1 100644 --- a/indra/newview/llmediactrl.h +++ b/indra/newview/llmediactrl.h @@ -46,7 +46,8 @@ class LLUICtrlFactory; class LLMediaCtrl : public LLPanel, public LLViewerMediaObserver, - public LLViewerMediaEventEmitter + public LLViewerMediaEventEmitter, + public LLInstanceTracker<LLMediaCtrl, LLUUID> { LOG_CLASS(LLMediaCtrl); public: @@ -57,7 +58,8 @@ public: Optional<bool> border_visible, ignore_ui_scale, hide_loading, - decouple_texture_size; + decouple_texture_size, + trusted_content; Optional<S32> texture_width, texture_height; @@ -65,6 +67,7 @@ public: Optional<LLUIColor> caret_color; Optional<std::string> initial_mime_type; + Optional<std::string> media_id; Params(); }; @@ -109,11 +112,11 @@ public: // Javascript or some other mechanism. However, we need the search // floater and login page to handle these URLs. Those are safe // because we control the page content. See DEV-9530. JC. - void setTrusted( bool valIn ); - void setHomePageUrl( const std::string& urlIn, const std::string& mime_type = LLStringUtil::null ); std::string getHomePageUrl(); + void setTarget(const std::string& target); + // set/clear URL to visit when a 404 page is reached void set404RedirectUrl( std::string redirect_url ); void clr404RedirectUrl(); @@ -146,6 +149,8 @@ public: void setTextureSize(S32 width, S32 height); + void showNotification(boost::shared_ptr<class LLNotification> notify); + void hideNotification(); // over-rides virtual BOOL handleKeyHere( KEY key, MASK mask); @@ -167,16 +172,21 @@ public: private: void onVisibilityChange ( const LLSD& new_visibility ); + void onPopup(const LLSD& notification, const LLSD& response); + void onCloseNotification(); + void onClickNotificationButton(const std::string& name); + void onClickIgnore(LLUICtrl* ctrl); const S32 mTextureDepthBytes; LLUUID mMediaTextureID; LLViewBorder* mBorder; bool mFrequentUpdates; bool mForceUpdate; - bool mTrusted; + const bool mTrusted; std::string mHomePageUrl; std::string mHomePageMimeType; std::string mCurrentNavUrl; + std::string mTarget; bool mIgnoreUIScale; bool mAlwaysRefresh; viewer_media_t mMediaSource; @@ -189,6 +199,7 @@ public: S32 mTextureWidth; S32 mTextureHeight; bool mClearCache; + boost::shared_ptr<class LLNotification> mCurNotification; }; #endif // LL_LLMediaCtrl_H diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index ecf75415ab..17b101e410 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -897,15 +897,24 @@ bool LLMeshRepoThread::headerReceived(const LLVolumeParams& mesh_params, U8* dat { std::string res_str((char*) data, data_size); + std::string deprecated_header("<? LLSD/Binary ?>"); + + if (res_str.substr(0, deprecated_header.size()) == deprecated_header) + { + res_str = res_str.substr(deprecated_header.size()+1, data_size); + header_size = deprecated_header.size()+1; + } + data_size = res_str.size(); + std::istringstream stream(res_str); - if (!LLSDSerialize::deserialize(header, stream, data_size)) + if (!LLSDSerialize::fromBinary(header, stream, data_size)) { llwarns << "Mesh header parse error. Not a valid mesh asset!" << llendl; return false; } - header_size = stream.tellg(); + header_size += stream.tellg(); } else { @@ -1016,6 +1025,23 @@ bool LLMeshRepoThread::skinInfoReceived(const LLUUID& mesh_id, U8* data, S32 dat } } + if (skin.has("alt_inverse_bind_matrix")) + { + for (U32 i = 0; i < skin["alt_inverse_bind_matrix"].size(); ++i) + { + LLMatrix4 mat; + for (U32 j = 0; j < 4; j++) + { + for (U32 k = 0; k < 4; k++) + { + mat.mMatrix[j][k] = skin["alt_inverse_bind_matrix"][i][j*4+k].asReal(); + } + } + + info.mAlternateBindMatrix.push_back(mat); + } + } + mSkinInfoQ.push(info); } @@ -1104,11 +1130,14 @@ bool LLMeshRepoThread::decompositionReceived(const LLUUID& mesh_id, U8* data, S3 return true; } -LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data, LLVector3& scale, bool upload_textures) +LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data, LLVector3& scale, bool upload_textures, + bool upload_skin, bool upload_joints) : LLThread("mesh upload") { mInstanceList = data; mUploadTextures = upload_textures; + mUploadSkin = upload_skin; + mUploadJoints = upload_joints; mMutex = new LLMutex(NULL); mCurlRequest = NULL; mPendingConfirmations = 0; @@ -1257,6 +1286,12 @@ void LLMeshUploadThread::run() // now upload the object asset std::string url = mUploadObjectAssetCapability; + + if (object_asset["objects"][0].has("permissions")) + { //copy permissions from first available object to be used for coalesced object + object_asset["permissions"] = object_asset["objects"][0]["permissions"]; + } + LLHTTPClient::post(url, object_asset, new LLHTTPClient::Responder()); mFinished = true; @@ -2095,9 +2130,32 @@ const LLMeshDecomposition* LLMeshRepository::getDecomposition(const LLUUID& mesh return NULL; } -void LLMeshRepository::uploadModel(std::vector<LLModelInstance>& data, LLVector3& scale, bool upload_textures) +const LLSD& LLMeshRepository::getMeshHeader(const LLUUID& mesh_id) +{ + return mThread->getMeshHeader(mesh_id); +} + +const LLSD& LLMeshRepoThread::getMeshHeader(const LLUUID& mesh_id) { - LLMeshUploadThread* thread = new LLMeshUploadThread(data, scale, upload_textures); + static LLSD dummy_ret; + if (mesh_id.notNull()) + { + LLMutexLock lock(mHeaderMutex); + mesh_header_map::iterator iter = mMeshHeader.find(mesh_id); + if (iter != mMeshHeader.end()) + { + return iter->second; + } + } + + return dummy_ret; +} + + +void LLMeshRepository::uploadModel(std::vector<LLModelInstance>& data, LLVector3& scale, bool upload_textures, + bool upload_skin, bool upload_joints) +{ + LLMeshUploadThread* thread = new LLMeshUploadThread(data, scale, upload_textures, upload_skin, upload_joints); mUploads.push_back(thread); thread->start(); } @@ -2142,6 +2200,8 @@ void LLMeshUploadThread::sendCostRequest(LLMeshUploadData& data) data.mModel[LLModel::LOD_LOW], data.mModel[LLModel::LOD_IMPOSTOR], phys_shape, + mUploadSkin, + mUploadJoints, true); std::string desc = data.mBaseModel->mLabel; @@ -2225,7 +2285,9 @@ void LLMeshUploadThread::doUploadModel(LLMeshUploadData& data) data.mModel[LLModel::LOD_MEDIUM], data.mModel[LLModel::LOD_LOW], data.mModel[LLModel::LOD_IMPOSTOR], - phys_shape); + phys_shape, + mUploadSkin, + mUploadJoints); data.mAssetData = ostr.str(); @@ -2400,6 +2462,8 @@ LLSD LLMeshUploadThread::createObject(LLModelInstance& instance) object_params["permissions"] = ll_create_sd_from_permissions(perm); + object_params["physics_shape_type"] = (U8)(LLViewerObject::PHYSICS_SHAPE_CONVEX_HULL); + return object_params; } @@ -2460,6 +2524,50 @@ void LLMeshRepository::uploadError(LLSD& args) mUploadErrorQ.push(args); } +//static +F32 LLMeshRepository::getStreamingCost(const LLSD& header, F32 radius) +{ + F32 dlowest = llmin(radius/0.06f, 256.f); + F32 dlow = llmin(radius/0.24f, 256.f); + F32 dmid = llmin(radius/1.0f, 256.f); + F32 dhigh = 0.f; + + + F32 bytes_lowest = header["lowest_lod"]["size"].asReal()/1024.f; + F32 bytes_low = header["low_lod"]["size"].asReal()/1024.f; + F32 bytes_mid = header["medium_lod"]["size"].asReal()/1024.f; + F32 bytes_high = header["high_lod"]["size"].asReal()/1024.f; + + if (bytes_high == 0.f) + { + return 0.f; + } + + if (bytes_mid == 0.f) + { + bytes_mid = bytes_high; + } + + if (bytes_low == 0.f) + { + bytes_low = bytes_mid; + } + + if (bytes_lowest == 0.f) + { + bytes_lowest = bytes_low; + } + + F32 cost = 0.f; + cost += llmax(256.f-dlowest, 1.f)/32.f*bytes_lowest; + cost += llmax(dlowest-dlow, 1.f)/32.f*bytes_low; + cost += llmax(dlow-dmid, 1.f)/32.f*bytes_mid; + cost += llmax(dmid-dhigh, 1.f)/32.f*bytes_high; + + cost *= gSavedSettings.getF32("MeshStreamingCostScaler"); + return cost; +} + LLPhysicsDecomp::LLPhysicsDecomp() : LLThread("Physics Decomp") diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index a2f403e214..736d236e2e 100644 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -132,6 +132,8 @@ public: LLUUID mMeshID; std::vector<std::string> mJointNames; std::vector<LLMatrix4> mInvBindMatrix; + std::vector<LLMatrix4> mAlternateBindMatrix; + LLMatrix4 mBindShapeMatrix; }; @@ -298,6 +300,7 @@ public: bool lodReceived(const LLVolumeParams& mesh_params, S32 lod, U8* data, S32 data_size); bool skinInfoReceived(const LLUUID& mesh_id, U8* data, S32 data_size); bool decompositionReceived(const LLUUID& mesh_id, U8* data, S32 data_size); + const LLSD& getMeshHeader(const LLUUID& mesh_id); void notifyLoadedMeshes(); S32 getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod); @@ -332,6 +335,8 @@ public: bool mFinished; LLVector3 mOrigin; bool mUploadTextures; + bool mUploadSkin; + bool mUploadJoints; LLHost mHost; std::string mUploadObjectAssetCapability; @@ -346,7 +351,8 @@ public: std::map<LLPointer<LLViewerFetchedTexture>, LLTextureUploadData> mTextureMap; - LLMeshUploadThread(instance_list& data, LLVector3& scale, bool upload_textures); + LLMeshUploadThread(instance_list& data, LLVector3& scale, bool upload_textures, + bool upload_skin, bool upload_joints); ~LLMeshUploadThread(); void uploadTexture(LLTextureUploadData& data); @@ -380,6 +386,7 @@ public: static U32 sCacheBytesWritten; static U32 sPeakKbps; + static F32 getStreamingCost(const LLSD& header, F32 radius); LLMeshRepository(); @@ -400,8 +407,10 @@ public: U32 getResourceCost(const LLUUID& mesh_params); const LLMeshSkinInfo* getSkinInfo(const LLUUID& mesh_id); const LLMeshDecomposition* getDecomposition(const LLUUID& mesh_id); + const LLSD& getMeshHeader(const LLUUID& mesh_id); - void uploadModel(std::vector<LLModelInstance>& data, LLVector3& scale, bool upload_textures); + void uploadModel(std::vector<LLModelInstance>& data, LLVector3& scale, bool upload_textures, + bool upload_skin, bool upload_joints); S32 getMeshSize(const LLUUID& mesh_id, S32 lod); diff --git a/indra/newview/llmorphview.h b/indra/newview/llmorphview.h index f0f04dfda3..8c76571aa3 100644 --- a/indra/newview/llmorphview.h +++ b/indra/newview/llmorphview.h @@ -38,7 +38,6 @@ #include "llframetimer.h" class LLJoint; -class LLFloaterCustomize; class LLMorphView : public LLView { diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index fc41137686..f0fd7e1b7c 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -45,7 +45,9 @@ #include "llvoavatarself.h" // to check gAgentAvatarp->isSitting() #include "llbottomtray.h" #include "llbutton.h" +#include "llfirstuse.h" #include "llfloaterreg.h" +#include "llhints.h" #include "lljoystickbutton.h" #include "lluictrlfactory.h" #include "llviewerwindow.h" @@ -167,6 +169,7 @@ void LLFloaterMove::setVisible(BOOL visible) if (visible) { + LLFirstUse::notMoving(false); // Attach the Stand/Stop Flying panel. LLPanelStandStopFlying* ssf_panel = LLPanelStandStopFlying::getInstance(); ssf_panel->reparent(this); @@ -566,6 +569,11 @@ void LLPanelStandStopFlying::setStandStopFlyingMode(EStandStopFlyingMode mode) { LLPanelStandStopFlying* panel = getInstance(); + if (mode == SSFM_STAND) + { + LLFirstUse::sit(); + LLFirstUse::notMoving(false); + } panel->mStandButton->setVisible(SSFM_STAND == mode); panel->mStopFlyingButton->setVisible(SSFM_STOP_FLYING == mode); @@ -596,6 +604,7 @@ BOOL LLPanelStandStopFlying::postBuild() mStandButton->setCommitCallback(boost::bind(&LLPanelStandStopFlying::onStandButtonClick, this)); mStandButton->setCommitCallback(boost::bind(&LLFloaterMove::enableInstance, TRUE)); mStandButton->setVisible(FALSE); + LLHints::registerHintTarget("stand_btn", mStandButton->getHandle()); mStopFlyingButton = getChild<LLButton>("stop_fly_btn"); //mStopFlyingButton->setCommitCallback(boost::bind(&LLFloaterMove::setFlyingMode, FALSE)); @@ -694,7 +703,7 @@ void LLPanelStandStopFlying::reparent(LLFloaterMove* move_view) LLPanelStandStopFlying* LLPanelStandStopFlying::getStandStopFlyingPanel() { LLPanelStandStopFlying* panel = new LLPanelStandStopFlying(); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_stand_stop_flying.xml"); + panel->buildFromFile("panel_stand_stop_flying.xml"); panel->setVisible(FALSE); //LLUI::getRootView()->addChild(panel); @@ -707,6 +716,8 @@ LLPanelStandStopFlying* LLPanelStandStopFlying::getStandStopFlyingPanel() void LLPanelStandStopFlying::onStandButtonClick() { + LLFirstUse::sit(false); + LLSelectMgr::getInstance()->deselectAllForStandingUp(); gAgent.setControlFlags(AGENT_CONTROL_STAND_UP); diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index d09f729943..b4c4d4a2ee 100644 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -259,7 +259,8 @@ void LLNameListCtrl::addNameItem(LLNameListCtrl::NameItem& item, EAddPosition po LLScrollListItem* LLNameListCtrl::addElement(const LLSD& element, EAddPosition pos, void* userdata) { LLNameListCtrl::NameItem item_params; - LLParamSDParser::instance().readSD(element, item_params); + LLParamSDParser parser; + parser.readSD(element, item_params); item_params.userdata = userdata; return addNameItemRow(item_params, pos); } diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index 18bba6e358..58849393b4 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -272,7 +272,7 @@ LLNavigationBar::LLNavigationBar() mPurgeTPHistoryItems(false), mSaveToLocationHistory(false) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_navigation_bar.xml"); + buildFromFile( "panel_navigation_bar.xml"); // set a listener function for LoginComplete event LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLNavigationBar::handleLoginComplete, this)); diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index 1beaaf3cb4..ea90f561e0 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -121,7 +121,7 @@ void LLNearbyChat::applySavedVariables() { if (mRectControl.size() > 1) { - const LLRect& rect = LLUI::sSettingGroups["floater"]->getRect(mRectControl); + const LLRect& rect = LLFloater::getControlGroup()->getRect(mRectControl); if(!rect.isEmpty() && rect.isValid()) { reshape(rect.getWidth(), rect.getHeight()); @@ -130,7 +130,7 @@ void LLNearbyChat::applySavedVariables() } - if(!LLUI::sSettingGroups["floater"]->controlExists(mDocStateControl)) + if(!LLFloater::getControlGroup()->controlExists(mDocStateControl)) { setDocked(true); } @@ -138,7 +138,7 @@ void LLNearbyChat::applySavedVariables() { if (mDocStateControl.size() > 1) { - bool dockState = LLUI::sSettingGroups["floater"]->getBOOL(mDocStateControl); + bool dockState = LLFloater::getControlGroup()->getBOOL(mDocStateControl); setDocked(dockState); } } diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index 6cfd810c10..4bc32193f3 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -38,6 +38,7 @@ #include "llfloaterreg.h" #include "lltrans.h" +#include "llfirstuse.h" #include "llnearbychatbar.h" #include "llbottomtray.h" #include "llagent.h" @@ -109,10 +110,10 @@ LLGestureComboList::LLGestureComboList(const LLGestureComboList::Params& p) , mViewAllItemIndex(0) , mGetMoreItemIndex(0) { - LLButton::Params button_params = p.combo_button; + LLBottomtrayButton::Params button_params = p.combo_button; button_params.follows.flags(FOLLOWS_LEFT|FOLLOWS_BOTTOM|FOLLOWS_RIGHT); - mButton = LLUICtrlFactory::create<LLButton>(button_params); + mButton = LLUICtrlFactory::create<LLBottomtrayButton>(button_params); mButton->reshape(getRect().getWidth(),getRect().getHeight()); mButton->setCommitCallback(boost::bind(&LLGestureComboList::onButtonCommit, this)); @@ -397,8 +398,7 @@ LLCtrlListInterface* LLGestureComboList::getListInterface() } LLNearbyChatBar::LLNearbyChatBar() - : LLPanel() - , mChatBox(NULL) +: mChatBox(NULL) { mSpeakerMgr = LLLocalSpeakerMgr::getInstance(); } @@ -490,6 +490,7 @@ BOOL LLNearbyChatBar::matchChatTypeTrigger(const std::string& in_str, std::strin void LLNearbyChatBar::onChatBoxKeystroke(LLLineEditor* caller, void* userdata) { + LLFirstUse::otherAvatarChatFirst(false); LLNearbyChatBar* self = (LLNearbyChatBar *)userdata; @@ -871,14 +872,30 @@ public: bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web) { - if (tokens.size() < 2) return false; + bool retval = false; + // Need at least 2 tokens to have a valid message. + if (tokens.size() < 2) + { + retval = false; + } + else + { S32 channel = tokens[0].asInteger(); - + // VWR-19499 Restrict function to chat channels greater than 0. + if ((channel > 0) && (channel < 2147483647)) + { + retval = true; // Send unescaped message, see EXT-6353. std::string unescaped_mesg (LLURI::unescape(tokens[1].asString())); - send_chat_from_viewer(unescaped_mesg, CHAT_TYPE_NORMAL, channel); - return true; + } + else + { + retval = false; + // Tell us this is an unsupported SLurl. + } + } + return retval; } }; diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index 0eaa60ce81..569b39c72a 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -40,6 +40,7 @@ #include "llvoiceclient.h" #include "lloutputmonitorctrl.h" #include "llspeakers.h" +#include "llbottomtray.h" class LLGestureComboList @@ -49,7 +50,7 @@ class LLGestureComboList public: struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> { - Optional<LLButton::Params> combo_button; + Optional<LLBottomtrayButton::Params> combo_button; Optional<LLScrollListCtrl::Params> combo_list; Params(); diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index 1fadb126e4..ff5655dec4 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -37,7 +37,9 @@ #include "llbottomtray.h" #include "llchatitemscontainerctrl.h" +#include "llfirstuse.h" #include "llfloaterscriptdebug.h" +#include "llhints.h" #include "llnearbychat.h" #include "llrecentpeople.h" @@ -60,8 +62,15 @@ LLToastPanelBase* createToastPanel() class LLNearbyChatScreenChannel: public LLScreenChannelBase { + LOG_CLASS(LLNearbyChatScreenChannel); public: - LLNearbyChatScreenChannel(const LLUUID& id):LLScreenChannelBase(id) { mStopProcessing = false;}; + typedef std::vector<LLHandle<LLToast> > toast_vec_t; + typedef std::list<LLHandle<LLToast> > toast_list_t; + + LLNearbyChatScreenChannel(const LLUUID& id):LLScreenChannelBase(id) + { + mStopProcessing = false; + } void addNotification (LLSD& notification); void arrangeToasts (); @@ -70,7 +79,7 @@ public: typedef boost::function<LLToastPanelBase* (void )> create_toast_panel_callback_t; void setCreatePanelCallback(create_toast_panel_callback_t value) { m_create_toast_panel_callback_t = value;} - void onToastDestroyed (LLToast* toast); + void onToastDestroyed (LLToast* toast, bool app_quitting); void onToastFade (LLToast* toast); void reshape (S32 width, S32 height, BOOL called_from_parent); @@ -81,33 +90,34 @@ public: } // hide all toasts from screen, but not remove them from a channel - virtual void hideToastsFromScreen() - { - }; // removes all toasts from a channel virtual void removeToastsFromChannel() { - for(std::vector<LLToast*>::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it) + for(toast_vec_t::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it) { - addToToastPool((*it)); + addToToastPool(it->get()); } m_active_toasts.clear(); }; virtual void deleteAllChildren() { + LL_DEBUGS("NearbyChat") << "Clearing toast pool" << llendl; m_toast_pool.clear(); m_active_toasts.clear(); LLScreenChannelBase::deleteAllChildren(); } protected: + void deactivateToast(LLToast* toast); void addToToastPool(LLToast* toast) { + if (!toast) return; + LL_DEBUGS("NearbyChat") << "Pooling toast" << llendl; toast->setVisible(FALSE); toast->stopTimer(); toast->setIsHidden(true); - m_toast_pool.push_back(toast); + m_toast_pool.push_back(toast->getHandle()); } void createOverflowToast(S32 bottom, F32 timer); @@ -116,31 +126,85 @@ protected: bool createPoolToast(); - std::vector<LLToast*> m_active_toasts; - std::list<LLToast*> m_toast_pool; + toast_vec_t m_active_toasts; + toast_list_t m_toast_pool; bool mStopProcessing; }; +//----------------------------------------------------------------------------------------------- +// LLNearbyChatToast +//----------------------------------------------------------------------------------------------- + +// We're deriving from LLToast to be able to override onClose() +// in order to handle closing nearby chat toasts properly. +class LLNearbyChatToast : public LLToast +{ + LOG_CLASS(LLNearbyChatToast); +public: + LLNearbyChatToast(const LLToast::Params& p, LLNearbyChatScreenChannel* nc_channelp) + : LLToast(p), + mNearbyChatScreenChannelp(nc_channelp) + { + } + + /*virtual*/ void onClose(bool app_quitting); + +private: + LLNearbyChatScreenChannel* mNearbyChatScreenChannelp; +}; + +//----------------------------------------------------------------------------------------------- +// LLNearbyChatScreenChannel +//----------------------------------------------------------------------------------------------- + +void LLNearbyChatScreenChannel::deactivateToast(LLToast* toast) +{ + toast_vec_t::iterator pos = std::find(m_active_toasts.begin(), m_active_toasts.end(), toast->getHandle()); + + if (pos == m_active_toasts.end()) + { + llassert(pos == m_active_toasts.end()); + return; + } + + LL_DEBUGS("NearbyChat") << "Deactivating toast" << llendl; + m_active_toasts.erase(pos); +} + void LLNearbyChatScreenChannel::createOverflowToast(S32 bottom, F32 timer) { //we don't need overflow toast in nearby chat } -void LLNearbyChatScreenChannel::onToastDestroyed(LLToast* toast) +void LLNearbyChatScreenChannel::onToastDestroyed(LLToast* toast, bool app_quitting) { + LL_DEBUGS("NearbyChat") << "Toast destroyed (app_quitting=" << app_quitting << ")" << llendl; + + if (app_quitting) + { + // Viewer is quitting. + // Immediately stop processing chat messages (EXT-1419). mStopProcessing = true; } + else + { + // The toast is being closed by user (STORM-192). + // Remove it from the list of active toasts to prevent + // further references to the invalid pointer. + deactivateToast(toast); + } +} void LLNearbyChatScreenChannel::onToastFade(LLToast* toast) { + LL_DEBUGS("NearbyChat") << "Toast fading" << llendl; + //fade mean we put toast to toast pool if(!toast) return; - std::vector<LLToast*>::iterator pos = std::find(m_active_toasts.begin(),m_active_toasts.end(),toast); - if(pos!=m_active_toasts.end()) - m_active_toasts.erase(pos); + deactivateToast(toast); addToToastPool(toast); @@ -159,13 +223,13 @@ bool LLNearbyChatScreenChannel::createPoolToast() p.lifetime_secs = gSavedSettings.getS32("NearbyToastLifeTime"); p.fading_time_secs = gSavedSettings.getS32("NearbyToastFadingTime"); - LLToast* toast = new LLToast(p); + LLToast* toast = new LLNearbyChatToast(p, this); toast->setOnFadeCallback(boost::bind(&LLNearbyChatScreenChannel::onToastFade, this, _1)); - toast->setOnToastDestroyedCallback(boost::bind(&LLNearbyChatScreenChannel::onToastDestroyed, this, _1)); - - m_toast_pool.push_back(toast); + + LL_DEBUGS("NearbyChat") << "Creating and pooling toast" << llendl; + m_toast_pool.push_back(toast->getHandle()); return true; } @@ -183,17 +247,20 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification) { LLUUID fromID = notification["from_id"].asUUID(); // agent id or object id std::string from = notification["from"].asString(); - LLToast* toast = m_active_toasts[0]; - LLNearbyChatToastPanel* panel = dynamic_cast<LLNearbyChatToastPanel*>(toast->getPanel()); - - if(panel && panel->messageID() == fromID && panel->getFromName() == from && panel->canAddText()) + LLToast* toast = m_active_toasts[0].get(); + if (toast) { - panel->addMessage(notification); - toast->reshapeToPanel(); - toast->resetTimer(); - - arrangeToasts(); - return; + LLNearbyChatToastPanel* panel = dynamic_cast<LLNearbyChatToastPanel*>(toast->getPanel()); + + if(panel && panel->messageID() == fromID && panel->getFromName() == from && panel->canAddText()) + { + panel->addMessage(notification); + toast->reshapeToPanel(); + toast->resetTimer(); + + arrangeToasts(); + return; + } } } @@ -202,6 +269,7 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification) if(m_toast_pool.empty()) { //"pool" is empty - create one more panel + LL_DEBUGS("NearbyChat") << "Empty pool" << llendl; if(!createPoolToast())//created toast will go to pool. so next call will find it return; addNotification(notification); @@ -221,7 +289,8 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification) //take 1st element from pool, (re)initialize it, put it in active toasts - LLToast* toast = m_toast_pool.back(); + LL_DEBUGS("NearbyChat") << "Getting toast from pool" << llendl; + LLToast* toast = m_toast_pool.back().get(); m_toast_pool.pop_back(); @@ -234,25 +303,36 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification) toast->reshapeToPanel(); toast->resetTimer(); - m_active_toasts.push_back(toast); + m_active_toasts.push_back(toast->getHandle()); arrangeToasts(); } void LLNearbyChatScreenChannel::arrangeToasts() { - if(m_active_toasts.size() == 0 || isHovering()) - return; - - hideToastsFromScreen(); + if(!isHovering()) + { + showToastsBottom(); + } - showToastsBottom(); + if (m_active_toasts.empty()) + { + LLHints::registerHintTarget("incoming_chat", LLHandle<LLView>()); + } + else + { + LLToast* toast = m_active_toasts.front().get(); + if (toast) + { + LLHints::registerHintTarget("incoming_chat", m_active_toasts.front().get()->LLView::getHandle()); + } + } } -int sort_toasts_predicate(LLToast* first,LLToast* second) +int sort_toasts_predicate(LLHandle<LLToast> first, LLHandle<LLToast> second) { - F32 v1 = first->getTimer()->getEventTimer().getElapsedTimeF32(); - F32 v2 = second->getTimer()->getEventTimer().getElapsedTimeF32(); + F32 v1 = first.get()->getTimer()->getEventTimer().getElapsedTimeF32(); + F32 v2 = second.get()->getTimer()->getEventTimer().getElapsedTimeF32(); return v1 < v2; } @@ -270,20 +350,22 @@ void LLNearbyChatScreenChannel::showToastsBottom() //calc max visible item and hide other toasts. - for(std::vector<LLToast*>::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it) + for(toast_vec_t::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it) { - S32 toast_top = bottom + (*it)->getRect().getHeight() + margin; + LLToast* toast = it->get(); + if (!toast) continue; + + S32 toast_top = bottom + toast->getRect().getHeight() + margin; if(toast_top > gFloaterView->getRect().getHeight()) { while(it!=m_active_toasts.end()) { - addToToastPool((*it)); + addToToastPool(it->get()); it=m_active_toasts.erase(it); } break; } - LLToast* toast = (*it); toast_rect = toast->getRect(); toast_rect.setLeftTopAndSize(getRect().mLeft , bottom + toast_rect.getHeight(), toast_rect.getWidth() ,toast_rect.getHeight()); @@ -294,14 +376,17 @@ void LLNearbyChatScreenChannel::showToastsBottom() // use reverse order to provide correct z-order and avoid toast blinking - for(std::vector<LLToast*>::reverse_iterator it = m_active_toasts.rbegin(); it != m_active_toasts.rend(); ++it) + for(toast_vec_t::reverse_iterator it = m_active_toasts.rbegin(); it != m_active_toasts.rend(); ++it) + { + LLToast* toast = it->get(); + if (toast) { - LLToast* toast = (*it); toast->setIsHidden(false); toast->setVisible(TRUE); + } + } } -} void LLNearbyChatScreenChannel::reshape (S32 width, S32 height, BOOL called_from_parent) { @@ -346,8 +431,6 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args) { if(chat_msg.mMuted == TRUE) return; - if(chat_msg.mSourceType == CHAT_SOURCE_AGENT && chat_msg.mFromID.notNull()) - LLRecentPeople::instance().add(chat_msg.mFromID); if(chat_msg.mText.empty()) return;//don't process empty messages @@ -451,6 +534,12 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args) channel->addNotification(notification); } + if(chat_msg.mSourceType == CHAT_SOURCE_AGENT + && chat_msg.mFromID.notNull() + && chat_msg.mFromID != gAgentID) + { + LLFirstUse::otherAvatarChatFirst(); + } } void LLNearbyChatHandler::onDeleteToast(LLToast* toast) @@ -458,4 +547,14 @@ void LLNearbyChatHandler::onDeleteToast(LLToast* toast) } +//----------------------------------------------------------------------------------------------- +// LLNearbyChatToast +//----------------------------------------------------------------------------------------------- + +// virtual +void LLNearbyChatToast::onClose(bool app_quitting) +{ + mNearbyChatScreenChannelp->onToastDestroyed(this, app_quitting); +} +// EOF diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index a8dee8a24a..591cd34882 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -61,6 +61,7 @@ #include "llviewermenu.h" #include "llviewerobjectlist.h" #include "llviewerregion.h" +#include "llviewerwindow.h" #include "llworld.h" #include "llworldmapview.h" // shared draw code @@ -75,6 +76,7 @@ const F32 MAP_SCALE_ZOOM_FACTOR = 1.04f; // Zoom in factor per click of scroll w const F32 MIN_DOT_RADIUS = 3.5f; const F32 DOT_SCALE = 0.75f; const F32 MIN_PICK_SCALE = 2.f; +const S32 MOUSE_DRAG_SLOP = 2; // How far the mouse needs to move before we think it's a drag LLNetMap::LLNetMap (const Params & p) : LLUICtrl (p), @@ -83,11 +85,12 @@ LLNetMap::LLNetMap (const Params & p) mPixelsPerMeter( MAP_SCALE_MID / REGION_WIDTH_METERS ), mObjectMapTPM(0.f), mObjectMapPixels(0.f), - mTargetPanX(0.f), - mTargetPanY(0.f), - mCurPanX(0.f), - mCurPanY(0.f), - mUpdateNow(FALSE), + mTargetPan(0.f, 0.f), + mCurPan(0.f, 0.f), + mStartPan(0.f, 0.f), + mMouseDown(0, 0), + mPanning(false), + mUpdateNow(false), mObjectImageCenterGlobal( gAgentCamera.getCameraPositionGlobal() ), mObjectRawImagep(), mObjectImagep(), @@ -104,7 +107,9 @@ LLNetMap::~LLNetMap() void LLNetMap::setScale( F32 scale ) { - mScale = llclamp(scale, 0.1f, 16.f*1024.f); // [reasonably small , unreasonably large] + scale = llclamp(scale, MAP_SCALE_MIN, MAP_SCALE_MAX); + mCurPan *= scale / mScale; + mScale = scale; if (mObjectImagep.notNull()) { @@ -121,13 +126,7 @@ void LLNetMap::setScale( F32 scale ) mPixelsPerMeter = mScale / REGION_WIDTH_METERS; mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS); - mUpdateNow = TRUE; -} - -void LLNetMap::translatePan( F32 delta_x, F32 delta_y ) -{ - mTargetPanX += delta_x; - mTargetPanY += delta_y; + mUpdateNow = true; } @@ -147,9 +146,12 @@ void LLNetMap::draw() { createObjectImage(); } - - mCurPanX = lerp(mCurPanX, mTargetPanX, LLCriticalDamp::getInterpolant(0.1f)); - mCurPanY = lerp(mCurPanY, mTargetPanY, LLCriticalDamp::getInterpolant(0.1f)); + + static LLUICachedControl<bool> auto_center("MiniMapAutoCenter", true); + if (auto_center) + { + mCurPan = lerp(mCurPan, mTargetPan, LLCriticalDamp::getInterpolant(0.1f)); + } // Prepare a scissor region F32 rotation = 0; @@ -180,8 +182,8 @@ void LLNetMap::draw() } // region 0,0 is in the middle - S32 center_sw_left = getRect().getWidth() / 2 + llfloor(mCurPanX); - S32 center_sw_bottom = getRect().getHeight() / 2 + llfloor(mCurPanY); + S32 center_sw_left = getRect().getWidth() / 2 + llfloor(mCurPan.mV[VX]); + S32 center_sw_bottom = getRect().getHeight() / 2 + llfloor(mCurPan.mV[VY]); gGL.pushMatrix(); @@ -262,26 +264,24 @@ void LLNetMap::draw() } gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); } - - - LLVector3d old_center = mObjectImageCenterGlobal; - LLVector3d new_center = gAgentCamera.getCameraPositionGlobal(); - - new_center.mdV[0] = (5.f/mObjectMapTPM)*floor(0.2f*mObjectMapTPM*new_center.mdV[0]); - new_center.mdV[1] = (5.f/mObjectMapTPM)*floor(0.2f*mObjectMapTPM*new_center.mdV[1]); - new_center.mdV[2] = 0.f; + // Redraw object layer periodically if (mUpdateNow || (map_timer.getElapsedTimeF32() > 0.5f)) { - mUpdateNow = FALSE; - mObjectImageCenterGlobal = new_center; + mUpdateNow = false; + + // Locate the centre of the object layer, accounting for panning + LLVector3 new_center = globalPosToView(gAgentCamera.getCameraPositionGlobal()); + new_center.mV[VX] -= mCurPan.mV[VX]; + new_center.mV[VY] -= mCurPan.mV[VY]; + new_center.mV[VZ] = 0.f; + mObjectImageCenterGlobal = viewPosToGlobal(llfloor(new_center.mV[VX]), llfloor(new_center.mV[VY])); - // Center moved enough. // Create the base texture. U8 *default_texture = mObjectRawImagep->getData(); memset( default_texture, 0, mObjectImagep->getWidth() * mObjectImagep->getHeight() * mObjectImagep->getComponents() ); - // Draw buildings + // Draw objects gObjectList.renderObjectsForMap(*this); mObjectImagep->setSubImage(mObjectRawImagep, 0, 0, mObjectImagep->getWidth(), mObjectImagep->getHeight()); @@ -367,7 +367,8 @@ void LLNetMap::draw() show_as_friend ? map_avatar_friend_color : map_avatar_color, pos_map.mV[VZ], mDotRadius); - F32 dist_to_cursor = dist_vec(LLVector2(pos_map.mV[VX], pos_map.mV[VY]), LLVector2(local_mouse_x,local_mouse_y)); + F32 dist_to_cursor = dist_vec(LLVector2(pos_map.mV[VX], pos_map.mV[VY]), + LLVector2(local_mouse_x,local_mouse_y)); if(dist_to_cursor < min_pick_dist && dist_to_cursor < closest_dist) { closest_dist = dist_to_cursor; @@ -398,12 +399,22 @@ void LLNetMap::draw() // Draw dot for self avatar position pos_global = gAgent.getPositionGlobal(); pos_map = globalPosToView(pos_global); - LLUIImagePtr you = LLWorldMapView::sAvatarYouLargeImage; S32 dot_width = llround(mDotRadius * 2.f); - you->draw(llround(pos_map.mV[VX] - mDotRadius), - llround(pos_map.mV[VY] - mDotRadius), - dot_width, - dot_width); + LLUIImagePtr you = LLWorldMapView::sAvatarYouLargeImage; + if (you) + { + you->draw(llround(pos_map.mV[VX] - mDotRadius), + llround(pos_map.mV[VY] - mDotRadius), + dot_width, + dot_width); + + F32 dist_to_cursor = dist_vec(LLVector2(pos_map.mV[VX], pos_map.mV[VY]), + LLVector2(local_mouse_x,local_mouse_y)); + if(dist_to_cursor < min_pick_dist && dist_to_cursor < closest_dist) + { + mClosestAgentToCursor = gAgent.getID(); + } + } // Draw frustum F32 meters_to_pixels = mScale/ LLWorld::getInstance()->getRegionWidthInMeters(); @@ -478,8 +489,8 @@ LLVector3 LLNetMap::globalPosToView( const LLVector3d& global_pos ) pos_local.rotVec( rot ); } - pos_local.mV[VX] += getRect().getWidth() / 2 + mCurPanX; - pos_local.mV[VY] += getRect().getHeight() / 2 + mCurPanY; + pos_local.mV[VX] += getRect().getWidth() / 2 + mCurPan.mV[VX]; + pos_local.mV[VY] += getRect().getHeight() / 2 + mCurPan.mV[VY]; return pos_local; } @@ -512,8 +523,8 @@ void LLNetMap::drawTracking(const LLVector3d& pos_global, const LLColor4& color, LLVector3d LLNetMap::viewPosToGlobal( S32 x, S32 y ) { - x -= llround(getRect().getWidth() / 2 + mCurPanX); - y -= llround(getRect().getHeight() / 2 + mCurPanY); + x -= llround(getRect().getWidth() / 2 + mCurPan.mV[VX]); + y -= llround(getRect().getHeight() / 2 + mCurPan.mV[VY]); LLVector3 pos_local( (F32)x, (F32)y, 0 ); @@ -538,10 +549,20 @@ LLVector3d LLNetMap::viewPosToGlobal( S32 x, S32 y ) BOOL LLNetMap::handleScrollWheel(S32 x, S32 y, S32 clicks) { // note that clicks are reversed from what you'd think: i.e. > 0 means zoom out, < 0 means zoom in - F32 scale = mScale; - - scale *= pow(MAP_SCALE_ZOOM_FACTOR, -clicks); - setScale(llclamp(scale, MAP_SCALE_MIN, MAP_SCALE_MAX)); + F32 new_scale = mScale * pow(MAP_SCALE_ZOOM_FACTOR, -clicks); + F32 old_scale = mScale; + + setScale(new_scale); + + static LLUICachedControl<bool> auto_center("MiniMapAutoCenter", true); + if (!auto_center) + { + // Adjust pan to center the zoom on the mouse pointer + LLVector2 zoom_offset; + zoom_offset.mV[VX] = x - getRect().getWidth() / 2; + zoom_offset.mV[VY] = y - getRect().getHeight() / 2; + mCurPan -= zoom_offset * mScale / old_scale - zoom_offset; + } return TRUE; } @@ -552,20 +573,32 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, MASK mask ) { return FALSE; } - - // mToolTipMsg = "[AGENT][REGION](Double-click to open Map)" - - LLStringUtil::format_map_t args; - std::string fullname; - if(mClosestAgentToCursor.notNull() && gCacheName->getFullName(mClosestAgentToCursor, fullname)) - { - args["[AGENT]"] = fullname + "\n"; - } - else + + std::string avatar_name; + if(mClosestAgentToCursor.notNull() && gCacheName->getFullName(mClosestAgentToCursor, avatar_name)) { - args["[AGENT]"] = ""; + // only show tooltip if same inspector not already open + LLFloater* existing_inspector = LLFloaterReg::findInstance("inspect_avatar"); + if (!existing_inspector + || !existing_inspector->getVisible() + || existing_inspector->getKey()["avatar_id"].asUUID() != mClosestAgentToCursor) + { + LLInspector::Params p; + p.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>()); + p.message(avatar_name); + p.image.name("Inspector_I"); + p.click_callback(boost::bind(showAvatarInspector, mClosestAgentToCursor)); + p.visible_time_near(6.f); + p.visible_time_far(3.f); + p.delay_time(0.35f); + p.wrap(false); + + LLToolTipMgr::instance().show(p); + } + return TRUE; } - + + LLStringUtil::format_map_t args; LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( viewPosToGlobal( x, y ) ); if( region ) { @@ -575,10 +608,10 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, MASK mask ) { args["[REGION]"] = ""; } - + std::string msg = mToolTipMsg; LLStringUtil::format(msg, args); - + LLRect sticky_rect; // set sticky_rect if (region) @@ -598,6 +631,21 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, MASK mask ) return TRUE; } +// static +void LLNetMap::showAvatarInspector(const LLUUID& avatar_id) +{ + LLSD params; + params["avatar_id"] = avatar_id; + + if (LLToolTipMgr::instance().toolTipVisible()) + { + LLRect rect = LLToolTipMgr::instance().getToolTipRect(); + params["pos"]["x"] = rect.mLeft; + params["pos"]["y"] = rect.mTop; + } + + LLFloaterReg::showInstance("inspect_avatar", params); +} void LLNetMap::renderScaledPointGlobal( const LLVector3d& pos, const LLColor4U &color, F32 radius_meters ) { @@ -721,5 +769,99 @@ void LLNetMap::createObjectImage() mObjectImagep = LLViewerTextureManager::getLocalTexture( mObjectRawImagep.get(), FALSE); } setScale(mScale); - mUpdateNow = TRUE; + mUpdateNow = true; +} + +BOOL LLNetMap::handleMouseDown( S32 x, S32 y, MASK mask ) +{ + if (!(mask & MASK_SHIFT)) return FALSE; + + // Start panning + gFocusMgr.setMouseCapture(this); + + mStartPan = mCurPan; + mMouseDown.mX = x; + mMouseDown.mY = y; + return TRUE; +} + +BOOL LLNetMap::handleMouseUp( S32 x, S32 y, MASK mask ) +{ + if (hasMouseCapture()) + { + if (mPanning) + { + // restore mouse cursor + S32 local_x, local_y; + local_x = mMouseDown.mX + llfloor(mCurPan.mV[VX] - mStartPan.mV[VX]); + local_y = mMouseDown.mY + llfloor(mCurPan.mV[VY] - mStartPan.mV[VY]); + LLRect clip_rect = getRect(); + clip_rect.stretch(-8); + clip_rect.clipPointToRect(mMouseDown.mX, mMouseDown.mY, local_x, local_y); + LLUI::setMousePositionLocal(this, local_x, local_y); + + // finish the pan + mPanning = false; + + mMouseDown.set(0, 0); + + // auto centre + mTargetPan.setZero(); + } + gViewerWindow->showCursor(); + gFocusMgr.setMouseCapture(NULL); + return TRUE; + } + return FALSE; +} + +// static +bool LLNetMap::outsideSlop( S32 x, S32 y, S32 start_x, S32 start_y, S32 slop ) +{ + S32 dx = x - start_x; + S32 dy = y - start_y; + + return (dx <= -slop || slop <= dx || dy <= -slop || slop <= dy); +} + +BOOL LLNetMap::handleHover( S32 x, S32 y, MASK mask ) +{ + if (hasMouseCapture()) + { + if (mPanning || outsideSlop(x, y, mMouseDown.mX, mMouseDown.mY, MOUSE_DRAG_SLOP)) + { + if (!mPanning) + { + // just started panning, so hide cursor + mPanning = true; + gViewerWindow->hideCursor(); + } + + LLVector2 delta(static_cast<F32>(gViewerWindow->getCurrentMouseDX()), + static_cast<F32>(gViewerWindow->getCurrentMouseDY())); + + // Set pan to value at start of drag + offset + mCurPan += delta; + mTargetPan = mCurPan; + + gViewerWindow->moveCursorToCenter(); + } + + // Doesn't really matter, cursor should be hidden + gViewerWindow->setCursor( UI_CURSOR_TOOLPAN ); + } + else + { + if (mask & MASK_SHIFT) + { + // If shift is held, change the cursor to hint that the map can be dragged + gViewerWindow->setCursor( UI_CURSOR_TOOLPAN ); + } + else + { + gViewerWindow->setCursor( UI_CURSOR_CROSS ); + } + } + + return TRUE; } diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h index eb53d295b2..3045a8ac54 100644 --- a/indra/newview/llnetmap.h +++ b/indra/newview/llnetmap.h @@ -43,7 +43,6 @@ class LLColor4U; class LLCoordGL; class LLImageRaw; -class LLTextBox; class LLViewerTexture; class LLNetMap : public LLUICtrl @@ -72,17 +71,17 @@ public: /*virtual*/ void draw(); /*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); + /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); + /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); + /*virtual*/ BOOL handleHover( S32 x, S32 y, MASK mask ); /*virtual*/ BOOL handleToolTip( S32 x, S32 y, MASK mask); /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); void setScale( F32 scale ); void setToolTipMsg(const std::string& msg) { mToolTipMsg = msg; } void renderScaledPointGlobal( const LLVector3d& pos, const LLColor4U &color, F32 radius ); - -private: - void translatePan( F32 delta_x, F32 delta_y ); - void setPan( F32 x, F32 y ) { mTargetPanX = x; mTargetPanY = y; } +private: const LLVector3d& getObjectImageCenterGlobal() { return mObjectImageCenterGlobal; } void renderPoint(const LLVector3 &pos, const LLColor4U &color, S32 diameter, S32 relative_height = 0); @@ -93,10 +92,15 @@ private: void drawTracking( const LLVector3d& pos_global, const LLColor4& color, BOOL draw_arrow = TRUE); - + static void showAvatarInspector(const LLUUID& avatar_id); + void createObjectImage(); private: + static bool outsideSlop(S32 x, S32 y, S32 start_x, S32 start_y, S32 slop); + + bool mUpdateNow; + LLUIColor mBackgroundColor; F32 mScale; // Size of a region in pixels @@ -104,11 +108,13 @@ private: F32 mObjectMapTPM; // texels per meter on map F32 mObjectMapPixels; // Width of object map in pixels F32 mDotRadius; // Size of avatar markers - F32 mTargetPanX; - F32 mTargetPanY; - F32 mCurPanX; - F32 mCurPanY; - BOOL mUpdateNow; + + bool mPanning; // map is being dragged + LLVector2 mTargetPan; + LLVector2 mCurPan; + LLVector2 mStartPan; // pan offset at start of drag + LLCoordGL mMouseDown; // pointer position at start of drag + LLVector3d mObjectImageCenterGlobal; LLPointer<LLImageRaw> mObjectRawImagep; LLPointer<LLViewerTexture> mObjectImagep; diff --git a/indra/newview/llnotificationalerthandler.cpp b/indra/newview/llnotificationalerthandler.cpp index 60e41b64ac..d16424c1a1 100644 --- a/indra/newview/llnotificationalerthandler.cpp +++ b/indra/newview/llnotificationalerthandler.cpp @@ -139,7 +139,7 @@ bool LLAlertHandler::processNotification(const LLSD& notify) if(channel) channel->killToastByNotificationID(notification->getID()); } - return true; + return false; } //-------------------------------------------------------------------------- diff --git a/indra/newview/llnotificationgrouphandler.cpp b/indra/newview/llnotificationgrouphandler.cpp index 6889931956..dfc52d8809 100644 --- a/indra/newview/llnotificationgrouphandler.cpp +++ b/indra/newview/llnotificationgrouphandler.cpp @@ -110,7 +110,7 @@ bool LLGroupHandler::processNotification(const LLSD& notify) { mChannel->killToastByNotificationID(notification->getID()); } - return true; + return false; } //-------------------------------------------------------------------------- diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h index 99a1fedcf3..dec435a7a8 100644 --- a/indra/newview/llnotificationhandler.h +++ b/indra/newview/llnotificationhandler.h @@ -269,6 +269,29 @@ protected: void onRejectToast(LLUUID& id); }; +/** + * Handler for UI hints. + */ +class LLHintHandler : public LLSingleton<LLHintHandler> +{ +public: + LLHintHandler(); + virtual ~LLHintHandler(); + + // base interface functions + virtual bool processNotification(const LLSD& notify); +}; + +/** + * Handler for browser notifications + */ +class LLBrowserNotification : public LLSingleton<LLBrowserNotification> +{ +public: + virtual bool processNotification(const LLSD& notify); + +}; + class LLHandlerUtil { public: diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp index 95b946f307..ada7d0306b 100644 --- a/indra/newview/llnotificationhandlerutil.cpp +++ b/indra/newview/llnotificationhandlerutil.cpp @@ -359,7 +359,7 @@ void LLHandlerUtil::logGroupNoticeToIMGroup( if (!gAgent.getGroupData(payload["group_id"].asUUID(), groupData)) { llwarns - << "Group notice for unkown group: " + << "Group notice for unknown group: " << payload["group_id"].asUUID() << llendl; return; } diff --git a/indra/newview/llnotificationhinthandler.cpp b/indra/newview/llnotificationhinthandler.cpp new file mode 100644 index 0000000000..f7163cb04f --- /dev/null +++ b/indra/newview/llnotificationhinthandler.cpp @@ -0,0 +1,58 @@ +/** + * @file llnotificationhinthandler.cpp + * @brief Notification Handler Class for UI Hints + * + * $LicenseInfo:firstyear=2000&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + + +#include "llviewerprecompiledheaders.h" // must be first include + +#include "llnotificationhandler.h" +#include "llhints.h" +#include "llnotifications.h" + +using namespace LLNotificationsUI; + +LLHintHandler::LLHintHandler() +{ +} + +LLHintHandler::~LLHintHandler() +{ +} + +bool LLHintHandler::processNotification(const LLSD& notify) +{ + LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID()); + + std::string sigtype = notify["sigtype"].asString(); + if (sigtype == "add" || sigtype == "load") + { + LLHints::show(notification); + } + else if (sigtype == "delete") + { + LLHints::hide(notification); + } + return false; +} diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp index 4401bb953f..3268fe51ba 100644 --- a/indra/newview/llnotificationmanager.cpp +++ b/indra/newview/llnotificationmanager.cpp @@ -66,6 +66,8 @@ void LLNotificationManager::init() LLNotificationChannel::buildChannel("AlertModal", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alertmodal")); LLNotificationChannel::buildChannel("IM Notifications", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "notifytoast")); LLNotificationChannel::buildChannel("Offer", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "offer")); + LLNotificationChannel::buildChannel("Hints", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "hint")); + LLNotificationChannel::buildChannel("Browser", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "browser")); LLNotifications::instance().getChannel("Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); LLNotifications::instance().getChannel("NotificationTips")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); @@ -74,6 +76,8 @@ void LLNotificationManager::init() LLNotifications::instance().getChannel("AlertModal")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); LLNotifications::instance().getChannel("IM Notifications")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); LLNotifications::instance().getChannel("Offer")->connectChanged(boost::bind(&LLNotificationManager::onNotification, this, _1)); + LLNotifications::instance().getChannel("Hints")->connectChanged(boost::bind(&LLHintHandler::processNotification, LLHintHandler::getInstance(), _1)); + LLNotifications::instance().getChannel("Browser")->connectChanged(boost::bind(&LLBrowserNotification::processNotification, LLBrowserNotification::getInstance(), _1)); mNotifyHandlers["notify"] = boost::shared_ptr<LLEventHandler>(new LLScriptHandler(NT_NOTIFY, LLSD())); mNotifyHandlers["notifytip"] = boost::shared_ptr<LLEventHandler>(new LLTipHandler(NT_NOTIFY, LLSD())); diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp index c5960a9040..548dc82b36 100644 --- a/indra/newview/llnotificationofferhandler.cpp +++ b/indra/newview/llnotificationofferhandler.cpp @@ -185,7 +185,7 @@ bool LLOfferHandler::processNotification(const LLSD& notify) } } - return true; + return false; } //-------------------------------------------------------------------------- diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp index c7261199e3..109f2bbdfc 100644 --- a/indra/newview/llnotificationscripthandler.cpp +++ b/indra/newview/llnotificationscripthandler.cpp @@ -136,7 +136,7 @@ bool LLScriptHandler::processNotification(const LLSD& notify) mChannel->killToastByNotificationID(notification->getID()); } } - return true; + return false; } //-------------------------------------------------------------------------- diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp index a06a5770a2..f619fa58a7 100644 --- a/indra/newview/llnotificationtiphandler.cpp +++ b/indra/newview/llnotificationtiphandler.cpp @@ -102,7 +102,7 @@ bool LLTipHandler::processNotification(const LLSD& notify) LLNearbyChat>("nearby_chat", LLSD()); if (nearby_chat->getVisible()) { - return true; + return false; } } @@ -127,7 +127,7 @@ bool LLTipHandler::processNotification(const LLSD& notify) // don't spawn toast for inventory accepted/declined offers if respective IM window is open (EXT-5909) if (!LLHandlerUtil::canSpawnToast(notification)) { - return true; + return false; } LLToastPanel* notify_box = LLToastPanel::buidPanelFromNotification(notification); @@ -150,7 +150,7 @@ bool LLTipHandler::processNotification(const LLSD& notify) { mChannel->killToastByNotificationID(notification->getID()); } - return true; + return false; } //-------------------------------------------------------------------------- diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index 51f9a03a9c..db9d386b6b 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -63,6 +63,39 @@ bool LLOutfitTabNameComparator::compare(const LLAccordionCtrlTab* tab1, const LL return name1 < name2; } +struct outfit_accordion_tab_params : public LLInitParam::Block<outfit_accordion_tab_params, LLAccordionCtrlTab::Params> +{ + Mandatory<LLWearableItemsList::Params> wearable_list; + + outfit_accordion_tab_params() + : wearable_list("wearable_items_list") + {} +}; + +const outfit_accordion_tab_params& get_accordion_tab_params() +{ + static outfit_accordion_tab_params tab_params; + static bool initialized = false; + if (!initialized) + { + initialized = true; + + LLXMLNodePtr xmlNode; + if (LLUICtrlFactory::getLayeredXMLNode("outfit_accordion_tab.xml", xmlNode)) + { + LLXUIParser parser; + parser.readXUI(xmlNode, tab_params, "outfit_accordion_tab.xml"); + } + else + { + llwarns << "Failed to read xml of Outfit's Accordion Tab from outfit_accordion_tab.xml" << llendl; + } + } + + return tab_params; +} + + ////////////////////////////////////////////////////////////////////////// class LLOutfitListGearMenu @@ -85,7 +118,7 @@ public: registrar.add("Gear.WearAdd", boost::bind(&LLOutfitListGearMenu::onAdd, this)); - enable_registrar.add("Gear.OnEnable", boost::bind(&LLOutfitsList::isActionEnabled, mOutfitList, _2)); + enable_registrar.add("Gear.OnEnable", boost::bind(&LLOutfitListGearMenu::onEnable, this, _2)); enable_registrar.add("Gear.OnVisible", boost::bind(&LLOutfitListGearMenu::onVisible, this, _2)); mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>( @@ -155,29 +188,13 @@ private: void onTakeOff() { - // Take off selected items if there are any - if (mOutfitList->hasItemSelected()) - { - uuid_vec_t selected_uuids; - mOutfitList->getSelectedItemsUUIDs(selected_uuids); - - for (uuid_vec_t::const_iterator it=selected_uuids.begin(); it != selected_uuids.end(); ++it) - { - if (get_is_item_worn(*it)) - { - LLAppearanceMgr::instance().removeItemFromAvatar(*it); - } - } - } - else // or take off the whole selected outfit if no items specified. - { + // Take off selected outfit. const LLUUID& selected_outfit_id = getSelectedOutfitID(); if (selected_outfit_id.notNull()) { LLAppearanceMgr::instance().takeOffOutfit(selected_outfit_id); } } - } void onRename() { @@ -209,6 +226,20 @@ private: LLAgentWearables::createWearable(type, true); } + bool onEnable(LLSD::String param) + { + // Handle the "Wear - Replace Current Outfit" menu option specially + // because LLOutfitList::isActionEnabled() checks whether it's allowed + // to wear selected outfit OR selected items, while we're only + // interested in the outfit (STORM-183). + if ("wear" == param) + { + return LLAppearanceMgr::instance().getCanReplaceCOF(mOutfitList->getSelectedOutfitUUID()); + } + + return mOutfitList->isActionEnabled(param); + } + bool onVisible(LLSD::String param) { const LLUUID& selected_outfit_id = getSelectedOutfitID(); @@ -437,8 +468,12 @@ void LLOutfitsList::refreshList(const LLUUID& category_id) std::string name = cat->getName(); - static LLXMLNodePtr accordionXmlNode = getAccordionTabXMLNode(); - LLAccordionCtrlTab* tab = LLUICtrlFactory::defaultBuilder<LLAccordionCtrlTab>(accordionXmlNode, NULL, NULL); + outfit_accordion_tab_params tab_params(get_accordion_tab_params()); + LLAccordionCtrlTab* tab = LLUICtrlFactory::create<LLAccordionCtrlTab>(tab_params); + if (!tab) continue; + LLWearableItemsList* wearable_list = LLUICtrlFactory::create<LLWearableItemsList>(tab_params.wearable_list); + wearable_list->setShape(tab->getLocalRect()); + tab->addChild(wearable_list); tab->setName(name); tab->setTitle(name); @@ -455,10 +490,7 @@ void LLOutfitsList::refreshList(const LLUUID& category_id) mAccordion->removeCollapsibleCtrl(tab); // kill removed tab - if (tab != NULL) - { tab->die(); - } continue; } @@ -731,19 +763,6 @@ bool LLOutfitsList::hasItemSelected() ////////////////////////////////////////////////////////////////////////// // Private methods ////////////////////////////////////////////////////////////////////////// -LLXMLNodePtr LLOutfitsList::getAccordionTabXMLNode() -{ - LLXMLNodePtr xmlNode = NULL; - bool success = LLUICtrlFactory::getLayeredXMLNode("outfit_accordion_tab.xml", xmlNode); - if (!success) - { - llwarns << "Failed to read xml of Outfit's Accordion Tab from outfit_accordion_tab.xml" << llendl; - return NULL; - } - - return xmlNode; -} - void LLOutfitsList::computeDifference( const LLInventoryModel::cat_array_t& vcats, uuid_vec_t& vadded, @@ -974,23 +993,6 @@ void LLOutfitsList::applyFilterToTab( } } -bool LLOutfitsList::canTakeOffSelected() -{ - uuid_vec_t selected_uuids; - getSelectedItemsUUIDs(selected_uuids); - - LLFindWearablesEx is_worn(/*is_worn=*/ true, /*include_body_parts=*/ false); - - for (uuid_vec_t::const_iterator it=selected_uuids.begin(); it != selected_uuids.end(); ++it) - { - LLViewerInventoryItem* item = gInventory.getItem(*it); - if (!item) continue; - - if (is_worn(NULL, item)) return true; - } - return false; -} - bool LLOutfitsList::canWearSelected() { uuid_vec_t selected_items; diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h index 37b909c93e..f73ae5bef2 100644 --- a/indra/newview/lloutfitslist.h +++ b/indra/newview/lloutfitslist.h @@ -98,7 +98,7 @@ public: const LLUUID& getSelectedOutfitUUID() const { return mSelectedOutfitUUID; } - void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const; + /*virtual*/ void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const; boost::signals2::connection setSelectionChangeCallback(selection_change_callback_t cb); @@ -111,12 +111,6 @@ public: bool hasItemSelected(); private: - /** - * Reads xml with accordion tab and Flat list from xml file. - * - * @return LLPointer to XMLNode with accordion tab and flat list. - */ - LLXMLNodePtr getAccordionTabXMLNode(); /** * Wrapper for LLCommonUtils::computeDifference. @see LLCommonUtils::computeDifference @@ -174,11 +168,6 @@ private: void applyFilterToTab(const LLUUID& category_id, LLAccordionCtrlTab* tab, const std::string& filter_substring); /** - * Returns true if there are any items that can be taken off among currently selected, otherwise false. - */ - bool canTakeOffSelected(); - - /** * Returns true if all selected items can be worn. */ bool canWearSelected(); diff --git a/indra/newview/llpanelappearancetab.cpp b/indra/newview/llpanelappearancetab.cpp new file mode 100644 index 0000000000..9910a3a2ac --- /dev/null +++ b/indra/newview/llpanelappearancetab.cpp @@ -0,0 +1,51 @@ +/** + * @file llpanelappearancetab.h + * @brief Tabs interface for Side Bar "My Appearance" panel + * + * $LicenseInfo:firstyear=2010&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llpanelappearancetab.h" + + +#include "llinventoryfunctions.h" +#include "llinventorymodel.h" + +//virtual +bool LLPanelAppearanceTab::canTakeOffSelected() +{ + uuid_vec_t selected_uuids; + getSelectedItemsUUIDs(selected_uuids); + + LLFindWearablesEx is_worn(/*is_worn=*/ true, /*include_body_parts=*/ false); + + for (uuid_vec_t::const_iterator it=selected_uuids.begin(); it != selected_uuids.end(); ++it) + { + LLViewerInventoryItem* item = gInventory.getItem(*it); + if (!item) continue; + + if (is_worn(NULL, item)) return true; + } + return false; +} diff --git a/indra/newview/llpanelappearancetab.h b/indra/newview/llpanelappearancetab.h index f1901a63a4..2c9481e909 100644 --- a/indra/newview/llpanelappearancetab.h +++ b/indra/newview/llpanelappearancetab.h @@ -46,9 +46,17 @@ public: virtual void showGearMenu(LLView* spawning_view) = 0; + virtual void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const {} + static const std::string& getFilterSubString() { return sFilterSubString; } protected: + + /** + * Returns true if there are any items that can be taken off among currently selected, otherwise false. + */ + bool canTakeOffSelected(); + static std::string sFilterSubString; }; diff --git a/indra/newview/llpanelavatartag.cpp b/indra/newview/llpanelavatartag.cpp index 7563cc7f61..489222fb2a 100644 --- a/indra/newview/llpanelavatartag.cpp +++ b/indra/newview/llpanelavatartag.cpp @@ -43,7 +43,7 @@ LLPanelAvatarTag::LLPanelAvatarTag(const LLUUID& key, const std::string im_time) , mAvatarId(LLUUID::null) // , mFadeTimer() { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_tag.xml"); + buildFromFile( "panel_avatar_tag.xml"); setLeftButtonClickCallback(boost::bind(&LLPanelAvatarTag::onClick, this)); setAvatarId(key); setTime(im_time); diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index 09b718f8b8..8e0ebfa406 100644 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -144,7 +144,7 @@ LLPanelClassifiedInfo::~LLPanelClassifiedInfo() LLPanelClassifiedInfo* LLPanelClassifiedInfo::create() { LLPanelClassifiedInfo* panel = new LLPanelClassifiedInfo(); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_classified_info.xml"); + panel->buildFromFile("panel_classified_info.xml"); return panel; } @@ -617,7 +617,7 @@ LLPanelClassifiedEdit::~LLPanelClassifiedEdit() LLPanelClassifiedEdit* LLPanelClassifiedEdit::create() { LLPanelClassifiedEdit* panel = new LLPanelClassifiedEdit(); - LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_edit_classified.xml"); + panel->buildFromFile("panel_edit_classified.xml"); return panel; } diff --git a/indra/newview/llpanelgenerictip.cpp b/indra/newview/llpanelgenerictip.cpp index 2660814afc..4ccdaa78f3 100644 --- a/indra/newview/llpanelgenerictip.cpp +++ b/indra/newview/llpanelgenerictip.cpp @@ -36,7 +36,7 @@ LLPanelGenericTip::LLPanelGenericTip( const LLNotificationPtr& notification) : LLPanelTipToast(notification) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_generic_tip.xml"); + buildFromFile( "panel_generic_tip.xml"); getChild<LLUICtrl>("message")->setValue(notification->getMessage()); diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp index c383d04940..e5c8714c7e 100644 --- a/indra/newview/llpanelgroup.cpp +++ b/indra/newview/llpanelgroup.cpp @@ -118,6 +118,7 @@ void LLPanelGroup::onOpen(const LLSD& key) if(!key.has("action")) { setGroupID(group_id); + getChild<LLAccordionCtrl>("groups_accordion")->expandDefaultTab(); return; } @@ -182,11 +183,6 @@ BOOL LLPanelGroup::postBuild() LLPanelGroupTab* panel_notices = findChild<LLPanelGroupTab>("group_notices_tab_panel"); LLPanelGroupTab* panel_land = findChild<LLPanelGroupTab>("group_land_tab_panel"); - if (LLAccordionCtrl* accordion_ctrl = getChild<LLAccordionCtrl>("groups_accordion")) - { - setVisibleCallback(boost::bind(&LLPanelGroup::onVisibilityChange, this, _2, accordion_ctrl)); - } - if(panel_general) mTabs.push_back(panel_general); if(panel_roles) mTabs.push_back(panel_roles); if(panel_notices) mTabs.push_back(panel_notices); @@ -310,14 +306,6 @@ void LLPanelGroup::onBtnCancel() onBackBtnClick(); } -void LLPanelGroup::onVisibilityChange(const LLSD &in_visible_chain, LLAccordionCtrl* accordion_ctrl) -{ - if (in_visible_chain.asBoolean() && accordion_ctrl != NULL) - { - accordion_ctrl->expandDefaultTab(); - } -} - void LLPanelGroup::changed(LLGroupChange gc) { for(std::vector<LLPanelGroupTab* >::iterator it = mTabs.begin();it!=mTabs.end();++it) diff --git a/indra/newview/llpanelgroup.h b/indra/newview/llpanelgroup.h index 2b21e9895a..a9b1e4e737 100644 --- a/indra/newview/llpanelgroup.h +++ b/indra/newview/llpanelgroup.h @@ -42,7 +42,6 @@ class LLOfferInfo; const S32 UPDATE_MEMBERS_PER_FRAME = 500; // Forward declares -class LLAccordionCtrl; class LLPanelGroupTab; class LLTabContainer; class LLAgent; @@ -103,7 +102,6 @@ protected: void onBackBtnClick(); void onBtnJoin(); void onBtnCancel(); - void onVisibilityChange(const LLSD &in_visible_chain, LLAccordionCtrl* accordion_ctrl); static void onBtnApply(void*); static void onBtnRefresh(void*); diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index 2302772803..155e000bb8 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -746,7 +746,7 @@ void LLPanelGroupGeneral::updateMembers() sSDTime += sd_timer.getElapsedTimeF32(); element_timer.reset(); - LLScrollListItem* member_row = mListVisibleMembers->addElement(row);//, ADD_SORTED); + LLScrollListItem* member_row = mListVisibleMembers->addElement(row); if ( member->isOwner() ) { diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp index 11d3768a3d..5d70e8bb30 100644 --- a/indra/newview/llpanelgroupinvite.cpp +++ b/indra/newview/llpanelgroupinvite.cpp @@ -375,7 +375,7 @@ LLPanelGroupInvite::LLPanelGroupInvite(const LLUUID& group_id) mPendingUpdate(FALSE) { // Pass on construction of this panel to the control factory. - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_invite.xml"); + buildFromFile( "panel_group_invite.xml"); } LLPanelGroupInvite::~LLPanelGroupInvite() diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp index d4736d22ae..8d8d9bc1c4 100644 --- a/indra/newview/llpanelgrouplandmoney.cpp +++ b/indra/newview/llpanelgrouplandmoney.cpp @@ -522,7 +522,7 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg) row["columns"][4]["column"] = "hidden"; row["columns"][4]["value"] = hidden; - mGroupParcelsp->addElement(row, ADD_SORTED); + mGroupParcelsp->addElement(row); } } } diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 7a28d10baf..efc797cfe9 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -1631,7 +1631,7 @@ void LLPanelGroupMembersSubTab::updateMembers() row["columns"][2]["value"] = mMemberProgress->second->getOnlineStatus(); row["columns"][2]["font"] = "SANSSERIF_SMALL"; - LLScrollListItem* member = mMembersList->addElement(row);//, ADD_SORTED); + LLScrollListItem* member = mMembersList->addElement(row); LLUUID id = member->getUUID(); mHasMatch = TRUE; diff --git a/indra/newview/llpanelhome.cpp b/indra/newview/llpanelhome.cpp index 713d2d79b4..30c428bc2f 100644 --- a/indra/newview/llpanelhome.cpp +++ b/indra/newview/llpanelhome.cpp @@ -67,7 +67,6 @@ BOOL LLPanelHome::postBuild() std::string url = LLViewerHome::getHomeURL(); mBrowser->addObserver(this); - mBrowser->setTrusted(true); mBrowser->setHomePageUrl(url); } diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index ff15e3f08e..b09360a2d6 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -197,7 +197,7 @@ LLLandmarksPanel::LLLandmarksPanel() mInventoryObserver = new LLLandmarksPanelObserver(this); gInventory.addObserver(mInventoryObserver); - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_landmarks.xml"); + buildFromFile( "panel_landmarks.xml"); } LLLandmarksPanel::~LLLandmarksPanel() @@ -965,12 +965,32 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const || "expand" == command_name ) { - return canSelectedBeModified(command_name); + if (!root_folder_view) return false; + + std::set<LLUUID> selected_uuids = root_folder_view->getSelectionList(); + + // Allow to execute the command only if it can be applied to all selected items. + for (std::set<LLUUID>::const_iterator iter = selected_uuids.begin(); iter != selected_uuids.end(); ++iter) + { + LLFolderViewItem* item = root_folder_view->getItemByID(*iter); + + // If no item is found it might be a folder id. + if (!item) + { + item = root_folder_view->getFolderByID(*iter); + } + if (!item) return false; + + if (!canItemBeModified(command_name, item)) return false; + } + + return true; } else if ( "teleport" == command_name || "more_info" == command_name || "show_on_map" == command_name || "copy_slurl" == command_name + || "rename" == command_name ) { // disable some commands for multi-selection. EXT-1757 @@ -993,13 +1013,16 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const // Disable "Show on Map" if landmark loading is in progress. return !gLandmarkList.isAssetInLoadedCallbackMap(asset_uuid); - } - - return true; } else if ("rename" == command_name) { - return root_folder_view && root_folder_view->getSelectedCount() == 1 && canSelectedBeModified(command_name); + LLFolderViewItem* selected_item = getCurSelectedItem(); + if (!selected_item) return false; + + return canItemBeModified(command_name, selected_item); + } + + return true; } else if("category" == command_name) { @@ -1065,12 +1088,11 @@ Rules: 4. We can not paste folders from Clipboard (processed by LLFolderView::canPaste()) 5. Check LLFolderView/Inventory Bridges rules */ -bool LLLandmarksPanel::canSelectedBeModified(const std::string& command_name) const +bool LLLandmarksPanel::canItemBeModified(const std::string& command_name, LLFolderViewItem* item) const { // validate own rules first - LLFolderViewItem* selected = getCurSelectedItem(); - if (!selected) return false; + if (!item) return false; // nothing can be modified in Library if (mLibraryInventoryPanel == mCurrentSelectedList) return false; @@ -1078,7 +1100,7 @@ bool LLLandmarksPanel::canSelectedBeModified(const std::string& command_name) co bool can_be_modified = false; // landmarks can be modified in any other accordion... - if (isLandmarkSelected()) + if (item->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK) { can_be_modified = true; @@ -1107,16 +1129,16 @@ bool LLLandmarksPanel::canSelectedBeModified(const std::string& command_name) co } else if ("collapse" == command_name) { - return selected->isOpen(); + return item->isOpen(); } else if ("expand" == command_name) { - return !selected->isOpen(); + return !item->isOpen(); } if (can_be_modified) { - LLFolderViewEventListener* listenerp = selected->getListener(); + LLFolderViewEventListener* listenerp = item->getListener(); if ("cut" == command_name) { diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h index 0e70c72f11..45f0bc7946 100644 --- a/indra/newview/llpanellandmarks.h +++ b/indra/newview/llpanellandmarks.h @@ -132,12 +132,12 @@ private: void onCustomAction(const LLSD& command_name); /** - * Determines if selected item can be modified via context/gear menu. + * Determines if an item can be modified via context/gear menu. * * It validates Places Landmarks rules first. And then LLFolderView permissions. * For now it checks cut/rename/delete/paste actions. */ - bool canSelectedBeModified(const std::string& command_name) const; + bool canItemBeModified(const std::string& command_name, LLFolderViewItem* item) const; void onPickPanelExit( LLPanelPickEdit* pick_panel, LLView* owner, const LLSD& params); /** diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index be1afbd8d7..7c93d8a1f9 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -187,7 +187,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, // Logo mLogoImage = LLUI::getUIImage("startup_logo"); - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_login.xml"); + buildFromFile( "panel_login.xml"); #if USE_VIEWER_AUTH //leave room for the login menu bar @@ -257,13 +257,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, // Clear the browser's cache to avoid any potential for the cache messing up the login screen. web_browser->clearCache(); - // Need to handle login secondlife:///app/ URLs - web_browser->setTrusted( true ); - - // don't make it a tab stop until SL-27594 is fixed - web_browser->setTabStop(FALSE); - // web_browser->navigateToLocalPage( "loading", "loading.html" ); - reshapeBrowser(); // kick off a request to grab the url manually @@ -1104,9 +1097,10 @@ void LLPanelLogin::updateServerCombo() { if (!grid_choice->first.empty()) { - server_choice_combo->add(grid_choice->second, grid_choice->first, ADD_SORTED); + server_choice_combo->add(grid_choice->second, grid_choice->first); } } + server_choice_combo->sortByName(); server_choice_combo->addSeparator(ADD_TOP); diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 27e054af34..5b07e4863b 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -642,7 +642,7 @@ LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLPanelMainInventory* invento mPanelMainInventory(inventory_view), mFilter(inventory_view->getPanel()->getFilter()) { - LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory_view_finder.xml", NULL); + buildFromFile("floater_inventory_view_finder.xml"); updateElementsFromFilter(); } diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index 82b72ac224..816d2f76fb 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -47,6 +47,7 @@ class LLFilterEditor; class LLTabContainer; class LLFloaterInventoryFinder; class LLMenuGL; +class LLFloater; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLPanelMainInventory diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp index 5cd4cea96d..36a3aae15f 100644 --- a/indra/newview/llpanelme.cpp +++ b/indra/newview/llpanelme.cpp @@ -162,7 +162,7 @@ void LLPanelMe::onCancelClicked() LLPanelMyProfileEdit::LLPanelMyProfileEdit() : LLPanelMyProfile() { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_edit_profile.xml"); + buildFromFile( "panel_edit_profile.xml"); setAvatarId(gAgent.getID()); } diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp index 92c8365a70..2856ea9db1 100644 --- a/indra/newview/llpanelmediasettingsgeneral.cpp +++ b/indra/newview/llpanelmediasettingsgeneral.cpp @@ -74,7 +74,7 @@ LLPanelMediaSettingsGeneral::LLPanelMediaSettingsGeneral() : mMediaEditable(false) { // build dialog from XML - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_general.xml"); + buildFromFile( "panel_media_settings_general.xml"); } //////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp index 339376cbf6..5378886b56 100644 --- a/indra/newview/llpanelmediasettingspermissions.cpp +++ b/indra/newview/llpanelmediasettingspermissions.cpp @@ -59,7 +59,7 @@ LLPanelMediaSettingsPermissions::LLPanelMediaSettingsPermissions() : mPermsWorldControl( 0 ) { // build dialog from XML - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_permissions.xml"); + buildFromFile( "panel_media_settings_permissions.xml"); } //////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp index 1b1346c41a..75f29f1002 100644 --- a/indra/newview/llpanelmediasettingssecurity.cpp +++ b/indra/newview/llpanelmediasettingssecurity.cpp @@ -59,7 +59,7 @@ LLPanelMediaSettingsSecurity::LLPanelMediaSettingsSecurity() : mCommitCallbackRegistrar.add("Media.whitelistDelete", boost::bind(&LLPanelMediaSettingsSecurity::onBtnDel, this)); // build dialog from XML - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_media_settings_security.xml"); + buildFromFile( "panel_media_settings_security.xml"); } //////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp index adeb401b77..14e2fcfcf9 100644 --- a/indra/newview/llpanelnearbymedia.cpp +++ b/indra/newview/llpanelnearbymedia.cpp @@ -102,7 +102,7 @@ LLPanelNearByMedia::LLPanelNearByMedia() mCommitCallbackRegistrar.add("SelectedMediaCtrl.Zoom", boost::bind(&LLPanelNearByMedia::onClickSelectedMediaZoom, this)); mCommitCallbackRegistrar.add("SelectedMediaCtrl.Unzoom", boost::bind(&LLPanelNearByMedia::onClickSelectedMediaUnzoom, this)); - LLUICtrlFactory::instance().buildPanel(this, "panel_nearby_media.xml"); + buildFromFile( "panel_nearby_media.xml"); } LLPanelNearByMedia::~LLPanelNearByMedia() diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 6b687846ae..943637ea3e 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -1179,13 +1179,13 @@ void LLPanelObject::getState( ) if (mCtrlSculptMirror) { mCtrlSculptMirror->set(sculpt_mirror); - mCtrlSculptMirror->setEnabled(editable); + mCtrlSculptMirror->setEnabled(editable && (sculpt_stitching != LL_SCULPT_TYPE_MESH)); } if (mCtrlSculptInvert) { mCtrlSculptInvert->set(sculpt_invert); - mCtrlSculptInvert->setEnabled(editable); + mCtrlSculptInvert->setEnabled(editable && (sculpt_stitching != LL_SCULPT_TYPE_MESH)); } if (mLabelSculptType) @@ -1856,6 +1856,17 @@ void LLPanelObject::sendSculpt() if (mCtrlSculptType) sculpt_type |= mCtrlSculptType->getCurrentIndex(); + bool enabled = sculpt_type != LL_SCULPT_TYPE_MESH; + + if (mCtrlSculptMirror) + { + mCtrlSculptMirror->setEnabled(enabled ? TRUE : FALSE); + } + if (mCtrlSculptInvert) + { + mCtrlSculptInvert->setEnabled(enabled ? TRUE : FALSE); + } + if ((mCtrlSculptMirror) && (mCtrlSculptMirror->get())) sculpt_type |= LL_SCULPT_FLAG_MIRROR; diff --git a/indra/newview/llpanelonlinestatus.cpp b/indra/newview/llpanelonlinestatus.cpp index 2f1300e0f2..8202dfe9a3 100644 --- a/indra/newview/llpanelonlinestatus.cpp +++ b/indra/newview/llpanelonlinestatus.cpp @@ -35,7 +35,7 @@ LLPanelOnlineStatus::LLPanelOnlineStatus( LLPanelTipToast(notification) { - LLUICtrlFactory::getInstance()->buildPanel(this, + buildFromFile( "panel_online_status_toast.xml"); diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index cfd31b6829..331930b349 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -491,7 +491,7 @@ BOOL LLPanelOutfitEdit::postBuild() setVisibleCallback(boost::bind(&LLPanelOutfitEdit::onVisibilityChange, this, _2)); - mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list"); + mCOFWearables = findChild<LLCOFWearables>("cof_wearables_list"); mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::filterWearablesBySelectedItem, this)); mCOFWearables->getCOFCallbacks().mAddWearable = boost::bind(&LLPanelOutfitEdit::onAddWearableClicked, this); @@ -917,8 +917,14 @@ LLWearableType::EType LLPanelOutfitEdit::getWearableTypeByItemUUID(const LLUUID& void LLPanelOutfitEdit::onRemoveFromOutfitClicked(void) { LLUUID id_to_remove = mCOFWearables->getSelectedUUID(); + LLWearableType::EType type = getWearableTypeByItemUUID(id_to_remove); LLAppearanceMgr::getInstance()->removeItemFromAvatar(id_to_remove); + + if (!mCOFWearables->getSelectedItem()) + { + mCOFWearables->selectClothing(type); + } } @@ -1013,6 +1019,10 @@ void LLPanelOutfitEdit::filterWearablesBySelectedItem(void) // | filter_type = expanded accordion_type if (nothing_selected) { + if (mInventoryItemsPanel->getVisible()) + { + return; + } showWearablesListView(); //selected accordion tab is more priority than expanded tab @@ -1057,6 +1067,12 @@ void LLPanelOutfitEdit::filterWearablesBySelectedItem(void) //resetting selection if more than one item is selected if (more_than_one_selected) { + if (mInventoryItemsPanel->getVisible()) + { + applyFolderViewFilter(FVIT_ALL); + return; + } + showWearablesListView(); applyListViewFilter(LVIT_ALL); return; @@ -1066,6 +1082,12 @@ void LLPanelOutfitEdit::filterWearablesBySelectedItem(void) //filter wearables by a type represented by a dummy item if (one_selected && is_dummy_item) { + if (mInventoryItemsPanel->getVisible()) + { + applyFolderViewFilter(FVIT_WEARABLE); + return; + } + onAddWearableClicked(); return; } @@ -1073,6 +1095,11 @@ void LLPanelOutfitEdit::filterWearablesBySelectedItem(void) LLViewerInventoryItem* item = gInventory.getItem(ids[0]); if (!item && ids[0].notNull()) { + if (mInventoryItemsPanel->getVisible()) + { + applyFolderViewFilter(FVIT_ALL); + return; + } //Inventory misses an item with non-zero id showWearablesListView(); applyListViewFilter(LVIT_ALL); @@ -1083,12 +1110,22 @@ void LLPanelOutfitEdit::filterWearablesBySelectedItem(void) { if (item->isWearableType()) { + if (mInventoryItemsPanel->getVisible()) + { + applyFolderViewFilter(FVIT_WEARABLE); + return; + } //single clothing or bodypart item is selected showFilteredWearablesListView(item->getWearableType()); return; } else { + if (mInventoryItemsPanel->getVisible()) + { + applyFolderViewFilter(FVIT_ATTACHMENT); + return; + } //attachment is selected showWearablesListView(); applyListViewFilter(LVIT_ATTACHMENT); diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index 16ef7998b3..186bd66663 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -222,15 +222,6 @@ void LLPanelOutfitsInventory::onSave() //payload["ids"].append(*it); LLNotificationsUtil::add("SaveOutfitAs", args, payload, boost::bind(&LLPanelOutfitsInventory::onSaveCommit, this, _1, _2)); - - //) - -/* - LLOutfitSaveAsDialog* save_as_dialog = LLFloaterReg::showTypedInstance<LLOutfitSaveAsDialog>("outfit_save_as", LLSD(outfit_name), TRUE); - if (save_as_dialog) - { - save_as_dialog->setSaveAsCommit(boost::bind(&LLPanelOutfitsInventory::onSaveCommit, this, _1 )); - }*/ } //static @@ -307,10 +298,10 @@ bool LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata) void LLPanelOutfitsInventory::initTabPanels() { - mCurrentOutfitPanel = getChild<LLPanelWearing>(COF_TAB_NAME); + mCurrentOutfitPanel = findChild<LLPanelWearing>(COF_TAB_NAME); mCurrentOutfitPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this)); - mMyOutfitsPanel = getChild<LLOutfitsList>(OUTFITS_TAB_NAME); + mMyOutfitsPanel = findChild<LLOutfitsList>(OUTFITS_TAB_NAME); mMyOutfitsPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this)); mAppearanceTabs = getChild<LLTabContainer>("appearance_tabs"); diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 58765d0ad8..43fbc3b568 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -528,8 +528,10 @@ BOOL LLPanelPeople::postBuild() mAllFriendList = friends_tab->getChild<LLAvatarList>("avatars_all"); mOnlineFriendList->setNoItemsCommentText(getString("no_friends_online")); mOnlineFriendList->setShowIcons("FriendsListShowIcons"); + mOnlineFriendList->showPermissions("FriendsListShowPermissions"); mAllFriendList->setNoItemsCommentText(getString("no_friends")); mAllFriendList->setShowIcons("FriendsListShowIcons"); + mAllFriendList->showPermissions("FriendsListShowPermissions"); LLPanel* nearby_tab = getChild<LLPanel>(NEARBY_TAB_NAME); nearby_tab->setVisibleCallback(boost::bind(&Updater::setActive, mNearbyListUpdater, _2)); @@ -782,12 +784,6 @@ void LLPanelPeople::buttonSetAction(const std::string& btn_name, const commit_si button->setClickedCallback(cb); } -bool LLPanelPeople::isFriendOnline(const LLUUID& id) -{ - uuid_vec_t ids = mOnlineFriendList->getIDs(); - return std::find(ids.begin(), ids.end(), id) != ids.end(); -} - void LLPanelPeople::updateButtons() { std::string cur_tab = getActiveTabName(); @@ -849,11 +845,11 @@ void LLPanelPeople::updateButtons() bool enable_calls = LLVoiceClient::getInstance()->isVoiceWorking() && LLVoiceClient::getInstance()->voiceEnabled(); - buttonSetEnabled("teleport_btn", friends_tab_active && item_selected && isFriendOnline(selected_uuids.front())); - buttonSetEnabled("view_profile_btn", item_selected); - buttonSetEnabled("im_btn", multiple_selected); // allow starting the friends conference for multiple selection - buttonSetEnabled("call_btn", multiple_selected && enable_calls); - buttonSetEnabled("share_btn", item_selected); // not implemented yet + buttonSetEnabled("view_profile_btn",item_selected); + buttonSetEnabled("share_btn", item_selected); + buttonSetEnabled("im_btn", multiple_selected); // allow starting the friends conference for multiple selection + buttonSetEnabled("call_btn", multiple_selected && enable_calls); + buttonSetEnabled("teleport_btn", multiple_selected && LLAvatarActions::canOfferTeleport(selected_uuids)); bool none_group_selected = item_selected && selected_id.isNull(); buttonSetEnabled("group_info_btn", !none_group_selected); @@ -1217,6 +1213,14 @@ void LLPanelPeople::onFriendsViewSortMenuItemClicked(const LLSD& userdata) mAllFriendList->toggleIcons(); mOnlineFriendList->toggleIcons(); } + else if (chosen_item == "view_permissions") + { + bool show_permissions = !gSavedSettings.getBOOL("FriendsListShowPermissions"); + gSavedSettings.setBOOL("FriendsListShowPermissions", show_permissions); + + mAllFriendList->showPermissions(show_permissions); + mOnlineFriendList->showPermissions(show_permissions); + } } void LLPanelPeople::onGroupsViewSortMenuItemClicked(const LLSD& userdata) @@ -1334,7 +1338,9 @@ void LLPanelPeople::onGroupCallButtonClicked() void LLPanelPeople::onTeleportButtonClicked() { - LLAvatarActions::offerTeleport(getCurrentItemID()); + uuid_vec_t selected_uuids; + getCurrentItemIDs(selected_uuids); + LLAvatarActions::offerTeleport(selected_uuids); } void LLPanelPeople::onShareButtonClicked() diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 3b8b736be1..d0913ee756 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -72,7 +72,6 @@ private: void updateNearbyList(); void updateRecentList(); - bool isFriendOnline(const LLUUID& id); bool isItemsFreeOfFriends(const uuid_vec_t& uuids); void updateButtons(); diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index 93be0bda9e..b490a4d6ab 100644 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -87,6 +87,7 @@ LLContextMenu* NearbyMenu::createMenu() // registrar.add("Avatar.AddFriend", boost::bind(&LLAvatarActions::requestFriendshipDialog, mUUIDs)); // *TODO: unimplemented registrar.add("Avatar.IM", boost::bind(&LLAvatarActions::startConference, mUUIDs)); registrar.add("Avatar.Call", boost::bind(&LLAvatarActions::startAdhocCall, mUUIDs)); + registrar.add("Avatar.OfferTeleport", boost::bind(&NearbyMenu::offerTeleport, this)); registrar.add("Avatar.RemoveFriend",boost::bind(&LLAvatarActions::removeFriendsDialog, mUUIDs)); // registrar.add("Avatar.Share", boost::bind(&LLAvatarActions::startIM, mUUIDs)); // *TODO: unimplemented // registrar.add("Avatar.Pay", boost::bind(&LLAvatarActions::pay, mUUIDs)); // *TODO: unimplemented @@ -174,8 +175,7 @@ bool NearbyMenu::enableContextMenuItem(const LLSD& userdata) } else if(item == std::string("can_offer_teleport")) { - const LLUUID& id = mUUIDs.front(); - return LLAvatarActions::canOfferTeleport(id); + return LLAvatarActions::canOfferTeleport(mUUIDs); } return false; } @@ -197,8 +197,7 @@ void NearbyMenu::offerTeleport() { // boost::bind cannot recognize overloaded method LLAvatarActions::offerTeleport(), // so we have to use a wrapper. - const LLUUID& id = mUUIDs.front(); - LLAvatarActions::offerTeleport(id); + LLAvatarActions::offerTeleport(mUUIDs); } } // namespace LLPanelPeopleMenus diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp index 54eb21422e..2e87a8eecb 100644 --- a/indra/newview/llpanelpick.cpp +++ b/indra/newview/llpanelpick.cpp @@ -80,7 +80,7 @@ LLPanelPickInfo* LLPanelPickInfo::create() { LLPanelPickInfo* panel = new LLPanelPickInfo(); - LLUICtrlFactory::getInstance()->buildPanel(panel, XML_PANEL_PICK_INFO); + panel->buildFromFile(XML_PANEL_PICK_INFO); return panel; } @@ -350,7 +350,7 @@ void LLPanelPickInfo::onClickBack() LLPanelPickEdit* LLPanelPickEdit::create() { LLPanelPickEdit* panel = new LLPanelPickEdit(); - LLUICtrlFactory::getInstance()->buildPanel(panel, XML_PANEL_EDIT_PICK); + panel->buildFromFile(XML_PANEL_EDIT_PICK); return panel; } diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index a5c3c9faef..27787ac211 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -1039,7 +1039,7 @@ LLPickItem::LLPickItem() , mSnapshotID(LLUUID::null) , mNeedData(true) { - LLUICtrlFactory::getInstance()->buildPanel(this,"panel_pick_list_item.xml"); + buildFromFile("panel_pick_list_item.xml"); } LLPickItem::~LLPickItem() @@ -1169,7 +1169,7 @@ LLClassifiedItem::LLClassifiedItem(const LLUUID& avatar_id, const LLUUID& classi , mAvatarId(avatar_id) , mClassifiedId(classified_id) { - LLUICtrlFactory::getInstance()->buildPanel(this,"panel_classifieds_list_item.xml"); + buildFromFile("panel_classifieds_list_item.xml"); LLAvatarPropertiesProcessor::getInstance()->addObserver(getAvatarId(), this); LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(getClassifiedId()); diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index 08835dc2b8..2a66000b1f 100644 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -236,6 +236,11 @@ void LLPanelPlaceProfile::setInfoType(EInfoType type) break; } + if (mAccordionCtrl != NULL) + { + mAccordionCtrl->expandDefaultTab(); + } + LLPanelPlaceInfo::setInfoType(type); } @@ -280,11 +285,6 @@ void LLPanelPlaceProfile::handleVisibilityChange(BOOL new_visibility) parcel_mgr->deselectUnused(); } } - - if (mAccordionCtrl != NULL) - { - mAccordionCtrl->expandDefaultTab(); - } } void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel, diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index abf2b94b09..e7af7e480d 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -42,6 +42,7 @@ #include "llcombobox.h" #include "llfiltereditor.h" +#include "llfirstuse.h" #include "llfloaterreg.h" #include "llnotificationsutil.h" #include "lltabcontainer.h" @@ -251,7 +252,7 @@ LLPanelPlaces::LLPanelPlaces() LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback( boost::bind(&LLPanelPlaces::updateVerbs, this)); - //LLUICtrlFactory::getInstance()->buildPanel(this, "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() + //buildFromFile( "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() } LLPanelPlaces::~LLPanelPlaces() @@ -326,8 +327,8 @@ BOOL LLPanelPlaces::postBuild() mFilterEditor->setCommitCallback(boost::bind(&LLPanelPlaces::onFilterEdit, this, _2, false)); } - mPlaceProfile = getChild<LLPanelPlaceProfile>("panel_place_profile"); - mLandmarkInfo = getChild<LLPanelLandmarkInfo>("panel_landmark_info"); + mPlaceProfile = findChild<LLPanelPlaceProfile>("panel_place_profile"); + mLandmarkInfo = findChild<LLPanelLandmarkInfo>("panel_landmark_info"); if (!mPlaceProfile || !mLandmarkInfo) return FALSE; @@ -351,6 +352,8 @@ BOOL LLPanelPlaces::postBuild() void LLPanelPlaces::onOpen(const LLSD& key) { + LLFirstUse::notUsingDestinationGuide(false); + if (!mPlaceProfile || !mLandmarkInfo) return; diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index c5c9b4f894..0b2ff0994c 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -120,7 +120,7 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() : mCommitCallbackRegistrar.add("MediaCtrl.SkipBack", boost::bind(&LLPanelPrimMediaControls::onClickSkipBack, this)); mCommitCallbackRegistrar.add("MediaCtrl.SkipForward", boost::bind(&LLPanelPrimMediaControls::onClickSkipForward, this)); - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_prim_media_controls.xml"); + buildFromFile( "panel_prim_media_controls.xml"); mInactivityTimer.reset(); mFadeTimer.stop(); mCurrentZoom = ZOOM_NONE; @@ -1181,7 +1181,7 @@ void LLPanelPrimMediaControls::setCurrentURL() // if (media_address_combo && mCurrentURL != "about:blank") // { // media_address_combo->remove(mCurrentURL); -// media_address_combo->add(mCurrentURL, ADD_SORTED); +// media_address_combo->add(mCurrentURL); // media_address_combo->selectByValue(mCurrentURL); // } #else // USE_COMBO_BOX_FOR_MEDIA_URL diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp index 18da8dd48c..272622fcf7 100644 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp @@ -133,11 +133,11 @@ BOOL LLPanelProfile::postBuild() getTabCtrl()->setCommitCallback(boost::bind(&LLPanelProfile::onTabSelected, this, _2)); - LLPanelPicks* panel_picks = getChild<LLPanelPicks>(PANEL_PICKS); + LLPanelPicks* panel_picks = findChild<LLPanelPicks>(PANEL_PICKS); panel_picks->setProfilePanel(this); getTabContainer()[PANEL_PICKS] = panel_picks; - getTabContainer()[PANEL_PROFILE] = getChild<LLPanelAvatarProfile>(PANEL_PROFILE); + getTabContainer()[PANEL_PROFILE] = findChild<LLPanelAvatarProfile>(PANEL_PROFILE); return TRUE; } diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp index c0f504fef6..dba047660d 100644 --- a/indra/newview/llpanelprofileview.cpp +++ b/indra/newview/llpanelprofileview.cpp @@ -114,7 +114,7 @@ BOOL LLPanelProfileView::postBuild() { LLPanelProfile::postBuild(); - getTabContainer()[PANEL_NOTES] = getChild<LLPanelAvatarNotes>(PANEL_NOTES); + getTabContainer()[PANEL_NOTES] = findChild<LLPanelAvatarNotes>(PANEL_NOTES); //*TODO remove this, according to style guide we don't use status combobox getTabContainer()[PANEL_PROFILE]->getChildView("online_me_status_text")->setVisible( FALSE); diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index af58912b38..7e0bd2f8e6 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -131,7 +131,7 @@ LLTeleportHistoryFlatItem::LLTeleportHistoryFlatItem(S32 index, LLTeleportHistor mRegionName(region_name), mHighlight(hl) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_teleport_history_item.xml"); + buildFromFile( "panel_teleport_history_item.xml"); } LLTeleportHistoryFlatItem::~LLTeleportHistoryFlatItem() @@ -382,7 +382,7 @@ LLTeleportHistoryPanel::LLTeleportHistoryPanel() mLastSelectedFlatlList(NULL), mLastSelectedItemIndex(-1) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_teleport_history.xml"); + buildFromFile( "panel_teleport_history.xml"); } LLTeleportHistoryPanel::~LLTeleportHistoryPanel() diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp index 0d17fb3e82..a9ca7314ce 100644 --- a/indra/newview/llpaneltopinfobar.cpp +++ b/indra/newview/llpaneltopinfobar.cpp @@ -66,7 +66,7 @@ LLPanelTopInfoBar::LLPanelTopInfoBar(): mParcelChangedObserver(0) LLUICtrl::CommitCallbackRegistry::currentRegistrar() .add("TopInfoBar.Action", boost::bind(&LLPanelTopInfoBar::onContextMenuItemClicked, this, _2)); - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_topinfo_bar.xml"); + buildFromFile( "panel_topinfo_bar.xml"); } LLPanelTopInfoBar::~LLPanelTopInfoBar() diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llpanelvoicedevicesettings.cpp index 34277001ee..aef870d352 100644 --- a/indra/newview/llfloatervoicedevicesettings.cpp +++ b/indra/newview/llpanelvoicedevicesettings.cpp @@ -1,5 +1,5 @@ /** - * @file llfloatervoicedevicesettings.cpp + * @file llpanelvoicedevicesettings.cpp * @author Richard Nelson * @brief Voice communication set-up * @@ -27,13 +27,10 @@ #include "llviewerprecompiledheaders.h" -#include "llfloatervoicedevicesettings.h" +#include "llpanelvoicedevicesettings.h" // Viewer includes -#include "llbutton.h" #include "llcombobox.h" -#include "llfocusmgr.h" -#include "lliconctrl.h" #include "llsliderctrl.h" #include "llviewercontrol.h" #include "llvoiceclient.h" @@ -70,8 +67,10 @@ BOOL LLPanelVoiceDeviceSettings::postBuild() // set mic volume tuning slider based on last mic volume setting volume_slider->setValue(mMicVolume); - childSetCommitCallback("voice_input_device", onCommitInputDevice, this); - childSetCommitCallback("voice_output_device", onCommitOutputDevice, this); + getChild<LLComboBox>("voice_input_device")->setCommitCallback( + boost::bind(&LLPanelVoiceDeviceSettings::onCommitInputDevice, this)); + getChild<LLComboBox>("voice_output_device")->setCommitCallback( + boost::bind(&LLPanelVoiceDeviceSettings::onCommitOutputDevice, this)); return TRUE; } @@ -303,91 +302,20 @@ void LLPanelVoiceDeviceSettings::cleanup() LLVoiceChannel::resume(); } -// static -void LLPanelVoiceDeviceSettings::onCommitInputDevice(LLUICtrl* ctrl, void* user_data) +void LLPanelVoiceDeviceSettings::onCommitInputDevice() { if(LLVoiceClient::getInstance()) { - LLVoiceClient::getInstance()->setCaptureDevice(ctrl->getValue().asString()); + LLVoiceClient::getInstance()->setCaptureDevice( + getChild<LLComboBox>("voice_input_device")->getValue().asString()); } } -// static -void LLPanelVoiceDeviceSettings::onCommitOutputDevice(LLUICtrl* ctrl, void* user_data) +void LLPanelVoiceDeviceSettings::onCommitOutputDevice() { if(LLVoiceClient::getInstance()) { - LLVoiceClient::getInstance()->setRenderDevice(ctrl->getValue().asString()); + LLVoiceClient::getInstance()->setRenderDevice( + getChild<LLComboBox>("voice_input_device")->getValue().asString()); } } - -// -// LLFloaterVoiceDeviceSettings -// - -LLFloaterVoiceDeviceSettings::LLFloaterVoiceDeviceSettings(const LLSD& seed) - : LLFloater(seed), - mDevicePanel(NULL) -{ - mFactoryMap["device_settings"] = LLCallbackMap(createPanelVoiceDeviceSettings, this); - // do not automatically open singleton floaters (as result of getInstance()) -// BOOL no_open = FALSE; -// Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_device_settings.xml", no_open); -} -BOOL LLFloaterVoiceDeviceSettings::postBuild() -{ - center(); - return TRUE; -} - -// virtual -void LLFloaterVoiceDeviceSettings::onOpen(const LLSD& key) -{ - if(mDevicePanel) - { - mDevicePanel->initialize(); - } -} - -// virtual -void LLFloaterVoiceDeviceSettings::onClose(bool app_settings) -{ - if(mDevicePanel) - { - mDevicePanel->apply(); - mDevicePanel->cleanup(); - } -} - -void LLFloaterVoiceDeviceSettings::apply() -{ - if (mDevicePanel) - { - mDevicePanel->apply(); - } -} - -void LLFloaterVoiceDeviceSettings::cancel() -{ - if (mDevicePanel) - { - mDevicePanel->cancel(); - } -} - -void LLFloaterVoiceDeviceSettings::draw() -{ - if (mDevicePanel) - { - mDevicePanel->refresh(); - } - LLFloater::draw(); -} - -// static -void* LLFloaterVoiceDeviceSettings::createPanelVoiceDeviceSettings(void* user_data) -{ - LLFloaterVoiceDeviceSettings* floaterp = (LLFloaterVoiceDeviceSettings*)user_data; - floaterp->mDevicePanel = new LLPanelVoiceDeviceSettings(); - return floaterp->mDevicePanel; -} diff --git a/indra/newview/llfloatervoicedevicesettings.h b/indra/newview/llpanelvoicedevicesettings.h index d67283d0a2..5929be83a9 100644 --- a/indra/newview/llfloatervoicedevicesettings.h +++ b/indra/newview/llpanelvoicedevicesettings.h @@ -31,10 +31,10 @@ * $/LicenseInfo$ */ -#ifndef LL_LLFLOATERVOICEDEVICESETTINGS_H -#define LL_LLFLOATERVOICEDEVICESETTINGS_H +#ifndef LL_LLPANELVOICEDEVICESETTINGS_H +#define LL_LLPANELVOICEDEVICESETTINGS_H -#include "llfloater.h" +#include "llpanel.h" class LLPanelVoiceDeviceSettings : public LLPanel { @@ -53,8 +53,8 @@ public: /*virtual*/ void handleVisibilityChange ( BOOL new_visibility ); protected: - static void onCommitInputDevice(LLUICtrl* ctrl, void* user_data); - static void onCommitOutputDevice(LLUICtrl* ctrl, void* user_data); + void onCommitInputDevice(); + void onCommitOutputDevice(); F32 mMicVolume; std::string mInputDevice; @@ -64,26 +64,4 @@ protected: BOOL mDevicesUpdated; }; -class LLFloaterVoiceDeviceSettings : public LLFloater -{ - friend class LLFloaterReg; - -public: - - /*virtual*/ BOOL postBuild(); - /*virtual*/ void onOpen(const LLSD& key); - /*virtual*/ void onClose(bool app_settings); - /*virtual*/ void draw(); - void apply(); - void cancel(); -private: - LLFloaterVoiceDeviceSettings(const LLSD& seed); - -protected: - static void* createPanelVoiceDeviceSettings(void* user_data); - -protected: - LLPanelVoiceDeviceSettings* mDevicePanel; -}; - -#endif // LL_LLFLOATERVOICEDEVICESETTINGS_H +#endif // LL_LLPANELVOICEDEVICESETTINGS_H diff --git a/indra/newview/llpanelvolumepulldown.cpp b/indra/newview/llpanelvolumepulldown.cpp index 7d70a8a891..9d997f23d7 100644 --- a/indra/newview/llpanelvolumepulldown.cpp +++ b/indra/newview/llpanelvolumepulldown.cpp @@ -60,7 +60,7 @@ LLPanelVolumePulldown::LLPanelVolumePulldown() mCommitCallbackRegistrar.add("Vol.setControlFalse", boost::bind(&LLPanelVolumePulldown::setControlFalse, this, _2)); mCommitCallbackRegistrar.add("Vol.GoAudioPrefs", boost::bind(&LLPanelVolumePulldown::onAdvancedButtonClick, this, _2)); - LLUICtrlFactory::instance().buildPanel(this, "panel_volume_pulldown.xml"); + buildFromFile( "panel_volume_pulldown.xml"); } BOOL LLPanelVolumePulldown::postBuild() diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp index a6bc34c62e..860470cd73 100644 --- a/indra/newview/llpanelwearing.cpp +++ b/indra/newview/llpanelwearing.cpp @@ -29,6 +29,7 @@ #include "llpanelwearing.h" #include "llappearancemgr.h" +#include "llinventoryfunctions.h" #include "llinventorymodel.h" #include "llinventoryobserver.h" #include "llsidetray.h" @@ -46,12 +47,16 @@ static void edit_outfit() class LLWearingGearMenu { public: - LLWearingGearMenu() - : mMenu(NULL) + LLWearingGearMenu(LLPanelWearing* panel_wearing) + : mMenu(NULL), mPanelWearing(panel_wearing) { LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; registrar.add("Gear.Edit", boost::bind(&edit_outfit)); + registrar.add("Gear.TakeOff", boost::bind(&LLWearingGearMenu::onTakeOff, this)); + + enable_registrar.add("Gear.OnEnable", boost::bind(&LLPanelWearing::isActionEnabled, mPanelWearing, _2)); mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>( "menu_wearing_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); @@ -70,7 +75,20 @@ public: } private: + + void onTakeOff() + { + uuid_vec_t selected_uuids; + mPanelWearing->getSelectedItemsUUIDs(selected_uuids); + + for (uuid_vec_t::const_iterator it=selected_uuids.begin(); it != selected_uuids.end(); ++it) + { + LLAppearanceMgr::instance().removeItemFromAvatar(*it); + } + } + LLMenuGL* mMenu; + LLPanelWearing* mPanelWearing; }; ////////////////////////////////////////////////////////////////////////// @@ -150,7 +168,7 @@ LLPanelWearing::LLPanelWearing() { mCategoriesObserver = new LLInventoryCategoriesObserver(); - mGearMenu = new LLWearingGearMenu(); + mGearMenu = new LLWearingGearMenu(this); mContextMenu = new LLWearingContextMenu(); } @@ -226,6 +244,12 @@ bool LLPanelWearing::isActionEnabled(const LLSD& userdata) // allow save only if outfit isn't locked and is dirty return !outfit_locked && outfit_dirty; } + + if (command_name == "take_off") + { + return hasItemSelected() && canTakeOffSelected(); + } + return false; } @@ -255,4 +279,14 @@ void LLPanelWearing::onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y) mContextMenu->show(ctrl, selected_uuids, x, y); } +bool LLPanelWearing::hasItemSelected() +{ + return mCOFItemsList->getSelectedItem() != NULL; +} + +void LLPanelWearing::getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const +{ + mCOFItemsList->getSelectedUUIDs(selected_uuids); +} + // EOF diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h index 1573990d13..4cd4c1b102 100644 --- a/indra/newview/llpanelwearing.h +++ b/indra/newview/llpanelwearing.h @@ -65,8 +65,12 @@ public: /*virtual*/ void showGearMenu(LLView* spawning_view); + /*virtual*/ void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const; + boost::signals2::connection setSelectionChangeCallback(commit_callback_t cb); + bool hasItemSelected(); + private: void onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y); diff --git a/indra/newview/llpreviewanim.cpp b/indra/newview/llpreviewanim.cpp index b328f65349..8e8b530e13 100644 --- a/indra/newview/llpreviewanim.cpp +++ b/indra/newview/llpreviewanim.cpp @@ -43,7 +43,6 @@ extern LLAgent gAgent; LLPreviewAnim::LLPreviewAnim(const LLSD& key) : LLPreview( key ) { - //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_animation.xml", FALSE); } // static diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp index 3f4edbaf97..16284d1a7e 100644 --- a/indra/newview/llpreviewgesture.cpp +++ b/indra/newview/llpreviewgesture.cpp @@ -311,9 +311,6 @@ LLPreviewGesture::LLPreviewGesture(const LLSD& key) NONE_LABEL = LLTrans::getString("---"); SHIFT_LABEL = LLTrans::getString("KBShift"); CTRL_LABEL = LLTrans::getString("KBCtrl"); - - //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_gesture.xml", FALSE); - } diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp index e85a6a7094..9f3ee6ac5d 100644 --- a/indra/newview/llpreviewnotecard.cpp +++ b/indra/newview/llpreviewnotecard.cpp @@ -71,7 +71,6 @@ LLPreviewNotecard::LLPreviewNotecard(const LLSD& key) //const LLUUID& item_id, { mAssetID = item->getAssetUUID(); } - //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_notecard.xml", FALSE); } LLPreviewNotecard::~LLPreviewNotecard() diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index d280cf1625..cf2ea38288 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -138,6 +138,9 @@ public: LLScriptEdCore* getEditorCore() { return mEditorCore; } static LLFloaterScriptSearch* getInstance() { return sInstance; } + virtual bool hasAccelerators() const; + virtual BOOL handleKeyHere(KEY key, MASK mask); + private: LLScriptEdCore* mEditorCore; @@ -151,7 +154,7 @@ LLFloaterScriptSearch::LLFloaterScriptSearch(LLScriptEdCore* editor_core) : LLFloater(LLSD()), mEditorCore(editor_core) { - LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_search.xml", NULL); + buildFromFile("floater_script_search.xml"); sInstance = this; @@ -242,7 +245,24 @@ void LLFloaterScriptSearch::handleBtnReplaceAll() mEditorCore->mEditor->replaceTextAll(getChild<LLUICtrl>("search_text")->getValue().asString(), getChild<LLUICtrl>("replace_text")->getValue().asString(), caseChk->get()); } +bool LLFloaterScriptSearch::hasAccelerators() const +{ + if (mEditorCore) + { + return mEditorCore->hasAccelerators(); + } + return FALSE; +} + +BOOL LLFloaterScriptSearch::handleKeyHere(KEY key, MASK mask) +{ + if (mEditorCore) + { + return mEditorCore->handleKeyHere(key, mask); + } + return FALSE; +} /// --------------------------------------------------------------------------- /// LLScriptEdCore @@ -654,7 +674,7 @@ void LLScriptEdCore::onBtnDynamicHelp() if (!live_help_floater) { live_help_floater = new LLFloater(LLSD()); - LLUICtrlFactory::getInstance()->buildFloater(live_help_floater, "floater_lsl_guide.xml", NULL); + live_help_floater->buildFromFile("floater_lsl_guide.xml", NULL); LLFloater* parent = dynamic_cast<LLFloater*>(getParent()); llassert(parent); if (parent) @@ -942,7 +962,6 @@ LLPreviewLSL::LLPreviewLSL(const LLSD& key ) mPendingUploads(0) { mFactoryMap["script panel"] = LLCallbackMap(LLPreviewLSL::createScriptEdPanel, this); - //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_preview.xml", FALSE); } // virtual @@ -1417,7 +1436,6 @@ LLLiveLSLEditor::LLLiveLSLEditor(const LLSD& key) : mIsNew(false) { mFactoryMap["script ed panel"] = LLCallbackMap(LLLiveLSLEditor::createScriptEdPanel, this); - //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_live_lsleditor.xml", FALSE); } BOOL LLLiveLSLEditor::postBuild() diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index 9d194c5557..f6d9286d9f 100644 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -93,6 +93,8 @@ public: static void onBtnInsertSample(void*); static void onBtnInsertFunction(LLUICtrl*, void*); + virtual bool hasAccelerators() const { return true; } + private: void onBtnHelp(); void onBtnDynamicHelp(); diff --git a/indra/newview/llpreviewsound.cpp b/indra/newview/llpreviewsound.cpp index 6b53b45990..33d2d015ad 100644 --- a/indra/newview/llpreviewsound.cpp +++ b/indra/newview/llpreviewsound.cpp @@ -45,7 +45,6 @@ const F32 SOUND_GAIN = 1.0f; LLPreviewSound::LLPreviewSound(const LLSD& key) : LLPreview( key ) { - //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_sound.xml", FALSE); } // virtual diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp index 1155f35de8..fd6b326ef1 100644 --- a/indra/newview/llpreviewtexture.cpp +++ b/indra/newview/llpreviewtexture.cpp @@ -77,7 +77,6 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key) { mPreviewToSave = TRUE; } - //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_texture.xml", FALSE); } LLPreviewTexture::~LLPreviewTexture() diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp index 9b5e38d0aa..8981afc2f3 100644 --- a/indra/newview/llprogressview.cpp +++ b/indra/newview/llprogressview.cpp @@ -47,6 +47,7 @@ #include "llagent.h" #include "llbutton.h" #include "llfocusmgr.h" +#include "llnotifications.h" #include "llprogressbar.h" #include "llstartup.h" #include "llviewercontrol.h" @@ -96,6 +97,8 @@ BOOL LLProgressView::postBuild() // hidden initially, until we need it LLPanel::setVisible(FALSE); + LLNotifications::instance().getChannel("AlertModal")->connectChanged(boost::bind(&LLProgressView::onAlertModal, this, _1)); + sInstance = this; return TRUE; } @@ -134,15 +137,10 @@ void LLProgressView::setVisible(BOOL visible) if (getVisible() && !visible) { mFadeTimer.start(); - // hiding progress view, so show menu bars - LLUI::getRootView()->getChildView("menu_bar_holder")->setVisible(TRUE); } // showing progress view else if (!getVisible() && visible) { - // showing progress view, so hide menu bars - LLUI::getRootView()->getChildView("menu_bar_holder")->setVisible(FALSE); - setFocus(TRUE); mFadeTimer.stop(); mProgressTimer.start(); @@ -300,3 +298,18 @@ bool LLProgressView::handleUpdate(const LLSD& event_data) } return false; } + +bool LLProgressView::onAlertModal(const LLSD& notify) +{ + // if the progress view is visible, it will obscure the notification window + // in this case, we want to auto-accept WebLaunchExternalTarget notifications + if (isInVisibleChain() && notify["sigtype"].asString() == "add") + { + LLNotificationPtr notifyp = LLNotifications::instance().find(notify["id"].asUUID()); + if (notifyp && notifyp->getName() == "WebLaunchExternalTarget") + { + notifyp->respondWithDefault(); + } + } + return false; +} diff --git a/indra/newview/llprogressview.h b/indra/newview/llprogressview.h index 374b14be83..2b06a62260 100644 --- a/indra/newview/llprogressview.h +++ b/indra/newview/llprogressview.h @@ -65,6 +65,7 @@ public: static void onCancelButtonClicked( void* ); static void onClickMessage(void*); + bool onAlertModal(const LLSD& sd); protected: LLProgressBar* mProgressBar; diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp index 2d8c9b0fec..05b273cd29 100644 --- a/indra/newview/llscrollingpanelparam.cpp +++ b/indra/newview/llscrollingpanelparam.cpp @@ -56,7 +56,7 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_param mAllowModify(allow_modify), mWearable(wearable) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_scrolling_param.xml"); + buildFromFile( "panel_scrolling_param.xml"); // *HACK To avoid hard coding texture position, lets use border's position for texture. LLViewBorder* left_border = getChild<LLViewBorder>("left_border"); diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 21f7e780e2..57e04a43a2 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -187,6 +187,7 @@ template class LLSelectMgr* LLSingleton<class LLSelectMgr>::getInstance(); //----------------------------------------------------------------------------- LLSelectMgr::LLSelectMgr() : mHideSelectedObjects(LLCachedControl<bool>(gSavedSettings, "HideSelectedObjects", FALSE)), + mRenderHighlightSelections(LLCachedControl<bool>(gSavedSettings, "RenderHighlightSelections", TRUE)), mAllowSelectAvatar( LLCachedControl<bool>(gSavedSettings, "AllowSelectAvatar", FALSE)), mDebugSelectMgr(LLCachedControl<bool>(gSavedSettings, "DebugSelectMgr", FALSE)) { @@ -4947,7 +4948,7 @@ void LLSelectMgr::updateSelectionSilhouette(LLObjectSelectionHandle object_handl } void LLSelectMgr::renderSilhouettes(BOOL for_hud) { - if (!mRenderSilhouettes) + if (!mRenderSilhouettes || !mRenderHighlightSelections) { return; } @@ -5107,23 +5108,13 @@ LLSelectNode::LLSelectNode(LLViewerObject* object, BOOL glow) mSilhouetteExists(FALSE), mDuplicated(FALSE), mTESelectMask(0), - mLastTESelected(0) + mLastTESelected(0), + mName(LLStringUtil::null), + mDescription(LLStringUtil::null), + mTouchName(LLStringUtil::null), + mSitName(LLStringUtil::null), + mCreationDate(0) { - mObject = object; - selectAllTEs(FALSE); - mIndividualSelection = FALSE; - mTransient = FALSE; - mValid = FALSE; - mPermissions = new LLPermissions(); - mInventorySerial = 0; - mName = LLStringUtil::null; - mDescription = LLStringUtil::null; - mTouchName = LLStringUtil::null; - mSitName = LLStringUtil::null; - mSilhouetteExists = FALSE; - mDuplicated = FALSE; - mCreationDate = 0; - saveColors(); } @@ -5785,6 +5776,10 @@ void LLSelectMgr::updateSelectionCenter() LLVector3d select_center; // keep a list of jointed objects for showing the joint HUDEffects + // Initialize the bounding box to the root prim, so the BBox orientation + // matches the root prim's (affecting the orientation of the manipulators). + bbox.addBBoxAgent( (mSelectedObjects->getFirstRootObject(TRUE))->getBoundingBoxAgent() ); + std::vector < LLViewerObject *> jointed_objects; for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); @@ -6235,6 +6230,40 @@ F32 LLObjectSelection::getSelectedObjectCost() return cost; } +F32 LLObjectSelection::getSelectedObjectStreamingCost() +{ + F32 cost = 0.f; + for (list_t::iterator iter = mList.begin(); iter != mList.end(); ++iter) + { + LLSelectNode* node = *iter; + LLViewerObject* object = node->getObject(); + + if (object) + { + cost += object->getStreamingCost(); + } + } + + return cost; +} + +U32 LLObjectSelection::getSelectedObjectTriangleCount() +{ + U32 count = 0; + for (list_t::iterator iter = mList.begin(); iter != mList.end(); ++iter) + { + LLSelectNode* node = *iter; + LLViewerObject* object = node->getObject(); + + if (object) + { + count += object->getTriangleCount(); + } + } + + return count; +} + F32 LLObjectSelection::getSelectedLinksetCost() { cleanupNodes(); diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index a7f9723bfa..e598ffd47d 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -288,6 +288,8 @@ public: S32 getObjectCount(BOOL mesh_adjust = FALSE); F32 getSelectedObjectCost(); F32 getSelectedLinksetCost(); + F32 getSelectedObjectStreamingCost(); + U32 getSelectedObjectTriangleCount(); S32 getTECount(); S32 getRootObjectCount(); @@ -357,6 +359,7 @@ public: static LLColor4 sContextSilhouetteColor; LLCachedControl<bool> mHideSelectedObjects; + LLCachedControl<bool> mRenderHighlightSelections; LLCachedControl<bool> mAllowSelectAvatar; LLCachedControl<bool> mDebugSelectMgr; diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 7206e4fcaf..a3c6a7b6f1 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -286,6 +286,8 @@ void LLSidepanelAppearance::showOutfitsInventoryPanel() void LLSidepanelAppearance::showOutfitEditPanel() { + if (mOutfitEdit && mOutfitEdit->getVisible()) return; + // Accordion's state must be reset in all cases except the one when user // is returning back to the mOutfitEdit panel from the mEditWearable panel. // The simplest way to control this is to check the visibility state of the mEditWearable diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 0951586dd5..1316bf0c57 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -36,6 +36,7 @@ #include "llappearancemgr.h" #include "llavataractions.h" #include "llbutton.h" +#include "llfirstuse.h" #include "llinventorybridge.h" #include "llinventoryfunctions.h" #include "llinventorypanel.h" @@ -55,7 +56,7 @@ LLSidepanelInventory::LLSidepanelInventory() mPanelMainInventory(NULL) { - //LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() + //buildFromFile( "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() } LLSidepanelInventory::~LLSidepanelInventory() @@ -89,7 +90,7 @@ BOOL LLSidepanelInventory::postBuild() mOverflowBtn = mInventoryPanel->getChild<LLButton>("overflow_btn"); mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this)); - mPanelMainInventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory"); + mPanelMainInventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory"); mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2)); LLTabContainer* tabs = mPanelMainInventory->getChild<LLTabContainer>("inventory filter tabs"); tabs->setCommitCallback(boost::bind(&LLSidepanelInventory::updateVerbs, this)); @@ -107,7 +108,7 @@ BOOL LLSidepanelInventory::postBuild() // UI elements from item panel { - mItemPanel = getChild<LLSidepanelItemInfo>("sidepanel__item_panel"); + mItemPanel = findChild<LLSidepanelItemInfo>("sidepanel__item_panel"); LLButton* back_btn = mItemPanel->getChild<LLButton>("back_btn"); back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this)); @@ -115,7 +116,7 @@ BOOL LLSidepanelInventory::postBuild() // UI elements from task panel { - mTaskPanel = getChild<LLSidepanelTaskInfo>("sidepanel__task_panel"); + mTaskPanel = findChild<LLSidepanelTaskInfo>("sidepanel__task_panel"); if (mTaskPanel) { LLButton* back_btn = mTaskPanel->getChild<LLButton>("back_btn"); @@ -128,6 +129,8 @@ BOOL LLSidepanelInventory::postBuild() void LLSidepanelInventory::onOpen(const LLSD& key) { + LLFirstUse::newInventory(false); + if(key.size() == 0) return; @@ -173,7 +176,7 @@ void LLSidepanelInventory::onShopButtonClicked() void LLSidepanelInventory::performActionOnSelection(const std::string &action) { - LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory"); + LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory"); LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem(); if (!current_item) { @@ -311,7 +314,7 @@ void LLSidepanelInventory::updateVerbs() bool LLSidepanelInventory::canShare() { LLPanelMainInventory* panel_main_inventory = - mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory"); + mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory"); LLFolderView* root_folder = panel_main_inventory->getActivePanel()->getRootFolder(); @@ -329,7 +332,7 @@ bool LLSidepanelInventory::canShare() LLInventoryItem *LLSidepanelInventory::getSelectedItem() { - LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory"); + LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory"); LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem(); if (!current_item) { @@ -342,7 +345,7 @@ LLInventoryItem *LLSidepanelInventory::getSelectedItem() U32 LLSidepanelInventory::getSelectedCount() { - LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory"); + LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory"); std::set<LLUUID> selection_list = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList(); return selection_list.size(); } diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp index 731079fb5d..b053432f9c 100644 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -75,7 +75,40 @@ void LLItemPropertiesObserver::changed(U32 mask) } } +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLObjectInventoryObserver +// +// Helper class to watch for changes in an object inventory. +// Used to update item properties in LLSidepanelItemInfo. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +class LLObjectInventoryObserver : public LLVOInventoryListener +{ +public: + LLObjectInventoryObserver(LLSidepanelItemInfo* floater, LLViewerObject* object) + : mFloater(floater) + { + registerVOInventoryListener(object, NULL); + } + virtual ~LLObjectInventoryObserver() + { + removeVOInventoryListener(); + } + /*virtual*/ void inventoryChanged(LLViewerObject* object, + LLInventoryObject::object_list_t* inventory, + S32 serial_num, + void* user_data); +private: + LLSidepanelItemInfo* mFloater; +}; +/*virtual*/ +void LLObjectInventoryObserver::inventoryChanged(LLViewerObject* object, + LLInventoryObject::object_list_t* inventory, + S32 serial_num, + void* user_data) +{ + mFloater->dirty(); +} ///---------------------------------------------------------------------------- /// Class LLSidepanelItemInfo @@ -86,10 +119,9 @@ static LLRegisterPanelClassWrapper<LLSidepanelItemInfo> t_item_info("sidepanel_i // Default constructor LLSidepanelItemInfo::LLSidepanelItemInfo() : mItemID(LLUUID::null) + , mObjectInventoryObserver(NULL) { mPropertiesObserver = new LLItemPropertiesObserver(this); - - //LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml"); } // Destroys the object @@ -97,6 +129,8 @@ LLSidepanelItemInfo::~LLSidepanelItemInfo() { delete mPropertiesObserver; mPropertiesObserver = NULL; + + stopObjectInventoryObserver(); } // virtual @@ -134,6 +168,10 @@ BOOL LLSidepanelItemInfo::postBuild() void LLSidepanelItemInfo::setObjectID(const LLUUID& object_id) { mObjectID = object_id; + + // Start monitoring changes in the object inventory to update + // selected inventory item properties in Item Profile panel. See STORM-148. + startObjectInventoryObserver(); } void LLSidepanelItemInfo::setItemID(const LLUUID& item_id) @@ -147,6 +185,8 @@ void LLSidepanelItemInfo::reset() mObjectID = LLUUID::null; mItemID = LLUUID::null; + + stopObjectInventoryObserver(); } void LLSidepanelItemInfo::refresh() @@ -600,6 +640,33 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) } } +void LLSidepanelItemInfo::startObjectInventoryObserver() +{ + if (!mObjectInventoryObserver) + { + stopObjectInventoryObserver(); + + // Previous object observer should be removed before starting to observe a new object. + llassert(mObjectInventoryObserver == NULL); + } + + if (mObjectID.isNull()) + { + llwarns << "Empty object id passed to inventory observer" << llendl; + return; + } + + LLViewerObject* object = gObjectList.findObject(mObjectID); + + mObjectInventoryObserver = new LLObjectInventoryObserver(this, object); +} + +void LLSidepanelItemInfo::stopObjectInventoryObserver() +{ + delete mObjectInventoryObserver; + mObjectInventoryObserver = NULL; +} + void LLSidepanelItemInfo::onClickCreator() { LLViewerInventoryItem* item = findItem(); diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h index e6dbf400ee..624c7273e0 100644 --- a/indra/newview/llsidepaneliteminfo.h +++ b/indra/newview/llsidepaneliteminfo.h @@ -43,6 +43,7 @@ class LLButton; class LLViewerInventoryItem; class LLItemPropertiesObserver; +class LLObjectInventoryObserver; class LLViewerObject; class LLPermissions; @@ -69,9 +70,13 @@ protected: void refreshFromItem(LLViewerInventoryItem* item); private: + void startObjectInventoryObserver(); + void stopObjectInventoryObserver(); + LLUUID mItemID; // inventory UUID for the inventory item. LLUUID mObjectID; // in-world task UUID, or null if in agent inventory. LLItemPropertiesObserver* mPropertiesObserver; // for syncing changes to item + LLObjectInventoryObserver* mObjectInventoryObserver; // for syncing changes to items inside an object // // UI Elements diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index 7104f3934d..7155ec1645 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -37,6 +37,9 @@ #include "llagentcamera.h" #include "llappviewer.h" #include "llbottomtray.h" +#include "llfloaterreg.h" +#include "llfirstuse.h" +#include "llhints.h" #include "llsidetray.h" #include "llviewerwindow.h" #include "llaccordionctrl.h" @@ -70,6 +73,7 @@ static const std::string TAB_PANEL_CAPTION_TITLE_BOX = "sidetray_tab_title"; LLSideTray* LLSideTray::sInstance = 0; +// static LLSideTray* LLSideTray::getInstance() { if (!sInstance) @@ -81,6 +85,7 @@ LLSideTray* LLSideTray::getInstance() return sInstance; } +// static bool LLSideTray::instanceCreated () { return sInstance!=0; @@ -115,6 +120,10 @@ public: protected: LLSideTrayTab(const Params& params); + void dock(); + void undock(LLFloater* floater_tab); + + LLSideTray* getSideTray(); public: virtual ~LLSideTrayTab(); @@ -132,6 +141,8 @@ public: void onOpen (const LLSD& key); + void toggleTabDocked(); + LLPanel *getPanel(); private: std::string mTabTitle; @@ -177,6 +188,9 @@ BOOL LLSideTrayTab::postBuild() title_panel->getChild<LLTextBox>(TAB_PANEL_CAPTION_TITLE_BOX)->setValue(mTabTitle); + getChild<LLButton>("undock")->setCommitCallback(boost::bind(&LLSideTrayTab::toggleTabDocked, this)); + getChild<LLButton>("dock")->setCommitCallback(boost::bind(&LLSideTrayTab::toggleTabDocked, this)); + return true; } @@ -209,6 +223,145 @@ void LLSideTrayTab::onOpen (const LLSD& key) panel->onOpen(key); } +// Attempts to get the existing side tray instance. +// Needed to avoid recursive calls of LLSideTray::getInstance(). +LLSideTray* LLSideTrayTab::getSideTray() +{ + // First, check if the side tray is our parent (i.e. we're attached). + LLSideTray* side_tray = dynamic_cast<LLSideTray*>(getParent()); + if (!side_tray) + { + // Detached? Ok, check if the instance exists at all/ + if (LLSideTray::instanceCreated()) + { + side_tray = LLSideTray::getInstance(); + } + else + { + llerrs << "No safe way to get the side tray instance" << llendl; + } + } + + return side_tray; +} + +void LLSideTrayTab::toggleTabDocked() +{ + std::string tab_name = getName(); + + LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab_name); + if (!floater_tab) return; + + bool docking = LLFloater::isShown(floater_tab); + + // Hide the "Tear Off" button when a tab gets undocked + // and show "Dock" button instead. + getChild<LLButton>("undock")->setVisible(docking); + getChild<LLButton>("dock")->setVisible(!docking); + + if (docking) + { + dock(); + } + else + { + undock(floater_tab); + } + + // Open/close the floater *after* we reparent the tab panel, + // so that it doesn't receive redundant visibility change notifications. + LLFloaterReg::toggleInstance("side_bar_tab", tab_name); +} + +void LLSideTrayTab::dock() +{ + LLSideTray* side_tray = getSideTray(); + if (!side_tray) return; + + if (!side_tray->addTab(this)) + { + llwarns << "Failed to add tab " << getName() << " to side tray" << llendl; + return; + } + + setRect(side_tray->getLocalRect()); + reshape(getRect().getWidth(), getRect().getHeight()); + + // Select the re-docked tab. + side_tray->selectTabByName(getName()); + + if (side_tray->getCollapsed()) + { + side_tray->expandSideBar(false); + } +} + +void LLSideTrayTab::undock(LLFloater* floater_tab) +{ + LLSideTray* side_tray = getSideTray(); + if (!side_tray) return; + + // Remember whether the tab have been active before detaching + // because removeTab() will change active tab. + bool was_active = side_tray->getActiveTab() == this; + + // Remove the tab from Side Tray's tabs list. + // We have to do it despite removing the tab from Side Tray's child view tree + // by addChild(). Otherwise the tab could be accessed by the pointer in LLSideTray::mTabs. + if (!side_tray->removeTab(this)) + { + llwarns << "Failed to remove tab " << getName() << " from side tray" << llendl; + return; + } + + // If we're undocking while side tray is collapsed we need to explicitly show the panel. + if (!getVisible()) + { + setVisible(true); + } + + floater_tab->addChild(this); + floater_tab->setTitle(mTabTitle); + floater_tab->setName(getName()); + + // Reshape the floater if needed. + LLRect floater_rect; + if (floater_tab->hasSavedRect()) + { + // We've got saved rect for the floater, hence no need to reshape it. + floater_rect = floater_tab->getLocalRect(); + } + else + { + // Detaching for the first time. Reshape the floater. + floater_rect = side_tray->getLocalRect(); + floater_tab->reshape(floater_rect.getWidth(), floater_rect.getHeight()); + } + + // Reshape the panel. + { + LLRect panel_rect = floater_rect; + panel_rect.mTop -= floater_tab->getHeaderHeight(); + setRect(panel_rect); + reshape(panel_rect.getWidth(), panel_rect.getHeight()); + } + + // Set FOLLOWS_ALL flag for the tab to follow floater dimensions upon resizing. + setFollowsAll(); + + if (!side_tray->getCollapsed()) + { + side_tray->collapseSideBar(); + } + + if (!was_active) + { + // When a tab other then current active tab is detached from Side Tray + // onOpen() should be called as tab visibility is changed. + onOpen(LLSD()); + } +} + LLPanel* LLSideTrayTab::getPanel() { LLPanel* panel = dynamic_cast<LLPanel*>(mMainPanel); @@ -225,6 +378,92 @@ LLSideTrayTab* LLSideTrayTab::createInstance () } ////////////////////////////////////////////////////////////////////////////// +// LLSideTrayButton +// Side Tray tab button with "tear off" handling. +////////////////////////////////////////////////////////////////////////////// + +class LLSideTrayButton : public LLButton +{ +public: + /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask) + { + // Route future Mouse messages here preemptively. (Release on mouse up.) + // No handler needed for focus lost since this class has no state that depends on it. + gFocusMgr.setMouseCapture(this); + + localPointToScreen(x, y, &mDragLastScreenX, &mDragLastScreenY); + + // Note: don't pass on to children + return TRUE; + } + + /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask) + { + // We only handle the click if the click both started and ended within us + if( !hasMouseCapture() ) return FALSE; + + S32 screen_x; + S32 screen_y; + localPointToScreen(x, y, &screen_x, &screen_y); + + S32 delta_x = screen_x - mDragLastScreenX; + S32 delta_y = screen_y - mDragLastScreenY; + + LLSideTray* side_tray = LLSideTray::getInstance(); + + // Check if the tab we are dragging is docked. + if (!side_tray->isTabAttached(getName())) return FALSE; + + // Same value is hardcoded in LLDragHandle::handleHover(). + const S32 undock_threshold = 12; + + // Detach a tab if it has been pulled further than undock_threshold. + if (delta_x <= -undock_threshold || delta_x >= undock_threshold || + delta_y <= -undock_threshold || delta_y >= undock_threshold) + { + LLSideTrayTab* tab = side_tray->getTab(getName()); + if (!tab) return FALSE; + + tab->toggleTabDocked(); + + LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab->getName()); + if (!floater_tab) return FALSE; + + LLRect original_rect = floater_tab->getRect(); + S32 header_snap_y = floater_tab->getHeaderHeight() / 2; + S32 snap_x = screen_x - original_rect.mLeft - original_rect.getWidth() / 2; + S32 snap_y = screen_y - original_rect.mTop + header_snap_y; + + // Move the floater to appear "under" the mouse pointer. + floater_tab->setRect(original_rect.translate(snap_x, snap_y)); + + // Snap the mouse pointer to the center of the floater header + // and call 'mouse down' event handler to begin dragging. + floater_tab->handleMouseDown(original_rect.getWidth() / 2, + original_rect.getHeight() - header_snap_y, + mask); + + return TRUE; + } + + return FALSE; + } + +protected: + LLSideTrayButton(const LLButton::Params& p) + : LLButton(p) + , mDragLastScreenX(0) + , mDragLastScreenY(0) + {} + + friend class LLUICtrlFactory; + +private: + S32 mDragLastScreenX; + S32 mDragLastScreenY; +}; + +////////////////////////////////////////////////////////////////////////////// // LLSideTray ////////////////////////////////////////////////////////////////////////////// @@ -279,6 +518,13 @@ BOOL LLSideTray::postBuild() LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLSideTray::handleLoginComplete, this)); + // Remember original tabs order, so that we can restore it if user detaches and then re-attaches a tab. + for (child_vector_const_iter_t it = mTabs.begin(); it != mTabs.end(); ++it) + { + std::string tab_name = (*it)->getName(); + mOriginalTabOrder.push_back(tab_name); + } + //EXT-8045 //connect all already created channels to reflect sidetray collapse/expand std::vector<LLChannelManager::ChannelElem>& channels = LLChannelManager::getInstance()->getChannelList(); @@ -289,6 +535,7 @@ BOOL LLSideTray::postBuild() getCollapseSignal().connect(boost::bind(&LLScreenChannelBase::resetPositionAndSize, (*it).channel, _2)); } } + return true; } @@ -296,13 +543,28 @@ void LLSideTray::handleLoginComplete() { //reset tab to "home" tab if it was changesd during login process selectTabByName("sidebar_home"); + + detachTabs(); } LLSideTrayTab* LLSideTray::getTab(const std::string& name) { - return getChild<LLSideTrayTab>(name,false); + return findChild<LLSideTrayTab>(name,false); +} + +bool LLSideTray::isTabAttached(const std::string& name) +{ + LLSideTrayTab* tab = getTab(name); + if (!tab) return false; + + return std::find(mTabs.begin(), mTabs.end(), tab) != mTabs.end(); } +bool LLSideTray::hasTabs() +{ + // The open/close tab doesn't count. + return mTabs.size() > 1; +} void LLSideTray::toggleTabButton(LLSideTrayTab* tab) { @@ -315,8 +577,57 @@ void LLSideTray::toggleTabButton(LLSideTrayTab* tab) LLButton* btn = it->second; bool new_state = !btn->getToggleState(); btn->setToggleState(new_state); - btn->setImageOverlay( new_state ? tab->mImageSelected : tab->mImage ); + // Only highlight the tab if side tray is expanded (STORM-157). + btn->setImageOverlay( new_state && !getCollapsed() ? tab->mImageSelected : tab->mImage ); + } +} + +LLPanel* LLSideTray::openChildPanel(LLSideTrayTab* tab, const std::string& panel_name, const LLSD& params) +{ + LLView* view = tab->findChildView(panel_name, true); + if (!view) return NULL; + + std::string tab_name = tab->getName(); + + // Select tab and expand Side Tray only when a tab is attached. + if (isTabAttached(tab_name)) + { + selectTabByName(tab_name); + if (mCollapsed) + expandSideBar(); + } + else + { + LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab_name); + if (!floater_tab) return NULL; + + // Restore the floater if it was minimized. + if (floater_tab->isMinimized()) + { + floater_tab->setMinimized(FALSE); + } + + // Send the floater to the front. + floater_tab->setFrontmost(); + } + + LLSideTrayPanelContainer* container = dynamic_cast<LLSideTrayPanelContainer*>(view->getParent()); + if (container) + { + LLSD new_params = params; + new_params[LLSideTrayPanelContainer::PARAM_SUB_PANEL_NAME] = panel_name; + container->onOpen(new_params); + + return container->getCurrentPanel(); + } + + LLPanel* panel = dynamic_cast<LLPanel*>(view); + if (panel) + { + panel->onOpen(params); } + + return panel; } bool LLSideTray::selectTabByIndex(size_t index) @@ -328,24 +639,33 @@ bool LLSideTray::selectTabByIndex(size_t index) return selectTabByName(sidebar_tab->getName()); } -bool LLSideTray::selectTabByName (const std::string& name) +bool LLSideTray::selectTabByName(const std::string& name, bool keep_prev_visible) { - LLSideTrayTab* side_bar = getTab(name); + LLSideTrayTab* tab_to_keep_visible = NULL; + LLSideTrayTab* new_tab = getTab(name); + if (!new_tab) return false; - if(side_bar == mActiveTab) + // Bail out if already selected. + if (new_tab == mActiveTab) return false; + //deselect old tab + if (mActiveTab) + { + // Keep previously active tab visible if requested. + if (keep_prev_visible) tab_to_keep_visible = mActiveTab; toggleTabButton(mActiveTab); - if(mActiveTab) - mActiveTab->setVisible(false); + } //select new tab - mActiveTab = side_bar; + mActiveTab = new_tab; + + if (mActiveTab) + { toggleTabButton(mActiveTab); LLSD key;//empty mActiveTab->onOpen(key); - - mActiveTab->setVisible(true); + } //arrange(); @@ -354,7 +674,17 @@ bool LLSideTray::selectTabByName (const std::string& name) for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it) { LLSideTrayTab* sidebar_tab = *child_it; - sidebar_tab->setVisible(sidebar_tab == mActiveTab); + + bool vis = sidebar_tab == mActiveTab; + + // Force keeping the tab visible if requested. + vis |= sidebar_tab == tab_to_keep_visible; + + // When the last tab gets detached, for a short moment the "Toggle Sidebar" pseudo-tab + // is shown. So, to avoid the flicker we make sure it never gets visible. + vis &= (*child_it)->getName() != "sidebar_openclose"; + + sidebar_tab->setVisible(vis); } return true; } @@ -378,8 +708,18 @@ LLButton* LLSideTray::createButton (const std::string& name,const std::string& i bparams.image_disabled(sidetray_params.tab_btn_image_normal); bparams.image_disabled_selected(sidetray_params.tab_btn_image_selected); - LLButton* button = LLUICtrlFactory::create<LLButton> (bparams); - button->setLabel(name); + LLButton* button; + if (name == "sidebar_openclose") + { + // "Open/Close" button shouldn't allow "tear off" + // hence it is created as LLButton instance. + button = LLUICtrlFactory::create<LLButton>(bparams); + } + else + { + button = LLUICtrlFactory::create<LLSideTrayButton>(bparams); + } + button->setClickedCallback(callback); button->setToolTip(tooltip); @@ -406,6 +746,120 @@ bool LLSideTray::addChild(LLView* view, S32 tab_group) return LLUICtrl::addChild(view, tab_group); } +bool LLSideTray::removeTab(LLSideTrayTab* tab) +{ + if (!tab) return false; + std::string tab_name = tab->getName(); + + // Look up the tab in the list of known tabs. + child_vector_iter_t tab_it = std::find(mTabs.begin(), mTabs.end(), tab); + if (tab_it == mTabs.end()) + { + llwarns << "Cannot find tab named " << tab_name << llendl; + return false; + } + + // Find the button corresponding to the tab. + button_map_t::iterator btn_it = mTabButtons.find(tab_name); + if (btn_it == mTabButtons.end()) + { + llwarns << "Cannot find button for tab named " << tab_name << llendl; + return false; + } + LLButton* btn = btn_it->second; + + // Deselect the tab. + if (mActiveTab == tab) + { + // Select the next tab (or first one, if we're removing the last tab), + // skipping the fake open/close tab (STORM-155). + child_vector_iter_t next_tab_it = tab_it; + do + { + next_tab_it = (next_tab_it < (mTabs.end() - 1)) ? next_tab_it + 1 : mTabs.begin(); + } + while ((*next_tab_it)->getName() == "sidebar_openclose"); + + selectTabByName((*next_tab_it)->getName(), true); // Don't hide the tab being removed. + } + + // Remove the tab. + removeChild(tab); + mTabs.erase(tab_it); + + // Add the tab to detached tabs list. + mDetachedTabs.push_back(tab); + + // Remove the button from the buttons panel so that it isn't drawn anymore. + mButtonsPanel->removeChild(btn); + + // Re-arrange remaining tabs. + arrange(); + + return true; +} + +bool LLSideTray::addTab(LLSideTrayTab* tab) +{ + if (tab == NULL) return false; + + std::string tab_name = tab->getName(); + + // Make sure the tab isn't already in the list. + if (std::find(mTabs.begin(), mTabs.end(), tab) != mTabs.end()) + { + llwarns << "Attempt to re-add existing tab " << tab_name << llendl; + return false; + } + + // Look up the corresponding button. + button_map_t::const_iterator btn_it = mTabButtons.find(tab_name); + if (btn_it == mTabButtons.end()) + { + llwarns << "Tab " << tab_name << " has no associated button" << llendl; + return false; + } + LLButton* btn = btn_it->second; + + // Insert the tab at its original position. + LLUICtrl::addChild(tab); + { + tab_order_vector_const_iter_t new_tab_orig_pos = + std::find(mOriginalTabOrder.begin(), mOriginalTabOrder.end(), tab_name); + llassert(new_tab_orig_pos != mOriginalTabOrder.end()); + child_vector_iter_t insert_pos = mTabs.end(); + + for (child_vector_iter_t tab_it = mTabs.begin(); tab_it != mTabs.end(); ++tab_it) + { + tab_order_vector_const_iter_t cur_tab_orig_pos = + std::find(mOriginalTabOrder.begin(), mOriginalTabOrder.end(), (*tab_it)->getName()); + llassert(cur_tab_orig_pos != mOriginalTabOrder.end()); + + if (new_tab_orig_pos < cur_tab_orig_pos) + { + insert_pos = tab_it; + break; + } + } + + mTabs.insert(insert_pos, tab); + } + + // Add the button to the buttons panel so that it's drawn again. + mButtonsPanel->addChildInBack(btn); + + // Arrange tabs after inserting a new one. + arrange(); + + // Remove the tab from the list of detached tabs. + child_vector_iter_t tab_it = std::find(mDetachedTabs.begin(), mDetachedTabs.end(), tab); + if (tab_it != mDetachedTabs.end()) + { + mDetachedTabs.erase(tab_it); + } + + return true; +} void LLSideTray::createButtons () { @@ -420,16 +874,19 @@ void LLSideTray::createButtons () // The "OpenClose" button will open/close the whole panel if (name == "sidebar_openclose") { - mCollapseButton = createButton("",sidebar_tab->mImage,sidebar_tab->getTabTitle(), + mCollapseButton = createButton(name,sidebar_tab->mImage,sidebar_tab->getTabTitle(), boost::bind(&LLSideTray::onToggleCollapse, this)); + LLHints::registerHintTarget("side_panel_btn", mCollapseButton->getHandle()); } else { - LLButton* button = createButton("",sidebar_tab->mImage,sidebar_tab->getTabTitle(), + LLButton* button = createButton(name,sidebar_tab->mImage,sidebar_tab->getTabTitle(), boost::bind(&LLSideTray::onTabButtonClick, this, name)); mTabButtons[name] = button; } } + LLHints::registerHintTarget("inventory_btn", mTabButtons["sidebar_inventory"]->getHandle()); + LLHints::registerHintTarget("dest_guide_btn", mTabButtons["sidebar_places"]->getHandle()); } void LLSideTray::processTriState () @@ -453,8 +910,10 @@ void LLSideTray::processTriState () void LLSideTray::onTabButtonClick(string name) { - LLSideTrayTab* side_bar = getTab(name); - if(side_bar == mActiveTab) + LLSideTrayTab* tab = getTab(name); + if (!tab) return; + + if(tab == mActiveTab) { processTriState (); return; @@ -466,6 +925,7 @@ void LLSideTray::onTabButtonClick(string name) void LLSideTray::onToggleCollapse() { + LLFirstUse::notUsingSidePanel(false); if(mCollapsed) { expandSideBar(); @@ -542,6 +1002,31 @@ void LLSideTray::arrange() LLSideTrayTab* sidebar_tab = *child_it; sidebar_tab->setShape(getLocalRect()); } + + // The tab buttons should be shown only if there is at least one non-detached tab. + mButtonsPanel->setVisible(hasTabs()); +} + +// Detach those tabs that were detached when the viewer exited last time. +void LLSideTray::detachTabs() +{ + // copy mTabs because LLSideTray::toggleTabDocked() modifies it. + child_vector_t tabs = mTabs; + + for (child_vector_const_iter_t it = tabs.begin(); it != tabs.end(); ++it) + { + LLSideTrayTab* tab = *it; + + std::string floater_ctrl_name = LLFloater::getControlName("side_bar_tab", LLSD(tab->getName())); + std::string vis_ctrl_name = LLFloaterReg::getVisibilityControlName(floater_ctrl_name); + if (!LLFloater::getControlGroup()->controlExists(vis_ctrl_name)) continue; + + bool is_visible = LLFloater::getControlGroup()->getBOOL(vis_ctrl_name); + if (!is_visible) continue; + + llassert(isTabAttached(tab->getName())); + tab->toggleTabDocked(); + } } void LLSideTray::collapseSideBar() @@ -574,7 +1059,7 @@ void LLSideTray::collapseSideBar() setFocus( FALSE ); } -void LLSideTray::expandSideBar() +void LLSideTray::expandSideBar(bool open_active) { mCollapsed = false; LLSideTrayTab* openclose_tab = getTab("sidebar_openclose"); @@ -582,8 +1067,11 @@ void LLSideTray::expandSideBar() { mCollapseButton->setImageOverlay( openclose_tab->mImageSelected ); } - LLSD key;//empty - mActiveTab->onOpen(key); + + if (open_active) + { + mActiveTab->onOpen(LLSD()); + } reflectCollapseChange(); @@ -636,35 +1124,19 @@ void LLSideTray::reshape(S32 width, S32 height, BOOL called_from_parent) */ LLPanel* LLSideTray::showPanel (const std::string& panel_name, const LLSD& params) { - //arrange tabs + // Look up the tab in the list of detached tabs. child_vector_const_iter_t child_it; - for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it) + for ( child_it = mDetachedTabs.begin(); child_it != mDetachedTabs.end(); ++child_it) { - LLView* view = (*child_it)->findChildView(panel_name,true); - if(view) - { - selectTabByName ((*child_it)->getName()); - if(mCollapsed) - expandSideBar(); - - LLSideTrayPanelContainer* container = dynamic_cast<LLSideTrayPanelContainer*>(view->getParent()); - if(container) - { - LLSD new_params = params; - new_params[LLSideTrayPanelContainer::PARAM_SUB_PANEL_NAME] = panel_name; - container->onOpen(new_params); - - return container->getCurrentPanel(); + LLPanel* panel = openChildPanel(*child_it, panel_name, params); + if (panel) return panel; } - LLPanel* panel = dynamic_cast<LLPanel*>(view); - if(panel) + // Look up the tab in the list of attached tabs. + for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it) { - panel->onOpen(params); - } - - return panel; - } + LLPanel* panel = openChildPanel(*child_it, panel_name, params); + if (panel) return panel; } return NULL; } @@ -674,7 +1146,9 @@ void LLSideTray::togglePanel(LLPanel* &sub_panel, const std::string& panel_name, if(!sub_panel) return; - if (sub_panel->isInVisibleChain()) + // If a panel is visible and attached to Side Tray (has LLSideTray among its ancestors) + // it should be toggled off by collapsing Side Tray. + if (sub_panel->isInVisibleChain() && sub_panel->hasAncestor(this)) { LLSideTray::getInstance()->collapseSideBar(); } @@ -718,6 +1192,17 @@ LLPanel *findChildPanel(LLPanel *panel, const std::string& name, bool recurse) LLPanel* LLSideTray::getPanel(const std::string& panel_name) { + // Look up the panel in the list of detached tabs. + for ( child_vector_const_iter_t child_it = mDetachedTabs.begin(); child_it != mDetachedTabs.end(); ++child_it) + { + LLPanel *panel = findChildPanel(*child_it,panel_name,true); + if(panel) + { + return panel; + } + } + + // Look up the panel in the list of attached tabs. for ( child_vector_const_iter_t child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it) { LLPanel *panel = findChildPanel(*child_it,panel_name,true); diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h index 406cdc9055..e2e1e42388 100644 --- a/indra/newview/llsidetray.h +++ b/indra/newview/llsidetray.h @@ -74,15 +74,20 @@ protected: typedef child_vector_t::const_iterator child_vector_const_iter_t; typedef child_vector_t::reverse_iterator child_vector_reverse_iter_t; typedef child_vector_t::const_reverse_iterator child_vector_const_reverse_iter_t; + typedef std::vector<std::string> tab_order_vector_t; + typedef tab_order_vector_t::const_iterator tab_order_vector_const_iter_t; public: // interface functions /** - * Select tab with specific name and set it active - */ - bool selectTabByName (const std::string& name); + * Select tab with specific name and set it active + * + * @param name Tab to switch to. + * @param keep_prev_visible Whether to keep the previously selected tab visible. + */ + bool selectTabByName (const std::string& name, bool keep_prev_visible = false); /** * Select tab with specific index and set it active @@ -123,8 +128,10 @@ public: /* * expand SideBar + * + * @param open_active Whether to call onOpen() for the active tab. */ - void expandSideBar (); + void expandSideBar(bool open_active = true); /** @@ -150,6 +157,8 @@ public: void onToggleCollapse(); bool addChild (LLView* view, S32 tab_group); + bool removeTab (LLSideTrayTab* tab); // Used to detach tabs temporarily + bool addTab (LLSideTrayTab* tab); // Used to re-attach tabs BOOL handleMouseDown (S32 x, S32 y, MASK mask); @@ -163,17 +172,25 @@ public: void handleLoginComplete(); -protected: LLSideTrayTab* getTab (const std::string& name); + bool isTabAttached (const std::string& name); + +protected: + bool hasTabs (); + void createButtons (); + LLButton* createButton (const std::string& name,const std::string& image,const std::string& tooltip, LLUICtrl::commit_callback_t callback); void arrange (); + void detachTabs (); void reflectCollapseChange(); void toggleTabButton (LLSideTrayTab* tab); + LLPanel* openChildPanel (LLSideTrayTab* tab, const std::string& panel_name, const LLSD& params); + private: // Implementation of LLDestroyClass<LLSideTray> static void destroyClass() @@ -184,11 +201,12 @@ private: } private: - LLPanel* mButtonsPanel; typedef std::map<std::string,LLButton*> button_map_t; button_map_t mTabButtons; child_vector_t mTabs; + child_vector_t mDetachedTabs; + tab_order_vector_t mOriginalTabOrder; LLSideTrayTab* mActiveTab; commit_signal_t mCollapseSignal; diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp index d7de050636..aa0a5196bd 100644 --- a/indra/newview/llspeakbutton.cpp +++ b/indra/newview/llspeakbutton.cpp @@ -43,6 +43,8 @@ #include "llspeakbutton.h" +#include "llbottomtray.h" + static LLDefaultChildRegistry::Register<LLSpeakButton> t1("talk_button"); ////////////////////////////////////////////////////////////////////////// @@ -73,7 +75,7 @@ void LLSpeakButton::setSpeakBtnEnabled(bool enabled) } void LLSpeakButton::setFlyoutBtnEnabled(bool enabled) { - LLButton* show_btn = getChild<LLButton>("speak_flyout_btn"); + LLButton* show_btn = getChild<LLBottomtrayButton>("speak_flyout_btn"); show_btn->setEnabled(enabled); } @@ -102,9 +104,9 @@ LLSpeakButton::LLSpeakButton(const Params& p) mSpeakBtn->setMouseUpCallback(boost::bind(&LLSpeakButton::onMouseUp_SpeakBtn, this)); mSpeakBtn->setToggleState(FALSE); - LLButton::Params show_params = p.show_button; + LLBottomtrayButton::Params show_params = p.show_button; show_params.rect(show_rect); - mShowBtn = LLUICtrlFactory::create<LLButton>(show_params); + mShowBtn = LLUICtrlFactory::create<LLBottomtrayButton>(show_params); addChild(mShowBtn); LLTransientFloaterMgr::getInstance()->addControlView(mShowBtn); diff --git a/indra/newview/llspeakbutton.h b/indra/newview/llspeakbutton.h index 85c97f1a2c..4c357cb5fa 100644 --- a/indra/newview/llspeakbutton.h +++ b/indra/newview/llspeakbutton.h @@ -39,6 +39,7 @@ class LLCallFloater; class LLButton; class LLOutputMonitorCtrl; +class LLBottomtrayButton; /* * Button displaying voice chat status. Displays voice chat options when @@ -50,10 +51,8 @@ public: struct Params : public LLInitParam::Block<Params, LLUICtrl::Params> { - Optional<LLButton::Params> - speak_button, - show_button; - + Optional<LLButton::Params> speak_button; + Optional<LLBottomtrayButton::Params> show_button; Optional<LLOutputMonitorCtrl::Params> monitor; Params(); @@ -92,7 +91,7 @@ protected: private: LLButton* mSpeakBtn; - LLButton* mShowBtn; + LLBottomtrayButton* mShowBtn; LLHandle<LLFloater> mPrivateCallPanel; LLOutputMonitorCtrl* mOutputMonitor; }; diff --git a/indra/newview/llsplitbutton.cpp b/indra/newview/llsplitbutton.cpp index e5323db466..1f5532a5c8 100644 --- a/indra/newview/llsplitbutton.cpp +++ b/indra/newview/llsplitbutton.cpp @@ -226,7 +226,7 @@ LLSplitButton::LLSplitButton(const LLSplitButton::Params& p) addChild(mItemsPanel); - LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items().begin(); + LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items.begin(); //processing shown item button mShownItem = prepareItemButton(*it); @@ -237,7 +237,7 @@ LLSplitButton::LLSplitButton(const LLSplitButton::Params& p) //processing hidden item buttons S32 item_top = mItemsPanel->getRect().getHeight(); - for (++it; it != p.items().end(); ++it) + for (++it; it != p.items.end(); ++it) { LLButton* hidden_button = prepareItemButton(*it); hidden_button->setRect(LLRect(btn_left, item_top, btn_right, item_top - rc.getHeight())); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index e64c4c90b7..0f340e885a 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -800,10 +800,6 @@ bool idle_startup() if (STATE_LOGIN_CLEANUP == LLStartUp::getStartupState()) { - // Move the progress view in front of the UI immediately when login is performed - // this allows not to see main menu after Alt+Tab was pressed while login. EXT-744. - gViewerWindow->moveProgressViewToFront(); - //reset the values that could have come in from a slurl // DEV-42215: Make sure they're not empty -- gUserCredential // might already have been set from gSavedSettings, and it's too bad @@ -1257,9 +1253,6 @@ bool idle_startup() if (!gNoRender) { - // Move the progress view in front of the UI - gViewerWindow->moveProgressViewToFront(); - // direct logging to the debug console's line buffer LLError::logToFixedBuffer(gDebugView->mDebugConsolep); diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index a6bb4d4d5f..b0fd54c52c 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -39,6 +39,7 @@ #include "llagentcamera.h" #include "llbutton.h" #include "llcommandhandler.h" +#include "llfirstuse.h" #include "llviewercontrol.h" #include "llfloaterbuycurrency.h" #include "llbuycurrencyhtml.h" @@ -47,6 +48,7 @@ #include "llpanelvolumepulldown.h" #include "llfloaterregioninfo.h" #include "llfloaterscriptdebug.h" +#include "llhints.h" #include "llhudicon.h" #include "llnavigationbar.h" #include "llkeyboard.h" @@ -113,10 +115,6 @@ const S32 TEXT_HEIGHT = 18; static void onClickVolume(void*); -std::vector<std::string> LLStatusBar::sDays; -std::vector<std::string> LLStatusBar::sMonths; -const U32 LLStatusBar::MAX_DATE_STRING_LENGTH = 2000; - LLStatusBar::LLStatusBar(const LLRect& rect) : LLPanel(), mTextTime(NULL), @@ -133,14 +131,10 @@ LLStatusBar::LLStatusBar(const LLRect& rect) // status bar can possible overlay menus? setMouseOpaque(FALSE); - // size of day of the weeks and year - sDays.reserve(7); - sMonths.reserve(12); - mBalanceTimer = new LLFrameTimer(); mHealthTimer = new LLFrameTimer(); - LLUICtrlFactory::getInstance()->buildPanel(this,"panel_status_bar.xml"); + buildFromFile("panel_status_bar.xml"); } LLStatusBar::~LLStatusBar() @@ -175,9 +169,6 @@ BOOL LLStatusBar::postBuild() { gMenuBarView->setRightMouseDownCallback(boost::bind(&show_navbar_context_menu, _1, _2, _3)); - // build date necessary data (must do after panel built) - setupDate(); - mTextTime = getChild<LLTextBox>("TimeText" ); getChild<LLUICtrl>("buyL")->setCommitCallback( @@ -191,6 +182,8 @@ BOOL LLStatusBar::postBuild() mMediaToggle->setClickedCallback( &LLStatusBar::onClickMediaToggle, this ); mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this)); + LLHints::registerHintTarget("linden_balance", getChild<LLView>("balance_bg")->getHandle()); + gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&LLStatusBar::onVolumeChanged, this, _2)); // Adding Net Stat Graph @@ -338,6 +331,11 @@ void LLStatusBar::creditBalance(S32 credit) void LLStatusBar::setBalance(S32 balance) { + if (balance > getBalance() && getBalance() != 0) + { + LLFirstUse::receiveLindens(); + } + std::string money_str = LLResMgr::getInstance()->getMonetaryString( balance ); LLTextBox* balance_box = getChild<LLTextBox>("balance"); @@ -460,6 +458,7 @@ void LLStatusBar::onClickBuyCurrency() // open a currency floater - actual one open depends on // value specified in settings.xml LLBuyCurrencyHTML::openCurrencyFloater(); + LLFirstUse::receiveLindens(false); } void LLStatusBar::onMouseEnterVolume() @@ -523,69 +522,6 @@ void LLStatusBar::onClickMediaToggle(void* data) LLViewerMedia::setAllMediaEnabled(enable); } -// sets the static variables necessary for the date -void LLStatusBar::setupDate() -{ - // fill the day array with what's in the xui - std::string day_list = getString("StatBarDaysOfWeek"); - size_t length = day_list.size(); - - // quick input check - if(length < MAX_DATE_STRING_LENGTH) - { - // tokenize it and put it in the array - std::string cur_word; - for(size_t i = 0; i < length; ++i) - { - if(day_list[i] == ':') - { - sDays.push_back(cur_word); - cur_word.clear(); - } - else - { - cur_word.append(1, day_list[i]); - } - } - sDays.push_back(cur_word); - } - - // fill the day array with what's in the xui - std::string month_list = getString( "StatBarMonthsOfYear" ); - length = month_list.size(); - - // quick input check - if(length < MAX_DATE_STRING_LENGTH) - { - // tokenize it and put it in the array - std::string cur_word; - for(size_t i = 0; i < length; ++i) - { - if(month_list[i] == ':') - { - sMonths.push_back(cur_word); - cur_word.clear(); - } - else - { - cur_word.append(1, month_list[i]); - } - } - sMonths.push_back(cur_word); - } - - // make sure we have at least 7 days and 12 months - if(sDays.size() < 7) - { - sDays.resize(7); - } - - if(sMonths.size() < 12) - { - sMonths.resize(12); - } -} - // static void LLStatusBar::onClickStatGraph(void* data) { diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h index c8c86dfd8c..8840db2c4a 100644 --- a/indra/newview/llstatusbar.h +++ b/indra/newview/llstatusbar.h @@ -85,9 +85,7 @@ public: LLPanelNearByMedia* getNearbyMediaPanel() { return mPanelNearByMedia; } private: - // simple method to setup the part that holds the date - void setupDate(); - + void onClickBuyCurrency(); void onVolumeChanged(const LLSD& newvalue); @@ -117,9 +115,6 @@ private: LLFrameTimer* mHealthTimer; LLPanelVolumePulldown* mPanelVolumePulldown; LLPanelNearByMedia* mPanelNearByMedia; - static std::vector<std::string> sDays; - static std::vector<std::string> sMonths; - static const U32 MAX_DATE_STRING_LENGTH; }; // *HACK: Status bar owns your cached money balance. JC diff --git a/indra/newview/llsyswellitem.cpp b/indra/newview/llsyswellitem.cpp index 4a107fefa8..057d80457c 100644 --- a/indra/newview/llsyswellitem.cpp +++ b/indra/newview/llsyswellitem.cpp @@ -38,7 +38,7 @@ LLSysWellItem::LLSysWellItem(const Params& p) : LLPanel(p), mTitle(NULL), mCloseBtn(NULL) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_sys_well_item.xml"); + buildFromFile( "panel_sys_well_item.xml"); mTitle = getChild<LLTextBox>("title"); mCloseBtn = getChild<LLButton>("close_btn"); diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index 1a8c2b8fc0..d971318f21 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -255,7 +255,7 @@ LLIMWellWindow::RowPanel::RowPanel(const LLSysWellWindow* parent, const LLUUID& S32 chicletCounter, const std::string& name, const LLUUID& otherParticipantId) : LLPanel(LLPanel::Params()), mChiclet(NULL), mParent(parent) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_activeim_row.xml", NULL); + buildFromFile( "panel_activeim_row.xml", NULL); // Choose which of the pre-created chiclets (IM/group) to use. // The other one gets hidden. @@ -352,7 +352,7 @@ LLIMWellWindow::ObjectRowPanel::ObjectRowPanel(const LLUUID& notification_id, bo : LLPanel() , mChiclet(NULL) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_active_object_row.xml", NULL); + buildFromFile( "panel_active_object_row.xml", NULL); initChiclet(notification_id); diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 952f893015..e37159e6fd 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -933,7 +933,7 @@ void LLTextureCache::setReadOnly(BOOL read_only) } //called in the main thread. -S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL disable_texture_cache) +S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL texture_cache_mismatch) { llassert_always(getPending() == 0) ; //should not start accessing the texture cache before initialized. @@ -948,20 +948,23 @@ S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL disable_textu sCacheMaxTexturesSize = max_size; max_size -= sCacheMaxTexturesSize; - if(disable_texture_cache) //the texture cache is disabled - { - llinfos << "The texture cache is disabled!" << llendl ; - setReadOnly(TRUE) ; - purgeAllTextures(true); - - return max_size ; - } - LL_INFOS("TextureCache") << "Headers: " << sCacheMaxEntries << " Textures size: " << sCacheMaxTexturesSize/(1024*1024) << " MB" << LL_ENDL; setDirNames(location); + if(texture_cache_mismatch) + { + //if readonly, disable the texture cache, + //otherwise wipe out the texture cache. + purgeAllTextures(true); + + if(mReadOnly) + { + return max_size ; + } + } + if (!mReadOnly) { LLFile::mkdir(mTexturesDirName); diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h index f80be0056b..d218e00103 100644 --- a/indra/newview/lltexturecache.h +++ b/indra/newview/lltexturecache.h @@ -111,7 +111,7 @@ public: void purgeCache(ELLPath location); void setReadOnly(BOOL read_only) ; - S64 initCache(ELLPath location, S64 maxsize, BOOL disable_texture_cache); + S64 initCache(ELLPath location, S64 maxsize, BOOL texture_cache_mismatch); handle_t readFromCache(const std::string& local_filename, const LLUUID& id, U32 priority, S32 offset, S32 size, ReadResponder* responder); diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 3d290b7875..a9e91888bc 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -202,8 +202,8 @@ LLFloaterTexturePicker::LLFloaterTexturePicker( mContextConeOpacity(0.f), mSelectedItemPinned( FALSE ) { + buildFromFile("floater_texture_ctrl.xml"); mCanApplyImmediately = can_apply_immediately; - LLUICtrlFactory::getInstance()->buildFloater(this,"floater_texture_ctrl.xml",NULL); setCanMinimize(FALSE); } diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 4e9ebce4d1..fafef84aa2 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -847,10 +847,16 @@ bool LLTextureFetchWorker::doWork(S32 param) if(mCanUseHTTP) { //NOTE: - //it seems ok to let sim control the UDP traffic - //so there is no throttle for http here. + //control the number of the http requests issued for: + //1, not openning too many file descriptors at the same time; + //2, control the traffic of http so udp gets bandwidth. // - + static const S32 MAX_NUM_OF_HTTP_REQUESTS_IN_QUEUE = 32 ; + if(mFetcher->getNumHTTPRequests() > MAX_NUM_OF_HTTP_REQUESTS_IN_QUEUE) + { + return false ; //wait. + } + mFetcher->removeFromNetworkQueue(this, false); S32 cur_size = 0; diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index b588ff91d1..0b6f4653da 100644 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -54,6 +54,7 @@ #include "llviewertexture.h" #include "llviewertexturelist.h" #include "llvovolume.h" +#include "llviewerstats.h" // For avatar texture view #include "llvoavatarself.h" @@ -519,6 +520,7 @@ void LLGLTexMemBar::draw() F32 cache_max_usage = (F32)BYTES_TO_MEGA_BYTES(LLAppViewer::getTextureCache()->getMaxUsage()) ; S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); S32 v_offset = (S32)((texture_bar_height + 2.2f) * mTextureView->mNumTextureBars + 2.0f); + S32 total_downloaded = BYTES_TO_MEGA_BYTES(gTotalTextureBytes); //---------------------------------------------------------------------------- LLGLSUIDefault gls_ui; LLColor4 text_color(1.f, 1.f, 1.f, 0.75f); @@ -529,13 +531,13 @@ void LLGLTexMemBar::draw() LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, v_offset + line_height*6, text_color, LLFontGL::LEFT, LLFontGL::TOP); - text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB Raw Tot: %d MB Bias: %.2f Cache: %.1f/%.1f MB", + text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB Raw Tot: %d MB Bias: %.2f Cache: %.1f/%.1f MB Net Tot: %d MB", total_mem, max_total_mem, bound_mem, max_bound_mem, - LLImageRaw::sGlobalRawMemory >> 20, discard_bias, - cache_usage, cache_max_usage); + LLImageRaw::sGlobalRawMemory >> 20, discard_bias, + cache_usage, cache_max_usage, total_downloaded); //, cache_entries, cache_max_entries LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, v_offset + line_height*3, diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index 2bb573c263..5fdc6765a8 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -83,7 +83,7 @@ LLToast::LLToast(const LLToast::Params& p) { mTimer.reset(new LLToastLifeTimer(this, p.lifetime_secs)); - LLUICtrlFactory::getInstance()->buildFloater(this, "panel_toast.xml", NULL); + buildFromFile("panel_toast.xml", NULL); setCanDrag(FALSE); diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h index c0da656685..8217aae0f2 100644 --- a/indra/newview/lltoast.h +++ b/indra/newview/lltoast.h @@ -194,6 +194,8 @@ public: virtual S32 notifyParent(const LLSD& info); + LLHandle<LLToast> getHandle() { mHandle.bind(this); return mHandle; } + private: void onToastMouseEnter(); @@ -206,6 +208,8 @@ private: LLUUID mSessionID; LLNotificationPtr mNotification; + LLRootHandle<LLToast> mHandle; + LLPanel* mWrapperPanel; // timer counts a lifetime of a toast diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp index 4c75b07ae8..78cc96b353 100644 --- a/indra/newview/lltoastgroupnotifypanel.cpp +++ b/indra/newview/lltoastgroupnotifypanel.cpp @@ -54,7 +54,7 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification : LLToastPanel(notification), mInventoryOffer(NULL) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_notify.xml"); + buildFromFile( "panel_group_notify.xml"); const LLSD& payload = notification->getPayload(); LLGroupData groupData; if (!gAgent.getGroupData(payload["group_id"].asUUID(),groupData)) diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp index 26d3bd5192..ffe6c80f32 100644 --- a/indra/newview/lltoastimpanel.cpp +++ b/indra/newview/lltoastimpanel.cpp @@ -51,7 +51,7 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) : LLToastPanel(p.notif mAvatarIcon(NULL), mAvatarName(NULL), mTime(NULL), mMessage(NULL), mGroupIcon(NULL) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_instant_message.xml"); + buildFromFile( "panel_instant_message.xml"); mGroupIcon = getChild<LLGroupIconCtrl>("group_icon"); mAvatarIcon = getChild<LLAvatarIconCtrl>("avatar_icon"); diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index 38f67720b7..31988712b3 100644 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -57,7 +57,7 @@ const LLFontGL* LLToastNotifyPanel::sFontSmall = NULL; LLToastNotifyPanel::button_click_signal_t LLToastNotifyPanel::sButtonClickSignal; -LLToastNotifyPanel::LLToastNotifyPanel(LLNotificationPtr& notification, const LLRect& rect) : +LLToastNotifyPanel::LLToastNotifyPanel(LLNotificationPtr& notification, const LLRect& rect, bool show_images) : LLToastPanel(notification), mTextBox(NULL), mInfoPanel(NULL), @@ -67,7 +67,7 @@ mNumButtons(0), mAddedDefaultBtn(false), mCloseNotificationOnDestroy(true) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_notification.xml"); + buildFromFile( "panel_notification.xml"); if(rect != LLRect::null) { this->setShape(rect); @@ -126,6 +126,7 @@ mCloseNotificationOnDestroy(true) mTextBox->setMaxTextLength(MAX_LENGTH); mTextBox->setVisible(TRUE); + mTextBox->setPlainText(!show_images); mTextBox->setValue(notification->getMessage()); // add buttons for a script notification @@ -529,8 +530,9 @@ void LLToastNotifyPanel::disableRespondedOptions(LLNotificationPtr& notification ////////////////////////////////////////////////////////////////////////// -LLIMToastNotifyPanel::LLIMToastNotifyPanel(LLNotificationPtr& pNotification, const LLUUID& session_id, const LLRect& rect /* = LLRect::null */) - : mSessionID(session_id), LLToastNotifyPanel(pNotification, rect) +LLIMToastNotifyPanel::LLIMToastNotifyPanel(LLNotificationPtr& pNotification, const LLUUID& session_id, const LLRect& rect /* = LLRect::null */, + bool show_images /* = true */) + : mSessionID(session_id), LLToastNotifyPanel(pNotification, rect, show_images) { mTextBox->setFollowsAll(); } diff --git a/indra/newview/lltoastnotifypanel.h b/indra/newview/lltoastnotifypanel.h index a6644c0a7a..e07e09b004 100644 --- a/indra/newview/lltoastnotifypanel.h +++ b/indra/newview/lltoastnotifypanel.h @@ -66,7 +66,7 @@ public: * @deprecated if you intend to instantiate LLToastNotifyPanel - it's point to * implement right class for desired toast panel. @see LLGenericTipPanel as example. */ - LLToastNotifyPanel(LLNotificationPtr& pNotification, const LLRect& rect = LLRect::null); + LLToastNotifyPanel(LLNotificationPtr& pNotification, const LLRect& rect = LLRect::null, bool show_images = true); virtual ~LLToastNotifyPanel(); LLPanel * getControlPanel() { return mControlPanel; } @@ -143,7 +143,7 @@ class LLIMToastNotifyPanel : public LLToastNotifyPanel { public: - LLIMToastNotifyPanel(LLNotificationPtr& pNotification, const LLUUID& session_id, const LLRect& rect = LLRect::null); + LLIMToastNotifyPanel(LLNotificationPtr& pNotification, const LLUUID& session_id, const LLRect& rect = LLRect::null, bool show_images = true); ~LLIMToastNotifyPanel(); diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 6f38b0cd65..cf022a1b5f 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -1479,6 +1479,43 @@ static void give_inventory_cb(const LLSD& notification, const LLSD& response) } } +static void show_item_sharing_confirmation(const std::string name, + LLViewerInventoryItem* inv_item, + const LLSD& dest, + const LLUUID& dest_agent, + const LLUUID& session_id = LLUUID::null) +{ + if (!inv_item) + { + llassert(NULL != inv_item); + return; + } + + LLSD substitutions; + substitutions["RESIDENTS"] = name; + substitutions["ITEMS"] = inv_item->getName(); + LLSD payload; + payload["agent_id"] = dest_agent; + payload["item_id"] = inv_item->getUUID(); + payload["session_id"] = session_id; + payload["d&d_dest"] = dest.asString(); + LLNotificationsUtil::add("ShareItemsConfirmation", substitutions, payload, &give_inventory_cb); +} + +static void get_name_cb(const LLUUID& id, + const std::string& first_name, + const std::string& last_name, + LLViewerInventoryItem* inv_item, + const LLSD& dest, + const LLUUID& dest_agent) +{ + show_item_sharing_confirmation(first_name + " " + last_name, + inv_item, + dest, + id, + LLUUID::null); +} + // function used as drag-and-drop handler for simple agent give inventory requests //static bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_id, BOOL drop, @@ -1512,20 +1549,28 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_ if(drop) { LLIMModel::LLIMSession * session = LLIMModel::instance().findIMSession(session_id); + + // If no IM session found get the destination agent's name by id. if (NULL == session) { - llassert(NULL != session); - return false; + std::string fullname; + + // If destination agent's name is found in cash proceed to showing the confirmation dialog. + // Otherwise set up a callback to show the dialog when the name arrives. + if (gCacheName->getFullName(dest_agent, fullname)) + { + show_item_sharing_confirmation(fullname, inv_item, dest, dest_agent, LLUUID::null); + } + else + { + gCacheName->get(dest_agent, FALSE, boost::bind(&get_name_cb, _1, _2, _3, inv_item, dest, dest_agent)); + } + + return true; } - LLSD substitutions; - substitutions["RESIDENTS"] = session->mName; - substitutions["ITEMS"] = inv_item->getName(); - LLSD payload; - payload["agent_id"] = dest_agent; - payload["item_id"] = inv_item->getUUID(); - payload["session_id"] = session_id; - payload["d&d_dest"] = dest.asString(); - LLNotificationsUtil::add("ShareItemsConfirmation", substitutions, payload, &give_inventory_cb); + + // If an IM session with destination agent is found item offer will be logged in this session. + show_item_sharing_confirmation(session->mName, inv_item, dest, dest_agent, session_id); } } else diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index d8be70e546..864de018e0 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -619,6 +619,25 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask) return TRUE; } } + else if (gSavedSettings.getBOOL("DoubleClickTeleport")) + { + LLViewerObject* objp = mPick.getObject(); + LLViewerObject* parentp = objp ? objp->getRootEdit() : NULL; + + bool is_in_world = mPick.mObjectID.notNull() && objp && !objp->isHUDAttachment(); + bool is_land = mPick.mPickType == LLPickInfo::PICK_LAND; + bool pos_non_zero = !mPick.mPosGlobal.isExactlyZero(); + bool has_touch_handler = (objp && objp->flagHandleTouch()) || (parentp && parentp->flagHandleTouch()); + bool has_click_action = final_click_action(objp); + + if (pos_non_zero && (is_land || (is_in_world && !has_touch_handler && !has_click_action))) + { + LLVector3d pos = mPick.mPosGlobal; + pos.mdV[VZ] += gAgentAvatarp->getPelvisToFoot(); + gAgent.teleportViaLocationLookAt(pos); + return TRUE; + } + } return FALSE; } diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp new file mode 100644 index 0000000000..050e34ade9 --- /dev/null +++ b/indra/newview/lltranslate.cpp @@ -0,0 +1,123 @@ +/** +* @file lltranslate.cpp +* @brief Functions for translating text via Google Translate. +* +* $LicenseInfo:firstyear=2009&license=viewergpl$ +* +* Copyright (c) 2009-2010, Linden Research, Inc. +* +* Second Life Viewer Source Code +* The source code in this file ("Source Code") is provided by Linden Lab +* to you under the terms of the GNU General Public License, version 2.0 +* ("GPL"), unless you have obtained a separate licensing agreement +* ("Other License"), formally executed by you and Linden Lab. Terms of +* the GPL can be found in doc/GPL-license.txt in this distribution, or +* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 +* +* There are special exceptions to the terms and conditions of the GPL as +* it is applied to this Source Code. View the full text of the exception +* in the file doc/FLOSS-exception.txt in this software distribution, or +* online at +* http://secondlifegrid.net/programs/open_source/licensing/flossexception +* +* By copying, modifying or distributing this software, you acknowledge +* that you have read and understood your obligations described above, +* and agree to abide by those obligations. +* +* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +* COMPLETENESS OR PERFORMANCE. +* $/LicenseInfo$ +*/ + +#include "llviewerprecompiledheaders.h" + +#include "lltranslate.h" + +#include "llbufferstream.h" +#include "llui.h" +#include "llversionviewer.h" +#include "llviewercontrol.h" + +#include "jsoncpp/reader.h" + +// These two are concatenated with the language specifiers to form a complete Google Translate URL +const char* LLTranslate::m_GoogleURL = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q="; +const char* LLTranslate::m_GoogleLangSpec = "&langpair="; +float LLTranslate::m_GoogleTimeout = 5; + +LLSD LLTranslate::m_Header; +// These constants are for the GET header. +const char* LLTranslate::m_AcceptHeader = "Accept"; +const char* LLTranslate::m_AcceptType = "text/plain"; +const char* LLTranslate::m_AgentHeader = "User-Agent"; + +// These constants are in the JSON returned from Google +const char* LLTranslate::m_GoogleData = "responseData"; +const char* LLTranslate::m_GoogleTranslation = "translatedText"; +const char* LLTranslate::m_GoogleLanguage = "detectedSourceLanguage"; + +//static +void LLTranslate::translateMessage(LLHTTPClient::ResponderPtr &result, const std::string &from_lang, const std::string &to_lang, const std::string &mesg) +{ + std::string url; + getTranslateUrl(url, from_lang, to_lang, mesg); + + std::string user_agent = llformat("%s %d.%d.%d (%d)", + LL_CHANNEL, + LL_VERSION_MAJOR, + LL_VERSION_MINOR, + LL_VERSION_PATCH, + LL_VERSION_BUILD ); + + if (!m_Header.size()) + { + m_Header.insert(m_AcceptHeader, LLSD(m_AcceptType)); + m_Header.insert(m_AgentHeader, LLSD(user_agent)); + } + + LLHTTPClient::get(url, result, m_Header, m_GoogleTimeout); +} + +//static +void LLTranslate::getTranslateUrl(std::string &translate_url, const std::string &from_lang, const std::string &to_lang, const std::string &mesg) +{ + std::string escaped_mesg = curl_escape(mesg.c_str(), mesg.size()); + + translate_url = m_GoogleURL + + escaped_mesg + m_GoogleLangSpec + + from_lang // 'from' language; empty string for auto + + "%7C" // | + + to_lang; // 'to' language +} + +//static +bool LLTranslate::parseGoogleTranslate(const std::string& body, std::string &translation, std::string &detected_language) +{ + Json::Value root; + Json::Reader reader; + + bool success = reader.parse(body, root); + if (!success) + { + LL_WARNS("Translate") << "Non valid response from Google Translate API: '" << reader.getFormatedErrorMessages() << "'" << LL_ENDL; + return false; + } + + translation = root[m_GoogleData].get(m_GoogleTranslation, "").asString(); + detected_language = root[m_GoogleData].get(m_GoogleLanguage, "").asString(); + return true; +} + +//static +std::string LLTranslate::getTranslateLanguage() +{ + std::string language = gSavedSettings.getString("TranslateLanguage"); + if (language.empty() || language == "default") + { + language = LLUI::getLanguage(); + } + language = language.substr(0,2); + return language; +} + diff --git a/indra/newview/lltranslate.h b/indra/newview/lltranslate.h new file mode 100644 index 0000000000..0786dc0ca3 --- /dev/null +++ b/indra/newview/lltranslate.h @@ -0,0 +1,124 @@ +/** +* @file lltranslate.h +* @brief Human language translation class and JSON response receiver. +* +* $LicenseInfo:firstyear=2009&license=viewergpl$ +* +* Copyright (c) 2009-2010, Linden Research, Inc. +* +* Second Life Viewer Source Code +* The source code in this file ("Source Code") is provided by Linden Lab +* to you under the terms of the GNU General Public License, version 2.0 +* ("GPL"), unless you have obtained a separate licensing agreement +* ("Other License"), formally executed by you and Linden Lab. Terms of +* the GPL can be found in doc/GPL-license.txt in this distribution, or +* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 +* +* There are special exceptions to the terms and conditions of the GPL as +* it is applied to this Source Code. View the full text of the exception +* in the file doc/FLOSS-exception.txt in this software distribution, or +* online at +* http://secondlifegrid.net/programs/open_source/licensing/flossexception +* +* By copying, modifying or distributing this software, you acknowledge +* that you have read and understood your obligations described above, +* and agree to abide by those obligations. +* +* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +* COMPLETENESS OR PERFORMANCE. +* $/LicenseInfo$ +*/ + +#ifndef LL_LLTRANSLATE_H +#define LL_LLTRANSLATE_H + +#include "llhttpclient.h" +#include "llbufferstream.h" + +class LLTranslate +{ + LOG_CLASS(LLTranslate); +public : + class TranslationReceiver: public LLHTTPClient::Responder + { + protected: + TranslationReceiver(const std::string &from_lang, const std::string &to_lang) + : m_fromLang(from_lang), + m_toLang(to_lang) + { + } + + virtual void handleResponse(const std::string &translation, const std::string &recognized_lang) {}; + virtual void handleFailure() {}; + + public: + ~TranslationReceiver() + { + } + + virtual void completedRaw( U32 status, + const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer) + { + if (200 <= status && status < 300) + { + LLBufferStream istr(channels, buffer.get()); + std::stringstream strstrm; + strstrm << istr.rdbuf(); + + const std::string result = strstrm.str(); + std::string translation; + std::string detected_language; + + if (!parseGoogleTranslate(result, translation, detected_language)) + { + handleFailure(); + return; + } + + // Fix up the response + LLStringUtil::replaceString(translation, "<", "<"); + LLStringUtil::replaceString(translation, ">",">"); + LLStringUtil::replaceString(translation, ""","\""); + LLStringUtil::replaceString(translation, "'","'"); + LLStringUtil::replaceString(translation, "&","&"); + LLStringUtil::replaceString(translation, "'","'"); + + handleResponse(translation, detected_language); + } + else + { + LL_WARNS("Translate") << "HTTP request for Google Translate failed with status " << status << ", reason: " << reason << LL_ENDL; + handleFailure(); + } + } + + protected: + const std::string m_toLang; + const std::string m_fromLang; + }; + + static void translateMessage(LLHTTPClient::ResponderPtr &result, const std::string &from_lang, const std::string &to_lang, const std::string &mesg); + static float m_GoogleTimeout; + static std::string getTranslateLanguage(); + +private: + static void getTranslateUrl(std::string &translate_url, const std::string &from_lang, const std::string &to_lang, const std::string &text); + static bool parseGoogleTranslate(const std::string& body, std::string &translation, std::string &detected_language); + + static LLSD m_Header; + static const char* m_GoogleURL; + static const char* m_GoogleLangSpec; + static const char* m_AcceptHeader; + static const char* m_AcceptType; + static const char* m_AgentHeader; + static const char* m_UserAgent; + + static const char* m_GoogleData; + static const char* m_GoogleTranslation; + static const char* m_GoogleLanguage; +}; + +#endif diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp index 1094f030bf..cc796fe1ed 100644 --- a/indra/newview/llvieweraudio.cpp +++ b/indra/newview/llvieweraudio.cpp @@ -120,10 +120,6 @@ void audio_update_volume(bool force_update) gAudiop->setDopplerFactor(gSavedSettings.getF32("AudioLevelDoppler")); gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff")); -#ifdef kAUDIO_ENABLE_WIND - gAudiop->enableWind(!mute_audio); -#endif - gAudiop->setMuted(mute_audio); if (force_update) diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index b277efc85a..369e494709 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -91,6 +91,7 @@ LLPointer<LLViewerTexture> gDisconnectedImagep = NULL; // used to toggle renderer back on after teleport const F32 TELEPORT_RENDER_DELAY = 20.f; // Max time a teleport is allowed to take before we raise the curtain const F32 TELEPORT_ARRIVAL_DELAY = 2.f; // Time to preload the world before raising the curtain after we've actually already arrived. +const F32 TELEPORT_LOCAL_DELAY = 1.0f; // Delay to prevent teleports after starting an in-sim teleport. BOOL gTeleportDisplay = FALSE; LLFrameTimer gTeleportDisplayTimer; LLFrameTimer gTeleportArrivalTimer; @@ -412,6 +413,18 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) } break; + case LLAgent::TELEPORT_LOCAL: + // Short delay when teleporting in the same sim (progress screen active but not shown - did not + // fall-through from TELEPORT_START) + { + if( gTeleportDisplayTimer.getElapsedTimeF32() > TELEPORT_LOCAL_DELAY ) + { + //LLFirstUse::useTeleport(); + gAgent.setTeleportState( LLAgent::TELEPORT_NONE ); + } + } + break; + case LLAgent::TELEPORT_NONE: // No teleport in progress gViewerWindow->setShowProgress(FALSE); diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index eface0f61d..28f13b82d9 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -71,7 +71,6 @@ #include "llimfloater.h" #include "llfloaterinspect.h" #include "llfloaterinventory.h" -#include "llfloaterimportcollada.h" #include "llfloaterjoystick.h" #include "llfloaterlagmeter.h" #include "llfloaterland.h" @@ -94,6 +93,7 @@ #include "llfloaterscriptlimits.h" #include "llfloatersellland.h" #include "llfloatersettingsdebug.h" +#include "llfloatersidetraytab.h" #include "llfloatersnapshot.h" #include "llfloatertelehub.h" #include "llfloatertestinspectors.h" @@ -102,7 +102,6 @@ #include "llfloatertos.h" #include "llfloatertopobjects.h" #include "llfloateruipreview.h" -#include "llfloatervoicedevicesettings.h" #include "llfloatervoiceeffect.h" #include "llfloaterwater.h" #include "llfloaterwhitelistentry.h" @@ -176,7 +175,6 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("hud", "floater_hud.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHUD>); LLFloaterReg::add("impanel", "floater_im_session.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIMFloater>); - LLFloaterReg::add("import_collada", "floater_import_collada.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterImportCollada>); LLFloaterReg::add("im_container", "floater_im_container.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIMFloaterContainer>); LLFloaterReg::add("im_well_window", "floater_sys_well.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIMWellWindow>); LLFloaterReg::add("incoming_call", "floater_incoming_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLIncomingCallDialog>); @@ -212,7 +210,6 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("prefs_hardware_settings", "floater_hardware_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHardwareSettings>); LLFloaterReg::add("perm_prefs", "floater_perm_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPerms>); LLFloaterReg::add("pref_joystick", "floater_joystick.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterJoystick>); - LLFloaterReg::add("pref_voicedevicesettings", "floater_device_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterVoiceDeviceSettings>); LLFloaterReg::add("preview_anim", "floater_preview_animation.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewAnim>, "preview"); LLFloaterReg::add("preview_gesture", "floater_preview_gesture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewGesture>, "preview"); LLFloaterReg::add("preview_notecard", "floater_preview_notecard.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewNotecard>, "preview"); @@ -246,6 +243,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("script_limits", "floater_script_limits.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterScriptLimits>); LLFloaterReg::add("sell_land", "floater_sell_land.xml", &LLFloaterSellLand::buildFloater); LLFloaterReg::add("settings_debug", "floater_settings_debug.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSettingsDebug>); + LLFloaterReg::add("side_bar_tab", "floater_side_bar_tab.xml", &LLFloaterReg::build<LLFloaterSideTrayTab>); LLFloaterReg::add("stats", "floater_stats.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloater>); LLFloaterReg::add("start_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRunQueue>); LLFloaterReg::add("stop_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotRunQueue>); diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp index 3105a6ec43..e5f504bfe7 100644 --- a/indra/newview/llviewerfoldertype.cpp +++ b/indra/newview/llviewerfoldertype.cpp @@ -132,6 +132,9 @@ LLViewerFolderDictionary::LLViewerFolderDictionary() addEntry(LLFolderType::FT_CURRENT_OUTFIT, new ViewerFolderEntry("Current Outfit", "Inv_SysOpen", "Inv_SysClosed", TRUE)); addEntry(LLFolderType::FT_OUTFIT, new ViewerFolderEntry("New Outfit", "Inv_LookFolderOpen", "Inv_LookFolderClosed", TRUE)); addEntry(LLFolderType::FT_MY_OUTFITS, new ViewerFolderEntry("My Outfits", "Inv_SysOpen", "Inv_SysClosed", TRUE)); + addEntry(LLFolderType::FT_MESH, new ViewerFolderEntry("Meshes", "Inv_SysOpen", "Inv_SysClosed", FALSE)); + + addEntry(LLFolderType::FT_INBOX, new ViewerFolderEntry("Inbox", "Inv_SysOpen", "Inv_SysClosed", FALSE)); addEntry(LLFolderType::FT_NONE, new ViewerFolderEntry("New Folder", "Inv_FolderOpen", "Inv_FolderClosed", FALSE, "default")); diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 776635c475..85c7521492 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -51,6 +51,7 @@ #include "llvoavatarself.h" #include "llviewerregion.h" #include "llwebsharing.h" // For LLWebSharing::setOpenIDCookie(), *TODO: find a better way to do this! +#include "llfilepicker.h" #include "llevent.h" // LLSimpleListener #include "llnotificationsutil.h" @@ -60,6 +61,8 @@ //#include "llfirstuse.h" #include "llwindow.h" +#include "llfloatermediabrowser.h" // for handling window close requests and geometry change requests in media browser windows. + #include <boost/bind.hpp> // for SkinFolder listener #include <boost/signals2.hpp> @@ -1365,6 +1368,38 @@ void LLViewerMedia::openIDCookieResponse(const std::string &cookie) setOpenIDCookie(); } +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::proxyWindowOpened(const std::string &target, const std::string &uuid) +{ + if(uuid.empty()) + return; + + for (impl_list::iterator iter = sViewerMediaImplList.begin(); iter != sViewerMediaImplList.end(); iter++) + { + if((*iter)->mMediaSource && (*iter)->mMediaSource->pluginSupportsMediaBrowser()) + { + (*iter)->mMediaSource->proxyWindowOpened(target, uuid); + } + } +} + +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::proxyWindowClosed(const std::string &uuid) +{ + if(uuid.empty()) + return; + + for (impl_list::iterator iter = sViewerMediaImplList.begin(); iter != sViewerMediaImplList.end(); iter++) + { + if((*iter)->mMediaSource && (*iter)->mMediaSource->pluginSupportsMediaBrowser()) + { + (*iter)->mMediaSource->proxyWindowClosed(uuid); + } + } +} + bool LLViewerMedia::hasInWorldMedia() { if (sInWorldMediaDisabled) return false; @@ -1598,7 +1633,7 @@ void LLViewerMediaImpl::setMediaType(const std::string& media_type) ////////////////////////////////////////////////////////////////////////////////////////// /*static*/ -LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_type, LLPluginClassMediaOwner *owner /* may be NULL */, S32 default_width, S32 default_height) +LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_type, LLPluginClassMediaOwner *owner /* may be NULL */, S32 default_width, S32 default_height, const std::string target) { std::string plugin_basename = LLMIMETypes::implType(media_type); @@ -1654,7 +1689,9 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_ // collect 'javascript enabled' setting from prefs and send to embedded browser bool javascript_enabled = gSavedSettings.getBOOL( "BrowserJavascriptEnabled" ); media_source->setJavascriptEnabled( javascript_enabled ); - + + media_source->setTarget(target); + if (media_source->init(launcher_name, plugin_name, gSavedSettings.getBOOL("PluginAttachDebuggerToPlugins"))) { return media_source; @@ -1705,7 +1742,7 @@ bool LLViewerMediaImpl::initializePlugin(const std::string& media_type) // Save the MIME type that really caused the plugin to load mCurrentMimeType = mMimeType; - LLPluginClassMedia* media_source = newSourceFromMediaType(mMimeType, this, mMediaWidth, mMediaHeight); + LLPluginClassMedia* media_source = newSourceFromMediaType(mMimeType, this, mMediaWidth, mMediaHeight, mTarget); if (media_source) { @@ -2805,6 +2842,7 @@ bool LLViewerMediaImpl::isPlayable() const ////////////////////////////////////////////////////////////////////////////////////////// void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginClassMediaOwner::EMediaEvent event) { + bool pass_through = true; switch(event) { case MEDIA_EVENT_CLICK_LINK_NOFOLLOW: @@ -2818,28 +2856,6 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla case MEDIA_EVENT_CLICK_LINK_HREF: { LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLICK_LINK_HREF, target is \"" << plugin->getClickTarget() << "\", uri is " << plugin->getClickURL() << LL_ENDL; - // retrieve the event parameters - std::string url = plugin->getClickURL(); - U32 target_type = plugin->getClickTargetType(); - - switch (target_type) - { - case LLPluginClassMedia::TARGET_EXTERNAL: - // force url to external browser - LLWeb::loadURLExternal(url); - break; - case LLPluginClassMedia::TARGET_BLANK: - // open in SL media browser or external browser based on user pref - LLWeb::loadURL(url); - break; - case LLPluginClassMedia::TARGET_NONE: - // ignore this click and let media plugin handle it - break; - case LLPluginClassMedia::TARGET_OTHER: - LL_WARNS("LinkTarget") << "Unsupported link target type" << LL_ENDL; - break; - default: break; - } }; break; case MEDIA_EVENT_PLUGIN_FAILED_LAUNCH: @@ -2971,13 +2987,70 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla } break; + case LLViewerMediaObserver::MEDIA_EVENT_PICK_FILE_REQUEST: + { + // Display a file picker + std::string response; + + LLFilePicker& picker = LLFilePicker::instance(); + if (!picker.getOpenFile(LLFilePicker::FFLOAD_ALL)) + { + // The user didn't pick a file -- the empty response string will indicate this. + } + + response = picker.getFirstFile(); + + plugin->sendPickFileResponse(response); + } + break; + case LLViewerMediaObserver::MEDIA_EVENT_CLOSE_REQUEST: + { + std::string uuid = plugin->getClickUUID(); + + llinfos << "MEDIA_EVENT_CLOSE_REQUEST for uuid " << uuid << llendl; + + if(uuid.empty()) + { + // This close request is directed at this instance, let it fall through. + } + else + { + // This close request is directed at another instance + pass_through = false; + LLFloaterMediaBrowser::closeRequest(uuid); + } + } + break; + + case LLViewerMediaObserver::MEDIA_EVENT_GEOMETRY_CHANGE: + { + std::string uuid = plugin->getClickUUID(); + + llinfos << "MEDIA_EVENT_GEOMETRY_CHANGE for uuid " << uuid << llendl; + + if(uuid.empty()) + { + // This geometry change request is directed at this instance, let it fall through. + } + else + { + // This request is directed at another instance + pass_through = false; + LLFloaterMediaBrowser::geometryChanged(uuid, plugin->getGeometryX(), plugin->getGeometryY(), plugin->getGeometryWidth(), plugin->getGeometryHeight()); + } + } + break; + default: break; } - // Just chain the event to observers. - emitEvent(plugin, event); + if(pass_through) + { + // Just chain the event to observers. + emitEvent(plugin, event); + } } //////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index e0cc26fa29..4025a4484f 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -152,6 +152,9 @@ public: static void openIDSetup(const std::string &openid_url, const std::string &openid_token); static void openIDCookieResponse(const std::string &cookie); + static void proxyWindowOpened(const std::string &target, const std::string &uuid); + static void proxyWindowClosed(const std::string &uuid); + private: static void setOpenIDCookie(); static void onTeleportFinished(); @@ -271,8 +274,10 @@ public: ECursorType getLastSetCursor() { return mLastSetCursor; } + void setTarget(const std::string& target) { mTarget = target; } + // utility function to create a ready-to-use media instance from a desired media type. - static LLPluginClassMedia* newSourceFromMediaType(std::string media_type, LLPluginClassMediaOwner *owner /* may be NULL */, S32 default_width, S32 default_height); + static LLPluginClassMedia* newSourceFromMediaType(std::string media_type, LLPluginClassMediaOwner *owner /* may be NULL */, S32 default_width, S32 default_height, const std::string target = LLStringUtil::null); // Internally set our desired browser user agent string, including // the Second Life version and skin name. Used because we can @@ -438,6 +443,7 @@ private: bool mNavigateSuspended; bool mNavigateSuspendedDeferred; bool mTrustedBrowser; + std::string mTarget; private: BOOL mIsUpdated ; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 12332a7cbe..b32834ad54 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -68,6 +68,7 @@ #include "lllandmarkactions.h" #include "llgroupmgr.h" #include "lltooltip.h" +#include "llhints.h" #include "llhudeffecttrail.h" #include "llhudmanager.h" #include "llimview.h" @@ -6586,6 +6587,16 @@ class LLToggleControl : public view_listener_t std::string control_name = userdata.asString(); BOOL checked = gSavedSettings.getBOOL( control_name ); gSavedSettings.setBOOL( control_name, !checked ); + + // Doubleclick actions - there can be only one + if ((control_name == "DoubleClickAutoPilot") && !checked) + { + gSavedSettings.setBOOL( "DoubleClickTeleport", FALSE ); + } + else if ((control_name == "DoubleClickTeleport") && !checked) + { + gSavedSettings.setBOOL( "DoubleClickAutoPilot", FALSE ); + } return true; } }; @@ -7275,7 +7286,7 @@ void handle_load_from_xml(void*) { std::string filename = picker.getFirstFile(); LLFloater* floater = new LLFloater(LLSD()); - LLUICtrlFactory::getInstance()->buildFloater(floater, filename, NULL); + floater->buildFromFile(filename); } } @@ -7753,6 +7764,18 @@ public: } }; +class LLToggleUIHints : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + bool ui_hints_enabled = gSavedSettings.getBOOL("EnableUIHints"); + // toggle + ui_hints_enabled = !ui_hints_enabled; + gSavedSettings.setBOOL("EnableUIHints", ui_hints_enabled); + return true; + } +}; + void LLUploadCostCalculator::calculateCost() { S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); @@ -8233,4 +8256,5 @@ void initialize_menus() view_listener_t::addMenu(new LLEditableSelected(), "EditableSelected"); view_listener_t::addMenu(new LLEditableSelectedMono(), "EditableSelectedMono"); + view_listener_t::addMenu(new LLToggleUIHints(), "ToggleUIHints"); } diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 0460ac0988..91781f27a4 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -40,7 +40,6 @@ #include "llfilepicker.h" #include "llfloaterreg.h" #include "llbuycurrencyhtml.h" -#include "llfloaterimportcollada.h" #include "llfloatermodelpreview.h" #include "llfloatersnapshot.h" #include "llimage.h" @@ -67,7 +66,6 @@ #include "lluploaddialog.h" #include "lltrans.h" #include "llfloaterbuycurrency.h" -#include "llfloaterimportcollada.h" // linden libraries #include "llassetuploadresponders.h" @@ -350,19 +348,6 @@ class LLFileUploadImage : public view_listener_t } }; -class LLFileUploadScene : public view_listener_t -{ - bool handleEvent(const LLSD& userdata) - { - std::string filename = upload_pick((void *)LLFilePicker::FFLOAD_COLLADA); - if (!filename.empty()) - { - LLImportCollada::getInstance()->importFile(filename); - } - return TRUE; - } -}; - class LLFileUploadModel : public view_listener_t { bool handleEvent(const LLSD& userdata) @@ -1402,7 +1387,6 @@ void init_menu_file() view_listener_t::addCommit(new LLFileUploadSound(), "File.UploadSound"); view_listener_t::addCommit(new LLFileUploadAnim(), "File.UploadAnim"); view_listener_t::addCommit(new LLFileUploadModel(), "File.UploadModel"); - view_listener_t::addCommit(new LLFileUploadScene(), "File.UploadScene"); view_listener_t::addCommit(new LLFileUploadBulk(), "File.UploadBulk"); view_listener_t::addCommit(new LLFileCloseWindow(), "File.CloseWindow"); view_listener_t::addCommit(new LLFileCloseAllWindows(), "File.CloseAllWindows"); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 5170858fe4..61f073058d 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -56,6 +56,7 @@ #include "llagentcamera.h" #include "llcallingcard.h" #include "llbuycurrencyhtml.h" +#include "llfirstuse.h" #include "llfloaterbuyland.h" #include "llfloaterland.h" #include "llfloaterregioninfo.h" @@ -83,10 +84,12 @@ #include "llimview.h" #include "llspeakers.h" #include "lltrans.h" +#include "lltranslate.h" #include "llviewerfoldertype.h" #include "lluri.h" #include "llviewergenericmessage.h" #include "llviewermenu.h" +#include "llviewerjoystick.h" #include "llviewerobjectlist.h" #include "llviewerparcelmgr.h" #include "llviewerstats.h" @@ -936,6 +939,15 @@ protected: //one global instance to bind them LLOpenTaskOffer* gNewInventoryObserver=NULL; +class LLNewInventoryHintObserver : public LLInventoryAddedObserver +{ +protected: + /*virtual*/ void done() + { + LLFirstUse::newInventory(); + } +}; + void start_new_inventory_observer() { if (!gNewInventoryObserver) //task offer observer @@ -951,6 +963,8 @@ void start_new_inventory_observer() gInventoryMoveObserver = new LLViewerInventoryMoveFromWorldObserver; gInventory.addObserver(gInventoryMoveObserver); } + + gInventory.addObserver(new LLNewInventoryHintObserver()); } class LLDiscardAgentOffer : public LLInventoryFetchItemsObserver @@ -1877,6 +1891,8 @@ void inventory_offer_handler(LLOfferInfo* info) LLPostponedNotification::add<LLPostponedOfferNotification>(p, info->mFromID, false); } } + + LLFirstUse::newInventory(); } bool lure_callback(const LLSD& notification, const LLSD& response) @@ -2915,6 +2931,50 @@ void process_decline_callingcard(LLMessageSystem* msg, void**) LLNotificationsUtil::add("CallingCardDeclined"); } +class ChatTranslationReceiver : public LLTranslate::TranslationReceiver +{ +public : + ChatTranslationReceiver(const std::string &from_lang, const std::string &to_lang, const std::string &mesg, + const LLChat &chat, const LLSD &toast_args) + : LLTranslate::TranslationReceiver(from_lang, to_lang), + m_chat(chat), + m_toastArgs(toast_args), + m_origMesg(mesg) + { + } + + static boost::intrusive_ptr<ChatTranslationReceiver> build(const std::string &from_lang, const std::string &to_lang, const std::string &mesg, const LLChat &chat, const LLSD &toast_args) + { + return boost::intrusive_ptr<ChatTranslationReceiver>(new ChatTranslationReceiver(from_lang, to_lang, mesg, chat, toast_args)); + } + +protected: + void handleResponse(const std::string &translation, const std::string &detected_language) + { + // filter out non-interesting responeses + if ( !translation.empty() + && (m_toLang != detected_language) + && (LLStringUtil::compareInsensitive(translation, m_origMesg) != 0) ) + { + m_chat.mText += " (" + translation + ")"; + } + + LLNotificationsUI::LLNotificationManager::instance().onChat(m_chat, m_toastArgs); + } + + void handleFailure() + { + LLTranslate::TranslationReceiver::handleFailure(); + m_chat.mText += " (?)"; + + LLNotificationsUI::LLNotificationManager::instance().onChat(m_chat, m_toastArgs); + } + +private: + LLChat m_chat; + std::string m_origMesg; + LLSD m_toastArgs; +}; void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) { @@ -2970,7 +3030,8 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) // Make swirly things only for talking objects. (not script debug messages, though) if (chat.mSourceType == CHAT_SOURCE_OBJECT - && chat.mChatType != CHAT_TYPE_DEBUG_MSG) + && chat.mChatType != CHAT_TYPE_DEBUG_MSG + && gSavedSettings.getBOOL("EffectScriptChatParticles") ) { LLPointer<LLViewerPartSourceChat> psc = new LLViewerPartSourceChat(chatter->getPositionAgent()); psc->setSourceObject(chatter); @@ -3118,7 +3179,22 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) args["type"] = LLNotificationsUI::NT_NEARBYCHAT; chat.mOwnerID = owner_id; - LLNotificationsUI::LLNotificationManager::instance().onChat(chat, args); + if (gSavedSettings.getBOOL("TranslateChat") && chat.mSourceType != CHAT_SOURCE_SYSTEM) + { + if (chat.mChatStyle == CHAT_STYLE_IRC) + { + mesg = mesg.substr(4, std::string::npos); + } + const std::string from_lang = ""; // leave empty to trigger autodetect + const std::string to_lang = LLTranslate::getTranslateLanguage(); + + LLHTTPClient::ResponderPtr result = ChatTranslationReceiver::build(from_lang, to_lang, mesg, chat, args); + LLTranslate::translateMessage(result, from_lang, to_lang, mesg); + } + else + { + LLNotificationsUI::LLNotificationManager::instance().onChat(chat, args); + } } } @@ -3134,6 +3210,8 @@ void process_teleport_start(LLMessageSystem *msg, void**) U32 teleport_flags = 0x0; msg->getU32("Info", "TeleportFlags", teleport_flags); + LL_DEBUGS("Messaging") << "Got TeleportStart with TeleportFlags=" << teleport_flags << ". gTeleportDisplay: " << gTeleportDisplay << ", gAgent.mTeleportState: " << gAgent.getTeleportState() << LL_ENDL; + if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL) { gViewerWindow->setProgressCancelButtonVisible(FALSE); @@ -3152,6 +3230,7 @@ void process_teleport_start(LLMessageSystem *msg, void**) gAgent.setTeleportState( LLAgent::TELEPORT_START ); make_ui_sound("UISndTeleportOut"); + LL_INFOS("Messaging") << "Teleport initiated by remote TeleportStart message with TeleportFlags: " << teleport_flags << LL_ENDL; // Don't call LLFirstUse::useTeleport here because this could be // due to being killed, which would send you home, not to a Telehub } @@ -3493,6 +3572,12 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) if( is_teleport ) { + if (gAgent.getTeleportKeepsLookAt()) + { + // *NOTE: the LookAt data we get from the sim here doesn't + // seem to be useful, so get it from the camera instead + look_at = LLViewerCamera::getInstance()->getAtAxis(); + } // Force the camera back onto the agent, don't animate. gAgentCamera.setFocusOnAvatar(TRUE, FALSE); gAgentCamera.slamLookAt(look_at); @@ -3539,7 +3624,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) { LLTracker::stopTracking(NULL); } - else if ( is_teleport ) + else if ( is_teleport && !gAgent.getTeleportKeepsLookAt() ) { //look at the beacon LLVector3 global_agent_pos = agent_pos; @@ -4148,14 +4233,12 @@ void process_preload_sound(LLMessageSystem *msg, void **user_data) // Don't play sounds from a region with maturity above current agent maturity LLVector3d pos_global = objectp->getPositionGlobal(); - if( !gAgent.canAccessMaturityAtGlobal( pos_global ) ) + if (gAgent.canAccessMaturityAtGlobal(pos_global)) { - return; - } - // Add audioData starts a transfer internally. sourcep->addAudioData(datap, FALSE); } +} void process_attached_sound(LLMessageSystem *msg, void **user_data) { @@ -5811,7 +5894,18 @@ void process_teleport_local(LLMessageSystem *msg,void**) if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE ) { - gAgent.setTeleportState( LLAgent::TELEPORT_NONE ); + if( gAgent.getTeleportState() == LLAgent::TELEPORT_LOCAL ) + { + // To prevent TeleportStart messages re-activating the progress screen right + // after tp, keep the teleport state and let progress screen clear it after a short delay + // (progress screen is active but not visible) *TODO: remove when SVC-5290 is fixed + gTeleportDisplayTimer.reset(); + gTeleportDisplay = TRUE; + } + else + { + gAgent.setTeleportState( LLAgent::TELEPORT_NONE ); + } } // Sim tells us whether the new position is off the ground @@ -5827,8 +5921,10 @@ void process_teleport_local(LLMessageSystem *msg,void**) gAgent.setPositionAgent(pos); gAgentCamera.slamLookAt(look_at); - // likewise make sure the camera is behind the avatar - gAgentCamera.resetView(TRUE, TRUE); + if ( !(gAgent.getTeleportKeepsLookAt() && LLViewerJoystick::getInstance()->getOverrideCamera()) ) + { + gAgentCamera.resetView(TRUE, TRUE); + } // send camera update to new region gAgentCamera.updateCamera(); diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp index 7f7c245717..b91e407c6d 100644 --- a/indra/newview/llviewernetwork.cpp +++ b/indra/newview/llviewernetwork.cpp @@ -304,7 +304,12 @@ void LLGridManager::initialize(const std::string& grid_file) addGrid(grid); } - gSavedSettings.getControl("CurrentGrid")->getSignal()->connect(boost::bind(&LLGridManager::updateIsInProductionGrid, this)); + LLControlVariablePtr grid_control = gSavedSettings.getControl("CurrentGrid"); + if (grid_control.notNull()) + { + grid_control->getSignal()->connect(boost::bind(&LLGridManager::updateIsInProductionGrid, this)); + } + // since above only triggers on changes, trigger the callback manually to initialize state updateIsInProductionGrid(); @@ -499,7 +504,8 @@ void LLGridManager::setGridChoice(const std::string& grid) addGrid(grid_data); } mGrid = grid; - gSavedSettings.setString("CurrentGrid", grid); + gSavedSettings.setString("CurrentGrid", grid); + updateIsInProductionGrid(); } std::string LLGridManager::getGridByLabel( const std::string &grid_label, bool case_sensitive) diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 4c1a1958e8..9b3f81e193 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -1874,7 +1874,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys, if (cdp) { F32 ping_delay = 0.5f * mTimeDilation * ( ((F32)cdp->getPingDelay()) * 0.001f + gFrameDTClamped); - LLVector3 diff = getVelocity() * (0.5f*mTimeDilation*(gFrameDTClamped + ((F32)ping_delay)*0.001f)); + LLVector3 diff = getVelocity() * ping_delay; new_pos_parent += diff; } else @@ -2942,6 +2942,16 @@ F32 LLViewerObject::getObjectCost() return mObjectCost; } +F32 LLViewerObject::getStreamingCost() +{ + return 0.f; +} + +U32 LLViewerObject::getTriangleCount() +{ + return 0; +} + F32 LLViewerObject::getLinksetCost() { if (mCostStale) @@ -4548,6 +4558,13 @@ void LLViewerObject::setAttachedSound(const LLUUID &audio_uuid, const LLUUID& ow mAudioSourcep = NULL; } + if (mAudioSourcep && mAudioSourcep->isMuted() && + mAudioSourcep->getCurrentData() && mAudioSourcep->getCurrentData()->getID() == audio_uuid) + { + //llinfos << "Already having this sound as muted sound, ignoring" << llendl; + return; + } + getAudioSource(owner_id); if (mAudioSourcep) diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index aec920b631..094f01ab3d 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -336,6 +336,9 @@ public: void setObjectCost(F32 cost); F32 getObjectCost(); + virtual F32 getStreamingCost(); + virtual U32 getTriangleCount(); + void setLinksetCost(F32 cost); F32 getLinksetCost(); diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp index 202f8822e3..35e910de1b 100644 --- a/indra/newview/llviewerparcelmedia.cpp +++ b/indra/newview/llviewerparcelmedia.cpp @@ -574,6 +574,24 @@ void LLViewerParcelMedia::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_NAME_CHANGED" << LL_ENDL; }; break; + + case MEDIA_EVENT_CLOSE_REQUEST: + { + LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CLOSE_REQUEST" << LL_ENDL; + } + break; + + case MEDIA_EVENT_PICK_FILE_REQUEST: + { + LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_PICK_FILE_REQUEST" << LL_ENDL; + } + break; + + case MEDIA_EVENT_GEOMETRY_CHANGE: + { + LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_GEOMETRY_CHANGE, uuid is " << self->getClickUUID() << LL_ENDL; + } + break; }; } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index fda0f95c6e..135e8a1141 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -75,13 +75,6 @@ #pragma warning(disable:4355) #endif -// Viewer object cache version, change if object update -// format changes. JC -const U32 INDRA_OBJECT_CACHE_VERSION = 14; - -// Format string used to construct filename for the object cache -static const char OBJECT_CACHE_FILENAME[] = "objects_%d_%d.slc"; - extern BOOL gNoRender; const F32 WATER_TEXTURE_SCALE = 8.f; // Number of times to repeat the water texture across a region @@ -220,7 +213,7 @@ LLViewerRegion::LLViewerRegion(const U64 &handle, mProductName("unknown"), mHttpUrl(""), mCacheLoaded(FALSE), - mCacheEntriesCount(0), + mCacheDirty(FALSE), mCacheID(), mEventPoll(NULL), mReleaseNotesRequested(FALSE), @@ -270,8 +263,6 @@ LLViewerRegion::LLViewerRegion(const U64 &handle, // Create the object lists initStats(); - mCacheStart.append(mCacheEnd); - //create object partitions //MUST MATCH declaration of eObjectPartitions mObjectPartition.push_back(new LLHUDPartition()); //PARTITION_HUD @@ -330,19 +321,6 @@ LLViewerRegion::~LLViewerRegion() std::for_each(mObjectPartition.begin(), mObjectPartition.end(), DeletePointer()); } - -const std::string LLViewerRegion::getObjectCacheFilename(U64 mHandle) const -{ - std::string filename; - U32 region_x, region_y; - - grid_from_region_handle(mHandle, ®ion_x, ®ion_y); - filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, - llformat(OBJECT_CACHE_FILENAME, region_x, region_y)); - - return filename; -} - void LLViewerRegion::loadObjectCache() { if (mCacheLoaded) @@ -353,77 +331,10 @@ void LLViewerRegion::loadObjectCache() // Presume success. If it fails, we don't want to try again. mCacheLoaded = TRUE; - LLVOCacheEntry *entry; - - std::string filename = getObjectCacheFilename(mHandle); - LL_DEBUGS("ObjectCache") << filename << LL_ENDL; - - LLFILE* fp = LLFile::fopen(filename, "rb"); /* Flawfinder: ignore */ - if (!fp) - { - // might not have a file, which is normal - return; - } - - U32 zero; - size_t nread; - nread = fread(&zero, sizeof(U32), 1, fp); - if (nread != 1 || zero) - { - // a non-zero value here means bad things! - // skip reading the cached values - llinfos << "Cache file invalid" << llendl; - fclose(fp); - return; - } - - U32 version; - nread = fread(&version, sizeof(U32), 1, fp); - if (nread != 1 || version != INDRA_OBJECT_CACHE_VERSION) + if(LLVOCache::hasInstance()) { - // a version mismatch here means we've changed the binary format! - // skip reading the cached values - llinfos << "Cache version changed, discarding" << llendl; - fclose(fp); - return; - } - - LLUUID cache_id; - nread = fread(&cache_id.mData, 1, UUID_BYTES, fp); - if (nread != (size_t)UUID_BYTES || mCacheID != cache_id) - { - llinfos << "Cache ID doesn't match for this region, discarding" - << llendl; - fclose(fp); - return; - } - - S32 num_entries; - nread = fread(&num_entries, sizeof(S32), 1, fp); - if (nread != 1) - { - llinfos << "Short read, discarding" << llendl; - fclose(fp); - return; + LLVOCache::getInstance()->readFromCache(mHandle, mCacheID, mCacheMap) ; } - - S32 i; - for (i = 0; i < num_entries; i++) - { - entry = new LLVOCacheEntry(fp); - if (!entry->getLocalID()) - { - llwarns << "Aborting cache file load for " << filename << ", cache file corruption!" << llendl; - delete entry; - entry = NULL; - break; - } - mCacheEnd.insert(*entry); - mCacheMap[entry->getLocalID()] = entry; - mCacheEntriesCount++; - } - - fclose(fp); } @@ -434,61 +345,22 @@ void LLViewerRegion::saveObjectCache() return; } - S32 num_entries = mCacheEntriesCount; - if (0 == num_entries) + if (mCacheMap.empty()) { return; } - std::string filename = getObjectCacheFilename(mHandle); - LL_DEBUGS("ObjectCache") << filename << LL_ENDL; - - LLFILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */ - if (!fp) + if(LLVOCache::hasInstance()) { - llwarns << "Unable to write cache file " << filename << llendl; - return; + LLVOCache::getInstance()->writeToCache(mHandle, mCacheID, mCacheMap, mCacheDirty) ; + mCacheDirty = FALSE; } - // write out zero to indicate a version cache file - U32 zero = 0; - if (fwrite(&zero, sizeof(U32), 1, fp) != 1) + for(LLVOCacheEntry::vocache_entry_map_t::iterator iter = mCacheMap.begin(); iter != mCacheMap.end(); ++iter) { - llwarns << "Short write" << llendl; + delete iter->second; } - - // write out version number - U32 version = INDRA_OBJECT_CACHE_VERSION; - if (fwrite(&version, sizeof(U32), 1, fp) != 1) - { - llwarns << "Short write" << llendl; - } - - // write the cache id for this sim - if (fwrite(&mCacheID.mData, 1, UUID_BYTES, fp) != (size_t)UUID_BYTES) - { - llwarns << "Short write" << llendl; - } - - if (fwrite(&num_entries, sizeof(S32), 1, fp) != 1) - { - llwarns << "Short write" << llendl; - } - - LLVOCacheEntry *entry; - - for (entry = mCacheStart.getNext(); entry && (entry != &mCacheEnd); entry = entry->getNext()) - { - entry->writeToFile(fp); - } - mCacheMap.clear(); - mCacheEnd.unlink(); - mCacheEnd.init(); - mCacheStart.deleteAll(); - mCacheStart.init(); - - fclose(fp); } void LLViewerRegion::sendMessage() @@ -1181,7 +1053,6 @@ void LLViewerRegion::cacheFullUpdate(LLViewerObject* objectp, LLDataPackerBinary mCacheMap.erase(local_id); delete entry; entry = new LLVOCacheEntry(local_id, crc, dp); - mCacheEnd.insert(*entry); mCacheMap[local_id] = entry; } } @@ -1190,18 +1061,13 @@ void LLViewerRegion::cacheFullUpdate(LLViewerObject* objectp, LLDataPackerBinary // we haven't seen this object before // Create new entry and add to map - if (mCacheEntriesCount > MAX_OBJECT_CACHE_ENTRIES) + if (mCacheMap.size() > MAX_OBJECT_CACHE_ENTRIES) { - entry = mCacheStart.getNext(); - mCacheMap.erase(entry->getLocalID()); - delete entry; - mCacheEntriesCount--; + mCacheMap.erase(mCacheMap.begin()); } entry = new LLVOCacheEntry(local_id, crc, dp); - mCacheEnd.insert(*entry); mCacheMap[local_id] = entry; - mCacheEntriesCount++; } return ; } @@ -1316,6 +1182,7 @@ void LLViewerRegion::requestCacheMisses() mCacheMissFull.reset(); mCacheMissCRC.reset(); + mCacheDirty = TRUE ; // llinfos << "KILLDEBUG Sent cache miss full " << full_count << " crc " << crc_count << llendl; } @@ -1333,9 +1200,10 @@ void LLViewerRegion::dumpCache() } LLVOCacheEntry *entry; - - for (entry = mCacheStart.getNext(); entry && (entry != &mCacheEnd); entry = entry->getNext()) + for(LLVOCacheEntry::vocache_entry_map_t::iterator iter = mCacheMap.begin(); iter != mCacheMap.end(); ++iter) { + entry = iter->second ; + S32 hits = entry->getHitCount(); S32 changes = entry->getCRCChangeCount(); @@ -1346,7 +1214,7 @@ void LLViewerRegion::dumpCache() change_bin[changes]++; } - llinfos << "Count " << mCacheEntriesCount << llendl; + llinfos << "Count " << mCacheMap.size() << llendl; for (i = 0; i < BINS; i++) { llinfos << "Hits " << i << " " << hit_bin[i] << llendl; diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index 8254cf1cad..1ce5a5ee61 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -329,9 +329,6 @@ public: LLDynamicArray<LLUUID> mMapAvatarIDs; private: - // determine the cache filename for the region from the region handle - const std::string getObjectCacheFilename(U64 mHandle) const; - // The surfaces and other layers LLSurface* mLandp; @@ -393,11 +390,8 @@ private: // Regions can have order 10,000 objects, so assume // a structure of size 2^14 = 16,000 BOOL mCacheLoaded; - typedef std::map<U32, LLVOCacheEntry *> cache_map_t; - cache_map_t mCacheMap; - LLVOCacheEntry mCacheStart; - LLVOCacheEntry mCacheEnd; - U32 mCacheEntriesCount; + BOOL mCacheDirty; + LLVOCacheEntry::vocache_entry_map_t mCacheMap; LLDynamicArray<U32> mCacheMissFull; LLDynamicArray<U32> mCacheMissCRC; // time? diff --git a/indra/newview/llviewerstats.h b/indra/newview/llviewerstats.h index 694eeaf097..3ec8d7e16b 100644 --- a/indra/newview/llviewerstats.h +++ b/indra/newview/llviewerstats.h @@ -269,5 +269,5 @@ void send_stats(); extern std::map<S32,LLFrameTimer> gDebugTimers; extern std::map<S32,std::string> gDebugTimerLabel; - +extern U32 gTotalTextureBytes; #endif // LL_LLVIEWERSTATS_H diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 1ee399ecd2..093c37cdb0 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1833,7 +1833,7 @@ bool LLViewerFetchedTexture::updateFetch() S32 current_discard = getCurrentDiscardLevelForFetching() ; S32 desired_discard = getDesiredDiscardLevel(); F32 decode_priority = getDecodePriority(); - decode_priority = llmax(decode_priority, 0.0f); + decode_priority = llclamp(decode_priority, 0.0f, maxDecodePriority()); if (mIsFetching) { diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 02097ea06d..5515dfde08 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -1550,7 +1550,8 @@ bool LLUIImageList::initFromFile() } UIImageDeclarations images; - LLXUIParser::instance().readXUI(root, images, base_file_path); + LLXUIParser parser; + parser.readXUI(root, images, base_file_path); if (!images.validateBlock()) return false; @@ -1563,8 +1564,8 @@ bool LLUIImageList::initFromFile() for (S32 cur_pass = PASS_DECODE_NOW; cur_pass < NUM_PASSES; cur_pass++) { - for (LLInitParam::ParamIterator<UIImageDeclaration>::const_iterator image_it = images.textures().begin(); - image_it != images.textures().end(); + for (LLInitParam::ParamIterator<UIImageDeclaration>::const_iterator image_it = images.textures.begin(); + image_it != images.textures.end(); ++image_it) { std::string file_name = image_it->file_name.isProvided() ? image_it->file_name() : image_it->name(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 28bcdff7bd..0aaf7f9c12 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -102,6 +102,7 @@ #include "llface.h" #include "llfeaturemanager.h" #include "llfilepicker.h" +#include "llfirstuse.h" #include "llfloater.h" #include "llfloaterbuildoptions.h" #include "llfloaterbuyland.h" @@ -162,6 +163,7 @@ #include "lltrans.h" #include "lluictrlfactory.h" #include "llurldispatcher.h" // SLURL from other app instance +#include "llversioninfo.h" #include "llvieweraudio.h" #include "llviewercamera.h" #include "llviewergesture.h" @@ -520,6 +522,14 @@ public: ypos += y_inc; + addText(xpos, ypos, llformat("Selection Streaming Cost: %.3f ", LLSelectMgr::getInstance()->getSelection()->getSelectedObjectStreamingCost())); + + ypos += y_inc; + + addText(xpos, ypos, llformat("Selection Triangle Count: %.3f Ktris ", LLSelectMgr::getInstance()->getSelection()->getSelectedObjectTriangleCount()/1000.f)); + + ypos += y_inc; + LLVertexBuffer::sBindCount = LLImageGL::sBindCount = LLVertexBuffer::sSetCount = LLImageGL::sUniqueCount = gPipeline.mNumVisibleNodes = LLPipeline::sVisibleLightCount = 0; @@ -1579,7 +1589,7 @@ void LLViewerWindow::initBase() // (But wait to add it as a child of the root view so that it will be in front of the // other views.) MainPanel* main_view = new MainPanel(); - LLUICtrlFactory::instance().buildPanel(main_view, "main_view.xml"); + main_view->buildFromFile("main_view.xml"); main_view->setShape(full_window); getRootView()->addChild(main_view); @@ -1587,7 +1597,8 @@ void LLViewerWindow::initBase() mWorldViewPlaceholder = main_view->getChildView("world_view_rect")->getHandle(); mNonSideTrayView = main_view->getChildView("non_side_tray_view")->getHandle(); mFloaterViewHolder = main_view->getChildView("floater_view_holder")->getHandle(); - mPopupView = main_view->getChild<LLPopupView>("popup_holder"); + mPopupView = main_view->findChild<LLPopupView>("popup_holder"); + mHintHolder = main_view->getChild<LLView>("hint_holder")->getHandle(); // Constrain floaters to inside the menu and status bar regions. gFloaterView = main_view->getChild<LLFloaterView>("Floater View"); @@ -1625,7 +1636,7 @@ void LLViewerWindow::initBase() LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLFloaterPreference::initBusyResponse)); // Add the progress bar view (startup view), which overrides everything - mProgressView = getRootView()->getChild<LLProgressView>("progress_view"); + mProgressView = getRootView()->findChild<LLProgressView>("progress_view"); setShowProgress(FALSE); setProgressCancelButtonVisible(FALSE); @@ -1997,6 +2008,11 @@ void LLViewerWindow::setMenuBackgroundColor(bool god_mode, bool dev_grid) LLSD args; LLColor4 new_bg_color; + // no l10n problem because channel is always an english string + std::string channel = LLVersionInfo::getChannel(); + bool isProject = (channel.find("Project") != std::string::npos); + + // god more important than project, proj more important than grid if(god_mode && LLGridManager::getInstance()->isInProductionGrid()) { new_bg_color = LLUIColorTable::instance().getColor( "MenuBarGodBgColor" ); @@ -2005,6 +2021,10 @@ void LLViewerWindow::setMenuBackgroundColor(bool god_mode, bool dev_grid) { new_bg_color = LLUIColorTable::instance().getColor( "MenuNonProductionGodBgColor" ); } + else if (!god_mode && isProject) + { + new_bg_color = LLUIColorTable::instance().getColor( "MenuBarProjectBgColor" ); + } else if(!god_mode && !LLGridManager::getInstance()->isInProductionGrid()) { new_bg_color = LLUIColorTable::instance().getColor( "MenuNonProductionBgColor" ); @@ -2189,10 +2209,20 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask) return TRUE; } + LLFocusableElement* keyboard_focus = gFocusMgr.getKeyboardFocus(); + // give menus a chance to handle modified (Ctrl, Alt) shortcut keys before current focus // as long as focus isn't locked if (mask & (MASK_CONTROL | MASK_ALT) && !gFocusMgr.focusLocked()) { + // Check the current floater's menu first, if it has one. + if (gFocusMgr.keyboardFocusHasAccelerators() + && keyboard_focus + && keyboard_focus->handleKey(key,mask,FALSE)) + { + return TRUE; + } + if ((gMenuBarView && gMenuBarView->handleAcceleratorKey(key, mask)) ||(gLoginMenuBarView && gLoginMenuBarView->handleAcceleratorKey(key, mask))) { @@ -2228,7 +2258,6 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask) } // Traverses up the hierarchy - LLFocusableElement* keyboard_focus = gFocusMgr.getKeyboardFocus(); if( keyboard_focus ) { LLLineEditor* chat_editor = LLBottomTray::instanceExists() ? LLBottomTray::getInstance()->getNearbyChatBar()->getChatBox() : NULL; @@ -2446,7 +2475,7 @@ void append_xui_tooltip(LLView* viewp, LLToolTip::Params& params) { if (viewp) { - if (!params.styled_message().empty()) + if (!params.styled_message.empty()) { params.styled_message.add().text("\n---------\n"); } @@ -2481,6 +2510,18 @@ void LLViewerWindow::updateUI() static std::string last_handle_msg; + if (gLoggedInTime.getStarted()) + { + if (gLoggedInTime.getElapsedTimeF32() > gSavedSettings.getF32("DestinationGuideHintTimeout")) + { + LLFirstUse::notUsingDestinationGuide(); + } + if (gLoggedInTime.getElapsedTimeF32() > gSavedSettings.getF32("SidePanelHintTimeout")) + { + LLFirstUse::notUsingSidePanel(); + } + } + LLConsole::updateClass(); // animate layout stacks so we have up to date rect for world view @@ -2543,6 +2584,17 @@ void LLViewerWindow::updateUI() // only update mouse hover set when UI is visible (since we shouldn't send hover events to invisible UI if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI)) { + // include all ancestors of captor_view as automatically having mouse + if (captor_view) + { + LLView* captor_parent_view = captor_view->getParent(); + while(captor_parent_view) + { + mouse_hover_set.insert(captor_parent_view->getHandle()); + captor_parent_view = captor_parent_view->getParent(); + } + } + // aggregate visible views that contain mouse cursor in display order LLPopupView::popup_list_t popups = mPopupView->getCurrentPopups(); @@ -3979,7 +4031,14 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei image_buffer_x = llfloor(snapshot_width*scale_factor) ; image_buffer_y = llfloor(snapshot_height *scale_factor) ; } + if(image_buffer_x > 0 && image_buffer_y > 0) + { raw->resize(image_buffer_x, image_buffer_y, 3); + } + else + { + return FALSE ; + } if(raw->isBufferInvalid()) { return FALSE ; @@ -4308,14 +4367,6 @@ BOOL LLViewerWindow::getShowProgress() const return (mProgressView && mProgressView->getVisible()); } -void LLViewerWindow::moveProgressViewToFront() -{ - if( mProgressView && mRootView ) - { - mRootView->sendChildToFront(mProgressView); - } -} - void LLViewerWindow::setProgressString(const std::string& string) { if (mProgressView) diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index 61038e2366..adf8bf70d5 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -277,7 +277,6 @@ public: void setShowProgress(const BOOL show); BOOL getShowProgress() const; - void moveProgressViewToFront(); void setProgressString(const std::string& string); void setProgressPercent(const F32 percent); void setProgressMessage(const std::string& msg); @@ -294,6 +293,7 @@ public: void updateWorldViewRect(bool use_full_window=false); LLView* getNonSideTrayView() { return mNonSideTrayView.get(); } LLView* getFloaterViewHolder() { return mFloaterViewHolder.get(); } + LLView* getHintHolder() { return mHintHolder.get(); } BOOL handleKey(KEY key, MASK mask); void handleScrollWheel (S32 clicks); @@ -455,6 +455,7 @@ protected: LLHandle<LLView> mWorldViewPlaceholder; // widget that spans the portion of screen dedicated to rendering the 3d world LLHandle<LLView> mNonSideTrayView; // parent of world view + bottom bar, etc...everything but the side tray LLHandle<LLView> mFloaterViewHolder; // container for floater_view + LLHandle<LLView> mHintHolder; // container for hints LLPopupView* mPopupView; // container for transient popups class LLDebugText* mDebugText; // Internal class for debug text diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index a6b3c436f4..63c3e61598 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -184,7 +184,7 @@ const F32 TIME_BEFORE_MESH_CLEANUP = 5.f; // seconds const S32 AVATAR_RELEASE_THRESHOLD = 10; // number of avatar instances before releasing memory const F32 FOOT_GROUND_COLLISION_TOLERANCE = 0.25f; const F32 AVATAR_LOD_TWEAK_RANGE = 0.7f; -const S32 MAX_BUBBLE_CHAT_LENGTH = 1023; +const S32 MAX_BUBBLE_CHAT_LENGTH = DB_CHAT_MSG_STR_LEN; const S32 MAX_BUBBLE_CHAT_UTTERANCES = 12; const F32 CHAT_FADE_TIME = 8.0; const F32 BUBBLE_CHAT_TIME = CHAT_FADE_TIME * 3.f; @@ -2349,7 +2349,6 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) idleUpdateNameTag( root_pos_last ); idleUpdateRenderCost(); - idleUpdateTractorBeam(); return TRUE; } @@ -3114,14 +3113,6 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) } } -//-------------------------------------------------------------------- -// draw tractor beam when editing objects -//-------------------------------------------------------------------- -// virtual -void LLVOAvatar::idleUpdateTractorBeam() -{ -} - void LLVOAvatar::idleUpdateBelowWater() { F32 avatar_height = (F32)(getPositionGlobal().mdV[VZ]); @@ -4784,6 +4775,16 @@ LLJoint *LLVOAvatar::getJoint( const std::string &name ) } //----------------------------------------------------------------------------- +// resetJointPositions +//----------------------------------------------------------------------------- +void LLVOAvatar::resetJointPositions( void ) +{ + for(S32 i = 0; i < (S32)mNumJoints; ++i) + { + mSkeleton[i].restoreOldXform(); + } +} +//----------------------------------------------------------------------------- // getCharacterPosition() //----------------------------------------------------------------------------- LLVector3 LLVOAvatar::getCharacterPosition() @@ -6189,9 +6190,9 @@ void LLVOAvatar::updateMeshTextures() // use the last-known good baked texture until it finish the first // render of the new layerset. - const BOOL layerset_invalid = !mBakedTextureDatas[i].mTexLayerSet - || !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized() - || !mBakedTextureDatas[i].mTexLayerSet->isLocalTextureDataAvailable(); + const BOOL layerset_invalid = mBakedTextureDatas[i].mTexLayerSet + && ( !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized() + || !mBakedTextureDatas[i].mTexLayerSet->isLocalTextureDataAvailable() ); use_lkg_baked_layer[i] = (!is_layer_baked[i] && (mBakedTextureDatas[i].mLastTextureIndex != IMG_DEFAULT_AVATAR) @@ -6935,12 +6936,14 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) llinfos << "AvatarAppearance msg received without any parameters, object: " << getID() << llendl; } + const F32 LOADING_TIMEOUT_SECONDS = 60.f; // this isn't really a problem if we already have a non-default shape - if (visualParamWeightsAreDefault()) + if (visualParamWeightsAreDefault() && mRuthTimer.getElapsedTimeF32() > LOADING_TIMEOUT_SECONDS) { // re-request appearance, hoping that it comes back with a shape next time llinfos << "Re-requesting AvatarAppearance for object: " << getID() << llendl; LLAvatarPropertiesProcessor::getInstance()->sendAvatarTexturesRequest(getID()); + mRuthTimer.reset(); } else { diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 955deff1ea..4a8f3bf9ef 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -169,7 +169,9 @@ public: virtual LLJoint* getJoint(const std::string &name); virtual LLJoint* getRootJoint() { return &mRoot; } - + + void resetJointPositions( void ); + virtual const char* getAnimationPrefix() { return "avatar"; } virtual const LLUUID& getID(); virtual LLVector3 getVolumePos(S32 joint_index, LLVector3& volume_offset); @@ -214,7 +216,6 @@ public: void idleUpdateWindEffect(); void idleUpdateNameTag(const LLVector3& root_pos_last); void idleUpdateRenderCost(); - void idleUpdateTractorBeam(); void idleUpdateBelowWater(); //-------------------------------------------------------------------- diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 7663329713..fd519cb3a9 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -246,58 +246,58 @@ BOOL LLVOAvatarSelf::buildMenus() gAttachBodyPartPieMenus[0] = NULL; LLContextMenu::Params params; - params.label(LLTrans::getString("BodyPartsRightArm") + " >"); + params.label(LLTrans::getString("BodyPartsRightArm")); params.name(params.label); params.visible(false); gAttachBodyPartPieMenus[1] = LLUICtrlFactory::create<LLContextMenu> (params); - params.label(LLTrans::getString("BodyPartsHead") + " >"); + params.label(LLTrans::getString("BodyPartsHead")); params.name(params.label); gAttachBodyPartPieMenus[2] = LLUICtrlFactory::create<LLContextMenu> (params); - params.label(LLTrans::getString("BodyPartsLeftArm") + " >"); + params.label(LLTrans::getString("BodyPartsLeftArm")); params.name(params.label); gAttachBodyPartPieMenus[3] = LLUICtrlFactory::create<LLContextMenu> (params); gAttachBodyPartPieMenus[4] = NULL; - params.label(LLTrans::getString("BodyPartsLeftLeg") + " >"); + params.label(LLTrans::getString("BodyPartsLeftLeg")); params.name(params.label); gAttachBodyPartPieMenus[5] = LLUICtrlFactory::create<LLContextMenu> (params); - params.label(LLTrans::getString("BodyPartsTorso") + " >"); + params.label(LLTrans::getString("BodyPartsTorso")); params.name(params.label); gAttachBodyPartPieMenus[6] = LLUICtrlFactory::create<LLContextMenu> (params); - params.label(LLTrans::getString("BodyPartsRightLeg") + " >"); + params.label(LLTrans::getString("BodyPartsRightLeg")); params.name(params.label); gAttachBodyPartPieMenus[7] = LLUICtrlFactory::create<LLContextMenu> (params); gDetachBodyPartPieMenus[0] = NULL; - params.label(LLTrans::getString("BodyPartsRightArm") + " >"); + params.label(LLTrans::getString("BodyPartsRightArm")); params.name(params.label); gDetachBodyPartPieMenus[1] = LLUICtrlFactory::create<LLContextMenu> (params); - params.label(LLTrans::getString("BodyPartsHead") + " >"); + params.label(LLTrans::getString("BodyPartsHead")); params.name(params.label); gDetachBodyPartPieMenus[2] = LLUICtrlFactory::create<LLContextMenu> (params); - params.label(LLTrans::getString("BodyPartsLeftArm") + " >"); + params.label(LLTrans::getString("BodyPartsLeftArm")); params.name(params.label); gDetachBodyPartPieMenus[3] = LLUICtrlFactory::create<LLContextMenu> (params); gDetachBodyPartPieMenus[4] = NULL; - params.label(LLTrans::getString("BodyPartsLeftLeg") + " >"); + params.label(LLTrans::getString("BodyPartsLeftLeg")); params.name(params.label); gDetachBodyPartPieMenus[5] = LLUICtrlFactory::create<LLContextMenu> (params); - params.label(LLTrans::getString("BodyPartsTorso") + " >"); + params.label(LLTrans::getString("BodyPartsTorso")); params.name(params.label); gDetachBodyPartPieMenus[6] = LLUICtrlFactory::create<LLContextMenu> (params); - params.label(LLTrans::getString("BodyPartsRightLeg") + " >"); + params.label(LLTrans::getString("BodyPartsRightLeg")); params.name(params.label); gDetachBodyPartPieMenus[7] = LLUICtrlFactory::create<LLContextMenu> (params); @@ -640,6 +640,7 @@ BOOL LLVOAvatarSelf::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) return TRUE; } LLVOAvatar::idleUpdate(agent, world, time); + idleUpdateTractorBeam(); return TRUE; } @@ -1167,12 +1168,24 @@ BOOL LLVOAvatarSelf::detachAttachmentIntoInventory(const LLUUID &item_id) gMessageSystem->addUUIDFast(_PREHASH_ItemID, item_id); gMessageSystem->sendReliable(gAgent.getRegion()->getHost()); - // this object might have been selected, so let the selection manager know it's gone now + // This object might have been selected, so let the selection manager know it's gone now LLViewerObject *found_obj = gObjectList.findObject(item_id); if (found_obj) { LLSelectMgr::getInstance()->remove(found_obj); } + + // Error checking in case this object was attached to an invalid point + // In that case, just remove the item from COF preemptively since detach + // will fail. + if (isAgentAvatarValid()) + { + const LLViewerObject *attached_obj = gAgentAvatarp->getWornAttachment(item_id); + if (!attached_obj) + { + LLAppearanceMgr::instance().removeCOFItemLinks(item_id, false); + } + } return TRUE; } return FALSE; diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index eb2475f666..23a799ea3a 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -33,6 +33,7 @@ struct LocalTextureData; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // LLVOAvatarSelf // diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp index 3f1c132e77..5f40959d7b 100644 --- a/indra/newview/llvocache.cpp +++ b/indra/newview/llvocache.cpp @@ -31,75 +31,110 @@ */ #include "llviewerprecompiledheaders.h" - #include "llvocache.h" - #include "llerror.h" +#include "llregionhandle.h" + +BOOL check_read(LLAPRFile* apr_file, void* src, S32 n_bytes) +{ + return apr_file->read(src, n_bytes) == n_bytes ; +} + +BOOL check_write(LLAPRFile* apr_file, void* src, S32 n_bytes) +{ + return apr_file->write(src, n_bytes) == n_bytes ; +} //--------------------------------------------------------------------------- // LLVOCacheEntry //--------------------------------------------------------------------------- LLVOCacheEntry::LLVOCacheEntry(U32 local_id, U32 crc, LLDataPackerBinaryBuffer &dp) + : + mLocalID(local_id), + mCRC(crc), + mHitCount(0), + mDupeCount(0), + mCRCChangeCount(0) { - mLocalID = local_id; - mCRC = crc; - mHitCount = 0; - mDupeCount = 0; - mCRCChangeCount = 0; mBuffer = new U8[dp.getBufferSize()]; mDP.assignBuffer(mBuffer, dp.getBufferSize()); mDP = dp; } LLVOCacheEntry::LLVOCacheEntry() + : + mLocalID(0), + mCRC(0), + mHitCount(0), + mDupeCount(0), + mCRCChangeCount(0), + mBuffer(NULL) { - mLocalID = 0; - mCRC = 0; - mHitCount = 0; - mDupeCount = 0; - mCRCChangeCount = 0; - mBuffer = NULL; mDP.assignBuffer(mBuffer, 0); } - -static inline void checkedRead(LLFILE *fp, void *data, size_t nbytes) +LLVOCacheEntry::LLVOCacheEntry(LLAPRFile* apr_file) { - if (fread(data, 1, nbytes, fp) != nbytes) + S32 size = -1; + BOOL success; + + success = check_read(apr_file, &mLocalID, sizeof(U32)); + if(success) { - llwarns << "Short read" << llendl; - memset(data, 0, nbytes); + success = check_read(apr_file, &mCRC, sizeof(U32)); } -} + if(success) + { + success = check_read(apr_file, &mHitCount, sizeof(S32)); + } + if(success) + { + success = check_read(apr_file, &mDupeCount, sizeof(S32)); + } + if(success) + { + success = check_read(apr_file, &mCRCChangeCount, sizeof(S32)); + } + if(success) + { + success = check_read(apr_file, &size, sizeof(S32)); -LLVOCacheEntry::LLVOCacheEntry(LLFILE *fp) -{ - S32 size; - checkedRead(fp, &mLocalID, sizeof(U32)); - checkedRead(fp, &mCRC, sizeof(U32)); - checkedRead(fp, &mHitCount, sizeof(S32)); - checkedRead(fp, &mDupeCount, sizeof(S32)); - checkedRead(fp, &mCRCChangeCount, sizeof(S32)); + // Corruption in the cache entries + if ((size > 10000) || (size < 1)) + { + // We've got a bogus size, skip reading it. + // We won't bother seeking, because the rest of this file + // is likely bogus, and will be tossed anyway. + llwarns << "Bogus cache entry, size " << size << ", aborting!" << llendl; + success = FALSE; + } + } + if(success && size > 0) + { + mBuffer = new U8[size]; + success = check_read(apr_file, mBuffer, size); - checkedRead(fp, &size, sizeof(S32)); + if(success) + { + mDP.assignBuffer(mBuffer, size); + } + else + { + delete[] mBuffer ; + mBuffer = NULL ; + } + } - // Corruption in the cache entries - if ((size > 10000) || (size < 1)) + if(!success) { - // We've got a bogus size, skip reading it. - // We won't bother seeking, because the rest of this file - // is likely bogus, and will be tossed anyway. - llwarns << "Bogus cache entry, size " << size << ", aborting!" << llendl; mLocalID = 0; mCRC = 0; + mHitCount = 0; + mDupeCount = 0; + mCRCChangeCount = 0; mBuffer = NULL; - return; } - - mBuffer = new U8[size]; - checkedRead(fp, mBuffer, size); - mDP.assignBuffer(mBuffer, size); } LLVOCacheEntry::~LLVOCacheEntry() @@ -154,22 +189,468 @@ void LLVOCacheEntry::dump() const << llendl; } -static inline void checkedWrite(LLFILE *fp, const void *data, size_t nbytes) +BOOL LLVOCacheEntry::writeToFile(LLAPRFile* apr_file) const { - if (fwrite(data, 1, nbytes, fp) != nbytes) + BOOL success; + success = check_write(apr_file, (void*)&mLocalID, sizeof(U32)); + if(success) { - llwarns << "Short write" << llendl; + success = check_write(apr_file, (void*)&mCRC, sizeof(U32)); } + if(success) + { + success = check_write(apr_file, (void*)&mHitCount, sizeof(S32)); + } + if(success) + { + success = check_write(apr_file, (void*)&mDupeCount, sizeof(S32)); + } + if(success) + { + success = check_write(apr_file, (void*)&mCRCChangeCount, sizeof(S32)); + } + if(success) + { + S32 size = mDP.getBufferSize(); + success = check_write(apr_file, (void*)&size, sizeof(S32)); + + if(success) + { + success = check_write(apr_file, (void*)mBuffer, size); + } +} + + return success ; +} + +//------------------------------------------------------------------- +//LLVOCache +//------------------------------------------------------------------- +// Format string used to construct filename for the object cache +static const char OBJECT_CACHE_FILENAME[] = "objects_%d_%d.slc"; + +const U32 MAX_NUM_OBJECT_ENTRIES = 128 ; +const U32 NUM_ENTRIES_TO_PURGE = 16 ; +const char* object_cache_dirname = "objectcache"; +const char* header_filename = "object.cache"; + +LLVOCache* LLVOCache::sInstance = NULL; + +//static +LLVOCache* LLVOCache::getInstance() +{ + if(!sInstance) + { + sInstance = new LLVOCache() ; +} + return sInstance ; } -void LLVOCacheEntry::writeToFile(LLFILE *fp) const +//static +BOOL LLVOCache::hasInstance() { - checkedWrite(fp, &mLocalID, sizeof(U32)); - checkedWrite(fp, &mCRC, sizeof(U32)); - checkedWrite(fp, &mHitCount, sizeof(S32)); - checkedWrite(fp, &mDupeCount, sizeof(S32)); - checkedWrite(fp, &mCRCChangeCount, sizeof(S32)); - S32 size = mDP.getBufferSize(); - checkedWrite(fp, &size, sizeof(S32)); - checkedWrite(fp, mBuffer, size); + return sInstance != NULL ; } + +//static +void LLVOCache::destroyClass() +{ + if(sInstance) + { + delete sInstance ; + sInstance = NULL ; + } +} + +LLVOCache::LLVOCache(): + mInitialized(FALSE), + mReadOnly(TRUE), + mNumEntries(0), + mCacheSize(1) +{ + mLocalAPRFilePoolp = new LLVolatileAPRPool() ; +} + +LLVOCache::~LLVOCache() +{ + writeCacheHeader(); + clearCacheInMemory(); + delete mLocalAPRFilePoolp; +} + +void LLVOCache::setDirNames(ELLPath location) +{ + std::string delem = gDirUtilp->getDirDelimiter(); + + mHeaderFileName = gDirUtilp->getExpandedFilename(location, object_cache_dirname, header_filename); + mObjectCacheDirName = gDirUtilp->getExpandedFilename(location, object_cache_dirname); +} + +void LLVOCache::initCache(ELLPath location, U32 size, U32 cache_version) +{ + if(mInitialized) + { + return ; + } + + setDirNames(location); + if (!mReadOnly) + { + LLFile::mkdir(mObjectCacheDirName); + } + mCacheSize = llclamp(size, + MAX_NUM_OBJECT_ENTRIES, NUM_ENTRIES_TO_PURGE); + + mMetaInfo.mVersion = cache_version; + readCacheHeader(); + mInitialized = TRUE ; + + if(mMetaInfo.mVersion != cache_version) + { + mMetaInfo.mVersion = cache_version ; + if(mReadOnly) //disable cache + { + clearCacheInMemory(); + } + else //delete the current cache if the format does not match. + { + removeCache(); + } + } +} + +void LLVOCache::removeCache(ELLPath location) +{ + if(mReadOnly) + { + return ; + } + + std::string delem = gDirUtilp->getDirDelimiter(); + std::string mask = delem + "*"; + std::string cache_dir = gDirUtilp->getExpandedFilename(location, object_cache_dirname); + gDirUtilp->deleteFilesInDir(cache_dir, mask); //delete all files + LLFile::rmdir(cache_dir); + + clearCacheInMemory(); + mInitialized = FALSE ; +} + +void LLVOCache::removeCache() +{ + llassert_always(mInitialized) ; + if(mReadOnly) + { + return ; + } + + std::string delem = gDirUtilp->getDirDelimiter(); + std::string mask = delem + "*"; + gDirUtilp->deleteFilesInDir(mObjectCacheDirName, mask); + + clearCacheInMemory() ; + writeCacheHeader(); +} + +void LLVOCache::clearCacheInMemory() +{ + if(!mHeaderEntryQueue.empty()) + { + for(header_entry_queue_t::iterator iter = mHeaderEntryQueue.begin(); iter != mHeaderEntryQueue.end(); ++iter) + { + delete *iter ; + } + mHeaderEntryQueue.clear(); + mHandleEntryMap.clear(); + mNumEntries = 0 ; + } +} + +void LLVOCache::getObjectCacheFilename(U64 handle, std::string& filename) +{ + U32 region_x, region_y; + + grid_from_region_handle(handle, ®ion_x, ®ion_y); + filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, object_cache_dirname, + llformat(OBJECT_CACHE_FILENAME, region_x, region_y)); + + return ; +} + +void LLVOCache::removeFromCache(U64 handle) +{ + if(mReadOnly) + { + return ; + } + + std::string filename; + getObjectCacheFilename(handle, filename); + LLAPRFile::remove(filename, mLocalAPRFilePoolp); +} + +BOOL LLVOCache::checkRead(LLAPRFile* apr_file, void* src, S32 n_bytes) +{ + if(!check_read(apr_file, src, n_bytes)) + { + delete apr_file ; + removeCache() ; + return FALSE ; + } + + return TRUE ; +} + +BOOL LLVOCache::checkWrite(LLAPRFile* apr_file, void* src, S32 n_bytes) +{ + if(!check_write(apr_file, src, n_bytes)) + { + delete apr_file ; + removeCache() ; + return FALSE ; + } + + return TRUE ; +} + +void LLVOCache::readCacheHeader() +{ + //clear stale info. + clearCacheInMemory(); + + if (LLAPRFile::isExist(mHeaderFileName, mLocalAPRFilePoolp)) + { + LLAPRFile* apr_file = new LLAPRFile(mHeaderFileName, APR_READ|APR_BINARY, mLocalAPRFilePoolp); + + //read the meta element + if(!checkRead(apr_file, &mMetaInfo, sizeof(HeaderMetaInfo))) + { + return ; + } + + HeaderEntryInfo* entry ; + mNumEntries = 0 ; + while(mNumEntries < MAX_NUM_OBJECT_ENTRIES) + { + entry = new HeaderEntryInfo() ; + if(!checkRead(apr_file, entry, sizeof(HeaderEntryInfo))) + { + delete entry ; + return ; + } + else if(!entry->mTime) //end of the cache. + { + delete entry ; + return ; + } + + entry->mIndex = mNumEntries++ ; + mHeaderEntryQueue.insert(entry) ; + mHandleEntryMap[entry->mHandle] = entry ; + } + + delete apr_file ; + } + else + { + writeCacheHeader() ; + } +} + +void LLVOCache::writeCacheHeader() +{ + if(mReadOnly) + { + return ; + } + + LLAPRFile* apr_file = new LLAPRFile(mHeaderFileName, APR_CREATE|APR_WRITE|APR_BINARY, mLocalAPRFilePoolp); + + //write the meta element + if(!checkWrite(apr_file, &mMetaInfo, sizeof(HeaderMetaInfo))) + { + return ; + } + + mNumEntries = 0 ; + for(header_entry_queue_t::iterator iter = mHeaderEntryQueue.begin() ; iter != mHeaderEntryQueue.end(); ++iter) + { + (*iter)->mIndex = mNumEntries++ ; + if(!checkWrite(apr_file, (void*)*iter, sizeof(HeaderEntryInfo))) + { + return ; + } + } + + mNumEntries = mHeaderEntryQueue.size() ; + if(mNumEntries < MAX_NUM_OBJECT_ENTRIES) + { + HeaderEntryInfo* entry = new HeaderEntryInfo() ; + for(S32 i = mNumEntries ; i < MAX_NUM_OBJECT_ENTRIES ; i++) + { + //fill the cache with the default entry. + if(!checkWrite(apr_file, entry, sizeof(HeaderEntryInfo))) + { + mReadOnly = TRUE ; //disable the cache. + return ; + } + } + delete entry ; + } + delete apr_file ; +} + +BOOL LLVOCache::updateEntry(const HeaderEntryInfo* entry) +{ + LLAPRFile* apr_file = new LLAPRFile(mHeaderFileName, APR_WRITE|APR_BINARY, mLocalAPRFilePoolp); + apr_file->seek(APR_SET, entry->mIndex * sizeof(HeaderEntryInfo) + sizeof(HeaderMetaInfo)) ; + + return checkWrite(apr_file, (void*)entry, sizeof(HeaderEntryInfo)) ; +} + +void LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::vocache_entry_map_t& cache_entry_map) +{ + llassert_always(mInitialized); + + handle_entry_map_t::iterator iter = mHandleEntryMap.find(handle) ; + if(iter == mHandleEntryMap.end()) //no cache + { + return ; + } + + std::string filename; + getObjectCacheFilename(handle, filename); + LLAPRFile* apr_file = new LLAPRFile(filename, APR_READ|APR_BINARY, mLocalAPRFilePoolp); + + LLUUID cache_id ; + if(!checkRead(apr_file, cache_id.mData, UUID_BYTES)) + { + return ; + } + if(cache_id != id) + { + llinfos << "Cache ID doesn't match for this region, discarding"<< llendl; + + delete apr_file ; + return ; + } + + S32 num_entries; + if(!checkRead(apr_file, &num_entries, sizeof(S32))) + { + return ; + } + + for (S32 i = 0; i < num_entries; i++) + { + LLVOCacheEntry* entry = new LLVOCacheEntry(apr_file); + if (!entry->getLocalID()) + { + llwarns << "Aborting cache file load for " << filename << ", cache file corruption!" << llendl; + delete entry ; + break; + } + cache_entry_map[entry->getLocalID()] = entry; + } + num_entries = cache_entry_map.size() ; + + delete apr_file ; + return ; +} + +void LLVOCache::purgeEntries() +{ + U32 limit = mCacheSize - NUM_ENTRIES_TO_PURGE ; + while(mHeaderEntryQueue.size() > limit) + { + header_entry_queue_t::iterator iter = mHeaderEntryQueue.begin() ; + HeaderEntryInfo* entry = *iter ; + + removeFromCache(entry->mHandle) ; + mHandleEntryMap.erase(entry->mHandle) ; + mHeaderEntryQueue.erase(iter) ; + delete entry ; + } + + writeCacheHeader() ; + readCacheHeader() ; + mNumEntries = mHandleEntryMap.size() ; +} + +void LLVOCache::writeToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry::vocache_entry_map_t& cache_entry_map, BOOL dirty_cache) +{ + llassert_always(mInitialized); + + if(mReadOnly) + { + return ; + } + + HeaderEntryInfo* entry; + handle_entry_map_t::iterator iter = mHandleEntryMap.find(handle) ; + if(iter == mHandleEntryMap.end()) //new entry + { + if(mNumEntries >= mCacheSize) + { + purgeEntries() ; + } + + entry = new HeaderEntryInfo(); + entry->mHandle = handle ; + entry->mTime = time(NULL) ; + entry->mIndex = mNumEntries++ ; + mHeaderEntryQueue.insert(entry) ; + mHandleEntryMap[handle] = entry ; + } + else + { + entry = iter->second ; + entry->mTime = time(NULL) ; + + //resort + mHeaderEntryQueue.erase(entry) ; + mHeaderEntryQueue.insert(entry) ; + } + + //update cache header + if(!updateEntry(entry)) + { + return ; //update failed. + } + + if(!dirty_cache) + { + return ; //nothing changed, no need to update. + } + + //write to cache file + std::string filename; + getObjectCacheFilename(handle, filename); + LLAPRFile* apr_file = new LLAPRFile(filename, APR_CREATE|APR_WRITE|APR_BINARY, mLocalAPRFilePoolp); + + if(!checkWrite(apr_file, (void*)id.mData, UUID_BYTES)) + { + return ; + } + + S32 num_entries = cache_entry_map.size() ; + if(!checkWrite(apr_file, &num_entries, sizeof(S32))) + { + return ; + } + + for (LLVOCacheEntry::vocache_entry_map_t::const_iterator iter = cache_entry_map.begin(); iter != cache_entry_map.end(); ++iter) + { + if(!iter->second->writeToFile(apr_file)) + { + //failed + delete apr_file ; + removeCache() ; + return ; + } + } + + delete apr_file ; + return ; +} + diff --git a/indra/newview/llvocache.h b/indra/newview/llvocache.h index 1970a1e72f..df3fdd716b 100644 --- a/indra/newview/llvocache.h +++ b/indra/newview/llvocache.h @@ -42,11 +42,11 @@ // Cache entries class LLVOCacheEntry; -class LLVOCacheEntry : public LLDLinked<LLVOCacheEntry> +class LLVOCacheEntry { public: LLVOCacheEntry(U32 local_id, U32 crc, LLDataPackerBinaryBuffer &dp); - LLVOCacheEntry(LLFILE *fp); + LLVOCacheEntry(LLAPRFile* apr_file); LLVOCacheEntry(); ~LLVOCacheEntry(); @@ -56,12 +56,15 @@ public: S32 getCRCChangeCount() const { return mCRCChangeCount; } void dump() const; - void writeToFile(LLFILE *fp) const; + BOOL writeToFile(LLAPRFile* apr_file) const; void assignCRC(U32 crc, LLDataPackerBinaryBuffer &dp); LLDataPackerBinaryBuffer *getDP(U32 crc); void recordHit(); void recordDupe() { mDupeCount++; } +public: + typedef std::map<U32, LLVOCacheEntry*> vocache_entry_map_t; + protected: U32 mLocalID; U32 mCRC; @@ -72,4 +75,81 @@ protected: U8 *mBuffer; }; +// +//Note: LLVOCache is not thread-safe +// +class LLVOCache +{ +private: + struct HeaderEntryInfo + { + HeaderEntryInfo() : mIndex(0), mHandle(0), mTime(0) {} + S32 mIndex; + U64 mHandle ; + U32 mTime ; + }; + + struct HeaderMetaInfo + { + HeaderMetaInfo() : mVersion(0){} + + U32 mVersion; + }; + + struct header_entry_less + { + bool operator()(const HeaderEntryInfo* lhs, const HeaderEntryInfo* rhs) const + { + return lhs->mTime < rhs->mTime; // older entry in front of queue (set) + } + }; + typedef std::set<HeaderEntryInfo*, header_entry_less> header_entry_queue_t; + typedef std::map<U64, HeaderEntryInfo*> handle_entry_map_t; +private: + LLVOCache() ; + +public: + ~LLVOCache() ; + + void initCache(ELLPath location, U32 size, U32 cache_version) ; + void removeCache(ELLPath location) ; + + void readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::vocache_entry_map_t& cache_entry_map) ; + void writeToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry::vocache_entry_map_t& cache_entry_map, BOOL dirty_cache) ; + + void setReadOnly(BOOL read_only) {mReadOnly = read_only;} + +private: + void setDirNames(ELLPath location); + // determine the cache filename for the region from the region handle + void getObjectCacheFilename(U64 handle, std::string& filename); + void removeFromCache(U64 handle); + void readCacheHeader(); + void writeCacheHeader(); + void clearCacheInMemory(); + void removeCache() ; + void purgeEntries(); + BOOL updateEntry(const HeaderEntryInfo* entry); + BOOL checkRead(LLAPRFile* apr_file, void* src, S32 n_bytes) ; + BOOL checkWrite(LLAPRFile* apr_file, void* src, S32 n_bytes) ; + +private: + BOOL mInitialized ; + BOOL mReadOnly ; + HeaderMetaInfo mMetaInfo; + U32 mCacheSize; + U32 mNumEntries; + std::string mHeaderFileName ; + std::string mObjectCacheDirName; + LLVolatileAPRPool* mLocalAPRFilePoolp ; + header_entry_queue_t mHeaderEntryQueue; + handle_entry_map_t mHandleEntryMap; + + static LLVOCache* sInstance ; +public: + static LLVOCache* getInstance() ; + static BOOL hasInstance() ; + static void destroyClass() ; +}; + #endif diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index 4dc9edb247..ada577d1b2 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -392,7 +392,7 @@ LLVivoxVoiceClient::~LLVivoxVoiceClient() { } -//---------------------------------------------- +//--------------------------------------------------- void LLVivoxVoiceClient::init(LLPumpIO *pump) { @@ -406,7 +406,8 @@ void LLVivoxVoiceClient::terminate() { logout(); connectorShutdown(); - closeSocket(); // Need to do this now -- bad things happen if the destructor does it later. + closeSocket(); // Need to do this now -- bad things happen if the destructor does it later. + cleanUp(); } else { @@ -414,6 +415,18 @@ void LLVivoxVoiceClient::terminate() } } +//--------------------------------------------------- + +void LLVivoxVoiceClient::cleanUp() +{ + deleteAllSessions(); + deleteAllBuddies(); + deleteAllVoiceFonts(); + deleteVoiceFontTemplates(); +} + +//--------------------------------------------------- + const LLVoiceVersionInfo& LLVivoxVoiceClient::getVersion() { return mVoiceVersion; @@ -782,14 +795,10 @@ void LLVivoxVoiceClient::stateMachine() { //MARK: stateDisableCleanup case stateDisableCleanup: - // Clean up and reset everything. + // Clean up and reset everything. closeSocket(); - deleteAllSessions(); - deleteAllBuddies(); - deleteAllVoiceFonts(); - deleteVoiceFontTemplates(); + cleanUp(); - mConnectorHandle.clear(); mAccountHandle.clear(); mAccountPassword.clear(); mVoiceAccountServerURI.clear(); @@ -1681,12 +1690,9 @@ void LLVivoxVoiceClient::stateMachine() //MARK: stateLoggedOut case stateLoggedOut: // logout response received - // Once we're logged out, all these things are invalid. + // Once we're logged out, these things are invalid. mAccountHandle.clear(); - deleteAllSessions(); - deleteAllBuddies(); - deleteAllVoiceFonts(); - deleteVoiceFontTemplates(); + cleanUp(); if(mVoiceEnabled && !mRelogRequested) { @@ -1784,6 +1790,8 @@ void LLVivoxVoiceClient::closeSocket(void) { mSocket.reset(); mConnected = false; + mConnectorHandle.clear(); + mAccountHandle.clear(); } void LLVivoxVoiceClient::loginSendMessage() @@ -2376,8 +2384,7 @@ void LLVivoxVoiceClient::giveUp() { // All has failed. Clean up and stop trying. closeSocket(); - deleteAllSessions(); - deleteAllBuddies(); + cleanUp(); setState(stateJail); } diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h index f858f8f74e..7c66b113d5 100644 --- a/indra/newview/llvoicevivox.h +++ b/indra/newview/llvoicevivox.h @@ -674,7 +674,10 @@ protected: private: LLVoiceVersionInfo mVoiceVersion; - + + /// Clean up objects created during a voice session. + void cleanUp(); + state mState; bool mSessionTerminateRequested; bool mRelogRequested; diff --git a/indra/newview/llvosky.h b/indra/newview/llvosky.h index 8366909755..85fd30f6db 100644 --- a/indra/newview/llvosky.h +++ b/indra/newview/llvosky.h @@ -145,10 +145,10 @@ protected: ~LLSkyTex(); - static S32 getResolution() { return sResolution; } + static S32 getResolution() { return sResolution; } static S32 getCurrent() { return sCurrent; } - static S32 stepCurrent() { return (sCurrent = (sCurrent + 1) % 2); } - static S32 getNext() { return ((sCurrent+1) % 2); } + static S32 stepCurrent() { sCurrent++; sCurrent &= 1; return sCurrent; } + static S32 getNext() { return ((sCurrent+1) & 1); } static S32 getWhich(const BOOL curr) { return curr ? sCurrent : getNext(); } void initEmpty(const S32 tex); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 4ef050e71f..8eabe8ed90 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1354,6 +1354,9 @@ BOOL LLVOVolume::genBBoxes(BOOL force_global) LLVector4a min,max; + min.clear(); + max.clear(); + BOOL rebuild = mDrawable->isState(LLDrawable::REBUILD_VOLUME | LLDrawable::REBUILD_POSITION | LLDrawable::REBUILD_RIGGED); // bool rigged = false; @@ -3204,6 +3207,45 @@ U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const } +F32 LLVOVolume::getStreamingCost() +{ + std::string header_lod[] = + { + "lowest_lod", + "low_lod", + "medium_lod", + "high_lod" + }; + + + if (isMesh()) + { + const LLSD& header = gMeshRepo.getMeshHeader(getVolume()->getParams().getSculptID()); + + F32 radius = getRadius(); + + return LLMeshRepository::getStreamingCost(header, radius); + } + + + return 0.f; +} + +U32 LLVOVolume::getTriangleCount() +{ + U32 count = 0; + LLVolume* volume = getVolume(); + if (volume) + { + for (S32 i = 0; i < volume->getNumVolumeFaces(); ++i) + { + count += volume->getVolumeFace(i).mNumIndices/3; + } + } + + return count; +} + //static void LLVOVolume::preUpdateGeom() { @@ -4024,6 +4066,32 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) //get drawpool of avatar with rigged face LLDrawPoolAvatar* pool = get_avatar_drawpool(vobj); + //Determine if we've received skininfo that contains an + //alternate bind matrix - if it does then apply the translational component + //to the joints of the avatar. + const LLVOAvatar* pAvatarVO = vobj->getAvatar(); + if ( pAvatarVO ) + { + const LLMeshSkinInfo* pSkinData = gMeshRepo.getSkinInfo( vobj->getVolume()->getParams().getSculptID() ); + if ( pSkinData ) + { + const int bindCnt = pSkinData->mAlternateBindMatrix.size(); + if ( bindCnt > 0 ) + { + const int jointCnt = pSkinData->mJointNames.size(); + for ( int i=0; i<jointCnt; ++i ) + { + std::string lookingForJoint = pSkinData->mJointNames[i].c_str(); + LLJoint* pJoint = vobj->getAvatar()->getJoint( lookingForJoint ); + if ( pJoint ) + { + pJoint->storeCurrentXform( pSkinData->mAlternateBindMatrix[i].getTranslation() ); + } + } + } + } + } + if (pool) { const LLTextureEntry* te = facep->getTextureEntry(); diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index f058710a27..a64c633ae4 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -136,7 +136,8 @@ public: /*virtual*/ const LLMatrix4 getRenderMatrix() const; typedef std::map<LLUUID, S32> texture_cost_t; U32 getRenderCost(texture_cost_t &textures) const; - + /*virtual*/ F32 getStreamingCost(); + /*virtual*/ U32 getTriangleCount(); /*virtual*/ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, S32 face = -1, // which face to check, -1 = ALL_SIDES BOOL pick_transparent = FALSE, diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index 62e35a8eef..b53cc5cb02 100644 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -366,7 +366,7 @@ private: bool mSortWearableTypeByName; LLWearableTypeOrder(ETypeListOrder order_priority, bool sort_asset_by_name, bool sort_wearable_by_name); - LLWearableTypeOrder(){}; + LLWearableTypeOrder() : mOrderPriority(ORDER_RANK_UNKNOWN), mSortAssetTypeByName(false), mSortWearableTypeByName(false) {}; }; ETypeListOrder getTypeListOrder(LLAssetType::EType item_type) const; diff --git a/indra/newview/llwearabletype.cpp b/indra/newview/llwearabletype.cpp index b9b48fd55a..fb662ace47 100644 --- a/indra/newview/llwearabletype.cpp +++ b/indra/newview/llwearabletype.cpp @@ -83,8 +83,8 @@ LLWearableDictionary::LLWearableDictionary() addEntry(LLWearableType::WT_SKIRT, new WearableEntry("skirt", "New Skirt", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_SKIRT)); addEntry(LLWearableType::WT_ALPHA, new WearableEntry("alpha", "New Alpha", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_ALPHA)); addEntry(LLWearableType::WT_TATTOO, new WearableEntry("tattoo", "New Tattoo", LLAssetType::AT_CLOTHING, LLInventoryIcon::ICONNAME_CLOTHING_TATTOO)); - addEntry(LLWearableType::WT_INVALID, new WearableEntry("invalid", "Invalid Wearable", LLAssetType::AT_NONE, LLInventoryIcon::ICONNAME_NONE)); - addEntry(LLWearableType::WT_NONE, new WearableEntry("none", "Invalid Wearable", LLAssetType::AT_NONE, LLInventoryIcon::ICONNAME_NONE)); + addEntry(LLWearableType::WT_INVALID, new WearableEntry("invalid", "Invalid Wearable", LLAssetType::AT_NONE, LLInventoryIcon::ICONNAME_INVALID)); + addEntry(LLWearableType::WT_NONE, new WearableEntry("none", "Invalid Wearable", LLAssetType::AT_NONE, LLInventoryIcon::ICONNAME_INVALID)); } // static @@ -100,6 +100,7 @@ const std::string& LLWearableType::getTypeName(LLWearableType::EType type) { const LLWearableDictionary *dict = LLWearableDictionary::getInstance(); const WearableEntry *entry = dict->lookup(type); + if (!entry) return getTypeName(WT_INVALID); return entry->mName; } @@ -108,6 +109,7 @@ const std::string& LLWearableType::getTypeDefaultNewName(LLWearableType::EType t { const LLWearableDictionary *dict = LLWearableDictionary::getInstance(); const WearableEntry *entry = dict->lookup(type); + if (!entry) return getTypeDefaultNewName(WT_INVALID); return entry->mDefaultNewName; } @@ -116,6 +118,7 @@ const std::string& LLWearableType::getTypeLabel(LLWearableType::EType type) { const LLWearableDictionary *dict = LLWearableDictionary::getInstance(); const WearableEntry *entry = dict->lookup(type); + if (!entry) return getTypeLabel(WT_INVALID); return entry->mLabel; } @@ -124,6 +127,7 @@ LLAssetType::EType LLWearableType::getAssetType(LLWearableType::EType type) { const LLWearableDictionary *dict = LLWearableDictionary::getInstance(); const WearableEntry *entry = dict->lookup(type); + if (!entry) return getAssetType(WT_INVALID); return entry->mAssetType; } @@ -132,6 +136,7 @@ LLInventoryIcon::EIconName LLWearableType::getIconName(LLWearableType::EType typ { const LLWearableDictionary *dict = LLWearableDictionary::getInstance(); const WearableEntry *entry = dict->lookup(type); + if (!entry) return getIconName(WT_INVALID); return entry->mIconName; -} +} diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index 5c9633c036..f54a9c3c1a 100644 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -84,36 +84,44 @@ void LLWeb::initClass() // static -void LLWeb::loadURL(const std::string& url) +void LLWeb::loadURL(const std::string& url, const std::string& target, const std::string& uuid) { - if (gSavedSettings.getBOOL("UseExternalBrowser")) + if(target == "_internal") + { + // Force load in the internal browser, as if with a blank target. + loadURLInternal(url, "", uuid); + } + else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external")) { loadURLExternal(url); } else { - loadURLInternal(url); + loadURLInternal(url, target, uuid); } } // static -void LLWeb::loadURLInternal(const std::string &url) +void LLWeb::loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid) { - LLFloaterReg::showInstance("media_browser", url); + LLFloaterMediaBrowser::create(url, target, uuid); } // static -void LLWeb::loadURLExternal(const std::string& url) +void LLWeb::loadURLExternal(const std::string& url, const std::string& uuid) { - loadURLExternal(url, true); + loadURLExternal(url, true, uuid); } // static -void LLWeb::loadURLExternal(const std::string& url, bool async) +void LLWeb::loadURLExternal(const std::string& url, bool async, const std::string& uuid) { + // Act like the proxy window was closed, since we won't be able to track targeted windows in the external browser. + LLViewerMedia::proxyWindowClosed(uuid); + LLSD payload; payload["url"] = url; LLNotificationsUtil::add( "WebLaunchExternalTarget", LLSD(), payload, boost::bind(on_load_url_external_response, _1, _2, async)); diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h index 1119b80bb4..d70086498b 100644 --- a/indra/newview/llweb.h +++ b/indra/newview/llweb.h @@ -49,15 +49,19 @@ public: static void initClass(); /// Load the given url in the user's preferred web browser - static void loadURL(const std::string& url); + static void loadURL(const std::string& url, const std::string& target, const std::string& uuid = LLStringUtil::null); + static void loadURL(const std::string& url) { loadURL(url, LLStringUtil::null); } /// Load the given url in the user's preferred web browser - static void loadURL(const char* url) { loadURL( ll_safe_string(url) ); } + static void loadURL(const char* url, const std::string& target) { loadURL( ll_safe_string(url), target); } + static void loadURL(const char* url) { loadURL( ll_safe_string(url), LLStringUtil::null ); } /// Load the given url in the Second Life internal web browser - static void loadURLInternal(const std::string &url); + static void loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null); + static void loadURLInternal(const std::string &url) { loadURLInternal(url, LLStringUtil::null); } /// Load the given url in the operating system's web browser, async if we want to return immediately /// before browser has spawned - static void loadURLExternal(const std::string& url); - static void loadURLExternal(const std::string& url, bool async); + static void loadURLExternal(const std::string& url) { loadURLExternal(url, LLStringUtil::null); }; + static void loadURLExternal(const std::string& url, const std::string& uuid); + static void loadURLExternal(const std::string& url, bool async, const std::string& uuid = LLStringUtil::null); /// Returns escaped url (eg, " " to "%20") - used by all loadURL methods static std::string escapeURL(const std::string& url); diff --git a/indra/newview/llwebsharing.cpp b/indra/newview/llwebsharing.cpp index 2b9e5cc8cb..43b1a320c3 100644 --- a/indra/newview/llwebsharing.cpp +++ b/indra/newview/llwebsharing.cpp @@ -3,31 +3,25 @@ * @author Aimee * @brief Web Snapshot Sharing * - * $LicenseInfo:firstyear=2010&license=viewergpl$ - * - * Copyright (c) 2010, Linden Research, Inc. - * + * $LicenseInfo:firstyear=2010&license=viewerlgpl$ * 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 + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. * - * 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 + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. * - * 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. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/llwebsharing.h b/indra/newview/llwebsharing.h index 70046ff1d8..ad9c99c224 100644 --- a/indra/newview/llwebsharing.h +++ b/indra/newview/llwebsharing.h @@ -3,31 +3,25 @@ * @author Aimee * @brief Web Snapshot Sharing * - * $LicenseInfo:firstyear=2010&license=viewergpl$ - * - * Copyright (c) 2010, Linden Research, Inc. - * + * $LicenseInfo:firstyear=2010&license=viewerlgpl$ * 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 + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. * - * 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 + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. * - * 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. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index 53eca0d08e..42d682a9ff 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -127,6 +127,7 @@ void LLWorld::destroyClass() LLViewerRegion* region_to_delete = *region_it++; removeRegion(region_to_delete->getHost()); } + LLVOCache::getInstance()->destroyClass() ; LLViewerPartSim::getInstance()->destroyClass(); } @@ -262,6 +263,8 @@ void LLWorld::removeRegion(const LLHost &host) llwarns << "Disabling region " << regionp->getName() << " that agent is in!" << llendl; LLAppViewer::instance()->forceDisconnect(LLTrans::getString("YouHaveBeenDisconnected")); + + regionp->saveObjectCache() ; //force to save objects here in case that the object cache is about to be destroyed. return; } diff --git a/indra/newview/noise.cpp b/indra/newview/noise.cpp index df8922e546..104865ecfc 100644 --- a/indra/newview/noise.cpp +++ b/indra/newview/noise.cpp @@ -36,6 +36,7 @@ #include "llrand.h" + // static #define B 0x100 S32 p[B + B + 2]; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 9ad1df02b8..64922ee991 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -565,6 +565,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) if (LLPipeline::sRenderDeferred) { + samples = llmin(samples, (U32) 8); //cap multisample buffers to 8 samples when rendering deferred //allocate deferred rendering color buffers mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE); mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); @@ -3452,11 +3453,24 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) LLVertexBuffer::unbind(); - if (!LLPipeline::sReflectionRender && !LLPipeline::sRenderDeferred && gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI)) + if (!LLPipeline::sReflectionRender && !LLPipeline::sRenderDeferred) { - // Render debugging beacons. - gObjectList.renderObjectBeacons(); - gObjectList.resetObjectBeacons(); + if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI)) + { + // Render debugging beacons. + gObjectList.renderObjectBeacons(); + gObjectList.resetObjectBeacons(); + } + else + { + // Make sure particle effects disappear + LLHUDObject::renderAllForTimer(); + } + } + else + { + // Make sure particle effects disappear + LLHUDObject::renderAllForTimer(); } LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderGeomEnd"); diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 5ba1fc9b21..b489294f38 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -86,6 +86,9 @@ <color name="LtOrange" value="1 .85 .73 1" /> + <color + name="MdBlue" + value=".07 .38 .51 1" /> <!-- This color name makes potentially unused colors show up bright purple. Leave this here until all Unused? are removed below, otherwise @@ -749,4 +752,7 @@ <color name="ChatTimestampColor" reference="White" /> + <color + name="MenuBarProjectBgColor" + reference="MdBlue" /> </colors> diff --git a/indra/newview/skins/default/textures/ff_edit_mine.tga b/indra/newview/skins/default/textures/ff_edit_mine.tga Binary files differdeleted file mode 100644 index 8f0c35b98f..0000000000 --- a/indra/newview/skins/default/textures/ff_edit_mine.tga +++ /dev/null diff --git a/indra/newview/skins/default/textures/ff_edit_mine_button.tga b/indra/newview/skins/default/textures/ff_edit_mine_button.tga Binary files differdeleted file mode 100644 index 07627a65c5..0000000000 --- a/indra/newview/skins/default/textures/ff_edit_mine_button.tga +++ /dev/null diff --git a/indra/newview/skins/default/textures/ff_edit_theirs.tga b/indra/newview/skins/default/textures/ff_edit_theirs.tga Binary files differdeleted file mode 100644 index 005ada2dea..0000000000 --- a/indra/newview/skins/default/textures/ff_edit_theirs.tga +++ /dev/null diff --git a/indra/newview/skins/default/textures/ff_edit_theirs_button.tga b/indra/newview/skins/default/textures/ff_edit_theirs_button.tga Binary files differdeleted file mode 100644 index 798ef641d3..0000000000 --- a/indra/newview/skins/default/textures/ff_edit_theirs_button.tga +++ /dev/null diff --git a/indra/newview/skins/default/textures/ff_online_status_button.tga b/indra/newview/skins/default/textures/ff_online_status_button.tga Binary files differdeleted file mode 100644 index 9076df6b9e..0000000000 --- a/indra/newview/skins/default/textures/ff_online_status_button.tga +++ /dev/null diff --git a/indra/newview/skins/default/textures/ff_visible_map.tga b/indra/newview/skins/default/textures/ff_visible_map.tga Binary files differdeleted file mode 100644 index a4dad78dad..0000000000 --- a/indra/newview/skins/default/textures/ff_visible_map.tga +++ /dev/null diff --git a/indra/newview/skins/default/textures/ff_visible_map_button.tga b/indra/newview/skins/default/textures/ff_visible_map_button.tga Binary files differdeleted file mode 100644 index 8d13adee3f..0000000000 --- a/indra/newview/skins/default/textures/ff_visible_map_button.tga +++ /dev/null diff --git a/indra/newview/skins/default/textures/ff_visible_online.tga b/indra/newview/skins/default/textures/ff_visible_online.tga Binary files differdeleted file mode 100644 index 74e3a4e318..0000000000 --- a/indra/newview/skins/default/textures/ff_visible_online.tga +++ /dev/null diff --git a/indra/newview/skins/default/textures/ff_visible_online_button.tga b/indra/newview/skins/default/textures/ff_visible_online_button.tga Binary files differdeleted file mode 100644 index 08a6cbedd9..0000000000 --- a/indra/newview/skins/default/textures/ff_visible_online_button.tga +++ /dev/null diff --git a/indra/newview/skins/default/textures/icons/Generic_Group_Large.png b/indra/newview/skins/default/textures/icons/Generic_Group_Large.png Binary files differindex de8a39fc8a..75833eccf3 100644 --- a/indra/newview/skins/default/textures/icons/Generic_Group_Large.png +++ b/indra/newview/skins/default/textures/icons/Generic_Group_Large.png diff --git a/indra/newview/skins/default/textures/icons/Generic_Person_Large.png b/indra/newview/skins/default/textures/icons/Generic_Person_Large.png Binary files differindex 65b0ce8b67..532288b430 100644 --- a/indra/newview/skins/default/textures/icons/Generic_Person_Large.png +++ b/indra/newview/skins/default/textures/icons/Generic_Person_Large.png diff --git a/indra/newview/skins/default/textures/icons/Inv_Invalid.png b/indra/newview/skins/default/textures/icons/Inv_Invalid.png Binary files differnew file mode 100644 index 0000000000..328be104ee --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Inv_Invalid.png diff --git a/indra/newview/skins/default/textures/icons/Inv_Mesh.png b/indra/newview/skins/default/textures/icons/Inv_Mesh.png Binary files differnew file mode 100644 index 0000000000..f1f21f7941 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Inv_Mesh.png diff --git a/indra/newview/skins/default/textures/icons/edit_mine.png b/indra/newview/skins/default/textures/icons/edit_mine.png Binary files differnew file mode 100644 index 0000000000..a0bc7efd25 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/edit_mine.png diff --git a/indra/newview/skins/default/textures/icons/edit_theirs.png b/indra/newview/skins/default/textures/icons/edit_theirs.png Binary files differnew file mode 100644 index 0000000000..ed36ad7cfc --- /dev/null +++ b/indra/newview/skins/default/textures/icons/edit_theirs.png diff --git a/indra/newview/skins/default/textures/icons/pop_up_caution.png b/indra/newview/skins/default/textures/icons/pop_up_caution.png Binary files differnew file mode 100644 index 0000000000..78b681cb33 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/pop_up_caution.png diff --git a/indra/newview/skins/default/textures/icons/see_me_online.png b/indra/newview/skins/default/textures/icons/see_me_online.png Binary files differnew file mode 100644 index 0000000000..52dc2ae74f --- /dev/null +++ b/indra/newview/skins/default/textures/icons/see_me_online.png diff --git a/indra/newview/skins/default/textures/icons/see_on_map.png b/indra/newview/skins/default/textures/icons/see_on_map.png Binary files differnew file mode 100644 index 0000000000..200e649818 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/see_on_map.png diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png Binary files differnew file mode 100644 index 0000000000..50c01062a5 --- /dev/null +++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png Binary files differnew file mode 100644 index 0000000000..bf2065cd37 --- /dev/null +++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png Binary files differnew file mode 100644 index 0000000000..8b48258142 --- /dev/null +++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png Binary files differnew file mode 100644 index 0000000000..09efe779fe --- /dev/null +++ b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 9ebb7dc76c..9460ad7939 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -230,7 +230,8 @@ with the same filename but different name <texture name="Inv_Underpants" file_name="icons/Inv_Underpants.png" preload="false" /> <texture name="Inv_Undershirt" file_name="icons/Inv_Undershirt.png" preload="false" /> <texture name="Inv_Link" file_name="icons/Inv_Link.png" preload="false" /> - + <texture name="Inv_Invalid" file_name="icons/Inv_Invalid.png" preload="false" /> + <texture name="Linden_Dollar_Alert" file_name="widgets/Linden_Dollar_Alert.png"/> <texture name="Linden_Dollar_Background" file_name="widgets/Linden_Dollar_Background.png"/> @@ -359,11 +360,16 @@ with the same filename but different name <texture name="Pause_Off" file_name="icons/Pause_Off.png" preload="false" /> <texture name="Pause_Over" file_name="icons/Pause_Over.png" preload="false" /> <texture name="Pause_Press" file_name="icons/Pause_Press.png" preload="false" /> + + <texture name="Permission_Visible_Online" file_name="icons/see_me_online.png" preload="false" /> + <texture name="Permission_Visible_Map" file_name="icons/see_on_map.png" preload="false" /> + <texture name="Permission_Edit_Objects_Mine" file_name="icons/edit_mine.png" preload="false" /> + <texture name="Permission_Edit_Objects_Theirs" file_name="icons/edit_theirs.png" preload="false" /> + <texture name="Play_Off" file_name="icons/Play_Off.png" preload="false" /> <texture name="Play_Over" file_name="icons/Play_Over.png" preload="false" /> <texture name="Play_Press" file_name="icons/Play_Press.png" preload="false" /> - <texture name="ProgressBar" file_name="widgets/ProgressBar.png" preload="true" scale.left="4" scale.top="10" scale.right="48" scale.bottom="2" /> <texture name="ProgressTrack" file_name="widgets/ProgressTrack.png" preload="true" scale.left="4" scale.top="13" scale.right="148" scale.bottom="2" /> @@ -429,6 +435,12 @@ with the same filename but different name <texture name="SegmentedBtn_Right_Selected_Disabled" file_name="widgets/SegmentedBtn_Right_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="Shirt_Large" file_name="icons/Shirt_Large.png" preload="false" /> + + <texture name="Sidebar_Icon_Dock_Foreground" file_name="taskpanel/Sidebar_Icon_Dock_Foreground.png" preload="false" /> + <texture name="Sidebar_Icon_Dock_Press" file_name="taskpanel/Sidebar_Icon_Dock_Press.png" preload="false" /> + <texture name="Sidebar_Icon_Undock_Foreground" file_name="taskpanel/Sidebar_Icon_Undock_Foreground.png" preload="false" /> + <texture name="Sidebar_Icon_Undock_Press" file_name="taskpanel/Sidebar_Icon_Undock_Press.png" preload="false" /> + <texture name="Shop" file_name="icons/Shop.png" preload="false" /> <texture name="SkipBackward_Off" file_name="icons/SkipBackward_Off.png" preload="false" /> @@ -649,4 +661,13 @@ with the same filename but different name <texture name="buy_over" file_name="widgets/buy_over.png" preload="true" scale.left="2" scale.top="15" scale.right="67" scale.bottom="4"/> <texture name="buy_press" file_name="widgets/buy_press.png" preload="true" scale.left="2" scale.top="15" scale.right="67" scale.bottom="4"/> + <texture name="hint_background" file_name="windows/hint_background.png" preload="false" scale.left="8" scale.top="70" scale.right="195" scale.bottom="11"/> + <texture name="hint_arrow_left" file_name="windows/hint_arrow_left.png" preload="false"/> + <texture name="hint_arrow_right" file_name="windows/hint_arrow_right.png" preload="false"/> + <texture name="hint_arrow_up" file_name="windows/hint_arrow_up.png" preload="false"/> + <texture name="hint_arrow_down" file_name="windows/hint_arrow_down.png" preload="false"/> + <texture name="hint_arrow_lower_left" file_name="windows/hint_arrow_lower_left.png" preload="false"/> + + <texture name="Yellow_Gradient" file_name="windows/yellow_gradient.png"/> + <texture name="Popup_Caution" file_name="icons/pop_up_caution.png"/> </textures> diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_down.png b/indra/newview/skins/default/textures/windows/hint_arrow_down.png Binary files differnew file mode 100644 index 0000000000..ddadef0978 --- /dev/null +++ b/indra/newview/skins/default/textures/windows/hint_arrow_down.png diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_left.png b/indra/newview/skins/default/textures/windows/hint_arrow_left.png Binary files differnew file mode 100644 index 0000000000..2794b967e8 --- /dev/null +++ b/indra/newview/skins/default/textures/windows/hint_arrow_left.png diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png b/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png Binary files differnew file mode 100644 index 0000000000..0dfc99898d --- /dev/null +++ b/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_right.png b/indra/newview/skins/default/textures/windows/hint_arrow_right.png Binary files differnew file mode 100644 index 0000000000..7ac57f805b --- /dev/null +++ b/indra/newview/skins/default/textures/windows/hint_arrow_right.png diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_up.png b/indra/newview/skins/default/textures/windows/hint_arrow_up.png Binary files differnew file mode 100644 index 0000000000..bb3e1c07fa --- /dev/null +++ b/indra/newview/skins/default/textures/windows/hint_arrow_up.png diff --git a/indra/newview/skins/default/textures/windows/hint_background.png b/indra/newview/skins/default/textures/windows/hint_background.png Binary files differnew file mode 100644 index 0000000000..cfac5deacb --- /dev/null +++ b/indra/newview/skins/default/textures/windows/hint_background.png diff --git a/indra/newview/skins/default/textures/windows/yellow_gradient.png b/indra/newview/skins/default/textures/windows/yellow_gradient.png Binary files differnew file mode 100644 index 0000000000..5fd847aaef --- /dev/null +++ b/indra/newview/skins/default/textures/windows/yellow_gradient.png diff --git a/indra/newview/skins/default/xui/da/floater_customize.xml b/indra/newview/skins/default/xui/da/floater_customize.xml deleted file mode 100644 index a47e0d33df..0000000000 --- a/indra/newview/skins/default/xui/da/floater_customize.xml +++ /dev/null @@ -1,530 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="UDSEENDE"> - <tab_container name="customize tab container"> - <text label="Krops Dele" name="body_parts_placeholder"> - Kropsdele - </text> - <panel label="Kropsbygning" name="Shape"> - <button label="Annullér" label_selected="Annullér" name="Revert"/> - <button label="Krop" label_selected="Krop" name="Body"/> - <button label="Hoved" label_selected="Hoved" name="Head"/> - <button label="Øjne" label_selected="Øjne" name="Eyes"/> - <button label="Ører" label_selected="Ører" name="Ears"/> - <button label="Næse" label_selected="Næse" name="Nose"/> - <button label="Mund" label_selected="Mund" name="Mouth"/> - <button label="Kinder" label_selected="Kinder" name="Chin"/> - <button label="Overkrop" label_selected="Overkrop" name="Torso"/> - <button label="Ben" label_selected="Ben" name="Legs"/> - <radio_group name="sex radio"> - <radio_item label="Kvinde" name="radio" value="0"/> - <radio_item label="Mand" name="radio2" value="1"/> - </radio_group> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan ikke redigeres - </text> - <text name="title_loading"> - [DESC]: indlæser... - </text> - <text name="title_not_worn"> - [DESC]: ikke båret - </text> - <text name="path"> - Fundet i [PATH] - </text> - <text name="not worn instructions"> - Vælg en ny kropsbygning ved at trække en sådan fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter 'tage den på'. - </text> - <text name="no modify instructions"> - Du har ikke rettigheder til at redigere denne del. - </text> - <text name="Item Action Label"> - Figur: - </text> - <button label="Lav ny krop" label_selected="Lav ny krop" name="Create New"/> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Gem som..." label_selected="Gem som..." name="Save As"/> - </panel> - <panel label="Hud" name="Skin"> - <button label="Hudfarve" label_selected="Hudfarve" name="Skin Color"/> - <button label="Detaljer" label_selected="Detaljer" name="Face Detail"/> - <button label="Sminke" label_selected="Sminke" name="Makeup"/> - <button label="Kropsdetaljer" label_selected="Kropsdetaljer" name="Body Detail"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan ikke redigeres - </text> - <text name="title_loading"> - [DESC]: indlæser... - </text> - <text name="title_not_worn"> - [DESC]: ikke båret - </text> - <text name="path"> - Fundet i [PATH] - </text> - <text name="not worn instructions"> - Vælg en ny hud ved at trække en sådan fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter 'tage den på'. - </text> - <text name="no modify instructions"> - Du har ikke rettigheder til at redigere denne del. - </text> - <text name="Item Action Label"> - Hud: - </text> - <texture_picker label="Tatoveringer hoved" name="Head Tattoos" tool_tip="Klik for at vælge et billede" width="98"/> - <texture_picker label="Tatover. overkrop" name="Upper Tattoos" tool_tip="Klik for at vælge et billede" width="98"/> - <texture_picker label="Tatover. underkrop" name="Lower Tattoos" tool_tip="Klik for at vælge et billede" width="98"/> - <button label="Lav ny hud" label_selected="Lav nyt hud" name="Create New"/> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Gem som..." label_selected="Gem som..." name="Save As"/> - <button label="Annullér" label_selected="Annullér" name="Revert"/> - </panel> - <panel label="Hår" name="Hair"> - <button label="Farve" label_selected="Farve" name="Color"/> - <button label="Stil" label_selected="Stil" name="Style"/> - <button label="Øjenbryn" label_selected="Øjenbryn" name="Eyebrows"/> - <button label="Skæg" label_selected="Skæg" name="Facial"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: kan ikke redigeres - </text> - <text name="title_loading"> - [DESC]: indlæser... - </text> - <text name="title_not_worn"> - [DESC]: ikke båret - </text> - <text name="path"> - Fundet i [PATH] - </text> - <text name="not worn instructions"> - Vælg et nyt hår ved at trække et sådant fra din beholdning over på din avatar. Du kan også oprette et fra bunden og bagefter 'tage det på'. - </text> - <text name="no modify instructions"> - Du har ikke rettigheder til at redigere denne del. - </text> - <text name="Item Action Label"> - Hår: - </text> - <texture_picker label="Tekstur" name="Texture" tool_tip="Klik for at vælge et billede"/> - <button label="Lav nyt hår" label_selected="Lav nyt hår" name="Create New"/> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Gem som..." label_selected="Gem som..." name="Save As"/> - <button label="Annullér" label_selected="Annullér" name="Revert"/> - </panel> - <panel label="Øjne" name="Eyes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan ikke redigeres - </text> - <text name="title_loading"> - [DESC]: indlæser... - </text> - <text name="title_not_worn"> - [DESC]: ikke båret - </text> - <text name="path"> - Fundet i [PATH] - </text> - <text name="not worn instructions"> - Vælg et nyt sæt øjne ved at trække et sådant par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter 'tage dem på'. - </text> - <text name="no modify instructions"> - Du har ikke rettigheder til at redigere denne del. - </text> - <text name="Item Action Label"> - Øjne: - </text> - <texture_picker label="Iris" name="Iris" tool_tip="Klik for at vælge et billede"/> - <button label="Lav nye øjne" label_selected="Lav nye øjne" name="Create New"/> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Gem som..." label_selected="Gem som..." name="Save As"/> - <button label="Annullér" label_selected="Annullér" name="Revert"/> - </panel> - <text label="Tøje" name="clothes_placeholder"> - Tøj - </text> - <panel label="Trøje" name="Shirt"> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/> - <color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> - <button label="Tag af" label_selected="Tag af" name="Take Off"/> - <button label="Lav ny trøje" label_selected="Lav ny trøje" name="Create New"/> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Gem som..." label_selected="Gem som..." name="Save As"/> - <button label="Annullér" label_selected="Annullér" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan ikke redigeres - </text> - <text name="title_loading"> - [DESC]: indlæser... - </text> - <text name="title_not_worn"> - [DESC]: ikke båret - </text> - <text name="path"> - Fundet i [PATH] - </text> - <text name="not worn instructions"> - Vælg en ny trøje ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter 'tage den på'. - </text> - <text name="no modify instructions"> - Du har ikke rettigheder til at redigere denne del. - </text> - <text name="Item Action Label"> - Trøje: - </text> - </panel> - <panel label="Bukser" name="Pants"> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/> - <color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> - <button label="Tag af" label_selected="Tag af" name="Take Off"/> - <button label="Lav nye bukser" label_selected="Lav nye bukser" name="Create New"/> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Gem som..." label_selected="Gem som..." name="Save As"/> - <button label="Annullér" label_selected="Annullér" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan ikke redigeres - </text> - <text name="title_loading"> - [DESC]: indlæser... - </text> - <text name="title_not_worn"> - [DESC]: ikke båret - </text> - <text name="path"> - Fundet i [PATH] - </text> - <text name="not worn instructions"> - Vælg et nyt par bukser ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter 'tage dem på'. - </text> - <text name="no modify instructions"> - Du har ikke rettigheder til at redigere denne del. - </text> - <text name="Item Action Label"> - Bukser: - </text> - </panel> - <panel label="Sko" name="Shoes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan ikke redigeres - </text> - <text name="title_loading"> - [DESC]: indlæser... - </text> - <text name="title_not_worn"> - [DESC]: ikke båret - </text> - <text name="path"> - Fundet i [PATH] - </text> - <text name="not worn instructions"> - Vælg et nyt par sko ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter 'tage dem på'. - </text> - <button label="Lav nye sko" label_selected="Lav nye sko" name="Create New"/> - <text name="no modify instructions"> - Du har ikke rettigheder til at redigere denne del. - </text> - <text name="Item Action Label"> - Sko: - </text> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/> - <color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> - <button label="Tag af" label_selected="Tag af" name="Take Off"/> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Gem som..." label_selected="Gem som..." name="Save As"/> - <button label="Annullér" label_selected="Annullér" name="Revert"/> - </panel> - <panel label="Strømper" name="Socks"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan ikke redigeres - </text> - <text name="title_loading"> - [DESC]: indlæser... - </text> - <text name="title_not_worn"> - [DESC]: ikke båret - </text> - <text name="path"> - Fundet i [PATH] - </text> - <text name="not worn instructions"> - Vælg et nyt par sokker ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter 'tage dem på'. - </text> - <button label="Lav nye strømper" label_selected="Lav nye strømper" name="Create New"/> - <text name="no modify instructions"> - Du har ikke rettigheder til at redigere denne del. - </text> - <text name="Item Action Label"> - Strømper: - </text> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/> - <color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> - <button label="Tag af" label_selected="Tag af" name="Take Off"/> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Gem som..." label_selected="Gem som..." name="Save As"/> - <button label="Annullér" label_selected="Annullér" name="Revert"/> - </panel> - <panel label="Jakke" name="Jacket"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan ikke redigeres - </text> - <text name="title_loading"> - [DESC]: indlæser... - </text> - <text name="title_not_worn"> - [DESC]: ikke båret - </text> - <text name="path"> - Fundet i [PATH] - </text> - <text name="not worn instructions"> - Vælg en ny jakke ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter 'tage den på'. - </text> - <button label="Lav ny jakke" label_selected="Lav ny jakke" name="Create New"/> - <text name="no modify instructions"> - Du har ikke rettigheder til at redigere denne del. - </text> - <text name="Item Action Label"> - Jakke: - </text> - <texture_picker label="Stof øverst" name="Upper Fabric" tool_tip="Klik for at vælge et billede"/> - <texture_picker label="Stof nederst" name="Lower Fabric" tool_tip="Klik for at vælge et billede"/> - <color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> - <button label="Tag af" label_selected="Tag af" name="Take Off"/> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Gem som..." label_selected="Gem som..." name="Save As"/> - <button label="Annullér" label_selected="Annullér" name="Revert"/> - </panel> - <panel label="Handsker" name="Gloves"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan ikke redigeres - </text> - <text name="title_loading"> - [DESC]: indlæser... - </text> - <text name="title_not_worn"> - [DESC]: ikke båret - </text> - <text name="path"> - Fundet i [PATH] - </text> - <text name="not worn instructions"> - Vælg et sæt nye handsker ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter 'tage dem på'. - </text> - <button label="Lav nye handsker" label_selected="Lav nye handsker" name="Create New"/> - <text name="no modify instructions"> - Du har ikke rettigheder til at redigere denne del. - </text> - <text name="Item Action Label"> - Handsker: - </text> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/> - <color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> - <button label="Tag af" label_selected="Tag af" name="Take Off"/> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Gem som..." label_selected="Gem som..." name="Save As"/> - <button label="Annullér" label_selected="Annullér" name="Revert"/> - </panel> - <panel label="Undertrøje" name="Undershirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan ikke redigeres - </text> - <text name="title_loading"> - [DESC]: indlæser... - </text> - <text name="title_not_worn"> - [DESC]: ikke båret - </text> - <text name="path"> - Fundet i [PATH] - </text> - <text name="not worn instructions"> - Vælg en ny undertrøje ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter 'tage den på'. - </text> - <button label="Lav ny undertrøje" label_selected="Lav ny undertrøje" name="Create New"/> - <text name="no modify instructions"> - Du har ikke rettigheder til at redigere denne del. - </text> - <text name="Item Action Label"> - Undertrøje: - </text> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/> - <color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> - <button label="Tag af" label_selected="Tag af" name="Take Off"/> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Gem som..." label_selected="Gem som..." name="Save As"/> - <button label="Annullér" label_selected="Annullér" name="Revert"/> - </panel> - <panel label="Underbukser" name="Underpants"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan ikke redigeres - </text> - <text name="title_loading"> - [DESC]: indlæser... - </text> - <text name="title_not_worn"> - [DESC]: ikke båret - </text> - <text name="path"> - Fundet i [PATH] - </text> - <text name="not worn instructions"> - Vælg et nyt par underbukser ved at trække et par fra din beholdning over på din avatar. Du kan også oprette et par fra bunden og bagefter 'tage dem på'. - </text> - <button label="Lav nye underbukser" label_selected="Lav nye underbukser" name="Create New"/> - <text name="no modify instructions"> - Du har ikke rettigheder til at redigere denne del. - </text> - <text name="Item Action Label"> - Underbukser: - </text> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/> - <color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> - <button label="Tag af" label_selected="Tag af" name="Take Off"/> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Gem som..." label_selected="Gem som..." name="Save As"/> - <button label="Annullér" label_selected="Annullér" name="Revert"/> - </panel> - <panel label="Nederdel" name="Skirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan ikke redigeres - </text> - <text name="title_loading"> - [DESC]: indlæser... - </text> - <text name="title_not_worn"> - [DESC]: ikke båret - </text> - <text name="path"> - Fundet i [PATH] - </text> - <text name="not worn instructions"> - Vælg en ny nederdel ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter 'tage den på'. - </text> - <button label="Lav ny nederdel" label_selected="Lav ny nederdel" name="Create New"/> - <text name="no modify instructions"> - Du har ikke rettigheder til at redigere denne del. - </text> - <text name="Item Action Label"> - Nederdel: - </text> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik for at vælge et billede"/> - <color_swatch label="Farve" name="Color/Tint" tool_tip="Klik for at åbne farvevælger"/> - <button label="Tag af" label_selected="Tag af" name="Take Off"/> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Gem som..." label_selected="Gem som..." name="Save As"/> - <button label="Annullér" label_selected="Annullér" name="Revert"/> - </panel> - <panel label="Tatovering" name="Tattoo"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: kan ikke ændre - </text> - <text name="title_loading"> - [DESC]: indlæser... - </text> - <text name="title_not_worn"> - [DESC]: ikke båret - </text> - <text name="path"> - Placeret i [PATH] - </text> - <text name="not worn instructions"> - Vælg en ny tatovering ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter 'tage den på'. - </text> - <button label="lav ny tatovering" label_selected="Lav ny tatovering" name="Create New"/> - <text name="no modify instructions"> - Du har ikke rettigheder til at ændre denne. - </text> - <text name="Item Action Label"> - Tatovering: - </text> - <texture_picker label="Tatovering - hovede" name="Head Tattoo" tool_tip="Klik for at vælge et billede"/> - <texture_picker label="Øvre tatovering" name="Upper Tattoo" tool_tip="Klik for at vælge et billede"/> - <texture_picker label="Nedre tatovering" name="Lower Tattoo" tool_tip="Klik for at vælge et billede"/> - <button label="Tag af" label_selected="Tag af" name="Take Off"/> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Gem som..." label_selected="Gem som..." name="Save As"/> - <button label="Vend tilbage" label_selected="Vend tilbage" name="Revert"/> - </panel> - <panel label="Alpha" name="Alpha"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: kan ikke ændre - </text> - <text name="title_loading"> - [DESC]: indlæser... - </text> - <text name="title_not_worn"> - [DESC]: ikke båret - </text> - <text name="path"> - Placeret i [PATH] - </text> - <text name="not worn instructions"> - Vælg en ny 'alpha maske' ved at trække en fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter 'tage den på'. - </text> - <button label="Lav ny "Alpha"" label_selected="Lav ny "Alpha"" name="Create New"/> - <text name="no modify instructions"> - Du har ikke rettigheder til at ændre denne. - </text> - <text name="Item Action Label"> - Alpha: - </text> - <texture_picker label="Alpha - nedre" name="Lower Alpha" tool_tip="Klik for at vælge et billede"/> - <texture_picker label="Øvre alpha" name="Upper Alpha" tool_tip="Klik for at vælge et billede"/> - <texture_picker label="Alpha - hoved" name="Head Alpha" tool_tip="Klik for at vælge et billede"/> - <texture_picker label="Alpha - øjne" name="Eye Alpha" tool_tip="Klik for at vælge et billede"/> - <texture_picker label="Alpha - hår" name="Hair Alpha" tool_tip="Klik for at vælge et billede"/> - <button label="Tag af" label_selected="Tag af" name="Take Off"/> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Gem som..." label_selected="Gem som..." name="Save As"/> - <button label="Vend tilbage" label_selected="Vend tilbage" name="Revert"/> - </panel> - </tab_container> - <scroll_container name="panel_container"/> - <button label="Script info" label_selected="Script info" name="script_info" tool_tip="Vis scripts vedhæftet på din avatar"/> - <button label="Lav sæt" label_selected="Lav sæt" name="make_outfit_btn"/> - <button label="Annullér" label_selected="Annullér" name="Cancel"/> - <button label="OK" label_selected="OK" name="Ok"/> -</floater> diff --git a/indra/newview/skins/default/xui/da/floater_device_settings.xml b/indra/newview/skins/default/xui/da/floater_device_settings.xml deleted file mode 100644 index 06d431a8f9..0000000000 --- a/indra/newview/skins/default/xui/da/floater_device_settings.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_device_settings" title="STEMME CHAT ENHEDSOPSÆTNING"/> diff --git a/indra/newview/skins/default/xui/da/floater_im.xml b/indra/newview/skins/default/xui/da/floater_im.xml deleted file mode 100644 index 776bc9ab13..0000000000 --- a/indra/newview/skins/default/xui/da/floater_im.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<multi_floater name="im_floater" title="Personlig samtale (IM)"> - <string name="only_user_message"> - Du er den eneste beboer i denne session. - </string> - <string name="offline_message"> - [FIRST] [LAST] er ikke logget på. - </string> - <string name="invite_message"> - Tryk på [BUTTON NAME] knappen for at acceptére/tilslutte til denne stemme chat. - </string> - <string name="muted_message"> - Du har blokeret denne beboer. Hvis du sender en besked til beboeren vil dette automatisk medføre fjernelse af blokeringen - </string> - <string name="generic_request_error"> - Kunne ikke etablere forbindelse, prøv igen senere - </string> - <string name="insufficient_perms_error"> - Du har ikke de fornødne rettigheder. - </string> - <string name="session_does_not_exist_error"> - Denne samtale er lukket ned - </string> - <string name="no_ability_error"> - Du har ikke den mulighed. - </string> - <string name="not_a_mod_error"> - Du er ikke moderator for denne samtale. - </string> - <string name="muted_error"> - Du er blevet "blokeret". - </string> - <string name="add_session_event"> - Kunne ikke tilføje beboere til chat session med [RECIPIENT]. - </string> - <string name="message_session_event"> - Ikke muligt at sende din besked til samtalen med [RECIPIENT]. - </string> - <string name="removed_from_group"> - Du er blevet fjernet fra gruppen. - </string> - <string name="close_on_no_ability"> - Du har ikke længere mulighed for at deltage i samtalen - </string> -</multi_floater> diff --git a/indra/newview/skins/default/xui/da/floater_im_session.xml b/indra/newview/skins/default/xui/da/floater_im_session.xml index aa7df6ad2b..16df7e4b03 100644 --- a/indra/newview/skins/default/xui/da/floater_im_session.xml +++ b/indra/newview/skins/default/xui/da/floater_im_session.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="panel_im"> <layout_stack name="im_panels"> - <layout_panel label="IM kontrol panel" name="panel_im_control_panel"/> <layout_panel> <line_editor label="Til" name="chat_editor"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/da/floater_my_friends.xml b/indra/newview/skins/default/xui/da/floater_my_friends.xml deleted file mode 100644 index c3db53ce63..0000000000 --- a/indra/newview/skins/default/xui/da/floater_my_friends.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_my_friends" title="KONTAKTER"> - <tab_container name="friends_and_groups"> - <panel label="Venner" name="friends_panel"/> - <panel label="Grupper" name="groups_panel"/> - </tab_container> -</floater> diff --git a/indra/newview/skins/default/xui/da/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/da/floater_outfit_save_as.xml deleted file mode 100644 index 0bcb96b151..0000000000 --- a/indra/newview/skins/default/xui/da/floater_outfit_save_as.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title="Gem sæt"> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Annullér" label_selected="Annullér" name="Cancel"/> - <text name="Save item as:"> - Gem hvad jeg har på som et nyt sæt: - </text> - <line_editor name="name ed"> - [DESC] (ny) - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/da/floater_preview_classified.xml b/indra/newview/skins/default/xui/da/floater_preview_classified.xml deleted file mode 100644 index bc232f3e9f..0000000000 --- a/indra/newview/skins/default/xui/da/floater_preview_classified.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="classified_preview" title="ANNONCE INFORMATION"> - <floater.string name="Title"> - Annonce: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/da/floater_preview_event.xml b/indra/newview/skins/default/xui/da/floater_preview_event.xml deleted file mode 100644 index 3e870b58ae..0000000000 --- a/indra/newview/skins/default/xui/da/floater_preview_event.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="event_preview" title="EVENT INFORMATION"> - <floater.string name="Title"> - Event: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml deleted file mode 100644 index 9892a92e4c..0000000000 --- a/indra/newview/skins/default/xui/da/floater_preview_gesture_info.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="BEVÆGELSE GENVEJ"/> diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml deleted file mode 100644 index 4d4cca1d90..0000000000 --- a/indra/newview/skins/default/xui/da/floater_preview_gesture_shortcut.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="GENVEJ BEVÆGELSER"> - <text name="trigger_label"> - Chat: - </text> - <text name="key_label"> - Tastatur: - </text> - <combo_box label="Intet" name="modifier_combo"/> - <combo_box label="Intet" name="key_combo"/> - <text name="replace_text" tool_tip="Erstat udløser ord med disse ord. For eksempel uløser "hello" erstat med "hej" vil ændre chat 'Jeg ville bare sige hello' til 'Jeg ville bare sige hej' samtidig med bevægelsen afspilles!"> - Erstat: - </text> - <line_editor name="replace_editor" tool_tip="Erstat udløser ord med disse ord. For eksempel uløser "hello" erstat med "hej" vil ændre chat 'Jeg ville bare sige hello' til 'Jeg ville bare sige hej' samtidig med bevægelsen afspilles!"/> -</floater> diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml deleted file mode 100644 index 9892a92e4c..0000000000 --- a/indra/newview/skins/default/xui/da/floater_preview_gesture_steps.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="BEVÆGELSE GENVEJ"/> diff --git a/indra/newview/skins/default/xui/da/floater_statistics.xml b/indra/newview/skins/default/xui/da/floater_statistics.xml deleted file mode 100644 index 8c33f3ecb3..0000000000 --- a/indra/newview/skins/default/xui/da/floater_statistics.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="STATISTIK"/> diff --git a/indra/newview/skins/default/xui/da/floater_voice_controls.xml b/indra/newview/skins/default/xui/da/floater_voice_controls.xml index 2e59dfd649..4c956f13a7 100644 --- a/indra/newview/skins/default/xui/da/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/da/floater_voice_controls.xml @@ -19,10 +19,12 @@ <layout_panel name="my_panel"> <text name="user_text" value="Min avatar:"/> </layout_panel> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="Forlad opkald" name="leave_call_btn"/> - </layout_panel> - </layout_stack> + <layout_panel name="leave_call_panel"> + <layout_stack name="voice_effect_and_leave_call_stack"> + <layout_panel name="leave_call_btn_panel"> + <button label="Forlad opkald" name="leave_call_btn"/> + </layout_panel> + </layout_stack> + </layout_panel> </layout_stack> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml deleted file mode 100644 index 17d5b9c205..0000000000 --- a/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title=""> - <button label="Gem" label_selected="Gem" name="Save"/> - <button label="Annullér" label_selected="Annullér" name="Cancel"/> - <text name="Save item as:"> - Gem genstand i min beholdning som: - </text> - <line_editor name="name ed"> - Ny [DESC] - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/da/menu_avatar_self.xml b/indra/newview/skins/default/xui/da/menu_avatar_self.xml index ec85bd05a5..af4fdcc154 100644 --- a/indra/newview/skins/default/xui/da/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/da/menu_avatar_self.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Self Pie"> <menu_item_call label="Stå op" name="Stand Up"/> - <context_menu label="Tag af ▶" name="Take Off >"> - <context_menu label="Tøj ▶" name="Clothes >"> + <context_menu label="Tag af" name="Take Off >"> + <context_menu label="Tøj" name="Clothes >"> <menu_item_call label="Trøje" name="Shirt"/> <menu_item_call label="Bukser" name="Pants"/> <menu_item_call label="Nederdel" name="Skirt"/> @@ -16,8 +16,8 @@ <menu_item_call label="Alpha" name="Self Alpha"/> <menu_item_call label="Alt tøj" name="All Clothes"/> </context_menu> - <context_menu label="HUD ▶" name="Object Detach HUD"/> - <context_menu label="Tag af ▶" name="Object Detach"/> + <context_menu label="HUD" name="Object Detach HUD"/> + <context_menu label="Tag af" name="Object Detach"/> <menu_item_call label="Tag alt af" name="Detach All"/> </context_menu> <menu_item_call label="Skift sæt" name="Chenge Outfit"/> diff --git a/indra/newview/skins/default/xui/da/menu_object.xml b/indra/newview/skins/default/xui/da/menu_object.xml index f4f7eb0af8..3c96d62ce3 100644 --- a/indra/newview/skins/default/xui/da/menu_object.xml +++ b/indra/newview/skins/default/xui/da/menu_object.xml @@ -10,12 +10,12 @@ <menu_item_call label="Stå op" name="Object Stand Up"/> <menu_item_call label="Objekt profil" name="Object Inspect"/> <menu_item_call label="Zoom In" name="Zoom In"/> - <context_menu label="Tag på ▶" name="Put On"> + <context_menu label="Tag på" name="Put On"> <menu_item_call label="Tag på" name="Wear"/> - <context_menu label="Vedhæft ▶" name="Object Attach"/> - <context_menu label="Vedhæft HUD ▶" name="Object Attach HUD"/> + <context_menu label="Vedhæft" name="Object Attach"/> + <context_menu label="Vedhæft HUD" name="Object Attach HUD"/> </context_menu> - <context_menu label="Fjern ▶" name="Remove"> + <context_menu label="Fjern" name="Remove"> <menu_item_call label="Rapportér misbrug" name="Report Abuse..."/> <menu_item_call label="Blokér" name="Object Mute"/> <menu_item_call label="Returnér" name="Return..."/> diff --git a/indra/newview/skins/default/xui/da/menu_participant_list.xml b/indra/newview/skins/default/xui/da/menu_participant_list.xml index 2bd28e10de..0069dcbacb 100644 --- a/indra/newview/skins/default/xui/da/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/da/menu_participant_list.xml @@ -11,7 +11,7 @@ <menu_item_check label="Se person ikoner" name="View Icons"/> <menu_item_check label="Blokér stemme" name="Block/Unblock"/> <menu_item_check label="Blokér tekst" name="MuteText"/> - <context_menu label="Moderator muligheder >" name="Moderator Options"> + <context_menu label="Moderator muligheder" name="Moderator Options"> <menu_item_check label="Tillad tekst chat" name="AllowTextChat"/> <menu_item_call label="Sluk for denne deltager" name="ModerateVoiceMuteSelected"/> <menu_item_call label="Fjern slukning for denne deltager" name="ModerateVoiceUnMuteSelected"/> diff --git a/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml index 00055c8932..0845f19b15 100644 --- a/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml @@ -5,8 +5,8 @@ <menu_item_call label="Tilføj" name="wear_add"/> <menu_item_call label="Tag af" name="take_off_or_detach"/> <menu_item_call label="Tag af" name="detach"/> - <context_menu label="Vedhæft til ▶" name="wearable_attach_to"/> - <context_menu label="Vedhæft på HUD ▶" name="wearable_attach_to_hud"/> + <context_menu label="Vedhæft til" name="wearable_attach_to"/> + <context_menu label="Vedhæft på HUD" name="wearable_attach_to_hud"/> <menu_item_call label="Tag af" name="take_off"/> <menu_item_call label="Redigér" name="edit"/> <menu_item_call label="Objekt profil" name="object_profile"/> diff --git a/indra/newview/skins/default/xui/da/panel_audio_device.xml b/indra/newview/skins/default/xui/da/panel_audio_device.xml deleted file mode 100644 index f6d817540e..0000000000 --- a/indra/newview/skins/default/xui/da/panel_audio_device.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="device_settings"> - <text name="Audio Devices"> - Lydenheder - </text> - <text name="Input device (microphone):"> - Input enhed (mikrofon): - </text> - <text name="Output device (speakers):"> - Output enhed (højtalere): - </text> - <text name="Input level:"> - Input niveau - </text> - <text_editor name="voice_intro_text1"> - Med denne skyder kan du regulere hvor højt du lyder i forhold til andre beboere. for at test input niveau kan du blot tale i mikrofon. - </text_editor> - <volume_slider name="mic_volume_slider" tool_tip="Ændre lydstyrke med denne skyder" /> - <text name="wait_text"> - Vent venligst - </text> - <string name="default_text"> - Standard - </string> -</panel> diff --git a/indra/newview/skins/default/xui/da/panel_friends.xml b/indra/newview/skins/default/xui/da/panel_friends.xml deleted file mode 100644 index a1a25bdc77..0000000000 --- a/indra/newview/skins/default/xui/da/panel_friends.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="friends"> - <string name="Multiple"> - Flere venner - </string> - <scroll_list name="friend_list" tool_tip="Hold Shift eller Ctrl nede imens du klikker for at vælge flere venner"> - <column name="icon_online_status" tool_tip="Online status"/> - <column label="Name" name="friend_name" tool_tip="Navn"/> - <column name="icon_visible_online" tool_tip="Venner kan se at du er online"/> - <column name="icon_visible_map" tool_tip="Venner kan finde dig på kortet"/> - <column name="icon_edit_mine" tool_tip="Venner kan rette i, slette eller tage dine objekter"/> - <column name="icon_edit_theirs" tool_tip="Du kan rette i denne vens objekter"/> - </scroll_list> - <button label="IM" name="im_btn" tool_tip="Skriv en personlig besked (IM)"/> - <button label="Profil" name="profile_btn" tool_tip="Vis billede, grupper og anden information"/> - <button label="Teleport" name="offer_teleport_btn" tool_tip="Tilbyd denne ven at blive teleporteret til din nuværende position"/> - <button label="Betal" name="pay_btn" tool_tip="Giv Linden dollars (L$) til denne ven"/> - <button label="Fjern" name="remove_btn" tool_tip="Fjern denne beboer fra din venneliste"/> - <button label="Tilføj" name="add_btn" tool_tip="Tilbyd venskab til en beboer"/> -</panel> diff --git a/indra/newview/skins/default/xui/da/panel_groups.xml b/indra/newview/skins/default/xui/da/panel_groups.xml deleted file mode 100644 index 5877226e57..0000000000 --- a/indra/newview/skins/default/xui/da/panel_groups.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="groups"> - <scroll_list name="group list"> - <column label="" name="name" /> - </scroll_list> - <text name="groupdesc" width="300"> - Din nuværende aktive gruppe er fremhævet i listen. - </text> - <text name="groupcount" width="300"> - Du er medlem i [COUNT] grupper (ud af maksimalt [MAX]). - </text> - <button label="IM/Opkald" name="IM" tool_tip="Åbner IM session" /> - <button label="Info" name="Info" /> - <button label="Aktivér" name="Activate" /> - <button label="Forlad" name="Leave" /> - <button label="Opret..." name="Create" /> - <button label="Søg..." name="Search..." /> -</panel> diff --git a/indra/newview/skins/default/xui/da/panel_nearby_chat.xml b/indra/newview/skins/default/xui/da/panel_nearby_chat.xml deleted file mode 100644 index 7f94345976..0000000000 --- a/indra/newview/skins/default/xui/da/panel_nearby_chat.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<!-- All our XML is utf-8 encoded. --> -<panel name="nearby_chat"> - <panel name="chat_caption"> - <text name="sender_name"> - CHAT NÆRVED - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/da/panel_notes.xml b/indra/newview/skins/default/xui/da/panel_notes.xml index 5b3a2d0906..00128497ba 100644 --- a/indra/newview/skins/default/xui/da/panel_notes.xml +++ b/indra/newview/skins/default/xui/da/panel_notes.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Noter & Privatliv" name="panel_notes"> <layout_stack name="layout"> - <panel name="notes_stack"> + <layout_panel name="notes_stack"> <scroll_container name="profile_scroll"> <panel name="profile_scroll_panel"> <text name="status_message" value="Min private noter:"/> @@ -11,13 +11,13 @@ <check_box label="Editére, slette og tage mine objekter" name="objects_check"/> </panel> </scroll_container> - </panel> - <panel name="notes_buttons_panel"> + </layout_panel> + <layout_panel name="notes_buttons_panel"> <button label="Tilføj ven" name="add_friend" tool_tip="Tilbyd venskab til beboer"/> <button label="IM" name="im" tool_tip="Åben session med personlig besked (IM)"/> <button label="Kald" name="call" tool_tip="Opkald til denne beboer"/> <button label="Kort" name="show_on_map_btn" tool_tip="Vis beboer på kort"/> <button label="Teleport" name="teleport" tool_tip="Tilbyd teleport"/> - </panel> + </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_online_status.xml b/indra/newview/skins/default/xui/da/panel_online_status.xml deleted file mode 100644 index fdc489f375..0000000000 --- a/indra/newview/skins/default/xui/da/panel_online_status.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="friend_online_status" name="friend_online_status"/> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml index 20a376f152..bea106bf28 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml @@ -56,4 +56,27 @@ <radio_item label="Separate vinduer" name="radio" value="0"/> <radio_item label="Faner" name="radio2" value="1"/> </radio_group> + <check_box label="Oversæt Chat" name="translate_chat_checkbox" /> + <text name="translate_language_text" width="110"> + Chat Sprog: + </text> + <combo_box name="translate_language_combobox" width="146"> + <combo_box.item label="System standard" name="System Default Language"/> + <combo_box.item label="English (Engelsk)" name="English"/> + <combo_box.item label="Dansk" name="Danish"/> + <combo_box.item label="Deutsch (Tysk)" name="German"/> + <combo_box.item label="Español (Spansk)" name="Spanish"/> + <combo_box.item label="Français (Fransk)" name="French"/> + <combo_box.item label="Italiano (Italiensk)" name="Italian" /> + <combo_box.item label="Magyar (Ungarsk)" name="Hungarian" /> + <combo_box.item label="Nederlands (Hollandsk)" name="Dutch" /> + <combo_box.item label="Polski (Polsk)" name="Polish" /> + <combo_box.item label="Português (Portugisisk)" name="Portugese" /> + <combo_box.item label="Русский (Russisk)" name="Russian" /> + <combo_box.item label="Türkçe (Tyrkisk)" name="Turkish" /> + <combo_box.item label="Українська (Ukrainsk)" name="Ukrainian" /> + <combo_box.item label="中文 (简体) (Kinesisk)" name="Chinese" /> + <combo_box.item label="日本語 (Japansk)" name="Japanese" /> + <combo_box.item label="한국어 (Koreansk)" name="Korean" /> + </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_general.xml b/indra/newview/skins/default/xui/da/panel_preferences_general.xml index e70cb48262..6a85cf4aae 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_general.xml @@ -11,7 +11,7 @@ <combo_box.item label="Español (Spansk) - Beta" name="Spanish"/> <combo_box.item label="Français (Fransk) - Beta" name="French"/> <combo_box.item label="Polski (Polsk) - Beta" name="Polish"/> - <combo_box.item label="Portugués (Portugisisk) - Beta" name="Portugese"/> + <combo_box.item label="Português (Portugisisk) - Beta" name="Portugese"/> <combo_box.item label="日本語 (Japansk) - Beta" name="(Japanese)"/> </combo_box> <text name="language_textbox2"> diff --git a/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml index d3b3c7e21e..cfb32500c6 100644 --- a/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml @@ -13,9 +13,9 @@ 50 </string> <layout_stack name="progress_indicator_area"> - <panel name="media_progress_indicator"> + <layout_panel name="media_progress_indicator"> <progress_bar name="media_progress_bar" tool_tip="Medie hentes"/> - </panel> + </layout_panel> </layout_stack> <layout_stack name="media_controls"> <layout_panel name="back"> diff --git a/indra/newview/skins/default/xui/da/panel_region_general_layout.xml b/indra/newview/skins/default/xui/da/panel_region_general_layout.xml deleted file mode 100644 index f3c32d6169..0000000000 --- a/indra/newview/skins/default/xui/da/panel_region_general_layout.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Region" name="General"> - <text name="region_text_lbl"> - Region: - </text> - <text name="region_text"> - ukendt - </text> - <text name="version_channel_text_lbl"> - Version: - </text> - <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"/> - <check_box label="Blokér for flyvning" name="block_fly_check"/> - <check_box label="Tillad skader" name="allow_damage_check"/> - <check_box label="Begræns skubning" name="restrict_pushobject"/> - <check_box label="Tillad at sælge land" name="allow_land_resell_check"/> - <check_box label="Tillad at samle/dele land" name="allow_parcel_changes_check"/> - <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"/> - <spinner label="Max besøgende" name="agent_limit_spin"/> - <spinner label="Objekt bonus" name="object_bonus_spin"/> - <text label="Rating" name="access_text"> - Rating: - </text> - <combo_box label="Moderat" name="access_combo"> - <combo_box.item label="Voksent" name="Adult"/> - <combo_box.item label="Moderat" name="Mature"/> - <combo_box.item label="Generel" name="PG"/> - </combo_box> - <button label="Gem" name="apply_btn"/> - <button label="Teleportér en beboer hjem..." name="kick_btn"/> - <button label="Teleportér 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/strings.xml b/indra/newview/skins/default/xui/da/strings.xml index 3152661fd4..712f6f8b50 100644 --- a/indra/newview/skins/default/xui/da/strings.xml +++ b/indra/newview/skins/default/xui/da/strings.xml @@ -1117,6 +1117,9 @@ <string name="InvFolder Favorite"> Favoritter </string> + <string name="InvFolder favorite"> + Favoritter + </string> <string name="InvFolder Current Outfit"> Nuværende sæt </string> diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml index 5f00fc4f77..f9169ed748 100644 --- a/indra/newview/skins/default/xui/de/floater_about_land.xml +++ b/indra/newview/skins/default/xui/de/floater_about_land.xml @@ -259,18 +259,18 @@ werden. <text left="204" name="other_objects_text" width="48"> [COUNT] </text> - <button label="Anzeigen" label_selected="Anzeigen" name="ShowOther" right="-135" width="60"/> - <button label="Zurückgeben" label_selected="Zurückgeben..." name="ReturnOther..." right="-10" tool_tip="Objekte an ihre Eigentümer zurückgeben." width="119"/> - <text left="14" name="Selected / sat upon:" width="140"> + <button label="Anzeigen" label_selected="Anzeigen" name="ShowOther"/> + <button label="Zurückgeben" label_selected="Zurückgeben..." name="ReturnOther..." tool_tip="Objekte an ihre Eigentümer zurückgeben."/> + <text name="Selected / sat upon:"> Ausgewählt/gesessen auf: </text> - <text left="204" name="selected_objects_text" width="48"> + <text name="selected_objects_text"> [COUNT] </text> <text name="Autoreturn"> Objekte anderer Einwohner automatisch zurückgeben (Minuten, 0 für aus): </text> - <line_editor name="clean other time" right="-10" width="56"/> + <line_editor name="clean other time"/> <text name="Object Owners:"> Objekteigentümer: </text> @@ -279,7 +279,7 @@ werden. <name_list name="owner list"> <name_list.columns label="Typ" name="type"/> <name_list.columns label="Name" name="name"/> - <name_list.columns label="Anzahl" name="count" width="80"/> + <name_list.columns label="Anzahl" name="count"/> <name_list.columns label="Aktuellstes" name="mostrecent"/> </name_list> </panel> diff --git a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml index d3f0d6d78f..8f99fc933c 100644 --- a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml @@ -43,7 +43,7 @@ Jeder: </text> <check_box label="Kopieren" name="everyone_copy"/> - <text name="NextOwnerLabel" top="160" left="10" width="200"> + <text name="NextOwnerLabel"> Nächster Eigentümer: </text> <check_box label="Bearbeiten" name="next_owner_modify"/> diff --git a/indra/newview/skins/default/xui/de/floater_customize.xml b/indra/newview/skins/default/xui/de/floater_customize.xml deleted file mode 100644 index 3651577797..0000000000 --- a/indra/newview/skins/default/xui/de/floater_customize.xml +++ /dev/null @@ -1,529 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="AUSSEHEN"> - <tab_container name="customize tab container"> - <text label="Körperteile" name="body_parts_placeholder"> - Körperteile - </text> - <panel label="Form" name="Shape"> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - <button label="Körper" label_selected="Körper" name="Body"/> - <button label="Kopf" label_selected="Kopf" name="Head"/> - <button label="Augen" label_selected="Augen" name="Eyes"/> - <button label="Ohren" label_selected="Ohren" name="Ears"/> - <button label="Nase" label_selected="Nase" name="Nose"/> - <button label="Mund" label_selected="Mund" name="Mouth"/> - <button label="Kinn" label_selected="Kinn" name="Chin"/> - <button label="Oberkörper" label_selected="Oberkörper" name="Torso"/> - <button label="Beine" label_selected="Beine" name="Legs"/> - <radio_group name="sex radio"> - <radio_item label="Weiblich" name="radio" value="0"/> - <radio_item label="Männlich" name="radio2" value="1"/> - </radio_group> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie eine neue Form aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch eine neue erstellen und diese anlegen. - </text> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label"> - Form: - </text> - <button label="Neue Form/Gestalt" label_selected="Neue Form/Gestalt" name="Create New"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - </panel> - <panel label="Haut" name="Skin"> - <button label="Hautfarbe" label_selected="Hautfarbe" left="2" name="Skin Color" width="92"/> - <button label="Gesichtsdetails" label_selected="Gesichtsdetails" left="2" name="Face Detail" width="92"/> - <button label="Make-Up" label_selected="Make-Up" left="2" name="Makeup" width="92"/> - <button label="Körperdetails" label_selected="Körperdetails" left="2" name="Body Detail" width="92"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie eine neue Skin (Haut) aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch eine neue erstellen und diese anlegen. - </text> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Haut: - </text> - <texture_picker label="Kopftattoo" name="Head Tattoos" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <texture_picker label="Obere Tattoos" name="Upper Tattoos" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <texture_picker label="Untere Tattoos" name="Lower Tattoos" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <button label="Neue Haut" label_selected="Neue Haut" name="Create New"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Haar" name="Hair"> - <button label="Farbe" label_selected="Farbe" name="Color"/> - <button label="Stil" label_selected="Stil" name="Style"/> - <button label="Augenbrauen" label_selected="Augenbrauen" name="Eyebrows"/> - <button label="Gesichtshaar" label_selected="Gesichtshaar" name="Facial"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie Haar aus dem Inventar auf Ihren Avatar, um dieses anzulegen. Sie können aber auch neues Haar erstellen und anlegen. - </text> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Haare: - </text> - <texture_picker label="Textur" name="Texture" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <button label="Neue Haare" label_selected="Neue Haare" name="Create New"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Augen" name="Eyes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie neue Augen aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch neue Augen erstellen und diese anlegen. - </text> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Augen: - </text> - <texture_picker label="Iris" name="Iris" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <button label="Neue Augen" label_selected="Neue Augen" name="Create New"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <text label="Kleidung" name="clothes_placeholder"> - Kleidung - </text> - <panel label="Hemd" name="Shirt"> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button label="Neues Hemd" label_selected="Neues Hemd" name="Create New"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie ein neues Hemd aus dem Inventar auf Ihren Avatar, um dieses anzuziehen. Sie können aber auch ein neues Hemd erstellen und dieses anlegen. - </text> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Hemd: - </text> - </panel> - <panel label="Hose" name="Pants"> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button label="Neue Hose" label_selected="Neue Hose" name="Create New"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie eine neue Hose aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anziehen. - </text> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Hose: - </text> - </panel> - <panel label="Schuhe" name="Shoes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie neue Schuhe aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch neue Schuhe erstellen und diese anlegen. - </text> - <button label="Neue Schuhe" label_selected="Neue Schuhe" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Schuhe: - </text> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Socken" name="Socks"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie neue Socken aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch neue erstellen und diese anziehen. - </text> - <button label="Neue Socken" label_selected="Neue Socken" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Socken: - </text> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Jacke" name="Jacket"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie eine neue Jacke aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anziehen. - </text> - <button label="Neue Jacke" label_selected="Neue Jacke" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Jacke: - </text> - <texture_picker label="Stoff: oben" name="Upper Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <texture_picker label="Stoff: unten" name="Lower Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Handschuhe" name="Gloves"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie neue Handschuhe aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch neue erstellen und diese anziehen. - </text> - <button label="Neue Handschuhe" label_selected="Neue Handschuhe" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Handschuhe: - </text> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Unterhemd" name="Undershirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie ein neues Unterhemd aus dem Inventar auf Ihren Avatar, um dieses anzuziehen. Sie können aber auch ein neues Unterhemd erstellen und dieses anziehen. - </text> - <button label="Neues Unterhemd" label_selected="Neues Unterhemd" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Unterhemd: - </text> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Unterhose" name="Underpants"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie eine neue Unterhose aus dem Inventar auf Ihren Avatar, um diese anzuziehen. Sie können aber auch eine neue erstellen und diese anziehen. - </text> - <button label="Neue Unterhose" label_selected="Neue Unterhose" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Unterhose: - </text> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Rock" name="Skirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [DESC]: wird geladen... - </text> - <text name="title_not_worn"> - [DESC]: nicht getragen - </text> - <text name="path"> - In [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie einen neuen Rock aus dem Inventar auf Ihren Avatar, um diesen anzuziehen. Sie können aber auch einen neuen Rock erstellen und diesen anziehen. - </text> - <button label="Neuer Rock" label_selected="Neuer Rock" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label" right="100"> - Rock: - </text> - <texture_picker label="Stoff" name="Fabric" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <color_swatch label="Farbe/Ton" name="Color/Tint" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/> - <button font="SansSerifSmall" label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> - <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Tätowierung" name="Tattoo"> - <text name="title"> - Tätowierung - </text> - <text name="title_no_modify"> - [BESCHR]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [BESCHR]: wird geladen... - </text> - <text name="title_not_worn"> - [BESCHR]: nicht getragen - </text> - <text name="path"> - Befindet sich in [PATH] - </text> - <text name="not worn instructions"> - Ziehen Sie eine neue Tätowierung aus dem Inventar auf Ihren Avatar, um diese anzulegen. Sie können aber auch eine neue erstellen und diese anlegen. - </text> - <button label="Neue Tätowierung erstellen" label_selected="Neue Tätowierung erstellen" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label"> - Tätowierung: - </text> - <texture_picker label="Kopftattoo" name="Head Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Obere Tattoos" name="Upper Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Untere Tattoos" name="Lower Tattoo" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <button label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button label="Speichern" label_selected="Speichern" name="Save"/> - <button label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - <panel label="Alpha" name="Alpha"> - <text name="title"> - Alpha - </text> - <text name="title_no_modify"> - [BESCHR]: bearbeiten nicht möglich - </text> - <text name="title_loading"> - [BESCHR]: wird geladen... - </text> - <text name="title_not_worn"> - [BESCHR]: nicht getragen - </text> - <text name="path"> - Befindet sich in [PATH] - </text> - <text name="not worn instructions"> - Sie können eine neue Alpha-Maske anlegen, indem Sie eine von Ihrem Inventar auf Ihren Avatar ziehen. Sie können aber auch eine neue erstellen und diese anlegen. - </text> - <button label="Neue Alpha erstellen" label_selected="Neue Alpha erstellen" name="Create New"/> - <text name="no modify instructions"> - Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. - </text> - <text name="Item Action Label"> - Alpha: - </text> - <texture_picker label="Alpha: Unten" name="Lower Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Alpha: Oben" name="Upper Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Kopf: Alpha" name="Head Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Alpha: Augen" name="Eye Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <texture_picker label="Alpha: Haare" name="Hair Alpha" tool_tip="Zum Auswählen eines Bildes hier klicken"/> - <button label="Ausziehen" label_selected="Ausziehen" name="Take Off"/> - <button label="Speichern" label_selected="Speichern" name="Save"/> - <button label="Speichern unter..." label_selected="Speichern unter..." name="Save As"/> - <button label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - </panel> - </tab_container> - <button label="Skriptinfo" label_selected="Skriptinfo" name="script_info" tool_tip="Skripts, die an Ihren Avatar angehängt sind, anzeigen"/> - <button label="Outfit erstellen" label_selected="Outfit erstellen" name="make_outfit_btn"/> - <button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/> - <button label="OK" label_selected="OK" name="Ok"/> -</floater> diff --git a/indra/newview/skins/default/xui/de/floater_device_settings.xml b/indra/newview/skins/default/xui/de/floater_device_settings.xml deleted file mode 100644 index 3d7e9c96c1..0000000000 --- a/indra/newview/skins/default/xui/de/floater_device_settings.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_device_settings" title="EINSTELLUNGEN FÜR VOICE-CHAT"/> diff --git a/indra/newview/skins/default/xui/de/floater_first_time_tip.xml b/indra/newview/skins/default/xui/de/floater_first_time_tip.xml deleted file mode 100644 index 9546cc2c42..0000000000 --- a/indra/newview/skins/default/xui/de/floater_first_time_tip.xml +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="set_name_in_the_cladd"> - <check_box label="Turn off Quick Tips" name="DontShowFirstTimeTip_checkbox"/> -</floater> diff --git a/indra/newview/skins/default/xui/de/floater_im.xml b/indra/newview/skins/default/xui/de/floater_im.xml deleted file mode 100644 index 8ae8f120cf..0000000000 --- a/indra/newview/skins/default/xui/de/floater_im.xml +++ /dev/null @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<multi_floater name="im_floater" title="Instant Message"> - <string name="only_user_message"> - Sie sind der einzige Einwohner in dieser Sitzung. - </string> - <string name="offline_message"> - [FIRST] [LAST] ist offline. - </string> - <string name="invite_message"> - Klicken Sie auf [BUTTON NAME], um eine Verbindung zu diesem Voice-Chat herzustellen. - </string> - <string name="muted_message"> - Sie haben diesen Einwohner ignoriert. Wenn Sie eine Nachricht senden, wird dieser freigeschaltet. - </string> - <string name="generic_request_error"> - Fehler bei Anfrage, bitte versuchen Sie es später. - </string> - <string name="insufficient_perms_error"> - Sie sind dazu nicht berechtigt. - </string> - <string name="session_does_not_exist_error"> - Die Sitzung ist abgelaufen - </string> - <string name="no_ability_error"> - Sie besitzen diese Fähigkeit nicht. - </string> - <string name="not_a_mod_error"> - Sie sind kein Sitzungsmoderator. - </string> - <string name="muted_error"> - Ein Gruppenmoderator hat Ihren Text-Chat deaktiviert. - </string> - <!-- ALL of the event strings should have [RECIPIENT] in them --> - <string name="add_session_event"> - Es konnten keine Einwohner zur Chat-Sitzung mit [RECIPIENT] hinzugefügt werden. - </string> - <string name="message_session_event"> - Ihre Nachricht konnte nicht an die Chat-Sitzung mit [RECIPIENT] gesendet werden. - </string> - <string name="removed_from_group"> - Sie wurden von der Gruppe ausgeschlossen. - </string> - <string name="close_on_no_ability"> - Sie haben nicht mehr die Berechtigung an der Chat-Sitzung teilzunehmen. - </string> -</multi_floater> diff --git a/indra/newview/skins/default/xui/de/floater_im_session.xml b/indra/newview/skins/default/xui/de/floater_im_session.xml index c69bb600ea..abaf275651 100644 --- a/indra/newview/skins/default/xui/de/floater_im_session.xml +++ b/indra/newview/skins/default/xui/de/floater_im_session.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="panel_im"> <layout_stack name="im_panels"> - <layout_panel label="IM Steuerkonsole" name="panel_im_control_panel"/> <layout_panel> <line_editor label="An" name="chat_editor"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/de/floater_my_friends.xml b/indra/newview/skins/default/xui/de/floater_my_friends.xml deleted file mode 100644 index 61cb0d5c14..0000000000 --- a/indra/newview/skins/default/xui/de/floater_my_friends.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_my_friends" title="KONTAKTE"> - <tab_container name="friends_and_groups"> - <panel label="Freunde" name="friends_panel"/> - <panel label="Gruppen" name="groups_panel"/> - </tab_container> -</floater> diff --git a/indra/newview/skins/default/xui/de/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/de/floater_outfit_save_as.xml deleted file mode 100644 index 8c110e5516..0000000000 --- a/indra/newview/skins/default/xui/de/floater_outfit_save_as.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title="Outfit speichern"> - <button label="Speichern" label_selected="Speichern" name="Save"/> - <button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/> - <text name="Save item as:"> - Meine aktuelle Kleidung -als neues Outfit speichern: - </text> - <line_editor name="name ed"> - [DESC] (neu) - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/de/floater_preview_classified.xml b/indra/newview/skins/default/xui/de/floater_preview_classified.xml deleted file mode 100644 index 401758769d..0000000000 --- a/indra/newview/skins/default/xui/de/floater_preview_classified.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="classified_preview" title="INFORMATIONEN ÜBER ANZEIGE"> - <floater.string name="Title"> - Anzeige: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/de/floater_preview_event.xml b/indra/newview/skins/default/xui/de/floater_preview_event.xml deleted file mode 100644 index 7e46bbab54..0000000000 --- a/indra/newview/skins/default/xui/de/floater_preview_event.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="event_preview" title="EVENT-INFORMATION"> - <floater.string name="Title"> - Veranstaltung: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml deleted file mode 100644 index 0d0d28f96f..0000000000 --- a/indra/newview/skins/default/xui/de/floater_preview_gesture_info.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="GESTE - SCHNELLTASTE"/> diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_shortcut.xml deleted file mode 100644 index 0b5df13395..0000000000 --- a/indra/newview/skins/default/xui/de/floater_preview_gesture_shortcut.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="GESTE - SCHNELLTASTE"> - <text name="trigger_label"> - Chat: - </text> - <text name="key_label"> - Tastatur: - </text> - <combo_box label="Keiner" name="modifier_combo"/> - <combo_box label="Keiner" name="key_combo"/> - <text name="replace_text" tool_tip="Ersetzt den Auslösertext mit diesem Text. Wenn Sie zum Beispiel den Auslöser „hallo“ durch „wie geht's“ ersetzen, erscheint im Chat anstelle von „Ich wollte nur hallo sagen“ der Text „Ich wollte nur wie geht's sagen“ und die zugehörige Geste wird abgespielt."> - Ersetzen: - </text> - <line_editor name="replace_editor" tool_tip="Ersetzt den Auslösertext mit diesem Text. Wenn Sie zum Beispiel den Auslöser „hallo“ durch „wie geht's“ ersetzen, erscheint im Chat anstelle von „Ich wollte nur hallo sagen“ der Text „Ich wollte nur wie geht's sagen“ und die zugehörige Geste wird abgespielt."/> -</floater> diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml deleted file mode 100644 index 0d0d28f96f..0000000000 --- a/indra/newview/skins/default/xui/de/floater_preview_gesture_steps.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="GESTE - SCHNELLTASTE"/> diff --git a/indra/newview/skins/default/xui/de/floater_statistics.xml b/indra/newview/skins/default/xui/de/floater_statistics.xml deleted file mode 100644 index 72a87a9566..0000000000 --- a/indra/newview/skins/default/xui/de/floater_statistics.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="STATISTIKEN"/> diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml index 12ae9898c3..3de3718f66 100644 --- a/indra/newview/skins/default/xui/de/floater_tools.xml +++ b/indra/newview/skins/default/xui/de/floater_tools.xml @@ -71,8 +71,8 @@ <text label="Beide Seiten dehnen" name="checkbox uniform label"> Beide Seiten dehnen </text> - <check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures"/> - <check_box initial_value="true" label="An Raster ausrichten" name="checkbox snap to grid" top_pad="10"/> + <check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures" top_pad="-5"/> + <check_box initial_value="true" label="An Raster ausrichten" name="checkbox snap to grid" top_pad="15"/> <combo_box name="combobox grid mode" tool_tip="Wählen Sie ein Rasterlineal zum Positionieren des Objekts aus."> <combo_box.item label="Globales Raster" name="World"/> <combo_box.item label="Lokales Raster" name="Local"/> diff --git a/indra/newview/skins/default/xui/de/floater_voice_controls.xml b/indra/newview/skins/default/xui/de/floater_voice_controls.xml index 07b7689cd0..22f2fd93ab 100644 --- a/indra/newview/skins/default/xui/de/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/de/floater_voice_controls.xml @@ -19,10 +19,12 @@ <layout_panel name="my_panel"> <text name="user_text" value="Mein Avatar:"/> </layout_panel> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="Anruf beenden" name="leave_call_btn"/> - </layout_panel> - </layout_stack> + <layout_panel name="leave_call_panel"> + <layout_stack name="voice_effect_and_leave_call_stack"> + <layout_panel name="leave_call_btn_panel"> + <button label="Anruf beenden" name="leave_call_btn"/> + </layout_panel> + </layout_stack> + </layout_panel> </layout_stack> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml deleted file mode 100644 index f9b3552e8b..0000000000 --- a/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title=" "> - <button label="Speichern" label_selected="Speichern" name="Save"/> - <button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/> - <text name="Save item as:"> - Objekt in meinem Inventar speichern als: - </text> - <line_editor name="name ed"> - Neu [DESC] - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/de/menu_avatar_self.xml b/indra/newview/skins/default/xui/de/menu_avatar_self.xml index 160703bcf3..c74f646abb 100644 --- a/indra/newview/skins/default/xui/de/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/de/menu_avatar_self.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Self Pie"> <menu_item_call label="Aufstehen" name="Stand Up"/> - <context_menu label="Ausziehen ▶" name="Take Off >"> - <context_menu label="Kleidung ▶" name="Clothes >"> + <context_menu label="Ausziehen" name="Take Off >"> + <context_menu label="Kleidung" name="Clothes >"> <menu_item_call label="Hemd" name="Shirt"/> <menu_item_call label="Hose" name="Pants"/> <menu_item_call label="Rock" name="Skirt"/> @@ -16,8 +16,8 @@ <menu_item_call label="Alpha" name="Self Alpha"/> <menu_item_call label="Alle Kleider" name="All Clothes"/> </context_menu> - <context_menu label="HUD ▶" name="Object Detach HUD"/> - <context_menu label="Abnehmen ▶" name="Object Detach"/> + <context_menu label="HUD" name="Object Detach HUD"/> + <context_menu label="Abnehmen" name="Object Detach"/> <menu_item_call label="Alles abnehmen" name="Detach All"/> </context_menu> <menu_item_call label="Outfit ändern" name="Chenge Outfit"/> diff --git a/indra/newview/skins/default/xui/de/menu_object.xml b/indra/newview/skins/default/xui/de/menu_object.xml index 756b606d65..5003939fb6 100644 --- a/indra/newview/skins/default/xui/de/menu_object.xml +++ b/indra/newview/skins/default/xui/de/menu_object.xml @@ -10,12 +10,12 @@ <menu_item_call label="Aufstehen" name="Object Stand Up"/> <menu_item_call label="Objektprofil" name="Object Inspect"/> <menu_item_call label="Hineinzoomen" name="Zoom In"/> - <context_menu label="Anziehen ▶" name="Put On"> + <context_menu label="Anziehen" name="Put On"> <menu_item_call label="Anziehen" name="Wear"/> - <context_menu label="Anhängen ▶" name="Object Attach"/> - <context_menu label="HUD anhängen ▶" name="Object Attach HUD"/> + <context_menu label="Anhängen" name="Object Attach"/> + <context_menu label="HUD anhängen" name="Object Attach HUD"/> </context_menu> - <context_menu label="Entfernen ▶" name="Remove"> + <context_menu label="Entfernen" name="Remove"> <menu_item_call label="Missbrauch melden" name="Report Abuse..."/> <menu_item_call label="Ignorieren" name="Object Mute"/> <menu_item_call label="Zurückgeben" name="Return..."/> diff --git a/indra/newview/skins/default/xui/de/menu_participant_list.xml b/indra/newview/skins/default/xui/de/menu_participant_list.xml index d5281f0cb2..160f2f97be 100644 --- a/indra/newview/skins/default/xui/de/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/de/menu_participant_list.xml @@ -11,7 +11,7 @@ <menu_item_check label="Symbole für Personen anzeigen" name="View Icons"/> <menu_item_check label="Voice ignorieren" name="Block/Unblock"/> <menu_item_check label="Text ignorieren" name="MuteText"/> - <context_menu label="Moderator-Optionen >" name="Moderator Options"> + <context_menu label="Moderator-Optionen" name="Moderator Options"> <menu_item_check label="Text-Chat zulassen" name="AllowTextChat"/> <menu_item_call label="Diesen Teilnehmer stummschalten" name="ModerateVoiceMuteSelected"/> <menu_item_call label="Stummschaltung für diesen Teilnehmer aufheben" name="ModerateVoiceUnMuteSelected"/> diff --git a/indra/newview/skins/default/xui/de/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/de/menu_wearable_list_item.xml index 6c8fc69fc0..283e454a06 100644 --- a/indra/newview/skins/default/xui/de/menu_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/de/menu_wearable_list_item.xml @@ -5,8 +5,8 @@ <menu_item_call label="Hinzufügen" name="wear_add"/> <menu_item_call label="Ausziehen / Abnehmen" name="take_off_or_detach"/> <menu_item_call label="Abnehmen" name="detach"/> - <context_menu label="Anhängen an ▶" name="wearable_attach_to"/> - <context_menu label="An HUD hängen ▶" name="wearable_attach_to_hud"/> + <context_menu label="Anhängen an" name="wearable_attach_to"/> + <context_menu label="An HUD hängen" name="wearable_attach_to_hud"/> <menu_item_call label="Ausziehen" name="take_off"/> <menu_item_call label="Bearbeiten" name="edit"/> <menu_item_call label="Objektprofil" name="object_profile"/> diff --git a/indra/newview/skins/default/xui/de/panel_audio_device.xml b/indra/newview/skins/default/xui/de/panel_audio_device.xml deleted file mode 100644 index 6ecd1f0241..0000000000 --- a/indra/newview/skins/default/xui/de/panel_audio_device.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="device_settings"> - <text name="Audio Devices"> - Audiogeräte - </text> - <text name="Output device (speakers):"> - Ausgabegerät (Lautsprecher): - </text> - <text name="Input device (microphone):"> - Eingabegerät (Mikro): - </text> - <text name="Input level:"> - Eingangslautstärke - </text> - <text_editor name="voice_intro_text1"> - Mit dem Regler steuern Sie, wie laut andere Einwohner Sie hören. Testen Sie die Eingangslautstärke, indem Sie in das Mikro sprechen. - </text_editor> - <volume_slider name="mic_volume_slider" tool_tip="Ändern Sie die Lautstärke mit dem Regler" /> - <text name="wait_text"> - Bitte warten - </text> - <text name="default_text"> - Standard - </text> -</panel> diff --git a/indra/newview/skins/default/xui/de/panel_friends.xml b/indra/newview/skins/default/xui/de/panel_friends.xml deleted file mode 100644 index 50013a2b24..0000000000 --- a/indra/newview/skins/default/xui/de/panel_friends.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="friends"> - <string name="Multiple"> - Mehrere Freunde - </string> - <scroll_list name="friend_list" tool_tip="Halten Sie die Tasten „Umschalt“ oder „Strg“ gedrückt, um durch Klicken mehrere Freunde auszuwählen."> - <column name="icon_online_status" tool_tip="Online-Status"/> - <column label="Name" name="friend_name" tool_tip="Name"/> - <column name="icon_visible_online" tool_tip="Freund kann sehen, wenn Sie online sind"/> - <column name="icon_visible_map" tool_tip="Freund kann Sie auf der Karte finden"/> - <column name="icon_edit_mine" tool_tip="Freunde können Objekte bearbeiten, löschen und an sich nehmen"/> - <column name="icon_edit_theirs" tool_tip="Sie können die Objekte dieses Freunds bearbeiten"/> - </scroll_list> - <panel name="rights_container"> - <text name="friend_name_label"> - Wählen Sie den/die Freund(e) aus, dessen/deren Rechte Sie ändern möchten... - </text> - <check_box label="Kann meinen Online-Status sehen" name="online_status_cb" tool_tip="Festlegen, ob dieser Freund meinen Online-Status auf seiner Freundesliste oder Visitenkarte einsehen kann"/> - <check_box label="Kann mich auf der Weltkarte sehen" name="map_status_cb" tool_tip="Festlegen, ob dieser Freund auf seiner Karte meinen Standort sehen kann"/> - <check_box label="Kann meine Objekte verändern" name="modify_status_cb" tool_tip="Festlegen, ob dieser Freund meine Objekte verändern kann"/> - <text name="process_rights_label"> - Rechte werden geändert... - </text> - </panel> - <button label="IM/Anruf" name="im_btn" tool_tip="Beginnt eine Instant Message-Sitzung"/> - <button label="Profil" name="profile_btn" tool_tip="Bilder, Gruppen und andere Informationen anzeigen"/> - <button label="Teleportieren" name="offer_teleport_btn" tool_tip="Bieten Sie diesem Freund einen Teleport an Ihre Position an"/> - <button label="Bezahlen" name="pay_btn" tool_tip="Diesem Freund Linden-Dollar (L$) geben"/> - <button label="Entfernen" name="remove_btn" tool_tip="Diese Person von Ihrer Freundesliste entfernen"/> - <button label="Hinzufügen" name="add_btn" tool_tip="Bieten Sie einem Einwohner die Freundschaft an"/> -</panel> diff --git a/indra/newview/skins/default/xui/de/panel_groups.xml b/indra/newview/skins/default/xui/de/panel_groups.xml deleted file mode 100644 index f857a6c7ac..0000000000 --- a/indra/newview/skins/default/xui/de/panel_groups.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="groups"> - <text name="groupdesc" width="300"> - Die derzeit aktive Gruppe ist fett hervorgehoben. - </text> - <text name="groupcount" width="360"> - Sie sind Mitglied bei [COUNT] Gruppen (von max. [MAX]). - </text> - <button label="IM/Anruf" name="IM" tool_tip="Beginnt eine Instant Message-Sitzung" /> - <button label="Info" name="Info" /> - <button label="Aktivieren" name="Activate" /> - <button label="Verlassen" name="Leave" /> - <button label="Erstellen..." name="Create" /> - <button label="Suchen..." name="Search..." /> -</panel> diff --git a/indra/newview/skins/default/xui/de/panel_nearby_chat.xml b/indra/newview/skins/default/xui/de/panel_nearby_chat.xml deleted file mode 100644 index 3f4f5a71b5..0000000000 --- a/indra/newview/skins/default/xui/de/panel_nearby_chat.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<!-- All our XML is utf-8 encoded. --> -<panel name="nearby_chat"> - <panel name="chat_caption"> - <text name="sender_name" width="200"> - CHAT IN DER NÄHE - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/de/panel_notifications_channel.xml b/indra/newview/skins/default/xui/de/panel_notifications_channel.xml index e2166f7baf..35bd76ce70 100644 --- a/indra/newview/skins/default/xui/de/panel_notifications_channel.xml +++ b/indra/newview/skins/default/xui/de/panel_notifications_channel.xml @@ -1,15 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="notifications_panel"> <layout_stack name="stack1"> - <scroll_list name="notifications_list"> - <column label="Name" name="name"/> - <column label="Inhalt" name="content"/> - <column label="Datum" name="date"/> - </scroll_list> - <scroll_list name="notification_rejects_list"> - <column label="Name" name="name"/> - <column label="Inhalt" name="content"/> - <column label="Datum" name="date"/> - </scroll_list> + <layout_panel name="notifications_list_panel" > + <scroll_list name="notifications_list"> + <column label="Name" name="name"/> + <column label="Inhalt" name="content"/> + <column label="Datum" name="date"/> + </scroll_list> + </layout_panel> + <layout_panel name="rejects_list_panel" > + <scroll_list name="notification_rejects_list"> + <column label="Name" name="name"/> + <column label="Inhalt" name="content"/> + <column label="Datum" name="date"/> + </scroll_list> + </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_online_status.xml b/indra/newview/skins/default/xui/de/panel_online_status.xml deleted file mode 100644 index 7c7448c061..0000000000 --- a/indra/newview/skins/default/xui/de/panel_online_status.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Freunde_online_Status" name="friend_online_status"/> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml index 5c91b34a21..064eb3895b 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml @@ -56,4 +56,27 @@ <radio_item label="Getrennte Fenster" name="radio" value="0"/> <radio_item label="Registerkarten" name="radio2" value="1"/> </radio_group> + <check_box label="Ãbersetzen Chat" name="translate_chat_checkbox" /> + <text name="translate_language_text"> + Chat-Sprache: + </text> + <combo_box name="translate_language_combobox" width="200"> + <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)" /> + <combo_box.item name="German" label="Deutsch" /> + <combo_box.item name="Spanish" label="Español (Spanisch)" /> + <combo_box.item name="French" label="Français (Französisch)" /> + <combo_box.item name="Italian" label="Italiano (Italienisch)" /> + <combo_box.item name="Hungarian" label="Magyar (Ungarisch)" /> + <combo_box.item name="Dutch" label="Nederlands (Niederländisch)" /> + <combo_box.item name="Polish" label="Polski (Polnisch)" /> + <combo_box.item name="Portugese" label="Português (Portugiesisch)" /> + <combo_box.item name="Russian" label="Русский (Russian)" /> + <combo_box.item name="Turkish" label="Türkçe (Türkisch)" /> + <combo_box.item name="Ukrainian" label="Українська (Ukrainisch)" /> + <combo_box.item name="Chinese" label="中文 (简体) (Chinesisch)" /> + <combo_box.item name="Japanese" label="日本語 (Japanisch)" /> + <combo_box.item name="Korean" label="한국어 (Koreanisch)" /> + </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml index 0a19483f8b..c85f2762b1 100644 --- a/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml @@ -7,9 +7,9 @@ 0.2 </string> <layout_stack name="progress_indicator_area"> - <panel name="media_progress_indicator"> + <layout_panel name="media_progress_indicator"> <progress_bar name="media_progress_bar" tool_tip="Medien werden geladen"/> - </panel> + </layout_panel> </layout_stack> <layout_stack name="media_controls"> <layout_panel name="back"> diff --git a/indra/newview/skins/default/xui/de/panel_region_general_layout.xml b/indra/newview/skins/default/xui/de/panel_region_general_layout.xml deleted file mode 100644 index 09142ada6f..0000000000 --- a/indra/newview/skins/default/xui/de/panel_region_general_layout.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Region" name="General"> - <text name="region_text_lbl"> - Region: - </text> - <text name="region_text"> - unbekannt - </text> - <text name="version_channel_text_lbl"> - Version: - </text> - <text name="version_channel_text"> - unbekannt - </text> - <text name="region_type_lbl"> - Typ: - </text> - <text name="region_type"> - unbekannt - </text> - <check_box label="Terraformen blockieren" name="block_terraform_check"/> - <check_box label="Fliegen blockieren" name="block_fly_check"/> - <check_box label="Schaden zulassen" name="allow_damage_check"/> - <check_box label="Stoßen beschränken" name="restrict_pushobject"/> - <check_box label="Landwiederverkauf zulassen" name="allow_land_resell_check"/> - <check_box label="Zusammenlegen/Teilen von Land zulassen" name="allow_parcel_changes_check"/> - <check_box label="Landanzeige in Suche blockieren" name="block_parcel_search_check" tool_tip="Diese Region und ihre Parzellen in Suchergebnissen anzeigen"/> - <spinner label="Avatar-Limit" name="agent_limit_spin"/> - <spinner label="Objektbonus" name="object_bonus_spin"/> - <text label="Alterseinstufung" name="access_text"> - Einstufung: - </text> - <combo_box label="Moderat" name="access_combo"> - <combo_box.item label="Adult" name="Adult"/> - <combo_box.item label="Moderat" name="Mature"/> - <combo_box.item label="Allgemein" name="PG"/> - </combo_box> - <button label="Übernehmen" name="apply_btn"/> - <button label="Einen Einwohner nach Hause teleportieren..." name="kick_btn"/> - <button label="Alle Einwohner nach Hause teleportieren..." name="kick_all_btn"/> - <button label="Nachricht an Region senden..." name="im_btn"/> - <button label="Telehub verwalten..." name="manage_telehub_btn"/> -</panel> diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index bf7d2ef3b3..1adc4e3db1 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -1147,6 +1147,9 @@ <string name="InvFolder Favorite"> Favoriten </string> + <string name="InvFolder favorite"> + Favoriten + </string> <string name="InvFolder Current Outfit"> Aktuelles Outfit </string> diff --git a/indra/newview/skins/default/xui/en/alert_check_box.xml b/indra/newview/skins/default/xui/en/alert_check_box.xml index 9f1bdb5193..5535a5dc2a 100644 --- a/indra/newview/skins/default/xui/en/alert_check_box.xml +++ b/indra/newview/skins/default/xui/en/alert_check_box.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <check_box - text_enabled_color="LabelTextColor" - text_disabled_color="LabelDisabledColor" + label_text.text_color="LabelTextColor" + label_text.text_readonly_color="LabelDisabledColor" font="SansSerif" follows="left|top" name="check"/>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/favorites_bar_button.xml b/indra/newview/skins/default/xui/en/favorites_bar_button.xml index b365040c20..e7dd62eb64 100644 --- a/indra/newview/skins/default/xui/en/favorites_bar_button.xml +++ b/indra/newview/skins/default/xui/en/favorites_bar_button.xml @@ -22,6 +22,6 @@ pad_right="9" scale_image="true" tab_stop="false" - top="0" + bottom="0" use_ellipses="true" width="140" /> diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml index cae6146880..930bbaa8cb 100644 --- a/indra/newview/skins/default/xui/en/floater_aaa.xml +++ b/indra/newview/skins/default/xui/en/floater_aaa.xml @@ -20,7 +20,7 @@ <string name="nudge_parabuild" translate="false">Nudge 1</string> <string name="test_the_vlt">This string CHANGE2 is extracted.</string> <string name="testing_eli">Just a test. changes.</string> - <chat_history + <text_editor parse_urls="true" bg_readonly_color="ChatHistoryBgColor" bg_writeable_color="ChatHistoryBgColor" @@ -32,26 +32,51 @@ layout="topleft" height="260" name="chat_history" + max_length="200000" parse_highlights="true" text_color="ChatHistoryTextColor" text_readonly_color="ChatHistoryTextColor" translate="false" + track_end="true" + wrap="true" width="320"> -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. -Really long line that is long enough to wrap once with jyg descenders. - </chat_history> + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + Really long line that is long enough to wrap once with jyg descenders. + </text_editor> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index 99bf3e6bc1..e6f11cac60 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -1044,7 +1044,7 @@ Leyla Linden </text> left="28" name="Selected / sat upon:" top_pad="5" - width="176"> + width="230"> Selected / sat upon: </text> <text @@ -1053,7 +1053,7 @@ Leyla Linden </text> follows="left|top" height="23" layout="topleft" - left_delta="172" + left_delta="220" name="selected_objects_text" top_delta="0" width="48"> @@ -1143,11 +1143,11 @@ Leyla Linden </text> <name_list.columns label="Count" name="count" - width="60" /> + width="67" /> <name_list.columns label="Most Recent" name="mostrecent" - width="170" /> + width="163" /> </name_list> </panel> <panel diff --git a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml index d007ceff98..457142f11c 100644 --- a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml @@ -7,7 +7,7 @@ name="floaterbulkperms" help_topic="floaterbulkperms" title="EDIT CONTENT PERMISSIONS" - width="270"> + width="300"> <floater.string name="nothing_to_modify_text"> Selection contains no editable contents. @@ -164,7 +164,7 @@ label="√ All" left="180" top="26" - width="70"> + width="115"> <button.commit_callback function="BulkPermission.CheckAll" /> </button> @@ -176,7 +176,7 @@ layout="topleft" top_pad="8" name="check_none" - width="70" > + width="115" > <button.commit_callback function="BulkPermission.UncheckAll"/> </button> @@ -199,10 +199,11 @@ length="1" follows="left|top" layout="topleft" - height="16" + height="28" left="10" name="GroupLabel" - width="88"> + width="92" + word_wrap="true"> Group: </text> <check_box @@ -212,17 +213,18 @@ layout="topleft" top_pad="0" name="share_with_group" - width="88" /> + width="92" /> <text type="string" length="1" follows="left|top" - height="16" + height="28" layout="topleft" name="AnyoneLabel" - left="100" + left="104" top="110" - width="88"> + width="92" + word_wrap="true"> Anyone: </text> <check_box @@ -232,17 +234,18 @@ layout="topleft" top_pad="0" name="everyone_copy" - width="88" /> + width="92" /> <text type="string" length="1" follows="left|top" - height="16" + height="28" layout="topleft" name="NextOwnerLabel" top="110" - left="185" - width="88"> + left="189" + width="92" + word_wrap="true"> Next owner: </text> <check_box @@ -252,7 +255,7 @@ layout="topleft" name="next_owner_modify" top_pad="0" - width="83" /> + width="92" /> <check_box control_name="BulkChangeNextOwnerCopy" height="16" @@ -260,7 +263,7 @@ layout="topleft" top_pad="0" name="next_owner_copy" - width="88"> + width="92"> <check_box.commit_callback function="BulkPermission.CommitCopy"/> </check_box> @@ -274,7 +277,7 @@ layout="topleft" name="next_owner_transfer" tool_tip="Next owner can give away or resell this object" - width="106" /> + width="92" /> <scroll_list enabled="false" follows="all" @@ -289,7 +292,7 @@ height="23" label="OK" layout="topleft" - left="65" + left="95" name="apply" top_pad="10" width="90"> diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml index 4b990fa566..b9c415633f 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml @@ -16,6 +16,7 @@ https://quick-buy.secondlife.com/[LANGUAGE]/display/?sa=[SPECIFIC_AMOUNT]&sum=[SUM]&msg=[MSG]&bal=[BAL] </floater.string> <web_browser + trusted_content="true" follows="all" layout="topleft" left="1" diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml deleted file mode 100644 index 01bced81d0..0000000000 --- a/indra/newview/skins/default/xui/en/floater_customize.xml +++ /dev/null @@ -1,3389 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater - legacy_header_height="18" - can_minimize="false" - follows="left|top" - height="583" - layout="topleft" - left_delta="-3" - name="floater customize" - help_topic="floater_customize" - save_rect="true" - title="APPEARANCE" - top_delta="-185" - width="600"> - <tab_container - height="517" - layout="topleft" - left="10" - name="customize tab container" - tab_min_width="96" - tab_position="left" - tab_height="50" - top="26" - width="580"> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left="5" - name="body_parts_placeholder" - font="SansSerifSmallBold" - top="10" - width="100"> - Body Parts - </text> - <placeholder /> - <panel - border="false" - background_visible="true" - bg_alpha_color="DkGray2" - follows="left|top|right|bottom" - height="508" - label="Shape" - layout="topleft" - name="Shape" - help_topic="customize_shape_tab" - width="400"> - <icon - follows="top|right" - height="18" - image_name="Lock" - layout="topleft" - left="315" - mouse_opaque="true" - name="square" - top="4" - width="18" /> - <icon - height="16" - top="10" - left="10" - layout="topleft" - mouse_opaque="true" - width="16" /> - <button - follows="left|top" - height="23" - label="Create New Shape" - label_selected="Create New Shape" - layout="topleft" - left="10" - name="Create New" - top="104" - width="160" /> - <button - follows="left|top" - height="23" - label="Body" - label_selected="Body" - layout="topleft" - left="10" - name="Body" - top="63" - width="82" /> - <button - follows="left|top" - height="23" - label="Head" - label_selected="Head" - layout="topleft" - left_delta="0" - name="Head" - top_pad="4" - width="82" /> - <button - follows="left|top" - height="23" - label="Eyes" - label_selected="Eyes" - layout="topleft" - left_delta="0" - name="Eyes" - top_pad="4" - width="82" /> - <button - follows="left|top" - height="23" - label="Ears" - label_selected="Ears" - layout="topleft" - left_delta="0" - name="Ears" - top_pad="4" - width="82" /> - <button - follows="left|top" - height="23" - label="Nose" - label_selected="Nose" - layout="topleft" - left_delta="0" - name="Nose" - top_pad="4" - width="82" /> - <button - follows="left|top" - height="23" - label="Mouth" - label_selected="Mouth" - layout="topleft" - left_delta="0" - name="Mouth" - top_pad="4" - width="82" /> - <button - follows="left|top" - height="23" - label="Chin" - label_selected="Chin" - layout="topleft" - left_delta="0" - name="Chin" - top_pad="4" - width="82" /> - <button - follows="left|top" - height="23" - label="Torso" - label_selected="Torso" - layout="topleft" - left_delta="0" - name="Torso" - top_pad="4" - width="82" /> - <button - follows="left|top" - height="23" - label="Legs" - label_selected="Legs" - layout="topleft" - left_delta="0" - name="Legs" - top_pad="4" - width="82" /> - <radio_group - control_name="AvatarSex" - height="34" - layout="topleft" - name="sex radio" - top_pad="10" - width="82"> - <radio_item - height="16" - label="Female" - layout="topleft" - name="radio" - value="0" - width="82" /> - <radio_item - height="16" - label="Male" - layout="topleft" - name="radio2" - value="1" - width="82" /> - </radio_group> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title" - top="10" - width="355"> - [DESC] - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_no_modify" - top="10" - width="355"> - [DESC]: cannot modify - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_loading" - top="10" - width="355"> - [DESC]: loading... - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_not_worn" - top="10" - width="355"> - [DESC]: not worn - </text> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left="10" - name="path" - top="36" - width="373"> - Located in [PATH] - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="not worn instructions" - top="31" - word_wrap="true" - width="373"> - Put on a new shape by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it. - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="no modify instructions" - top="31" - word_wrap="true" - width="373"> - You do not have permission to modify this wearable. - </text> - <text - type="string" - length="1" - top="488" - follows="left|top" - font="SansSerif" - halign="right" - height="23" - layout="topleft" - left="10" - name="Item Action Label" - width="130"> - Shape: - </text> - <button - follows="left|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - name="Save" - left_pad="2" - top="477" - width="82" /> - <button - follows="left|bottom" - height="23" - label="Save As..." - label_selected="Save As..." - layout="topleft" - name="Save As" - top="477" - left_pad="3" - width="115" /> - <button - follows="left|bottom" - height="23" - label="Revert" - label_selected="Revert" - layout="topleft" - left_pad="3" - name="Revert" - top="477" - width="120" /> - </panel> - <panel - border="false" - background_visible="true" - bg_alpha_color="DkGray2" - follows="left|top|right|bottom" - height="508" - label="Skin" - layout="topleft" - name="Skin" - help_topic="customize_skin_tab" - width="400"> - <icon - follows="top|right" - height="18" - image_name="Lock" - layout="topleft" - left="315" - mouse_opaque="true" - name="square" - top="4" - width="18" /> - <icon - height="16" - top="10" - left="10" - layout="topleft" - mouse_opaque="true" - width="16" /> - <button - follows="left|top" - height="23" - label="Create New Skin" - label_selected="Create New Skin" - layout="topleft" - left_delta="0" - name="Create New" - top_delta="-249" - width="160" /> - <button - follows="left|top" - height="23" - label="Skin Color" - label_selected="Skin Color" - layout="topleft" - left="10" - name="Skin Color" - top="63" - width="82" /> - <button - follows="left|top" - height="23" - label="Face Detail" - label_selected="Face Detail" - layout="topleft" - left_delta="0" - name="Face Detail" - top_pad="4" - width="82" /> - <button - follows="left|top" - height="23" - label="Makeup" - label_selected="Makeup" - layout="topleft" - left_delta="0" - name="Makeup" - top_pad="4" - width="82" /> - <button - follows="left|top" - height="23" - label="Body Detail" - label_selected="Body Detail" - layout="topleft" - left_delta="0" - name="Body Detail" - top_pad="4" - width="82" /> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title" - top="10" - width="355"> - [DESC] - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_no_modify" - top="10" - width="355"> - [DESC]: cannot modify - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_loading" - top="10" - width="355"> - [DESC]: loading... - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_not_worn" - top="10" - width="355"> - [DESC]: not worn - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="14" - layout="topleft" - left="10" - name="path" - top="36" - width="373"> - Located in [PATH] - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="not worn instructions" - top="31" - word_wrap="true" - width="373"> - Put on a new skin by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it. - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="no modify instructions" - top="31" - word_wrap="true" - width="373"> - You do not have permission to modify this wearable. - </text> - <texture_picker - allow_no_texture="true" - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Head Tattoos" - layout="topleft" - left="10" - name="Head Tattoos" - tool_tip="Click to choose a picture" - top="176" - width="82" /> - <texture_picker - allow_no_texture="true" - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Upper Tattoos" - layout="topleft" - left_delta="0" - name="Upper Tattoos" - tool_tip="Click to choose a picture" - top_delta="102" - width="82" /> - <texture_picker - allow_no_texture="true" - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Lower Tattoos" - layout="topleft" - left_delta="0" - name="Lower Tattoos" - tool_tip="Click to choose a picture" - top_delta="102" - width="82" /> - <text - type="string" - length="1" - top="488" - follows="left|top" - font="SansSerif" - halign="right" - height="23" - layout="topleft" - left="10" - name="Item Action Label" - width="130"> - Skin: - </text> - <button - follows="left|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left_pad="2" - name="Save" - top="477" - width="82" /> - <button - follows="left|bottom" - height="23" - label="Save As..." - label_selected="Save As..." - layout="topleft" - left_pad="3" - name="Save As" - top="477" - width="115" /> - <button - follows="left|bottom" - height="23" - label="Revert" - label_selected="Revert" - layout="topleft" - left_pad="3" - name="Revert" - top="477" - width="120" /> - </panel> - <panel - border="false" - background_visible="true" - bg_alpha_color="DkGray2" - follows="left|top|right|bottom" - height="508" - label="Hair" - layout="topleft" - name="Hair" - help_topic="customize_hair_tab" - width="400"> - <icon - follows="top|right" - height="18" - image_name="Lock" - layout="topleft" - left="315" - mouse_opaque="true" - name="square" - top="4" - width="18" /> - <icon - height="16" - top="10" - left="10" - layout="topleft" - mouse_opaque="true" - width="16" /> - <button - follows="left|top" - height="23" - label="Color" - label_selected="Color" - layout="topleft" - left="10" - name="Color" - top="63" - width="82" /> - <button - follows="left|top" - height="23" - label="Style" - label_selected="Style" - layout="topleft" - left_delta="0" - name="Style" - top_pad="4" - width="82" /> - <button - follows="left|top" - height="23" - label="Eyebrows" - label_selected="Eyebrows" - layout="topleft" - name="Eyebrows" - top_pad="4" - width="82" /> - <button - follows="left|top" - height="23" - label="Facial" - label_selected="Facial" - layout="topleft" - name="Facial" - top_pad="4" - width="82" /> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title" - top="10" - width="355"> - [DESC] - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_no_modify" - top="10" - width="355"> - [DESC]: cannot modify - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_loading" - top="10" - width="355"> - [DESC]: loading... - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_not_worn" - top="10" - width="355"> - [DESC]: not worn - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="14" - layout="topleft" - left="10" - name="path" - top="36" - width="373"> - Located in [PATH] - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="not worn instructions" - top="31" - word_wrap="true" - width="373"> - Put on a new hair by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it. - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="no modify instructions" - top="31" - word_wrap="true" - width="373"> - You do not have permission to modify this wearable. - </text> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Texture" - layout="topleft" - left="10" - name="Texture" - tool_tip="Click to choose a picture" - top="176" - width="82" /> - <button - follows="left|top" - height="23" - label="Create New Hair" - label_selected="Create New Hair" - layout="topleft" - left_delta="0" - name="Create New" - top_delta="-89" - width="160" /> - <text - type="string" - length="1" - top="488" - follows="left|top" - font="SansSerif" - halign="right" - height="23" - layout="topleft" - name="Item Action Label" - left="10" - width="130"> - Hair: - </text> - <button - follows="left|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left_pad="2" - name="Save" - top="477" - width="82" /> - <button - follows="left|bottom" - height="23" - label="Save As..." - label_selected="Save As..." - layout="topleft" - left_pad="3" - name="Save As" - top="477" - width="115" /> - <button - follows="left|bottom" - height="23" - label="Revert" - label_selected="Revert" - layout="topleft" - left_pad="3" - name="Revert" - top="477" - width="120" /> - </panel> - <panel - border="false" - background_visible="true" - bg_alpha_color="DkGray2" - follows="left|top|right|bottom" - height="508" - label="Eyes" - layout="topleft" - name="Eyes" - help_topic="customize_eyes_tab" - width="400"> - <icon - follows="top|right" - height="18" - image_name="Lock" - layout="topleft" - left="315" - mouse_opaque="true" - name="square" - top="4" - width="18" /> - <icon - height="16" - top="10" - left="10" - layout="topleft" - mouse_opaque="true" - width="16" /> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title" - top="10" - width="355"> - [DESC] - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_no_modify" - top="10" - width="355"> - [DESC]: cannot modify - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_loading" - top="10" - width="355"> - [DESC]: loading... - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_not_worn" - top="10" - width="355"> - [DESC]: not worn - </text> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left="10" - name="path" - top="36" - width="373"> - Located in [PATH] - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="not worn instructions" - top="31" - word_wrap="true" - width="373"> - Put on a new set of eyes by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it. - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="no modify instructions" - top="31" - word_wrap="true" - width="373"> - You do not have permission to modify this wearable. - </text> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Iris" - layout="topleft" - left="10" - name="Iris" - tool_tip="Click to choose a picture" - top="66" - width="82" /> - <button - follows="left|top" - height="23" - label="Create New Eyes" - label_selected="Create New Eyes" - layout="topleft" - name="Create New" - top="66" - width="160" /> - <text - type="string" - length="1" - bottom="4" - follows="left|bottom" - font="SansSerif" - halign="right" - height="23" - layout="bottomleft" - name="Item Action Label" - left="10" - width="130"> - Eyes: - </text> - <button - follows="left|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left_pad="2" - name="Save" - top="477" - width="82" /> - <button - follows="left|bottom" - height="23" - label="Save As..." - label_selected="Save As..." - layout="topleft" - left_pad="3" - name="Save As" - top="477" - width="115" /> - <button - follows="left|bottom" - height="23" - label="Revert" - label_selected="Revert" - layout="topleft" - left_pad="3" - name="Revert" - top="477" - width="120" /> - </panel> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left="5" - name="clothes_placeholder" - font="SansSerifSmallBold" - top="125" - width="100"> - Clothes - </text> - <placeholder /> - <panel - border="false" - background_visible="true" - bg_alpha_color="DkGray2" - follows="left|top|right|bottom" - height="508" - label="Shirt" - layout="topleft" - name="Shirt" - help_topic="customize_shirt_tab" - top_delta="0" - width="400"> - <icon - follows="top|left" - height="18" - image_name="Lock" - layout="topleft" - left="10" - mouse_opaque="true" - name="square" - top="10" - width="18" /> - <icon - height="16" - top="10" - left="10" - layout="topleft" - mouse_opaque="true" - width="16" /> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Fabric" - layout="topleft" - left="10" - name="Fabric" - tool_tip="Click to choose a picture" - top="66" - width="82" /> - <color_swatch - can_apply_immediately="true" - follows="left|top" - height="108" - label="Color/Tint" - layout="topleft" - name="Color/Tint" - tool_tip="Click to open color picker" - top_delta="102" - width="82" /> - <button - follows="left|top" - height="23" - label="Take Off" - label_selected="Take Off" - layout="topleft" - name="Take Off" - top_pad="4" - width="82" /> - <button - follows="left|top" - height="23" - label="Create New Shirt" - label_selected="Create New Shirt" - layout="topleft" - name="Create New" - top="66" - width="160" /> - <text - type="string" - length="1" - bottom="4" - follows="left|bottom" - font="SansSerif" - halign="right" - height="23" - layout="bottomleft" - name="Item Action Label" - left="10" - width="130"> - Shirt: - </text> - <button - follows="left|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left_pad="2" - name="Save" - top="477" - width="82" /> - <button - follows="left|bottom" - height="23" - label="Save As..." - label_selected="Save As..." - layout="topleft" - left_pad="3" - name="Save As" - top="477" - width="115" /> - <button - follows="left|bottom" - height="23" - label="Revert" - label_selected="Revert" - layout="topleft" - left_pad="3" - name="Revert" - top="477" - width="120" /> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title" - top="10" - width="355"> - [DESC] - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_no_modify" - top="10" - width="355"> - [DESC]: cannot modify - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_loading" - top="10" - width="355"> - [DESC]: loading... - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_not_worn" - top="10" - width="355"> - [DESC]: not worn - </text> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left="10" - name="path" - top="36" - width="373"> - Located in [PATH] - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="not worn instructions" - top="31" - word_wrap="true" - width="373"> - Put on a new shirt by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it. - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="no modify instructions" - top="31" - word_wrap="true" - width="373"> - You do not have permission to modify this wearable. - </text> - </panel> - <panel - border="false" - background_visible="true" - bg_alpha_color="DkGray2" - follows="left|top|right|bottom" - height="508" - label="Pants" - layout="topleft" - name="Pants" - help_topic="customize_pants_tab" - width="400"> - <icon - follows="top|left" - height="18" - image_name="Lock" - layout="topleft" - left="10" - mouse_opaque="true" - name="square" - top="10" - width="18" /> - <icon - height="16" - layout="topleft" - left="10" - mouse_opaque="true" - top="10" - width="16" /> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Fabric" - layout="topleft" - left="10" - name="Fabric" - tool_tip="Click to choose a picture" - top="66" - width="82" /> - <color_swatch - can_apply_immediately="true" - follows="left|top" - height="108" - label="Color/Tint" - layout="topleft" - name="Color/Tint" - tool_tip="Click to open color picker" - top_delta="102" - width="82" /> - <button - follows="left|top" - height="23" - label="Take Off" - label_selected="Take Off" - layout="topleft" - name="Take Off" - top_pad="4" - width="82" /> - <button - follows="left|top" - height="23" - label="Create New Pants" - label_selected="Create New Pants" - layout="topleft" - name="Create New" - top="66" - width="160" /> - <text - type="string" - length="1" - bottom="4" - follows="left|bottom" - font="SansSerif" - halign="right" - height="23" - layout="bottomleft" - name="Item Action Label" - left="10" - width="130"> - Pants: - </text> - <button - follows="left|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left_pad="2" - name="Save" - top="477" - width="82" /> - <button - follows="left|bottom" - height="23" - label="Save As..." - label_selected="Save As..." - layout="topleft" - left_pad="3" - name="Save As" - top="477" - width="115" /> - <button - follows="left|bottom" - height="23" - label="Revert" - label_selected="Revert" - layout="topleft" - left_pad="3" - name="Revert" - top="477" - width="120" /> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title" - top="10" - width="355"> - [DESC] - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_no_modify" - top="10" - width="355"> - [DESC]: cannot modify - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_loading" - top="10" - width="355"> - [DESC]: loading... - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_not_worn" - top="10" - width="355"> - [DESC]: not worn - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="14" - layout="topleft" - left="10" - name="path" - top="36" - width="373"> - Located in [PATH] - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="not worn instructions" - top="31" - word_wrap="true" - width="373"> - Put on new pants by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it. - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="no modify instructions" - top="31" - word_wrap="true" - width="373"> - You do not have permission to modify this wearable. - </text> - </panel> - <panel - border="false" - background_visible="true" - bg_alpha_color="DkGray2" - follows="left|top|right|bottom" - height="508" - label="Shoes" - layout="topleft" - name="Shoes" - help_topic="customize_shoes_tab" - width="400"> - <icon - follows="top|left" - height="18" - image_name="Lock" - layout="topleft" - left="10" - mouse_opaque="true" - name="square" - top="10" - width="18" /> - <icon - height="16" - layout="topleft" - left="10" - mouse_opaque="true" - top="10" - width="16" /> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title" - top="10" - width="355"> - [DESC] - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_no_modify" - top="10" - width="355"> - [DESC]: cannot modify - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_loading" - top="10" - width="355"> - [DESC]: loading... - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_not_worn" - top="10" - width="355"> - [DESC]: not worn - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="14" - layout="topleft" - left="10" - name="path" - top="36" - width="373"> - Located in [PATH] - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="not worn instructions" - top="31" - word_wrap="true" - width="373"> - Put on a new pair of shoes by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it. - </text> - <button - follows="left|top" - height="23" - label="Create New Shoes" - label_selected="Create New Shoes" - layout="topleft" - name="Create New" - top_pad="18" - width="160" /> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="no modify instructions" - top="31" - word_wrap="true" - width="373"> - You do not have permission to modify this wearable. - </text> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Fabric" - layout="topleft" - left="10" - name="Fabric" - tool_tip="Click to choose a picture" - top="66" - width="82" /> - <color_swatch - can_apply_immediately="true" - follows="left|top" - height="108" - label="Color/Tint" - layout="topleft" - name="Color/Tint" - tool_tip="Click to open color picker" - top_delta="102" - width="82" /> - <button - follows="left|top" - height="23" - label="Take Off" - label_selected="Take Off" - layout="topleft" - name="Take Off" - top_pad="4" - width="82" /> - <text - type="string" - length="1" - bottom="4" - follows="left|bottom" - font="SansSerif" - halign="right" - height="23" - layout="bottomleft" - left="10" - name="Item Action Label" - width="130"> - Shoes: - </text> - <button - follows="left|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left_pad="2" - name="Save" - top="477" - width="82" /> - <button - follows="left|bottom" - height="23" - label="Save As..." - label_selected="Save As..." - layout="topleft" - left_pad="3" - name="Save As" - top="477" - width="115" /> - <button - follows="left|bottom" - height="23" - label="Revert" - label_selected="Revert" - layout="topleft" - left_pad="3" - name="Revert" - top="477" - width="120" /> - </panel> - <panel - border="false" - background_visible="true" - bg_alpha_color="DkGray2" - follows="left|top|right|bottom" - height="508" - label="Socks" - layout="topleft" - name="Socks" - help_topic="customize_socks_tab" - width="400"> - <icon - follows="top|left" - height="18" - image_name="Lock" - layout="topleft" - left="10" - mouse_opaque="true" - name="square" - top="10" - width="18" /> - <icon - height="16" - layout="topleft" - left="10" - mouse_opaque="true" - top="10" - width="16" /> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title" - top="10" - width="355"> - [DESC] - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_no_modify" - top="10" - width="355"> - [DESC]: cannot modify - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_loading" - top="10" - width="355"> - [DESC]: loading... - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_not_worn" - top="10" - width="355"> - [DESC]: not worn - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="14" - layout="topleft" - left="10" - name="path" - top="36" - width="373"> - Located in [PATH] - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="not worn instructions" - top="31" - word_wrap="true" - width="373"> - Put on new socks by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it. - </text> - <button - follows="left|top" - height="23" - label="Create New Socks" - label_selected="Create New Socks" - layout="topleft" - name="Create New" - top_pad="7" - width="160" /> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="no modify instructions" - top="31" - word_wrap="true" - width="373"> - You do not have permission to modify this wearable. - </text> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Fabric" - layout="topleft" - left="10" - name="Fabric" - tool_tip="Click to choose a picture" - top="66" - width="82" /> - <color_swatch - can_apply_immediately="true" - follows="left|top" - height="108" - label="Color/Tint" - layout="topleft" - name="Color/Tint" - tool_tip="Click to open color picker" - top_delta="102" - width="82" /> - <button - follows="left|top" - height="23" - label="Take Off" - label_selected="Take Off" - layout="topleft" - name="Take Off" - top_pad="4" - width="82" /> - <text - type="string" - length="1" - bottom="4" - follows="left|bottom" - font="SansSerif" - halign="right" - height="23" - layout="bottomleft" - left="10" - name="Item Action Label" - width="130"> - Socks: - </text> - <button - follows="left|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left_pad="2" - name="Save" - top="477" - width="82" /> - <button - follows="left|bottom" - height="23" - label="Save As..." - label_selected="Save As..." - layout="topleft" - left_pad="3" - name="Save As" - top="477" - width="115" /> - <button - follows="left|bottom" - height="23" - label="Revert" - label_selected="Revert" - layout="topleft" - left_pad="3" - name="Revert" - top="477" - width="120" /> - </panel> - <panel - border="false" - background_visible="true" - bg_alpha_color="DkGray2" - follows="left|top|right|bottom" - height="508" - label="Jacket" - layout="topleft" - name="Jacket" - help_topic="customize_jacket_tab" - width="400"> - <icon - follows="top|left" - height="18" - image_name="Lock" - layout="topleft" - left="10" - mouse_opaque="true" - name="square" - top="10" - width="18" /> - <icon - height="16" - layout="topleft" - left="10" - mouse_opaque="true" - top="10" - width="16" /> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title" - top="10" - width="355"> - [DESC] - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_no_modify" - top="10" - width="355"> - [DESC]: cannot modify - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_loading" - top="10" - width="355"> - [DESC]: loading... - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_not_worn" - top="10" - width="355"> - [DESC]: not worn - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="14" - layout="topleft" - left="10" - name="path" - top="36" - width="373"> - Located in [PATH] - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="not worn instructions" - top="31" - word_wrap="true" - width="373"> - Put on a new jacket by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it. - </text> - <button - follows="left|top" - height="23" - label="Create New Jacket" - label_selected="Create New Jacket" - layout="topleft" - name="Create New" - top_pad="7" - width="160" /> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="no modify instructions" - top="31" - word_wrap="true" - width="373"> - You do not have permission to modify this wearable. - </text> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Upper Fabric" - layout="topleft" - left="10" - name="Upper Fabric" - tool_tip="Click to choose a picture" - top="66" - width="82" /> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Lower Fabric" - layout="topleft" - name="Lower Fabric" - tool_tip="Click to choose a picture" - top_delta="102" - width="82" /> - <color_swatch - can_apply_immediately="true" - follows="left|top" - height="108" - label="Color/Tint" - layout="topleft" - name="Color/Tint" - tool_tip="Click to open color picker" - top_delta="102" - width="82" /> - <button - follows="left|top" - height="23" - label="Take Off" - label_selected="Take Off" - layout="topleft" - name="Take Off" - top_pad="4" - width="82" /> - <text - type="string" - length="1" - bottom="4" - follows="left|bottom" - font="SansSerif" - halign="right" - height="23" - layout="bottomleft" - left="10" - name="Item Action Label" - width="130"> - Jacket: - </text> - <button - follows="left|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left_pad="2" - name="Save" - top="477" - width="82" /> - <button - follows="left|bottom" - height="23" - label="Save As..." - label_selected="Save As..." - layout="topleft" - left_pad="3" - name="Save As" - top="477" - width="115" /> - <button - follows="left|bottom" - height="23" - label="Revert" - label_selected="Revert" - layout="topleft" - left_pad="3" - name="Revert" - top="477" - width="120" /> - </panel> - <panel - border="false" - background_visible="true" - bg_alpha_color="DkGray2" - follows="left|top|right|bottom" - height="508" - label="Gloves" - layout="topleft" - name="Gloves" - help_topic="customize_gloves_tab" - width="400"> - <icon - follows="top|left" - height="18" - image_name="Lock" - layout="topleft" - left="10" - mouse_opaque="true" - name="square" - top="10" - width="18" /> - <icon - height="16" - layout="topleft" - left="10" - mouse_opaque="true" - top="10" - width="16" /> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title" - top="10" - width="355"> - [DESC] - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_no_modify" - top="10" - width="355"> - [DESC]: cannot modify - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_loading" - top="10" - width="355"> - [DESC]: loading... - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_not_worn" - top="10" - width="355"> - [DESC]: not worn - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="14" - layout="topleft" - left="10" - name="path" - top="36" - width="373"> - Located in [PATH] - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="not worn instructions" - top="31" - word_wrap="true" - width="373"> - Put on new gloves by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it. - </text> - <button - follows="left|top" - height="23" - label="Create New Gloves" - label_selected="Create New Gloves" - layout="topleft" - name="Create New" - top_pad="7" - width="160" /> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="no modify instructions" - top="31" - word_wrap="true" - width="373"> - You do not have permission to modify this wearable. - </text> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Fabric" - layout="topleft" - left="10" - name="Fabric" - tool_tip="Click to choose a picture" - top="66" - width="82" /> - <color_swatch - can_apply_immediately="true" - follows="left|top" - height="108" - label="Color/Tint" - layout="topleft" - name="Color/Tint" - tool_tip="Click to open color picker" - top_delta="102" - width="82" /> - <button - follows="left|top" - height="23" - label="Take Off" - label_selected="Take Off" - layout="topleft" - name="Take Off" - top_pad="4" - width="82" /> - <text - type="string" - length="1" - bottom="4" - follows="left|bottom" - font="SansSerif" - halign="right" - height="23" - layout="bottomleft" - left="10" - name="Item Action Label" - width="130"> - Gloves: - </text> - <button - follows="left|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left_pad="2" - name="Save" - top="477" - width="82" /> - <button - follows="left|bottom" - height="23" - label="Save As..." - label_selected="Save As..." - layout="topleft" - left_pad="3" - name="Save As" - top="477" - width="115" /> - <button - follows="left|bottom" - height="23" - label="Revert" - label_selected="Revert" - layout="topleft" - left_pad="3" - name="Revert" - top="477" - width="120" /> - </panel> - <panel - border="false" - background_visible="true" - bg_alpha_color="DkGray2" - follows="left|top|right|bottom" - height="508" - label="Undershirt" - layout="topleft" - name="Undershirt" - help_topic="customize_undershirt_tab" - width="400"> - <icon - follows="top|left" - height="18" - image_name="Lock" - layout="topleft" - left="10" - mouse_opaque="true" - name="square" - top="10" - width="18" /> - <icon - height="16" - layout="topleft" - left="10" - mouse_opaque="true" - top="10" - width="16" /> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title" - top="10" - width="355"> - [DESC] - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_no_modify" - top="10" - width="355"> - [DESC]: cannot modify - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_loading" - top="10" - width="355"> - [DESC]: loading... - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_not_worn" - top="10" - width="355"> - [DESC]: not worn - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="14" - layout="topleft" - left="10" - name="path" - top="36" - width="373"> - Located in [PATH] - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="not worn instructions" - top="31" - word_wrap="true" - width="373"> - Put on a new undershirt by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it. - </text> - <button - follows="left|top" - height="23" - label="Create New Undershirt" - label_selected="Create New Undershirt" - layout="topleft" - name="Create New" - top_pad="7" - width="160" /> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="no modify instructions" - top="31" - word_wrap="true" - width="373"> - You do not have permission to modify this wearable. - </text> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Fabric" - layout="topleft" - left="10" - name="Fabric" - tool_tip="Click to choose a picture" - top="66" - width="82" /> - <color_swatch - can_apply_immediately="true" - follows="left|top" - height="108" - label="Color/Tint" - layout="topleft" - name="Color/Tint" - tool_tip="Click to open color picker" - top_delta="102" - width="82" /> - <button - follows="left|top" - height="23" - label="Take Off" - label_selected="Take Off" - layout="topleft" - name="Take Off" - top_pad="4" - width="82" /> - <text - type="string" - length="1" - bottom="4" - follows="left|bottom" - font="SansSerif" - halign="right" - height="23" - layout="bottomleft" - left="10" - name="Item Action Label" - width="130"> - Undershirt: - </text> - <button - follows="left|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left_pad="2" - name="Save" - top="477" - width="82" /> - <button - follows="left|bottom" - height="23" - label="Save As..." - label_selected="Save As..." - layout="topleft" - left_pad="3" - name="Save As" - top="477" - width="115" /> - <button - follows="left|bottom" - height="23" - label="Revert" - label_selected="Revert" - layout="topleft" - left_pad="3" - name="Revert" - top="477" - width="120" /> - </panel> - <panel - border="false" - background_visible="true" - bg_alpha_color="DkGray2" - follows="left|top|right|bottom" - height="508" - label="Underpants" - layout="topleft" - name="Underpants" - help_topic="customize_underpants_tab" - width="400"> - <icon - follows="top|left" - height="18" - image_name="Lock" - layout="topleft" - left="10" - mouse_opaque="true" - name="square" - top="10" - width="18" /> - <icon - height="16" - layout="topleft" - left="10" - mouse_opaque="true" - top="10" - width="16" /> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title" - top="10" - width="355"> - [DESC] - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_no_modify" - top="10" - width="355"> - [DESC]: cannot modify - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_loading" - top="10" - width="355"> - [DESC]: loading... - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_not_worn" - top="10" - width="355"> - [DESC]: not worn - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="14" - layout="topleft" - left="10" - name="path" - top="36" - width="373"> - Located in [PATH] - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="not worn instructions" - top="31" - word_wrap="true" - width="373"> - Put on new underpants by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it. - </text> - <button - follows="left|top" - height="23" - label="Create New Underpants" - label_selected="Create New Underpants" - layout="topleft" - name="Create New" - top_pad="7" - width="160" /> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="no modify instructions" - top="31" - word_wrap="true" - width="373"> - You do not have permission to modify this wearable. - </text> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Fabric" - layout="topleft" - left="10" - name="Fabric" - tool_tip="Click to choose a picture" - top="66" - width="82" /> - <color_swatch - can_apply_immediately="true" - follows="left|top" - height="108" - label="Color/Tint" - layout="topleft" - name="Color/Tint" - tool_tip="Click to open color picker" - top_delta="102" - width="82" /> - <button - follows="left|top" - height="23" - label="Take Off" - label_selected="Take Off" - layout="topleft" - name="Take Off" - top_pad="4" - width="82" /> - <text - type="string" - length="1" - bottom="4" - follows="left|bottom" - font="SansSerif" - halign="right" - height="23" - layout="bottomleft" - left="10" - name="Item Action Label" - width="130"> - Underpants: - </text> - <button - follows="left|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left_pad="2" - name="Save" - top="477" - width="82" /> - <button - follows="left|bottom" - height="23" - label="Save As..." - label_selected="Save As..." - layout="topleft" - left_pad="3" - name="Save As" - top="477" - width="115" /> - <button - follows="left|bottom" - height="23" - label="Revert" - label_selected="Revert" - layout="topleft" - left_pad="3" - name="Revert" - top="477" - width="120" /> - </panel> - <panel - border="false" - background_visible="true" - bg_alpha_color="DkGray2" - follows="left|top|right|bottom" - height="508" - label="Skirt" - layout="topleft" - name="Skirt" - help_topic="customize_skirt_tab" - width="400"> - <icon - follows="top|left" - height="18" - image_name="Lock" - layout="topleft" - left="10" - mouse_opaque="true" - name="square" - top="10" - width="18" /> - <icon - height="16" - layout="topleft" - left="10" - mouse_opaque="true" - top="10" - width="16" /> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title" - top="10" - width="355"> - [DESC] - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_no_modify" - top="10" - width="355"> - [DESC]: cannot modify - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_loading" - top="10" - width="355"> - [DESC]: loading... - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_not_worn" - top="10" - width="355"> - [DESC]: not worn - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="14" - layout="topleft" - left="10" - name="path" - top="36" - width="373"> - Located in [PATH] - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="not worn instructions" - top="31" - word_wrap="true" - width="373"> - Put on a new skirt by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it. - </text> - <button - follows="left|top" - height="23" - label="Create New Skirt" - label_selected="Create New Skirt" - layout="topleft" - name="Create New" - top_pad="7" - width="160" /> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="no modify instructions" - top="31" - word_wrap="true" - width="373"> - You do not have permission to modify this wearable. - </text> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Fabric" - layout="topleft" - left="10" - name="Fabric" - tool_tip="Click to choose a picture" - top="66" - width="82" /> - <color_swatch - can_apply_immediately="true" - follows="left|top" - height="108" - label="Color/Tint" - layout="topleft" - name="Color/Tint" - tool_tip="Click to open color picker" - top_delta="102" - width="82" /> - <button - follows="left|top" - height="23" - label="Take Off" - label_selected="Take Off" - layout="topleft" - name="Take Off" - top_pad="4" - width="82" /> - <text - type="string" - length="1" - bottom="4" - follows="left|bottom" - font="SansSerif" - halign="right" - height="23" - layout="bottomleft" - left="10" - name="Item Action Label" - width="130"> - Skirt: - </text> - <button - follows="left|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left_pad="2" - name="Save" - top="477" - width="82" /> - <button - follows="left|bottom" - height="23" - label="Save As..." - label_selected="Save As..." - layout="topleft" - left_pad="3" - name="Save As" - top="477" - width="115" /> - <button - follows="left|bottom" - height="23" - label="Revert" - label_selected="Revert" - layout="topleft" - left_pad="3" - name="Revert" - top="477" - width="120" /> - </panel> - <panel - border="false" - background_visible="true" - bg_alpha_color="DkGray2" - follows="left|top|right|bottom" - height="508" - label="Tattoo" - layout="topleft" - name="Tattoo" - help_topic="customize_tattoo_tab" - width="400"> - <icon - follows="top|left" - height="18" - image_name="Lock" - layout="topleft" - left="10" - mouse_opaque="true" - name="square" - top="10" - width="18" /> - <icon - height="16" - layout="topleft" - left="10" - mouse_opaque="true" - top="10" - width="16" /> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title" - top="10" - width="355"> - [DESC] - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_no_modify" - top="10" - width="355"> - [DESC]: cannot modify - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_loading" - top="10" - width="355"> - [DESC]: loading... - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_not_worn" - top="10" - width="355"> - [DESC]: not worn - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="14" - layout="topleft" - left="10" - name="path" - top="36" - width="373"> - Located in [PATH] - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="not worn instructions" - top="31" - word_wrap="true" - width="373"> - Put on a new tattoo by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it. - </text> - <button - follows="left|top" - height="23" - label="Create New Tattoo" - label_selected="Create New Tattoo" - layout="topleft" - name="Create New" - top_pad="7" - width="160" /> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="no modify instructions" - top="31" - word_wrap="true" - width="373"> - You do not have permission to modify this wearable. - </text> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Head Tattoo" - layout="topleft" - left="10" - name="Head Tattoo" - tool_tip="Click to choose a picture" - top="66" - width="82" /> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Upper Tattoo" - layout="topleft" - name="Upper Tattoo" - tool_tip="Click to choose a picture" - left_delta="90" - width="82" /> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Lower Tattoo" - layout="topleft" - name="Lower Tattoo" - tool_tip="Click to choose a picture" - left_delta="90" - width="82" /> - <button - follows="left|top" - height="23" - label="Take Off" - label_selected="Take Off" - layout="topleft" - name="Take Off" - top_pad="4" - left="10" - width="82" /> - <text - type="string" - length="1" - bottom="4" - follows="left|bottom" - font="SansSerif" - halign="right" - height="23" - layout="bottomleft" - left="10" - name="Item Action Label" - width="130"> - Tattoo: - </text> - <button - follows="left|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left_pad="2" - name="Save" - top="477" - width="82" /> - <button - follows="left|bottom" - height="23" - label="Save As..." - label_selected="Save As..." - layout="topleft" - left_pad="3" - name="Save As" - top="477" - width="115" /> - <button - follows="left|bottom" - height="23" - label="Revert" - label_selected="Revert" - layout="topleft" - left_pad="3" - name="Revert" - top="477" - width="120" /> - </panel> - <panel - border="false" - background_visible="true" - bg_alpha_color="DkGray2" - follows="left|top|right|bottom" - height="508" - label="Alpha" - layout="topleft" - name="Alpha" - help_topic="customize_alpha_tab" - width="400"> - <icon - follows="top|left" - height="18" - image_name="Lock" - layout="topleft" - left="10" - mouse_opaque="true" - name="square" - top="10" - width="18" /> - <icon - height="16" - layout="topleft" - left="10" - mouse_opaque="true" - top="10" - width="16" /> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title" - top="10" - width="355"> - [DESC] - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_no_modify" - top="10" - width="355"> - [DESC]: cannot modify - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_loading" - top="10" - width="355"> - [DESC]: loading... - </text> - <text - type="string" - length="1" - follows="left|top|right" - font="SansSerif" - height="16" - layout="topleft" - left="31" - name="title_not_worn" - top="10" - width="355"> - [DESC]: not worn - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="14" - layout="topleft" - left="10" - name="path" - top="36" - width="373"> - Located in [PATH] - </text> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="not worn instructions" - top="31" - word_wrap="true" - width="373"> - Put on a new alpha mask by dragging one from your inventory to your avatar. Alternately, you create a new one from scratch and wear it. - </text> - <button - follows="left|top" - height="23" - label="Create New Alpha" - label_selected="Create New Alpha" - layout="topleft" - name="Create New" - top_pad="18" - width="160" /> - <text - type="string" - length="1" - follows="left|top|right" - height="28" - layout="topleft" - left="10" - name="no modify instructions" - top="31" - word_wrap="true" - width="373"> - You do not have permission to modify this wearable. - </text> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Lower Alpha" - layout="topleft" - left="10" - name="Lower Alpha" - tool_tip="Click to choose a picture" - top="66" - width="82" /> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Upper Alpha" - layout="topleft" - name="Upper Alpha" - tool_tip="Click to choose a picture" - left_delta="90" - width="82" /> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Head Alpha" - layout="topleft" - name="Head Alpha" - tool_tip="Click to choose a picture" - left_delta="90" - width="82" /> - <check_box - control_name="LowerAlphaTextureInvisible" - follows="left" - height="16" - layout="topleft" - left="43" - name="lower alpha texture invisible" - top_delta="96" - width="16" /> - <check_box - control_name="UpperAlphaTextureInvisible" - follows="left" - height="16" - layout="topleft" - left_pad="72" - name="upper alpha texture invisible" - width="16" /> - <check_box - control_name="HeadAlphaTextureInvisible" - follows="left" - height="16" - layout="topleft" - left_pad="72" - name="head alpha texture invisible" - width="16" /> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Eye Alpha" - layout="topleft" - name="Eye Alpha" - tool_tip="Click to choose a picture" - left="10" - top_pad="20" - width="82" /> - <texture_picker - can_apply_immediately="true" - default_image_name="Default" - follows="left|top" - height="108" - label="Hair Alpha" - layout="topleft" - name="Hair Alpha" - left_delta="90" - tool_tip="Click to choose a picture" - width="82" /> - <check_box - control_name="Eye AlphaTextureInvisible" - follows="left" - height="16" - layout="topleft" - left="43" - name="eye alpha texture invisible" - top_delta="96" - width="16" /> - <check_box - control_name="HairAlphaTextureInvisible" - follows="left" - height="16" - layout="topleft" - left_pad="72" - name="hair alpha texture invisible" - width="16" /> - <button - follows="left|top" - height="23" - label="Take Off" - label_selected="Take Off" - layout="topleft" - name="Take Off" - left="10" - top_pad="20" - width="82" /> - <text - type="string" - length="1" - bottom="4" - follows="left|bottom" - font="SansSerif" - halign="right" - height="23" - layout="bottomleft" - left="10" - name="Item Action Label" - width="130"> - Alpha: - </text> - <button - follows="left|bottom" - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left_pad="2" - name="Save" - top="477" - width="82" /> - <button - follows="left|bottom" - height="23" - label="Save As..." - label_selected="Save As..." - layout="topleft" - left_pad="3" - name="Save As" - top="477" - width="115" /> - <button - follows="left|bottom" - height="23" - label="Revert" - label_selected="Revert" - layout="topleft" - left_pad="3" - name="Revert" - top="477" - width="120" /> - </panel> - </tab_container> - <scroll_container - follows="left|top|right|bottom" - height="409" - layout="topleft" - left="247" - mouse_opaque="false" - name="panel_container" - top="92" - width="330"> - <scrolling_panel_list - follows="left|bottom" - layout="topleft" - name="panel_list" /> - </scroll_container> - <button - bottom="460" - follows="right|left" - height="23" - label="Script Info" - label_selected="Script Info" - layout="topleft" - name="script_info" - tool_tip="Show scripts attached to your avatar" - left="13" - width="90" ></button> - <button - bottom="574" - follows="right|bottom" - height="23" - label="Make Outfit" - label_selected="Make Outfit" - layout="topleft" - name="make_outfit_btn" - right="-218" - width="120" /> - <button - bottom="574" - follows="right|bottom" - height="23" - label="Cancel" - label_selected="Cancel" - layout="topleft" - name="Cancel" - right="-10" - width="100" /> - <button - bottom="574" - follows="right|bottom" - height="23" - label="OK" - label_selected="OK" - layout="topleft" - name="Ok" - right="-114" - width="100" /> -</floater> diff --git a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml index 42a9ff551e..65e2462ef8 100644 --- a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml @@ -359,9 +359,9 @@ increment="1" initial_value="0" label="Hour" - label_width="30" + label_width="35" layout="topleft" - left_delta="25" + left_delta="20" max_val="100" name="WLCurKeyHour" top_pad="4" @@ -374,13 +374,13 @@ increment="5" initial_value="0" label="Min" - label_width="20" + label_width="45" layout="topleft" left_pad="5" max_val="55" name="WLCurKeyMin" top_delta="0" - width="60" /> + width="85" /> <text type="string" length="1" @@ -456,9 +456,9 @@ increment="1" initial_value="0" label="Hour" - label_width="30" + label_width="33" layout="topleft" - left_delta="0" + left_delta="-3" max_val="100" name="WLLengthOfDayHour" top_pad="4" @@ -471,13 +471,13 @@ increment="1" initial_value="0" label="Min" - label_width="20" + label_width="25" layout="topleft" - left_pad="5" + left_pad="2" max_val="59" name="WLLengthOfDayMin" top_delta="0" - width="60" /> + width="65" /> <spinner control_name="WLLengthOfDaySec" decimal_digits="0" @@ -486,13 +486,13 @@ increment="1" initial_value="24" label="Sec" - label_width="20" + label_width="25" layout="topleft" - left_pad="5" + left_pad="2" max_val="59" name="WLLengthOfDaySec" top_delta="0" - width="60"/> + width="65"/> <text type="string" halign="right" diff --git a/indra/newview/skins/default/xui/en/floater_device_settings.xml b/indra/newview/skins/default/xui/en/floater_device_settings.xml deleted file mode 100644 index 91a7a678da..0000000000 --- a/indra/newview/skins/default/xui/en/floater_device_settings.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater - legacy_header_height="18" - height="260" - layout="topleft" - name="floater_device_settings" - help_topic="floater_device_settings" - title="VOICE CHAT DEVICE SETTINGS" - width="405"> - <panel - bottom="260" - filename="panel_audio_device.xml" - layout="topleft" - left="2" - name="device_settings" - right="-5" - top="20" /> -</floater> diff --git a/indra/newview/skins/default/xui/en/floater_first_time_tip.xml b/indra/newview/skins/default/xui/en/floater_first_time_tip.xml deleted file mode 100644 index e4ac8fed77..0000000000 --- a/indra/newview/skins/default/xui/en/floater_first_time_tip.xml +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater - legacy_header_height="18" - can_close="true" - can_minimize="false" - height="250" - layout="topleft" - name="set_name_in_the_cladd" - help_topic="set_name_in_the_cladd" - save_rect="true" - width="300"> - <check_box - height="20" - follows="left|bottom|right" - label="Turn off Quick Tips" - layout="topleft" - left="5" - name="DontShowFirstTimeTip_checkbox" - text_enabled_color="white" - top="225" - width="200" /> -</floater> diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml index 214fb6ce54..837923bcf6 100644 --- a/indra/newview/skins/default/xui/en/floater_help_browser.xml +++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml @@ -24,6 +24,7 @@ follows="left|right|top|bottom" layout="topleft" left="5" + orientation="vertical" name="stack1" top="20" width="640"> @@ -35,7 +36,8 @@ user_resize="false" width="620"> <web_browser - bottom="-11" + trusted_content="true" + bottom="-25" follows="left|right|top|bottom" layout="topleft" left="0" diff --git a/indra/newview/skins/default/xui/en/floater_im.xml b/indra/newview/skins/default/xui/en/floater_im.xml deleted file mode 100644 index 55efe83820..0000000000 --- a/indra/newview/skins/default/xui/en/floater_im.xml +++ /dev/null @@ -1,80 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<multi_floater - legacy_header_height="18" - can_resize="true" - follows="left|bottom" - height="422" - layout="topleft" - min_height="130" - min_width="350" - name="im_floater" - help_topic="im_floater" - save_rect="true" - title="Instant Message" - width="419"> - <multi_floater.string - name="only_user_message"> - You are the only Resident in this session. - </multi_floater.string> - <multi_floater.string - name="offline_message"> - [FIRST] [LAST] is offline. - </multi_floater.string> - <multi_floater.string - name="invite_message"> - Click the [BUTTON NAME] button to accept/connect to this voice chat. - </multi_floater.string> - <multi_floater.string - name="muted_message"> - You have blocked this Resident. Sending a message will automatically unblock them. - </multi_floater.string> - <multi_floater.string - name="generic_request_error"> - Error making request, please try again later. - </multi_floater.string> - <multi_floater.string - name="insufficient_perms_error"> - You do not have sufficient permissions. - </multi_floater.string> - <multi_floater.string - name="session_does_not_exist_error"> - The session no longer exists - </multi_floater.string> - <multi_floater.string - name="no_ability_error"> - You do not have that ability. - </multi_floater.string> - <multi_floater.string - name="not_a_mod_error"> - You are not a session moderator. - </multi_floater.string> - <multi_floater.string - name="muted_error"> - A group moderator disabled your text chat. - </multi_floater.string> - <multi_floater.string - name="add_session_event"> - Unable to add Residents to chat session with [RECIPIENT]. - </multi_floater.string> - <multi_floater.string - name="message_session_event"> - Unable to send your message to the chat session with [RECIPIENT]. - </multi_floater.string> - <multi_floater.string - name="removed_from_group"> - You have been removed from the group. - </multi_floater.string> - <multi_floater.string - name="close_on_no_ability"> - You no longer have the ability to be in the chat session. - </multi_floater.string> - <tab_container - follows="left|top|right|bottom" - height="406" - layout="topleft" - left="1" - name="Preview Tabs" - tab_position="bottom" - top="16" - width="417" /> -</multi_floater> diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index 6c1214f152..a371e98322 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -30,12 +30,19 @@ top="20" left="0"> <layout_panel - name="panel_im_control_panel" - layout="topleft" - follows="left" - min_width="115" + name="im_control_panel_holder" + min_width="115" + width="150" + height="320" auto_resize="false" - user_resize="true" /> + user_resize="false"> + <panel + name="panel_im_control_panel" + layout="topleft" + height="320" + width="150" + follows="all"/> + </layout_panel> <layout_panel default_tab_group="3" left="0" diff --git a/indra/newview/skins/default/xui/en/floater_map.xml b/indra/newview/skins/default/xui/en/floater_map.xml index efd96624ab..6370ff9243 100644 --- a/indra/newview/skins/default/xui/en/floater_map.xml +++ b/indra/newview/skins/default/xui/en/floater_map.xml @@ -7,8 +7,8 @@ follows="top|right" height="174" layout="topleft" - min_height="174" - min_width="174" + min_height="128" + min_width="128" name="Map" title="" help_topic="map" @@ -19,40 +19,8 @@ top="0" width="200"> <floater.string - name="mini_map_north"> - N - </floater.string> - <floater.string - name="mini_map_east"> - E - </floater.string> - <floater.string - name="mini_map_west"> - W - </floater.string> - <floater.string - name="mini_map_south"> - S - </floater.string> - <floater.string - name="mini_map_southeast"> - SE - </floater.string> - <floater.string - name="mini_map_northeast"> - NE - </floater.string> - <floater.string - name="mini_map_southwest"> - SW - </floater.string> - <floater.string - name="mini_map_northwest"> - NW - </floater.string> - <floater.string name="ToolTipMsg"> - [AGENT][REGION](Double-click to open Map) + [REGION](Double-click to open Map, shift-drag to pan) </floater.string> <floater.string name="mini_map_caption"> MINIMAP diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml index c02d607586..4701d7eca8 100644 --- a/indra/newview/skins/default/xui/en/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml @@ -9,7 +9,7 @@ name="floater_about" help_topic="floater_about" save_rect="true" - single_instance="true" + auto_tile="true" title="MEDIA BROWSER" width="820"> <floater.string @@ -26,10 +26,12 @@ layout="topleft" left="10" name="stack1" + orientation="vertical" top="20" width="800"> <layout_panel auto_resize="false" + default_tab_group="1" height="20" layout="topleft" left="0" @@ -77,11 +79,13 @@ <combo_box allow_text_entry="true" follows="left|top|right" + tab_group="1" height="20" layout="topleft" left_pad="5" max_chars="1024" name="address" + combo_editor.select_on_focus="true" top_delta="0" width="540"> <combo_box.commit_callback @@ -189,9 +193,9 @@ top_delta="0" user_resize="false" width="540"> - <web_browser + <web_browser bottom="-30" - follows="left|right|top|bottom" + follows="all" layout="topleft" left="0" name="browser" diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml index de9f3ee87e..e7c2a8bc6f 100644 --- a/indra/newview/skins/default/xui/en/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml @@ -49,10 +49,13 @@ </text> <combo_box bottom_delta="0" left="97" follows="left|top" height="18" name="high detail combo" width="100" tool_tip="Specify mesh for this level of detail"> - <combo_item name="high choose file"> + <combo_item name="high none" value="none"> + None + </combo_item> + <combo_item name="high choose file" value="file"> Choose File... </combo_item> - <combo_item name="high triangle limit"> + <combo_item name="high triangle limit" value="limit"> Triangle Limit </combo_item> </combo_box> @@ -67,10 +70,13 @@ </text> <combo_box bottom_delta="0" left="97" follows="left|top" height="18" name="medium detail combo" width="100" tool_tip="Specify mesh for this level of detail"> - <combo_item name="medium choose file"> + <combo_item name="medium none" value="none"> + None + </combo_item> + <combo_item name="medium choose file" value="file"> Choose File... </combo_item> - <combo_item name="medium triangle limit"> + <combo_item name="medium triangle limit" value="limit"> Triangle Limit </combo_item> </combo_box> @@ -85,10 +91,13 @@ </text> <combo_box bottom_delta="0" left="97" follows="left|top" height="18" name="low detail combo" width="100" tool_tip="Specify mesh for this level of detail"> - <combo_item name="low choose file"> + <combo_item name="low none" value="none"> + None + </combo_item> + <combo_item name="low choose file" value="file"> Choose File... </combo_item> - <combo_item name="low triangle limit"> + <combo_item name="low triangle limit" value="limit"> Triangle Limit </combo_item> </combo_box> @@ -101,12 +110,15 @@ <text bottom_delta="35" follows="top|left" height="15" left="10" name="lowest_lod_label"> Lowest LOD: </text> - <combo_box bottom_delta="0" left="97" folimpostors="left|top" height="18" + <combo_box bottom_delta="0" left="97" follows="left|top" height="18" name="lowest detail combo" width="100" tool_tip="Specify mesh for this level of detail"> - <combo_item name="lowest choose file"> + <combo_item name="lowest none" value="none"> + None + </combo_item> + <combo_item name="lowest choose file" value="file"> Choose File... </combo_item> - <combo_item name="lowest triangle limit"> + <combo_item name="lowest triangle limit" value="limit"> Triangle Limit </combo_item> </combo_box> @@ -121,10 +133,13 @@ </text> <combo_box bottom_delta="0" left="97" follows="left|top" height="18" name="physics detail combo" width="100"> - <combo_item name="physics choose file"> + <combo_item name="physics none" value="none"> + None + </combo_item> + <combo_item name="physics choose file" value="file"> Choose File... </combo_item> - <combo_item name="physics triangle limit"> + <combo_item name="physics triangle limit" value="limit"> Triangle Limit... </combo_item> </combo_box> @@ -134,8 +149,21 @@ <text bottom_delta="25" follows="top|left" height="15" left="10" name="physics info" width="300"> [TRIANGLES] Triangles, [HULLS] Hulls, [POINTS] Points </text> - - <text bottom_delta="20" follows="top|left" height="15" name="description_label"> + + <text bottom_delta="25" follows="top|left" height="15" left="10" name="physics info" width="300"> + Include: + </text> + + <check_box bottom_delta="20" follow="bottom|left" height="20" label="Textures" + left="15" width="125" name="upload_textures" tool_tip="Upload associated textures "/> + + <check_box bottom_delta="20" follow="bottom|left" height="20" label="Skin Weights" + left="15" width="125" name="upload_skin" tool_tip="Upload vertex skin weighting information."/> + + <check_box bottom_delta="20" follow="bottom|left" height="20" label="Joint Positions" + left="15" width="125" name="upload_joints" tool_tip="Upload joint position information (will override avatar joint positions when mesh is worn)."/> + + <text bottom_delta="35" follows="top|left" height="15" name="description_label"> Description: <!-- Info: [PRIM_COST] prim equivalents, [TEXTURES] textures. --> </text> @@ -144,12 +172,18 @@ <button bottom_delta="25" follows="bottom|left" height="20" label="Upload" left="15" name="ok_btn" width="125" tool_tip="Upload to simulator"/> - <check_box bottom_delta="0" follow="bottom|left" height="20" label="Upload Textures" - left="160" width="125" name="upload_textures" tool_tip="Upload associated textures "/> <text bottom_delta="20" left="15" follows="top|left" height="15" name="description_label" text_color="1 0.82 0.46 1"> (No charge for upload during First Look) </text> <text bottom_delta="20" left="15" follows="top|left" height="15" name="upload_message"> [MESSAGE] </text> - </floater> + <text bottom_delta="45" left="15" follows="top|left" height="15" name="debug section"> + DEBUG: + </text> + <text bottom_delta="20" left="15" follows="top|left" height="15" name="streaming cost"> + Streaming Cost: [COST] + </text> + <spinner bottom_delta="20" label="Scale" left="15" width="120" name="debug scale" decimal_digits="3" increment="1" min_val="0" max_val="64" initial_value="1" tool_tip="Scale to base streaming cost on."/> + +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_my_friends.xml b/indra/newview/skins/default/xui/en/floater_my_friends.xml deleted file mode 100644 index e7efcc7844..0000000000 --- a/indra/newview/skins/default/xui/en/floater_my_friends.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater - legacy_header_height="18" - can_close="false" - can_resize="true" - height="390" - layout="topleft" - min_height="240" - min_width="365" - name="floater_my_friends" - help_topic="floater_my_friends" - save_rect="true" - single_instance="true" - title="CONTACTS" - width="395"> - <tab_container - follows="all" - height="364" - layout="topleft" - left="4" - name="friends_and_groups" - tab_position="top" - tab_width="80" - top="20" - width="383"> - <panel - bottom="364" - filename="panel_friends.xml" - label="Friends" - layout="topleft" - left="0" - help_topic="my_friends_friends_tab" - name="friends_panel" - width="370" /> - <panel - bottom="364" - filename="panel_groups.xml" - label="Groups" - layout="topleft" - left="0" - help_topic="my_friends_groups_tab" - name="groups_panel" - width="370" /> - </tab_container> -</floater> diff --git a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml index 3b26c2ab59..4c5113aa55 100644 --- a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml +++ b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml @@ -14,7 +14,7 @@ can_dock="true" bevel_style="in" height="300" - min_width="150" + min_width="235" layout="topleft" name="nearby_chat" help_topic="nearby_chat" @@ -24,15 +24,25 @@ save_visibility="true" single_instance="true" width="320"> + <check_box + bottom_delta="36" + control_name="TranslateChat" + enabled="true" + height="16" + label="Translate chat (powered by Google)" + layout="topleft" + left="5" + name="translate_chat_checkbox" + width="230" /> <chat_history parse_urls="true" bg_readonly_color="ChatHistoryBgColor" bg_writeable_color="ChatHistoryBgColor" follows="all" left="5" - top="20" + top_delta="17" layout="topleft" - height="275" + height="260" name="chat_history" parse_highlights="true" text_color="ChatHistoryTextColor" diff --git a/indra/newview/skins/default/xui/en/floater_notifications_console.xml b/indra/newview/skins/default/xui/en/floater_notifications_console.xml index ca81b9bcf0..e243ccd2f9 100644 --- a/indra/newview/skins/default/xui/en/floater_notifications_console.xml +++ b/indra/newview/skins/default/xui/en/floater_notifications_console.xml @@ -36,6 +36,7 @@ follows="left|right|top|bottom" layout="topleft" left="5" + orientation="vertical" name="notification_channels" right="-5" top="42" /> diff --git a/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml deleted file mode 100644 index 1d73d516d0..0000000000 --- a/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml +++ /dev/null @@ -1,58 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater - can_close="false" - can_minimize="false" - height="100" - layout="topleft" - title="Save Outfit" - name="modal container" - width="240"> - <button - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left="20" - name="Save" - top="70" - width="82" /> - <button - height="23" - label="Cancel" - label_selected="Cancel" - layout="topleft" - left_pad="36" - name="Cancel" - top_delta="0" - width="82" /> - <text - type="string" - length="1" - follows="left|top" - height="30" - layout="topleft" - left="20" - word_wrap="true" - name="Save item as:" - top="10" - width="200"> - Save what I'm wearing -as a new Outfit: - </text> - <line_editor - type="string" - length="1" - border_style="line" - border_thickness="1" - follows="left|top" - height="23" - layout="topleft" - left_delta="0" - show_text_as_tentative="false" - top_pad="0" - max_length="63" - name="name ed" - width="200"> - [DESC] (new) - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/en/floater_preview_classified.xml b/indra/newview/skins/default/xui/en/floater_preview_classified.xml deleted file mode 100644 index 2017cf2bd1..0000000000 --- a/indra/newview/skins/default/xui/en/floater_preview_classified.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater - legacy_header_height="18" - auto_tile="true" - height="510" - layout="topleft" - name="classified_preview" - help_topic="classified_preview" - save_rect="true" - title="CLASSIFIED INFORMATION" - width="440"> - <floater.string - name="Title"> - Classified: [NAME] - </floater.string> - <panel - follows="bottom|left" - height="470" - layout="topleft" - left="0" - name="classified_details_panel" - top="20" - width="440" /> -</floater> diff --git a/indra/newview/skins/default/xui/en/floater_preview_event.xml b/indra/newview/skins/default/xui/en/floater_preview_event.xml deleted file mode 100644 index a4066b34c5..0000000000 --- a/indra/newview/skins/default/xui/en/floater_preview_event.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater - legacy_header_height="18" - auto_tile="true" - height="510" - layout="topleft" - name="event_preview" - help_topic="event_preview" - save_rect="true" - title="EVENT INFORMATION" - width="440"> - <floater.string - name="Title"> - Event: [NAME] - </floater.string> - <panel - follows="bottom|left" - height="470" - layout="topleft" - left="0" - name="event_details_panel" - top="20" - width="440" /> -</floater> diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml deleted file mode 100644 index 66408a5057..0000000000 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml +++ /dev/null @@ -1,57 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater - legacy_header_height="18" - can_minimize="false" - follows="left|top" - height="155" - layout="topleft" - name="Gesture" - help_topic="gesture" - save_rect="true" - title="GESTURE SHORTCUT" - width="260"> - <scroll_list - follows="top|left" - height="110" - layout="topleft" - left="10" - name="library_list" - top="10" - width="240"> - <scroll_list.rows - value="Animation" /> - <scroll_list.rows - value="Sound" /> - <scroll_list.rows - value="Chat" /> - <scroll_list.rows - value="Wait" /> - </scroll_list> - <!--button - follows="top|left" - height="20" - label="Preview" - layout="topleft" - left="20" - name="preview_btn" - top_pad="50" - width="80" /> - <button - follows="top|left" - height="20" - label="Save" - layout="topleft" - left_pad="5" - name="save_btn" - top_delta="0" - width="80" /> - <button - follows="top|left" - height="20" - label="Cancel (not working)" - layout="topleft" - left_pad="5" - name="save_btn" - top_delta="0" - width="80" /--> -</floater> diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml deleted file mode 100644 index 26252a7a16..0000000000 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml +++ /dev/null @@ -1,88 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater - legacy_header_height="18" - can_minimize="false" - follows="left|top" - height="90" - layout="topleft" - name="Gesture" - help_topic="gesture" - save_rect="true" - title="GESTURE SHORTCUT" - width="260"> - <text - type="string" - length="1" - follows="top|left" - font="SansSerifSmall" - height="10" - layout="topleft" - left="10" - name="trigger_label" - top_pad="10" - width="100"> - Chat: - </text> - <line_editor - follows="left|top" - height="20" - layout="topleft" - left_pad="5" - max_length="31" - name="trigger_editor" - top_delta="-4" - width="135" /> - <text - type="string" - length="1" - follows="top|left" - font="SansSerifSmall" - height="10" - layout="topleft" - left="10" - name="key_label" - top_pad="10" - width="100"> - Keyboard: - </text> - <combo_box - height="20" - label="None" - layout="topleft" - left_pad="13" - name="modifier_combo" - top_delta="-4" - width="50" /> - <combo_box - height="20" - label="None" - layout="topleft" - left_pad="5" - name="key_combo" - top_delta="0" - width="45" /> - <text - type="string" - length="1" - follows="top|left" - font="SansSerifSmall" - height="10" - layout="topleft" - left="10" - name="replace_text" - tool_tip="Replace the trigger word(s) with these words. For example, trigger 'hello' replace with 'howdy' will turn the chat 'I wanted to say hello' into 'I wanted to say howdy' as well as playing the gesture!" - top_pad="10" - width="100"> - Replace: - </text> - <line_editor - follows="left|top" - height="20" - layout="topleft" - left_pad="5" - max_length="31" - name="replace_editor" - tool_tip="Replace the trigger word(s) with these words. For example, trigger 'hello' replace with 'howdy' will turn the chat 'I wanted to say hello' into 'I wanted to say howdy' as well as playing the gesture" - top_delta="-4" - width="135" /> -</floater> diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml deleted file mode 100644 index 34f707cd2a..0000000000 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml +++ /dev/null @@ -1,242 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater - legacy_header_height="18" - can_minimize="false" - follows="left|top" - height="155" - layout="topleft" - name="Gesture" - help_topic="gesture" - save_rect="true" - title="GESTURE SHORTCUT" - width="260"> - <scroll_list - follows="top|left" - height="110" - layout="topleft" - left="10" - name="step_list" - top_pad="10" - width="240" /> - <!--text - type="string" - length="1" - follows="top|left" - font="SansSerifSmall" - height="60" - layout="topleft" - left="10" - name="help_label" - top_pad="10" - width="200"> - All steps happen simultaneously, -unless you add wait steps. - </text--> - <!--text - follows="top|left" - height="60" - layout="topleft" - left="10" - name="options_text" - top_pad="10" - width="205" /--> - <!--combo_box - follows="top|left" - height="20" - layout="topleft" - left_delta="10" - name="animation_list" - top_pad="10" - width="100" /> - <combo_box - follows="top|left" - height="20" - layout="topleft" - left_delta="0" - name="sound_list" - top_delta="10" - width="100" /> - <line_editor - follows="top|left" - height="20" - layout="topleft" - left_delta="0" - max_length="127" - name="chat_editor" - top_pad="10" - width="100" /> - <radio_group - draw_border="false" - follows="top|left" - height="40" - layout="topleft" - left_pad="8" - name="animation_trigger_type" - top_pad="10" - width="80"> - <radio_item - height="16" - label="Start" - layout="topleft" - left="3" - name="start" - top="-11" - width="80" /> - <radio_item - height="16" - label="Stop" - layout="topleft" - left_delta="0" - name="stop" - top_pad="10" - width="80" /> - </radio_group> - <check_box - follows="top|left" - height="20" - label="until animations are done" - layout="topleft" - left="16" - name="wait_anim_check" - top_pad="10" - width="100" /> - <check_box - follows="top|left" - height="20" - label="time in seconds" - layout="topleft" - left_delta="0" - name="wait_time_check" - top_pad="10" - width="100" /> - <line_editor - follows="top|left" - height="20" - layout="topleft" - left_pad="5" - max_length="15" - name="wait_time_editor" - top_pad="10" - width="50" /--> - - - - <!--For pop out floater--> - <!--scroll_list - follows="top|left" - height="110" - layout="topleft" - left="10" - name="library_list" - top_pad="10" - width="260"> - <scroll_list.rows - value="Animation" /> - <scroll_list.rows - value="Sound" /> - <scroll_list.rows - value="Chat" /> - <scroll_list.rows - value="Wait" /> - </scroll_list> - <text - type="string" - length="1" - follows="top|left" - font="SansSerifSmall" - height="60" - layout="topleft" - left="10" - name="help_label" - top_pad="10" - width="200"> - All steps happen simultaneously, -unless you add wait steps. - </text> - <text - follows="top|left" - height="60" - layout="topleft" - left="10" - name="options_text" - top_pad="10" - width="205" /> - <combo_box - follows="top|left" - height="20" - layout="topleft" - left_delta="10" - name="animation_list" - top_pad="10" - width="100" /> - <combo_box - follows="top|left" - height="20" - layout="topleft" - left_delta="0" - name="sound_list" - top_delta="0" - width="100" /> - <line_editor - follows="top|left" - height="20" - layout="topleft" - left_delta="0" - max_length="127" - name="chat_editor" - top_delta="0" - width="100" /> - <radio_group - draw_border="false" - follows="top|left" - height="40" - layout="topleft" - left_pad="8" - name="animation_trigger_type" - top="445" - width="80"> - <radio_item - height="16" - label="Start" - layout="topleft" - left="3" - name="start" - top="-11" - width="80" /> - <radio_item - height="16" - label="Stop" - layout="topleft" - left_delta="0" - name="stop" - top_pad="10" - width="80" /> - </radio_group> - <check_box - follows="top|left" - height="20" - label="until animations are done" - layout="topleft" - left="16" - name="wait_anim_check" - top="430" - width="100" /> - <check_box - follows="top|left" - height="20" - label="time in seconds" - layout="topleft" - left_delta="0" - name="wait_time_check" - top_delta="20" - width="100" /> - <line_editor - follows="top|left" - height="20" - layout="topleft" - left_pad="5" - max_length="15" - name="wait_time_editor" - top_delta="0" - width="50" /--> -</floater> diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml index 354f1de85e..8770ede7e9 100644 --- a/indra/newview/skins/default/xui/en/floater_search.xml +++ b/indra/newview/skins/default/xui/en/floater_search.xml @@ -38,6 +38,7 @@ user_resize="false" width="630"> <web_browser + trusted_content="true" follows="left|right|top|bottom" layout="topleft" left="0" diff --git a/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml b/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml new file mode 100644 index 0000000000..9f14e9ae0a --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<floater + can_close="false" + can_resize="true" + min_width="333" + min_height="440" + save_rect="true" + save_visibility="true" + > +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_statistics.xml b/indra/newview/skins/default/xui/en/floater_statistics.xml deleted file mode 100644 index 3a4e845141..0000000000 --- a/indra/newview/skins/default/xui/en/floater_statistics.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater - legacy_header_height="18" - can_resize="true" - follows="right|top" - height="392" - layout="topleft" - mouse_opaque="false" - name="stats floater" - help_topic="stats_floater" - title="STATISTICS" - width="250" /> diff --git a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml index 1935edfcc1..95aaadfcf3 100644 --- a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml +++ b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml @@ -41,7 +41,7 @@ layout="topleft" left_delta="0" name="text_enabled_color_checkbox" - text_enabled_color="EmphasisColor" + label_text.text_color="EmphasisColor" top_pad="14" width="150" /> <check_box @@ -51,7 +51,7 @@ layout="topleft" left_delta="0" name="text_disabled_color_checkbox" - text_disabled_color="EmphasisColor_35" + label_text.text_readonly_color="EmphasisColor_35" top_pad="14" width="150" /> <check_box diff --git a/indra/newview/skins/default/xui/en/floater_test_widgets.xml b/indra/newview/skins/default/xui/en/floater_test_widgets.xml index fb583114c0..13c850c86c 100644 --- a/indra/newview/skins/default/xui/en/floater_test_widgets.xml +++ b/indra/newview/skins/default/xui/en/floater_test_widgets.xml @@ -79,7 +79,7 @@ follows="top|left" left="10" height="16"> - For widget list see https://wiki.lindenlab.com/wiki/Viewer:UI/Widgets + For widget list see http://wiki.secondlife.com/wiki/XUI_Reference </text> <!-- First column --> diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 6b2b5d7d7e..2e3349dbe8 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -255,7 +255,7 @@ label="Edit linked" layout="topleft" name="checkbox edit linked parts" - top_pad="0"> + top_pad="2"> <check_box.commit_callback function="BuildTool.selectComponent"/> </check_box> @@ -267,7 +267,7 @@ left="13" name="RenderingCost" tool_tip="Shows the rendering cost calculated for this object" - top_pad="2" + top_pad="0" type="string" width="100"> þ: [COUNT] @@ -757,7 +757,7 @@ follows="left|top" halign="right" layout="topleft" - top_pad="5" + top_pad="5" right="-100" name="object_count" width="80"> @@ -812,7 +812,7 @@ tab_min_width="40" tab_position="top" tab_height="25" - top="170" + top="173" width="295"> <panel border="false" @@ -2185,12 +2185,13 @@ even though the user gets a free copy. type="string" length="1" follows="left|top" - height="10" + height="20" layout="topleft" left="10" name="select_single" top="5" - width="252"> + width="252" + word_wrap="true"> Select only one primitive to edit features. </text> <text @@ -2212,7 +2213,7 @@ even though the user gets a free copy. left="10" name="Flexible1D Checkbox Ctrl" tool_tip="Allows object to flex about the Z axis (Client-side only)" - top_pad="10" + top_pad="20" width="121" /> <spinner follows="left|top" diff --git a/indra/newview/skins/default/xui/en/floater_tos.xml b/indra/newview/skins/default/xui/en/floater_tos.xml index cbfaac958b..af1617eb39 100644 --- a/indra/newview/skins/default/xui/en/floater_tos.xml +++ b/indra/newview/skins/default/xui/en/floater_tos.xml @@ -58,6 +58,7 @@ Please read the following Terms of Service and Privacy Policy carefully. To continue logging in to [SECOND_LIFE], you must accept the agreement. </text> <web_browser + trusted_content="true" follows="left|top" height="340" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml index bf5bd87ad6..1432099590 100644 --- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml @@ -86,6 +86,7 @@ visible="true" width="20" /> </layout_panel> + <layout_panel name="leave_call_panel" height="26" auto_resize="false"> <layout_stack clip="true" auto_resize="false" @@ -96,11 +97,15 @@ name="voice_effect_and_leave_call_stack" orientation="horizontal" width="262"> - <panel - class="panel_voice_effect" - name="panel_voice_effect" - visiblity_control="VoiceMorphingEnabled" - filename="panel_voice_effect.xml" /> + <layout_panel + height="26" + width="200"> + <panel + class="panel_voice_effect" + name="panel_voice_effect" + visiblity_control="VoiceMorphingEnabled" + filename="panel_voice_effect.xml" /> + </layout_panel> <layout_panel auto_resize="false" user_resize="false" @@ -118,6 +123,7 @@ width="100" /> </layout_panel> </layout_stack> + </layout_panel> <layout_panel follows="all" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml deleted file mode 100644 index 71812bd1a6..0000000000 --- a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml +++ /dev/null @@ -1,56 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater - legacy_header_height="0" - can_close="false" - can_minimize="false" - height="100" - layout="topleft" - name="modal container" - width="240"> - <button - height="23" - label="Save" - label_selected="Save" - layout="topleft" - left="20" - name="Save" - top="70" - width="82" /> - <button - height="23" - label="Cancel" - label_selected="Cancel" - layout="topleft" - left_pad="36" - name="Cancel" - top_delta="0" - width="82" /> - <text - type="string" - length="1" - follows="left|top" - height="30" - layout="topleft" - word_wrap="true" - left="20" - name="Save item as:" - top="10" - width="200"> - Save item to my inventory as: - </text> - <line_editor - type="string" - length="1" - border_style="line" - border_thickness="1" - follows="left|top" - height="23" - layout="topleft" - left_delta="0" - max_length="63" - name="name ed" - top_pad="0" - width="200"> - New [DESC] - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml index a1ca910cbb..8d9ebf6e06 100644 --- a/indra/newview/skins/default/xui/en/main_view.xml +++ b/indra/newview/skins/default/xui/en/main_view.xml @@ -20,6 +20,7 @@ mouse_opaque="false" name="nav_bar_container" tab_stop="false" + min_height="10" width="1024" user_resize="false" visible="false"> @@ -65,25 +66,24 @@ mouse_opaque="false" name="world_stack" orientation="vertical"> - <panel auto_resize="true" - follows="all" - height="500" - layout="topleft" - tab_stop="false" - mouse_opaque="false" - name="hud container" - width="500"> - <panel auto_resize="false" - follows="left|top" - height="19" - left="0" - mouse_opaque="false" - name="topinfo_bar_container" - tab_stop="false" - top="0" - user_resize="false" - visible="false" - width="1024"/> + <layout_panel auto_resize="true" + follows="all" + height="500" + layout="topleft" + tab_stop="false" + mouse_opaque="false" + user_resize="false" + name="hud container" + width="500"> + <panel follows="left|top" + height="19" + left="0" + mouse_opaque="false" + name="topinfo_bar_container" + tab_stop="false" + top="0" + visible="false" + width="1024"/> <panel follows="right|top|bottom" height="500" mouse_opaque="false" @@ -101,10 +101,10 @@ name="stand_stop_flying_container" visible="false" width="500"/> - </panel> + </layout_panel> <layout_panel auto_resize="false" - follows="all" min_height="33" + height="33" mouse_opaque="false" name="bottom_tray_container" visible="false"/> @@ -112,7 +112,7 @@ </layout_panel> <!-- side tray --> <layout_panel auto_resize="false" - follows="all" + follows="top|bottom" height="500" min_width="333" mouse_opaque="false" @@ -187,15 +187,6 @@ <panel top="0" follows="all" height="768" - mouse_opaque="true" - name="progress_view" - filename="panel_progress.xml" - class="progress_view" - width="1024" - visible="false"/> - <panel top="0" - follows="all" - height="768" mouse_opaque="false" name="popup_holder" class="popup_holder" @@ -208,6 +199,22 @@ bottom="-1" height="11" /> </panel> + <view top="0" + left="0" + width="1024" + height="768" + name="hint_holder" + mouse_opaque="false" + follows="all"/> + <panel top="0" + follows="all" + height="768" + mouse_opaque="true" + name="progress_view" + filename="panel_progress.xml" + class="progress_view" + width="1024" + visible="false"/> <menu_holder top="0" follows="all" height="768" diff --git a/indra/newview/skins/default/xui/en/menu_avatar_self.xml b/indra/newview/skins/default/xui/en/menu_avatar_self.xml index 9059745f46..2afa29ec10 100644 --- a/indra/newview/skins/default/xui/en/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/en/menu_avatar_self.xml @@ -23,11 +23,11 @@ function="Self.EnableStandUp" /> </menu_item_call> <context_menu - label="Take Off ▶" + label="Take Off" layout="topleft" name="Take Off >"> <context_menu - label="Clothes ▶" + label="Clothes" layout="topleft" name="Clothes >"> <menu_item_call @@ -174,11 +174,11 @@ </menu_item_call> </context_menu> <context_menu - label="HUD ▶" + label="HUD" layout="topleft" name="Object Detach HUD" /> <context_menu - label="Detach ▶" + label="Detach" layout="topleft" name="Object Detach" /> <menu_item_call diff --git a/indra/newview/skins/default/xui/en/menu_mini_map.xml b/indra/newview/skins/default/xui/en/menu_mini_map.xml index f5ea3e735b..8fe89d3934 100644 --- a/indra/newview/skins/default/xui/en/menu_mini_map.xml +++ b/indra/newview/skins/default/xui/en/menu_mini_map.xml @@ -29,6 +29,7 @@ function="Minimap.Zoom" parameter="far" /> </menu_item_call> + <menu_item_separator /> <menu_item_check label="Rotate Map" name="Rotate Map"> @@ -38,6 +39,15 @@ function="ToggleControl" parameter="MiniMapRotate" /> </menu_item_check> + <menu_item_check + label="Auto Center" + name="Auto Center"> + <menu_item_check.on_check + control="MiniMapAutoCenter" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="MiniMapAutoCenter" /> + </menu_item_check> <menu_item_separator /> <menu_item_call label="Stop Tracking" diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml index 31f70d99ca..c751aa4e0c 100644 --- a/indra/newview/skins/default/xui/en/menu_object.xml +++ b/indra/newview/skins/default/xui/en/menu_object.xml @@ -72,7 +72,7 @@ </menu_item_call> <menu_item_separator layout="topleft" /> <context_menu - label="Put On ▶" + label="Put On" name="Put On" > <menu_item_call enabled="false" @@ -93,14 +93,14 @@ function="Object.EnableWear" /> </menu_item_call> <context_menu - label="Attach ▶" + label="Attach" name="Object Attach" /> <context_menu - label="Attach HUD ▶" + label="Attach HUD" name="Object Attach HUD" /> </context_menu> <context_menu - label="Remove ▶" + label="Remove" name="Remove"> <menu_item_call enabled="false" diff --git a/indra/newview/skins/default/xui/en/menu_participant_list.xml b/indra/newview/skins/default/xui/en/menu_participant_list.xml index 4ed5807808..2c32d9d303 100644 --- a/indra/newview/skins/default/xui/en/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/en/menu_participant_list.xml @@ -130,7 +130,7 @@ layout="topleft" name="Moderator Options Separator"/> <context_menu - label="Moderator Options >" + label="Moderator Options" layout="topleft" name="Moderator Options"> <menu_item_check diff --git a/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml index 92752a0fee..22796f7b68 100644 --- a/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml +++ b/indra/newview/skins/default/xui/en/menu_people_friends_view_sort.xml @@ -31,6 +31,14 @@ function="CheckControl" parameter="FriendsListShowIcons" /> </menu_item_check> + <menu_item_check name="view_permissions" label="View Permissions Granted"> + <menu_item_check.on_click + function="People.Friends.ViewSort.Action" + parameter="view_permissions" /> + <menu_item_check.on_check + function="CheckControl" + parameter="FriendsListShowPermissions" /> + </menu_item_check> <menu_item_separator layout="topleft" /> <menu_item_call name="show_blocked_list" label="Show Blocked Residents & Objects"> <menu_item_call.on_click function="SideTray.ShowPanel" parameter="panel_block_list_sidetray" /> diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml index 588342595e..5d58a9d289 100644 --- a/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml +++ b/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml @@ -57,4 +57,13 @@ <on_click function="Avatar.Pay" /> </menu_item_call> + <menu_item_call + label="Offer Teleport" + name="teleport"> + <menu_item_call.on_click + function="Avatar.OfferTeleport"/> + <menu_item_call.on_enable + function="Avatar.EnableItem" + parameter="can_offer_teleport"/> + </menu_item_call> </context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index a47c1ee00e..3963f43678 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -670,6 +670,14 @@ <menu_item_call.on_enable function="Tools.EnableSaveToObjectInventory" /> </menu_item_call> + <menu_item_call + label="Return Object" + name="Return Object back to Owner"> + <menu_item_call.on_click + function="Object.Return" /> + <menu_item_call.on_enable + function="Object.EnableReturn" /> + </menu_item_call> </menu> <menu create_jump_keys="true" @@ -773,6 +781,16 @@ <menu_item_separator/> <menu_item_check + label="Show Selection Outlines" + name="Show Selection Outlines"> + <menu_item_check.on_check + function="CheckControl" + parameter="RenderHighlightSelections" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="RenderHighlightSelections" /> + </menu_item_check> + <menu_item_check label="Show Hidden Selection" name="Show Hidden Selection"> <menu_item_check.on_check @@ -962,6 +980,14 @@ function="Floater.Show" parameter="sl_about" /> </menu_item_call> + <menu_item_check + label="Enable Hints" + name="Enable Hints"> + <on_check + control="EnableUIHints"/> + <on_click + function="ToggleUIHints"/> + </menu_item_check> </menu> <menu create_jump_keys="true" @@ -1681,8 +1707,8 @@ </menu_item_call> <menu_item_separator visible="false"/> - <!-- Made invisible to avoid a dissonance: menu item toggle menu where it is located. EXT-8069. - Can't be removed to keep sortcut workable. + <!-- Made invisible to avoid a dissonance: menu item toggles the menu where it is located. EXT-8069. + Can't be removed, to keep shortcut workable. --> <menu_item_check label="Show Advanced Menu" @@ -2694,6 +2720,19 @@ parameter="DoubleClickAutoPilot" /> </menu_item_check> <menu_item_check + label="Double-Click Teleport" + name="DoubleClick Teleport"> + <menu_item_check.on_check + function="CheckControl" + parameter="DoubleClickTeleport" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="DoubleClickTeleport" /> + </menu_item_check> + + <menu_item_separator /> + + <menu_item_check label="Region Debug Console" name="Region Debug Console" shortcut="control|shift|`" diff --git a/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml index 5feac53c33..aa56b4ba63 100644 --- a/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml @@ -37,11 +37,11 @@ function="Attachment.Detach" /> </menu_item_call> <context_menu - label="Attach to ▶" + label="Attach to" layout="topleft" name="wearable_attach_to" /> <context_menu - label="Attach to HUD ▶" + label="Attach to HUD" layout="topleft" name="wearable_attach_to_hud" /> <menu_item_call diff --git a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml index 747352cb29..84ab16c709 100644 --- a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml @@ -10,4 +10,14 @@ <on_click function="Gear.Edit" /> </menu_item_call> + <menu_item_call + label="Take Off" + layout="topleft" + name="takeoff"> + <on_click + function="Gear.TakeOff" /> + <on_enable + function="Gear.OnEnable" + parameter="take_off" /> + </menu_item_call> </menu> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 203af1756b..2d01467de1 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -1,6 +1,5 @@ <?xml version="1.0" ?><notifications> - - <global name="skipnexttime"> + <global name="skipnexttime"> Don't show me this again </global> @@ -97,7 +96,7 @@ </template> <notification - functor="GenericAcknowledge" + functor="GenericAcknowledge" icon="alertmodal.tga" name="MissingAlert" label="Unknown Notification Message" @@ -723,7 +722,7 @@ You need an account to enter [SECOND_LIFE]. Would you like to create one now? <url option="0" name="url" - openexternally = "1"> + target = "_external"> http://join.secondlife.com/ </url> @@ -2033,8 +2032,8 @@ Offer friendship to [NAME]? </notification> <notification - icon="alertmodal.tga" - label="Add Friend" + icon="alertmodal.tga" + label="Add Friend" name="AddFriendWithMessage" type="alertmodal"> Friends can give permissions to track each other on the map and receive online status updates. @@ -2060,7 +2059,8 @@ Would you be my friend? icon="alertmodal.tga" label="Save Outfit" name="SaveOutfitAs" - type="alertmodal"> + type="alertmodal" + unique="true"> Save what I'm wearing as a new Outfit: <form name="form"> <input name="message" type="text"> @@ -2076,7 +2076,6 @@ Would you be my friend? name="Cancel" text="Cancel"/> </form> - <unique/> </notification> <notification @@ -4011,37 +4010,37 @@ Go to your [http://secondlife.com/account/ Dashboard] to see your account histor <notification icon="alertmodal.tga" name="ConfirmQuit" - type="alertmodal"> + type="alertmodal" + unique="true"> Are you sure you want to quit? <usetemplate ignoretext="Confirm before I quit" name="okcancelignore" notext="Don't Quit" yestext="Quit"/> - <unique/> </notification> <notification icon="alertmodal.tga" name="DeleteItems" - type="alertmodal"> + type="alertmodal" + unique="true"> [QUESTION] <usetemplate ignoretext="Confirm before deleting items" name="okcancelignore" notext="Cancel" yestext="OK"/> - <unique/> </notification> <notification icon="alertmodal.tga" name="HelpReportAbuseEmailLL" - type="alert"> + type="alert" + unique="true"> Use this tool to report violations of the [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards]. All reported abuses are investigated and resolved. - <unique/> </notification> <notification @@ -4983,47 +4982,47 @@ Message from [NAME]: icon="notify.tga" name="NotSafe" persist="true" - type="notify"> + type="notify" + unique="true"> This land has damage enabled. You can be hurt here. If you die, you will be teleported to your home location. - <unique/> </notification> <notification icon="notify.tga" name="NoFly" persist="true" - type="notify"> + type="notify" + unique="true"> This area has flying disabled. You can't fly here. - <unique/> </notification> <notification icon="notify.tga" name="PushRestricted" persist="true" - type="notify"> + type="notify" + unique="true"> This area does not allow pushing. You can't push others here unless you own the land. - <unique/> </notification> <notification icon="notify.tga" name="NoVoice" persist="true" - type="notify"> + type="notify" + unique="true"> This area has voice chat disabled. You won't be able to hear anyone talking. - <unique/> </notification> <notification icon="notify.tga" name="NoBuild" persist="true" - type="notify"> + type="notify" + unique="true"> This area has building disabled. You can't build or rez objects here. - <unique/> </notification> <notification @@ -5944,9 +5943,9 @@ The voice call you are trying to join, [VOICE_CHANNEL_NAME], has reached maximum <notification icon="notifytip.tga" name="ProximalVoiceChannelFull" - type="notifytip"> + type="notifytip" + unique="true"> We're sorry. This area has reached maximum capacity for voice conversations. Please try to use voice in another area. - <unique/> </notification> <notification @@ -6003,9 +6002,9 @@ Failed to connect to [VOICE_CHANNEL_NAME], please try again later. You will now duration="10" icon="notifytip.tga" name="VoiceLoginRetry" - type="notifytip"> + type="notifytip" + unique="true"> We are creating a voice channel for you. This may take up to one minute. - <unique/> </notification> <notification @@ -6013,10 +6012,10 @@ We are creating a voice channel for you. This may take up to one minute. name="VoiceEffectsExpired" sound="UISndAlert" persist="true" - type="notify"> + type="notify" + unique="true"> One or more of your subscribed Voice Morphs has expired. [[URL] Click here] to renew your subscription. - <unique/> </notification> <notification @@ -6024,10 +6023,10 @@ One or more of your subscribed Voice Morphs has expired. name="VoiceEffectsExpiredInUse" sound="UISndAlert" persist="true" - type="notify"> + type="notify" + unique="true"> The active Voice Morph has expired, your normal voice settings have been applied. [[URL] Click here] to renew your subscription. - <unique/> </notification> <notification @@ -6035,21 +6034,20 @@ The active Voice Morph has expired, your normal voice settings have been applied name="VoiceEffectsWillExpire" sound="UISndAlert" persist="true" - type="notify"> + type="notify" + unique="true"> One or more of your Voice Morphs will expire in less than [INTERVAL] days. [[URL] Click here] to renew your subscription. - <unique/> </notification> - LLNotificationsUtil::add("VoiceEffectsNew"); <notification icon="notify.tga" name="VoiceEffectsNew" sound="UISndAlert" persist="true" - type="notify"> + type="notify" + unique="true"> New Voice Morphs are available! - <unique/> </notification> <notification @@ -6395,8 +6393,8 @@ Are you sure you want to leave this call? ignoretext="Confirm before I leave call" name="okcancelignore" notext="No" - yestext="Yes"/> - <unique/> + yestext="Yes" + unique="true"/> </notification> <notification @@ -6412,9 +6410,83 @@ Mute everyone? ignoretext="Confirm before I mute all participants in a group call" name="okcancelignore" yestext="Ok" - notext="Cancel"/> - <unique/> + notext="Cancel" + unique="true"/> + </notification> + <notification + name="HintChat" + label="Chat" + type="hint" + unique="true"> + To join the conversation, type into the chat field below. </notification> + + <notification + name="HintSit" + label="Stand" + type="hint" + unique="true"> + To stand up and exit the sitting position, click the Stand button. + </notification> + + <notification + name="HintDestinationGuide" + label="Explore the World" + type="hint" + unique="true"> + The Destination Guide contains thousands of new places to discover. Select a location and choose Teleport to start exploring. + </notification> + + <notification + name="HintSidePanel" + label="Side Panel" + type="hint" + unique="true"> + Get quick access to your inventory, outfits, profiles and more in the side panel. + </notification> + + <notification + name="HintMove" + label="Move" + type="hint" + unique="true"> + To walk or run, open the Move Panel and use the directional arrows to navigate. You can also use the directional keys on your keyboard. + </notification> + + <notification + name="HintInventory" + label="Inventory" + type="hint" + unique="true"> + Check your inventory to find items. Newest items can be easily found in the Recent tab. + </notification> + + <notification + name="HintLindenDollar" + label="You've got Linden Dollars!" + type="hint" + unique="true"> + Here's your current balance of L$. Click Buy L$ to purchase more Linden Dollars. + </notification> + + <notification + name="PopupAttempt" + icon="Popup_Caution" + type="browser"> + A pop-up was prevented from opening. + <form name="form"> + <ignore name="ignore" + control="MediaEnablePopups" + invert_control="false" + text="Enable all pop-ups"/> + <button default="true" + index="0" + name="open" + text="Open pop-up window"/> + </form> + </notification> + + <global name="UnsupportedCPU"> - Your CPU speed does not meet the minimum requirements. </global> diff --git a/indra/newview/skins/default/xui/en/panel_audio_device.xml b/indra/newview/skins/default/xui/en/panel_audio_device.xml deleted file mode 100644 index 546f46205f..0000000000 --- a/indra/newview/skins/default/xui/en/panel_audio_device.xml +++ /dev/null @@ -1,152 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel - height="240" - layout="topleft" - left="8" - name="device_settings" - top="240" - width="404"> - <panel.string - name="default_text"> - Default - </panel.string> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left="6" - name="Audio Devices" - width="200"> - Audio Devices - </text> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left="20" - name="Input device (microphone):" - top="26" - width="200"> - Input device (microphone): - </text> - <combo_box - height="18" - layout="topleft" - left_delta="0" - max_chars="128" - name="voice_input_device" - top_pad="2" - width="225" /> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left_delta="0" - name="Output device (speakers):" - top_pad="9" - width="200"> - Output device (speakers): - </text> - <combo_box - height="18" - layout="topleft" - left_delta="0" - max_chars="128" - name="voice_output_device" - top_pad="2" - width="225" /> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left="6" - name="Input level:" - top="121" - width="200"> - Input Level - </text> - <text_editor - type="string" - length="1" - top="135" - bg_readonly_color="0 0 0 0" - enabled="false" - height="60" - border_visible="false" - layout="topleft" - left_delta="10" - max_length="65535" - name="voice_intro_text1" - tab_stop="false" - width="380" - word_wrap="true"> - Adjust the slider to control how loud you sound to other Residents. To test the input level, simply speak into your microphone. - </text_editor> - <slider_bar - follows="left|top" - height="17" - increment="0.05" - initial_value="1.0" - layout="topleft" - left_delta="5" - max_val="2" - name="mic_volume_slider" - tool_tip="Change the volume using this slider" - top="202" - width="90" /> - <text - type="string" - length="1" - follows="left|top" - height="20" - layout="topleft" - left_pad="5" - name="wait_text" - top_delta="1" - width="200"> - Please wait - </text> - <locate - height="20" - layout="topleft" - left_delta="0" - name="bar0" - top_delta="5" - width="20" /> - <locate - height="20" - layout="topleft" - left_pad="2" - name="bar1" - top_delta="0" - width="20" /> - <locate - height="20" - layout="topleft" - left_pad="2" - name="bar2" - top_delta="0" - width="20" /> - <locate - height="20" - layout="topleft" - left_pad="2" - name="bar3" - top_delta="0" - width="20" /> - <locate - height="20" - layout="topleft" - left_pad="2" - name="bar4" - top_delta="0" - width="20" /> -</panel> diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml index 876ff9961b..6f3629cc8f 100644 --- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml @@ -19,6 +19,11 @@ <string name="FormatMonths">[COUNT]mon</string> <string name="FormatYears">[COUNT]y</string> + <!-- + *NOTE: llavatarlistitem.cpp lays these controls out depending on which + ones are visible. Trying to change their order here will break it + ... which kinda sucks. + --> <icon follows="top|right|left" height="24" @@ -65,11 +70,55 @@ height="15" layout="topleft" left_pad="5" - right="-72" + right="-164" name="last_interaction" text_color="LtGray_50" value="0s" width="35" /> + <icon + height="16" + follows="right" + image_name="Permission_Edit_Objects_Theirs" + layout="topleft" + left_pad="3" + right="-129" + name="permission_edit_theirs_icon" + tool_tip="You can edit this friend's objects" + top="4" + width="16" /> + <icon + height="16" + follows="right" + image_name="Permission_Edit_Objects_Mine" + layout="topleft" + left_pad="3" + right="-110" + name="permission_edit_mine_icon" + tool_tip="This friend can edit, delete or take your objects" + top_delta="0" + width="16" /> + <icon + height="16" + follows="right" + image_name="Permission_Visible_Map" + layout="topleft" + left_pad="3" + tool_tip="This friend can locate you on the map" + right="-91" + name="permission_map_icon" + top_delta="0" + width="16" /> + <icon + height="16" + follows="right" + image_name="Permission_Visible_Online" + layout="topleft" + left_pad="3" + right="-72" + name="permission_online_icon" + tool_tip="This friend can see when you're online" + top_delta="0" + width="16" /> <button follows="right" height="16" @@ -79,7 +128,8 @@ left_pad="3" right="-53" name="info_btn" - top_delta="-2" + tab_stop="false" + top_delta="0" width="16" /> <button follows="right" @@ -89,6 +139,7 @@ left_pad="5" right="-28" name="profile_btn" + tab_stop="false" tool_tip="View profile" top_delta="-2" width="20" /> diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index 4b622691b3..63068a069f 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -12,6 +12,9 @@ top="28" width="1310"> <string + name="DragIndicationImageName" + value="Accordion_ArrowOpened_Off" /> + <string name="SpeakBtnToolTip" value="Turns microphone on/off" /> <string @@ -29,31 +32,32 @@ orientation="horizontal" top="0" width="1310"> - <icon + <layout_panel auto_resize="false" - follows="left|right" - height="10" - image_name="spacer24.tga" - layout="topleft" - left="0" + user_resize="false" min_width="2" - top="0" width="2" /> <layout_panel auto_resize="false" - filename="panel_nearby_chat_bar.xml" - follows="left|right" - height="28" layout="topleft" - left="0" max_width="320" - min_height="23" min_width="214" + height="28" mouse_opaque="false" - name="chat_bar" - top="4" + name="chat_bar_layout_panel" user_resize="true" - width="308" /> + width="308" > + <panel + name="chat_bar" + filename="panel_nearby_chat_bar.xml" + left="0" + height="28" + width="308" + top="0" + mouse_opaque="false" + follows="left|right" + /> + </layout_panel> <!-- There is resize bar between chatbar and Speak button. It has 2px width (is is set as 2*UIResizeBarOverlap) --> @@ -135,7 +139,7 @@ name="movement_panel" user_resize="false" width="83"> - <button + <bottomtray_button follows="left|right" height="23" image_pressed="PushButton_Press" @@ -152,7 +156,8 @@ <init_callback function="Button.SetDockableFloaterToggle" parameter="moveview" /> - </button> + </bottomtray_button> + </layout_panel> <layout_panel auto_resize="false" @@ -165,7 +170,7 @@ name="cam_panel" user_resize="false" width="83"> - <button + <bottomtray_button follows="left|right" height="23" image_pressed="PushButton_Press" @@ -183,7 +188,7 @@ <init_callback function="Button.SetDockableFloaterToggle" parameter="camera" /> - </button> + </bottomtray_button> </layout_panel> <layout_panel auto_resize="false" @@ -195,7 +200,7 @@ name="snapshot_panel" user_resize="false" width="39"> - <button + <bottomtray_button follows="left|right" height="23" image_overlay="Snapshot_Off" @@ -212,7 +217,7 @@ <init_callback function="Button.SetFloaterToggle" parameter="snapshot" /> - </button> + </bottomtray_button> </layout_panel> <layout_panel auto_resize="false" @@ -228,7 +233,7 @@ <!--*FIX: Build Floater is not opened with default registration. Will be fixed soon. Disabled for now. --> - <button + <bottomtray_button follows="left|right" height="23" image_pressed="PushButton_Press" @@ -246,7 +251,7 @@ Disabled for now. <commit_callback function="Build.Toggle" parameter="build" /> - </button> + </bottomtray_button> </layout_panel> <layout_panel auto_resize="false" @@ -259,7 +264,7 @@ Disabled for now. name="search_btn_panel" user_resize="false" width="83"> - <button + <bottomtray_button follows="left|right" height="23" image_pressed="PushButton_Press" @@ -277,7 +282,7 @@ Disabled for now. <init_callback function="Button.SetFloaterToggle" parameter="search" /> - </button> + </bottomtray_button> </layout_panel> <layout_panel auto_resize="false" @@ -290,7 +295,7 @@ Disabled for now. name="world_map_btn_panel" user_resize="false" width="83"> - <button + <bottomtray_button follows="left|right" height="23" image_pressed="PushButton_Press" @@ -308,7 +313,7 @@ Disabled for now. <init_callback function="Button.SetFloaterToggle" parameter="world_map" /> - </button> + </bottomtray_button> </layout_panel> <layout_panel auto_resize="false" @@ -321,7 +326,7 @@ Disabled for now. name="mini_map_btn_panel" user_resize="false" width="83"> - <button + <bottomtray_button follows="left|right" height="23" image_pressed="PushButton_Press" @@ -339,7 +344,7 @@ Disabled for now. <init_callback function="Button.SetFloaterToggle" parameter="mini_map" /> - </button> + </bottomtray_button> </layout_panel> <layout_panel follows="left|right" @@ -400,18 +405,10 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly. width="7" /> </chiclet_panel> </layout_panel> - <icon - auto_resize="false" - color="0 0 0 0" - follows="left|right" - height="10" - image_name="spacer24.tga" - layout="topleft" - left="0" - min_width="4" - name="DUMMY" - top="0" - width="4" /> + <layout_panel auto_resize="false" + user_resize="false" + width="4" + min_width="4"/> <layout_panel auto_resize="false" follows="right" @@ -503,17 +500,11 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well </button> </chiclet_notification> </layout_panel> - <icon + <layout_panel auto_resize="false" - color="0 0 0 0" - follows="left|right" - height="10" - image_name="spacer24.tga" - layout="topleft" - left="0" + user_resize="false" min_width="4" name="DUMMY2" - top="0" width="8" /> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml index 6e9476f814..efb1da4c05 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml @@ -28,30 +28,28 @@ orientation="horizontal" top="0" width="1000"> - <icon + <layout_panel auto_resize="false" - follows="left|right" - height="10" - image_name="spacer24.tga" - layout="topleft" + user_resize="false" min_width="2" - left="0" - top="0" width="2" /> <layout_panel mouse_opaque="false" auto_resize="true" - follows="left|right" height="28" layout="topleft" - left="0" - min_height="23" width="310" - top="4" min_width="188" - name="chat_bar" - user_resize="false" - filename="panel_nearby_chat_bar.xml" /> + user_resize="false"> + <panel + left="0" + filename="panel_nearby_chat_bar.xml" + follows="left|right" + top="4" + width="310" + name="chat_bar" + mouse_opaque="false"/> + </layout_panel> <layout_panel mouse_opaque="false" auto_resize="false" @@ -79,17 +77,11 @@ use_ellipses="true" /> </gesture_combo_list> </layout_panel> - <icon + <layout_panel auto_resize="false" - color="0 0 0 0" - follows="left|right" - height="10" - image_name="spacer24.tga" - layout="topleft" - left="0" + user_resize="false" min_width="3" name="after_gesture_panel" - top="0" width="3"/> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml index 268cb4e5f9..0fb7691ee7 100644 --- a/indra/newview/skins/default/xui/en/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml @@ -39,7 +39,7 @@ Disabled </panel.string> <button - follows="top|right" + follows="top|left" height="24" image_hover_unselected="BackButton_Over" image_pressed="BackButton_Press" @@ -398,30 +398,74 @@ top_pad="5" left="9" name="buttons"> - <button - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - left="0" - name="teleport_btn" - top="0" - width="101" /> - <button - follows="bottom|left" - height="23" - label="Map" - layout="topleft" - left_pad="3" - name="show_on_map_btn" - width="100" /> - <button - follows="bottom|left" - height="23" - label="Edit" - layout="topleft" - name="edit_btn" - left_pad="3" - width="101" /> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + name="layout_stack1" + left="0" + orientation="horizontal" + top_pad="0" + width="309"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + name="layout_panel1" + user_resize="false" + auto_resize="true" + width="101"> + <button + follows="bottom|left|right" + height="23" + label="Teleport" + layout="topleft" + left="0" + name="teleport_btn" + top="0" + width="101" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="show_on_map_btn_lp" + user_resize="false" + auto_resize="true" + width="100"> + <button + follows="bottom|left|right" + height="23" + label="Map" + layout="topleft" + name="show_on_map_btn" + top="0" + width="100" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="edit_btn_lp" + user_resize="false" + auto_resize="true" + width="101"> + <button + follows="bottom|left|right" + height="23" + label="Edit" + layout="topleft" + name="edit_btn" + top="0" + width="101" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml index a5c74b08e7..5934956559 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml @@ -23,7 +23,7 @@ Save </string> <button - follows="top|right" + follows="top|left" height="24" image_hover_unselected="BackButton_Over" image_pressed="BackButton_Press" @@ -119,7 +119,7 @@ layout="topleft" left="10" top_pad="2" - max_length="63" + max_length="30" name="classified_name" prevalidate_callback="ascii" text_color="black" @@ -147,7 +147,7 @@ layout="topleft" left="10" top_pad="2" - max_length="1023" + max_length="64" name="classified_desc" text_color="black" word_wrap="true" /> @@ -301,22 +301,56 @@ name="bottom_panel" top_pad="5" width="303"> - <button - follows="bottom|left" - height="23" - label="[LABEL]" - layout="topleft" - name="save_changes_btn" - left="0" - top="0" - width="152" /> - <button - follows="bottom|left" - height="23" - label="Cancel" - layout="topleft" - name="cancel_btn" - left_pad="3" - width="153" /> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + name="bottom_panel_ls" + left="1" + orientation="horizontal" + top_pad="0" + width="309"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + name="save_changes_btn_lp" + user_resize="false" + auto_resize="true" + width="156"> + <button + follows="bottom|left|right" + height="23" + label="[LABEL]" + layout="topleft" + name="save_changes_btn" + left="1" + top="0" + width="155" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="show_on_map_btn_lp" + user_resize="false" + auto_resize="true" + width="157"> + <button + follows="bottom|left|right" + height="23" + label="Cancel" + layout="topleft" + name="cancel_btn" + left="1" + top="0" + width="156" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml index f50e182313..c4b831b71c 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml @@ -17,7 +17,7 @@ (will update after save) </panel.string> <button - follows="top|right" + follows="top|left" height="24" image_hover_unselected="BackButton_Over" image_pressed="BackButton_Press" @@ -183,22 +183,57 @@ name="bottom_panel" top_pad="5" width="303"> - <button - follows="bottom|left" - height="23" - label="Save Pick" - layout="topleft" - name="save_changes_btn" - left="0" - top="0" - width="152" /> - <button - follows="bottom|left" - height="23" - label="Cancel" - layout="topleft" - name="cancel_btn" - left_pad="3" - width="153" /> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + name="layout_stack1" + left="2" + orientation="horizontal" + top_pad="0" + width="303"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="topleft" + left="0" + name="layout_panel1" + user_resize="false" + auto_resize="true" + width="150"> + <button + follows="bottom|left|right" + height="23" + label="Save Pick" + layout="topleft" + name="save_changes_btn" + top="0" + left="1" + width="149" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="topleft" + left_pad="4" + name="layout_panel1" + user_resize="false" + auto_resize="true" + width="150"> + <button + follows="bottom|left|right" + height="23" + label="Cancel" + layout="topleft" + name="cancel_btn" + top="0" + left="1" + width="149" /> + </layout_panel> + </layout_stack> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml index 5072ec3a66..6781a76120 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml @@ -242,7 +242,7 @@ left="8" name="show_in_search_checkbox" height="15" - text_enabled_color="white" + label_text.text_color="white" top_pad="12" width="100" /> <text @@ -320,33 +320,68 @@ left="10" name="partner_edit_link" value="[[URL] Edit]" - width="50" /> + width="70" /> </panel> </panel> </scroll_container> <panel - follows="bottom|left" + follows="bottom|left|right" height="28" left="0" name="profile_me_buttons_panel" top_pad="0" width="313"> + + <layout_stack + follows="bottom|left|right" + height="28" + layout="topleft" + name="bottom_panel_ls" + left="7" + orientation="horizontal" + top_pad="0" + width="295"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + name="save_changes_btn_lp" + top="0" + user_resize="false" + auto_resize="true" + width="153"> <button - follows="bottom|left" + follows="bottom|left|right" height="23" label="Save Changes" layout="topleft" - left="8" + left="1" name="save_btn" - top="5" + top="0" width="152" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="show_on_map_btn_lp" + top="0" + user_resize="false" + auto_resize="true" + width="154"> <button - follows="bottom|left" + follows="bottom|left|right" height="23" label="Cancel" layout="topleft" - left_pad="3" + left="1" name="cancel_btn" + top="0" width="153" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml index 9fb777e0e7..95c1c822b8 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml @@ -187,7 +187,7 @@ width="150" /> <radio_group control_name="AvatarSex" - follows="left|top|right" + follows="top|right" height="20" layout="topleft" left="210" @@ -217,6 +217,7 @@ </radio_group> <!-- graphical labels for the radio buttons above --> <icon + follows="top|right" height="16" image_name="icons/Male.png" layout="topleft" @@ -226,6 +227,7 @@ top="7" width="16" /> <icon + follows="top|right" height="16" image_name="icons/Female.png" layout="topleft" @@ -416,22 +418,55 @@ name="button_panel" top_pad="6" width="333"> - <button - follows="bottomleft" + <layout_stack + follows="bottom|left|right" height="23" - label="Save As" layout="topleft" - left="8" - name="save_as_button" + mouse_opaque="false" + name="button_panel_ls" + left="0" + orientation="horizontal" top="0" - width="153" /> - <button - follows="bottomleft" - height="23" - label="Undo Changes" - layout="topleft" - left_pad="7" - name="revert_button" - width="152" /> + width="333"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + mouse_opaque="false" + name="save_as_btn_lp" + user_resize="false" + auto_resize="true" + width="154"> + <button + follows="bottom|left|right" + height="23" + label="Save As" + layout="topleft" + left="1" + name="save_as_button" + top="0" + width="153" /> + </layout_panel> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="revert_btn_lp" + user_resize="false" + auto_resize="true" + width="152"> + <button + follows="bottom|left|right" + height="23" + label="Undo Changes" + layout="topleft" + left_pad="7" + name="revert_button" + width="152" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_friends.xml b/indra/newview/skins/default/xui/en/panel_friends.xml deleted file mode 100644 index c315adb33e..0000000000 --- a/indra/newview/skins/default/xui/en/panel_friends.xml +++ /dev/null @@ -1,124 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel - border="true" - follows="all" - height="347" - layout="topleft" - name="friends" - width="100"> - <panel.string - name="Multiple"> - Multiple friends - </panel.string> - <scroll_list - bottom="337" - column_padding="0" - draw_heading="true" - follows="left|top|bottom|right" - layout="topleft" - left="10" - multi_select="true" - name="friend_list" - right="-100" - search_column="1" - tool_tip="Hold shift or control while clicking to select multiple friends" - top="10"> - <scroll_list.columns - image="ff_online_status_button.tga" - name="icon_online_status" - tool_tip="Online status" - width="20" /> - <scroll_list.columns - dynamic_width="true" - label="Name" - name="friend_name" - tool_tip="Name" /> - <scroll_list.columns - image="ff_visible_online_button.tga" - name="icon_visible_online" - tool_tip="Friend can see when you're online" - width="20" /> - <scroll_list.columns - image="ff_visible_map_button.tga" - name="icon_visible_map" - tool_tip="Friend can locate you on the map" - width="20" /> - <scroll_list.columns - image="ff_edit_mine_button.tga" - name="icon_edit_mine" - tool_tip="Friend can edit, delete or take objects" - width="20" /> - <scroll_list.columns - image="ff_edit_theirs_button.tga" - name="icon_edit_theirs" - tool_tip="You can edit this friend's objects" - width="20" /> - <scroll_list.columns - name="friend_last_update_generation" - width="0" /> - </scroll_list> - <locate - bottom="7" - layout="topleft" - left="-90" /> - <button - follows="top|right" - height="22" - label="IM/Call" - layout="topleft" - left_pad="10" - name="im_btn" - tool_tip="Open Instant Message session" - top_pad="3" - width="80" /> - <button - follows="top|right" - height="22" - label="Profile" - layout="topleft" - left_delta="0" - name="profile_btn" - tool_tip="Show picture, groups, and other information" - top_pad="3" - width="80" /> - <button - follows="top|right" - height="22" - label="Teleport" - layout="topleft" - left_delta="0" - name="offer_teleport_btn" - tool_tip="Offer this friend a teleport to your current location" - top_pad="3" - width="80" /> - <button - follows="top|right" - height="22" - label="Pay" - layout="topleft" - left_delta="0" - name="pay_btn" - tool_tip="Give Linden dollars (L$) to this friend" - top_pad="3" - width="80" /> - <button - follows="top|right" - height="22" - label="Remove" - layout="topleft" - left_delta="0" - name="remove_btn" - tool_tip="Remove this person from your friends list" - top_pad="3" - width="80" /> - <button - follows="top|right" - height="22" - label="Add" - layout="topleft" - left_delta="0" - name="add_btn" - tool_tip="Offer friendship to a Resident" - top_pad="13" - width="80" /> -</panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml index 4998322d62..3ded5c6678 100644 --- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml @@ -84,7 +84,7 @@ background_visible="true" follows="all" left="8" top_pad="0" - height="536" + height="506" width="292" border_size="0"> <layout_panel @@ -176,66 +176,108 @@ background_visible="true" </accordion_tab> </accordion> </layout_panel> - <layout_panel - height="30" - layout="topleft" - auto_resize="false" - left="0" - top_pad="0" - name="button_row" - follows="bottom|left" - width="313"> - <button - follows="bottom|left" - height="23" - image_overlay="Refresh_Off" - layout="topleft" - left="0" - top="5" - name="btn_refresh" - width="23" /> - <button - follows="bottom|left" - label="Chat" - name="btn_chat" - left_pad="3" - height="23" - width="82" /> - <button - follows="bottom|left" - left_pad="3" - height="23" - name="btn_call" - label="Group Call" - layout="topleft" - tool_tip="Call this group" - width="112" /> - <button - follows="bottom|left" - height="23" - label="Save" - label_selected="Save" - name="btn_apply" - left_pad="3" - width="82" /> - <button - follows="bottom|left" - height="23" - layout="topleft" - left="0" - label="Create Group" - name="btn_create" - visible="true" - tool_tip="Create a new Group" - width="103" /> - <!--<button - left_pad="3" - height="23" - label="Cancel" - label_selected="Cancel" - name="btn_cancel" - visible="false" - width="65" />--> - </layout_panel> </layout_stack> + + <layout_stack + follows="bottom|left|right" + height="25" + layout="topleft" + name="button_row_ls" + left="6" + orientation="horizontal" + top_pad="5" + width="297"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + name="btn_refresh_lp" + user_resize="false" + auto_resize="false" + width="24"> + <button + follows="bottom|left|right" + height="23" + image_overlay="Refresh_Off" + layout="topleft" + left="1" + top="0" + name="btn_refresh" + width="23" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="btn_chat_lp" + user_resize="false" + auto_resize="true" + width="91"> + <button + follows="bottom|left|right" + label="Chat" + name="btn_chat" + left="1" + height="23" + top="0" + width="90" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="call_btn_lp" + user_resize="false" + auto_resize="true" + width="91"> + <button + follows="bottom|left|right" + left="1" + height="23" + name="btn_call" + label="Group Call" + layout="topleft" + tool_tip="Call this group" + top="0" + width="90" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="btn_apply_lp" + user_resize="false" + auto_resize="true" + width="91"> + <button + follows="bottom|left|right" + height="23" + label="Save" + label_selected="Save" + name="btn_apply" + left="1" + top="0" + width="90" /> + <button + follows="bottom|left|right" + height="23" + layout="topleft" + left="1" + top="0" + label="Create Group" + name="btn_create" + visible="true" + tool_tip="Create a new Group" + width="90" /> + </layout_panel> + </layout_stack> + </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml index 76f7484c68..1e1d2d18ca 100644 --- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml @@ -60,6 +60,8 @@ left="0" right="-1" top="0" + sort_column="0" + sort_ascending="true" name="group_parcel_list" width="313"> <scroll_list.columns diff --git a/indra/newview/skins/default/xui/en/panel_group_list_item.xml b/indra/newview/skins/default/xui/en/panel_group_list_item.xml index ab34cbf20e..0b84ac03c5 100644 --- a/indra/newview/skins/default/xui/en/panel_group_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_group_list_item.xml @@ -55,6 +55,7 @@ left_pad="3" right="-31" name="info_btn" + tab_stop="false" top_delta="-2" width="16" /> <!--*TODO: Should only appear on rollover--> @@ -66,6 +67,7 @@ left_pad="5" right="-3" name="profile_btn" + tab_stop="false" tool_tip="View profile" top_delta="-2" width="20" /> diff --git a/indra/newview/skins/default/xui/en/panel_groups.xml b/indra/newview/skins/default/xui/en/panel_groups.xml deleted file mode 100644 index bba399481b..0000000000 --- a/indra/newview/skins/default/xui/en/panel_groups.xml +++ /dev/null @@ -1,111 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel - border="true" - follows="all" - height="347" - layout="topleft" - left="280" - name="groups" - top="24" - width="350"> - <scroll_list - bottom="302" - follows="left|top|right|bottom" - layout="topleft" - left="10" - name="group list" - top="10" - width="240"> - <scroll_list.columns - label="" - name="name" - width="248" /> - </scroll_list> - <text - type="string" - length="1" - follows="left|bottom" - height="16" - layout="topleft" - left_delta="2" - mouse_opaque="false" - name="groupdesc" - top_pad="7" - width="248"> - Your currently active group is displayed in bold. - </text> - <text - type="string" - length="1" - follows="left|bottom" - height="16" - layout="topleft" - left_delta="0" - mouse_opaque="false" - name="groupcount" - top_pad="1" - width="248"> - You belong to [COUNT] groups (of [MAX] maximum). - </text> - <locate - height="0" - layout="topleft" - left="-90" - top="7" - width="1" /> - <button - follows="top|right" - height="22" - label="IM/Call" - layout="topleft" - left_delta="0" - name="IM" - tool_tip="Open Instant Message session" - top_pad="3" - width="80" /> - <button - follows="top|right" - height="22" - label="Info" - layout="topleft" - left_delta="0" - name="Info" - top_pad="3" - width="80" /> - <button - follows="top|right" - height="22" - label="Activate" - layout="topleft" - left_delta="0" - name="Activate" - top_pad="3" - width="80" /> - <button - follows="top|right" - height="22" - label="Leave" - layout="topleft" - left_delta="0" - name="Leave" - top_pad="3" - width="80" /> - <button - follows="top|right" - height="22" - label="Create..." - layout="topleft" - left_delta="0" - name="Create" - top_pad="13" - width="80" /> - <button - follows="top|right" - height="22" - label="Search..." - layout="topleft" - left_delta="0" - name="Search..." - top_pad="3" - width="80" /> -</panel> diff --git a/indra/newview/skins/default/xui/en/panel_hint.xml b/indra/newview/skins/default/xui/en/panel_hint.xml new file mode 100644 index 0000000000..e2e9d0aef0 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_hint.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + width="205" + height="100"> + <text name="hint_title" + font="SansSerifMedium" + left="8" + right="180" + top="8" + bottom="20" + follows="left|right|top" + text_color="Black" + wrap="false"/> + <text name="hint_text" + left="8" + right="197" + top="26" + bottom="92" + follows="all" + text_color="Black" + wrap="true"/> + <button right="197" + top="8" + width="16" + height="16" + name="close" + follows="right|top" + image_color="DkGray" + image_unselected="Icon_Close_Foreground" + image_selected="Icon_Close_Press"/> +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml index 33a5e01e4c..aa0edbfb8a 100644 --- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml @@ -3,11 +3,11 @@ border="false" height="300" name="panel_im_control_panel" - width="119"> + width="150"> <avatar_icon follows="left|top" height="105" - left_delta="5" + left_delta="20" name="avatar_icon" top="-5" width="114"/> @@ -22,7 +22,7 @@ name="button_stack" orientation="vertical" top_pad="5" - width="114"> + width="145"> <layout_panel mouse_opaque="false" auto_resize="true" @@ -31,7 +31,7 @@ layout="topleft" left="2" min_height="0" - width="109" + width="140" top="0" name="spacer" user_resize="false" /> @@ -41,7 +41,7 @@ height="20" layout="topleft" min_height="20" - width="109" + width="140" name="view_profile_btn_panel" user_resize="false"> <button @@ -50,7 +50,7 @@ label="Profile" name="view_profile_btn" top="0" - width="109" /> + width="140" /> </layout_panel> <layout_panel auto_resize="false" @@ -58,7 +58,7 @@ height="25" layout="topleft" min_height="25" - width="109" + width="140" name="add_friend_btn_panel" user_resize="false"> <button @@ -67,7 +67,7 @@ label="Add Friend" name="add_friend_btn" top="5" - width="109" /> + width="140" /> </layout_panel> <layout_panel auto_resize="false" @@ -75,7 +75,7 @@ height="25" layout="topleft" min_height="25" - width="109" + width="140" name="teleport_btn_panel" user_resize="false"> <button @@ -85,7 +85,7 @@ label="Teleport" name="teleport_btn" tool_tip = "Offer to teleport this person" - width="109" /> + width="140" /> </layout_panel> <layout_panel auto_resize="false" @@ -93,7 +93,7 @@ height="25" layout="topleft" min_height="25" - width="109" + width="140" name="share_btn_panel" user_resize="false"> <button @@ -102,7 +102,7 @@ height="23" label="Share" name="share_btn" - width="109" /> + width="140" /> </layout_panel> <layout_panel auto_resize="false" @@ -110,7 +110,7 @@ height="25" layout="topleft" min_height="25" - width="109" + width="140" name="pay_btn_panel" user_resize="false"> <button @@ -119,7 +119,7 @@ height="23" label="Pay" name="pay_btn" - width="109" /> + width="140" /> </layout_panel> <layout_panel auto_resize="false" @@ -127,7 +127,7 @@ height="25" layout="topleft" min_height="25" - width="109" + width="140" name="call_btn_panel" user_resize="false"> <button @@ -135,7 +135,7 @@ height="23" label="Call" name="call_btn" - width="109" /> + width="140" /> </layout_panel> <layout_panel auto_resize="false" @@ -143,7 +143,7 @@ height="25" layout="topleft" min_height="25" - width="109" + width="140" name="end_call_btn_panel" user_resize="false" visible="false"> @@ -152,7 +152,7 @@ height="23" label="End Call" name="end_call_btn" - width="109" /> + width="140" /> </layout_panel> <layout_panel auto_resize="false" @@ -160,7 +160,7 @@ height="25" layout="topleft" min_height="25" - width="109" + width="140" name="voice_ctrls_btn_panel" user_resize="false" visible="false"> @@ -169,7 +169,7 @@ height="23" label="Voice Controls" name="voice_ctrls_btn" - width="109" /> + width="140" /> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml index c5d6aced7a..f8ae238148 100644 --- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml +++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml @@ -57,7 +57,7 @@ translate="false" value="Parcel_R_Dark" /> <button - follows="top|right" + follows="top|left" height="24" image_hover_unselected="BackButton_Over" image_pressed="BackButton_Press" diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml index a7e87f2a1e..7e415f45a4 100644 --- a/indra/newview/skins/default/xui/en/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml @@ -97,51 +97,94 @@ left="3" name="bottom_panel" width="313"> - <button - follows="bottom|left" - tool_tip="Show additional options" - height="25" - image_hover_unselected="Toolbar_Left_Over" - image_overlay="OptionsMenu_Off" - image_selected="Toolbar_Left_Selected" - image_unselected="Toolbar_Left_Off" - layout="topleft" - left="0" - name="options_gear_btn" - top="1" - width="31" /> - <button - follows="bottom|left" - height="25" - image_hover_unselected="Toolbar_Middle_Over" - image_overlay="AddItem_Off" - image_selected="Toolbar_Middle_Selected" - image_unselected="Toolbar_Middle_Off" - layout="topleft" - left_pad="1" - name="add_btn" - tool_tip="Add new landmark" - width="31" /> - <icon - follows="bottom|left" - height="25" - image_name="Toolbar_Middle_Off" - layout="topleft" - left_pad="1" - name="dummy_icon" - width="209" - /> - <dnd_button - follows="bottom|left" - height="25" - image_hover_unselected="Toolbar_Right_Over" - image_overlay="TrashItem_Off" - image_selected="Toolbar_Right_Selected" - image_unselected="Toolbar_Right_Off" - layout="topleft" - left_pad="1" - name="trash_btn" - tool_tip="Remove selected landmark" - width="31" /> - </panel> + + <layout_stack + animate="false" + border_size="0" + follows="left|right|bottom" + height="25" + layout="topleft" + orientation="horizontal" + top_pad="1" + left="0" + name="bottom_panel" + width="307"> + <layout_panel + auto_resize="false" + height="25" + layout="topleft" + name="options_gear_btn_panel" + width="32"> + <button + follows="bottom|left" + tool_tip="Show additional options" + height="25" + image_hover_unselected="Toolbar_Left_Over" + image_overlay="OptionsMenu_Off" + image_selected="Toolbar_Left_Selected" + image_unselected="Toolbar_Left_Off" + layout="topleft" + left="0" + name="options_gear_btn" + top="0" + width="31" /> + </layout_panel> + <layout_panel + auto_resize="false" + height="25" + layout="topleft" + name="add_btn_panel" + width="32"> + <button + follows="bottom|left" + height="25" + image_hover_unselected="Toolbar_Middle_Over" + image_overlay="AddItem_Off" + image_selected="Toolbar_Middle_Selected" + image_unselected="Toolbar_Middle_Off" + layout="topleft" + left="0" + name="add_btn" + tool_tip="Add new landmark" + top="0" + width="31" /> + </layout_panel> + <layout_panel + auto_resize="true" + height="25" + layout="topleft" + name="dummy_panel" + width="212"> + <icon + follows="bottom|left|right" + height="25" + image_name="Toolbar_Middle_Off" + layout="topleft" + left="0" + top="0" + name="dummy_icon" + width="211" /> + </layout_panel> + <layout_panel + auto_resize="false" + height="25" + layout="topleft" + name="trash_btn_panel" + width="31"> + <dnd_button + follows="bottom|left" + height="25" + image_hover_unselected="Toolbar_Right_Over" + image_overlay="TrashItem_Off" + image_selected="Toolbar_Right_Selected" + image_unselected="Toolbar_Right_Off" + left="0" + layout="topleft" + name="trash_btn" + tool_tip="Remove selected landmark" + top="0" + width="31"/> + </layout_panel> + </layout_stack> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index 6b136495d2..891616b838 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -24,6 +24,8 @@ top="600" </panel.string> <!-- *NOTE: Custom resize logic for login_html in llpanellogin.cpp --> <web_browser + tab_stop="false" +trusted_content="true" bg_opaque_color="Black" border_visible="false" bottom="600" diff --git a/indra/newview/skins/default/xui/en/panel_me.xml b/indra/newview/skins/default/xui/en/panel_me.xml index 63c522ac69..84b5d11ba7 100644 --- a/indra/newview/skins/default/xui/en/panel_me.xml +++ b/indra/newview/skins/default/xui/en/panel_me.xml @@ -26,7 +26,7 @@ </text> --> <tab_container follows="all" - height="575" + height="555" halign="center" layout="topleft" left="5" diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml index 4629bb9cfe..37a1ed3048 100644 --- a/indra/newview/skins/default/xui/en/panel_my_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml @@ -41,7 +41,7 @@ layout="topleft" left="0" top="0" - height="522" + height="510" width="315" border_size="0"> <layout_panel @@ -324,82 +324,25 @@ </panel> </scroll_container> </layout_panel> - <!-- <layout_panel - follows="bottom|left" + </layout_stack> + <panel + follows="bottom|left|right" + height="23" layout="topleft" left="0" - name="profile_buttons_panel" - height="28" - width="313"> - <button - follows="bottom|left" - height="23" - label="Add Friend" - layout="topleft" - left="0" - mouse_opaque="false" - name="add_friend" - tool_tip="Offer friendship to the Resident" - top="5" - width="80" /> - <button - follows="bottom|left" - height="23" - label="IM" - layout="topleft" - name="im" - top="5" - left_pad="3" - width="45" /> - <button - follows="bottom|left" - height="23" - label="Call" - layout="topleft" - name="call" - left_pad="3" - top="5" - width="45" /> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Map" - layout="topleft" - name="show_on_map_btn" - top="5" - left_pad="3" - width="45" /> - <button - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - name="teleport" - left_pad="3" - top="5" - width="85" /> - </panel>--> - <layout_panel - follows="bottom|left" - layout="topleft" - left="0" - top_pad="0" + top_pad="1" name="profile_me_buttons_panel" visible="false" - user_resize="false" - auto_resize="false" - height="28" width="315"> <button - follows="bottom|right" + follows="bottom" height="23" left="6" - top="1" + top="1" label="Edit Profile" name="edit_profile_btn" tool_tip="Edit your personal information" width="152" /> - </layout_panel> -</layout_stack> + </panel> + </panel> diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat.xml deleted file mode 100644 index 50a78e1c71..0000000000 --- a/indra/newview/skins/default/xui/en/panel_nearby_chat.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<!-- All our XML is utf-8 encoded. --> - -<panel - name="nearby_chat" visible="true" width="250" height="480" background_opaque="false" - background_visible="true" bevel_style="in" follows="left|top" bg_alpha_color="0.3 0.3 0.3 1.0"> - <panel bottom="380" width="250" height="30" background_visible="true" background_opaque="false" bg_alpha_color="0.0 0.0 0.0 1.0" name="chat_caption"> - <text - width="140" left="25" height="20" follows="left|right|top" - font="SansSerifBigBold" text_color="white" word_wrap="true" - mouse_opaque="true" name="sender_name" >NEARBY CHAT </text> - <icon top="25" left="180" - width="20" height="20" follows="top|right" - color="1 1 1 1" enabled="true" image_name="icn_voice-groupfocus.tga" - mouse_opaque="true" name="nearby_speakers_btn"/> - <icon top="25" left="205" - width="20" height="20" follows="top|right" - color="1 1 1 1" enabled="true" image_name="inv_item_landmark_visited.tga" - mouse_opaque="true" name="tearoff_btn"/> - <icon top="22" left="230" - width="15" height="15" follows="top|right" - color="1 1 1 1" enabled="true" image_name="closebox.tga" - name="close_btn"/> - </panel> - <chat_history_view bottom="0" width="250" height="320" follows="left|right|top|bottom" name="chat_scroll" /> -</panel> - diff --git a/indra/newview/skins/default/xui/en/panel_notes.xml b/indra/newview/skins/default/xui/en/panel_notes.xml index cff7b51ce8..124b1cfc6b 100644 --- a/indra/newview/skins/default/xui/en/panel_notes.xml +++ b/indra/newview/skins/default/xui/en/panel_notes.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel follows="all" - height="533" + height="515" label="Notes & Privacy" layout="topleft" left="0" @@ -112,58 +112,125 @@ name="notes_buttons_panel" auto_resize="false" width="313"> - <button - follows="bottom|left" - height="23" - label="Add Friend" - layout="topleft" - left="2" - mouse_opaque="false" - name="add_friend" - tool_tip="Offer friendship to the Resident" - top="5" - width="80" /> - <button - follows="bottom|left" - height="23" - label="IM" - layout="topleft" - name="im" - tool_tip="Open instant message session" - top="5" - left_pad="3" - width="45" /> - <button - follows="bottom|left" - height="23" - label="Call" - layout="topleft" - name="call" - tool_tip="Call this Resident" - left_pad="3" - top="5" - width="46" /> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Map" - layout="topleft" - name="show_on_map_btn" - tool_tip="Show the Resident on the map" - top="5" - left_pad="3" - width="45" /> - <button - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - name="teleport" - tool_tip="Offer teleport" - left_pad="3" - top="5" - width="80" /> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + name="bottom_bar_ls" + left="2" + orientation="horizontal" + top_pad="5" + width="309"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + name="add_friend_btn_lp" + user_resize="false" + auto_resize="true" + width="118"> + <button + follows="bottom|left|right" + height="23" + label="Add Friend" + layout="topleft" + left="1" + mouse_opaque="false" + name="add_friend" + tool_tip="Offer friendship to the Resident" + top="0" + width="117" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="im_btn_lp" + user_resize="false" + auto_resize="true" + width="22"> + <button + follows="bottom|left|right" + height="23" + label="IM" + layout="topleft" + name="im" + tool_tip="Open instant message session" + top="0" + left="1" + width="21" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="call_btn_lp" + user_resize="false" + auto_resize="true" + width="52"> + <button + follows="bottom|left|right" + height="23" + label="Call" + layout="topleft" + name="call" + tool_tip="Call this Resident" + left="1" + top="0" + use_ellipses="true" + width="51" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="show_on_map_btn_lp" + user_resize="false" + auto_resize="true" + width="46"> + <button + enabled="false" + follows="bottom|left|right" + height="23" + label="Map" + layout="topleft" + name="show_on_map_btn" + tool_tip="Show the Resident on the map" + top="0" + left="1" + width="45" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="teleport_btn_lp" + user_resize="false" + auto_resize="true" + width="81"> + <button + follows="bottom|left|right" + height="23" + label="Teleport" + layout="topleft" + name="teleport" + tool_tip="Offer teleport" + left="1" + top="0" + width="80" /> + </layout_panel> + </layout_stack> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml index 3143b0a40c..c3dc588ba2 100644 --- a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml +++ b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml @@ -14,6 +14,9 @@ orientation="horizontal" top="20" width="100"> + <layout_panel name="notifications_list_panel" + width="100" + user_resize="true"> <scroll_list draw_heading="true" follows="left|right|top|bottom" @@ -24,7 +27,6 @@ sort_ascending="false" sort_column="2" top="0" - user_resize="true" width="100"> <scroll_list.columns label="Name" @@ -39,6 +41,10 @@ name="date" width="150" /> </scroll_list> + </layout_panel> + <layout_panel name="rejects_list_panel" + width="100" + user_resize="true"> <scroll_list draw_heading="true" follows="left|right|top|bottom" @@ -49,7 +55,6 @@ sort_ascending="false" sort_column="2" top="0" - user_resize="true" width="100"> <scroll_list.columns label="Name" @@ -64,6 +69,7 @@ name="date" width="150" /> </scroll_list> + </layout_panel> </layout_stack> <button follows="left|right|top" diff --git a/indra/newview/skins/default/xui/en/panel_online_status.xml b/indra/newview/skins/default/xui/en/panel_online_status.xml deleted file mode 100644 index 14cb5fffee..0000000000 --- a/indra/newview/skins/default/xui/en/panel_online_status.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel - background_visible="false" - height="152" - label="friend_online_status" - layout="topleft" - left="0" - name="friend_online_status" - top="0" - width="305"> - <avatar_icon - follows="top|left" - height="18" - image_name="Generic_Person" - layout="topleft" - left="3" - mouse_opaque="false" - name="avatar_icon" - top="10" - width="18" /> - <text - font="SansSerifSmall" - follows="all" - height="137" - layout="topleft" - left_pad="5" - name="message" - text_color="white" - top="15" - use_ellipses="true" - value="" - width="285" - word_wrap="true" - max_length="350" /> -</panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml index e6714af943..e0426c75b4 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -71,7 +71,7 @@ top="1" width="30" /> <text - follows="top|right" + follows="top|left|right" font="SansSerifHugeBold" height="26" layout="topleft" @@ -108,7 +108,7 @@ width="31" /> <panel bevel_style="none" - follows="top|right" + follows="top|left|right" height="37" layout="topleft" left_pad="5" @@ -183,6 +183,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap follows="all" height="185" width="313" + orientation="vertical" layout="topleft" name="filter_panels" top="0" @@ -295,7 +296,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap auto_resize="true" default_tab_group="3" height="450" - min_height="73" + min_height="80" name="add_wearables_panel" width="313" tab_group="2" @@ -494,17 +495,37 @@ It is calculated as border_size + 2*UIResizeBarOverlap top_pad="2" name="save_revert_button_bar" width="300"> + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="button_bar_ls" + left="0" + orientation="horizontal" + top="0" + width="313"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + mouse_opaque="false" + name="save_btn_lp" + user_resize="false" + auto_resize="true" + width="156"> <button - follows="bottom|left" + follows="bottom|left|right" height="23" label="Save" - left="0" + left="1" layout="topleft" name="save_btn" top="0" width="155" /> <button - follows="bottom|left" + follows="bottom|right" height="23" name="save_flyout_btn" label="" @@ -518,15 +539,28 @@ It is calculated as border_size + 2*UIResizeBarOverlap image_pressed_selected="SegmentedBtn_Right_Selected_Press" image_overlay="Arrow_Small_Up" width="20"/> + </layout_panel> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="revert_btn_lp" + user_resize="false" + auto_resize="true" + width="147"> <button follows="bottom|left|right" height="23" - left_pad="12" + left="0" label="Undo Changes" layout="topleft" name="revert_btn" top="0" tool_tip="Revert to last saved version" width="147" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml index 82b69ba8dc..88c82313dd 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml @@ -67,36 +67,70 @@ visible="true" name="bottom_panel" width="310"> - <button - follows="bottom|left" - height="23" - label="Save As" - left="0" - layout="topleft" - name="save_btn" - top_pad="0" - width="155" /> - <button - follows="bottom|left" - height="23" - name="save_flyout_btn" - label="" - layout="topleft" - left_pad="-20" - tab_stop="false" - image_selected="SegmentedBtn_Right_Selected_Press" - image_unselected="SegmentedBtn_Right_Off" - image_pressed="SegmentedBtn_Right_Press" - image_pressed_selected="SegmentedBtn_Right_Selected_Press" - image_overlay="Arrow_Small_Up" - width="20"/> - <button - follows="bottom|left|right" - height="23" - label="Wear" - layout="topleft" - name="wear_btn" - left_pad="3" - width="152" /> + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_panel_ls" + left="0" + orientation="horizontal" + top="0" + width="313"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + mouse_opaque="false" + name="save_btn_lp" + user_resize="false" + auto_resize="true" + width="156"> + <button + follows="bottom|left|right" + height="23" + label="Save As" + left="1" + layout="topleft" + name="save_btn" + top="0" + width="155" /> + <button + follows="bottom|right" + height="23" + name="save_flyout_btn" + label="" + layout="topleft" + left_pad="-20" + tab_stop="false" + image_selected="SegmentedBtn_Right_Selected_Press" + image_unselected="SegmentedBtn_Right_Off" + image_pressed="SegmentedBtn_Right_Press" + image_pressed_selected="SegmentedBtn_Right_Selected_Press" + image_overlay="Arrow_Small_Up" + width="20"/> + </layout_panel> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="wear_btn_lp" + user_resize="false" + auto_resize="true" + width="152"> + <button + follows="bottom|left|right" + height="23" + label="Wear" + layout="topleft" + name="wear_btn" + left="0" + top="0" + width="152" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 7cd0d5b5f0..ab8930c967 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -143,7 +143,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M function="People.addFriend" /> </button> <icon - follows="bottom|left" + follows="bottom|left|right" height="25" image_name="Toolbar_Right_Off" layout="topleft" @@ -192,6 +192,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M left="0" multi_select="true" name="avatars_online" + show_permissions_granted="true" top="0" width="307" /> </accordion_tab> @@ -208,6 +209,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M left="0" multi_select="true" name="avatars_all" + show_permissions_granted="true" top="0" width="307" /> </accordion_tab> @@ -222,6 +224,96 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M name="bottom_panel" top_pad="0" width="313"> + + <layout_stack + animate="false" + border_size="0" + follows="left|right|bottom" + height="25" + layout="topleft" + orientation="horizontal" + top_pad="1" + left="0" + name="bottom_panel" + width="305"> + <layout_panel + auto_resize="false" + height="25" + layout="topleft" + name="options_gear_btn_panel" + width="32"> + <button + follows="bottom|left" + tool_tip="Show additional options" + height="25" + image_hover_unselected="Toolbar_Left_Over" + image_overlay="OptionsMenu_Off" + image_selected="Toolbar_Left_Selected" + image_unselected="Toolbar_Left_Off" + layout="topleft" + left="0" + name="friends_viewsort_btn" + top="0" + width="31" /> + </layout_panel> + <layout_panel + auto_resize="false" + height="25" + layout="topleft" + name="add_btn_panel" + width="32"> + <button + follows="bottom|left" + height="25" + image_hover_unselected="Toolbar_Middle_Over" + image_overlay="AddItem_Off" + image_selected="Toolbar_Middle_Selected" + image_unselected="Toolbar_Middle_Off" + layout="topleft" + left="0" + name="add_btn" + tool_tip="Offer friendship to a Resident" + top="0" + width="31" /> + </layout_panel> + <layout_panel + auto_resize="true" + height="25" + layout="topleft" + name="dummy_panel" + width="212"> + <icon + follows="bottom|left|right" + height="25" + image_name="Toolbar_Middle_Off" + layout="topleft" + left="0" + top="0" + name="dummy_icon" + width="211" /> + </layout_panel> + <layout_panel + auto_resize="false" + height="25" + layout="topleft" + name="trash_btn_panel" + width="31"> + <dnd_button + follows="bottom|left" + height="25" + image_hover_unselected="Toolbar_Right_Over" + image_overlay="TrashItem_Off" + image_selected="Toolbar_Right_Selected" + image_unselected="Toolbar_Right_Off" + left="0" + layout="topleft" + name="trash_btn" + tool_tip="Remove selected person from your Friends list" + top="0" + width="31"/> + </layout_panel> + </layout_stack><!-- + <button follows="bottom|left" tool_tip="Options" @@ -248,7 +340,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M tool_tip="Offer friendship to a Resident" width="31" /> <icon - follows="bottom|left" + follows="bottom|left|right" height="25" image_name="Toolbar_Middle_Off" layout="topleft" @@ -268,7 +360,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M name="del_btn" tool_tip="Remove selected person from your Friends list" width="31" /> - </panel> + --></panel> <text follows="all" height="450" @@ -353,7 +445,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M tool_tip="Activate selected group" width="31" /> <icon - follows="bottom|left" + follows="bottom|left|right" height="25" image_name="Toolbar_Right_Off" layout="topleft" @@ -427,7 +519,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M function="People.addFriend" /> </button> <icon - follows="bottom|left" + follows="bottom|left|right" height="25" image_name="Toolbar_Right_Off" layout="topleft" @@ -439,85 +531,210 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M </panel> </tab_container> <panel - follows="bottom|left" + follows="bottom|left|right" height="23" layout="topleft" left="8" top_pad="4" name="button_bar" width="313"> - <button - follows="bottom|left" - height="23" - label="Profile" - layout="topleft" - name="view_profile_btn" - tool_tip="Show picture, groups, and other Residents information" - top="0" - width="67" /> - <button - follows="bottom|left" - left_pad="3" - height="23" - label="IM" - layout="topleft" - name="im_btn" - tool_tip="Open instant message session" - width="40" /> - <button - follows="bottom|left" - left_pad="3" - height="23" - label="Call" - layout="topleft" - name="call_btn" - tool_tip="Call this Resident" - width="51" /> - <button - follows="bottom|left" - left_pad="3" - height="23" - label="Share" - layout="topleft" - name="share_btn" - tool_tip="Share an inventory item" - width="65" /> - <button - follows="bottom|left" - left_pad="3" - height="23" - label="Teleport" - layout="topleft" - name="teleport_btn" - tool_tip="Offer teleport" - width="76" /> - <button - follows="bottom|left" - left="0" - top_delta="0" - height="23" - label="Group Profile" - layout="topleft" - name="group_info_btn" - tool_tip="Show group information" - width="107" /> - <button - follows="bottom|left" - left_pad="3" - height="23" - label="Group Chat" - layout="topleft" - name="chat_btn" - tool_tip="Open chat session" - width="100" /> - <button - follows="bottom|left" - left_pad="3" - height="23" - label="Group Call" - layout="topleft" - name="group_call_btn" - tool_tip="Call this group" - width="95" /> + +<!--********************************Profile; IM; Call, Share, Teleport********************************--> + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + name="bottom_bar_ls" + left="0" + orientation="horizontal" + top_pad="0" + width="313"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + name="view_profile_btn_lp" + user_resize="false" + auto_resize="true" + width="68"> + <button + follows="bottom|left|right" + height="23" + label="Profile" + layout="topleft" + left="1" + name="view_profile_btn" + tool_tip="Show picture, groups, and other Residents information" + top="0" + width="67" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="chat_btn_lp" + user_resize="false" + auto_resize="true" + width="41"> + <button + follows="bottom|left|right" + left="1" + height="23" + label="IM" + layout="topleft" + name="im_btn" + tool_tip="Open instant message session" + top="0" + width="40" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="chat_btn_lp" + user_resize="false" + auto_resize="true" + width="52"> + <button + follows="bottom|left|right" + left="1" + height="23" + label="Call" + layout="topleft" + name="call_btn" + tool_tip="Call this Resident" + top="0" + width="51" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="chat_btn_lp" + user_resize="false" + auto_resize="true" + width="66"> + <button + follows="bottom|left|right" + left="1" + height="23" + label="Share" + layout="topleft" + name="share_btn" + tool_tip="Share an inventory item" + top="0" + width="65" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="chat_btn_lp" + user_resize="false" + auto_resize="true" + width="77"> + <button + follows="bottom|left|right" + left="1" + height="23" + label="Teleport" + layout="topleft" + name="teleport_btn" + tool_tip="Offer teleport" + top="0" + width="76" /> + </layout_panel> + </layout_stack> + +<!--********************************Group Profile; Group Chat; Group Call buttons************************--> + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_bar_ls1" + left="0" + orientation="horizontal" + top="0" + width="313"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + mouse_opaque="false" + name="group_info_btn_lp" + user_resize="false" + auto_resize="true" + width="108"> + <button + follows="bottom|left|right" + left="1" + height="23" + label="Group Profile" + layout="topleft" + mouse_opaque="false" + name="group_info_btn" + tool_tip="Show group information" + top="0" + width="107" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="chat_btn_lp" + user_resize="false" + auto_resize="true" + width="101"> + <button + follows="bottom|left|right" + left="1" + height="23" + label="Group Chat" + layout="topleft" + mouse_opaque="false" + name="chat_btn" + tool_tip="Open chat session" + top="0" + width="100" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="group_call_btn_lp" + user_resize="false" + auto_resize="true" + width="96"> + <button + follows="bottom|left|right" + left="1" + height="23" + label="Group Call" + layout="topleft" + mouse_opaque="false" + name="group_call_btn" + tool_tip="Call this group" + top="0" + width="95" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml index 95c8cb301d..0496c86215 100644 --- a/indra/newview/skins/default/xui/en/panel_pick_info.xml +++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml @@ -11,7 +11,7 @@ top="0" width="333"> <button - follows="top|right" + follows="top|left" height="24" image_hover_unselected="BackButton_Over" image_pressed="BackButton_Press" @@ -121,30 +121,73 @@ top_pad="5" left="8" name="buttons"> - <button - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - left="0" - name="teleport_btn" - top="0" - width="101" /> - <button - follows="bottom|left" - height="23" - label="Map" - layout="topleft" - left_pad="3" - name="show_on_map_btn" - width="100" /> - <button - follows="bottom|left" - height="23" - label="Edit" - layout="topleft" - name="edit_btn" - left_pad="3" - width="101" /> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + name="layout_stack1" + left="0" + orientation="horizontal" + top_pad="0" + width="312"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + name="layout_panel1" + user_resize="false" + auto_resize="true" + width="101"> + <button + follows="bottom|left|right" + height="23" + label="Teleport" + layout="topleft" + name="teleport_btn" + top="0" + width="101" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="show_on_map_btn_lp" + user_resize="false" + auto_resize="true" + width="100"> + <button + follows="bottom|left|right" + height="23" + label="Map" + layout="topleft" + name="show_on_map_btn" + top_pad="0" + width="100" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="edit_btn_lp" + user_resize="false" + auto_resize="true" + width="101"> + <button + follows="bottom|left|right" + height="23" + label="Edit" + layout="topleft" + name="edit_btn" + top_pad="0" + width="101" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml index a815cdf7f0..4f7c4fa9b2 100644 --- a/indra/newview/skins/default/xui/en/panel_picks.xml +++ b/indra/newview/skins/default/xui/en/panel_picks.xml @@ -30,7 +30,7 @@ bg_opaque_color="DkGray2" <accordion fit_parent="true" follows="all" - height="470" + height="485" layout="topleft" left="0" name="accordion" @@ -78,93 +78,166 @@ bg_opaque_color="DkGray2" bevel_style="none" enabled="false" auto_resize="false" - follows="bottom" + follows="bottom|left|right" left="1" height="27" label="bottom_panel" - layout="topleft" + layout="bottom" name="edit_panel" top_pad="-2" width="313"> - <button - enabled="false" - follows="bottom|left" - height="18" - image_selected="OptionsMenu_Press" - image_unselected="OptionsMenu_Off" - image_disabled="OptionsMenu_Disabled" - layout="topleft" - left="10" - name="gear_menu_btn" - top="9" - width="18" /> - <button - follows="bottom|left" - height="18" - image_disabled="AddItem_Disabled" - image_selected="AddItem_Press" - image_unselected="AddItem_Off" - layout="topleft" - left_pad="15" - name="new_btn" - tool_tip="Create a new pick or classified at the current location" - top="9" - width="18" /> - <button - follows="bottom|right" - height="18" - image_disabled="TrashItem_Disabled" - image_selected="TrashItem_Press" - image_unselected="TrashItem_Off" - layout="topleft" - name="trash_btn" - right="-10" - top="9" - width="18" /> - </panel> - <panel + + <layout_stack + follows="bottom|left|right" + height="23" + layout="bottomleft" + name="edit_panel_ls" + left="10" + orientation="horizontal" + top_pad="0" + width="293"> + + <layout_panel + follows="bottom|left" + height="18" + layout="bottomleft" + left="0" + name="gear_menu_btn" + user_resize="false" + auto_resize="true" + width="51"> + <button + enabled="false" + follows="bottom|left" + height="18" + image_selected="OptionsMenu_Press" + image_unselected="OptionsMenu_Off" + image_disabled="OptionsMenu_Disabled" + layout="topleft" + left="0" + name="gear_menu_btn" + top_pad="0" + width="18" /> + <button + follows="bottom|left" + height="18" + image_disabled="AddItem_Disabled" + image_selected="AddItem_Press" + image_unselected="AddItem_Off" + layout="topleft" + left_pad="15" + name="new_btn" + tool_tip="Create a new pick or classified at the current location" + width="18" /> + </layout_panel> + + <layout_panel + follows="bottom|right" + height="18" + layout="bottomleft" + name="trash_btn_lp" + user_resize="false" + auto_resize="true" + width="18"> + <button + follows="bottom|right" + height="18" + image_disabled="TrashItem_Disabled" + image_selected="TrashItem_Press" + image_unselected="TrashItem_Off" + layout="topleft" + name="trash_btn" + top="0" + width="18" /> + </layout_panel> + + </layout_stack> + </panel> + + <panel bg_opaque_color="DkGray" background_visible="true" background_opaque="true" + follows="bottom|left|right" layout="topleft" left="0" height="40" - top="502" name="buttons_cucks" width="313"> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Info" - layout="topleft" - left="2" - name="info_btn" - tab_stop="false" - tool_tip="Show pick information" - top="5" - width="95" /> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - left_pad="3" - name="teleport_btn" - tab_stop="false" - tool_tip="Teleport to the corresponding area" - width="117" /> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Map" - layout="topleft" - left_pad="3" - name="show_on_map_btn" - tab_stop="false" - tool_tip="Show the corresponding area on the World Map" - width="90" /> - </panel> + + <layout_stack + follows="bottom|left|right" + height="28" + layout="topleft" + left="2" + name="buttons_cucks_ls" + orientation="horizontal" + top="0" + width="313"> + + <layout_panel + follows="bottom|left|right" + height="28" + layout="topleft" + left="0" + name="info_btn_lp" + user_resize="false" + auto_resize="true" + top="0" + width="95"> + <button + enabled="false" + follows="top|left|right" + height="23" + label="Info" + layout="topleft" + name="info_btn" + tab_stop="false" + tool_tip="Show pick information" + width="95" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="28" + layout="bottomleft" + left_pad="2" + name="teleport_btn_lp" + user_resize="false" + auto_resize="true" + width="117"> + <button + enabled="false" + follows="top|left|right" + height="23" + label="Teleport" + layout="topleft" + name="teleport_btn" + tab_stop="false" + tool_tip="Teleport to the corresponding area" + width="117" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="28" + layout="bottomleft" + name="show_on_map_btn_lp" + user_resize="false" + auto_resize="true" + left_pad="2" + width="90"> + <button + enabled="false" + follows="top|left|right" + height="23" + label="Map" + layout="topleft" + name="show_on_map_btn" + tab_stop="false" + tool_tip="Show the corresponding area on the World Map" + width="88" /> + </layout_panel> + </layout_stack> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index c6e93af50a..01d1e48ba1 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -154,7 +154,7 @@ translate="false" value="Parcel_DamageNo_Dark" /> <button - follows="top|right" + follows="top|left" height="24" image_hover_unselected="BackButton_Over" image_pressed="BackButton_Press" diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index 638e190e8f..21314703b0 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -68,83 +68,297 @@ background_visible="true" visible="false" width="315" /> <panel + follows="bottom|left|right" height="23" layout="topleft" left="4" name="button_panel" width="315"> - <button - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - left="5" - name="teleport_btn" - tool_tip="Teleport to the selected area" - top="1" - width="108" /> - <button - follows="bottom|left" - height="23" - label="Map" - layout="topleft" - left_pad="3" - name="map_btn" - tool_tip="Show the corresponding area on the World Map" - width="85" /> - <button - follows="bottom|left" - height="23" - label="Edit" - layout="topleft" - left_pad="3" - name="edit_btn" - tool_tip="Edit landmark information" - width="83" /> - <button - follows="bottom|right" - height="23" - label="▼" - layout="topleft" - name="overflow_btn" - tool_tip="Show additional options" - left_pad="3" - width="23" /> - <button - follows="bottom|left" - height="23" - label="Save" - layout="topleft" - name="save_btn" - left="5" - top_pad="-23" - width="152" /> - <button - follows="bottom|right" - height="23" - label="Cancel" - layout="topleft" - name="cancel_btn" - left_pad="3" - width="153" /> - <button - follows="bottom|right" - height="23" - label="Close" - layout="topleft" - name="close_btn" - right="-10" - top="1" - width="60" /> - <button - follows="bottom|left" - height="23" - label="Profile" - layout="topleft" - name="profile_btn" - right="-1" - tool_tip="Show place profile" - top="1" - width="111" /> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_bar_ls0" + left="4" + orientation="horizontal" + top="0" + width="315"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + mouse_opaque="false" + name="lp1" + user_resize="false" + auto_resize="true" + width="193"> + + <!--*********************** Teleport, Map buttons ***********************--> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_bar_ls1" + left="0" + orientation="horizontal" + top="0" + width="193"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + mouse_opaque="false" + name="teleport_btn_lp" + user_resize="false" + auto_resize="true" + width="109"> + <button + follows="bottom|left|right" + height="23" + label="Teleport" + layout="topleft" + left="1" + name="teleport_btn" + tool_tip="Teleport to the selected area" + top="0" + width="108" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="chat_btn_lp" + user_resize="false" + auto_resize="true" + width="86"> + <button + follows="bottom|left|right" + height="23" + label="Map" + layout="topleft" + left="1" + name="map_btn" + tool_tip="Show the corresponding area on the World Map" + top="0" + width="85" /> + </layout_panel> + </layout_stack> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="0" + mouse_opaque="false" + name="lp2" + user_resize="false" + auto_resize="true" + width="116"> + + <!--*********************** Edit, Options buttons ***********************--> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_bar_ls3" + left="0" + orientation="horizontal" + top="0" + width="120"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="0" + mouse_opaque="false" + name="edit_btn_lp" + user_resize="false" + auto_resize="true" + width="84"> + <button + follows="bottom|left|right" + height="23" + label="Edit" + layout="topleft" + left="1" + mouse_opaque="false" + name="edit_btn" + tool_tip="Edit landmark information" + top="0" + width="83" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="0" + mouse_opaque="false" + name="overflow_btn_lp" + user_resize="false" + auto_resize="true" + width="24"> + <button + follows="bottom|left|right" + height="23" + label="▼" + layout="topleft" + mouse_opaque="false" + name="overflow_btn" + tool_tip="Show additional options" + top="0" + left="1" + width="23" /> + </layout_panel> + </layout_stack> + + <!--*********************** Profile button ***********************--> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_bar_ls3" + left="0" + orientation="horizontal" + top="0" + width="120"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="profile_btn_lp" + user_resize="false" + auto_resize="true" + width="112"> + <button + follows="bottom|left|right" + height="23" + label="Profile" + layout="topleft" + mouse_opaque="false" + name="profile_btn" + left="1" + tool_tip="Show place profile" + top="0" + width="111" /> + </layout_panel> + </layout_stack> + + <!--*********************** Close button ***********************--> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_bar_close_ls3" + left="0" + orientation="horizontal" + top="0" + width="120"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="close_btn_lp" + top="0" + user_resize="false" + auto_resize="true" + width="61"> + <button + follows="bottom|left|right" + height="23" + label="Close" + layout="topleft" + mouse_opaque="false" + name="close_btn" + left="1" + top="0" + width="60" /> + </layout_panel> + </layout_stack> + + + </layout_panel> + </layout_stack> + +<!--*********************** Save, Cancel buttons ***********************--> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="bottom_bar_ls2" + left="4" + orientation="horizontal" + top="0" + width="313"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="save_btn_lp" + top="0" + user_resize="false" + auto_resize="true" + width="153"> + <button + follows="bottom|left|right" + height="23" + label="Save" + layout="topleft" + mouse_opaque="false" + name="save_btn" + left="1" + top_pad="0" + width="152"/> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="cancel_btn_lp" + top="0" + user_resize="false" + auto_resize="true" + width="154"> + <button + follows="bottom|left|right" + height="23" + label="Cancel" + layout="topleft" + mouse_opaque="false" + name="cancel_btn" + left="1" + top="0" + width="153" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml index 516457dd93..559df5bec9 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml @@ -57,6 +57,8 @@ left="10" multi_select="true" name="enabled_popups" + sort_column="0" + sort_ascending="true" width="495" /> <button enabled_control="FirstSelectedDisabledPopups" @@ -103,6 +105,8 @@ height="140" layout="topleft" left="10" + sort_column="0" + sort_ascending="true" multi_select="true" name="disabled_popups" width="495" /> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml index ba967d3e2c..31e160ec33 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml @@ -104,7 +104,7 @@ layout="topleft" left="190" name="agent" - top_pad="-17" + top_pad="-15" width="44" > <color_swatch.init_callback function="Pref.getUIColor" @@ -135,7 +135,7 @@ layout="topleft" left="360" name="im" - top_pad="-17" + top_pad="-15" width="44"> <color_swatch.init_callback function="Pref.getUIColor" @@ -166,7 +166,7 @@ layout="topleft" left="40" name="system" - top_pad="40" + top_pad="22" width="44" > <color_swatch.init_callback function="Pref.getUIColor" @@ -196,7 +196,7 @@ layout="topleft" left="190" name="script_error" - top_pad="-17" + top_pad="-15" width="44"> <color_swatch.init_callback function="Pref.getUIColor" @@ -226,7 +226,7 @@ layout="topleft" left="360" name="objects" - top_pad="-17" + top_pad="-15" width="44" > <color_swatch.init_callback function="Pref.getUIColor" @@ -256,7 +256,7 @@ layout="topleft" left="40" name="owner" - top_pad="40" + top_pad="22" width="44" > <color_swatch.init_callback function="Pref.getUIColor" @@ -286,7 +286,7 @@ layout="topleft" left="190" name="links" - top_pad="-17" + top_pad="-15" width="44" > <color_swatch.init_callback function="Pref.getUIColor" @@ -316,7 +316,7 @@ layout="topleft" left="30" name="play_typing_animation" - top_pad="40" + top_pad="32" width="400" /> <check_box enabled="false" @@ -343,7 +343,7 @@ left="30" height="20" width="170" - top_pad="20"> + top_pad="14"> Show IMs in: </text> <text @@ -386,4 +386,106 @@ top_pad="5" width="150" /> </radio_group> + <check_box + control_name="TranslateChat" + enabled="true" + height="16" + label="Use machine translation while chatting (powered by Google)" + layout="topleft" + left="30" + name="translate_chat_checkbox" + bottom_delta="40" + width="400" /> + <text + bottom_delta="30" + name="translate_language_text" + follows="left|top" + layout="topleft" + left_delta="20" + height="20" + width="110"> + Translate chat into: + </text> + <combo_box + allow_text_entry="true" + bottom_delta="3" + control_name="TranslateLanguage" + enabled="true" + follows="left|top" + height="23" + left_delta="110" + max_chars="135" + mouse_opaque="true" + name="translate_language_combobox" + width="146"> + <combo_box.item + label="System Default" + name="System Default Language" + value="default" /> + <combo_box.item + label="English" + name="English" + value="en" /> + <!-- After "System Default" and "English", please keep the rest of these combo_box.items in alphabetical order by the first character in the string. --> + <combo_box.item + label="Dansk (Danish)" + name="Danish" + value="da" /> + <combo_box.item + label="Deutsch (German)" + name="German" + value="de" /> + <combo_box.item + label="Español (Spanish)" + name="Spanish" + value="es" /> + <combo_box.item + label="Français (French)" + name="French" + value="fr" /> + <combo_box.item + label="Italiano (Italian)" + name="Italian" + value="it" /> + <combo_box.item + label="Magyar (Hungarian)" + name="Hungarian" + value="hu" /> + <combo_box.item + label="Nederlands (Dutch)" + name="Dutch" + value="nl" /> + <combo_box.item + label="Polski (Polish)" + name="Polish" + value="pl" /> + <combo_box.item + label="Português (Portuguese)" + name="Portugese" + value="pt" /> + <combo_box.item + label="Русский (Russian)" + name="Russian" + value="ru" /> + <combo_box.item + label="Türkçe (Turkish)" + name="Turkish" + value="tr" /> + <combo_box.item + label="Українська (Ukrainian)" + name="Ukrainian" + value="uk" /> + <combo_box.item + label="中文 (简体) (Chinese)" + name="Chinese" + value="zh" /> + <combo_box.item + label="日本語 (Japanese)" + name="Japanese" + value="ja" /> + <combo_box.item + label="한국어 (Korean)" + name="Korean" + value="ko" /> + </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml index a69e8d29b0..17eebffa02 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml @@ -77,7 +77,7 @@ value="pl" /> <combo_box.item enabled="true" - label="Portugués (Portuguese) - Beta" + label="Português (Portuguese) - Beta" name="Portugese" value="pt" /> <combo_box.item diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index eb9c12be4f..7de08d328b 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -290,7 +290,7 @@ control_name="RenderReflectionDetail" height="23" layout="topleft" - left_="10" + left_delta="10" top_pad ="0" name="Reflections" width="150"> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml index 2c6ceeef2e..879781f746 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml @@ -320,7 +320,19 @@ radio_style="false" width="400" top_pad="5"/> - + <check_box + top_delta="4" + enabled="true" + follows="left|top" + height="14" + initial_value="false" + control_name="MediaEnablePopups" + label="Enable media browser pop-ups" + left_delta="0" + mouse_opaque="true" + name="media_popup_enabled" + width="400" + top_pad="5"/> <check_box top_delta="4" enabled="true" diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml index 6bf00373ea..b25fd695c9 100644 --- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml @@ -33,10 +33,9 @@ mouse_opaque="false" layout="topleft" user_resize="false" /> - <panel + <layout_panel name="media_progress_indicator" mouse_opaque="false" - follows="left|right|top" height="8" layout="topleft" left="0" @@ -55,7 +54,7 @@ top="0" left="0" tool_tip="Media is Loading"/> - </panel> + </layout_panel> <layout_panel name="right_bookend_bottom" width="0" diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index e41b80baf2..78b192d4af 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel follows="all" - height="540" + height="430" label="Profile" layout="topleft" left="0" @@ -41,7 +41,7 @@ layout="topleft" left="0" top="0" - height="524" + height="400" width="317" border_size="0"> <layout_panel @@ -50,7 +50,7 @@ layout="topleft" top="0" left="0" - height="524" + height="400" width="317"> <scroll_container color="DkGray2" @@ -304,74 +304,147 @@ </panel> </scroll_container> </layout_panel> - <layout_panel - follows="bottom|left" + +</layout_stack> + + <layout_stack + name="layout_verb_buttons" + orientation="horizontal" + follows="bottom|left|right" + layout="topleft" + left="2" + top_pad="1" + height="30" + width="315" + border_size="0"> + <layout_panel + follows="bottom|left" height="30" layout="topleft" name="profile_buttons_panel" + top="0" auto_resize="false" width="317"> - <button - follows="bottom|left" - height="23" - label="Add Friend" - layout="topleft" - left="2" - mouse_opaque="false" - name="add_friend" - pad_left="1" - pad_right="1" - tool_tip="Offer friendship to the Resident" - top="5" - use_ellipses="true" - width="117" /> - <button - follows="bottom|left" - height="23" - label="IM" - layout="topleft" - name="im" - tool_tip="Open instant message session" - top="5" - left_pad="1" - width="21" /> - <button - follows="bottom|left" - height="23" - label="Call" - layout="topleft" - name="call" - tool_tip="Call this Resident" - left_pad="1" - pad_left="1" - pad_right="1" - top="5" - use_ellipses="true" - width="51" /> - <button - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - name="teleport" - tool_tip="Offer teleport" - left_pad="1" - pad_left="1" - pad_right="1" - top="5" - use_ellipses="true" - width="92" /> - <button - follows="bottom|right" - height="23" - label="▼" - layout="topleft" - name="overflow_btn" - tool_tip="Pay money to or share inventory with the Resident" - right="-1" - top="5" - width="23" /> - </layout_panel> + + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + name="bottom_bar_ls" + left="0" + orientation="horizontal" + top_pad="5" + width="317"> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + name="add_friend_btn_lp" + user_resize="false" + auto_resize="true" + width="121"> + <button + follows="bottom|left|right" + height="23" + label="Add Friend" + layout="topleft" + left="1" + mouse_opaque="false" + name="add_friend" + tool_tip="Offer friendship to the Resident" + top="0" + width="120" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="im_btn_lp" + user_resize="false" + auto_resize="true" + width="22"> + <button + follows="bottom|left|right" + height="23" + label="IM" + layout="topleft" + name="im" + tool_tip="Open instant message session" + top="0" + left="1" + width="21" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="call_btn_lp" + user_resize="false" + auto_resize="true" + width="52"> + <button + follows="bottom|left|right" + height="23" + label="Call" + layout="topleft" + name="call" + tool_tip="Call this Resident" + left="1" + top="0" + use_ellipses="true" + width="51" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="chat_btn_lp" + user_resize="false" + auto_resize="true" + width="93"> + <button + follows="bottom|left|right" + height="23" + label="Teleport" + layout="topleft" + name="teleport" + tool_tip="Offer teleport" + left="1" + top="0" + use_ellipses="true" + width="92" /> + </layout_panel> + + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + name="overflow_btn_lp" + user_resize="false" + auto_resize="false" + width="24"> + <button + follows="bottom|left|right" + height="23" + label="▼" + layout="topleft" + name="overflow_btn" + tool_tip="Pay money to or share inventory with the Resident" + left="1" + top="0" + width="23" /> + </layout_panel> + </layout_stack> + </layout_panel> <layout_panel follows="bottom|left" height="30" @@ -389,6 +462,6 @@ tool_tip="Edit your personal information" width="130" /> </layout_panel> + </layout_stack> -</layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml index d9030fc0d6..3b4d6ae58d 100644 --- a/indra/newview/skins/default/xui/en/panel_profile_view.xml +++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml @@ -17,7 +17,7 @@ Offline </string> <button - follows="top|right" + follows="top|left" height="24" image_hover_unselected="BackButton_Over" image_pressed="BackButton_Press" @@ -56,7 +56,7 @@ width="150" /> <tab_container follows="all" - height="538" + height="515" halign="center" layout="topleft" left="5" diff --git a/indra/newview/skins/default/xui/en/panel_progress.xml b/indra/newview/skins/default/xui/en/panel_progress.xml index 727c5fb7b2..2868d91cc7 100644 --- a/indra/newview/skins/default/xui/en/panel_progress.xml +++ b/indra/newview/skins/default/xui/en/panel_progress.xml @@ -34,6 +34,7 @@ height="768" layout="topleft" left="0" + orientation="vertical" name="stack2" top="0" width="640"> diff --git a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml b/indra/newview/skins/default/xui/en/panel_region_general_layout.xml deleted file mode 100644 index ffa1a257d5..0000000000 --- a/indra/newview/skins/default/xui/en/panel_region_general_layout.xml +++ /dev/null @@ -1,242 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel - border="true" - follows="top|left" - height="360" - label="Region" - layout="topleft" - left="0" - name="General" - top="360" - width="280"> - <text - follows="left|top" - font="SansSerif" - height="20" - layout="topleft" - left="10" - name="region_text_lbl" - top="10" - width="100"> - Region: - </text> - <text - follows="left|top" - font="SansSerif" - height="20" - layout="topleft" - left_delta="50" - name="region_text" - top_delta="0" - width="200"> - unknown - </text> - <text - follows="left|top" - font="SansSerif" - height="20" - layout="topleft" - left="10" - name="version_channel_text_lbl" - top="30" - width="100"> - Version: - </text> - <text - follows="left|top" - font="SansSerif" - height="20" - layout="topleft" - left_delta="50" - name="version_channel_text" - top_delta="0" - width="200"> - unknown - </text> - <text - follows="left|top" - font="SansSerif" - height="20" - layout="topleft" - left="10" - name="region_type_lbl" - top="50" - width="100"> - Type: - </text> - <text - follows="left|top" - font="SansSerif" - height="20" - layout="topleft" - left_delta="50" - name="region_type" - top_delta="0" - width="200"> - unknown - </text> - <check_box - height="20" - label="Block Terraform" - layout="topleft" - left="10" - name="block_terraform_check" - top="70" - width="80" /> - <check_box - height="20" - label="Block Fly" - layout="topleft" - left="10" - name="block_fly_check" - top="90" - width="80" /> - <check_box - height="20" - label="Allow Damage" - layout="topleft" - left="10" - name="allow_damage_check" - top="110" - width="80" /> - <check_box - height="20" - label="Restrict Pushing" - layout="topleft" - left="10" - name="restrict_pushobject" - top="130" - width="80" /> - <check_box - height="20" - label="Allow Land Resell" - layout="topleft" - left="10" - name="allow_land_resell_check" - top="160" - width="80" /> - <check_box - height="20" - label="Allow Land Join/Divide" - layout="topleft" - left="10" - name="allow_parcel_changes_check" - top="180" - width="80" /> - <check_box - height="20" - label="Block Land Show in Search" - layout="topleft" - left="10" - name="block_parcel_search_check" - tool_tip="Let people see this region and its parcels in search results" - top="200" - width="80" /> - <spinner - follows="left|top" - height="20" - increment="1" - label="Agent Limit" - label_width="97" - layout="topleft" - left="10" - max_val="100" - min_val="1" - name="agent_limit_spin" - top="240" - width="170" /> - <spinner - follows="left|top" - height="20" - increment="0.5" - label="Object Bonus" - label_width="97" - layout="topleft" - left="10" - max_val="10" - min_val="1" - name="object_bonus_spin" - top="260" - width="170" /> - <text - follows="left|top" - height="20" - label="Maturity" - layout="topleft" - left="10" - name="access_text" - top="290" - width="100"> - Rating: - </text> - <combo_box - height="20" - label="Moderate" - layout="topleft" - left_delta="100" - name="access_combo" - top_delta="0" - width="85"> - <combo_box.item - label="Adult" - name="Adult" - value="42" /> - <combo_box.item - label="Moderate" - name="Mature" - value="21" /> - <combo_box.item - label="General" - name="PG" - value="13" /> - </combo_box> - <button - enabled="false" - follows="left|top" - height="20" - label="Apply" - layout="topleft" - left="108" - name="apply_btn" - top="320" - width="100"/> - <button - follows="left|top" - height="20" - label="Teleport Home One Resident..." - layout="topleft" - left="10" - name="kick_btn" - top_pad="10" - width="250" /> - <button - follows="left|top" - height="20" - label="Teleport Home All Residents..." - layout="topleft" - left_delta="0" - name="kick_all_btn" - top_pad="3" - width="250" /> - <button - follows="left|top" - height="20" - label="Send Message To Region..." - layout="topleft" - left_delta="0" - name="im_btn" - top_pad="20" - width="200" /> - <button - follows="left|top" - height="20" - label="Manage Telehub..." - layout="topleft" - left_delta="0" - name="manage_telehub_btn" - top_pad="20" - width="150" > - <button.commit_callback - function="RegionInfo.ManageTelehub" /> - </button> -</panel> diff --git a/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml index 9dff00fa0b..c5e8bf5803 100644 --- a/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml +++ b/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml @@ -79,6 +79,8 @@ layout="topleft" left_delta="0" multi_select="true" + sort_column="0" + sort_ascending="true" name="scripts_list" top_delta="16" width="460"> diff --git a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml index 0a9c70303e..557b04d281 100644 --- a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml +++ b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml @@ -9,7 +9,7 @@ left="0" name="sidetray_tab_panel"> <text - follows="left|top" + follows="left|top|right" font="SansSerifHuge" height="16" layout="topleft" @@ -20,7 +20,32 @@ value="Side Panel" width="255" /> <button - follows="left|right|top" + follows="right|top" + height="16" + image_selected="Sidebar_Icon_Undock_Press" + image_unselected="Sidebar_Icon_Undock_Foreground" + image_disabled="Sidebar_Icon_Undock_Press" + layout="topleft" + name="undock" + top="10" + right="-28" + width="16" + tool_tip="Undock" /> + <button + follows="right|top" + height="16" + image_selected="Sidebar_Icon_Dock_Press" + image_unselected="Sidebar_Icon_Dock_Foreground" + image_disabled="Sidebar_Icon_Dock_Press" + layout="topleft" + name="dock" + top="10" + right="-28" + width="16" + tool_tip="Dock" + visible="false" /> + <button + follows="right|top" height="16" image_selected="Icon_Help_Press" image_unselected="Icon_Help_Foreground" diff --git a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml index ab3cc036d5..72b2f5e84f 100644 --- a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml +++ b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml @@ -17,15 +17,18 @@ left="10" name="stack" top_pad="10" + orientation="vertical" width="313"> <layout_panel height="550" layout="topleft" left_delta="0" name="browser_layout" + orientation="vertical" top_delta="0" width="313"> <web_browser + trusted_content="true" border_visible="false" follows="all" height="550" diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index 43513e1ab6..4ccd7b3629 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -14,14 +14,6 @@ tab_stop="false" width="1000"> <panel.string - name="StatBarDaysOfWeek"> - Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday - </panel.string> - <panel.string - name="StatBarMonthsOfYear"> - January:February:March:April:May:June:July:August:September:October:November:December - </panel.string> - <panel.string name="packet_loss_tooltip"> Packet Loss </panel.string> diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml index b48c5d1f8a..bf09836e87 100644 --- a/indra/newview/skins/default/xui/en/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history.xml @@ -171,7 +171,7 @@ top="1" width="31" /> <icon - follows="bottom|left" + follows="bottom|left|right" height="25" image_name="Toolbar_Right_Off" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml index d38ad8c5f8..c89e1dc215 100644 --- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml @@ -56,6 +56,7 @@ left_pad="5" right="-3" name="profile_btn" + tab_stop="false" tool_tip="Show item info" top="1" visible="false" diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml index 02ab0ffee5..c1c0f07304 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml @@ -65,7 +65,7 @@ width="333"> text_color="EmphasisColor" width="300" height="10" - follows="top|left" + follows="top|left|right" layout="topleft" left="35" top="3" @@ -81,14 +81,14 @@ width="333"> top="15" use_ellipses="true" width="230" - follows="top|left" + follows="top|left|right" word_wrap="false" mouse_opaque="false" name="currentlook_name"> MyOutfit With a really Long Name like MOOSE </text> <button - follows="left|top" + follows="top|right" height="28" image_overlay="Edit_Wrench" label="" @@ -99,7 +99,7 @@ width="333"> top="3" width="28" /> <loading_indicator - follows="left|top" + follows="top|right" height="24" layout="topleft" left="268" diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml index 6c9acae35e..f3c6895cee 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml @@ -31,77 +31,122 @@ height="545" width="330" /> <panel + follows="bottom|left|right" height="25" layout="topleft" name="button_panel" left="9" top_pad="-2" width="313"> - <button - enabled="true" - follows="bottom|left" - height="23" - label="Profile" - layout="topleft" - left="0" - name="info_btn" - tool_tip="Show object profile" - top="0" - width="102" /> - <button - enabled="true" - follows="bottom|left" - height="23" - label="Share" - layout="topleft" - left="105" - name="share_btn" - tool_tip="Share an inventory item" - top="0" - width="102" /> - <button - enabled="true" - follows="bottom|left" - height="23" - label="Shop" - layout="topleft" - left="210" - name="shop_btn" - tool_tip="Open Marketplace webpage" - top="0" - width="102" /> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Wear" - layout="topleft" - left="210" - name="wear_btn" - tool_tip="Wear seleceted outfit" - top="0" - width="102" /> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Play" - layout="topleft" - name="play_btn" - left="210" - top="0" - width="102" /> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Teleport" - layout="topleft" - left="210" - name="teleport_btn" - tool_tip="Teleport to the selected area" - top="0" - width="102" /> + <layout_stack + follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="button_panel_ls" + left="0" + orientation="horizontal" + top="0" + width="313"> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + mouse_opaque="false" + name="info_btn_lp" + user_resize="false" + auto_resize="true" + width="103"> + <button + enabled="true" + follows="bottom|left|right" + height="23" + label="Profile" + layout="topleft" + left="1" + name="info_btn" + tool_tip="Show object profile" + top="0" + width="102" /> + </layout_panel> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="share_btn_lp" + user_resize="false" + auto_resize="true" + width="102"> + <button + enabled="true" + follows="bottom|left|right" + height="23" + label="Share" + layout="topleft" + left="0" + name="share_btn" + tool_tip="Share an inventory item" + top="0" + width="102" /> + </layout_panel> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="3" + mouse_opaque="false" + name="shop_btn_lp" + user_resize="false" + auto_resize="true" + width="102"> + <button + enabled="true" + follows="bottom|left|right" + height="23" + label="Shop" + layout="topleft" + left="0" + name="shop_btn" + tool_tip="Open Marketplace webpage" + top="0" + width="102" /> + <button + enabled="false" + follows="bottom|left|right" + height="23" + label="Wear" + layout="topleft" + left="0" + name="wear_btn" + tool_tip="Wear seleceted outfit" + top="0" + width="102" /> + <button + enabled="false" + follows="bottom|left|right" + height="23" + label="Play" + layout="topleft" + name="play_btn" + left="0" + top="0" + width="102" /> + <button + enabled="false" + follows="bottom|left|right" + height="23" + label="Teleport" + layout="topleft" + left="0" + name="teleport_btn" + tool_tip="Teleport to the selected area" + top="0" + width="102" /> + </layout_panel> + </layout_stack> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index 49b252174c..182bc29e27 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + follows="all" height="570" layout="topleft" name="item properties" @@ -45,7 +46,7 @@ top="8" width="18" /> <button - follows="top|right" + follows="top|left" height="24" image_hover_unselected="BackButton_Over" image_pressed="BackButton_Press" @@ -69,341 +70,351 @@ value="Item Profile" width="275" /> <text - follows="top|left" + follows="top|left|right" height="13" layout="topleft" left="45" name="origin" text_color="LtGray_50" + use_ellipses="true" value="(Inventory)" - width="150" /> - <panel - follows="all" - height="493" - help_topic="" - label="" - layout="topleft" - left="9" - name="item_profile" - top="45" - width="313" - background_visible="true" - bg_alpha_color="DkGray2"> - <text - type="string" - length="1" - follows="left|top" - height="10" - layout="topleft" - left="5" - name="LabelItemNameTitle" - top="10" - width="78"> - Name: - </text> - <line_editor - border_style="line" - border_thickness="1" - follows="left|top|right" - height="20" - layout="topleft" - left_delta="78" - max_length="63" - name="LabelItemName" - top_delta="0" - width="225" /> - <text - type="string" - length="1" - follows="left|top" - height="10" - layout="topleft" - left="5" - name="LabelItemDescTitle" - top_pad="10" - width="78"> - Description: - </text> - <line_editor - border_style="line" - border_thickness="1" - follows="left|top|right" - height="23" - layout="topleft" - left_delta="78" - max_length="127" - name="LabelItemDesc" - top_delta="-5" - width="225" /> - <text - type="string" - length="1" - follows="left|top" - height="23" - layout="topleft" - left="5" - name="LabelCreatorTitle" - top_pad="10" - width="78"> - Creator: - </text> - <avatar_icon - follows="top|left" - height="20" - default_icon_name="Generic_Person" - layout="topleft" - left_pad="0" - top_delta="-6" - mouse_opaque="true" - width="20" /> - <text - type="string" - follows="left|right|top" - font="SansSerifSmall" - height="15" + width="275" /> + <scroll_container + color="DkGray2" + follows="all" layout="topleft" - left_pad="5" - name="LabelCreatorName" - top_delta="6" - width="140"> - </text> - <button - follows="top|right" - height="16" - image_selected="Inspector_I" - image_unselected="Inspector_I" - layout="topleft" - right="-5" - name="BtnCreator" - top_delta="-6" - width="16" /> - <text - type="string" - length="1" - follows="left|top" - height="23" - layout="topleft" - left="5" - name="LabelOwnerTitle" - top_pad="10" - width="78"> - Owner: - </text> - <avatar_icon - follows="top|left" - height="20" - default_icon_name="Generic_Person" - layout="topleft" - left_pad="0" - top_delta="-6" - mouse_opaque="true" - width="20" /> - <text - type="string" - follows="left|right|top" - font="SansSerifSmall" - height="15" - layout="topleft" - left_pad="5" - name="LabelOwnerName" - top_delta="6" - width="140"> - </text> - <button - follows="top|right" - height="16" - image_selected="Inspector_I" - image_unselected="Inspector_I" - layout="topleft" - right="-5" - name="BtnOwner" - top_delta="-3" - width="16" /> - <text - type="string" - length="1" - follows="left|top" - height="23" - layout="topleft" - left="5" - name="LabelAcquiredTitle" -top_pad="10" - width="78"> - Acquired: - </text> - <text - type="string" - length="1" - follows="left|top" - height="23" - layout="topleft" - left_delta="78" - name="LabelAcquiredDate" - top_delta="0" - width="222"> - </text> - <panel - border="false" - follows="left|top" + left="9" + name="item_profile_scroll" + opaque="true" + height="493" + width="313" + top="45"> + <panel + follows="left|top|right" + height="390" + help_topic="" + label="" + layout="topleft" + left="0" + name="item_profile" + top="0" + width="295"> + <text + type="string" + length="1" + follows="left|top" + height="10" + layout="topleft" + left="5" + name="LabelItemNameTitle" + top="10" + width="78"> + Name: + </text> + <line_editor + border_style="line" + border_thickness="1" + follows="left|top|right" + height="20" + layout="topleft" + left_delta="78" + max_length="63" + name="LabelItemName" + top_delta="0" + width="210" /> + <text + type="string" + length="1" + follows="left|top" + height="10" + layout="topleft" + left="5" + name="LabelItemDescTitle" + top_pad="10" + width="78"> + Description: + </text> + <line_editor + border_style="line" + border_thickness="1" + follows="left|top|right" + height="23" + layout="topleft" + left_delta="78" + max_length="127" + name="LabelItemDesc" + top_delta="-5" + width="210" /> + <text + type="string" + length="1" + follows="left|top" + height="23" + layout="topleft" + left="5" + name="LabelCreatorTitle" + top_pad="10" + width="78"> + Creator: + </text> + <avatar_icon + follows="top|left" + height="20" + default_icon_name="Generic_Person" + layout="topleft" + left_pad="0" + top_delta="-6" + mouse_opaque="true" + width="20" /> + <text + type="string" + follows="left|right|top" + font="SansSerifSmall" + height="15" layout="topleft" - mouse_opaque="false" - name="perms_inv" - left="0" - top_pad="25" - height="155" - width="313"> - <text - type="string" - length="1" - left="10" - top_pad="13" - text_color="EmphasisColor" - height="15" + left_pad="5" + name="LabelCreatorName" + top_delta="6" + width="140"> + </text> + <button + follows="top|right" + height="16" + image_selected="Inspector_I" + image_unselected="Inspector_I" + layout="topleft" + right="-5" + name="BtnCreator" + top_delta="-6" + width="16" /> + <text + type="string" + length="1" + follows="left|top" + height="23" + layout="topleft" + left="5" + name="LabelOwnerTitle" + top_pad="10" + width="78"> + Owner: + </text> + <avatar_icon + follows="top|left" + height="20" + default_icon_name="Generic_Person" + layout="topleft" + left_pad="0" + top_delta="-6" + mouse_opaque="true" + width="20" /> + <text + type="string" + follows="left|right|top" + font="SansSerifSmall" + height="15" + layout="topleft" + left_pad="5" + name="LabelOwnerName" + top_delta="6" + width="140"> + </text> + <button + follows="top|right" + height="16" + image_selected="Inspector_I" + image_unselected="Inspector_I" + layout="topleft" + right="-5" + name="BtnOwner" + top_delta="-3" + width="16" /> + <text + type="string" + length="1" + follows="left|top" + height="23" + layout="topleft" + left="5" + name="LabelAcquiredTitle" + top_pad="10" + width="78"> + Acquired: + </text> + <text + type="string" + length="1" + follows="left|top|right" + height="23" + layout="topleft" + left_delta="78" + name="LabelAcquiredDate" + top_delta="0" + width="210"> + </text> + <panel + border="false" follows="left|top|right" layout="topleft" - name="perm_modify" - width="200"> - You can: + mouse_opaque="false" + name="perms_inv" + left="0" + top_pad="25" + height="155" + width="313"> + <text + type="string" + length="1" + left="10" + top_pad="13" + text_color="EmphasisColor" + height="15" + follows="left|top|right" + layout="topleft" + name="perm_modify" + width="200"> + You can: + </text> + <check_box + height="18" + label="Modify" + layout="topleft" + left="20" + name="CheckOwnerModify" + top_pad="0" + width="90" /> + <check_box + height="18" + label="Copy" + layout="topleft" + left_pad="0" + name="CheckOwnerCopy" + width="90" /> + <check_box + height="18" + label="Transfer" + layout="topleft" + left_pad="0" + name="CheckOwnerTransfer" + width="106" /> + <text + type="string" + length="1" + follows="left|top" + height="16" + layout="topleft" + left="10" + name="AnyoneLabel" + top_pad="8" + width="100"> + Anyone: </text> - <check_box - height="18" - label="Modify" - layout="topleft" - left="20" - name="CheckOwnerModify" - top_pad="0" - width="90" /> - <check_box - height="18" - label="Copy" - layout="topleft" - left_pad="0" - name="CheckOwnerCopy" - width="90" /> - <check_box - height="18" - label="Transfer" - layout="topleft" - left_pad="0" - name="CheckOwnerTransfer" - width="106" /> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left="10" - name="AnyoneLabel" - top_pad="8" - width="100"> - Anyone: - </text> - <check_box - height="18" - label="Copy" - layout="topleft" - left_pad="0" - name="CheckEveryoneCopy" - top_delta="-2" - width="150" /> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left="10" - name="GroupLabel" - top_pad="8" - width="100"> - Group: - </text> - <check_box - height="18" - label="Share" - layout="topleft" - left_pad="0" - top_delta="-2" - name="CheckShareWithGroup" - tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions." - width="150" /> - <text - type="string" - length="1" - follows="left|top" - height="16" - layout="topleft" - left="10" - name="NextOwnerLabel" - top_pad="8" - width="200" - word_wrap="true"> - Next owner: - </text> - <check_box - height="18" - label="Modify" - layout="topleft" - left="20" - top_pad="0" - name="CheckNextOwnerModify" - width="90" /> - <check_box - height="18" - label="Copy" - layout="topleft" - left_pad="0" - name="CheckNextOwnerCopy" - width="90" /> - <check_box - height="18" - label="Transfer" - layout="topleft" - left_pad="0" - name="CheckNextOwnerTransfer" - tool_tip="Next owner can give away or resell this object" - width="106" /> - </panel> - <check_box - height="18" - label="For Sale" - layout="topleft" - left="20" - name="CheckPurchase" - top_pad="20" - width="100" /> - <combo_box - height="23" - left_pad="0" - layout="topleft" - follows="left|top" - name="combobox sale copy" - width="170"> - <combo_box.item - label="Copy" - name="Copy" - value="Copy" /> - <combo_box.item - label="Original" - name="Original" - value="Original" /> - </combo_box> - <spinner - follows="left|top" - decimal_digits="0" - increment="1" - control_name="Edit Cost" - name="Edit Cost" - label="Price: L$" - label_width="75" - left="120" - width="170" - min_val="0" - height="23" - max_val="999999999" - top_pad="10"/> - </panel> + <check_box + height="18" + label="Copy" + layout="topleft" + left_pad="0" + name="CheckEveryoneCopy" + top_delta="-2" + width="150" /> + <text + type="string" + length="1" + follows="left|top" + height="16" + layout="topleft" + left="10" + name="GroupLabel" + top_pad="8" + width="100"> + Group: + </text> + <check_box + height="18" + label="Share" + layout="topleft" + left_pad="0" + top_delta="-2" + name="CheckShareWithGroup" + tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions." + width="150" /> + <text + type="string" + length="1" + follows="left|top" + height="16" + layout="topleft" + left="10" + name="NextOwnerLabel" + top_pad="8" + width="200" + word_wrap="true"> + Next owner: + </text> + <check_box + height="18" + label="Modify" + layout="topleft" + left="20" + top_pad="0" + name="CheckNextOwnerModify" + width="90" /> + <check_box + height="18" + label="Copy" + layout="topleft" + left_pad="0" + name="CheckNextOwnerCopy" + width="90" /> + <check_box + height="18" + label="Transfer" + layout="topleft" + left_pad="0" + name="CheckNextOwnerTransfer" + tool_tip="Next owner can give away or resell this object" + width="106" /> + </panel> + <check_box + height="18" + label="For Sale" + layout="topleft" + left="20" + name="CheckPurchase" + top_pad="20" + width="100" /> + <combo_box + height="23" + left_pad="0" + layout="topleft" + follows="left|top" + name="combobox sale copy" + width="170"> + <combo_box.item + label="Copy" + name="Copy" + value="Copy" /> + <combo_box.item + label="Original" + name="Original" + value="Original" /> + </combo_box> + <spinner + follows="left|top" + decimal_digits="0" + increment="1" + control_name="Edit Cost" + name="Edit Cost" + label="Price: L$" + label_width="75" + left="120" + width="170" + min_val="0" + height="23" + max_val="999999999" + top_pad="10"/> + </panel> + </scroll_container> <panel height="30" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 4c5c84df71..2c720474ec 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -197,6 +197,7 @@ <string name="favorite">favorite</string> <string name="symbolic link">link</string> <string name="symbolic folder link">folder link</string> + <string name="mesh">mesh</string> <!-- llvoavatar. Displayed in the avatar chat bubble --> <string name="AvatarEditingAppearance">(Editing Appearance)</string> @@ -2020,6 +2021,7 @@ Clears (deletes) the media and all params from the given face. <string name="Stomach">Stomach</string> <string name="Left Pec">Left Pec</string> <string name="Right Pec">Right Pec</string> + <string name="Invalid Attachment">Invalid Attachment Point</string> <!-- Avatar age computation, see LLDateUtil::ageFromDate --> <string name="YearsMonthsOld">[AGEYEARS] [AGEMONTHS] old</string> @@ -2183,7 +2185,6 @@ Clears (deletes) the media and all params from the given face. <string name="ATTACH_HUD_BOTTOM_LEFT">HUD Bottom Left</string> <string name="ATTACH_HUD_BOTTOM">HUD Bottom</string> <string name="ATTACH_HUD_BOTTOM_RIGHT">HUD Bottom Right</string> - <string name="Bad attachment point">Invalid Attachment Point</string> <!-- script editor --> <string name="CursorPos">Line [LINE], Column [COLUMN]</string> @@ -2226,7 +2227,7 @@ Clears (deletes) the media and all params from the given face. <!-- panel picks --> <string name="NoPicksClassifiedsText">You haven't created any Picks or Classifieds. Click the Plus button below to create a Pick or Classified.</string> - <string name="NoAvatarPicksClassifiedsText">User has no picks or classfields</string> + <string name="NoAvatarPicksClassifiedsText">User has no picks or classifieds</string> <string name="PicksClassifiedsLoadingText">Loading...</string> <!-- Multi Preview Floater --> @@ -3030,7 +3031,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Ad-hoc Conference </string> <string name="conference-title-incoming"> - [AGENT_NAME] Conference + Conference with [AGENT_NAME] </string> <string name="inventory_item_offered-im"> Inventory item offered @@ -3040,6 +3041,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. </string> + <string name="no_session_message"> + (IM Session Doesn't Exist) + </string> <string name="only_user_message"> You are the only user in this session. </string> diff --git a/indra/newview/skins/default/xui/en/widgets/check_box.xml b/indra/newview/skins/default/xui/en/widgets/check_box.xml index 726ae803fe..7a60bee338 100644 --- a/indra/newview/skins/default/xui/en/widgets/check_box.xml +++ b/indra/newview/skins/default/xui/en/widgets/check_box.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<check_box text_enabled_color="LabelTextColor" - text_disabled_color="LabelDisabledColor" - font="SansSerifSmall" +<check_box font="SansSerifSmall" follows="left|top"> - <check_box.label_text name="checkbox label" /> + <check_box.label_text name="checkbox label" + text_color="LabelTextColor" + text_readonly_color="LabelDisabledColor"/> <check_box.check_button name="CheckboxCtrl Button" commit_on_return="false" label="" diff --git a/indra/newview/skins/default/xui/en/widgets/hint_popup.xml b/indra/newview/skins/default/xui/en/widgets/hint_popup.xml new file mode 100644 index 0000000000..92080df154 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/hint_popup.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<hint_popup + name="hint" + background_opaque="true" + background_visible="true" + chrome="true" + layout="topleft" + bg_opaque_image="hint_background" + distance="24" + left_arrow="hint_arrow_left" + up_arrow="hint_arrow_up" + right_arrow="hint_arrow_right" + down_arrow="hint_arrow_down" + lower_left_arrow="hint_arrow_lower_left" + left_arrow_offset="3" + up_arrow_offset="-2" + right_arrow_offset="-3" + down_arrow_offset="5" + fade_in_time="0.2" + fade_out_time="0.3"> +</hint_popup> diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml b/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml index 48bc021e6d..830ea12e41 100644 --- a/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml +++ b/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml @@ -8,18 +8,18 @@ thickness="15"> <up_button image_unselected="ScrollArrow_Up" image_selected="ScrollArrow_Up" - scale_image="true" thickness="15" + scale_image="true" hover_glow_amount="0.35"/> <down_button image_unselected="ScrollArrow_Down" image_selected="ScrollArrow_Down" - scale_image="true" thickness="15" + scale_image="true" hover_glow_amount="0.35"/> <left_button image_unselected="ScrollArrow_Left" image_selected="ScrollArrow_Left" - scale_image="true" thickness="15" + scale_image="true" hover_glow_amount="0.35"/> <right_button image_unselected="ScrollArrow_Right" image_selected="ScrollArrow_Right" - scale_image="true" thickness="15" + scale_image="true" hover_glow_amount="0.35"/> </scroll_bar> diff --git a/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml b/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml index 3878c7a144..a120b1aec8 100644 --- a/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml @@ -23,7 +23,4 @@ bg_writeable_color="TextBgWriteableColor" bg_selected_color="EmphasisColor" bg_focus_color="TextBgFocusColor"> - <simple_text_editor.border - bevel_style="in" - follows="all" /> </simple_text_editor> diff --git a/indra/newview/skins/default/xui/en/widgets/text_editor.xml b/indra/newview/skins/default/xui/en/widgets/text_editor.xml index 180120ec89..0f7f50b312 100644 --- a/indra/newview/skins/default/xui/en/widgets/text_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/text_editor.xml @@ -2,5 +2,4 @@ <!-- Core parameters are in simple_text_editor.xml --> <text_editor parse_urls="false" - text_readonly_color="LabelDisabledColor" show_context_menu="true"/> 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 c672f68c5c..92831cc21c 100644 --- a/indra/newview/skins/default/xui/es/floater_about_land.xml +++ b/indra/newview/skins/default/xui/es/floater_about_land.xml @@ -221,60 +221,60 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s <text name="Simulator primitive usage:"> Uso de primitivas: </text> - <text left="204" name="objects_available" width="250"> + <text name="objects_available"> [COUNT] de un máx. de [MAX] ([AVAILABLE] disponibles) </text> - <text name="Primitives parcel supports:" width="200"> + <text name="Primitives parcel supports:"> Prims que admite la parcela: </text> - <text left="204" name="object_contrib_text" width="152"> + <text name="object_contrib_text"> [COUNT] </text> <text name="Primitives on parcel:"> Prims en la parcela: </text> - <text left="204" name="total_objects_text" width="48"> + <text name="total_objects_text"> [COUNT] </text> - <text left="14" name="Owned by parcel owner:" width="180"> + <text name="Owned by parcel owner:"> Del propietario de la parcela: </text> - <text left="204" name="owner_objects_text" width="48"> + <text name="owner_objects_text"> [COUNT] </text> - <button label="Mostrar" label_selected="Mostrar" name="ShowOwner" right="-135" width="60"/> - <button label="Devolver" name="ReturnOwner..." right="-10" tool_tip="Devolver los objetos a sus propietarios." width="119"/> - <text left="14" name="Set to group:" width="180"> + <button label="Mostrar" label_selected="Mostrar" name="ShowOwner"/> + <button label="Devolver" name="ReturnOwner..." tool_tip="Devolver los objetos a sus propietarios."/> + <text name="Set to group:"> Del grupo: </text> - <text left="204" name="group_objects_text" width="48"> + <text name="group_objects_text"> [COUNT] </text> - <button label="Mostrar" label_selected="Mostrar" name="ShowGroup" right="-135" width="60"/> - <button label="Devolver" name="ReturnGroup..." right="-10" tool_tip="Devolver los objetos a sus propietarios." width="119"/> - <text left="14" name="Owned by others:" width="128"> + <button label="Mostrar" label_selected="Mostrar" name="ShowGroup"/> + <button label="Devolver" name="ReturnGroup..." tool_tip="Devolver los objetos a sus propietarios."/> + <text name="Owned by others:"> Propiedad de otros: </text> - <text left="204" name="other_objects_text" width="48"> + <text name="other_objects_text"> [COUNT] </text> - <button label="Mostrar" label_selected="Mostrar" name="ShowOther" right="-135" width="60"/> - <button label="Devolver" name="ReturnOther..." right="-10" tool_tip="Devolver los objetos a sus propietarios." width="119"/> - <text left="14" name="Selected / sat upon:" width="193"> + <button label="Mostrar" label_selected="Mostrar" name="ShowOther"/> + <button label="Devolver" name="ReturnOther..." tool_tip="Devolver los objetos a sus propietarios."/> + <text name="Selected / sat upon:"> Seleccionados / con gente sentada: </text> - <text left="204" name="selected_objects_text" width="48"> + <text name="selected_objects_text"> [COUNT] </text> <text name="Autoreturn"> Devolución automát. de objetos de otros (en min., 0 la desactiva): </text> - <line_editor name="clean other time" right="-20"/> - <text name="Object Owners:" width="150"> + <line_editor name="clean other time"/> + <text name="Object Owners:"> Propietarios de los objetos: </text> - <button label="Actualizar la lista" label_selected="Actualizar la lista" left="158" name="Refresh List" tool_tip="Refresh Object List"/> - <button label="Devolver los objetos" left="270" name="Return objects..." width="164"/> + <button label="Actualizar la lista" label_selected="Actualizar la lista" name="Refresh List" tool_tip="Refresh Object List"/> + <button label="Devolver los objetos" name="Return objects..."/> <name_list name="owner list"> <name_list.columns label="Tipo" name="type"/> <name_list.columns label="Nombre" name="name"/> diff --git a/indra/newview/skins/default/xui/es/floater_customize.xml b/indra/newview/skins/default/xui/es/floater_customize.xml deleted file mode 100644 index 77b670d5f0..0000000000 --- a/indra/newview/skins/default/xui/es/floater_customize.xml +++ /dev/null @@ -1,530 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="APARIENCIA"> - <tab_container name="customize tab container"> - <text label="Partes del cuerpo" name="body_parts_placeholder"> - Partes del cuerpo - </text> - <panel label="Forma" name="Shape"> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - <button label="Cuerpo" label_selected="Cuerpo" name="Body"/> - <button label="Cabeza" label_selected="Cabeza" name="Head"/> - <button label="Ojos" label_selected="Ojos" name="Eyes"/> - <button label="Orejas" label_selected="Orejas" name="Ears"/> - <button label="Nariz" label_selected="Nariz" name="Nose"/> - <button label="Boca" label_selected="Boca" name="Mouth"/> - <button label="Barbilla" label_selected="Barbilla" name="Chin"/> - <button label="Torso" label_selected="Torso" name="Torso"/> - <button label="Piernas" label_selected="Piernas" name="Legs"/> - <radio_group name="sex radio"> - <radio_item label="Mujer" name="radio" value="0"/> - <radio_item label="Varón" name="radio2" value="1"/> - </radio_group> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situada en [PATH] - </text> - <text name="not worn instructions"> - Ponte una anatomía nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <text name="no modify instructions"> - No tiene permiso para modificar este ítem. - </text> - <text name="Item Action Label"> - Forma: - </text> - <button label="Crear una forma nueva" label_selected="Crear una forma nueva" name="Create New"/> - <button label="Guardar" label_selected="Guardar" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - </panel> - <panel label="Piel" name="Skin"> - <button label="Color de piel" label_selected="Color de piel" name="Skin Color" width="115"/> - <button label="Detalles faciales" label_selected="Detalles faciales" name="Face Detail" width="115"/> - <button label="Maquillaje" label_selected="Maquillaje" name="Makeup" width="115"/> - <button label="Detalles del cuerpo" label_selected="Detalles del cuerpo" name="Body Detail" width="115"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situada en [PATH] - </text> - <text name="not worn instructions"> - Ponte una piel nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <text name="no modify instructions"> - No tiene permiso para modificar este ítem. - </text> - <text name="Item Action Label" right="107"> - Piel: - </text> - <texture_picker label="Tatuaje: cabeza" name="Head Tattoos" tool_tip="Pulse para elegir una imagen" width="90"/> - <texture_picker label="Tatuaje: superior" name="Upper Tattoos" tool_tip="Pulse para elegir una imagen" width="90"/> - <texture_picker label="Tatuaje: inferior" name="Lower Tattoos" tool_tip="Pulse para elegir una imagen" width="90"/> - <button label="Crear una piel nueva" label_selected="Crear una piel nueva" name="Create New"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Pelo" name="Hair"> - <button label="Color" label_selected="Color" name="Color"/> - <button label="Peinado" label_selected="Peinado" name="Style"/> - <button label="Cejas" label_selected="Cejas" name="Eyebrows"/> - <button label="Facial" label_selected="Facial" name="Facial"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situado en [PATH] - </text> - <text name="not worn instructions"> - Ponte un pelo nuevo arrastrándolo desde tu inventario hasta tu avatar. O bien puedes crear uno nuevo partiendo de cero. - </text> - <text name="no modify instructions"> - No tiene permiso para modificar este ítem. - </text> - <text name="Item Action Label" right="107"> - Pelo: - </text> - <texture_picker label="Textura" name="Texture" tool_tip="Pulse para elegir una imagen"/> - <button label="Crear un pelo nuevo" label_selected="Crear un pelo nuevo" name="Create New"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Ojos" name="Eyes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificables - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situados en [PATH] - </text> - <text name="not worn instructions"> - Ponte unos ojos nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero. - </text> - <text name="no modify instructions"> - No tiene permiso para modificar este ítem. - </text> - <text name="Item Action Label" right="107"> - Ojos: - </text> - <texture_picker label="Iris" name="Iris" tool_tip="Pulse para elegir una imagen"/> - <button label="Crear unos ojos nuevos" label_selected="Crear unos ojos nuevos" name="Create New"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <text label="Ropa" name="clothes_placeholder"> - Ropas - </text> - <panel label="Camisa" name="Shirt"> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarla" label_selected="Quitarla" name="Take Off"/> - <button label="Crear una falda nueva" label_selected="Crear una falda nueva" name="Create New"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situada en [PATH] - </text> - <text name="not worn instructions"> - Ponte una camisa nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <text name="no modify instructions"> - No tiene permiso para modificar este ítem. - </text> - <text name="Item Action Label" right="107"> - Camisa: - </text> - </panel> - <panel label="Pantalones" name="Pants"> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/> - <button label="Crear unos pantalones nuevos" label_selected="Crear unos pantalones nuevos" name="Create New" width="185"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificables - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situados en [PATH] - </text> - <text name="not worn instructions"> - Ponte unos pantalones nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero. - </text> - <text name="no modify instructions"> - No tiene permiso para modificar este ítem. - </text> - <text name="Item Action Label" right="107"> - Pantalones: - </text> - </panel> - <panel label="Zapatos" name="Shoes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificables - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situados en [PATH] - </text> - <text name="not worn instructions"> - Ponte unos zapatos nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero. - </text> - <button label="Crear unos zapatos nuevos" label_selected="Crear unos zapatos nuevos" name="Create New"/> - <text name="no modify instructions"> - No tiene permiso para modificar este ítem. - </text> - <text name="Item Action Label" right="107"> - Zapatos: - </text> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Calcetines" name="Socks"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificables - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situados en [PATH] - </text> - <text name="not worn instructions"> - Ponte unos calcetines nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero. - </text> - <button label="Crear unos calcetines nuevos" label_selected="Crear unos calcetines nuevos" name="Create New" width="185"/> - <text name="no modify instructions"> - No tiene permiso para modificar este ítem. - </text> - <text name="Item Action Label" right="107"> - Calcetines: - </text> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Chaqueta" name="Jacket"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situada en [PATH] - </text> - <text name="not worn instructions"> - Ponte una chaqueta nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <button label="Crear una chaqueta nueva" label_selected="Crear una chaqueta nueva" name="Create New"/> - <text name="no modify instructions"> - No tiene permiso para modificar este ítem. - </text> - <text name="Item Action Label" right="107"> - Chaqueta: - </text> - <texture_picker label="Tela superior" name="Upper Fabric" tool_tip="Pulse para elegir una imagen"/> - <texture_picker label="Tela inferior" name="Lower Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarla" label_selected="Quitarla" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Guantes" name="Gloves"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificables - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situados en [PATH] - </text> - <text name="not worn instructions"> - Ponte unos guantes nuevos arrastrándolos desde tu inventario hasta tu avatar. O bien puedes crear unos nuevos partiendo de cero. - </text> - <button label="Crear unos guantes nuevos" label_selected="Crear unos guantes nuevos" name="Create New"/> - <text name="no modify instructions"> - No tiene permiso para modificar este ítem. - </text> - <text name="Item Action Label" right="107"> - Guantes: - </text> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarlos" label_selected="Quitarlos" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Camiseta" name="Undershirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situada en [PATH] - </text> - <text name="not worn instructions"> - Ponte una camiseta nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <button label="Crear una camiseta nueva" label_selected="Crear una camiseta nueva" name="Create New"/> - <text name="no modify instructions"> - No tiene permiso para modificar este ítem. - </text> - <text name="Item Action Label" right="107"> - Camiseta: - </text> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarla" label_selected="Quitarla" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Ropa interior" name="Underpants"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situada en [PATH] - </text> - <text name="not worn instructions"> - Ponte una ropa interior nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <button label="Crear una ropa interior nueva" label_selected="Crear una ropa interior nueva" name="Create New" width="185"/> - <text name="no modify instructions"> - No tiene permiso para modificar este ítem. - </text> - <text name="Item Action Label" right="107"> - Ropa interior: - </text> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarla" label_selected="Quitarla" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Falda" name="Skirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no lleva - </text> - <text name="path"> - Situada en [PATH] - </text> - <text name="not worn instructions"> - Ponte una falda nueva arrastrándola desde tu inventario hasta tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <button label="Crear una falda nueva" label_selected="Crear una falda nueva" name="Create New"/> - <text name="no modify instructions"> - No tiene permiso para modificar este ítem. - </text> - <text name="Item Action Label" right="107"> - Falda: - </text> - <texture_picker label="Tela" name="Fabric" tool_tip="Pulse para elegir una imagen"/> - <color_swatch label="Color/Tinte" name="Color/Tint" tool_tip="Pulsa para abrir el selector de color"/> - <button label="Quitarla" label_selected="Quitarla" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - </panel> - <panel label="Tatuaje" name="Tattoo"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no puesto - </text> - <text name="path"> - Situado en [PATH] - </text> - <text name="not worn instructions"> - Pon un tatuaje nuevo arrastrándolo desde tu inventario a tu avatar. O bien puedes crear uno nuevo partiendo de cero. - </text> - <button label="Crear un tatuaje nuevo" label_selected="Crear un tatuaje nuevo" name="Create New"/> - <text name="no modify instructions"> - No tienes permiso para modificar este artículo. - </text> - <text name="Item Action Label"> - Tatuaje: - </text> - <texture_picker label="Tatuaje de la cabeza" name="Head Tattoo" tool_tip="Pulsa para elegir una imagen"/> - <texture_picker label="Tatuaje superior" name="Upper Tattoo" tool_tip="Pulsa para elegir una imagen"/> - <texture_picker label="Tatuaje inferior" name="Lower Tattoo" tool_tip="Pulsa para elegir una imagen"/> - <button label="Quitarme" label_selected="Quitarme" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Revertir" label_selected="Revertir" name="Revert"/> - </panel> - <panel label="Alfa" name="Alpha"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: no modificable - </text> - <text name="title_loading"> - [DESC]: cargando... - </text> - <text name="title_not_worn"> - [DESC]: no puesto - </text> - <text name="path"> - Situado en [PATH] - </text> - <text name="not worn instructions"> - Pon una capa Alfa nueva arrastrándola desde tu inventario a tu avatar. O bien puedes crear una nueva partiendo de cero. - </text> - <button label="Crear una capa Alfa nueva" label_selected="Crear una capa Alfa nueva" name="Create New"/> - <text name="no modify instructions"> - No tienes permiso para modificar este artículo. - </text> - <text name="Item Action Label"> - Alfa: - </text> - <texture_picker label="Alfa inferior" name="Lower Alpha" tool_tip="Pulsa para elegir una imagen"/> - <texture_picker label="Alfa superior" name="Upper Alpha" tool_tip="Pulsa para elegir una imagen"/> - <texture_picker label="Alfa de la cabeza" name="Head Alpha" tool_tip="Pulsa para elegir una imagen"/> - <texture_picker label="Alfa de los ojos" name="Eye Alpha" tool_tip="Pulsa para elegir una imagen"/> - <texture_picker label="Alfa del pelo" name="Hair Alpha" tool_tip="Pulsa para elegir una imagen"/> - <button label="Quitarme" label_selected="Quitarme" name="Take Off"/> - <button label="Guardar" label_selected="Guardar" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> - <button label="Revertir" label_selected="Revertir" name="Revert"/> - </panel> - </tab_container> - <scroll_container name="panel_container"/> - <button label="Información del script" label_selected="Información del script" name="script_info" tool_tip="Mostrar los scripts anexados a tu avatar"/> - <button label="Hacer un vestuario" label_selected="Hacer un vestuario" name="make_outfit_btn"/> - <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <button label="OK" label_selected="OK" name="Ok"/> -</floater> diff --git a/indra/newview/skins/default/xui/es/floater_device_settings.xml b/indra/newview/skins/default/xui/es/floater_device_settings.xml deleted file mode 100644 index eadf04a417..0000000000 --- a/indra/newview/skins/default/xui/es/floater_device_settings.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_device_settings" title="CONFIGURACIÓN DE LOS DISPOSITIVOS DEL CHAT DE VOZ"/> diff --git a/indra/newview/skins/default/xui/es/floater_im.xml b/indra/newview/skins/default/xui/es/floater_im.xml deleted file mode 100644 index 3850b94fd6..0000000000 --- a/indra/newview/skins/default/xui/es/floater_im.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<multi_floater name="im_floater" title="Mensaje Instantáneo"> - <string name="only_user_message"> - Eres el único Residente en esta sesión. - </string> - <string name="offline_message"> - [FIRST] [LAST] no está conectado. - </string> - <string name="invite_message"> - Pulse el botón [BUTTON NAME] para aceptar/conectar este chat de voz. - </string> - <string name="muted_message"> - Has ignorado a este Residente. Enviándole un mensaje, automáticamente dejarás de ignorarle. - </string> - <string name="generic_request_error"> - Error al hacer lo solicitado; por favor, inténtelo más tarde. - </string> - <string name="insufficient_perms_error"> - Usted no tiene permisos suficientes. - </string> - <string name="session_does_not_exist_error"> - La sesión ya acabó - </string> - <string name="no_ability_error"> - Usted no tiene esa capacidad. - </string> - <string name="not_a_mod_error"> - Usted no es un moderador de la sesión. - </string> - <string name="muted_error"> - Un moderador del grupo le ha desactivado el chat de texto. - </string> - <string name="add_session_event"> - No es posible añadir Residentes a la sesión de chat con [RECIPIENT]. - </string> - <string name="message_session_event"> - No se ha podido enviar su mensaje a la sesión de chat con [RECIPIENT]. - </string> - <string name="removed_from_group"> - Ha sido eliminado del grupo. - </string> - <string name="close_on_no_ability"> - Usted ya no tendrá más la capacidad de estar en la sesión de chat. - </string> -</multi_floater> diff --git a/indra/newview/skins/default/xui/es/floater_im_session.xml b/indra/newview/skins/default/xui/es/floater_im_session.xml index c7312e609b..3d9d17fc81 100644 --- a/indra/newview/skins/default/xui/es/floater_im_session.xml +++ b/indra/newview/skins/default/xui/es/floater_im_session.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="panel_im"> <layout_stack name="im_panels"> - <layout_panel label="Panel de control de MI" name="panel_im_control_panel"/> <layout_panel> <line_editor label="A" name="chat_editor"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/es/floater_my_friends.xml b/indra/newview/skins/default/xui/es/floater_my_friends.xml deleted file mode 100644 index 07f362560b..0000000000 --- a/indra/newview/skins/default/xui/es/floater_my_friends.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_my_friends" title="CONTACTOS"> - <tab_container name="friends_and_groups"> - <panel label="Amigos" name="friends_panel"/> - <panel label="Grupos" name="groups_panel"/> - </tab_container> -</floater> diff --git a/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml deleted file mode 100644 index 9f9902a3a0..0000000000 --- a/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title="Guardar el vestuario"> - <button label="Guardar" label_selected="Guardar" name="Save"/> - <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <text name="Save item as:"> - Guardar lo que llevo puesto -como un vestuario nuevo: - </text> - <line_editor name="name ed"> - [DESC] (nuevo) - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/es/floater_preview_classified.xml b/indra/newview/skins/default/xui/es/floater_preview_classified.xml deleted file mode 100644 index d9c9c51ba8..0000000000 --- a/indra/newview/skins/default/xui/es/floater_preview_classified.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="classified_preview" title="INFORMACIÓN DEL CLASIFICADO"> - <floater.string name="Title"> - Clasificado: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/es/floater_preview_event.xml b/indra/newview/skins/default/xui/es/floater_preview_event.xml deleted file mode 100644 index 7edd4f9e3f..0000000000 --- a/indra/newview/skins/default/xui/es/floater_preview_event.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="event_preview" title="INFORMACIÓN DEL EVENTO"> - <floater.string name="Title"> - Evento: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture_info.xml deleted file mode 100644 index f5b771c6e7..0000000000 --- a/indra/newview/skins/default/xui/es/floater_preview_gesture_info.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="ATAJO DE TECLADO PARA GESTOS"/> diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture_shortcut.xml deleted file mode 100644 index ea955f9727..0000000000 --- a/indra/newview/skins/default/xui/es/floater_preview_gesture_shortcut.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="ATAJO DE TECLADO PARA GESTOS"> - <text name="trigger_label"> - Chat : - </text> - <text name="key_label"> - Teclado: - </text> - <combo_box label="Ninguno/a" name="modifier_combo"/> - <combo_box label="Ninguno/a" name="key_combo"/> - <text name="replace_text" tool_tip="Reemplaza la/s palabra/s clave con estas palabras. Por ejemplo, si cambias la palabra clave 'hola' por 'qué tal', se cambiará en el chat 'Quería decir hola' por 'Quería decir qué tal' en cuanto realices el gesto."> - Reemplazar por: - </text> - <line_editor name="replace_editor" tool_tip="Reemplaza la/s palabra/s clave con estas palabras. Por ejemplo, si cambias la palabra clave 'hola' por 'qué tal', se cambiará en el chat 'Quería decir hola' por 'Quería decir qué tal' en cuanto realices el gesto."/> -</floater> diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture_steps.xml deleted file mode 100644 index f5b771c6e7..0000000000 --- a/indra/newview/skins/default/xui/es/floater_preview_gesture_steps.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="ATAJO DE TECLADO PARA GESTOS"/> diff --git a/indra/newview/skins/default/xui/es/floater_statistics.xml b/indra/newview/skins/default/xui/es/floater_statistics.xml deleted file mode 100644 index c9b0a76df0..0000000000 --- a/indra/newview/skins/default/xui/es/floater_statistics.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="ESTADÍSTICAS"/> diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml index 9637544f4e..bc99cfe215 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" short_title="HERRAMIENTAS DE CONSTRUCCIÓN" title="" width="288"> +<floater name="toolbox floater" short_title="HERRAMIENTAS DE CONSTRUCCIÓN" title=""> <floater.string name="status_rotate"> Arrastra las bandas de color para girar el objeto. </floater.string> diff --git a/indra/newview/skins/default/xui/es/floater_voice_controls.xml b/indra/newview/skins/default/xui/es/floater_voice_controls.xml index 51adeb4dff..6f4782417d 100644 --- a/indra/newview/skins/default/xui/es/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/es/floater_voice_controls.xml @@ -19,10 +19,12 @@ <layout_panel name="my_panel"> <text name="user_text" value="Mi avatar:"/> </layout_panel> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="Colgar" name="leave_call_btn"/> - </layout_panel> - </layout_stack> + <layout_panel name="leave_call_panel"> + <layout_stack name="voice_effect_and_leave_call_stack"> + <layout_panel name="leave_call_btn_panel"> + <button label="Colgar" name="leave_call_btn"/> + </layout_panel> + </layout_stack> + </layout_panel> </layout_stack> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml deleted file mode 100644 index bf96ed53ce..0000000000 --- a/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title=" "> - <button label="Guardar" label_selected="Guardar" name="Save"/> - <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <text name="Save item as:"> - Guardar el ítem en mi inventario como: - </text> - <line_editor name="name ed"> - Nuevo [DESC] - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/es/menu_avatar_self.xml b/indra/newview/skins/default/xui/es/menu_avatar_self.xml index d347a7d0c4..ddc0b97310 100644 --- a/indra/newview/skins/default/xui/es/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/es/menu_avatar_self.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Self Pie"> <menu_item_call label="Levantarme" name="Stand Up"/> - <context_menu label="Quitarme ▶" name="Take Off >"> - <context_menu label="Ropas ▶" name="Clothes >"> + <context_menu label="Quitarme" name="Take Off >"> + <context_menu label="Ropas" name="Clothes >"> <menu_item_call label="Camisa" name="Shirt"/> <menu_item_call label="Pantalón" name="Pants"/> <menu_item_call label="Falda" name="Skirt"/> @@ -16,8 +16,8 @@ <menu_item_call label="Alfa" name="Self Alpha"/> <menu_item_call label="Toda la ropa" name="All Clothes"/> </context_menu> - <context_menu label="HUD ▶" name="Object Detach HUD"/> - <context_menu label="Desanexar ▶" name="Object Detach"/> + <context_menu label="HUD" name="Object Detach HUD"/> + <context_menu label="Desanexar" name="Object Detach"/> <menu_item_call label="Quitarse todo" name="Detach All"/> </context_menu> <menu_item_call label="Cambiar vestuario" name="Chenge Outfit"/> diff --git a/indra/newview/skins/default/xui/es/menu_object.xml b/indra/newview/skins/default/xui/es/menu_object.xml index 060d806c55..fb83b51ecc 100644 --- a/indra/newview/skins/default/xui/es/menu_object.xml +++ b/indra/newview/skins/default/xui/es/menu_object.xml @@ -10,12 +10,12 @@ <menu_item_call label="Levantarme" name="Object Stand Up"/> <menu_item_call label="Perfil del objeto" name="Object Inspect"/> <menu_item_call label="Acercar el zoom" name="Zoom In"/> - <context_menu label="Ponerme ▶" name="Put On"> + <context_menu label="Ponerme" name="Put On"> <menu_item_call label="Ponerme" name="Wear"/> - <context_menu label="Anexar ▶" name="Object Attach"/> - <context_menu label="Anexar como HUD ▶" name="Object Attach HUD"/> + <context_menu label="Anexar" name="Object Attach"/> + <context_menu label="Anexar como HUD" name="Object Attach HUD"/> </context_menu> - <context_menu label="Quitarme ▶" name="Remove"> + <context_menu label="Quitarme" name="Remove"> <menu_item_call label="Denunciar una infracción" name="Report Abuse..."/> <menu_item_call label="Ignorar" name="Object Mute"/> <menu_item_call label="Devolver" name="Return..."/> diff --git a/indra/newview/skins/default/xui/es/menu_participant_list.xml b/indra/newview/skins/default/xui/es/menu_participant_list.xml index fd8bd05230..f6eedd1170 100644 --- a/indra/newview/skins/default/xui/es/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/es/menu_participant_list.xml @@ -11,7 +11,7 @@ <menu_item_check label="Ver los iconos de la gente" name="View Icons"/> <menu_item_check label="Ignorar la voz" name="Block/Unblock"/> <menu_item_check label="Ignorar el texto" name="MuteText"/> - <context_menu label="Opciones del moderador >" name="Moderator Options"> + <context_menu label="Opciones del moderador" name="Moderator Options"> <menu_item_check label="Permitir el chat de texto" name="AllowTextChat"/> <menu_item_call label="Ignorar a este participante" name="ModerateVoiceMuteSelected"/> <menu_item_call label="Quitar el silencio a este participante" name="ModerateVoiceUnMuteSelected"/> diff --git a/indra/newview/skins/default/xui/es/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/es/menu_wearable_list_item.xml index 5b3d7d8cb3..c207a0371d 100644 --- a/indra/newview/skins/default/xui/es/menu_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/es/menu_wearable_list_item.xml @@ -5,8 +5,8 @@ <menu_item_call label="Añadir" name="wear_add"/> <menu_item_call label="Quitarme / Quitar" name="take_off_or_detach"/> <menu_item_call label="Quitar" name="detach"/> - <context_menu label="Anexar a ▶" name="wearable_attach_to"/> - <context_menu label="Anexar al HUD ▶" name="wearable_attach_to_hud"/> + <context_menu label="Anexar a" name="wearable_attach_to"/> + <context_menu label="Anexar al HUD" name="wearable_attach_to_hud"/> <menu_item_call label="Quitarme" name="take_off"/> <menu_item_call label="Editar" name="edit"/> <menu_item_call label="Perfil del objeto" name="object_profile"/> diff --git a/indra/newview/skins/default/xui/es/panel_audio_device.xml b/indra/newview/skins/default/xui/es/panel_audio_device.xml deleted file mode 100644 index d20a0af4fb..0000000000 --- a/indra/newview/skins/default/xui/es/panel_audio_device.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="device_settings"> - <text name="Audio Devices"> - Dispositivos de sonido - </text> - <text name="Input device (microphone):"> - Dispositivo de entrada (micrófono): - </text> - <text name="Output device (speakers):"> - Dispositivo de salida (altavoces): - </text> - <text name="Input level:"> - Volumen de entrada - </text> - <text_editor name="voice_intro_text1"> - Ajuste el deslizable para controlar el volumen con el que usted le sonará a otros residentes. Para probar el volumen de entrada, basta con que hable al micrófono. - </text_editor> - <volume_slider name="mic_volume_slider" tool_tip="Cambie el volumen usando este deslizable"/> - <text name="wait_text"> - Por favor, espere - </text> - <string name="default_text"> - Por defecto - </string> -</panel> diff --git a/indra/newview/skins/default/xui/es/panel_friends.xml b/indra/newview/skins/default/xui/es/panel_friends.xml deleted file mode 100644 index e1cac7c2c3..0000000000 --- a/indra/newview/skins/default/xui/es/panel_friends.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="friends"> - <string name="Multiple"> - Varios amigos - </string> - <scroll_list name="friend_list" tool_tip="Para seleccionar a varios amigos, mantenga pulsado Ctrl o Mays. mientras les va pulsando."> - <column name="icon_online_status" tool_tip="Estado de conexión"/> - <column label="Nombre" name="friend_name" tool_tip="Nombre"/> - <column name="icon_visible_online" tool_tip="El amigo puede ver cuándo está conectado"/> - <column name="icon_visible_map" tool_tip="El amigo puede localizarle en el mapa"/> - <column name="icon_edit_mine" tool_tip="El amigo puede editar, borrar o tomar sus objetos"/> - <column name="icon_edit_theirs" tool_tip="Puede editar los objetos de este amigo"/> - </scroll_list> - <button label="MI/Llamada" name="im_btn" tool_tip="Abrir sesión de mensajes instantáneos"/> - <button label="Perfil" name="profile_btn" tool_tip="Mostrar la imagen, los grupos, y otra información"/> - <button label="Teleporte" name="offer_teleport_btn" tool_tip="Ofrecer a este amigo teleportarle hasta su posición"/> - <button label="Pagar" name="pay_btn" tool_tip="Dar dólares Linden (L$) a este amigo"/> - <button label="Quitar" name="remove_btn" tool_tip="Quitar a esta persona de su lista de amigos"/> - <button label="Añadir" name="add_btn" tool_tip="Ofrecer amistad a un Residente"/> -</panel> diff --git a/indra/newview/skins/default/xui/es/panel_groups.xml b/indra/newview/skins/default/xui/es/panel_groups.xml deleted file mode 100644 index 232de85522..0000000000 --- a/indra/newview/skins/default/xui/es/panel_groups.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?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> - <text bottom="3" name="groupcount" width="268"> - 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"/> - <button label="Información" name="Info"/> - <button label="Activar" name="Activate"/> - <button label="Abandonar" name="Leave"/> - <button label="Crear..." name="Create"/> - <button label="Buscar..." name="Search..."/> -</panel> diff --git a/indra/newview/skins/default/xui/es/panel_nearby_chat.xml b/indra/newview/skins/default/xui/es/panel_nearby_chat.xml deleted file mode 100644 index 986c109c41..0000000000 --- a/indra/newview/skins/default/xui/es/panel_nearby_chat.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<!-- All our XML is utf-8 encoded. --> -<panel name="nearby_chat"> - <panel name="chat_caption"> - <text name="sender_name"> - CHAT - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/es/panel_notes.xml b/indra/newview/skins/default/xui/es/panel_notes.xml index 8de2afa767..da98e1b15e 100644 --- a/indra/newview/skins/default/xui/es/panel_notes.xml +++ b/indra/newview/skins/default/xui/es/panel_notes.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Notas y Privacidad" name="panel_notes"> <layout_stack name="layout"> - <panel name="notes_stack"> + <layout_panel name="notes_stack"> <scroll_container name="profile_scroll"> <panel name="profile_scroll_panel"> <text name="status_message" value="Mis notas privadas:"/> @@ -11,13 +11,13 @@ <check_box label="Edite, borre o coja mis objetos" name="objects_check"/> </panel> </scroll_container> - </panel> - <panel name="notes_buttons_panel"> + </layout_panel> + <layout_panel name="notes_buttons_panel"> <button label="Añadir como amigo" name="add_friend" tool_tip="Ofrecer amistad a este Residente"/> <button label="MI" name="im" tool_tip="Abrir un mensaje instantáneo"/> <button label="Llamar" name="call" tool_tip="Llamar a este Residente"/> <button label="Mapa" name="show_on_map_btn" tool_tip="Mostrar al Residente en el mapa"/> <button label="Teleportar" name="teleport" tool_tip="Ofrecer teleporte"/> - </panel> + </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_online_status.xml b/indra/newview/skins/default/xui/es/panel_online_status.xml deleted file mode 100644 index fdc489f375..0000000000 --- a/indra/newview/skins/default/xui/es/panel_online_status.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="friend_online_status" name="friend_online_status"/> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml index fc8c908788..22f967afe6 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml @@ -56,4 +56,27 @@ <radio_item label="Varias ventanas" name="radio" value="0"/> <radio_item label="Pestañas" name="radio2" value="1"/> </radio_group> + <check_box label="Traducir Chat" name="translate_chat_checkbox" /> + <text name="translate_language_text"> + Idioma de chat: + </text> + <combo_box name="translate_language_combobox"> + <combo_box.item name="System Default Language" label="Predeterminado del sistema" /> + <combo_box.item name="English" label="English (Inglés)" /> + <combo_box.item name="Danish" label="Dansk (Danés)" /> + <combo_box.item name="German" label="Deutsch (Alemán)" /> + <combo_box.item name="Spanish" label="Español" /> + <combo_box.item name="French" label="Français (Francés)" /> + <combo_box.item name="Italian" label="Italiano" /> + <combo_box.item name="Hungarian" label="Magyar (Húngaro)" /> + <combo_box.item name="Dutch" label="Nederlands (Neerlandés)" /> + <combo_box.item name="Polish" label="Polski (Polaco)" /> + <combo_box.item name="Portugese" label="Português (Portugués)" /> + <combo_box.item name="Russian" label="Русский (Ruso)" /> + <combo_box.item name="Turkish" label="Türkçe (Turco)" /> + <combo_box.item name="Ukrainian" label="Українська (Ucraniano)" /> + <combo_box.item name="Chinese" label="中文 (简体) (Chino)" /> + <combo_box.item name="Japanese" label="日本語 (Japonés)" /> + <combo_box.item name="Korean" label="한국어 (Coreano)" /> + </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_general.xml b/indra/newview/skins/default/xui/es/panel_preferences_general.xml index ca157314aa..20109cf2c5 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_general.xml @@ -13,7 +13,7 @@ <combo_box.item label="Italiano - Beta" name="Italian"/> <combo_box.item label="Nederlands (Neerlandés) - Beta" name="Dutch"/> <combo_box.item label="Polski (Polaco) - Beta" name="Polish"/> - <combo_box.item label="Portugués (Portugués) - Beta" name="Portugese"/> + <combo_box.item label="Português (Portugués) - Beta" name="Portugese"/> <combo_box.item label="日本語 (Japonés) - Beta" name="(Japanese)"/> </combo_box> <text name="language_textbox2"> diff --git a/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml index 174922e28e..90b9e475e7 100644 --- a/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml @@ -13,9 +13,9 @@ 50 </string> <layout_stack name="progress_indicator_area"> - <panel name="media_progress_indicator"> + <layout_panel name="media_progress_indicator"> <progress_bar name="media_progress_bar" tool_tip="Los media se están cargando"/> - </panel> + </layout_panel> </layout_stack> <layout_stack name="media_controls"> <layout_panel name="back"> diff --git a/indra/newview/skins/default/xui/es/panel_region_general_layout.xml b/indra/newview/skins/default/xui/es/panel_region_general_layout.xml deleted file mode 100644 index 9ff88e2f79..0000000000 --- a/indra/newview/skins/default/xui/es/panel_region_general_layout.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Región" name="General"> - <text name="region_text_lbl"> - Región: - </text> - <text name="region_text"> - desconocida - </text> - <text name="version_channel_text_lbl"> - Versión: - </text> - <text name="version_channel_text"> - desconocida - </text> - <text name="region_type_lbl"> - Tipo: - </text> - <text name="region_type"> - desconocido - </text> - <check_box label="No permitir modificar el terreno" name="block_terraform_check"/> - <check_box label="Prohibir volar" name="block_fly_check"/> - <check_box label="Permitir el daño" name="allow_damage_check"/> - <check_box label="Impedir los 'empujones'" name="restrict_pushobject"/> - <check_box label="Permitir la reventa del terreno" name="allow_land_resell_check"/> - <check_box label="Permitir unir/dividir el terreno" name="allow_parcel_changes_check"/> - <check_box label="Bloquear el mostrar el terreno en la búsqueda" name="block_parcel_search_check" tool_tip="Permite que la gente vea esta región y sus parcelas en los resultados de la búsqueda"/> - <spinner label="Nº máximo de avatares" name="agent_limit_spin"/> - <spinner label="Plus de objetos" name="object_bonus_spin"/> - <text label="Calificación" name="access_text"> - Calificación: - </text> - <combo_box label="Moderado" name="access_combo"> - <combo_box.item label="Adulto" name="Adult"/> - <combo_box.item label="Moderado" name="Mature"/> - <combo_box.item label="General" name="PG"/> - </combo_box> - <button label="Aplicar" name="apply_btn"/> - <button label="Teleportar a su Base a un Residente..." name="kick_btn"/> - <button label="Teleportar a sus Bases a todos los Residentes..." name="kick_all_btn"/> - <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/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index 9f5f1f99e7..a6404bf14c 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -1120,6 +1120,9 @@ <string name="InvFolder Favorite"> Favoritos </string> + <string name="InvFolder favorite"> + Favoritos + </string> <string name="InvFolder Current Outfit"> Vestuario actual </string> @@ -1657,7 +1660,7 @@ Script nuevo </string> <string name="BusyModeResponseDefault"> - El Residente al que has enviado un mensaje ha solicitado que no se le moleste porque está en modo ocupado. Podrá ver tu mensaje más adelante, ya que éste aparecerá en su panel de MI. + El Residente al que has enviado un mensaje ha solicitado que no se le moleste porque está en modo ocupado. Podrá ver tu mensaje más adelante, ya que éste aparecerá en su panel de MI. </string> <string name="NoOutfits"> Todavía no tienes vestuario. Intenta con [secondlife:///app/search/all/ Buscar] @@ -3799,7 +3802,7 @@ Denuncia de infracción PM </string> <string name="LocalEstimateUSD"> - [AMOUNT] dólares estadounidenses + [AMOUNT] US$ </string> <string name="Membership"> Membresía diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml index 5263de4532..b0ef1cf8df 100644 --- a/indra/newview/skins/default/xui/fr/floater_about_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml @@ -225,55 +225,55 @@ ou divisé. <text name="Simulator primitive usage:"> Utilisation des primitives : </text> - <text left="214" name="objects_available" width="230"> + <text name="objects_available"> [COUNT] sur [MAX] ([AVAILABLE] disponibles) </text> - <text name="Primitives parcel supports:" width="200"> + <text name="Primitives parcel supports:"> Prims max. sur la parcelle : </text> - <text left="214" name="object_contrib_text" width="152"> + <text name="object_contrib_text"> [COUNT] </text> <text name="Primitives on parcel:"> Prims sur la parcelle : </text> - <text left="214" name="total_objects_text" width="48"> + <text name="total_objects_text"> [COUNT] </text> - <text left="14" name="Owned by parcel owner:" width="180"> + <text name="Owned by parcel owner:"> Appartenant au propriétaire : </text> - <text left="214" name="owner_objects_text" width="48"> + <text name="owner_objects_text"> [COUNT] </text> - <button label="Afficher" label_selected="Afficher" name="ShowOwner" right="-135" width="60"/> - <button label="Retour" label_selected="Renvoyer..." name="ReturnOwner..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/> - <text left="14" name="Set to group:" width="180"> + <button label="Afficher" label_selected="Afficher" name="ShowOwner"/> + <button label="Retour" label_selected="Renvoyer..." name="ReturnOwner..." tool_tip="Renvoyer les objets à leurs propriétaires."/> + <text name="Set to group:"> Données au groupe : </text> - <text left="214" name="group_objects_text" width="48"> + <text name="group_objects_text"> [COUNT] </text> - <button label="Afficher" label_selected="Afficher" name="ShowGroup" right="-135" width="60"/> - <button label="Retour" label_selected="Renvoyer..." name="ReturnGroup..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/> - <text left="14" name="Owned by others:" width="128"> + <button label="Afficher" label_selected="Afficher" name="ShowGroup" /> + <button label="Retour" label_selected="Renvoyer..." name="ReturnGroup..." tool_tip="Renvoyer les objets à leurs propriétaires."/> + <text name="Owned by others:"> Appartenant à d'autres : </text> - <text left="214" name="other_objects_text" width="48"> + <text name="other_objects_text"> [COUNT] </text> - <button label="Afficher" label_selected="Afficher" name="ShowOther" right="-135" width="60"/> - <button label="Retour" label_selected="Renvoyer..." name="ReturnOther..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/> - <text left="14" name="Selected / sat upon:" width="220"> + <button label="Afficher" label_selected="Afficher" name="ShowOther"/> + <button label="Retour" label_selected="Renvoyer..." name="ReturnOther..." tool_tip="Renvoyer les objets à leurs propriétaires."/> + <text name="Selected / sat upon:"> Sélectionnées/où quelqu'un est assis : </text> - <text left_delta="214" name="selected_objects_text" width="48"> + <text name="selected_objects_text"> [COUNT] </text> <text name="Autoreturn"> Renvoi automatique des objets d'autres résidents (minutes, 0 pour désactiver) : </text> - <line_editor name="clean other time" right="-6" width="36"/> + <line_editor name="clean other time"/> <text name="Object Owners:"> Propriétaires : </text> @@ -281,10 +281,9 @@ ou divisé. <button label="Renvoi des objets" label_selected="Renvoyer les objets..." name="Return objects..."/> <name_list label="Plus récents" name="owner list"> <name_list.columns label="Type" name="type"/> - <name_list.columns name="online_status"/> - <name_list.columns label="Nom" name="name" width="100"/> - <name_list.columns label="Nombre" name="count" width="100"/> - <name_list.columns label="Plus récents" name="mostrecent" width="120"/> + <name_list.columns label="Nom" name="name"/> + <name_list.columns label="Nombre" name="count"/> + <name_list.columns label="Plus récents" name="mostrecent"/> </name_list> </panel> <panel label="OPTIONS" name="land_options_panel"> @@ -343,9 +342,9 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche. Options du terrain : </text> <check_box label="Sécurisé (pas de dégâts)" name="check safe" tool_tip="Si cette option est cochée, le terrain est sécurisé et il n'y pas de risques de dommages causés par des combats. Si elle est décochée, des dommages causés par les combats peuvent avoir lieu."/> - <check_box bottom="-140" label="Pas de bousculades" left="14" name="PushRestrictCheck" tool_tip="Empêche l'utilisation de scripts causant des bousculades. Cette option est utile pour empêcher les comportements abusifs sur votre terrain."/> - <check_box bottom="-160" label="Afficher le lieu dans la recherche (30 L$/semaine)" name="ShowDirectoryCheck" tool_tip="Afficher la parcelle dans les résultats de recherche"/> - <combo_box bottom="-160" left="286" name="land category with adult" width="146"> + <check_box label="Pas de bousculades" name="PushRestrictCheck" tool_tip="Empêche l'utilisation de scripts causant des bousculades. Cette option est utile pour empêcher les comportements abusifs sur votre terrain."/> + <check_box label="Afficher le lieu dans la recherche (30 L$/semaine)" name="ShowDirectoryCheck" tool_tip="Afficher la parcelle dans les résultats de recherche"/> + <combo_box name="land category with adult"> <combo_box.item label="Toutes catégories" name="item0"/> <combo_box.item label="Appartenant aux Lindens" name="item1"/> <combo_box.item label="Adult" name="item2"/> @@ -360,7 +359,7 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche. <combo_box.item label="Shopping" name="item11"/> <combo_box.item label="Autre" name="item12"/> </combo_box> - <combo_box bottom="-160" left="286" name="land category" width="146"> + <combo_box name="land category"> <combo_box.item label="Toutes catégories" name="item0"/> <combo_box.item label="Appartenant aux Lindens" name="item1"/> <combo_box.item label="Art et Culture" name="item3"/> @@ -374,20 +373,20 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche. <combo_box.item label="Shopping" name="item11"/> <combo_box.item label="Autre" name="item12"/> </combo_box> - <check_box bottom="-180" label="Contenu Modéré" name="MatureCheck" tool_tip=""/> - <text bottom="-200" name="Snapshot:"> + <check_box label="Contenu Modéré" name="MatureCheck" tool_tip=""/> + <text name="Snapshot:"> Photo : </text> - <texture_picker bottom="-319" label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image"/> + <texture_picker label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image"/> <text name="landing_point"> Lieu d'arrivée : [LANDING] </text> <button label="Définir" label_selected="Définir" name="Set" tool_tip="Définit le point d'arrivée des visiteurs. Définit l'emplacement de votre avatar sur ce terrain."/> <button label="Annuler" label_selected="Annuler" name="Clear" tool_tip="Effacer le lieu d'arrivée"/> - <text bottom="-343" name="Teleport Routing: "> + <text name="Teleport Routing: "> Règles de téléportation : </text> - <combo_box bottom="-343" left="140" name="landing type" tool_tip="Règles de téléportation - Choisissez les règles de téléportation sur votre terrain" width="140"> + <combo_box name="landing type" tool_tip="Règles de téléportation - Choisissez les règles de téléportation sur votre terrain" width="140"> <combo_box.item label="Bloqué" name="Blocked"/> <combo_box.item label="Lieu d'arrivée fixe" name="LandingPoint"/> <combo_box.item label="Lieu d'arrivée libre" name="Anywhere"/> diff --git a/indra/newview/skins/default/xui/fr/floater_customize.xml b/indra/newview/skins/default/xui/fr/floater_customize.xml deleted file mode 100644 index ff407b25c1..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_customize.xml +++ /dev/null @@ -1,530 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="APPARENCE"> - <tab_container name="customize tab container" tab_min_width="150"> - <text label="Parties du corps" name="body_parts_placeholder"> - Parties du corps - </text> - <panel label="Silhouette" left="154" name="Shape" width="389"> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - <button label="Corps" label_selected="Corps" name="Body"/> - <button label="Tête" label_selected="Tête" name="Head"/> - <button label="Yeux" label_selected="Yeux" name="Eyes"/> - <button label="Oreilles" label_selected="Oreilles" name="Ears"/> - <button label="Nez" label_selected="Nez" name="Nose"/> - <button label="Bouche" label_selected="Bouche" name="Mouth"/> - <button label="Menton" label_selected="Menton" name="Chin"/> - <button label="Torse" label_selected="Torse" name="Torso"/> - <button label="Jambes" label_selected="Jambes" name="Legs"/> - <radio_group name="sex radio"> - <radio_item label="Femme" name="radio" value="0"/> - <radio_item label="Homme" name="radio2" value="1"/> - </radio_group> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portée - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de silhouette, faites-en glisser une de votre inventaire à votre avatar. Vous pouvez aussi en créer une nouvelle et la porter. - </text> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Silhouette : - </text> - <button label="Créer une silhouette" label_selected="Créer une silhouette" name="Create New"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - </panel> - <panel label="Peau" name="Skin"> - <button label="Couleur" label_selected="Couleur" name="Skin Color" width="84"/> - <button label="Détails visage" label_selected="Détails visage" name="Face Detail" width="84"/> - <button label="Maquillage" label_selected="Maquillage" name="Makeup" width="84"/> - <button label="Détails corps" label_selected="Détails corps" name="Body Detail" width="84"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portée - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de peau, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter. - </text> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Peau : - </text> - <texture_picker label="Tatouages tête" name="Head Tattoos" tool_tip="Cliquez pour sélectionner une image" width="78"/> - <texture_picker label="Tatouages haut" name="Upper Tattoos" tool_tip="Cliquez pour sélectionner une image" width="78"/> - <texture_picker label="Tatouages bas" name="Lower Tattoos" tool_tip="Cliquez pour sélectionner une image" width="78"/> - <button label="Créer une peau" label_selected="Créer une peau" name="Create New"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Cheveux" name="Hair"> - <button label="Couleur" label_selected="Couleur" name="Color"/> - <button label="Style" label_selected="Style" name="Style"/> - <button label="Sourcils" label_selected="Sourcils" name="Eyebrows"/> - <button label="Pilosité" label_selected="Pilosité" name="Facial"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portés - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de cheveux, faites-en glisser à partir de votre inventaire. Vous pouvez aussi en créer de nouveaux et les porter. - </text> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Cheveux : - </text> - <texture_picker label="Texture" name="Texture" tool_tip="Cliquez pour sélectionner une image"/> - <button label="Créer des cheveux" label_selected="Créer des cheveux" name="Create New"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Yeux" name="Eyes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portés - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer d'yeux, faites-en glisser une paire de votre inventaire à votre avatar. Vous pouvez aussi en créer de nouveaux et les porter. - </text> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Yeux : - </text> - <texture_picker label="Iris" name="Iris" tool_tip="Cliquez pour sélectionner une image"/> - <button label="Créer des yeux" label_selected="Créer des yeux" name="Create New"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <text label="Habits" name="clothes_placeholder"> - Habits - </text> - <panel label="Chemise" name="Shirt"> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Créer une chemise" label_selected="Créer une chemise" name="Create New"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portée - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de chemise, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter. - </text> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Chemise : - </text> - </panel> - <panel label="Pantalon" name="Pants"> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Créer un pantalon" label_selected="Créer un pantalon" name="Create New"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non porté - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de pantalon, faites-en glisser un à partir de votre inventaire. Vous pouvez aussi en créer un nouveau et le porter. - </text> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Pantalon : - </text> - </panel> - <panel label="Chaussures" name="Shoes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portées - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de chaussures, faites-en glisser une paire de votre inventaire à votre avatar. Vous pouvez aussi en créer des nouvelles et les porter. - </text> - <button label="Créer des chaussures" label_selected="Créer des chaussures" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Chaussures : - </text> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Chaussettes" name="Socks"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portées - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de chaussettes, faites-en glisser une paire à partir de votre inventaire. Vous pouvez aussi en créer des nouvelles et les porter. - </text> - <button label="Créer des chaussettes" label_selected="Créer des chaussettes" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Chaussettes : - </text> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Veste" name="Jacket"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portée - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de veste, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter. - </text> - <button label="Créer une veste" label_selected="Créer une veste" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Veste : - </text> - <texture_picker label="Tissu (dessus)" name="Upper Fabric" tool_tip="Cliquez pour sélectionner une image" width="81"/> - <texture_picker label="Tissu (dessous)" name="Lower Fabric" tool_tip="Cliquez pour sélectionner une image" width="81"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="81"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Gants" name="Gloves"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portés - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de gants, faites-en glisser une paire à partir de votre inventaire. Vous pouvez aussi en créer de nouveaux et les porter. - </text> - <button label="Créer des gants" label_selected="Créer des gants" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Gants : - </text> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Débardeur" name="Undershirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non porté - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de débardeur, faites-en glisser un à partir de votre inventaire. Vous pouvez aussi en créer un nouveau et le porter. - </text> - <button label="Créer un débardeur" label_selected="Créer un débardeur" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label"> - Débardeur : - </text> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Caleçon" name="Underpants"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non porté - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de caleçon, faites-en glisser un à partir de votre inventaire. Vous pouvez aussi en créer un nouveau et le porter. - </text> - <button label="Créer un caleçon" label_selected="Créer un caleçon" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label"> - Caleçon : - </text> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Jupe" name="Skirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non portée - </text> - <text name="path"> - Emplacement : [PATH] - </text> - <text name="not worn instructions"> - Pour changer de jupe, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter. - </text> - <button label="Créer une jupe" label_selected="Créer une jupe" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas la permission de modifier cet objet. - </text> - <text name="Item Action Label" right="92"> - Jupe : - </text> - <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> - <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Tatouage" name="Tattoo"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non porté - </text> - <text name="path"> - Dans [PATH] - </text> - <text name="not worn instructions"> - Pour changer de tatouage, faites-en glisser un de votre inventaire à votre avatar. Vous pouvez aussi en créer un nouveau et le porter. - </text> - <button label="Créer un nouveau tatouage" label_selected="Créer un nouveau tatouage" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas le droit de modifier cet objet. - </text> - <text name="Item Action Label"> - Tatouage : - </text> - <texture_picker label="Tatouage tête" name="Head Tattoo" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Tatouage haut" name="Upper Tattoo" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Tatouage bas" name="Lower Tattoo" tool_tip="Cliquez pour sélectionner une image"/> - <button label="Enlever" label_selected="Enlever" name="Take Off"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - <panel label="Alpha" name="Alpha"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: impossible de modifier - </text> - <text name="title_loading"> - [DESC]: en cours de chargement... - </text> - <text name="title_not_worn"> - [DESC]: non porté - </text> - <text name="path"> - Dans [PATH] - </text> - <text name="not worn instructions"> - Pour changer de masque alpha, faites-en glisser un de votre inventaire à votre avatar. Vous pouvez aussi en créer un nouveau et le porter. - </text> - <button label="Créer un nouvel alpha" label_selected="Créer un nouvel alpha" name="Create New"/> - <text name="no modify instructions"> - Vous n'avez pas le droit de modifier cet objet. - </text> - <text name="Item Action Label"> - Alpha : - </text> - <texture_picker label="Alpha bas" name="Lower Alpha" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Alpha haut" name="Upper Alpha" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Alpha tête" name="Head Alpha" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Alpha yeux" name="Eye Alpha" tool_tip="Cliquez pour sélectionner une image"/> - <texture_picker label="Alpha cheveux" name="Hair Alpha" tool_tip="Cliquez pour sélectionner une image"/> - <button label="Enlever" label_selected="Enlever" name="Take Off"/> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Enregistrer sous..." label_selected="Enregistrer sous..." name="Save As"/> - <button label="Rétablir" label_selected="Rétablir" name="Revert"/> - </panel> - </tab_container> - <scroll_container left="251" name="panel_container"/> - <button label="Infos scripts" label_selected="Infos scripts" name="script_info" tool_tip="Afficher les scripts attachés à votre avatar"/> - <button label="Créer tenue" label_selected="Créer une tenue..." name="make_outfit_btn"/> - <button label="Annuler" label_selected="Annuler" name="Cancel"/> - <button label="OK" label_selected="OK" name="Ok"/> -</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_device_settings.xml b/indra/newview/skins/default/xui/fr/floater_device_settings.xml deleted file mode 100644 index f5994cb604..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_device_settings.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_device_settings" title="PARAMÈTRES DU MATÉRIEL UTILISÉ POUR LE CHAT VOCAL"/> diff --git a/indra/newview/skins/default/xui/fr/floater_first_time_tip.xml b/indra/newview/skins/default/xui/fr/floater_first_time_tip.xml deleted file mode 100644 index a1c6a19e8c..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_first_time_tip.xml +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="set_name_in_the_cladd"> - <check_box label="Désactiver les astuces" name="DontShowFirstTimeTip_checkbox"/> -</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_im.xml b/indra/newview/skins/default/xui/fr/floater_im.xml deleted file mode 100644 index 15b01dbf12..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_im.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<multi_floater name="im_floater" title="Message instantané"> - <text name="only_user_message"> - Vous êtes le seul résident participant à cette session. - </text> - <text name="offline_message"> - [FIRST] [LAST] est déconnecté(e). - </text> - <string name="invite_message"> - Pour accepter ce chat vocal/vous connecter, cliquez sur le bouton [BUTTON NAME]. - </string> - <string name="muted_message"> - Vous ignorez ce résident. Si vous lui envoyez un message, il ne sera plus ignoré. - </string> - <string name="generic_request_error"> - Erreur lors de la requête, veuillez réessayer ultérieurement. - </string> - <string name="insufficient_perms_error"> - Vous n'avez pas les droits requis. - </string> - <string name="session_does_not_exist_error"> - La session a expiré - </string> - <string name="no_ability_error"> - Vous n'avez pas ce pouvoir. - </string> - <string name="not_a_mod_error"> - Vous n'êtes pas modérateur de session. - </string> - <string name="muted_error"> - Un modérateur de groupe a désactivé votre chat écrit. - </string> - <string name="add_session_event"> - Impossible d'ajouter des résidents à la session de chat avec [RECIPIENT]. - </string> - <string name="message_session_event"> - Impossible d'envoyer votre message à la session de chat avec [RECIPIENT]. - </string> - <string name="removed_from_group"> - Vous avez été supprimé du groupe. - </string> - <string name="close_on_no_ability"> - Vous ne pouvez plus participer à la session de chat. - </string> -</multi_floater> diff --git a/indra/newview/skins/default/xui/fr/floater_im_session.xml b/indra/newview/skins/default/xui/fr/floater_im_session.xml index c3df4a869c..516eb41362 100644 --- a/indra/newview/skins/default/xui/fr/floater_im_session.xml +++ b/indra/newview/skins/default/xui/fr/floater_im_session.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="panel_im"> <layout_stack name="im_panels"> - <layout_panel label="Panneau de contrôle IM" name="panel_im_control_panel"/> <layout_panel> <line_editor label="À" name="chat_editor"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/fr/floater_my_friends.xml b/indra/newview/skins/default/xui/fr/floater_my_friends.xml deleted file mode 100644 index db7c026e22..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_my_friends.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_my_friends" title="CONTACTS"> - <tab_container name="friends_and_groups"> - <panel label="Amis" name="friends_panel"/> - <panel label="Groupes" name="groups_panel"/> - </tab_container> -</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/fr/floater_outfit_save_as.xml deleted file mode 100644 index d77dfbdf82..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_outfit_save_as.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title="Enregistrer la tenue"> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Annuler" label_selected="Annuler" name="Cancel"/> - <text name="Save item as:"> - Enregistrer ce que je porte -comme une nouvelle tenue : - </text> - <line_editor name="name ed"> - [DESC] (nouv.) - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml b/indra/newview/skins/default/xui/fr/floater_preview_classified.xml deleted file mode 100644 index 23f86d88b9..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_preview_classified.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="classified_preview" title="INFOS SUR LA PETITE ANNONCE"> - <floater.string name="Title"> - Petite annonce : [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_preview_event.xml b/indra/newview/skins/default/xui/fr/floater_preview_event.xml deleted file mode 100644 index 7590c43af1..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_preview_event.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="event_preview" title="INFORMATIONS SUR LES ÉVÉNEMENTS"> - <floater.string name="Title"> - Événement : [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml deleted file mode 100644 index 4a91992f6a..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_preview_gesture_info.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="RACCOURCI DU GESTE"/> diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml deleted file mode 100644 index d866c32882..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_preview_gesture_shortcut.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="RACCOURCI DU GESTE"> - <text name="trigger_label"> - Chat : - </text> - <text name="key_label"> - Clavier : - </text> - <combo_box label="Aucun" name="modifier_combo" width="62"/> - <combo_box label="Aucun" name="key_combo" width="62"/> - <text name="replace_text" tool_tip="Remplacez le ou les mots-clés par ces mots. Par exemple, si vous remplacez le mot-clé " bonjour " par " salut ", le chat " Je voulais te dire bonjour " devient " Je voulais te dire salut " et le geste correspondant s'affiche."> - Remplacer : - </text> - <line_editor name="replace_editor" tool_tip="Remplacez le ou les mots-clés par ces mots. Par exemple, si vous remplacez le mot-clé " bonjour " par " salut ", le chat " Je voulais te dire bonjour " devient " Je voulais te dire salut " et le geste correspondant s'affiche."/> -</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml deleted file mode 100644 index 4a91992f6a..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_preview_gesture_steps.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="RACCOURCI DU GESTE"/> diff --git a/indra/newview/skins/default/xui/fr/floater_statistics.xml b/indra/newview/skins/default/xui/fr/floater_statistics.xml deleted file mode 100644 index a2e3c199ab..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_statistics.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="STATISTIQUES"/> diff --git a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml index 5c26527ed6..8397dc4263 100644 --- a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml @@ -19,10 +19,12 @@ <layout_panel name="my_panel"> <text name="user_text" value="Mon avatar :"/> </layout_panel> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="Quitter l'appel" name="leave_call_btn"/> - </layout_panel> - </layout_stack> + <layout_panel name="leave_call_panel"> + <layout_stack name="voice_effect_and_leave_call_stack"> + <layout_panel name="leave_call_btn_panel"> + <button label="Quitter l'appel" name="leave_call_btn"/> + </layout_panel> + </layout_stack> + </layout_panel> </layout_stack> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml deleted file mode 100644 index 5dda347fcf..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container"> - <button label="Enregistrer" label_selected="Enregistrer" name="Save"/> - <button label="Annuler" label_selected="Annuler" name="Cancel"/> - <text name="Save item as:"> - Enregistrer l'objet dans mon inventaire comme : - </text> - <line_editor name="name ed"> - Nouveau [DESC] - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml index 3620dc72b0..bcf2757b58 100644 --- a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Self Pie"> <menu_item_call label="Me lever" name="Stand Up"/> - <context_menu label="Enlever ▶" name="Take Off >"> - <context_menu label="Habits ▶" name="Clothes >"> + <context_menu label="Enlever" name="Take Off >"> + <context_menu label="Habits" name="Clothes >"> <menu_item_call label="Chemise" name="Shirt"/> <menu_item_call label="Pantalon" name="Pants"/> <menu_item_call label="Jupe" name="Skirt"/> @@ -16,8 +16,8 @@ <menu_item_call label="Alpha" name="Self Alpha"/> <menu_item_call label="Tous les habits" name="All Clothes"/> </context_menu> - <context_menu label="HUD ▶" name="Object Detach HUD"/> - <context_menu label="Détacher ▶" name="Object Detach"/> + <context_menu label="HUD" name="Object Detach HUD"/> + <context_menu label="Détacher" name="Object Detach"/> <menu_item_call label="Tout détacher" name="Detach All"/> </context_menu> <menu_item_call label="Changer de tenue" name="Chenge Outfit"/> diff --git a/indra/newview/skins/default/xui/fr/menu_object.xml b/indra/newview/skins/default/xui/fr/menu_object.xml index 257c44795f..f7fe0ae71f 100644 --- a/indra/newview/skins/default/xui/fr/menu_object.xml +++ b/indra/newview/skins/default/xui/fr/menu_object.xml @@ -10,12 +10,12 @@ <menu_item_call label="Me lever" name="Object Stand Up"/> <menu_item_call label="Profil de l'objet" name="Object Inspect"/> <menu_item_call label="Zoomer en avant" name="Zoom In"/> - <context_menu label="Porter ▶" name="Put On"> + <context_menu label="Porter" name="Put On"> <menu_item_call label="Porter" name="Wear"/> - <context_menu label="Attacher ▶" name="Object Attach"/> - <context_menu label="Attacher les éléments HUD ▶" name="Object Attach HUD"/> + <context_menu label="Attacher" name="Object Attach"/> + <context_menu label="Attacher les éléments HUD" name="Object Attach HUD"/> </context_menu> - <context_menu label="Supprimer ▶" name="Remove"> + <context_menu label="Supprimer" name="Remove"> <menu_item_call label="Signaler une infraction" name="Report Abuse..."/> <menu_item_call label="Ignorer" name="Object Mute"/> <menu_item_call label="Retour" name="Return..."/> diff --git a/indra/newview/skins/default/xui/fr/menu_participant_list.xml b/indra/newview/skins/default/xui/fr/menu_participant_list.xml index 63d3d39f9c..f91a30f6bb 100644 --- a/indra/newview/skins/default/xui/fr/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/fr/menu_participant_list.xml @@ -11,7 +11,7 @@ <menu_item_check label="Afficher les icônes des résidents" name="View Icons"/> <menu_item_check label="Bloquer le chat vocal" name="Block/Unblock"/> <menu_item_check label="Ignorer le texte" name="MuteText"/> - <context_menu label="Options du modérateur >" name="Moderator Options"> + <context_menu label="Options du modérateur" name="Moderator Options"> <menu_item_check label="Autoriser les chats écrits" name="AllowTextChat"/> <menu_item_call label="Ignorer ce participant" name="ModerateVoiceMuteSelected"/> <menu_item_call label="Ne plus ignorer ce participant" name="ModerateVoiceUnMuteSelected"/> diff --git a/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml index c477471a64..e2eeb39782 100644 --- a/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml @@ -5,8 +5,8 @@ <menu_item_call label="Ajouter" name="wear_add"/> <menu_item_call label="Enlever / Détacher" name="take_off_or_detach"/> <menu_item_call label="Détacher" name="detach"/> - <context_menu label="Attacher à ▶" name="wearable_attach_to"/> - <context_menu label="Attacher au HUD ▶" name="wearable_attach_to_hud"/> + <context_menu label="Attacher à" name="wearable_attach_to"/> + <context_menu label="Attacher au HUD" name="wearable_attach_to_hud"/> <menu_item_call label="Enlever" name="take_off"/> <menu_item_call label="Modifier" name="edit"/> <menu_item_call label="Profil de l'objet" name="object_profile"/> diff --git a/indra/newview/skins/default/xui/fr/panel_audio_device.xml b/indra/newview/skins/default/xui/fr/panel_audio_device.xml deleted file mode 100644 index 2caa013f54..0000000000 --- a/indra/newview/skins/default/xui/fr/panel_audio_device.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="device_settings"> - <text name="Audio Devices"> - Matériel audio - </text> - <text name="Input device (microphone):"> - Périphérique d'entrée (micro) : - </text> - <text name="Output device (speakers):" width="300"> - Périphérique de sortie (haut-parleurs) : - </text> - <text name="Input level:"> - Volume d'entrée - </text> - <text_editor name="voice_intro_text1"> - Pour que les autres résidents vous entendent plus ou moins fort, utilisez le curseur. Pour tester le volume, parlez dans le micro. - </text_editor> - <volume_slider name="mic_volume_slider" tool_tip="Réglez le volume avec ce curseur."/> - <text name="wait_text"> - Veuillez patienter - </text> - <string name="default_text"> - Défaut - </string> -</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_friends.xml b/indra/newview/skins/default/xui/fr/panel_friends.xml deleted file mode 100644 index ad9e3daf3d..0000000000 --- a/indra/newview/skins/default/xui/fr/panel_friends.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="friends"> - <string name="Multiple"> - Amis multiples - </string> - <scroll_list name="friend_list" tool_tip="Pour sélectionner plusieurs amis, cliquez en maintenant la touche Maj ou Ctrl appuyée"> - <column name="icon_online_status" tool_tip="Statut en ligne"/> - <column label="Nom" name="friend_name" tool_tip="Nom"/> - <column name="icon_visible_online" tool_tip="Votre ami voit si vous êtes connecté(e)"/> - <column name="icon_visible_map" tool_tip="Votre ami peut vous situer sur la carte"/> - <column name="icon_edit_mine" tool_tip="Votre ami peut modifier, supprimer ou prendre vos objets"/> - <column name="icon_edit_theirs" tool_tip="Vous pouvez modifier les objets de cet ami"/> - </scroll_list> - <button label="IM/Appel" name="im_btn" tool_tip="Envoyez un IM à ce résident"/> - <button label="Profil" name="profile_btn" tool_tip="Consultez le profil de ce résident (photos, groupes et autres infos)"/> - <button label="Téléporter" name="offer_teleport_btn" tool_tip="Proposez à cet ami d'être téléporté là où vous êtes"/> - <button label="Payer" name="pay_btn" tool_tip="Donnez des L$ à cet ami"/> - <button label="Supprimer" name="remove_btn" tool_tip="Supprimez ce résident de votre liste d'amis"/> - <button label="Ajouter" name="add_btn" tool_tip="Proposer à un résident de devenir votre ami"/> -</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_groups.xml b/indra/newview/skins/default/xui/fr/panel_groups.xml deleted file mode 100644 index 4cda98b9f7..0000000000 --- a/indra/newview/skins/default/xui/fr/panel_groups.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="groups"> - <scroll_list bottom="50" name="group list"/> - <text name="groupdesc"> - Le groupe actif est en gras. - </text> - <text name="groupcount" width="280"> - Vous appartenez à [COUNT] groupes ([MAX] max). - </text> - <button label="IM/Appel" name="IM" tool_tip="Ouvrir une session de messagerie instantanée"/> - <button label="Infos" name="Info"/> - <button label="Activer" name="Activate"/> - <button label="Quitter" name="Leave"/> - <button label="Créer..." name="Create"/> - <button label="Rechercher..." name="Search..."/> -</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml b/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml deleted file mode 100644 index b506a202bd..0000000000 --- a/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<!-- All our XML is utf-8 encoded. --> -<panel name="nearby_chat"> - <panel name="chat_caption"> - <text - name="sender_name" -width="170">CHAT PRÈS DE MOI</text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml b/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml index 5beb71981c..110e017050 100644 --- a/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml +++ b/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml @@ -1,15 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="notifications_panel"> <layout_stack name="stack1"> - <scroll_list name="notifications_list"> - <column label="Nom" name="name"/> - <column label="Contenu" name="content"/> - <column label="Date" name="date"/> - </scroll_list> - <scroll_list name="notification_rejects_list"> - <column label="Nom" name="name"/> - <column label="Contenu" name="content"/> - <column label="Date" name="date"/> - </scroll_list> + <layout_panel name="notifications_list_panel" > + <scroll_list name="notifications_list"> + <column label="Nom" name="name"/> + <column label="Contenu" name="content"/> + <column label="Date" name="date"/> + </scroll_list> + </layout_panel> + <layout_panel name="rejects_list_panel" > + <scroll_list name="notification_rejects_list"> + <column label="Nom" name="name"/> + <column label="Contenu" name="content"/> + <column label="Date" name="date"/> + </scroll_list> + </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_online_status.xml b/indra/newview/skins/default/xui/fr/panel_online_status.xml deleted file mode 100644 index fdc489f375..0000000000 --- a/indra/newview/skins/default/xui/fr/panel_online_status.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="friend_online_status" name="friend_online_status"/> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml index 76f3319525..ed1107f5e6 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml @@ -56,4 +56,27 @@ <radio_item label="Plusieurs fenêtres" name="radio" value="0"/> <radio_item label="Onglets" name="radio2" value="1"/> </radio_group> + <check_box label="Traduire Chat" name="translate_chat_checkbox" /> + <text name="translate_language_text"> + Langue de chat : + </text> + <combo_box name="translate_language_combobox"> + <combo_box.item name="System Default Language" label="Choix par défaut" /> + <combo_box.item name="English" label="English (Anglais)" /> + <combo_box.item name="Danish" label="Dansk (Danois)" /> + <combo_box.item name="German" label="Deutsch (Allemand)" /> + <combo_box.item name="Spanish" label="Español (Espagnol)" /> + <combo_box.item name="French" label="Français" /> + <combo_box.item name="Italian" label="Italiano (Italien)" /> + <combo_box.item name="Hungarian" label="Magyar (Hongrois)" /> + <combo_box.item name="Dutch" label="Nederlands (Néerlandais)" /> + <combo_box.item name="Polish" label="Polski (Polonais)" /> + <combo_box.item name="Portugese" label="Português (Portugais)" /> + <combo_box.item name="Russian" label="Русский (Russe)" /> + <combo_box.item name="Turkish" label="Türkçe (Turc)" /> + <combo_box.item name="Ukrainian" label="Українська (Ukrainien)" /> + <combo_box.item name="Chinese" label="中文 (简体) (Chinois)" /> + <combo_box.item name="Japanese" label="日本語 (Japonais)" /> + <combo_box.item name="Korean" label="한국어 (Coréen)" /> + </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml index 3245132972..20d5f754ce 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml @@ -13,7 +13,7 @@ <combo_box.item label="Italiano (Italien) - Bêta" name="Italian"/> <combo_box.item label="Nederlands (Néerlandais) - Bêta" name="Dutch"/> <combo_box.item label="Polski (Polonais) - Bêta" name="Polish"/> - <combo_box.item label="Portugués (Portugais) - Bêta" name="Portugese"/> + <combo_box.item label="Português (Portugais) - Bêta" name="Portugese"/> <combo_box.item label="日本語 (Japonais) - Bêta" name="(Japanese)"/> </combo_box> <text name="language_textbox2"> diff --git a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml index f6b9bdcb81..f16fcebd02 100644 --- a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml @@ -7,9 +7,9 @@ 0.2 </string> <layout_stack name="progress_indicator_area"> - <panel name="media_progress_indicator"> + <layout_panel name="media_progress_indicator"> <progress_bar name="media_progress_bar" tool_tip="Le média est en cours de chargement"/> - </panel> + </layout_panel> </layout_stack> <layout_stack name="media_controls"> <layout_panel name="back"> diff --git a/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml b/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml deleted file mode 100644 index 663ae55134..0000000000 --- a/indra/newview/skins/default/xui/fr/panel_region_general_layout.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Région" name="General"> - <text name="region_text_lbl"> - Région : - </text> - <text left_delta="56" name="region_text"> - inconnu - </text> - <text name="version_channel_text_lbl"> - Version : - </text> - <text left_delta="56" name="version_channel_text"> - inconnu - </text> - <text name="region_type_lbl"> - Type : - </text> - <text left_delta="56" name="region_type"> - inconnu - </text> - <check_box label="Interdire le terraformage" name="block_terraform_check"/> - <check_box label="Interdire le vol" name="block_fly_check"/> - <check_box label="Autoriser les dégâts" name="allow_damage_check"/> - <check_box label="Interdire les bousculades" name="restrict_pushobject"/> - <check_box label="Autoriser la revente de terrains" name="allow_land_resell_check"/> - <check_box label="Autoriser la fusion/division de terrains" name="allow_parcel_changes_check"/> - <check_box label="Interdire l'affichage du terrain dans les recherches" name="block_parcel_search_check" tool_tip="Permettre aux autres résidents de voir cette région et ses parcelles dans les résultats de recherche"/> - <spinner label="Nombre maximum d'avatars" label_width="160" name="agent_limit_spin" width="240"/> - <spinner label="Bonus objet" label_width="160" name="object_bonus_spin" width="240"/> - <text label="Accès" name="access_text"> - Catégorie : - </text> - <combo_box label="Modéré" name="access_combo"> - <combo_box.item label="Adulte" name="Adult"/> - <combo_box.item label="Modéré" name="Mature"/> - <combo_box.item label="Général" name="PG"/> - </combo_box> - <button label="Appliquer" name="apply_btn"/> - <button label="Téléporter un résident chez lui…" name="kick_btn"/> - <button label="Téléporter tous les résidents chez eux…" name="kick_all_btn"/> - <button label="Envoyer un message à la région..." name="im_btn"/> - <button label="Gérer le téléhub..." name="manage_telehub_btn"/> -</panel> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index f221e42e9a..159281f97f 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -1147,6 +1147,9 @@ <string name="InvFolder Favorite"> Favoris </string> + <string name="InvFolder favorite"> + Favoris + </string> <string name="InvFolder Current Outfit"> Tenue actuelle </string> 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 af83a38746..d6834fa70a 100644 --- a/indra/newview/skins/default/xui/it/floater_about_land.xml +++ b/indra/newview/skins/default/xui/it/floater_about_land.xml @@ -224,60 +224,60 @@ o suddivisa. <text name="Simulator primitive usage:"> Uso delle primitive: </text> - <text left="214" name="objects_available" width="230"> + <text name="objects_available"> [COUNT] dei [MAX] ([AVAILABLE] dsponibili) </text> - <text name="Primitives parcel supports:" width="200"> + <text name="Primitives parcel supports:"> Oggetti che il terreno supporta: </text> - <text left="214" name="object_contrib_text" width="152"> + <text name="object_contrib_text"> [COUNT] </text> <text name="Primitives on parcel:"> Oggetti sul terreno: </text> - <text left="214" name="total_objects_text" width="48"> + <text name="total_objects_text"> [COUNT] </text> - <text left="14" name="Owned by parcel owner:" width="180"> + <text name="Owned by parcel owner:"> Posseduti dal proprietario: </text> - <text left="214" name="owner_objects_text" width="48"> + <text name="owner_objects_text"> [COUNT] </text> - <button label="Mostra" label_selected="Mostra" name="ShowOwner" right="-135" width="60"/> - <button label="Restituisci" name="ReturnOwner..." right="-10" tool_tip="Restituisci gli oggetti ai loro proprietari." width="119"/> - <text left="14" name="Set to group:" width="180"> + <button label="Mostra" label_selected="Mostra" name="ShowOwner"/> + <button label="Restituisci" name="ReturnOwner..." tool_tip="Restituisci gli oggetti ai loro proprietari."/> + <text name="Set to group:"> Imposta al gruppo: </text> - <text left="214" name="group_objects_text" width="48"> + <text name="group_objects_text"> [COUNT] </text> - <button label="Mostra" label_selected="Mostra" name="ShowGroup" right="-135" width="60"/> - <button label="Restituisci" name="ReturnGroup..." right="-10" tool_tip="Restituisci gli oggetti ai loro proprietari." width="119"/> - <text left="14" name="Owned by others:" width="180"> + <button label="Mostra" label_selected="Mostra" name="ShowGroup"/> + <button label="Restituisci" name="ReturnGroup..." tool_tip="Restituisci gli oggetti ai loro proprietari."/> + <text name="Owned by others:"> Posseduti da altri: </text> - <text left="214" name="other_objects_text" width="48"> + <text name="other_objects_text"> [COUNT] </text> - <button label="Mostra" label_selected="Mostra" name="ShowOther" right="-135" width="60"/> - <button label="Restituisci" name="ReturnOther..." right="-10" tool_tip="Restituisci gli oggetti ai loro proprietari." width="119"/> - <text left="14" name="Selected / sat upon:" width="193"> + <button label="Mostra" label_selected="Mostra" name="ShowOther"/> + <button label="Restituisci" name="ReturnOther..." tool_tip="Restituisci gli oggetti ai loro proprietari."/> + <text name="Selected / sat upon:"> Selezionati / sui quali sei sopra: </text> - <text left="214" name="selected_objects_text" width="48"> + <text name="selected_objects_text"> [COUNT] </text> <text name="Autoreturn"> Restituzione automatica degli oggetti di altri residenti (minuti, 0 per disattivarla): </text> - <line_editor name="clean other time" right="-20"/> - <text name="Object Owners:" width="150"> + <line_editor name="clean other time"/> + <text name="Object Owners:"> Proprietari degli oggetti: </text> - <button label="Aggiorna Elenco" label_selected="Aggiorna Elenco" left="158" name="Refresh List" tool_tip="Refresh Object List"/> - <button label="Restituisci oggetti..." label_selected="Restituisci oggetti..." left="270" name="Return objects..." width="164"/> + <button label="Aggiorna Elenco" label_selected="Aggiorna Elenco" name="Refresh List" tool_tip="Refresh Object List"/> + <button label="Restituisci oggetti..." label_selected="Restituisci oggetti..." name="Return objects..."/> <name_list name="owner list"> <name_list.columns label="Tipo" name="type"/> <name_list.columns label="Nome" name="name"/> diff --git a/indra/newview/skins/default/xui/it/floater_customize.xml b/indra/newview/skins/default/xui/it/floater_customize.xml deleted file mode 100644 index 63c26b4d73..0000000000 --- a/indra/newview/skins/default/xui/it/floater_customize.xml +++ /dev/null @@ -1,530 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="ASPETTO"> - <tab_container name="customize tab container" tab_min_width="120"> - <text label="Parti del corpo" name="body_parts_placeholder"> - Parti del corpo - </text> - <panel label="Forma del corpo" left="124" name="Shape"> - <button label="Crea una nuova forma del corpo" label_selected="Crea una nuova forma del corpo" name="Create New" width="190"/> - <button label="Corpo" label_selected="Corpo" name="Body"/> - <button label="Testa" label_selected="Testa" name="Head"/> - <button label="Occhi" label_selected="Occhi" name="Eyes"/> - <button label="Orecchie" label_selected="Orecchie" name="Ears"/> - <button label="Naso" label_selected="Naso" name="Nose"/> - <button label="Bocca" label_selected="Bocca" name="Mouth"/> - <button label="Mento" label_selected="Mento" name="Chin"/> - <button label="Torso" label_selected="Torso" name="Torso"/> - <button label="Gambe" label_selected="Gambe" name="Legs"/> - <radio_group name="sex radio"> - <radio_item label="Femmina" name="radio" value="0"/> - <radio_item label="Maschio" name="radio2" value="1"/> - </radio_group> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: immodificabile - </text> - <text name="title_loading"> - [DESC]: in caricamento... - </text> - <text name="title_not_worn"> - [DESC]: non indossato - </text> - <text name="path"> - Ubicato in [PATH] - </text> - <text name="not worn instructions"> - Metti una nuova figura corporea trascinandola dal tuo inventario sul tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. - </text> - <text name="no modify instructions"> - Non hai il permesso di modificare questo indumento. - </text> - <text name="Item Action Label"> - Forma del corpo: - </text> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Salva come..." label_selected="Salva come..." name="Save As"/> - <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert"/> - </panel> - <panel label="Pelle" name="Skin"> - <button label="Colore della pelle" label_selected="Colore della pelle" name="Skin Color" width="115"/> - <button label="Dettagli della faccia" label_selected="Dettagli della faccia" name="Face Detail" width="115"/> - <button label="Trucco" label_selected="Trucco" name="Makeup" width="115"/> - <button label="Dettagli del corpo" label_selected="Dettagli del corpo" name="Body Detail" width="115"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: immodificabile - </text> - <text name="title_loading"> - [DESC]: in caricamento... - </text> - <text name="title_not_worn"> - [DESC]: non indossata - </text> - <text name="path"> - Ubicata in [PATH] - </text> - <text name="not worn instructions"> - Per mettere una nuova pelle, trascinala dal tuo inventario sul tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. - </text> - <text name="no modify instructions"> - Non hai il permesso di modificare questo indumento. - </text> - <text name="Item Action Label" right="89"> - Pelle: - </text> - <texture_picker label="Tatuaggi: testa" name="Head Tattoos" tool_tip="Clicca per scegliere un'immagine" width="96"/> - <texture_picker label="Tatuaggi: superiori" name="Upper Tattoos" tool_tip="Clicca per scegliere un'immagine" width="96"/> - <texture_picker label="Tatuaggi: inferiori" name="Lower Tattoos" tool_tip="Clicca per scegliere un'immagine" width="96"/> - <button label="Crea una nuova pelle" label_selected="Crea una nuova pelle" name="Create New"/> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Salva come..." label_selected="Salva come..." name="Save As"/> - <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert"/> - </panel> - <panel label="Capelli" name="Hair"> - <button label="Capelli" label_selected="Colore" name="Color"/> - <button label="Stile" label_selected="Stile" name="Style"/> - <button label="Sopracciglia" label_selected="Sopracciglia" name="Eyebrows"/> - <button label="Facciale" label_selected="Facciale" name="Facial"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: immodificabili - </text> - <text name="title_loading"> - [DESC]: in caricamento... - </text> - <text name="title_not_worn"> - [DESC]: non indossati - </text> - <text name="path"> - Ubicati in [PATH] - </text> - <text name="not worn instructions"> - Per cambiare capelli, trascinali dal tuo inventario sul tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. - </text> - <text name="no modify instructions"> - Non hai il permesso per modificare questo indumento. - </text> - <text name="Item Action Label" right="89"> - Capelli: - </text> - <texture_picker label="Texture" name="Texture" tool_tip="Clicca per scegliere un'immagine"/> - <button label="Crea nuovi capelli" label_selected="Crea nuovi capelli" name="Create New"/> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> - <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/> - </panel> - <panel label="Occhi" name="Eyes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: immodificabili - </text> - <text name="title_loading"> - [DESC]: in caricamento... - </text> - <text name="title_not_worn"> - [DESC]: non indossati - </text> - <text name="path"> - Ubicati in [PATH] - </text> - <text name="not worn instructions"> - Puoi cambiare gli occhi trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. - </text> - <text name="no modify instructions"> - Non hai il permesso di modificare questo indumento. - </text> - <text name="Item Action Label" right="89"> - Occhi: - </text> - <texture_picker label="Iride" name="Iris" tool_tip="Clicca per scegliere un'immagine"/> - <button label="Crea nuovi occhi" label_selected="Crea nuovi occhi" name="Create New"/> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> - <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/> - </panel> - <text label="Vestiti" name="clothes_placeholder"> - Abiti - </text> - <panel label="Camicia" name="Shirt"> - <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> - <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button label="Togli" label_selected="Togli" name="Take Off"/> - <button label="Crea una nuova camicia" label_selected="Crea una nuova camicia" name="Create New"/> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> - <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: immodificabile - </text> - <text name="title_loading"> - [DESC]: in caricamento... - </text> - <text name="title_not_worn"> - [DESC]: non indossata - </text> - <text name="path"> - Ubicata in [PATH] - </text> - <text name="not worn instructions"> - Metti una nuova camicia trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. - </text> - <text name="no modify instructions"> - Non hai il permesso di modificare questo indumento. - </text> - <text name="Item Action Label" right="89"> - Camicia: - </text> - </panel> - <panel label="Pantaloni" name="Pants"> - <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> - <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button label="Togli" label_selected="Togli" name="Take Off"/> - <button label="Crea nuovi pantaloni" label_selected="Crea nuovi pantaloni" name="Create New"/> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> - <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: immodificabile - </text> - <text name="title_loading"> - [DESC]: in caricamento... - </text> - <text name="title_not_worn"> - [DESC]: non indossato - </text> - <text name="path"> - Ubicati in [PATH] - </text> - <text name="not worn instructions"> - Metti dei nuovi pantaloni trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. - </text> - <text name="no modify instructions"> - Non hai il permesso di modificare questo indumento. - </text> - <text name="Item Action Label" right="89"> - Pantaloni: - </text> - </panel> - <panel label="Scarpe" name="Shoes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: immodificabili - </text> - <text name="title_loading"> - [DESC]: in caricamento... - </text> - <text name="title_not_worn"> - [DESC]: non indossate - </text> - <text name="path"> - Ubicate in [PATH] - </text> - <text name="not worn instructions"> - Metti delle nuove scarpe trascinandole dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. - </text> - <button label="Crea nuove scarpe" label_selected="Crea nuove scarpe" name="Create New"/> - <text name="no modify instructions"> - Non hai il permesso di modificare questo indumento. - </text> - <text name="Item Action Label" right="89"> - Scarpe: - </text> - <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> - <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button label="Togli" label_selected="Togli" name="Take Off"/> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> - <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/> - </panel> - <panel label="Calze" name="Socks"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: immodificabili - </text> - <text name="title_loading"> - [DESC]: in caricamento... - </text> - <text name="title_not_worn"> - [DESC]: non indossate - </text> - <text name="path"> - Ubicato in [PATH] - </text> - <text name="not worn instructions"> - Metti delle nuove calze trascinandole dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. - </text> - <button label="Crea nuove calze" label_selected="Crea nuove calze" name="Create New"/> - <text name="no modify instructions"> - Non hai il permesso di modificare questo indumento. - </text> - <text name="Item Action Label" right="89"> - Calze: - </text> - <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> - <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button label="Togli" label_selected="Togli" name="Take Off"/> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> - <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/> - </panel> - <panel label="Giacca" name="Jacket"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: immodificabile - </text> - <text name="title_loading"> - [DESC]: in caricamento... - </text> - <text name="title_not_worn"> - [DESC]: non indossata - </text> - <text name="path"> - Ubicata in [PATH] - </text> - <text name="not worn instructions"> - Metti una nuova giacca trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. - </text> - <button label="Crea una nuova giacca" label_selected="Crea una nuova giacca" name="Create New"/> - <text name="no modify instructions"> - Non hai il permesso di modificare questo indumento. - </text> - <text name="Item Action Label" right="89"> - Giacca: - </text> - <texture_picker label="Tessuto: superiore" name="Upper Fabric" tool_tip="Clicca per scegliere un'immagine" width="96"/> - <texture_picker label="Tessuto: inferiore" name="Lower Fabric" tool_tip="Clicca per scegliere un'immagine" width="96"/> - <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button label="Togli" label_selected="Togli" name="Take Off"/> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> - <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/> - </panel> - <panel label="Guanti" name="Gloves"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: immodificabili - </text> - <text name="title_loading"> - [DESC]: in caricamento... - </text> - <text name="title_not_worn"> - [DESC]: non indossati - </text> - <text name="path"> - Ubicati in [PATH] - </text> - <text name="not worn instructions"> - Metti dei nuovi guanti trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. - </text> - <button label="Crea nuovi guanti" label_selected="Crea nuovi guanti" name="Create New"/> - <text name="no modify instructions"> - Non hai il permesso di modificare questo indumento. - </text> - <text name="Item Action Label" right="89"> - Guanti: - </text> - <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> - <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button font="SansSerifSmall" label="Rimuovi l'indumento" label_selected="Rimuovi l'indumento" name="Take Off" width="115"/> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> - <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/> - </panel> - <panel label="Canottiera" name="Undershirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: immodificabile - </text> - <text name="title_loading"> - [DESC]: in caricamento... - </text> - <text name="title_not_worn"> - [DESC]: non indossata - </text> - <text name="path"> - Ubicata in [PATH] - </text> - <text name="not worn instructions"> - Metti una nuova maglietta intima trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. - </text> - <button label="Crea una nuova canottiera" label_selected="Crea una nuova canottiera" name="Create New"/> - <text name="no modify instructions"> - Non hai il permesso di modificare questo indumento. - </text> - <text name="Item Action Label" right="89"> - Canottiera: - </text> - <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> - <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button font="SansSerifSmall" label="Rimuovi l'indumento" label_selected="Rimuovi l'indumento" name="Take Off" width="115"/> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> - <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/> - </panel> - <panel label="Mutande" name="Underpants"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: immodificabili - </text> - <text name="title_loading"> - [DESC]: in caricamento... - </text> - <text name="title_not_worn"> - [DESC]: non indossate - </text> - <text name="path"> - Ubicato in [PATH] - </text> - <text name="not worn instructions"> - Metti dei nuovi slip trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. - </text> - <button label="Crea nuove mutande" label_selected="Crea nuove mutande" name="Create New"/> - <text name="no modify instructions"> - Non hai il permesso di modificare questo indumento. - </text> - <text name="Item Action Label" right="89"> - Mutande: - </text> - <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> - <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button font="SansSerifSmall" label="Rimuovi l'indumento" label_selected="Rimuovi l'indumento" name="Take Off" width="115"/> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> - <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/> - </panel> - <panel label="Gonna" name="Skirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: immodificabile - </text> - <text name="title_loading"> - [DESC]: in caricamento... - </text> - <text name="title_not_worn"> - [DESC]: non indossata - </text> - <text name="path"> - Ubicata in [PATH] - </text> - <text name="not worn instructions"> - Metti una nuova gonna trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. - </text> - <button label="Crea una nuova gonna" label_selected="Crea una nuova gonna" name="Create New"/> - <text name="no modify instructions"> - Non hai il permesso di modificare questo indumento. - </text> - <text name="Item Action Label" right="89"> - Gonna: - </text> - <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> - <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button font="SansSerifSmall" label="Rimuovi l'indumento" label_selected="Rimuovi l'indumento" name="Take Off" width="115"/> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> - <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert" width="120"/> - </panel> - <panel label="Tatuaggio" name="Tattoo"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: non può essere modificato - </text> - <text name="title_loading"> - [DESC]: caricamento in corso... - </text> - <text name="title_not_worn"> - [DESC]: non indossato - </text> - <text name="path"> - Collocato in [PATH] - </text> - <text name="not worn instructions"> - Metti un nuovo tatuaggio trascinandolo dal tuo inventario al avatar. Oppure, crea un nuovo tatuaggio e indossalo. - </text> - <button label="Crea un nuovo tatuaggio" label_selected="Crea un nuovo tatuaggio" name="Create New"/> - <text name="no modify instructions"> - Non hai i permessi per modificare questo capo. - </text> - <text name="Item Action Label"> - Tatuaggio: - </text> - <texture_picker label="Tatuaggio della testa" name="Head Tattoo" tool_tip="Clicca per scegliere una fotografia"/> - <texture_picker label="Tatuaggio superiore" name="Upper Tattoo" tool_tip="Clicca per scegliere una fotografia"/> - <texture_picker label="Tattuaggio inferiore" name="Lower Tattoo" tool_tip="Clicca per scegliere una fotografia"/> - <button label="Togli" label_selected="Togli" name="Take Off"/> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Salva con nome..." label_selected="Salva con nome..." name="Save As"/> - <button label="Ripristina" label_selected="Ripristina" name="Revert"/> - </panel> - <panel label="Alpha (Trasparenza)" name="Alpha"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: non può essere modificato - </text> - <text name="title_loading"> - [DESC]: caricamento in corso... - </text> - <text name="title_not_worn"> - [DESC]: non indossato - </text> - <text name="path"> - Collocato in [PATH] - </text> - <text name="not worn instructions"> - Metti una nuova alpha mask trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. - </text> - <button label="Crea nuovo Alpha" label_selected="Crea nuovo Alpha" name="Create New"/> - <text name="no modify instructions"> - Non hai i permessi per modificare questo capo. - </text> - <text name="Item Action Label"> - Alpha: - </text> - <texture_picker label="Alpha inferiore" name="Lower Alpha" tool_tip="Clicca per scegliere una fotografia"/> - <texture_picker label="Alpha superiore" name="Upper Alpha" tool_tip="Clicca per scegliere una fotografia"/> - <texture_picker label="Alpha della testa" name="Head Alpha" tool_tip="Clicca per scegliere una fotografia"/> - <texture_picker label="Alpha dell'occhio" name="Eye Alpha" tool_tip="Clicca per scegliere una fotografia"/> - <texture_picker label="Alpha dei capelli" name="Hair Alpha" tool_tip="Clicca per scegliere una fotografia"/> - <button label="Togli" label_selected="Togli" name="Take Off"/> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Salva con nome..." label_selected="Salva con nome..." name="Save As"/> - <button label="Ripristina" label_selected="Ripristina" name="Revert"/> - </panel> - </tab_container> - <scroll_container name="panel_container"/> - <button label="Informazioni script" label_selected="Informazioni script" name="script_info" tool_tip="Mostra gli script collegati al tuo avatar"/> - <button label="Crea vestiario" label_selected="Crea vestiario" name="make_outfit_btn"/> - <button label="Annulla" label_selected="Annulla" name="Cancel"/> - <button label="OK" label_selected="OK" name="Ok"/> -</floater> diff --git a/indra/newview/skins/default/xui/it/floater_device_settings.xml b/indra/newview/skins/default/xui/it/floater_device_settings.xml deleted file mode 100644 index 97aa64086d..0000000000 --- a/indra/newview/skins/default/xui/it/floater_device_settings.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_device_settings" title="OPZIONI CHAT VOCALE"/> diff --git a/indra/newview/skins/default/xui/it/floater_im.xml b/indra/newview/skins/default/xui/it/floater_im.xml deleted file mode 100644 index aa916adf2c..0000000000 --- a/indra/newview/skins/default/xui/it/floater_im.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<multi_floater name="im_floater" title=""> - <string name="only_user_message"> - Sei il solo residente presente nella sessione. - </string> - <string name="offline_message"> - [FIRST] [LAST] è offline. - </string> - <string name="invite_message"> - Clicca il tasto [BUTTON NAME] per accettare/connetterti a questa voice chat. - </string> - <string name="muted_message"> - Hai bloccato questo residente. Quando gli invii un messaggio, verrà automaticamente sbloccato. - </string> - <string name="generic_request_error"> - Errore durante la richiesta, riprova più tardi. - </string> - <string name="insufficient_perms_error"> - Non hai sufficienti permessi. - </string> - <string name="session_does_not_exist_error"> - Questa sessione non esiste più - </string> - <string name="no_ability_error"> - Non hai questa abilitazione. - </string> - <string name="not_a_mod_error"> - Non sei un moderatore. - </string> - <string name="muted_error"> - Un moderatore di gruppo ti ha disabilitato dalla chat di testo. - </string> - <string name="add_session_event"> - Impossibile aggiungere residenti alla sessione chat con [RECIPIENT]. - </string> - <string name="message_session_event"> - Impossibile inviare il messaggio nella chat con [RECIPIENT]. - </string> - <string name="removed_from_group"> - Sei stato espulso dal gruppo. - </string> - <string name="close_on_no_ability"> - Non hai più le abilitazioni per rimanere nella sessione chat. - </string> -</multi_floater> diff --git a/indra/newview/skins/default/xui/it/floater_im_session.xml b/indra/newview/skins/default/xui/it/floater_im_session.xml index 8d395ea04b..3d9d17fc81 100644 --- a/indra/newview/skins/default/xui/it/floater_im_session.xml +++ b/indra/newview/skins/default/xui/it/floater_im_session.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="panel_im"> <layout_stack name="im_panels"> - <layout_panel label="Pannello di controllo IM" name="panel_im_control_panel"/> <layout_panel> <line_editor label="A" name="chat_editor"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/it/floater_my_friends.xml b/indra/newview/skins/default/xui/it/floater_my_friends.xml deleted file mode 100644 index faeba0a6d9..0000000000 --- a/indra/newview/skins/default/xui/it/floater_my_friends.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_my_friends" title="CONTATTI"> - <tab_container name="friends_and_groups"> - <panel label="Amici" name="friends_panel"/> - <panel label="Gruppi" name="groups_panel"/> - </tab_container> -</floater> diff --git a/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml deleted file mode 100644 index dff5f33e57..0000000000 --- a/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title="Salva vestiario"> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Annulla" label_selected="Annulla" name="Cancel"/> - <text name="Save item as:"> - Salva quello che indosso -come nuovo vestiario: - </text> - <line_editor name="name ed"> - [DESC] (nuovo) - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/it/floater_preview_classified.xml b/indra/newview/skins/default/xui/it/floater_preview_classified.xml deleted file mode 100644 index c617f81f7b..0000000000 --- a/indra/newview/skins/default/xui/it/floater_preview_classified.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="classified_preview" title="INFORMAZIONI RISERVATE"> - <floater.string name="Title"> - Riservato: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/it/floater_preview_event.xml b/indra/newview/skins/default/xui/it/floater_preview_event.xml deleted file mode 100644 index 1e1653e758..0000000000 --- a/indra/newview/skins/default/xui/it/floater_preview_event.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="event_preview" title="INFORMAZIONI SULL'EVENTO"> - <floater.string name="Title"> - Evento: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml deleted file mode 100644 index d490416cc7..0000000000 --- a/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="SCORCIATOIA GESTURE"/> diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml deleted file mode 100644 index eb0bc4d868..0000000000 --- a/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="SCORCIATOIA GESTURE"> - <text name="trigger_label"> - Chat: - </text> - <text name="key_label"> - Tastiera: - </text> - <combo_box label="Nessuno" name="modifier_combo"/> - <combo_box label="Nessuno" name="key_combo"/> - <text name="replace_text" tool_tip="Sostituisci la parola chiave con queste parole. Per esempio, se si sceglie di sostituire la parola chiave 'ciao' con 'buongiorno', nella chat il testo 'Volevo dire ciao' diventerà 'Volevo dire buongiorno' e verrà attivata la gesture."> - Sostituisci: - </text> - <line_editor name="replace_editor" tool_tip="Sostituisci la parola chiave con queste parole. Per esempio, se si sceglie di sostituire la parola chiave 'ciao' con 'buongiorno', nella chat il testo 'Volevo dire ciao' diventerà 'Volevo dire buongiorno' e verrà attivata la gesture"/> -</floater> diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml deleted file mode 100644 index d490416cc7..0000000000 --- a/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="SCORCIATOIA GESTURE"/> diff --git a/indra/newview/skins/default/xui/it/floater_statistics.xml b/indra/newview/skins/default/xui/it/floater_statistics.xml deleted file mode 100644 index 00df1ff994..0000000000 --- a/indra/newview/skins/default/xui/it/floater_statistics.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="STATISTICHE"/> diff --git a/indra/newview/skins/default/xui/it/floater_voice_controls.xml b/indra/newview/skins/default/xui/it/floater_voice_controls.xml index d2fd462062..4741d8d32f 100644 --- a/indra/newview/skins/default/xui/it/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/it/floater_voice_controls.xml @@ -19,10 +19,12 @@ <layout_panel name="my_panel"> <text name="user_text" value="Il mio avatar:"/> </layout_panel> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="Abbandona chiamata" name="leave_call_btn"/> - </layout_panel> - </layout_stack> + <layout_panel name="leave_call_panel"> + <layout_stack name="voice_effect_and_leave_call_stack"> + <layout_panel name="leave_call_btn_panel"> + <button label="Abbandona chiamata" name="leave_call_btn"/> + </layout_panel> + </layout_stack> + </layout_panel> </layout_stack> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml deleted file mode 100644 index 7c3754f004..0000000000 --- a/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title=""> - <button label="Salva" label_selected="Salva" name="Save"/> - <button label="Annulla" label_selected="Annulla" name="Cancel"/> - <text name="Save item as:"> - Salva oggetto nel mio inventario come: - </text> - <line_editor name="name ed"> - Nuovo [DESC] - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/it/menu_avatar_self.xml b/indra/newview/skins/default/xui/it/menu_avatar_self.xml index 7796d41286..7d918423c3 100644 --- a/indra/newview/skins/default/xui/it/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/it/menu_avatar_self.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Self Pie"> <menu_item_call label="Alzati" name="Stand Up"/> - <context_menu label="Togli ▶" name="Take Off >"> - <context_menu label="Abiti ▶" name="Clothes >"> + <context_menu label="Togli" name="Take Off >"> + <context_menu label="Abiti" name="Clothes >"> <menu_item_call label="Camicia" name="Shirt"/> <menu_item_call label="Pantaloni" name="Pants"/> <menu_item_call label="Gonna" name="Skirt"/> @@ -16,8 +16,8 @@ <menu_item_call label="Alpha (Trasparenza)" name="Self Alpha"/> <menu_item_call label="Tutti gli abiti" name="All Clothes"/> </context_menu> - <context_menu label="HUD ▶" name="Object Detach HUD"/> - <context_menu label="Stacca ▶" name="Object Detach"/> + <context_menu label="HUD" name="Object Detach HUD"/> + <context_menu label="Stacca" name="Object Detach"/> <menu_item_call label="Stacca tutto" name="Detach All"/> </context_menu> <menu_item_call label="Cambia vestiario" name="Chenge Outfit"/> diff --git a/indra/newview/skins/default/xui/it/menu_object.xml b/indra/newview/skins/default/xui/it/menu_object.xml index 81f27ab8fa..413fcfdc8a 100644 --- a/indra/newview/skins/default/xui/it/menu_object.xml +++ b/indra/newview/skins/default/xui/it/menu_object.xml @@ -10,12 +10,12 @@ <menu_item_call label="Alzati" name="Object Stand Up"/> <menu_item_call label="Profilo dell'oggetto" name="Object Inspect"/> <menu_item_call label="Zoom avanti" name="Zoom In"/> - <context_menu label="Indossa ▶" name="Put On"> + <context_menu label="Indossa" name="Put On"> <menu_item_call label="Indossa" name="Wear"/> - <context_menu label="Attacca ▶" name="Object Attach"/> - <context_menu label="Attacca HUD ▶" name="Object Attach HUD"/> + <context_menu label="Attacca" name="Object Attach"/> + <context_menu label="Attacca HUD" name="Object Attach HUD"/> </context_menu> - <context_menu label="Togli ▶" name="Remove"> + <context_menu label="Togli" name="Remove"> <menu_item_call label="Segnala abuso" name="Report Abuse..."/> <menu_item_call label="Blocca" name="Object Mute"/> <menu_item_call label="Restituisci" name="Return..."/> diff --git a/indra/newview/skins/default/xui/it/menu_participant_list.xml b/indra/newview/skins/default/xui/it/menu_participant_list.xml index f70b886a1e..52e3c933da 100644 --- a/indra/newview/skins/default/xui/it/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/it/menu_participant_list.xml @@ -11,7 +11,7 @@ <menu_item_check label="Icone persone" name="View Icons"/> <menu_item_check label="Blocca voce" name="Block/Unblock"/> <menu_item_check label="Blocca testo" name="MuteText"/> - <context_menu label="Opzioni moderatore >" name="Moderator Options"> + <context_menu label="Opzioni moderatore " name="Moderator Options"> <menu_item_check label="Consenti chat di testo" name="AllowTextChat"/> <menu_item_call label="Disattiva audio di questo participante" name="ModerateVoiceMuteSelected"/> <menu_item_call label="Riattiva audio di questo participante" name="ModerateVoiceUnMuteSelected"/> diff --git a/indra/newview/skins/default/xui/it/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/it/menu_wearable_list_item.xml index 4848d95370..b0bd68966d 100644 --- a/indra/newview/skins/default/xui/it/menu_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/it/menu_wearable_list_item.xml @@ -5,8 +5,8 @@ <menu_item_call label="Aggiungi" name="wear_add"/> <menu_item_call label="Togli / Stacca" name="take_off_or_detach"/> <menu_item_call label="Stacca" name="detach"/> - <context_menu label="Attacca a ▶" name="wearable_attach_to"/> - <context_menu label="Attacca a HUD ▶" name="wearable_attach_to_hud"/> + <context_menu label="Attacca a" name="wearable_attach_to"/> + <context_menu label="Attacca a HUD" name="wearable_attach_to_hud"/> <menu_item_call label="Togli" name="take_off"/> <menu_item_call label="Modifica" name="edit"/> <menu_item_call label="Profilo dell'oggetto" name="object_profile"/> diff --git a/indra/newview/skins/default/xui/it/panel_audio_device.xml b/indra/newview/skins/default/xui/it/panel_audio_device.xml deleted file mode 100644 index 166db81999..0000000000 --- a/indra/newview/skins/default/xui/it/panel_audio_device.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="device_settings"> - <text name="Audio Devices"> - Periferiche audio - </text> - <text name="Input device (microphone):"> - Periferica di input (microfono): - </text> - <text name="Output device (speakers):"> - Periferica di Output (altoparlanti): - </text> - <text name="Input level:"> - Livello d'ingresso - </text> - <text_editor name="voice_intro_text1"> - Sposta il cursore per impostare il livello della tua voce per gli altri residenti. Per controllare il livello di ingresso, parla semplicemente nel microfono. - </text_editor> - <volume_slider name="mic_volume_slider" tool_tip="Cambia il volume usando il cursore"/> - <text name="wait_text"> - Attendi - </text> - <string name="default_text"> - Default - </string> -</panel> diff --git a/indra/newview/skins/default/xui/it/panel_friends.xml b/indra/newview/skins/default/xui/it/panel_friends.xml deleted file mode 100644 index cfe162a67b..0000000000 --- a/indra/newview/skins/default/xui/it/panel_friends.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="friends"> - <string name="Multiple"> - Più amici - </string> - <scroll_list name="friend_list" tool_tip="Tieni premuto shift o control mentre clicchi per selezionare più di un amico"> - <column name="icon_online_status" tool_tip="Stato Online"/> - <column label="Nome" name="friend_name" tool_tip="Nome"/> - <column name="icon_visible_online" tool_tip="Questo amico può vedere quando sei online"/> - <column name="icon_visible_map" tool_tip="Questo amico può localizzarti sulla mappa"/> - <column name="icon_edit_mine" tool_tip="Questo amico può modificare, cancellare o prendere i tuoi oggetti"/> - <column name="icon_edit_theirs" tool_tip="Puoi modificare gli oggetti di questo amico"/> - </scroll_list> - <button label="IM/Chiama" name="im_btn" tool_tip="Apri una sessione di IM - Messaggio Privato"/> - <button label="Profilo" name="profile_btn" tool_tip="Mostra foto, gruppi, ed altre informazioni"/> - <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 a un residente"/> -</panel> diff --git a/indra/newview/skins/default/xui/it/panel_groups.xml b/indra/newview/skins/default/xui/it/panel_groups.xml deleted file mode 100644 index 43fd36710e..0000000000 --- a/indra/newview/skins/default/xui/it/panel_groups.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?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> - <text bottom="3" name="groupcount" width="268"> - Appartieni a [COUNT] gruppo/i (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"/> - <button label="Attiva" name="Activate"/> - <button label="Abbandona" name="Leave"/> - <button label="Crea..." name="Create"/> - <button label="Cerca..." name="Search..."/> -</panel> diff --git a/indra/newview/skins/default/xui/it/panel_nearby_chat.xml b/indra/newview/skins/default/xui/it/panel_nearby_chat.xml deleted file mode 100644 index 7ffe972181..0000000000 --- a/indra/newview/skins/default/xui/it/panel_nearby_chat.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<!-- All our XML is utf-8 encoded. --> -<panel name="nearby_chat"> - <panel name="chat_caption"> - <text name="sender_name"> - CHAT NEI DINTORNI - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/it/panel_notes.xml b/indra/newview/skins/default/xui/it/panel_notes.xml index 9ce6b47a32..945bff1603 100644 --- a/indra/newview/skins/default/xui/it/panel_notes.xml +++ b/indra/newview/skins/default/xui/it/panel_notes.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Note e Privacy" name="panel_notes"> <layout_stack name="layout"> - <panel name="notes_stack"> + <layout_panel name="notes_stack"> <scroll_container name="profile_scroll"> <panel name="profile_scroll_panel"> <text name="status_message" value="Le mie note private:"/> @@ -11,13 +11,13 @@ <check_box label="Modificare, eliminare o prendere i miei oggetti" name="objects_check"/> </panel> </scroll_container> - </panel> - <panel name="notes_buttons_panel"> + </layout_panel> + <layout_panel name="notes_buttons_panel"> <button label="Aggiungi amico" name="add_friend" tool_tip="Offri amicizia a questo residente"/> <button label="IM" name="im" tool_tip="Apri una sessione messaggio istantaneo"/> <button label="Chiama" name="call" tool_tip="Chiama questo residente"/> <button label="Mappa" name="show_on_map_btn" tool_tip="Mostra il residente sulla mappa"/> <button label="Teleport" name="teleport" tool_tip="Offri teleport"/> - </panel> + </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_online_status.xml b/indra/newview/skins/default/xui/it/panel_online_status.xml deleted file mode 100644 index fdc489f375..0000000000 --- a/indra/newview/skins/default/xui/it/panel_online_status.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="friend_online_status" name="friend_online_status"/> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml index fb8ddf607d..d28ed41698 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml @@ -56,4 +56,27 @@ <radio_item label="Finestre separate" name="radio" value="0"/> <radio_item label="Schede" name="radio2" value="1"/> </radio_group> + <check_box label="Traduci Chat" name="translate_chat_checkbox" /> + <text name="translate_language_text" width="110"> + Chat Lingua: + </text> + <combo_box name="translate_language_combobox" width="146"> + <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)" /> + <combo_box.item name="German" label="Deutsch (Tedesco)" /> + <combo_box.item name="Spanish" label="Español (Spagnolo)" /> + <combo_box.item name="French" label="Français (Francese)" /> + <combo_box.item name="Italian" label="Italiano" /> + <combo_box.item name="Hungarian" label="Magyar (Ungherese)" /> + <combo_box.item name="Dutch" label="Nederlands (Olandese)" /> + <combo_box.item name="Polish" label="Polski (Polacco)" /> + <combo_box.item name="Portugese" label="Português (Portoghese)" /> + <combo_box.item name="Russian" label="Русский (Russo)" /> + <combo_box.item name="Turkish" label="Türkçe (Turco)" /> + <combo_box.item name="Ukrainian" label="Українська (Ukraino)" /> + <combo_box.item name="Chinese" label="中文 (简体) (Cinese)" /> + <combo_box.item name="Japanese" label="日本語 (Giapponese)" /> + <combo_box.item name="Korean" label="한국어 (Coreano)" /> + </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_general.xml b/indra/newview/skins/default/xui/it/panel_preferences_general.xml index e8c826609c..60c4ed5211 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_general.xml @@ -13,7 +13,7 @@ <combo_box.item label="Italiano - Beta" name="Italian"/> <combo_box.item label="Nederlands (Olandese) - Beta" name="Dutch"/> <combo_box.item label="Polski (Polacco) - Beta" name="Polish"/> - <combo_box.item label="Portugués (Portoghese) - Beta" name="Portugese"/> + <combo_box.item label="Português (Portoghese) - Beta" name="Portugese"/> <combo_box.item label="日本語 (Giapponese) - Beta" name="(Japanese)"/> </combo_box> <text name="language_textbox2"> diff --git a/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml index ef7aaf2e8c..4620d72977 100644 --- a/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml @@ -13,9 +13,9 @@ 50 </string> <layout_stack name="progress_indicator_area"> - <panel name="media_progress_indicator"> + <layout_panel name="media_progress_indicator"> <progress_bar name="media_progress_bar" tool_tip="L'elemento multimediale è in caricamento"/> - </panel> + </layout_panel> </layout_stack> <layout_stack name="media_controls"> <layout_panel name="back"> diff --git a/indra/newview/skins/default/xui/it/panel_region_general_layout.xml b/indra/newview/skins/default/xui/it/panel_region_general_layout.xml deleted file mode 100644 index 4cf31f4b6e..0000000000 --- a/indra/newview/skins/default/xui/it/panel_region_general_layout.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Regione" name="General"> - <text name="region_text_lbl"> - Regione: - </text> - <text name="region_text"> - sconosciuto - </text> - <text name="version_channel_text_lbl"> - Versione: - </text> - <text name="version_channel_text"> - sconosciuto - </text> - <text name="region_type_lbl"> - Tipo: - </text> - <text name="region_type"> - sconosciuto - </text> - <check_box label="Impedisci Terraform" name="block_terraform_check"/> - <check_box label="Impedisci volo" name="block_fly_check"/> - <check_box label="Permetti danni" name="allow_damage_check"/> - <check_box label="Limita spinte" name="restrict_pushobject"/> - <check_box label="Permetti la rivendita dei terreni" name="allow_land_resell_check"/> - <check_box label="Permetti l'unione/divisione del terreno" name="allow_parcel_changes_check"/> - <check_box label="Impedisci la visualizzazione del terreno nelle ricerche" name="block_parcel_search_check" tool_tip="Permetti alla gente di vedere questa regione e i suoi lotti nei risultati dellla ricerca"/> - <spinner label="N. massimo di avatar" name="agent_limit_spin"/> - <spinner label="Bonus oggetto" name="object_bonus_spin"/> - <text label="Categoria di accesso" name="access_text"> - Categoria: - </text> - <combo_box label="Moderato" name="access_combo"> - <combo_box.item label="Adulti" name="Adult"/> - <combo_box.item label="Moderato" name="Mature"/> - <combo_box.item label="Generale" name="PG"/> - </combo_box> - <button label="Applica" name="apply_btn"/> - <button label="Teleport a casa un residente..." name="kick_btn"/> - <button label="Teleport a casa tutti i residenti..." name="kick_all_btn"/> - <button label="Invia messaggio alla regione..." name="im_btn"/> - <button label="Gestisci telehub..." name="manage_telehub_btn"/> -</panel> diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index fb479b4653..fa465ee9c2 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -1126,6 +1126,9 @@ <string name="InvFolder Favorite"> Preferiti </string> + <string name="InvFolder favorite"> + Preferiti + </string> <string name="InvFolder Current Outfit"> Abbigliamento attuale </string> 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 2f5065c05f..2de9e781d4 100644 --- a/indra/newview/skins/default/xui/ja/floater_about_land.xml +++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml @@ -109,7 +109,7 @@ <text name="For Sale: Price L$[PRICE]."> 価格: L$ [PRICE] (L$ [PRICE_PER_SQM] / 平方メートル) </text> - <button label="土地を売る" label_selected="土地を販売..." name="Sell Land..." width="100"/> + <button label="土地を売る" label_selected="土地を販売..." name="Sell Land..."/> <text name="For sale to"> 販売先:[BUYER] </text> @@ -119,7 +119,7 @@ <text name="Selling with no objects in parcel."> オブジェクトは販売しない </text> - <button label="土地販売の取り消し" label_selected="土地販売の取り消し" name="Cancel Land Sale" width="100"/> + <button label="土地販売の取り消し" label_selected="土地販売の取り消し" name="Cancel Land Sale"/> <text name="Claimed:"> 取得日時: </text> @@ -210,72 +210,72 @@ </text> </panel> <panel label="オブジェクト" name="land_objects_panel"> - <panel.string left="200" name="objects_available_text"> + <panel.string name="objects_available_text"> [MAX] の内 [COUNT]([AVAILABLE] 利用可能) </panel.string> - <panel.string left="200" name="objects_deleted_text"> + <panel.string name="objects_deleted_text"> [MAX] の内 [COUNT]([DELETED] を削除) </panel.string> <text name="parcel_object_bonus"> オブジェクトボーナス: [BONUS] </text> - <text name="Simulator primitive usage:" width="500"> + <text name="Simulator primitive usage:"> プリム使用状況: </text> - <text left="200" name="objects_available"> + <text name="objects_available"> [MAX] の内 [COUNT] ([AVAILABLE] 利用可能) </text> - <text name="Primitives parcel supports:" width="200"> + <text name="Primitives parcel supports:"> 区画でサポートされるプリム数: </text> - <text left="200" name="object_contrib_text"> + <text name="object_contrib_text"> [COUNT] </text> <text name="Primitives on parcel:"> 区画上のプリム数: </text> - <text left="200" name="total_objects_text"> + <text name="total_objects_text"> [COUNT] </text> - <text name="Owned by parcel owner:" width="300"> + <text name="Owned by parcel owner:"> 区画所有者の所有物: </text> - <text left="200" name="owner_objects_text"> + <text name="owner_objects_text"> [COUNT] </text> - <button label="表示" label_selected="表示" name="ShowOwner" right="-145"/> - <button label="返却" label_selected="返却..." name="ReturnOwner..." right="-15" tool_tip="オブジェクトを所有者に返却します"/> + <button label="表示" label_selected="表示" name="ShowOwner"/> + <button label="返却" label_selected="返却..." name="ReturnOwner..." tool_tip="オブジェクトを所有者に返却します"/> <text name="Set to group:"> グループに設定: </text> - <text left="200" name="group_objects_text"> + <text name="group_objects_text"> [COUNT] </text> - <button label="表示" label_selected="表示" name="ShowGroup" right="-145"/> - <button label="返却" label_selected="返却..." name="ReturnGroup..." right="-15" tool_tip="オブジェクトを所有者に返却します"/> + <button label="表示" label_selected="表示" name="ShowGroup"/> + <button label="返却" label_selected="返却..." name="ReturnGroup..." tool_tip="オブジェクトを所有者に返却します"/> <text name="Owned by others:"> 他人の所有物: </text> - <text left="200" name="other_objects_text"> + <text name="other_objects_text"> [COUNT] </text> - <button label="表示" label_selected="表示" name="ShowOther" right="-145"/> - <button label="返却" label_selected="返却..." name="ReturnOther..." right="-15" tool_tip="オブジェクトを所有者に返却します"/> + <button label="表示" label_selected="表示" name="ShowOther"/> + <button label="返却" label_selected="返却..." name="ReturnOther..." tool_tip="オブジェクトを所有者に返却します"/> <text name="Selected / sat upon:"> 選択済み・決定済み: </text> - <text left="200" name="selected_objects_text"> + <text name="selected_objects_text"> [COUNT] </text> <text name="Autoreturn"> 他人のオブジェクトを自動返却(分単位、0 で自動返却なし): </text> - <line_editor left_delta="5" name="clean other time" right="-80"/> - <text name="Object Owners:" width="150"> + <line_editor left_delta="5" name="clean other time"/> + <text name="Object Owners:"> オブジェクトの所有者: </text> - <button label="リスト更新" label_selected="リスト更新" left="146" name="Refresh List" tool_tip="オブジェクトのリストを更新します"/> - <button label="オブジェクトを返却する" label_selected="オブジェクトの返却..." left="256" name="Return objects..."/> + <button label="リスト更新" label_selected="リスト更新" name="Refresh List" tool_tip="オブジェクトのリストを更新します"/> + <button label="オブジェクトを返却する" label_selected="オブジェクトの返却..." name="Return objects..."/> <name_list label="カウント" name="owner list"> <name_list.columns label="タイプ" name="type"/> <name_list.columns name="online_status"/> diff --git a/indra/newview/skins/default/xui/ja/floater_customize.xml b/indra/newview/skins/default/xui/ja/floater_customize.xml deleted file mode 100644 index cc0032e1ab..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_customize.xml +++ /dev/null @@ -1,529 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="容姿"> - <tab_container name="customize tab container"> - <text label="身体部位" name="body_parts_placeholder"> - 身体部位 - </text> - <panel label="シェイプ" name="Shape"> - <button label="戻す" label_selected="戻す" name="Revert"/> - <button label="身体" label_selected="身体" name="Body"/> - <button label="頭" label_selected="頭" name="Head"/> - <button label="眼" label_selected="眼" name="Eyes"/> - <button label="耳" label_selected="耳" name="Ears"/> - <button label="鼻" label_selected="鼻" name="Nose"/> - <button label="口" label_selected="口" name="Mouth"/> - <button label="あご" label_selected="あご" name="Chin"/> - <button label="胴体" label_selected="胴体" name="Torso"/> - <button label="両脚" label_selected="両脚" name="Legs"/> - <radio_group name="sex radio"> - <radio_item label="女性" name="radio" value="0"/> - <radio_item label="男性" name="radio2" value="1"/> - </radio_group> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: 修正できません。 - </text> - <text name="title_loading"> - [DESC]: ロード中... - </text> - <text name="title_not_worn"> - [DESC]: 未装着。 - </text> - <text name="path"> - [PATH] に所在 - </text> - <text name="not worn instructions"> - 持ち物からあなたのアバターに 1 つドラッグして、新しいシェイプをつけます。 代わりに、はじめから新しく作成して着用することもできます。 - </text> - <text name="no modify instructions"> - あなたはこの服の修正を許されていません。 - </text> - <text name="Item Action Label"> - シェイプ: - </text> - <button label="新しいシェイプ(体型)を作成" label_selected="新しいシェイプ(体型)を作成" name="Create New"/> - <button label="保存" label_selected="保存" name="Save"/> - <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> - </panel> - <panel label="スキン" name="Skin"> - <button label="スキンの色" label_selected="スキンの色" name="Skin Color"/> - <button label="顔の細部" label_selected="顔の細部" name="Face Detail"/> - <button label="メイク" label_selected="メイク" name="Makeup"/> - <button label="身体細部" label_selected="身体細部" name="Body Detail"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: 修正できません。 - </text> - <text name="title_loading"> - [DESC]: ロード中... - </text> - <text name="title_not_worn"> - [DESC]: 未装着。 - </text> - <text name="path"> - [PATH] に所在 - </text> - <text name="not worn instructions"> - 持ち物からあなたのアバターに 1 つドラッグして、新しいスキンをつけます。 代わりに、はじめから新しく作成して着用することもできます。 - </text> - <text name="no modify instructions"> - あなたはこの服の修正を許されていません。 - </text> - <text name="Item Action Label"> - スキン: - </text> - <texture_picker label="頭部のタトゥー" name="Head Tattoos" tool_tip="写真をクリックして選択"/> - <texture_picker label="上半身のタトゥー" name="Upper Tattoos" tool_tip="写真をクリックして選択"/> - <texture_picker label="下部のタトゥー" name="Lower Tattoos" tool_tip="写真をクリックして選択"/> - <button label="新しいスキンを作成" label_selected="新しいスキンを作成" name="Create New"/> - <button label="保存" label_selected="保存" name="Save"/> - <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> - <button label="戻す" label_selected="戻す" name="Revert"/> - </panel> - <panel label="髪" name="Hair"> - <button label="色" label_selected="色" name="Color"/> - <button label="スタイル" label_selected="スタイル" name="Style"/> - <button label="眉毛" label_selected="眉毛" name="Eyebrows"/> - <button label="顔" label_selected="顔" name="Facial"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: 修正できません。 - </text> - <text name="title_loading"> - [DESC]: ロード中... - </text> - <text name="title_not_worn"> - [DESC]: 未装着。 - </text> - <text name="path"> - [PATH] に所在 - </text> - <text name="not worn instructions"> - 持ち物からあなたのアバターに 1 つドラッグして、新しい髪をつけます。 代わりに、はじめから新しく作成して着用することもできます。 - </text> - <text name="no modify instructions"> - あなたはこの服の修正を許されていません。 - </text> - <text name="Item Action Label"> - 髪型: - </text> - <texture_picker label="テクスチャ" name="Texture" tool_tip="写真をクリックして選択"/> - <button label="新しい髪を作成" label_selected="新しい髪を作成" name="Create New"/> - <button label="保存" label_selected="保存" name="Save"/> - <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> - <button label="戻す" label_selected="戻す" name="Revert"/> - </panel> - <panel label="眼" name="Eyes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: 修正できません。 - </text> - <text name="title_loading"> - [DESC]: ロード中... - </text> - <text name="title_not_worn"> - [DESC]: 未装着。 - </text> - <text name="path"> - [PATH] に所在 - </text> - <text name="not worn instructions"> - あなたの持ち物からアバターにドラッグして、新しい目をつけます。 代わりに、はじめから新しく作成して着用することもできます。 - </text> - <text name="no modify instructions"> - あなたはこの服の修正を許されていません。 - </text> - <text name="Item Action Label"> - 目: - </text> - <texture_picker label="虹彩" name="Iris" tool_tip="写真をクリックして選択"/> - <button label="新しい眼を作成" label_selected="新しい眼を作成" name="Create New"/> - <button label="保存" label_selected="保存" name="Save"/> - <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> - <button label="戻す" label_selected="戻す" name="Revert"/> - </panel> - <text label="服" name="clothes_placeholder"> - 衣類 - </text> - <panel label="シャツ" name="Shirt"> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/> - <color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/> - <button label="取り外す" label_selected="取り外す" name="Take Off"/> - <button label="新しいシャツを作成" label_selected="新しいシャツを作成" name="Create New"/> - <button label="保存" label_selected="保存" name="Save"/> - <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> - <button label="戻す" label_selected="戻す" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: 修正できません。 - </text> - <text name="title_loading"> - [DESC]: ロード中... - </text> - <text name="title_not_worn"> - [DESC]: 未装着。 - </text> - <text name="path"> - [PATH] に所在 - </text> - <text name="not worn instructions"> - 持ち物からあなたのアバターに 1 つドラッグして、新しいシャツを着ます。 代わりに、はじめから新しく作成して着用することもできます。 - </text> - <text name="no modify instructions"> - あなたはこの服の修正を許されていません。 - </text> - <text name="Item Action Label"> - シャツ: - </text> - </panel> - <panel label="パンツ" name="Pants"> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/> - <color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/> - <button label="取り外す" label_selected="取り外す" name="Take Off"/> - <button label="新しいパンツを作成" label_selected="新しいパンツを作成" name="Create New"/> - <button label="保存" label_selected="保存" name="Save"/> - <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> - <button label="戻す" label_selected="戻す" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: 修正できません。 - </text> - <text name="title_loading"> - [DESC]: ロード中... - </text> - <text name="title_not_worn"> - [DESC]: 未装着。 - </text> - <text name="path"> - [PATH] に所在 - </text> - <text name="not worn instructions"> - あなたの持ち物からアバターにドラッグして、新しいパンツを履きます。 代わりに、はじめから新しく作成して着用することもできます。 - </text> - <text name="no modify instructions"> - あなたはこの服の修正を許されていません。 - </text> - <text name="Item Action Label"> - パンツ: - </text> - </panel> - <panel label="靴" name="Shoes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: 修正できません。 - </text> - <text name="title_loading"> - [DESC]: ロード中... - </text> - <text name="title_not_worn"> - [DESC]: 未装着。 - </text> - <text name="path"> - [PATH] に所在 - </text> - <text name="not worn instructions"> - あなたの持ち物からアバターにドラッグして、新しい靴を履きます。 代わりに、はじめから新しく作成して着用することもできます。 - </text> - <button label="新しい靴を作成" label_selected="新しい靴を作成" name="Create New"/> - <text name="no modify instructions"> - あなたはこの服の修正を許されていません。 - </text> - <text name="Item Action Label"> - 靴: - </text> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/> - <color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/> - <button label="取り外す" label_selected="取り外す" name="Take Off"/> - <button label="保存" label_selected="保存" name="Save"/> - <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> - <button label="戻す" label_selected="戻す" name="Revert"/> - </panel> - <panel label="靴下" name="Socks"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: 修正できません。 - </text> - <text name="title_loading"> - [DESC]: ロード中... - </text> - <text name="title_not_worn"> - [DESC]: 未装着。 - </text> - <text name="path"> - [PATH] に所在 - </text> - <text name="not worn instructions"> - あなたの持ち物からアバターにドラッグして、新しい靴下を履きます。 代わりに、はじめから新しく作成して着用することもできます。 - </text> - <button label="新しい靴下を作成" label_selected="新しい靴下を作成" name="Create New"/> - <text name="no modify instructions"> - あなたはこの服の修正を許されていません。 - </text> - <text name="Item Action Label"> - 靴下: - </text> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/> - <color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/> - <button label="取り外す" label_selected="取り外す" name="Take Off"/> - <button label="保存" label_selected="保存" name="Save"/> - <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> - <button label="戻す" label_selected="戻す" name="Revert"/> - </panel> - <panel label="上着" name="Jacket"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: 修正できません。 - </text> - <text name="title_loading"> - [DESC]: ロード中... - </text> - <text name="title_not_worn"> - [DESC]: 未装着。 - </text> - <text name="path"> - [PATH] に所在 - </text> - <text name="not worn instructions"> - 持ち物からあなたのアバターに 1 つドラッグして、新しいジャケットを着ます。 代わりに、はじめから新しく作成して着用することもできます。 - </text> - <button label="新しい上着を作成" label_selected="新しい上着を作成" name="Create New"/> - <text name="no modify instructions"> - あなたはこの服の修正を許されていません。 - </text> - <text name="Item Action Label"> - 上着: - </text> - <texture_picker label="上半身の生地" name="Upper Fabric" tool_tip="写真をクリックして選択"/> - <texture_picker label="下層生地" name="Lower Fabric" tool_tip="写真をクリックして選択"/> - <color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/> - <button label="取り外す" label_selected="取り外す" name="Take Off"/> - <button label="保存" label_selected="保存" name="Save"/> - <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> - <button label="戻す" label_selected="戻す" name="Revert"/> - </panel> - <panel label="手袋" name="Gloves"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: 修正できません。 - </text> - <text name="title_loading"> - [DESC]: ロード中... - </text> - <text name="title_not_worn"> - [DESC]: 未装着。 - </text> - <text name="path"> - [PATH] に所在 - </text> - <text name="not worn instructions"> - あなたの持ち物からアバターにドラッグして、新しい手袋をつけます。 代わりに、はじめから新しく作成して着用することもできます。 - </text> - <button label="新しい手袋を作成" label_selected="新しい手袋を作成" name="Create New"/> - <text name="no modify instructions"> - あなたはこの服の修正を許されていません。 - </text> - <text name="Item Action Label"> - 手袋: - </text> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/> - <color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/> - <button label="取り外す" label_selected="取り外す" name="Take Off"/> - <button label="保存" label_selected="保存" name="Save"/> - <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> - <button label="戻す" label_selected="戻す" name="Revert"/> - </panel> - <panel label="下着シャツ" name="Undershirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: 修正できません。 - </text> - <text name="title_loading"> - [DESC]: ロード中... - </text> - <text name="title_not_worn"> - [DESC]: 未装着。 - </text> - <text name="path"> - [PATH] に所在 - </text> - <text name="not worn instructions"> - 持ち物からあなたのアバターに1つドラッグして、新しい下着(上)を着ます。 代わりに、はじめから新しく作成して着用することもできます。 - </text> - <button label="新しい下着シャツを作成" label_selected="新しい下着シャツを作成" name="Create New"/> - <text name="no modify instructions"> - あなたはこの服の修正を許されていません。 - </text> - <text name="Item Action Label"> - 下着シャツ: - </text> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/> - <color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/> - <button label="取り外す" label_selected="取り外す" name="Take Off"/> - <button label="保存" label_selected="保存" name="Save"/> - <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> - <button label="戻す" label_selected="戻す" name="Revert"/> - </panel> - <panel label="下着パンツ" name="Underpants"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: 修正できません。 - </text> - <text name="title_loading"> - [DESC]: ロード中... - </text> - <text name="title_not_worn"> - [DESC]: 未装着。 - </text> - <text name="path"> - [PATH] に所在 - </text> - <text name="not worn instructions"> - あなたの持ち物からアバターにドラッグして、新しい下着(下)を履きます。 代わりに、はじめから新しく作成して着用することもできます。 - </text> - <button label="新しいパンツを作成" label_selected="新しいパンツを作成" name="Create New"/> - <text name="no modify instructions"> - あなたはこの服の修正を許されていません。 - </text> - <text name="Item Action Label"> - 下着パンツ: - </text> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/> - <color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/> - <button label="取り外す" label_selected="取り外す" name="Take Off"/> - <button label="保存" label_selected="保存" name="Save"/> - <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> - <button label="戻す" label_selected="戻す" name="Revert"/> - </panel> - <panel label="スカート" name="Skirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: 修正できません。 - </text> - <text name="title_loading"> - [DESC]: ロード中... - </text> - <text name="title_not_worn"> - [DESC]: 未装着。 - </text> - <text name="path"> - [PATH] に所在 - </text> - <text name="not worn instructions"> - 持ち物からあなたのアバターに 1 つドラッグして、新しいスカートを履きます。 代わりに、はじめから新しく作成して着用することもできます。 - </text> - <button label="スカートを作成" label_selected="スカートを作成" name="Create New"/> - <text name="no modify instructions"> - あなたはこの服の修正を許されていません。 - </text> - <text name="Item Action Label"> - スカート: - </text> - <texture_picker label="生地" name="Fabric" tool_tip="写真をクリックして選択"/> - <color_swatch label="色/明暗" name="Color/Tint" tool_tip="クリックしてカラーピッカーを開きます"/> - <button label="取り外す" label_selected="取り外す" name="Take Off"/> - <button label="保存" label_selected="保存" name="Save"/> - <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> - <button label="戻す" label_selected="戻す" name="Revert"/> - </panel> - <panel label="タトゥ" name="Tattoo"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: 修正不可 - </text> - <text name="title_loading"> - [DESC]: ローディング... - </text> - <text name="title_not_worn"> - [DESC]: 未着用 - </text> - <text name="path"> - 参照 [PATH] - </text> - <text name="not worn instructions"> - あなたの持ち物からアバターにドラッグして、新しいタトゥをつけます。 代わりに、はじめから新しく作成して着用することもできます。 - </text> - <button label="新しいタトゥを作成" label_selected="新しいタトゥを作成" name="Create New"/> - <text name="no modify instructions"> - この着用物を修正する権限がありません。 - </text> - <text name="Item Action Label"> - タトゥ: - </text> - <texture_picker label="頭部のタトゥー" name="Head Tattoo" tool_tip="クリックして写真を選択します"/> - <texture_picker label="上部のタトゥー" name="Upper Tattoo" tool_tip="クリックして写真を選択します"/> - <texture_picker label="下部のタトゥー" name="Lower Tattoo" tool_tip="クリックして写真を選択します"/> - <button label="取り外す" label_selected="取り外す" name="Take Off"/> - <button label="保存" label_selected="保存" name="Save"/> - <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> - <button label="元に戻す" label_selected="元に戻す" name="Revert"/> - </panel> - <panel label="アルファ" name="Alpha"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: 修正不可 - </text> - <text name="title_loading"> - [DESC]: ローディング... - </text> - <text name="title_not_worn"> - [DESC]: 未着用 - </text> - <text name="path"> - 参照 [PATH] - </text> - <text name="not worn instructions"> - あなたの持ち物からアバターにドラッグして、新しいアルファマスクをつけます。 代わりに、はじめから新しく作成して着用することもできます。 - </text> - <button label="新しいアルファを作成" label_selected="新しいアルファを作成" name="Create New"/> - <text name="no modify instructions"> - この着用物を修正する権限がありません。 - </text> - <text name="Item Action Label"> - アルファ: - </text> - <texture_picker label="アルファ(下)" name="Lower Alpha" tool_tip="クリックして写真を選択します"/> - <texture_picker label="アルファ(上)" name="Upper Alpha" tool_tip="クリックして写真を選択します"/> - <texture_picker label="頭部のアルファ" name="Head Alpha" tool_tip="クリックして写真を選択します"/> - <texture_picker label="目のアルファ" name="Eye Alpha" tool_tip="クリックして写真を選択します"/> - <texture_picker label="髪のアルファ" name="Hair Alpha" tool_tip="クリックして写真を選択します"/> - <button label="取り外す" label_selected="取り外す" name="Take Off"/> - <button label="保存" label_selected="保存" name="Save"/> - <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> - <button label="元に戻す" label_selected="元に戻す" name="Revert"/> - </panel> - </tab_container> - <button label="スクリプト情報" label_selected="スクリプト情報" name="script_info" tool_tip="あなたのアバターに付いているスクリプトを表示します"/> - <button label="アウトフィット作成" label_selected="アウトフィット作成" name="make_outfit_btn"/> - <button label="キャンセル" label_selected="キャンセル" name="Cancel"/> - <button label="OK" label_selected="OK" name="Ok"/> -</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_device_settings.xml b/indra/newview/skins/default/xui/ja/floater_device_settings.xml deleted file mode 100644 index 3ae7356fb6..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_device_settings.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_device_settings" title="ボイスチャット機器の設定"/> diff --git a/indra/newview/skins/default/xui/ja/floater_first_time_tip.xml b/indra/newview/skins/default/xui/ja/floater_first_time_tip.xml deleted file mode 100644 index fce9185b8a..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_first_time_tip.xml +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="set_name_in_the_cladd"> - <check_box label="クイックヒントをオフにする" name="DontShowFirstTimeTip_checkbox"/> -</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_im.xml b/indra/newview/skins/default/xui/ja/floater_im.xml deleted file mode 100644 index 2e8993ec21..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_im.xml +++ /dev/null @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<multi_floater name="im_floater" title="インスタント・メッセージ"> - <string name="only_user_message"> - このセッションには、あなたしかいません。 - </string> - <string name="offline_message"> - [FIRST] [LAST]はオフラインです。 - </string> - <string name="invite_message"> - このボイスチャットに応答/接続する場合は、[BUTTON NAME]をクリックしてください。 - </string> - <string name="muted_message"> - この住人をブロックしています。 メッセージを送ると、ブロックが自動的に解除されます。 - </string> - <string name="generic_request_error"> - 要求中にエラーが発生しました。後でもう一度試してください。 - </string> - <string name="insufficient_perms_error"> - あなたには充分な権限がありません。 - </string> - <string name="session_does_not_exist_error"> - このセッションは既に切断されています。 - </string> - <string name="no_ability_error"> - あなたにはその能力がありません。 - </string> - <string name="not_a_mod_error"> - あなたはセッション・モデレータではありません。 - </string> - <string name="muted_error"> - グループモデレータがあなたのテキストチャットを無効化しました - </string> - <!-- ALL of the event strings should have [RECIPIENT] in them --> - <string name="add_session_event"> - [RECIPIENT] とのチャットセッションに住人を追加できません。 - </string> - <string name="message_session_event"> - [RECIPIENT] とのチャット・セッションにメッセージを送ることができません - </string> - <string name="removed_from_group"> - あなたはグループから削除されました。 - </string> - <string name="close_on_no_ability"> - このチャット・セッションを継続することはできません - </string> -</multi_floater> diff --git a/indra/newview/skins/default/xui/ja/floater_im_session.xml b/indra/newview/skins/default/xui/ja/floater_im_session.xml index 6646cc0b25..dfa1c85ca2 100644 --- a/indra/newview/skins/default/xui/ja/floater_im_session.xml +++ b/indra/newview/skins/default/xui/ja/floater_im_session.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="panel_im"> <layout_stack name="im_panels"> - <layout_panel label="IM コントロールパネル" name="panel_im_control_panel"/> <layout_panel> <line_editor label="宛先" name="chat_editor"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/ja/floater_my_friends.xml b/indra/newview/skins/default/xui/ja/floater_my_friends.xml deleted file mode 100644 index b55cdde5b5..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_my_friends.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater min_width="500" name="floater_my_friends" title="連絡先"> - <tab_container name="friends_and_groups"> - <panel label="フレンド" name="friends_panel"/> - <panel label="グループ" name="groups_panel"/> - </tab_container> -</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/ja/floater_outfit_save_as.xml deleted file mode 100644 index 70555e6ded..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_outfit_save_as.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title="アウトフィットを保存する"> - <button label="保存" label_selected="保存" name="Save"/> - <button label="キャンセル" label_selected="キャンセル" name="Cancel"/> - <text name="Save item as:"> - 着用しているものを -新しいアウトフィットに保存: - </text> - <line_editor name="name ed"> - [DESC] (新) - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_preview_classified.xml b/indra/newview/skins/default/xui/ja/floater_preview_classified.xml deleted file mode 100644 index ba3bb028b2..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_preview_classified.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="classified_preview" title="クラシファイド広告情報"> - <floater.string name="Title"> - クラシファイド広告: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_preview_event.xml b/indra/newview/skins/default/xui/ja/floater_preview_event.xml deleted file mode 100644 index 21f57ca7a3..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_preview_event.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="event_preview" title="イベント情報"> - <floater.string name="Title"> - イベント: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml deleted file mode 100644 index 682b295a14..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_preview_gesture_info.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="ジェスチャーのショートカット"/> diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml deleted file mode 100644 index e96a43d0c1..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_preview_gesture_shortcut.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="ジェスチャーのショートカット"> - <text name="trigger_label"> - チャット: - </text> - <text name="key_label"> - キーボード: - </text> - <combo_box label="なし" name="modifier_combo" width="60"/> - <combo_box label="なし" name="key_combo" width="60"/> - <text name="replace_text" tool_tip="これらの単語にトリガーとなる単語を置き換えます。 例えば、「howdy」と「hello」を置き換えると、「I wanted to say hello」というチャットは、ジェスチャーを交えながらの「I wanted to say howdy」に変わります。"> - 置き換え: - </text> - <line_editor name="replace_editor" tool_tip="これらの単語にトリガーとなる単語を置き換えます。 例えば、「howdy」と「hello」を置き換えると、「I wanted to say hello」というチャットは、ジェスチャーを交えながらの「I wanted to say howdy」に変わります。"/> -</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml deleted file mode 100644 index 682b295a14..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_preview_gesture_steps.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="ジェスチャーのショートカット"/> diff --git a/indra/newview/skins/default/xui/ja/floater_statistics.xml b/indra/newview/skins/default/xui/ja/floater_statistics.xml deleted file mode 100644 index de83e97b80..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_statistics.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="統計"/> diff --git a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml index 4b95aa544f..0caca22bc1 100644 --- a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml @@ -19,10 +19,12 @@ <layout_panel name="my_panel"> <text name="user_text" value="マイ アバター:"/> </layout_panel> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="コール終了" name="leave_call_btn"/> - </layout_panel> - </layout_stack> + <layout_panel name="leave_call_panel"> + <layout_stack name="voice_effect_and_leave_call_stack"> + <layout_panel name="leave_call_btn_panel"> + <button label="コール終了" name="leave_call_btn"/> + </layout_panel> + </layout_stack> + </layout_panel> </layout_stack> </floater> 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 deleted file mode 100644 index de8b590a80..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title=" "> - <button label="保存" label_selected="保存" name="Save"/> - <button label="取り消し" label_selected="取り消し" name="Cancel"/> - <text name="Save item as:"> - アイテムを別名で持ち物に保存: - </text> - <line_editor name="name ed"> - New [DESC] - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml index 6899a819b8..bca90cf5e4 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Self Pie"> <menu_item_call label="立ち上がる" name="Stand Up"/> - <context_menu label="脱ぐ ▶" name="Take Off >"> - <context_menu label="衣類 ▶" name="Clothes >"> + <context_menu label="脱ぐ" name="Take Off >"> + <context_menu label="衣類" name="Clothes >"> <menu_item_call label="シャツ" name="Shirt"/> <menu_item_call label="パンツ" name="Pants"/> <menu_item_call label="スカート" name="Skirt"/> @@ -16,8 +16,8 @@ <menu_item_call label="アルファ" name="Self Alpha"/> <menu_item_call label="すべての衣類" name="All Clothes"/> </context_menu> - <context_menu label="HUD ▶" name="Object Detach HUD"/> - <context_menu label="取り外す ▶" name="Object Detach"/> + <context_menu label="HUD" name="Object Detach HUD"/> + <context_menu label="取り外す" name="Object Detach"/> <menu_item_call label="すべて取り外す" name="Detach All"/> </context_menu> <menu_item_call label="アウトフィットを変更" name="Chenge Outfit"/> diff --git a/indra/newview/skins/default/xui/ja/menu_object.xml b/indra/newview/skins/default/xui/ja/menu_object.xml index be25a2932e..6724f2d109 100644 --- a/indra/newview/skins/default/xui/ja/menu_object.xml +++ b/indra/newview/skins/default/xui/ja/menu_object.xml @@ -10,12 +10,12 @@ <menu_item_call label="立ち上がる" name="Object Stand Up"/> <menu_item_call label="オブジェクトのプロフィール" name="Object Inspect"/> <menu_item_call label="ズームイン" name="Zoom In"/> - <context_menu label="装着 ▶" name="Put On"> + <context_menu label="装着" name="Put On"> <menu_item_call label="装着" name="Wear"/> - <context_menu label="取り付ける ▶" name="Object Attach"/> - <context_menu label="HUD を取り付ける ▶" name="Object Attach HUD"/> + <context_menu label="取り付ける" name="Object Attach"/> + <context_menu label="HUD を取り付ける" name="Object Attach HUD"/> </context_menu> - <context_menu label="取り除く ▶" name="Remove"> + <context_menu label="取り除く" name="Remove"> <menu_item_call label="嫌がらせの報告" name="Report Abuse..."/> <menu_item_call label="ブロック" name="Object Mute"/> <menu_item_call label="返却" name="Return..."/> diff --git a/indra/newview/skins/default/xui/ja/menu_participant_list.xml b/indra/newview/skins/default/xui/ja/menu_participant_list.xml index 3ef83756cb..64d8ded722 100644 --- a/indra/newview/skins/default/xui/ja/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/ja/menu_participant_list.xml @@ -11,7 +11,7 @@ <menu_item_check label="人のアイコン表示" name="View Icons"/> <menu_item_check label="ボイスをブロック" name="Block/Unblock"/> <menu_item_check label="文字をブロック" name="MuteText"/> - <context_menu label="モデレーターのオプション >" name="Moderator Options"> + <context_menu label="モデレーターのオプション" name="Moderator Options"> <menu_item_check label="文字チャットを許可" name="AllowTextChat"/> <menu_item_call label="この参加者をミュートする" name="ModerateVoiceMuteSelected"/> <menu_item_call label="この参加者のミュートを解除する" name="ModerateVoiceUnMuteSelected"/> diff --git a/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml index 73a8f87afd..273fbd856c 100644 --- a/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml @@ -5,8 +5,8 @@ <menu_item_call label="追加" name="wear_add"/> <menu_item_call label="取り外す" name="take_off_or_detach"/> <menu_item_call label="取り外す" name="detach"/> - <context_menu label="装着 ▶" name="wearable_attach_to"/> - <context_menu label="HUDに装着 ▶" name="wearable_attach_to_hud"/> + <context_menu label="装着" name="wearable_attach_to"/> + <context_menu label="HUDに装着" name="wearable_attach_to_hud"/> <menu_item_call label="取り外す" name="take_off"/> <menu_item_call label="編集" name="edit"/> <menu_item_call label="オブジェクトのプロフィール" name="object_profile"/> diff --git a/indra/newview/skins/default/xui/ja/panel_audio_device.xml b/indra/newview/skins/default/xui/ja/panel_audio_device.xml deleted file mode 100644 index 2352c60989..0000000000 --- a/indra/newview/skins/default/xui/ja/panel_audio_device.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="device_settings"> - <text name="Audio Devices"> - オーディオ機器 - </text> - <text name="Output device (speakers):"> - 出力機器 (スピーカー): - </text> - <text name="Input device (microphone):"> - 入力機器(マイクロフォン): - </text> - <text name="Input level:"> - 入力レベル - </text> - <text_editor name="voice_intro_text1"> - スライダを調節して、他の住人に聞こえるあなたの音量を制御します。マイクロフォンに向かって話すだけで、入力レベルをテストできます。 - </text_editor> - <volume_slider name="mic_volume_slider" - tool_tip="このスライダーを使用して、ボリュームを変えてください。" /> - <text name="wait_text"> - お待ちください - </text> - <text name="default_text"> - デフォルト - </text> -</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_friends.xml b/indra/newview/skins/default/xui/ja/panel_friends.xml deleted file mode 100644 index 0c7114dbb7..0000000000 --- a/indra/newview/skins/default/xui/ja/panel_friends.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="friends"> - <string name="Multiple"> - 複数のフレンド - </string> - <scroll_list name="friend_list" tool_tip="複数のフレンドを選択するには、Shift キーまたは Ctrl キーを押しながら名前をクリックします。"> - <column name="icon_online_status" tool_tip="オンライン状態"/> - <column label="名前" name="friend_name" tool_tip="名前"/> - <column name="icon_visible_online" tool_tip="フレンドは、あなたがオンラインかどうか確認することができます。"/> - <column name="icon_visible_map" tool_tip="フレンドは、地図であなたの居場所を見つけることができます。"/> - <column name="icon_edit_mine" tool_tip="フレンドは、オブジェクトを編集、削除、または取得することができます。"/> - <column name="icon_edit_theirs" tool_tip="あなたは、このフレンドのオブジェクトを編集することができます。"/> - </scroll_list> - <panel name="rights_container"> - <text name="friend_name_label" right="-10"> - フレンドを選択して権利を変更... - </text> - <check_box label="オンライン状態の確認を許可する" name="online_status_cb" tool_tip="コーリングカードあるいはフレンドリストでこのフレンドがオンライン状態を確認できるよう設定します"/> - <check_box label="世界地図上であなたの居場所を検索可能にする" name="map_status_cb" tool_tip="このフレンドが地図で私の位置を発見できるように設定します"/> - <check_box label="オブジェクトの修正を許可する" name="modify_status_cb" tool_tip="このフレンドに私のオブジェクトを改造する許可を与えます"/> - <text name="process_rights_label"> - 権利変更をプロセス中... - </text> - </panel> - <pad left="-95"/> - <button label="IM・コール" name="im_btn" tool_tip="インスタントメッセージセッションを開きます。" width="90"/> - <button label="プロフィール" name="profile_btn" tool_tip="写真、グループ、およびその他の情報を表示します。" width="90"/> - <button label="テレポート" name="offer_teleport_btn" tool_tip="このフレンドに、あなたの現在地へのテレポートを申し出ます。" width="90"/> - <button label="支払う" name="pay_btn" tool_tip="リンデンドル (L$) をこのフレンドにあげます。" width="90"/> - <button label="削除" name="remove_btn" tool_tip="この人物をフレンドリストから外します。" width="90"/> - <button label="追加" name="add_btn" tool_tip="フレンド登録を申し出ます。" width="90"/> -</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_groups.xml b/indra/newview/skins/default/xui/ja/panel_groups.xml deleted file mode 100644 index de81a6431a..0000000000 --- a/indra/newview/skins/default/xui/ja/panel_groups.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="groups"> - <text name="groupdesc"> - アクティブなグループは太字で表示されています - </text> - <text name="groupcount" width="270"> - [COUNT] のグループに所属しています (最大[MAX]) - </text> - <button label="IM・コール" name="IM" - tool_tip="インスタントメッセージ・セッションを開く" /> - <button label="情報" name="Info" /> - <button label="アクティブ" name="Activate" /> - <button label="抜ける" name="Leave" /> - <button label="作成..." name="Create" /> - <button label="検索..." name="Search..." /> -</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml b/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml deleted file mode 100644 index c0549c8ae9..0000000000 --- a/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<!-- All our XML is utf-8 encoded. --> -<panel name="nearby_chat"> - <panel name="chat_caption"> - <text name="sender_name"> - 近くのチャット - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml b/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml index 5723535fd2..aff427ed49 100644 --- a/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml +++ b/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml @@ -1,15 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="notifications_panel"> <layout_stack name="stack1"> - <scroll_list name="notifications_list"> - <column label="名前" name="name"/> - <column label="コンテンツ" name="content"/> - <column label="日付" name="date"/> - </scroll_list> - <scroll_list name="notification_rejects_list"> - <column label="名前" name="name"/> - <column label="コンテンツ" name="content"/> - <column label="日付" name="date"/> - </scroll_list> + <layout_panel name="notifications_list_panel"> + <scroll_list name="notifications_list"> + <column label="名前" name="name"/> + <column label="コンテンツ" name="content"/> + <column label="日付" name="date"/> + </scroll_list> + </layout_panel> + <layout_panel name="rejects_list_panel"> + <scroll_list name="notification_rejects_list"> + <column label="名前" name="name"/> + <column label="コンテンツ" name="content"/> + <column label="日付" name="date"/> + </scroll_list> + </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_online_status.xml b/indra/newview/skins/default/xui/ja/panel_online_status.xml deleted file mode 100644 index fdc489f375..0000000000 --- a/indra/newview/skins/default/xui/ja/panel_online_status.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="friend_online_status" name="friend_online_status"/> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml index 86f880de09..4082f71a76 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml @@ -56,4 +56,27 @@ <radio_item label="別々のウィンドウ" name="radio" value="0"/> <radio_item label="タブ" name="radio2" value="1"/> </radio_group> + <check_box label="翻訳チャット" name="translate_chat_checkbox" /> + <text name="translate_language_text"> + チャット言語: + </text> + <combo_box name="translate_language_combobox"> + <combo_box.item name="System Default Language" label="システム・デフォルト" /> + <combo_box.item name="English" label="English (英語)" /> + <combo_box.item name="Danish" label="Dansk (デンマーク語)" /> + <combo_box.item name="German" label="Deutsch (ドイツ語)" /> + <combo_box.item name="Spanish" label="Español (スペイン語)" /> + <combo_box.item name="French" label="Français (フランス語)" /> + <combo_box.item name="Italian" label="Italiano (イタリア語)" /> + <combo_box.item name="Hungarian" label="Magyar (ハンガリー語)" /> + <combo_box.item name="Dutch" label="Nederlands (オランダ語)" /> + <combo_box.item name="Polish" label="Polski (ポーランド語)" /> + <combo_box.item name="Portugese" label="Português (ポルトガル語)" /> + <combo_box.item name="Russian" label="Русский (ロシア語)" /> + <combo_box.item name="Turkish" label="Türkçe (トルコ語)" /> + <combo_box.item name="Ukrainian" label="Українська (ウクライナ語)" /> + <combo_box.item name="Chinese" label="中文 (简体) (中国語)" /> + <combo_box.item name="Japanese" label="日本語" /> + <combo_box.item name="Korean" label="한국어 (韓国語)" /> + </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml index a9897c7ae4..5506373eb0 100644 --- a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml @@ -7,9 +7,9 @@ 0.2 </string> <layout_stack name="progress_indicator_area"> - <panel name="media_progress_indicator"> + <layout_panel name="media_progress_indicator"> <progress_bar name="media_progress_bar" tool_tip="ローディング"/> - </panel> + </layout_panel> </layout_stack> <layout_stack name="media_controls"> <layout_panel name="back"> diff --git a/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml b/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml deleted file mode 100644 index 188a60eb60..0000000000 --- a/indra/newview/skins/default/xui/ja/panel_region_general_layout.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="リージョン(地域)" name="General"> - <text name="region_text_lbl"> - 地域: - </text> - <text left_delta="70" name="region_text"> - 不明 - </text> - <text name="version_channel_text_lbl"> - バージョン: - </text> - <text left_delta="70" name="version_channel_text"> - 不明 - </text> - <text name="region_type_lbl"> - 種類: - </text> - <text left_delta="70" name="region_type"> - 不明 - </text> - <check_box label="地形編集をブロック" name="block_terraform_check"/> - <check_box label="飛行をブロック" name="block_fly_check"/> - <check_box label="ダメージを許可" name="allow_damage_check"/> - <check_box label="プッシュを制限" name="restrict_pushobject"/> - <check_box label="土地の再販を許可" name="allow_land_resell_check"/> - <check_box label="土地の統合・分割を許可" name="allow_parcel_changes_check"/> - <check_box label="土地の検索表示をブロック" name="block_parcel_search_check" tool_tip="検索結果で、この地域と区画を表示するかどうかの設定です"/> - <spinner label="アバター数上限" label_width="110" name="agent_limit_spin" width="190"/> - <spinner label="物体ボーナス" label_width="110" name="object_bonus_spin" width="190"/> - <text label="レーティング区分" name="access_text"> - レーティング区分: - </text> - <combo_box label="Moderate" name="access_combo"> - <combo_box.item label="Adult" name="Adult"/> - <combo_box.item label="Moderate" name="Mature"/> - <combo_box.item label="General" name="PG"/> - </combo_box> - <button label="適用" name="apply_btn"/> - <button label="住人 1 名をホームにテレポート..." name="kick_btn"/> - <button label="住人全員をホームにテレポート..." name="kick_all_btn"/> - <button label="メッセージを地域に送信..." name="im_btn"/> - <button label="テレハブの管理..." name="manage_telehub_btn"/> -</panel> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index b68b68a4f8..dd59065a9d 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -1147,6 +1147,9 @@ <string name="InvFolder Favorite"> お気に入り </string> + <string name="InvFolder favorite"> + お気に入り + </string> <string name="InvFolder Current Outfit"> 着用中のアウトフィット </string> 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 7b8f1b42ab..4271ad5b82 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> <panel.string name="can_resell"> @@ -196,7 +196,7 @@ of opgedeeld. <text name="Simulator primitive usage:"> Simulator primitieven gebruik: </text> - <text name="objects_available" left="214" width="230"> + <text name="objects_available"> [COUNT] van [MAX] ([AVAILABLE] beschikbaar) </text> <panel.string name="objects_available_text"> @@ -205,59 +205,59 @@ of opgedeeld. <panel.string name="objects_deleted_text"> [COUNT] van [MAX] ([DELETED] zullen worden verwijderd) </panel.string> - <text name="Primitives parcel supports:" width="200"> + <text name="Primitives parcel supports:"> Primitieven ondersteund door perceel: </text> - <text name="object_contrib_text" left="214" width="152"> + <text name="object_contrib_text"> [COUNT] </text> <text name="Primitives on parcel:"> Primitieven op perceel: </text> - <text name="total_objects_text" left="214" width="48"> + <text name="total_objects_text" > [COUNT] </text> - <text name="Owned by parcel owner:" left="14" width="180" > + <text name="Owned by parcel owner:" > Eigendom van perceeleigenaar: </text> - <text name="owner_objects_text" left="214" width="48"> + <text name="owner_objects_text" > [COUNT] </text> - <button label="Toon" label_selected="Toon" name="ShowOwner" right="-135" width="60"/> - <button label="Retourneren" name="ReturnOwner..." tool_tip="Retourneer objecten naar hun eigenaren." right="-10" width="119"/> - <text name="Set to group:" left="14" width="180"> + <button label="Toon" label_selected="Toon" name="ShowOwner"/> + <button label="Retourneren" name="ReturnOwner..." tool_tip="Retourneer objecten naar hun eigenaren."/> + <text name="Set to group:" > Groep toewijzen: </text> - <text name="group_objects_text" left="214" width="48"> + <text name="group_objects_text" > [COUNT] </text> - <button label="Toon" label_selected="Toon" name="ShowGroup" right="-135" width="60"/> - <button label="Retourneren" name="ReturnGroup..." tool_tip="Retourneer objecten naar hun eigenaren." right="-10" width="119"/> - <text name="Owned by others:" left="14" width="128"> + <button label="Toon" label_selected="Toon" name="ShowGroup"/> + <button label="Retourneren" name="ReturnGroup..." tool_tip="Retourneer objecten naar hun eigenaren."/> + <text name="Owned by others:"> Eigendom van anderen: </text> - <text name="other_objects_text" left="214" width="48"> + <text name="other_objects_text" > [COUNT] </text> - <button label="Toon" label_selected="Toon" name="ShowOther" right="-135" width="60"/> - <button label="Retourneren" name="ReturnOther..." tool_tip="Retourneer objecten naar hun eigenaren." right="-10" width="119"/> - <text name="Selected / sat upon:" left="14" width="193"> + <button label="Toon" label_selected="Toon" name="ShowOther"/> + <button label="Retourneren" name="ReturnOther..." tool_tip="Retourneer objecten naar hun eigenaren."/> + <text name="Selected / sat upon:"> Geselecteerd/Er op gezeten </text> - <text name="selected_objects_text" left="214" width="48"> + <text name="selected_objects_text" > [COUNT] </text> - <text name="Autoreturn" left="4" width="412" height="32" bottom="-196"> + <text name="Autoreturn"> Objecten van andere inwoners automatisch retourneren (minuten): (0 om uit te schakelen) </text> - <line_editor name="clean other time" right="-50" bottom="-179"/> - <text name="Object Owners:" bottom="-213"> + <line_editor name="clean other time"/> + <text name="Object Owners:"> Objecteigenaren: </text> - <button label="Ververs lijst" label_selected="Ververs lijst" name="Refresh List" bottom="-213"/> - <button label="Retourneer objecten" name="Return objects..." width="164" bottom="-213"/> - <name_list name="owner list" height="104"> + <button label="Ververs lijst" label_selected="Ververs lijst" name="Refresh List"/> + <button label="Retourneer objecten" name="Return objects..."/> + <name_list name="owner list"> <column label="Type" name="type"/> <column label="Naam" name="name"/> <column label="Aantal" name="count"/> @@ -271,20 +271,20 @@ of opgedeeld. <check_box label="Terrein bewerken" name="edit land check" tool_tip="Indien aangevinkt, kan iedereen uw terrein bewerken. Het is het beste om dit uit te laten staan, omdat u zelf altijd uw eigen land kunt bewerken."/> <check_box label="Maak landmarkering" name="check landmark"/> <check_box label="Vliegen" name="check fly" tool_tip="Indien aangevinkt, kunnen inwoners op uw land vliegen. Indien niet aangevinkt, kunnen ze alleen het land binnenvliegen of eroverheen vliegen."/> - <text name="allow_label2" left="162"> + <text name="allow_label2"> Maak objecten: </text> - <check_box label="Alle inwoners" name="edit objects check" left="275"/> + <check_box label="Alle inwoners" name="edit objects check"/> <check_box label="Groep" name="edit group objects check"/> - <text name="allow_label3" left="162"> + <text name="allow_label3"> Objecten binnenlaten: </text> - <check_box label="Alle inwoners" name="all object entry check" left="275"/> + <check_box label="Alle inwoners" name="all object entry check"/> <check_box label="Groep" name="group object entry check"/> - <text name="allow_label4" left="162"> + <text name="allow_label4"> Scripts uitvoeren: </text> - <check_box label="Alle inwoners" name="check other scripts" left="275"/> + <check_box label="Alle inwoners" name="check other scripts"/> <check_box label="Groep" name="check group scripts"/> <text name="land_options_label"> Landopties: @@ -379,8 +379,8 @@ of opgedeeld. <panel.string name="landing_point_none"> (none) </panel.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's positie binnen dit perceel."/> - <button width="80" left="311" label="Opschonen" label_selected="Opschonen" name="Clear" tool_tip="Landingspunt leegmaken"/> + <button label="Instellen" label_selected="Instellen" name="Set" tool_tip="Stelt het landingspunt in waar bezoekers arriveren. Wordt ingesteld op uw avatar's positie binnen dit perceel."/> + <button label="Opschonen" label_selected="Opschonen" name="Clear" tool_tip="Landingspunt leegmaken"/> <text name="Teleport Routing: "> Teleport routering: </text> @@ -473,8 +473,8 @@ hebt geklikt.) <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" /> + <spinner label="Prijs in L$:" name="PriceSpin" label_width="168" /> + <spinner label="Toegangsuren" name="HoursSpin" label_width="168" /> <text label="Altijd toestaan" name="AllowedText"> Toegestane inwoners </text> diff --git a/indra/newview/skins/default/xui/nl/floater_customize.xml b/indra/newview/skins/default/xui/nl/floater_customize.xml deleted file mode 100644 index e6a4ed7a27..0000000000 --- a/indra/newview/skins/default/xui/nl/floater_customize.xml +++ /dev/null @@ -1,469 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="UITERLIJK"> - <tab_container name="customize tab container" tab_min_width="120"> - <placeholder label="Lichaamsdelen" name="body_parts_placeholder"/> - <panel label="Postuur" name="Shape" left="124" width="389"> - <button label="Herstel" label_selected="Herstel" name="Revert"/> - <button label="Lichaam" label_selected="Lichaam" name="Body"/> - <button label="Hoofd" label_selected="Hoofd" name="Head"/> - <button label="Ogen" label_selected="Ogen" name="Eyes"/> - <button label="Oren" label_selected="Oren" name="Ears"/> - <button label="Neus" label_selected="Neus" name="Nose"/> - <button label="Mond" label_selected="Mond" name="Mouth"/> - <button label="Kin" label_selected="Kin" name="Chin"/> - <button label="Torso" label_selected="Torso" name="Torso"/> - <button label="Benen" label_selected="Benen" name="Legs"/> - <radio_group name="sex radio"> - <radio_item name="radio" label="Vrouw" /> - <radio_item name="radio2" label="Man" /> - </radio_group> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan niet wijzigen - </text> - <text name="title_loading"> - [DESC]: laden... - </text> - <text name="title_not_worn"> - [DESC]: niet gedragen - </text> - <text name="path"> - Gelegen in [PATH] - </text> - <text name="not worn instructions"> - Draag een nieuwe postuur door hem vanuit uw inventaris naar uw avatar -te slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen. - </text> - <text name="no modify instructions"> - U heeft geen permissie om dit draagbare item te wijzigen. - </text> - <text name="Item Action Label"> - Postuur: - </text> - <button label="Nieuw postuur maken" label_selected="Nieuw postuur maken" name="Create New"/> - <button label="Opslaan" label_selected="Opslaan" name="Save"/> - <button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/> - </panel> - <panel label="Huid" name="Skin"> - <button width="104" label="Huidskleur" label_selected="Huidskleur" name="Skin Color"/> - <button width="104" label="Gezichtsdetail" label_selected="Gezichtsdetail" name="Face Detail"/> - <button width="104" label="Make-up" label_selected="Make-up" name="Makeup"/> - <button width="104" label="Lichaam detail" label_selected="Lichaam detail" name="Body Detail"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan niet wijzigen - </text> - <text name="title_loading"> - [DESC]: laden... - </text> - <text name="title_not_worn"> - [DESC]: niet gedragen - </text> - <text name="path"> - Gelegen in [PATH] - </text> - <text name="not worn instructions"> - Draag een nieuwe huid door haar vanuit uw inventaris naar uw avatar te -slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen. - </text> - <text name="no modify instructions"> - U heeft geen permissie om dit draagbare item te wijzigen. - </text> - <text name="Item Action Label"> - Huid: - </text> - <texture_picker width="104" label="Hoofd tatoeages" name="Head Tattoos" tool_tip="Klik om een afbeelding te kiezen"/> - <texture_picker width="104" label="Bovenste tatoeage" name="Upper Tattoos" tool_tip="Klik om een afbeelding te kiezen"/> - <texture_picker width="104" label="Onderste tatoeages" name="Lower Tattoos" tool_tip="Klik om een afbeelding te kiezen"/> - <button label="Nieuwe huid maken" label_selected="Nieuwe huid maken" name="Create New"/> - <button label="Opslaan" label_selected="Opslaan" name="Save"/> - <button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/> - <button label="Herstel" label_selected="Herstel" name="Revert"/> - </panel> - <panel label="Haar" name="Hair"> - <button label="Kleur" label_selected="Kleur" name="Color"/> - <button label="Stijl" label_selected="Stijl" name="Style"/> - <button label="Wenkbrauwen" label_selected="Wenkbrauwen" name="Eyebrows"/> - <button label="Aangezicht" label_selected="Aangezicht" name="Facial"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan niet wijzigen - </text> - <text name="title_loading"> - [DESC]: laden... - </text> - <text name="title_not_worn"> - [DESC]: niet gedragen - </text> - <text name="path"> - Gelegen in [PATH] - </text> - <text name="not worn instructions"> - Draag nieuw haar door het vanuit uw inventaris naar uw avatar te -slepen. Ook kunt u zelf van begin af aan nieuw creëren en dragen. - </text> - <text name="no modify instructions"> - U heeft geen permissie om dit draagbare item te wijzigen. - </text> - <text name="Item Action Label"> - Haar: - </text> - <texture_picker label="Textuur" name="Texture" tool_tip="Klik om een afbeelding te kiezen"/> - <button label="Nieuw haar maken" label_selected="Nieuw haar maken" name="Create New"/> - <button label="Opslaan" label_selected="Opslaan" name="Save"/> - <button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/> - <button label="Herstel" label_selected="Herstel" name="Revert"/> - </panel> - <panel label="Ogen" name="Eyes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan niet wijzigen - </text> - <text name="title_loading"> - [DESC]: laden... - </text> - <text name="title_not_worn"> - [DESC]: niet gedragen - </text> - <text name="path"> - Gelegen in [PATH] - </text> - <text name="not worn instructions"> - Draag nieuwe ogen door ze vanuit uw inventaris naar uw avatar te -slepen. Ook kunt u zelf van begin af aan nieuwe creëren en dragen. - </text> - <text name="no modify instructions"> - U heeft geen permissie om dit draagbare item te wijzigen. - </text> - <text name="Item Action Label"> - Ogen: - </text> - <texture_picker label="Iris" name="Iris" tool_tip="Klik om een afbeelding te kiezen"/> - <button label="Nieuwe ogen maken" label_selected="Nieuwe ogen maken" name="Create New"/> - <button label="Opslaan" label_selected="Opslaan" name="Save"/> - <button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/> - <button label="Herstel" label_selected="Herstel" name="Revert"/> - </panel> - <panel label="Kleding" name="clothes_placeholder"/> - <panel label="Hemd" name="Shirt"> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/> - <color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/> - <button label="Nieuw hemd maken" label_selected="Nieuw hemd maken" name="Create New"/> - <button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/> - <button label="Opslaan" label_selected="Opslaan" name="Save"/> - <button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/> - <button label="Herstel" label_selected="Herstel" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan niet wijzigen - </text> - <text name="title_loading"> - [DESC]: laden... - </text> - <text name="title_not_worn"> - [DESC]: niet gedragen - </text> - <text name="path"> - Gelegen in [PATH] - </text> - <text name="not worn instructions"> - Draag een nieuw hemd door hem vanuit uw inventaris naar uw avatar te -slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen. - </text> - <text name="no modify instructions"> - U heeft geen permissie om dit draagbare item te wijzigen. - </text> - <text name="Item Action Label"> - Hemd: - </text> - </panel> - <panel label="Broek" name="Pants"> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/> - <color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/> - <button label="Nieuwe broek maken" label_selected="Nieuwe broek maken" name="Create New"/> - <button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/> - <button label="Opslaan" label_selected="Opslaan" name="Save"/> - <button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/> - <button label="Herstel" label_selected="Herstel" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan niet wijzigen - </text> - <text name="title_loading"> - [DESC]: laden... - </text> - <text name="title_not_worn"> - [DESC]: niet gedragen - </text> - <text name="path"> - Gelegen in [PATH] - </text> - <text name="not worn instructions"> - Draag een nieuwe broek door hem vanuit uw inventaris naar uw avatar te -slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen. - </text> - <text name="no modify instructions"> - U heeft geen permissie om dit draagbare item te wijzigen. - </text> - <text name="Item Action Label"> - Broek: - </text> - </panel> - <panel label="Schoenen" name="Shoes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan niet wijzigen - </text> - <text name="title_loading"> - [DESC]: laden... - </text> - <text name="title_not_worn"> - [DESC]: niet gedragen - </text> - <text name="path"> - Gelegen in [PATH] - </text> - <text name="not worn instructions"> - Draag nieuwe schoenen door ze vanuit uw inventaris naar uw avatar te -slepen. Ook kunt u zelf van begin af aan nieuwe creëren en dragen. - </text> - <text name="no modify instructions"> - U heeft geen permissie om dit draagbare item te wijzigen. - </text> - <text name="Item Action Label"> - Schoenen: - </text> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/> - <color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/> - <button label="Nieuwe schoenen maken" label_selected="Nieuwe schoenen maken" name="Create New"/> - <button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/> - <button label="Opslaan" label_selected="Opslaan" name="Save"/> - <button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/> - <button label="Herstel" label_selected="Herstel" name="Revert"/> - </panel> - <panel label="Sokken" name="Socks"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan niet wijzigen - </text> - <text name="title_loading"> - [DESC]: laden... - </text> - <text name="title_not_worn"> - [DESC]: niet gedragen - </text> - <text name="path"> - Gelegen in [PATH] - </text> - <text name="not worn instructions"> - Draag nieuwe sokken door ze vanuit uw inventaris naar uw avatar te -slepen. Ook kunt u zelf van begin af aan nieuwe creëren en dragen. - </text> - <text name="no modify instructions"> - U heeft geen permissie om dit draagbare item te wijzigen. - </text> - <text name="Item Action Label"> - Sokken: - </text> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/> - <color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/> - <button label="Nieuwe sokken maken" label_selected="Nieuwe sokken maken" name="Create New"/> - <button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/> - <button label="Opslaan" label_selected="Opslaan" name="Save"/> - <button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/> - <button label="Herstel" label_selected="Herstel" name="Revert"/> - </panel> - <panel label="Jas" name="Jacket"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan niet wijzigen - </text> - <text name="title_loading"> - [DESC]: laden... - </text> - <text name="title_not_worn"> - [DESC]: niet gedragen - </text> - <text name="path"> - Gelegen in [PATH] - </text> - <text name="not worn instructions"> - Draag een nieuwe jas door hem vanuit uw inventaris naar uw avatar te -slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen. - </text> - <text name="no modify instructions"> - U heeft geen permissie om dit draagbare item te wijzigen. - </text> - <text name="Item Action Label"> - Jas: - </text> - <texture_picker width="78" label="Bovenste stof" name="Upper Fabric" tool_tip="Klik om een afbeelding te kiezen"/> - <texture_picker width="78" label="Onderste stof" name="Lower Fabric" tool_tip="Klik om een afbeelding te kiezen"/> - <color_swatch width="78" label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/> - <button label="Nieuwe jas maken" label_selected="Nieuwe jas maken" name="Create New"/> - <button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/> - <button label="Opslaan" label_selected="Opslaan" name="Save"/> - <button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/> - <button label="Herstel" label_selected="Herstel" name="Revert"/> - </panel> - <panel label="Handschoenen" name="Gloves"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan niet wijzigen - </text> - <text name="title_loading"> - [DESC]: laden... - </text> - <text name="title_not_worn"> - [DESC]: niet gedragen - </text> - <text name="path"> - Gelegen in [PATH] - </text> - <text name="not worn instructions"> - Draag nieuwe handschoenen door ze vanuit uw inventaris naar uw avatar -te slepen. Ook kunt u zelf van begin af aan nieuwe creëren en dragen. - </text> - <text name="no modify instructions"> - U heeft geen permissie om dit draagbare item te wijzigen. - </text> - <text name="Item Action Label"> - Handschoenen: - </text> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/> - <color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/> - <button label="Nieuwe handschoenen maken" label_selected="Nieuwe handschoenen maken" name="Create New" width="190"/> - <button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/> - <button label="Opslaan" label_selected="Opslaan" name="Save"/> - <button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/> - <button label="Herstel" label_selected="Herstel" name="Revert"/> - </panel> - <panel label="Onderhemd" name="Undershirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan niet wijzigen - </text> - <text name="title_loading"> - [DESC]: laden... - </text> - <text name="title_not_worn"> - [DESC]: niet gedragen - </text> - <text name="path"> - Gelegen in [PATH] - </text> - <text name="not worn instructions"> - Draag een nieuw onderhemd door hem vanuit uw inventaris naar uw avatar -te slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen. - </text> - <text name="no modify instructions"> - U heeft geen permissie om dit draagbare item te wijzigen. - </text> - <text name="Item Action Label"> - Onderhemd: - </text> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/> - <color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/> - <button label="Nieuw onderhemd maken" label_selected="Nieuw onderhemd maken" name="Create New"/> - <button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/> - <button label="Opslaan" label_selected="Opslaan" name="Save"/> - <button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/> - <button label="Herstel" label_selected="Herstel" name="Revert"/> - </panel> - <panel label="Onderbroek" name="Underpants"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan niet wijzigen - </text> - <text name="title_loading"> - [DESC]: laden... - </text> - <text name="title_not_worn"> - [DESC]: niet gedragen - </text> - <text name="path"> - Gelegen in [PATH] - </text> - <text name="not worn instructions"> - Draag een nieuwe onderbroek door hem vanuit uw inventaris naar uw -avatar te slepen. Ook kunt u zelf van begin af aan een nieuwe creëren -en dragen. - </text> - <text name="no modify instructions"> - U heeft geen permissie om dit draagbare item te wijzigen. - </text> - <text name="Item Action Label"> - Onderbroek: - </text> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/> - <color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/> - <button label="Nieuwe onderbroek maken" label_selected="Nieuwe onderbroek maken" name="Create New"/> - <button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/> - <button label="Opslaan" label_selected="Opslaan" name="Save"/> - <button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/> - <button label="Herstel" label_selected="Herstel" name="Revert"/> - </panel> - <panel label="Rok" name="Skirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Kan niet wijzigen - </text> - <text name="title_loading"> - [DESC]: laden... - </text> - <text name="title_not_worn"> - [DESC]: niet gedragen - </text> - <text name="path"> - Gelegen in [PATH] - </text> - <text name="not worn instructions"> - Draag een nieuwe rok door hem vanuit uw inventaris naar uw avatar te -slepen. Ook kunt u zelf van begin af aan een nieuwe creëren en dragen. - </text> - <text name="no modify instructions"> - U heeft geen permissie om dit draagbare item te wijzigen. - </text> - <text name="Item Action Label"> - Rok: - </text> - <texture_picker label="Stof" name="Fabric" tool_tip="Klik om een afbeelding te kiezen"/> - <color_swatch label="Kleur/tint" name="Color/Tint" tool_tip="Klik om de kleurkiezer te openen"/> - <button label="Nieuwe rok maken" label_selected="Nieuwe rok maken" name="Create New"/> - <button label="Uitdoen" label_selected="Uitdoen" name="Take Off"/> - <button label="Opslaan" label_selected="Opslaan" name="Save"/> - <button label="Opslaan als..." label_selected="Opslaan als..." name="Save As"/> - <button label="Herstel" label_selected="Herstel" name="Revert"/> - </panel> - </tab_container> - <scroll_container name="panel_container"/> - <button label="Annuleren" label_selected="Annuleren" name="Cancel"/> - <button label="OK" label_selected="OK" name="Ok"/> - <button label="Maak kleding..." label_selected="Maak kleding..." name="Make Outfit" left="110"/> -</floater> diff --git a/indra/newview/skins/default/xui/nl/floater_im.xml b/indra/newview/skins/default/xui/nl/floater_im.xml deleted file mode 100644 index 3167af5321..0000000000 --- a/indra/newview/skins/default/xui/nl/floater_im.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<multi_floater name="im_floater" title="Instant Message"> - <string name="only_user_message"> - U bent de enige gebruiker in deze sessie. - </string> - <string name="offline_message"> - [FIRST] [LAST] is offline. - </string> - <string name="invite_message"> - Klik de [BUTTON NAME] knop om deze voicechat te accepteren/verbinden. - </string> - <string name="muted_message"> - U heeft deze inwoner genegeerd. Door het sturen van een bericht zal deze automatisch van de negeerlijst verwijderd worden. - </string> - <string name="generic_request_error"> - Fout tijdens het maken van het verzoek, probeer het later nog een keer. - </string> - <string name="insufficient_perms_error"> - U heeft niet voldoende permissies. - </string> - <string name="session_does_not_exist_error"> - De sessie bestaat niet meer - </string> - <string name="no_ability_error"> - U beschikt niet over die mogelijkheid. - </string> - <string name="not_a_mod_error"> - U bent geen sessie moderateur - </string> - <string name="muted_error"> - Een groepsmoderator heeft uw textchat uitgeschakeld. - </string> - <string name="add_session_event"> - Kan geen gebruikers toevoegen aan chatsessie met [RECIPIENT]. - </string> - <string name="message_session_event"> - Kan uw bericht niet versturen naar de chatsessie met [RECIPIENT]. - </string> - <string name="removed_from_group"> - U bent verwijderd uit de groep. - </string> - <string name="close_on_no_ability"> - U heeft niet langer de mogelijkheid om in deze chatsessie te zijn. - </string> -</multi_floater> diff --git a/indra/newview/skins/default/xui/nl/floater_my_friends.xml b/indra/newview/skins/default/xui/nl/floater_my_friends.xml deleted file mode 100644 index 8d709d3c00..0000000000 --- a/indra/newview/skins/default/xui/nl/floater_my_friends.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_my_friends" title="CONTACTEN"> - <tab_container name="friends_and_groups"> - <panel label="Vrienden" name="friends_panel"/> - <panel label="Groepen" name="groups_panel"/> - </tab_container> -</floater> diff --git a/indra/newview/skins/default/xui/nl/floater_statistics.xml b/indra/newview/skins/default/xui/nl/floater_statistics.xml deleted file mode 100644 index 7684a73663..0000000000 --- a/indra/newview/skins/default/xui/nl/floater_statistics.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="STATISTIEKEN"/> diff --git a/indra/newview/skins/default/xui/nl/panel_audio_device.xml b/indra/newview/skins/default/xui/nl/panel_audio_device.xml deleted file mode 100644 index fd5dda799f..0000000000 --- a/indra/newview/skins/default/xui/nl/panel_audio_device.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="device_settings"> - <text name="Audio Devices"> - Audioapparaten - </text> - <text name="Input device (microphone):"> - Invoerapparaat (microfoon): - </text> - <text name="Output device (speakers):"> - Uitvoerapparaat (luidsprekers) - </text> - <text name="Input level:"> - Invoerniveau - </text> - <text_editor name="voice_intro_text1"> - Wijzig de schuifbalk om in te stellen hoe luid u klinkt voor andere inwoners. Spreek gewoon in uw microfoon om het invoerniveau te testen. - </text_editor> - <volume_slider name="mic_volume_slider" tool_tip="Wijzig het volume met deze schuifknop"/> - <text name="wait_text"> - Wacht u alstublieft - </text> - <string name="default_text"> - Standaard - </string> -</panel> diff --git a/indra/newview/skins/default/xui/nl/panel_friends.xml b/indra/newview/skins/default/xui/nl/panel_friends.xml deleted file mode 100644 index eaf6e5d55b..0000000000 --- a/indra/newview/skins/default/xui/nl/panel_friends.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="friends"> - <string name="Multiple"> - Meerdere vrienden... - </string> - <scroll_list name="friend_list" tool_tip="Houd shift of control ingedrukt terwijl u meerdere vrienden klikt"> - <column name="icon_online_status" tool_tip="Online status"/> - <column label="Naam" name="friend_name" tool_tip="Naam"/> - <column name="icon_visible_online" tool_tip="Vriend kan zien wanneer u online bent"/> - <column name="icon_visible_map" tool_tip="Vriend kan u op de kaart lokaliseren"/> - <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"/> -</panel> diff --git a/indra/newview/skins/default/xui/nl/panel_groups.xml b/indra/newview/skins/default/xui/nl/panel_groups.xml deleted file mode 100644 index a0c77b83ff..0000000000 --- a/indra/newview/skins/default/xui/nl/panel_groups.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="groups"> - <text name="groupdesc"> - Uw huidige actieve groep wordt vet getoond. - </text> - <text name="groupcount" width="300"> - 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"/> -</panel> diff --git a/indra/newview/skins/default/xui/nl/panel_preferences_general.xml b/indra/newview/skins/default/xui/nl/panel_preferences_general.xml index 9d9010a349..7be570b27f 100644 --- a/indra/newview/skins/default/xui/nl/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/nl/panel_preferences_general.xml @@ -78,7 +78,7 @@ <combo_box.item name="Hungarian" label="Magyar (Hongaars) - Bèta"/> <combo_box.item name="Dutch" label="Nederlands - Bèta"/> <combo_box.item name="Polish" label="Polski (Pools) - Bèta"/> - <combo_box.item name="Portugese" label="Portugués (Portugees) - Bèta"/> + <combo_box.item name="Portugese" label="Português (Portugees) - Bèta"/> <combo_box.item name="Russian" label="Русский (Russisch) - Bèta"/> <combo_box.item name="Turkish" label="Türkçe (Turks) - Bèta"/> <combo_box.item name="Ukrainian" label="Українська (Oekraïens) - Bèta"/> diff --git a/indra/newview/skins/default/xui/nl/strings.xml b/indra/newview/skins/default/xui/nl/strings.xml index 25071b5460..1ee26c3f24 100644 --- a/indra/newview/skins/default/xui/nl/strings.xml +++ b/indra/newview/skins/default/xui/nl/strings.xml @@ -912,6 +912,9 @@ <string name="InvFolder Favorite"> Favoriten </string> + <string name="InvFolder favorite"> + Favoriten + </string> <string name="InvFolder Current Outfit"> Huidige Uitrusting </string> 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 c68e1c72ce..0974518a1f 100644 --- a/indra/newview/skins/default/xui/pl/floater_about_land.xml +++ b/indra/newview/skins/default/xui/pl/floater_about_land.xml @@ -223,7 +223,7 @@ Idź do Świat > O Posiadłości albo wybierz inną posiadłość żeby pokaz <text name="Simulator primitive usage:"> Ilość używanych primów: </text> - <text name="objects_available" width="230"> + <text name="objects_available"> [COUNT] z [MAX] ([AVAILABLE] jest dostępne) </text> <text name="Primitives parcel supports:"> @@ -271,11 +271,11 @@ Idź do Świat > O Posiadłości albo wybierz inną posiadłość żeby pokaz <text name="Autoreturn"> Zwracaj obiekty innych Rezydentów (minut, 0 = wyłącz): </text> - <text name="Object Owners:" width="108"> + <text name="Object Owners:"> Właściciel obiektów: </text> - <button label="Odśwież listę" label_selected="Odśwież listę" left="112" name="Refresh List" tool_tip="Refresh Object List"/> - <button label="Zwróć obiekty..." label_selected="Zwróć obiekty..." left="224" name="Return objects..."/> + <button label="Odśwież listę" label_selected="Odśwież listę" name="Refresh List" tool_tip="Refresh Object List"/> + <button label="Zwróć obiekty..." label_selected="Zwróć obiekty..." name="Return objects..."/> <name_list name="owner list"> <name_list.columns label="Typ" name="type"/> <name_list.columns name="online_status"/> diff --git a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml index 0f49061002..1c24e0b35e 100644 --- a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml @@ -30,8 +30,8 @@ <icon name="icon_sound" tool_tip="Dźwięki"/> <check_box label="Tekstury" name="check_texture"/> <icon name="icon_texture" tool_tip="Tekstury"/> - <button font="SansSerifSmall" label="√ Wszystkie" label_selected="Wszystkie" name="check_all" width="115"/> - <button font="SansSerifSmall" label="Żadne" label_selected="Żadne" name="check_none" width="115"/> + <button font="SansSerifSmall" label="√ Wszystkie" label_selected="Wszystkie" name="check_all"/> + <button font="SansSerifSmall" label="Żadne" label_selected="Żadne" name="check_none"/> <text name="newperms"> Nowe prawa zawartości </text> diff --git a/indra/newview/skins/default/xui/pl/floater_customize.xml b/indra/newview/skins/default/xui/pl/floater_customize.xml deleted file mode 100644 index 373e74ffe0..0000000000 --- a/indra/newview/skins/default/xui/pl/floater_customize.xml +++ /dev/null @@ -1,529 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="WYGLĄD"> - <tab_container name="customize tab container"> - <text label="Części ciała" name="body_parts_placeholder"> - Części ciała - </text> - <panel label="Kształt" name="Shape"> - <button label="Wróć" label_selected="Wróć" name="Revert"/> - <button label="Ciało" label_selected="Ciało" name="Body"/> - <button label="Głowa" label_selected="Głowa" name="Head"/> - <button label="Oczy" label_selected="Oczy" name="Eyes"/> - <button label="Uszy" label_selected="Uszy" name="Ears"/> - <button label="Nos" label_selected="Nos" name="Nose"/> - <button label="Usta" label_selected="Usta" name="Mouth"/> - <button label="Broda " label_selected="Broda" name="Chin"/> - <button label="Tułów" label_selected="Tułów" name="Torso"/> - <button label="Nogi" label_selected="Nogi" name="Legs"/> - <radio_group name="sex radio"> - <radio_item label="Kobieta" name="radio" value="0"/> - <radio_item label="Mężczyzna" name="radio2" value="1"/> - </radio_group> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: zabroniona modyfikacja - </text> - <text name="title_loading"> - [DESC]: ładowanie... - </text> - <text name="title_not_worn"> - [DESC]: niezałożone - </text> - <text name="path"> - Zapisane w [PATH] - </text> - <text name="not worn instructions"> - Załóż nowy kształt poprzez przeciągnięcie go ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny kształt z plików roboczych. - </text> - <text name="no modify instructions"> - Nie posiadasz prawa do modyfikowania tego kształtu. - </text> - <text name="Item Action Label"> - Kształt: - </text> - <button label="Nowy kształt" label_selected="Nowy kształt" name="Create New"/> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> - </panel> - <panel label="Skórka" name="Skin"> - <button label="Kolor skórki" label_selected="Kolor skórki" name="Skin Color"/> - <button label="Detale twarzy" label_selected="Detale twarzy" name="Face Detail"/> - <button label="Makijaż" label_selected="Makijaż" name="Makeup"/> - <button label="Detale ciała" label_selected="Detale ciała" name="Body Detail"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: modyfikacja zabroniona - </text> - <text name="title_loading"> - [DESC]: ładowanie... - </text> - <text name="title_not_worn"> - [DESC]: niezałożone - </text> - <text name="path"> - Zapisane w [PATH] - </text> - <text name="not worn instructions"> - Załóż nową skórkę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną skórkę z plików roboczych. - </text> - <text name="no modify instructions"> - Nie posiadasz prawa do modyfikowania tej skórki. - </text> - <text name="Item Action Label"> - Skórka: - </text> - <texture_picker label="Tatuaże głowy" name="Head Tattoos" tool_tip="Kliknij by wybrać teksturę"/> - <texture_picker label="Tatuaże górne" name="Upper Tattoos" tool_tip="Kliknij by wybrać teksturę"/> - <texture_picker label="Tatuaże dolne" name="Lower Tattoos" tool_tip="Kliknij by wybrać teksturę"/> - <button label="Nowa skórka" label_selected="Nowa skórka" name="Create New"/> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> - <button label="Wróć" label_selected="Wróć" name="Revert"/> - </panel> - <panel label="Włosy" name="Hair"> - <button label="Kolor" label_selected="Kolor" name="Color"/> - <button label="Styl" label_selected="Styl" name="Style"/> - <button label="Brwi" label_selected="Brwi" name="Eyebrows"/> - <button label="Twarzy" label_selected="Twarzy" name="Facial"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: modyfikacja zabroniona - </text> - <text name="title_loading"> - [DESC]: ładowanie... - </text> - <text name="title_not_worn"> - [DESC]: niezałożone - </text> - <text name="path"> - Zapisane w [PATH] - </text> - <text name="not worn instructions"> - Załóż nowe włosy poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne włosy z plików roboczych. - </text> - <text name="no modify instructions"> - Nie posiadasz prawa do modyfikowania tych włosów. - </text> - <text name="Item Action Label"> - Włosy: - </text> - <texture_picker label="Tekstura" name="Texture" tool_tip="Kliknij by wybrać teksturę"/> - <button label="Nowe włosy" label_selected="Nowe włosy" name="Create New"/> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> - <button label="Wróć" label_selected="Wróć" name="Revert"/> - </panel> - <panel label="Oczy" name="Eyes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: modyfikacja zabroniona - </text> - <text name="title_loading"> - [DESC]: ładowanie... - </text> - <text name="title_not_worn"> - [DESC]: niezałożone - </text> - <text name="path"> - Zapisane w [PATH] - </text> - <text name="not worn instructions"> - Załóż nowe oczy poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne oczy z plików roboczych. - </text> - <text name="no modify instructions"> - Nie posiadasz prawa do modyfikowania tych oczów. - </text> - <text name="Item Action Label"> - Oczy: - </text> - <texture_picker label="Tęczówka" name="Iris" tool_tip="Kliknij by wybrać teksturę"/> - <button label="Nowe oczy" label_selected="Nowe oczy" name="Create New"/> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> - <button label="Wróć" label_selected="Wróć" name="Revert"/> - </panel> - <text label="Ubrania" name="clothes_placeholder"> - Ubrania - </text> - <panel label="Koszula" name="Shirt"> - <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> - <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> - <button label="Nowa koszula" label_selected="Nowa Koszula" name="Create New"/> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> - <button label="Wróć" label_selected="Wróć" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: modyfikowanie zabronione - </text> - <text name="title_loading"> - [DESC]: ładowanie... - </text> - <text name="title_not_worn"> - [DESC]: niezałożone - </text> - <text name="path"> - Zapisane w [PATH] - </text> - <text name="not worn instructions"> - Załóż nową koszulę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną koszulę z plików roboczych. - </text> - <text name="no modify instructions"> - Nie posiadasz prawa do modyfikowania tej koszuli. - </text> - <text name="Item Action Label"> - Koszula: - </text> - </panel> - <panel label="Spodnie" name="Pants"> - <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij tutaj by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> - <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> - <button label="Nowe spodnie" label_selected="Nowe spodnie" name="Create New"/> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> - <button label="Wróć" label_selected="Wróć" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: modyfikcja zabroniona - </text> - <text name="title_loading"> - [DESC]: ładowanie... - </text> - <text name="title_not_worn"> - [DESC]: niezałożone - </text> - <text name="path"> - Zapisane w [PATH] - </text> - <text name="not worn instructions"> - Załóż nowe spodnie poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne spodnie z plików roboczych. - </text> - <text name="no modify instructions"> - Nie posiadasz prawa do modyfikowania tych spodni. - </text> - <text name="Item Action Label"> - Spodnie: - </text> - </panel> - <panel label="Buty" name="Shoes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: modyfikacja zabroniona - </text> - <text name="title_loading"> - [DESC]: ładwanie... - </text> - <text name="title_not_worn"> - [DESC]: niezałożone - </text> - <text name="path"> - Zapisane w [PATH] - </text> - <text name="not worn instructions"> - Załóż nowe buty poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne buty z plików roboczych. - </text> - <button label="Nowe Buty" label_selected="Nowe Buty" name="Create New"/> - <text name="no modify instructions"> - Nie posiadasz prawa do modyfikowania tych butów. - </text> - <text name="Item Action Label"> - Buty: - </text> - <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> - <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> - <button label="Wróć" label_selected="Wróć" name="Revert"/> - </panel> - <panel label="Skarpety" name="Socks"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: modyfikacja zabroniona - </text> - <text name="title_loading"> - [DESC]: ładowanie... - </text> - <text name="title_not_worn"> - [DESC]: niezałożone - </text> - <text name="path"> - Zapisane w [PATH] - </text> - <text name="not worn instructions"> - Załóż nowe skarpety poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne skarpety z plików roboczych. - </text> - <button label="Nowe Skarpety" label_selected="Nowe Skarpety" name="Create New"/> - <text name="no modify instructions"> - Nie posiadasz prawa do modyfikowania tych skarpet. - </text> - <text name="Item Action Label"> - Skarpetki: - </text> - <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> - <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> - <button label="Wróć" label_selected="Wróć" name="Revert"/> - </panel> - <panel label="Kurtka" name="Jacket"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: modyfikacja zabroniona - </text> - <text name="title_loading"> - [DESC]: ładowanie... - </text> - <text name="title_not_worn"> - [DESC]: niezałożone - </text> - <text name="path"> - Zapisane w [PATH] - </text> - <text name="not worn instructions"> - Załóż nową kurtkę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną kurtkę z plików roboczych. - </text> - <button label="Nowa Kurtka" label_selected="Nowa Kurtka" name="Create New"/> - <text name="no modify instructions"> - Nie posiadasz prawa do modyfikowania tej kurtki. - </text> - <text name="Item Action Label"> - Kurtka: - </text> - <texture_picker label="Górny materiał" name="Upper Fabric" tool_tip="Kliknij by wybrać teksturę" width="76"/> - <texture_picker label="Dolny materiał" name="Lower Fabric" tool_tip="Kliknij by wybrać kolor" width="76"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor" width="76"/> - <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> - <button label="Wróć" label_selected="Wróć" name="Revert"/> - </panel> - <panel label="Rękawiczki" name="Gloves"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: modyfikacja zabroniona - </text> - <text name="title_loading"> - [DESC]: ładowanie... - </text> - <text name="title_not_worn"> - [DESC]: niezałożone - </text> - <text name="path"> - Zapisane w [PATH] - </text> - <text name="not worn instructions"> - Załóż nowe rękawiczki poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne rękawiczki z plików roboczych. - </text> - <button label="Nowe Rękawiczki" label_selected="Nowe Rękawiczki" name="Create New"/> - <text name="no modify instructions"> - Nie posiadasz prawa do modyfikowania tych rękawiczek - </text> - <text name="Item Action Label"> - Rękawiczki: - </text> - <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> - <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> - <button label="Wróć" label_selected="Wróć" name="Revert"/> - </panel> - <panel label="Podkoszulek" name="Undershirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: modyfikacja zabroniona - </text> - <text name="title_loading"> - [DESC]: ładowanie... - </text> - <text name="title_not_worn"> - [DESC]: niezałożone - </text> - <text name="path"> - Zapisane w [PATH] - </text> - <text name="not worn instructions"> - Załóż nowy podkoszulek poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny podkoszulek z plików roboczych. - </text> - <button label="Nowy Podkoszulek" label_selected="Nowy Podkoszulek" name="Create New"/> - <text name="no modify instructions"> - Nie posiadasz prawa do modyfikowania tego podkoszulka. - </text> - <text name="Item Action Label"> - Podkoszulka: - </text> - <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> - <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> - <button label="Wróć" label_selected="Wróć" name="Revert"/> - </panel> - <panel label="Bielizna" name="Underpants"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: modyfikacja zabroniona - </text> - <text name="title_loading"> - [DESC]: ładowanie... - </text> - <text name="title_not_worn"> - [DESC]: niezałożone - </text> - <text name="path"> - Zapisane w [PATH] - </text> - <text name="not worn instructions"> - Załóż nową bieliznę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną bieliznę z plików roboczych. - </text> - <button label="Nowa Bielizna" label_selected="Nowa Bielizna" name="Create New"/> - <text name="no modify instructions"> - Nie posiadasz prawa do modyfikowania tej bielizny. - </text> - <text name="Item Action Label"> - Bielizna: - </text> - <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> - <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> - <button label="Wróć" label_selected="Wróć" name="Revert"/> - </panel> - <panel label="Spódnica" name="Skirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: modyfikacja zabroniona - </text> - <text name="title_loading"> - [DESC]: ładowanie... - </text> - <text name="title_not_worn"> - [DESC]: niezałożone - </text> - <text name="path"> - Zapisane w [PATH] - </text> - <text name="not worn instructions"> - Załóż nową spódnicę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną spódnicę z plików roboczych. - </text> - <button label="Nowa Spódnica" label_selected="Nowa Spódnica" name="Create New"/> - <text name="no modify instructions"> - Nie posiadasz prawa do modyfikowania tej spódnicy. - </text> - <text name="Item Action Label"> - Spódnica: - </text> - <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> - <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> - <button label="Wróć" label_selected="Wróć" name="Revert"/> - </panel> - <panel label="Tatuaż" name="Tattoo"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: nie można modyfikować - </text> - <text name="title_loading"> - [DESC]: ładowanie... - </text> - <text name="title_not_worn"> - [DESC]: nienałożone - </text> - <text name="path"> - Zapisane w [PATH] - </text> - <text name="not worn instructions"> - Załóż nowy tatuaż poprzez przeciągnięcie go ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny tatuaż z plików roboczych. - </text> - <button label="Utwórz Nowy Tatuaż" label_selected="Stwórz Nowy Tatuaż" name="Create New"/> - <text name="no modify instructions"> - Nie posiadasz uprawnień do modyfikowania tych ubrań/części ciała. - </text> - <text name="Item Action Label"> - Tatuaż: - </text> - <texture_picker label="Tatuaż głowy" name="Head Tattoo" tool_tip="Kliknij aby wybrać teksturę"/> - <texture_picker label="Górny tatuaż" name="Upper Tattoo" tool_tip="Kliknij aby wybrać teksturę"/> - <texture_picker label="Tatuaż dolnej części ciała" name="Lower Tattoo" tool_tip="Kliknij aby wybrać teksturę"/> - <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> - <button label="Wróć" label_selected="Wróć" name="Revert"/> - </panel> - <panel label="Alpha" name="Alpha"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: nie można modyfikować - </text> - <text name="title_loading"> - [DESC]: ładowanie... - </text> - <text name="title_not_worn"> - [DESC]: nienałożone - </text> - <text name="path"> - Zapisane w [PATH] - </text> - <text name="not worn instructions"> - Załóż nową maskę alpha poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną z plików roboczych. - </text> - <button label="Stwórz nową Alpha" label_selected="Utwórz nową Alpha" name="Create New"/> - <text name="no modify instructions"> - Nie posiadasz uprawnień do modyfikowania tych ubrań/części ciała. - </text> - <text name="Item Action Label"> - Alpha: - </text> - <texture_picker label="Dolna Alpha" name="Lower Alpha" tool_tip="Kliknij aby wybrać teksturę"/> - <texture_picker label="Alpha górnej części ciała" name="Upper Alpha" tool_tip="Kliknij aby wybrać teksturę"/> - <texture_picker label="Alpha głowy" name="Head Alpha" tool_tip="Kliknij aby wybrać teksturę"/> - <texture_picker label="Alpha oka" name="Eye Alpha" tool_tip="Kliknij aby wybrać teksturę"/> - <texture_picker label="Alpha włosów" name="Hair Alpha" tool_tip="Kliknij aby wybrać teksturę"/> - <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> - <button label="Wróć" label_selected="Wróć" name="Revert"/> - </panel> - </tab_container> - <button label="Info o skrypcie" label_selected="Info o skrypcie" name="script_info" tool_tip="Pokaż skrypty przyłączone do Twojego awatara"/> - <button label="Stwórz ubranie" label_selected="Stwórz Ubranie" name="make_outfit_btn"/> - <button label="Anuluj" label_selected="Anuluj" name="Cancel"/> - <button label="OK" label_selected="OK" name="Ok"/> -</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_device_settings.xml b/indra/newview/skins/default/xui/pl/floater_device_settings.xml deleted file mode 100644 index c485fb2e29..0000000000 --- a/indra/newview/skins/default/xui/pl/floater_device_settings.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_device_settings" title="USTAWIENIA URZĄDZEŃ KOMUNIKACJI GŁOSOWEJ"/> diff --git a/indra/newview/skins/default/xui/pl/floater_im.xml b/indra/newview/skins/default/xui/pl/floater_im.xml deleted file mode 100644 index e40935ccb7..0000000000 --- a/indra/newview/skins/default/xui/pl/floater_im.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<multi_floater name="im_floater" title="Wiadomość (IM)"> - <string name="only_user_message"> - Jesteś jedynym uczestnikiem tej konferencji. - </string> - <string name="offline_message"> - [FIRST] [LAST] - ta osoba jest obecnie niedostępna. - </string> - <string name="invite_message"> - Kliknij na [BUTTON NAME] przycisk by zaakceptować/dołączyć do tej rozmowy. - </string> - <string name="muted_message"> - Zablokowałeś tego Rezydenta. Wysłanie wiadomości automatycznie odblokuje go. - </string> - <string name="generic_request_error"> - Błąd. Spróbuj ponownie za kilka minut. - </string> - <string name="insufficient_perms_error"> - Nie posiadasz praw do kontynuacji. - </string> - <string name="session_does_not_exist_error"> - Ta konferencja jest już zakończona. - </string> - <string name="no_ability_error"> - Nie posiadesz tego przywileju. - </string> - <string name="not_a_mod_error"> - Nie jesteś moderatorem konferencji. - </string> - <string name="muted_error"> - Moderator wyciszył Cię. - </string> - <string name="add_session_event"> - Niemożliwość dodania Rezydentów do tej konferencji z [RECIPIENT]. - </string> - <string name="message_session_event"> - Nie można wysłać Twojej wiadomości do sesji czatu z [RECIPIENT]. - </string> - <string name="removed_from_group"> - Usunięto Cię z grupy. - </string> - <string name="close_on_no_ability"> - Nie posiadasz praw by uczestniczyć w tej konferencji. - </string> -</multi_floater> diff --git a/indra/newview/skins/default/xui/pl/floater_im_session.xml b/indra/newview/skins/default/xui/pl/floater_im_session.xml index db513f787c..9041ff7416 100644 --- a/indra/newview/skins/default/xui/pl/floater_im_session.xml +++ b/indra/newview/skins/default/xui/pl/floater_im_session.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="panel_im"> <layout_stack name="im_panels"> - <layout_panel label="Panel kontroli wiadomości prywatnej (IM)" name="panel_im_control_panel"/> <layout_panel> <line_editor label="Do" name="chat_editor"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/pl/floater_my_friends.xml b/indra/newview/skins/default/xui/pl/floater_my_friends.xml deleted file mode 100644 index 847c93f891..0000000000 --- a/indra/newview/skins/default/xui/pl/floater_my_friends.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_my_friends" title="KONTAKTY"> - <tab_container name="friends_and_groups"> - <panel label="Znajomi" name="friends_panel"/> - <panel label="Grupy" name="groups_panel"/> - </tab_container> -</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml deleted file mode 100644 index a8d2e10c5f..0000000000 --- a/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title="Stwórz ubranie"> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Anuluj" label_selected="Anuluj" name="Cancel"/> - <text name="Save item as:"> - Zapisz to co mam w tej chwili założone -jako nowy komplet ubrania: - </text> - <line_editor name="name ed"> - [DESC] (nowy) - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_classified.xml b/indra/newview/skins/default/xui/pl/floater_preview_classified.xml deleted file mode 100644 index d3d6588397..0000000000 --- a/indra/newview/skins/default/xui/pl/floater_preview_classified.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="classified_preview" title="INFO O REKLAMIE"> - <floater.string name="Title"> - Reklama: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_event.xml b/indra/newview/skins/default/xui/pl/floater_preview_event.xml deleted file mode 100644 index 5d9e47bc00..0000000000 --- a/indra/newview/skins/default/xui/pl/floater_preview_event.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="event_preview" title="INFO O IMPREZIE"> - <floater.string name="Title"> - Impreza: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml deleted file mode 100644 index a041472f68..0000000000 --- a/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="GESTURKI"/> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml deleted file mode 100644 index 9692fca9cd..0000000000 --- a/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="GESTURKI"> - <text name="trigger_label"> - Czat: - </text> - <text name="key_label"> - Klawiatura: - </text> - <combo_box label="Żaden" name="modifier_combo"/> - <combo_box label="Żaden" name="key_combo"/> - <text name="replace_text" tool_tip="Zmień włączającą frazę na inną. Na przykład zmiana 'witam' na 'cześć' zmieni czat 'Chciałem powiedzieć witam' na 'Chciałem powiedzieć cześć' i pokaże animację!"> - Zamień na: - </text> - <line_editor name="replace_editor" tool_tip="Zmień włączającą frazę na inną. Na przykład zmiana 'witam' na 'cześć' zmieni czat 'Chciałem powiedzieć witam' na 'Chciałem powiedzieć cześć' i pokaże animację"/> -</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml deleted file mode 100644 index a041472f68..0000000000 --- a/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="GESTURKI"/> diff --git a/indra/newview/skins/default/xui/pl/floater_statistics.xml b/indra/newview/skins/default/xui/pl/floater_statistics.xml deleted file mode 100644 index b7025e484d..0000000000 --- a/indra/newview/skins/default/xui/pl/floater_statistics.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="STATYSTYKI"/> diff --git a/indra/newview/skins/default/xui/pl/floater_voice_controls.xml b/indra/newview/skins/default/xui/pl/floater_voice_controls.xml index c222e4edbb..80200cfb21 100644 --- a/indra/newview/skins/default/xui/pl/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/pl/floater_voice_controls.xml @@ -19,10 +19,12 @@ <layout_panel name="my_panel"> <text name="user_text" value="Mój awatar:"/> </layout_panel> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="Zakończ rozmowę" name="leave_call_btn"/> - </layout_panel> - </layout_stack> + <layout_panel name="leave_call_panel"> + <layout_stack name="voice_effect_and_leave_call_stack"> + <layout_panel name="leave_call_btn_panel"> + <button label="Zakończ rozmowę" name="leave_call_btn"/> + </layout_panel> + </layout_stack> + </layout_panel> </layout_stack> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml deleted file mode 100644 index 925295102e..0000000000 --- a/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title=""> - <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Anuluj" label_selected="Anuluj" name="Cancel"/> - <text name="Save item as:"> - Zapisz obiekt w mojej Szafie jako: - </text> - <line_editor name="name ed"> - Nowe [DESC] - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_self.xml b/indra/newview/skins/default/xui/pl/menu_avatar_self.xml index 1091eaa7fb..c824e90d36 100644 --- a/indra/newview/skins/default/xui/pl/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/pl/menu_avatar_self.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Self Pie"> <menu_item_call label="Wstań" name="Stand Up"/> - <context_menu label="Zdejmij ▶" name="Take Off >"> - <context_menu label="Ubrania ▶" name="Clothes >"> + <context_menu label="Zdejmij" name="Take Off >"> + <context_menu label="Ubrania" name="Clothes >"> <menu_item_call label="Koszulę" name="Shirt"/> <menu_item_call label="Spodnie" name="Pants"/> <menu_item_call label="Spódnicę" name="Skirt"/> @@ -16,8 +16,8 @@ <menu_item_call label="Ubranie alpha" name="Self Alpha"/> <menu_item_call label="Wszystko" name="All Clothes"/> </context_menu> - <context_menu label="HUD ▶" name="Object Detach HUD"/> - <context_menu label="Odłącz ▶" name="Object Detach"/> + <context_menu label="HUD" name="Object Detach HUD"/> + <context_menu label="Odłącz" name="Object Detach"/> <menu_item_call label="Odłącz wszystko" name="Detach All"/> </context_menu> <menu_item_call label="Zmień strój" name="Chenge Outfit"/> diff --git a/indra/newview/skins/default/xui/pl/menu_object.xml b/indra/newview/skins/default/xui/pl/menu_object.xml index f25495e8e6..773d4221b2 100644 --- a/indra/newview/skins/default/xui/pl/menu_object.xml +++ b/indra/newview/skins/default/xui/pl/menu_object.xml @@ -10,12 +10,12 @@ <menu_item_call label="Wstań" name="Object Stand Up"/> <menu_item_call label="Sprawdź" name="Object Inspect"/> <menu_item_call label="Przybliż" name="Zoom In"/> - <context_menu label="Załóż na ▶" name="Put On"> + <context_menu label="Załóż na" name="Put On"> <menu_item_call label="Załóż" name="Wear"/> - <context_menu label="Dołącz ▶" name="Object Attach"/> - <context_menu label="Dołącz HUD ▶" name="Object Attach HUD"/> + <context_menu label="Dołącz" name="Object Attach"/> + <context_menu label="Dołącz HUD" name="Object Attach HUD"/> </context_menu> - <context_menu label="Usuń ▶" name="Remove"> + <context_menu label="Usuń" name="Remove"> <menu_item_call label="Raport" name="Report Abuse..."/> <menu_item_call label="Zablokuj" name="Object Mute"/> <menu_item_call label="Zwróć" name="Return..."/> diff --git a/indra/newview/skins/default/xui/pl/menu_participant_list.xml b/indra/newview/skins/default/xui/pl/menu_participant_list.xml index fd6d4dcc3c..9e59102788 100644 --- a/indra/newview/skins/default/xui/pl/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/pl/menu_participant_list.xml @@ -11,7 +11,7 @@ <menu_item_check label="Przeglądaj ikonki" name="View Icons"/> <menu_item_check label="Zablokuj głos" name="Block/Unblock"/> <menu_item_check label="Zablokuj tekst" name="MuteText"/> - <context_menu label="Opcje Moderatora >" name="Moderator Options"> + <context_menu label="Opcje Moderatora" name="Moderator Options"> <menu_item_check label="Czat/IM dozwolony" name="AllowTextChat"/> <menu_item_call label="Wycisz tego uczestnika" name="ModerateVoiceMuteSelected"/> <menu_item_call label="Odblokuj wyciszenie tego uczestnika" name="ModerateVoiceUnMuteSelected"/> diff --git a/indra/newview/skins/default/xui/pl/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/pl/menu_wearable_list_item.xml index b32e4adc5c..b31949a098 100644 --- a/indra/newview/skins/default/xui/pl/menu_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/pl/menu_wearable_list_item.xml @@ -5,8 +5,8 @@ <menu_item_call label="Dodaj" name="wear_add"/> <menu_item_call label="Zdejmij/Odłącz" name="take_off_or_detach"/> <menu_item_call label="Odłącz" name="detach"/> - <context_menu label="Dołącz do ▶" name="wearable_attach_to"/> - <context_menu label="Dołącz do załączników HUD ▶" name="wearable_attach_to_hud"/> + <context_menu label="Dołącz do" name="wearable_attach_to"/> + <context_menu label="Dołącz do załączników HUD" name="wearable_attach_to_hud"/> <menu_item_call label="Zdejmij" name="take_off"/> <menu_item_call label="Edytuj" name="edit"/> <menu_item_call label="Profil obiekty" name="object_profile"/> diff --git a/indra/newview/skins/default/xui/pl/panel_audio_device.xml b/indra/newview/skins/default/xui/pl/panel_audio_device.xml deleted file mode 100644 index 9074296bd5..0000000000 --- a/indra/newview/skins/default/xui/pl/panel_audio_device.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="device_settings"> - <text name="Audio Devices"> - Urządzenia audio - </text> - <text name="Input device (microphone):"> - Urządzenia wejściowe (mikrofon): - </text> - <text name="Output device (speakers):"> - Urządzenia wyjściowe (głośniki): - </text> - <text name="Input level:"> - Poziom wejścia - </text> - <text_editor name="voice_intro_text1"> - Za pomocą suwaka ustaw poziom głośności Twojego mówienia dla innych Rezydentów. W celu przetestowania poziomu wejścia, zacznij mówić do mikrofonu. - </text_editor> - <volume_slider name="mic_volume_slider" - tool_tip="By zmienić poziom głośności użyj suwaka" /> - <text name="wait_text"> - Proszę poczekać - </text> - <string name="default_text"> - Domyślne - </string> -</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_friends.xml b/indra/newview/skins/default/xui/pl/panel_friends.xml deleted file mode 100644 index 9d8dc69a35..0000000000 --- a/indra/newview/skins/default/xui/pl/panel_friends.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="friends"> - <string name="Multiple"> - Znajomi - </string> - <scroll_list name="friend_list" tool_tip="Aby wybrać wielu znajomych za jednym razem przetrzymaj klawisz Shift lub Control"> - <column name="icon_online_status" tool_tip="Status dostępności"/> - <column label="Imię" name="friend_name" tool_tip="Imię"/> - <column name="icon_visible_online" tool_tip="Ta osoba może widzieć czy jesteś w Second Life"/> - <column name="icon_visible_map" tool_tip="Ta osoba może zlokalizować Ciebie na mapie"/> - <column name="icon_edit_mine" tool_tip="Ta osoba może edytować, usunąć lub wziąć Twoje obiekty"/> - <column name="icon_edit_theirs" tool_tip="Możesz edytować obiekty tej osoby"/> - </scroll_list> - <button label="Czat/IM" name="im_btn" tool_tip="Rozpocznij sesję czatu/IM"/> - <button label="Profil" name="profile_btn" tool_tip="Pokaż zdjęcia, grupy i inne informacje"/> - <button label="Teleportuj" name="offer_teleport_btn" tool_tip="Zaoferuj teleportację do siebie"/> - <button label="Zapłać" name="pay_btn" tool_tip="Zapłać L$ tej osobie"/> - <button label="Usuń" name="remove_btn" tool_tip="Usuń tę osobę z listy znajomych"/> - <button label="Dodaj" name="add_btn" tool_tip="Zaoferuj znajomość"/> -</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_groups.xml b/indra/newview/skins/default/xui/pl/panel_groups.xml deleted file mode 100644 index 671d8fd2f0..0000000000 --- a/indra/newview/skins/default/xui/pl/panel_groups.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="groups"> - <scroll_list name="group list"> - <column label="" name="name" /> - </scroll_list> - <text name="groupdesc"> - Twoja aktywna grupa jest pogrubiona. - </text> - <text name="groupcount"> - Należysz do [COUNT] grup (maksimum to [MAX]). - </text> - <button label="Czat/IM" name="IM" tool_tip="Rozpocznij sesję czatu (IM)" /> - <button label="O grupie" name="Info" /> - <button label="Wybierz" name="Activate" /> - <button label="Opuść" name="Leave" /> - <button label="Stwórz..." name="Create" /> - <button label="Szukaj..." name="Search..." /> -</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml b/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml deleted file mode 100644 index bcecaeabb3..0000000000 --- a/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<!-- All our XML is utf-8 encoded. --> -<panel name="nearby_chat"> - <panel name="chat_caption"> - <text name="sender_name"> - CZAT LOKALNY - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_notes.xml b/indra/newview/skins/default/xui/pl/panel_notes.xml index 35cb7e1bce..ec6008065f 100644 --- a/indra/newview/skins/default/xui/pl/panel_notes.xml +++ b/indra/newview/skins/default/xui/pl/panel_notes.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Notatki & Prywatność" name="panel_notes"> <layout_stack name="layout"> - <panel name="notes_stack"> + <layout_panel name="notes_stack"> <scroll_container name="profile_scroll"> <panel name="profile_scroll_panel"> <text name="status_message" value="Notatki:"/> @@ -11,13 +11,13 @@ <check_box label="Edytowanie, kasowanie lub zabieranie moich obiektów" name="objects_check"/> </panel> </scroll_container> - </panel> - <panel name="notes_buttons_panel"> + </layout_panel> + <layout_panel name="notes_buttons_panel"> <button label="Dodaj do znajomych" name="add_friend" tool_tip="Zaoferuj znajomość Rezydentowi"/> <button label="IM" name="im" tool_tip="Otwórz wiadomości IM"/> <button label="Dzwoń" name="call" tool_tip="Zadzwoń do Rezydenta"/> <button label="Mapa" name="show_on_map_btn" tool_tip="Pokaż Rezydenta na mapie"/> <button label="Teleportuj" name="teleport" tool_tip="Teleportuj"/> - </panel> + </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_online_status.xml b/indra/newview/skins/default/xui/pl/panel_online_status.xml deleted file mode 100644 index fdc489f375..0000000000 --- a/indra/newview/skins/default/xui/pl/panel_online_status.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="friend_online_status" name="friend_online_status"/> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml index 5805df402c..e980d71ce4 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml @@ -56,4 +56,27 @@ <radio_item label="Osobne okna" name="radio" value="0"/> <radio_item label="Etykiety" name="radio2" value="1"/> </radio_group> + <check_box label="Przetłumacz Czat" name="translate_chat_checkbox" /> + <text name="translate_language_text"> + Czat Język: + </text> + <combo_box name="translate_language_combobox"> + <combo_box.item name="System Default Language" label="Domyślny" /> + <combo_box.item name="English" label="English (Angielski)" /> + <combo_box.item name="Danish" label="Dansk (Duński)" /> + <combo_box.item name="German" label="Deutsch (Niemiecki)" /> + <combo_box.item name="Spanish" label="Español (Hiszpański)" /> + <combo_box.item name="French" label="Français (Francuski)" /> + <combo_box.item name="Italian" label="Italiano (Włoski)" /> + <combo_box.item name="Hungarian" label="Magyar (Węgierski)" /> + <combo_box.item name="Dutch" label="Nederlands (Niderlandzki)" /> + <combo_box.item name="Polish" label="Polski" /> + <combo_box.item name="Portugese" label="Português (Portugalski)" /> + <combo_box.item name="Russian" label="Русский (Rosyjski)" /> + <combo_box.item name="Turkish" label="Türkçe (Turecki)" /> + <combo_box.item name="Ukrainian" label="Українська (Ukraiński)" /> + <combo_box.item name="Chinese" label="中文 (简体) (Chiński)" /> + <combo_box.item name="Japanese" label="日本語 (Japoński)" /> + <combo_box.item name="Korean" label="한국어 (Koreański)" /> + </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml index 69686bcdbc..65ea349aec 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml @@ -13,7 +13,7 @@ <combo_box.item label="Italiano (Włoski) - Beta" name="Italian"/> <combo_box.item label="Nederlands (Niderlandzki) - Beta" name="Dutch"/> <combo_box.item label="Polski - Beta" name="Polish"/> - <combo_box.item label="Portugués (Portugalski) - Beta" name="Portugese"/> + <combo_box.item label="Português (Portugalski) - Beta" name="Portugese"/> <combo_box.item label="日本語 (Japoński) - Beta" name="(Japanese)"/> </combo_box> <text name="language_textbox2"> diff --git a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml index a1a9be9242..b5763e1291 100644 --- a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml @@ -13,9 +13,9 @@ 50 </string> <layout_stack name="progress_indicator_area"> - <panel name="media_progress_indicator"> + <layout_panel name="media_progress_indicator"> <progress_bar name="media_progress_bar" tool_tip="Wczytywanie mediów"/> - </panel> + </layout_panel> </layout_stack> <layout_stack name="media_controls"> <layout_panel name="back"> diff --git a/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml b/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml deleted file mode 100644 index 84d7d7ab62..0000000000 --- a/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Region" name="General"> - <text name="region_text_lbl"> - Region: - </text> - <text name="region_text"> - nieznany - </text> - <text name="version_channel_text_lbl"> - Wersja: - </text> - <text name="version_channel_text"> - nieznany - </text> - <text name="region_type_lbl"> - Typ: - </text> - <text name="region_type"> - nieznany - </text> - <check_box label="Zablokuj zmiany terenu" name="block_terraform_check"/> - <check_box label="Zablokuj latanie" name="block_fly_check"/> - <check_box label="Uszkodzenia dozwolone" name="allow_damage_check"/> - <check_box label="Zablokuj popychanie" name="restrict_pushobject"/> - <check_box label="Odsprzedaż dozwolona" name="allow_land_resell_check"/> - <check_box label="Łączenie/Dzielenie dozwolone" name="allow_parcel_changes_check"/> - <check_box label="Zablokuj wyszukiwanie" name="block_parcel_search_check" tool_tip="Pozwól na wyświetlanie nazwy Regionu i Posiadłości w wynikach wyszukiwania"/> - <spinner label="Limit gości" name="agent_limit_spin"/> - <spinner label="Ekstra obiekty" name="object_bonus_spin"/> - <text label="Restrykcje wieku" name="access_text"> - Rodzaj: - </text> - <combo_box label="Moderuj" name="access_combo"> - <combo_box.item label="Adult" name="Adult"/> - <combo_box.item label="Moderate" name="Mature"/> - <combo_box.item label="General" name="PG"/> - </combo_box> - <button label="Zastosuj" name="apply_btn"/> - <button label="Teleportuj do Miejsca Startu jednego Rezydenta..." name="kick_btn"/> - <button label="Teleportuj do Miejsca Startu wszystkich Rezydentów..." name="kick_all_btn"/> - <button label="Wyślij wiadomość do Regionu..." name="im_btn"/> - <button label="Obsługa teleportera..." name="manage_telehub_btn"/> -</panel> diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml index e2689720bf..f90e357373 100644 --- a/indra/newview/skins/default/xui/pl/strings.xml +++ b/indra/newview/skins/default/xui/pl/strings.xml @@ -1114,6 +1114,12 @@ <string name="InvFolder Gestures"> Gesturki </string> + <string name="InvFolder Favorite"> + Ulubione + </string> + <string name="InvFolder favorite"> + Ulubione + </string> <string name="InvFolder Current Outfit"> Obecny strój </string> 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 1767a31496..a6b255d432 100644 --- a/indra/newview/skins/default/xui/pt/floater_about_land.xml +++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml @@ -221,60 +221,60 @@ Vá para o menu Mundo > Sobre o terreno ou selecione outro lote para mostrar <text name="Simulator primitive usage:"> Uso de prims: </text> - <text left="214" name="objects_available" width="230"> + <text name="objects_available"> [COUNT] de [MAX] ([AVAILABLE] disponíveis) </text> - <text name="Primitives parcel supports:" width="200"> + <text name="Primitives parcel supports:"> Prims suportados pelo lote: </text> - <text left="214" name="object_contrib_text" width="152"> + <text name="object_contrib_text"> [COUNT] </text> <text name="Primitives on parcel:"> Prims no lote: </text> - <text left="214" name="total_objects_text" width="48"> + <text name="total_objects_text"> [COUNT] </text> - <text left="14" name="Owned by parcel owner:" width="180"> + <text name="Owned by parcel owner:"> Pertencentes ao dono do lote: </text> - <text left="214" name="owner_objects_text" width="48"> + <text name="owner_objects_text"> [COUNT] </text> - <button label="Mostrar" label_selected="Mostrar" name="ShowOwner" right="-135" width="60"/> - <button label="Devolver" name="ReturnOwner..." right="-10" tool_tip="Devolver objetos a seus donos." width="119"/> - <text left="14" name="Set to group:" width="180"> + <button label="Mostrar" label_selected="Mostrar" name="ShowOwner"/> + <button label="Devolver" name="ReturnOwner..." tool_tip="Devolver objetos a seus donos."/> + <text name="Set to group:"> Reservado para o grupo: </text> - <text left="214" name="group_objects_text" width="48"> + <text name="group_objects_text"> [COUNT] </text> - <button label="Mostrar" label_selected="Mostrar" name="ShowGroup" right="-135" width="60"/> - <button label="Devolver" name="ReturnGroup..." right="-10" tool_tip="Devolver objetos a seus donos." width="119"/> - <text left="14" name="Owned by others:" width="128"> + <button label="Mostrar" label_selected="Mostrar" name="ShowGroup"/> + <button label="Devolver" name="ReturnGroup..." tool_tip="Devolver objetos a seus donos."/> + <text name="Owned by others:"> Propriedade de outros: </text> - <text left="214" name="other_objects_text" width="48"> + <text name="other_objects_text"> [COUNT] </text> - <button label="Mostrar" label_selected="Mostrar" name="ShowOther" right="-135" width="60"/> - <button label="Devolver" name="ReturnOther..." right="-10" tool_tip="Devolver objetos a seus donos." width="119"/> - <text left="14" name="Selected / sat upon:" width="193"> + <button label="Mostrar" label_selected="Mostrar" name="ShowOther"/> + <button label="Devolver" name="ReturnOther..." tool_tip="Devolver objetos a seus donos."/> + <text name="Selected / sat upon:"> Selecionado/Sentado: </text> - <text left="214" name="selected_objects_text" width="48"> + <text name="selected_objects_text"> [COUNT] </text> <text name="Autoreturn"> Devolver objetos de outros residentes (p/ desligar tecle 0) </text> - <line_editor name="clean other time" right="-10"/> + <line_editor name="clean other time"/> <text name="Object Owners:"> Donos dos objetos: </text> - <button label="Atualizar lista" label_selected="Atualizar lista" left="118" name="Refresh List" tool_tip="Refresh Object List"/> - <button label="Devolver objetos..." label_selected="Devolver objetos..." left="230" name="Return objects..."/> + <button label="Atualizar lista" label_selected="Atualizar lista" name="Refresh List" tool_tip="Refresh Object List"/> + <button label="Devolver objetos..." label_selected="Devolver objetos..." name="Return objects..."/> <name_list name="owner list"> <name_list.columns label="Tipo" name="type"/> <name_list.columns label="Nome" name="name"/> @@ -340,7 +340,7 @@ Apenas lotes maiores podem ser listados na busca. <check_box label="Seguro (sem danos)" name="check safe" tool_tip="Se ativado, ajusta o terreno para Seguro, impedindo lutas com danos. Se não ativado, lutas com danos é habilitado."/> <check_box label="Proibido empurrar" name="PushRestrictCheck" tool_tip="Evita scripts que empurram. Ativar essa opção ajuda a prevenir comportamentos desordeiros no seu terreno."/> <check_box label="Mostrar terreno nos resultados de busca (L$30/semana)" name="ShowDirectoryCheck" tool_tip="Permitir que as pessoas vejam este terreno nos resultados de busca"/> - <combo_box left="265" name="land category with adult" width="155"> + <combo_box name="land category with adult"> <combo_box.item label="Qualquer categoria" name="item0"/> <combo_box.item label="Locação Linden" name="item1"/> <combo_box.item label="Adulto" name="item2"/> @@ -355,7 +355,7 @@ Apenas lotes maiores podem ser listados na busca. <combo_box.item label="Compras" name="item11"/> <combo_box.item label="Outros" name="item12"/> </combo_box> - <combo_box left="265" name="land category" width="155"> + <combo_box name="land category"> <combo_box.item label="Qualquer categoria" name="item0"/> <combo_box.item label="Locação Linden" name="item1"/> <combo_box.item label="Artes e cultura" name="item3"/> @@ -382,7 +382,7 @@ Apenas lotes maiores podem ser listados na busca. <text name="Teleport Routing: "> Rota de teletransporte: </text> - <combo_box left="140" name="landing type" tool_tip="Rota de Teletransporte -- Selecione como tratar os teletransportes no seu lote." width="160"> + <combo_box name="landing type" tool_tip="Rota de Teletransporte -- Selecione como tratar os teletransportes no seu lote." width="160"> <combo_box.item label="Bloqueado" name="Blocked"/> <combo_box.item label="Ponto de aterrissagem" name="LandingPoint"/> <combo_box.item label="Qualquer lugar" name="Anywhere"/> diff --git a/indra/newview/skins/default/xui/pt/floater_customize.xml b/indra/newview/skins/default/xui/pt/floater_customize.xml deleted file mode 100644 index a9ec0b9b1f..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_customize.xml +++ /dev/null @@ -1,530 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="APARÊNCIA"> - <tab_container name="customize tab container" tab_min_width="115"> - <text label="Corpo" name="body_parts_placeholder"> - Partes do corpo - </text> - <panel label="Forma" name="Shape"> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - <button label="Corpo" label_selected="Corpo" name="Body"/> - <button label="Cabeça" label_selected="Cabeça" name="Head"/> - <button label="Olhos" label_selected="Olhos" name="Eyes"/> - <button label="Orelhas" label_selected="Orelhas" name="Ears"/> - <button label="Nariz" label_selected="Nariz" name="Nose"/> - <button label="Boca" label_selected="Boca" name="Mouth"/> - <button label="Queixo" label_selected="Queixo" name="Chin"/> - <button label="Tórax" label_selected="Tórax" name="Torso"/> - <button label="Pernas" label_selected="Pernas" name="Legs"/> - <radio_group name="sex radio"> - <radio_item label="Feminino" name="radio" value="0"/> - <radio_item label="Masculino" name="radio2" value="1"/> - </radio_group> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possível modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter um físico novo, arraste um do inventário para o seu avatar. Ou crie um novo. - </text> - <text name="no modify instructions"> - Você não tem permissão para modificar esta vestimenta. - </text> - <text name="Item Action Label"> - Forma: - </text> - <button label="Nova" label_selected="Nova" name="Create New"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - </panel> - <panel label="Pele" name="Skin"> - <button label="Cor de pele" label_selected="Cor de pele" name="Skin Color" width="115"/> - <button label="Detalhes faciais" label_selected="Detalhes faciais" name="Face Detail" width="115"/> - <button label="Maquilagem" label_selected="Maquilagem" name="Makeup" width="115"/> - <button label="Detalhes do corpo" label_selected="Detalhes do corpo" name="Body Detail" width="115"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possível modificar - </text> - <text name="title_loading"> - [DESC]: carregando.. - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizada em [PATH] - </text> - <text name="not worn instructions"> - Para obter uma pele nova, arraste uma do inventário para o seu avatar. Ou crie uma pele nova. - </text> - <text name="no modify instructions"> - Você não tem permissão para modificar esta vestimenta. - </text> - <text name="Item Action Label"> - Pele: - </text> - <texture_picker label="Tattoo: cabeça" name="Head Tattoos" tool_tip="Clique para escolher um desenho" width="86"/> - <texture_picker label="Tattoo: superior" name="Upper Tattoos" tool_tip="Clique para escolher um desenho" width="86"/> - <texture_picker label="Tattoo: inferior" name="Lower Tattoos" tool_tip="Clique para escolher um desenho" width="86"/> - <button label="Novo" label_selected="Novo" name="Create New"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Cabelo" name="Hair"> - <button label="Cor" label_selected="Cor" name="Color" width="115"/> - <button label="Estilo" label_selected="Estilo" name="Style" width="115"/> - <button label="Sombrancelhas" label_selected="Sombrancelhas" name="Eyebrows" width="115"/> - <button label="Rosto" label_selected="Rosto" name="Facial" width="115"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possível modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter um cabelo novo, arraste um tipo de cabelo do inventário para o seu avatar. Ou crie um cabelo novo. - </text> - <text name="no modify instructions"> - Você não ter permissão para modificar essa vestimenta. - </text> - <text name="Item Action Label"> - Cabelo: - </text> - <texture_picker label="Texture" name="Texture" tool_tip="Clique para escolher uma imagem"/> - <button label="Criar novo cabelo" label_selected="Criar novo cabelo" name="Create New"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Olhos" name="Eyes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possível modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter novos olhos, arraste um tipo de olhos do inventário para o seu avatar. Ou crie olhos novos. - </text> - <text name="no modify instructions"> - Você não tem permissão para alterar esta vestimenta. - </text> - <text name="Item Action Label"> - Olhos: - </text> - <texture_picker label="Íris" name="Iris" tool_tip="Clique para escolher uma imagem"/> - <button label="Criar novos olhos" label_selected="Criar novos olhos" name="Create New"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <text label="Roupas" name="clothes_placeholder"> - Roupa - </text> - <panel label="Camisa" name="Shirt"> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Criar nova camisa" label_selected="Criar nova camisa" name="Create New"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possível modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter uma camisa nova, arraste uma do inventário para o seu avatar. Ou crie uma camisa nova. - </text> - <text name="no modify instructions"> - Você não ter permissão para modificar esta vestimenta. - </text> - <text name="Item Action Label"> - Camisa: - </text> - </panel> - <panel label="Calças" name="Pants"> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Criar novas calças" label_selected="Criar novas calças" name="Create New"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possível modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestindo - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter calças novas, arraste uma do inventário para o seu avatar. Ou crie calças novas. - </text> - <text name="no modify instructions"> - Você não tem permissão para modificar esta vestimenta. - </text> - <text name="Item Action Label"> - Calças: - </text> - </panel> - <panel label="Sapatos" name="Shoes"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possível modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter novos olhos, arraste um tipo de olhos do inventário para o seu avatar. Ou crie olhos novos. - </text> - <button label="Criar novos sapatos" label_selected="Criar novos sapatos" name="Create New" width="166"/> - <text name="no modify instructions"> - Você não tem permissão para modificar esta vestimenta. - </text> - <text name="Item Action Label"> - Sapatos: - </text> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Meias" name="Socks"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possível modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido. - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter meias novas, arraste um par do inventário para o seu avatar. Ou crie meias novas. - </text> - <button label="Criar novas meias" label_selected="Criar novas meias" name="Create New"/> - <text name="no modify instructions"> - Você não tem permissão para modificar essa vestimenta. - </text> - <text name="Item Action Label"> - Meias: - </text> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Jaqueta" name="Jacket"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: Não foi possível modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para por uma jaqueta nova, arraste uma do inventário para o seu avatar. Ou crie uma jaqueta nova. - </text> - <button label="Criar nova jaqueta" label_selected="Criar nova jaqueta" name="Create New"/> - <text name="no modify instructions"> - Você não tem permissão para modificar esta vestimenta. - </text> - <text name="Item Action Label"> - Jaqueta: - </text> - <texture_picker label="Tecido superior" name="Upper Fabric" tool_tip="Clique para escolher uma imagem." width="84"/> - <texture_picker label="Tecido Inferior" name="Lower Fabric" tool_tip="Clique para escolher uma imagem." width="84"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Luvas" name="Gloves"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possível modificar - </text> - <text name="title_loading"> - [DESC]: carregando.... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter luvas novas, arraste um par do inventário para o seu avatar. Ou crie luvas novas. - </text> - <button label="Criar novas luvas" label_selected="Criar novas luvas" name="Create New"/> - <text name="no modify instructions"> - Você não tem permissão para modificar essa vestimenta. - </text> - <text name="Item Action Label"> - Luvas: - </text> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Camiseta" name="Undershirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possível modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter uma camiseta nova, arraste uma do inventário para o seu avatar. Ou crie uma camiseta nova. - </text> - <button label="Criar nova camiseta" label_selected="Criar nova camiseta" name="Create New"/> - <text name="no modify instructions"> - Você não ter permissão para modificar essa vestimenta. - </text> - <text name="Item Action Label"> - Camiseta: - </text> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Roupas de Baixo" name="Underpants"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possível modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter roupa de baixo nova, arraste um modelo do inventário para o seu avatar. Ou crie uma roupa de baixo nova. - </text> - <button label="Criar novas" label_selected="Criar novas" name="Create New" width="180"/> - <text name="no modify instructions"> - Você não tem permissão para modificar essa vestimenta. - </text> - <text name="Item Action Label"> - Roupas de baixo: - </text> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Saia" name="Skirt"> - <text name="title"> - [DESC] - </text> - <text name="title_no_modify"> - [DESC]: não foi possível modificar - </text> - <text name="title_loading"> - [DESC]: carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localizado em [PATH] - </text> - <text name="not worn instructions"> - Para obter um saia nova, arraste uma saia do inventário para o seu avatar. Ou crie uma saia nova. - </text> - <button label="Criar nova saia" label_selected="Criar nova saia" name="Create New"/> - <text name="no modify instructions"> - Você não tem permissão para modificar esta vestimenta. - </text> - <text name="Item Action Label"> - Saia: - </text> - <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> - <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> - <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Tatuagem" name="Tattoo"> - <text name="title"> - [DESC]: - </text> - <text name="title_no_modify"> - [DESC]: não pode ser modificado - </text> - <text name="title_loading"> - [DESC]: Carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localização: [PATH] - </text> - <text name="not worn instructions"> - Para por uma tatuagem nova, arraste uma tatuagem do inventário para o seu avatar. Ou crie uma tatuagem nova. - </text> - <button label="Criar tatuagem" label_selected="Criar tatuagem" name="Create New"/> - <text name="no modify instructions"> - Você não está autorizado a modificar este acessório. - </text> - <text name="Item Action Label"> - Tatuagem: - </text> - <texture_picker label="Tatuagem na cabeça" name="Head Tattoo" tool_tip="Selecionar imagem"/> - <texture_picker label="Tatuagem parte de cima" name="Upper Tattoo" tool_tip="Selecionar imagem"/> - <texture_picker label="Tatuagem de baixo" name="Lower Tattoo" tool_tip="Selecionar imagem"/> - <button label="Tirar" label_selected="Tirar" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - <panel label="Alpha" name="Alpha"> - <text name="title"> - [DESC]: - </text> - <text name="title_no_modify"> - [DESC]: não pode ser modificado - </text> - <text name="title_loading"> - [DESC]: Carregando... - </text> - <text name="title_not_worn"> - [DESC]: não vestido - </text> - <text name="path"> - Localização: [PATH] - </text> - <text name="not worn instructions"> - Para por uma máscara alpha nova, arraste a máscara do inventário para o seu avatar. Ou crie uma máscara nova. - </text> - <button label="Criar Alpha novo" label_selected="Criar Alpha novo" name="Create New"/> - <text name="no modify instructions"> - Você não está autorizado a modificar este acessório. - </text> - <text name="Item Action Label"> - Alpha: - </text> - <texture_picker label="Alpha inferior" name="Lower Alpha" tool_tip="Selecionar imagem"/> - <texture_picker label="Alpha de cima" name="Upper Alpha" tool_tip="Selecionar imagem"/> - <texture_picker label="Cabeça Alpha" name="Head Alpha" tool_tip="Selecionar imagem"/> - <texture_picker label="Olhos Alpha" name="Eye Alpha" tool_tip="Selecionar imagem"/> - <texture_picker label="Cabelo alpha" name="Hair Alpha" tool_tip="Selecionar imagem"/> - <button label="Tirar" label_selected="Tirar" name="Take Off"/> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> - <button label="Reverter" label_selected="Reverter" name="Revert"/> - </panel> - </tab_container> - <scroll_container left="249" name="panel_container"/> - <button label="Dados do script" label_selected="Dados do script" name="script_info" tool_tip="Mostrar scripts anexados ao seu avatar"/> - <button label="Criar look" label_selected="Criar look" name="make_outfit_btn"/> - <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <button label="OK" label_selected="OK" name="Ok"/> -</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 306487939e..9560a3b418 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 @@ -52,8 +52,8 @@ Duração do Ciclo: </text> <spinner label="Hora" name="WLLengthOfDayHour"/> - <spinner label="Minuto" name="WLLengthOfDayMin"/> - <spinner label="Segundo" name="WLLengthOfDaySec"/> + <spinner label="Min." name="WLLengthOfDayMin"/> + <spinner label="Seg." name="WLLengthOfDaySec"/> <text name="DayCycleText3"> Visualizar </text> diff --git a/indra/newview/skins/default/xui/pt/floater_device_settings.xml b/indra/newview/skins/default/xui/pt/floater_device_settings.xml deleted file mode 100644 index 48a4a6ef6f..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_device_settings.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_device_settings" title="CONFIGURAÇÃO DE DISPOSITIVO DE VOZ"/> diff --git a/indra/newview/skins/default/xui/pt/floater_im.xml b/indra/newview/skins/default/xui/pt/floater_im.xml deleted file mode 100644 index c81d0dd7ef..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_im.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<multi_floater name="im_floater" title="Mensagem Instantânea"> - <string name="only_user_message"> - Você é o único residente nesta sessão - </string> - <string name="offline_message"> - [FIRST] [LAST] está offline. - </string> - <string name="invite_message"> - Clique no botão [BUTTON NAME] para aceitar/ conectar a este bate-papo em voz. - </string> - <string name="muted_message"> - Você bloqueou este residente. Se quiser retirar o bloqueio, basta enviar uma mensagem. - </string> - <string name="generic_request_error"> - Erro na requisição, por favor, tente novamente. - </string> - <string name="insufficient_perms_error"> - Você não tem permissões suficientes. - </string> - <string name="session_does_not_exist_error"> - A sessão deixou de existir - </string> - <string name="no_ability_error"> - Você não possui esta habilidade. - </string> - <string name="not_a_mod_error"> - Você não é um moderador de sessão. - </string> - <string name="muted_error"> - Um moderador do grupo desabilitou seu bate-papo em texto. - </string> - <string name="add_session_event"> - Não foi possível adicionar residentes ao bate-papo com [RECIPIENT]. - </string> - <string name="message_session_event"> - Não foi possível enviar sua mensagem na sessão de bate- papo com [RECIPIENT]. - </string> - <string name="removed_from_group"> - Você foi removido do grupo. - </string> - <string name="close_on_no_ability"> - Você não possui mais a habilidade de estar na sessão de bate-papo. - </string> -</multi_floater> diff --git a/indra/newview/skins/default/xui/pt/floater_im_session.xml b/indra/newview/skins/default/xui/pt/floater_im_session.xml index 39dde3408b..5543ffa41d 100644 --- a/indra/newview/skins/default/xui/pt/floater_im_session.xml +++ b/indra/newview/skins/default/xui/pt/floater_im_session.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="panel_im"> <layout_stack name="im_panels"> - <layout_panel label="Painel de controle de MI" name="panel_im_control_panel"/> <layout_panel> <line_editor label="Para" name="chat_editor"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/pt/floater_my_friends.xml b/indra/newview/skins/default/xui/pt/floater_my_friends.xml deleted file mode 100644 index 68f2a19998..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_my_friends.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_my_friends" title="CONTATOS"> - <tab_container name="friends_and_groups"> - <panel label="Amigos" name="friends_panel"/> - <panel label="Grupos" name="groups_panel"/> - </tab_container> -</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml deleted file mode 100644 index dec8a7676a..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title="Salvar este look"> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <text name="Save item as:"> - Veja o meu novo visual: - </text> - <line_editor name="name ed"> - [DESC] (new) - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml b/indra/newview/skins/default/xui/pt/floater_preview_classified.xml deleted file mode 100644 index bb626430ed..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="classified_preview" title="INFORMAÇÕES CLASSIFICADAS"> - <floater.string name="Title"> - Classificados: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_preview_event.xml b/indra/newview/skins/default/xui/pt/floater_preview_event.xml deleted file mode 100644 index b422580f3b..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_preview_event.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="event_preview" title="DADOS DO EVENTO"> - <floater.string name="Title"> - Evento: [NAME] - </floater.string> -</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture_info.xml deleted file mode 100644 index aabcff70d3..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_preview_gesture_info.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="ATALHO DE GESTO"/> diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture_shortcut.xml deleted file mode 100644 index 64bb7785f6..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_preview_gesture_shortcut.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="ATALHO DE GESTO"> - <text name="trigger_label"> - Bate-papo: - </text> - <text name="key_label"> - Tecla: - </text> - <combo_box label="Nenhum" name="modifier_combo"/> - <combo_box label="Nenhum" name="key_combo"/> - <text name="replace_text" tool_tip="Substituir a(s) palavra(s) de comando. Por exemplo, substitua o comando 'olá' por 'oi' para trocar 'Olá, tudo bem' por 'Oi tudo bem'. O gesto também será executado."> - Trocar: - </text> - <line_editor name="replace_editor" tool_tip="Substituir a(s) palavra(s) de comando. Por exemplo, substitua o comando 'olá' por 'oi' para trocar 'Olá, tudo bem' por 'Oi tudo bem'. O gesto também será executado."/> -</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture_steps.xml deleted file mode 100644 index aabcff70d3..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_preview_gesture_steps.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="ATALHO DE GESTO"/> diff --git a/indra/newview/skins/default/xui/pt/floater_statistics.xml b/indra/newview/skins/default/xui/pt/floater_statistics.xml deleted file mode 100644 index ecbf638157..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_statistics.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="stats floater" title="ESTATÍSTICAS"/> diff --git a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml index 44f08b76b5..2337ee3074 100644 --- a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml @@ -19,10 +19,12 @@ <layout_panel name="my_panel"> <text name="user_text" value="Meu avatar:"/> </layout_panel> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="Desligar" name="leave_call_btn"/> - </layout_panel> - </layout_stack> + <layout_panel name="leave_call_panel"> + <layout_stack name="voice_effect_and_leave_call_stack"> + <layout_panel name="leave_call_btn_panel"> + <button label="Desligar" name="leave_call_btn"/> + </layout_panel> + </layout_stack> + </layout_panel> </layout_stack> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml deleted file mode 100644 index 282bf0e268..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="modal container" title=" "> - <button label="Salvar" label_selected="Salvar" name="Save"/> - <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <text name="Save item as:"> - Salvar item no inventário como: - </text> - <line_editor name="name ed"> - Novo [DESC] - </line_editor> -</floater> diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml index 62055303b5..755975f9a5 100644 --- a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Self Pie"> <menu_item_call label="Ficar de pé" name="Stand Up"/> - <context_menu label="Tirar ▶" name="Take Off >"> - <context_menu label="Roupa ▶" name="Clothes >"> + <context_menu label="Tirar" name="Take Off >"> + <context_menu label="Roupa" name="Clothes >"> <menu_item_call label="Camisa" name="Shirt"/> <menu_item_call label="Calças" name="Pants"/> <menu_item_call label="Saia" name="Skirt"/> @@ -16,8 +16,8 @@ <menu_item_call label="Alpha" name="Self Alpha"/> <menu_item_call label="Todas as roupas" name="All Clothes"/> </context_menu> - <context_menu label="HUD ▶" name="Object Detach HUD"/> - <context_menu label="Tirar ▶" name="Object Detach"/> + <context_menu label="HUD" name="Object Detach HUD"/> + <context_menu label="Tirar" name="Object Detach"/> <menu_item_call label="Tirar tudo" name="Detach All"/> </context_menu> <menu_item_call label="Trocar de look" name="Chenge Outfit"/> diff --git a/indra/newview/skins/default/xui/pt/menu_object.xml b/indra/newview/skins/default/xui/pt/menu_object.xml index cd1a72b896..26512fb286 100644 --- a/indra/newview/skins/default/xui/pt/menu_object.xml +++ b/indra/newview/skins/default/xui/pt/menu_object.xml @@ -12,10 +12,10 @@ <menu_item_call label="Mais zoom" name="Zoom In"/> <context_menu label="Colocar no(a)" name="Put On"> <menu_item_call label="Vestir" name="Wear"/> - <context_menu label="Anexar >" name="Object Attach"/> - <context_menu label="Anexar o HUD >" name="Object Attach HUD"/> + <context_menu label="Anexar" name="Object Attach"/> + <context_menu label="Anexar o HUD" name="Object Attach HUD"/> </context_menu> - <context_menu label="Tirar >" name="Remove"> + <context_menu label="Tirar" name="Remove"> <menu_item_call label="Denunciar abuso" name="Report Abuse..."/> <menu_item_call label="Bloquear" name="Object Mute"/> <menu_item_call label="Devolver" name="Return..."/> diff --git a/indra/newview/skins/default/xui/pt/menu_participant_list.xml b/indra/newview/skins/default/xui/pt/menu_participant_list.xml index 01f1d4ef80..ee522210fb 100644 --- a/indra/newview/skins/default/xui/pt/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/pt/menu_participant_list.xml @@ -11,7 +11,7 @@ <menu_item_check label="Ver ícones de pessoas" name="View Icons"/> <menu_item_check label="Bloquear voz" name="Block/Unblock"/> <menu_item_check label="Bloquear texto" name="MuteText"/> - <context_menu label="Opções do moderador >" name="Moderator Options"> + <context_menu label="Opções do moderador" name="Moderator Options"> <menu_item_check label="Pode bater papo por escrito" name="AllowTextChat"/> <menu_item_call label="Silenciar este participante" name="ModerateVoiceMuteSelected"/> <menu_item_call label="Desfazer silenciar deste participante" name="ModerateVoiceUnMuteSelected"/> diff --git a/indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml index f8e8a33521..6dce884348 100644 --- a/indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml @@ -5,8 +5,8 @@ <menu_item_call label="Adicionar" name="wear_add"/> <menu_item_call label="Tirar / Separar" name="take_off_or_detach"/> <menu_item_call label="Separar" name="detach"/> - <context_menu label="Colocar em ▶" name="wearable_attach_to"/> - <context_menu label="Anexar ao HUD ▶" name="wearable_attach_to_hud"/> + <context_menu label="Colocar em" name="wearable_attach_to"/> + <context_menu label="Anexar ao HUD" name="wearable_attach_to_hud"/> <menu_item_call label="Tirar" name="take_off"/> <menu_item_call label="Editar" name="edit"/> <menu_item_call label="Perfil do objeto" name="object_profile"/> diff --git a/indra/newview/skins/default/xui/pt/panel_audio_device.xml b/indra/newview/skins/default/xui/pt/panel_audio_device.xml deleted file mode 100644 index 967dc27070..0000000000 --- a/indra/newview/skins/default/xui/pt/panel_audio_device.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="device_settings"> - <text name="Audio Devices"> - Dispositivos de Áudio - </text> - <text name="Input device (microphone):"> - Dispositivo de entrada (microfone): - </text> - <text name="Output device (speakers):"> - Dispositivo de saída (falantes): - </text> - <text name="Input level:"> - Nível de Entrada - </text> - <text_editor name="voice_intro_text1"> - Ajuste a barra para controlar o volume de som para os outros residentes. Para testar o nível de entrada, basta falar em seu microfone. - </text_editor> - <volume_slider name="mic_volume_slider" tool_tip="Altere o volume usando este controle gradual"/> - <text name="wait_text"> - Por Favor aguarde - </text> - <string name="default_text"> - Padrão - </string> -</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_friends.xml b/indra/newview/skins/default/xui/pt/panel_friends.xml deleted file mode 100644 index 34073f9ce1..0000000000 --- a/indra/newview/skins/default/xui/pt/panel_friends.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="friends"> - <string name="Multiple"> - Diversos amigos - </string> - <scroll_list name="friend_list" tool_tip="Aperte shift ou control enquanto clica para selecionar múltiplos amigos"> - <column name="icon_online_status" tool_tip="Status Online"/> - <column label="Nome" name="friend_name" tool_tip="Nome"/> - <column name="icon_visible_online" tool_tip="Amigo pode ver quando você está online"/> - <column name="icon_visible_map" tool_tip="Amigo pode localizá-lo no mapa"/> - <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 label="MI/Chamar" name="im_btn" tool_tip="Abrir sessão de Mensagem Instantânea" width="86"/> - <button label="Perfil" name="profile_btn" tool_tip="Mostrar foto, grupos e outras informações" width="86"/> - <button label="Teletransportar" name="offer_teleport_btn" tool_tip="Oferecer a este amigo o teletransporte para sua localização atual" width="86"/> - <button label="Pagar" name="pay_btn" tool_tip="Dar Linden dólares (L$) a este amigo" width="86"/> - <button label="Tirar" name="remove_btn" tool_tip="Remover esta pessoa de sua lista de amigos" width="86"/> - <button label="Adicionar" name="add_btn" tool_tip="Oferecer amizade para um residente" width="86"/> -</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_groups.xml b/indra/newview/skins/default/xui/pt/panel_groups.xml deleted file mode 100644 index 0aea0d53dd..0000000000 --- a/indra/newview/skins/default/xui/pt/panel_groups.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="groups"> - <text name="groupdesc" width="268"> - Seu grupo ativo atual está em negrito. - </text> - <text name="groupcount" width="300"> - Você pertence a [COUNT] grupos (máximo [MAX]). - </text> - <button width="86" label="MI/Ligação" 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="Sair" name="Leave"/> - <button width="86" label="Criar..." name="Create"/> - <button width="86" label="Buscar..." name="Search..."/> -</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml b/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml deleted file mode 100644 index bdbf29e70b..0000000000 --- a/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<!-- All our XML is utf-8 encoded. --> -<panel name="nearby_chat"> - <panel name="chat_caption"> - <text name="sender_name"> - Bate-papo local - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_notes.xml b/indra/newview/skins/default/xui/pt/panel_notes.xml index 9aa842d9a5..6fb614a8c4 100644 --- a/indra/newview/skins/default/xui/pt/panel_notes.xml +++ b/indra/newview/skins/default/xui/pt/panel_notes.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Anotações e Privacidade" name="panel_notes"> <layout_stack name="layout"> - <panel name="notes_stack"> + <layout_panel name="notes_stack"> <scroll_container name="profile_scroll"> <panel name="profile_scroll_panel"> <text name="status_message" value="Minhas anotações privadas:"/> @@ -11,13 +11,13 @@ <check_box label="Pegar, editar ou excluir objetos meus" name="objects_check"/> </panel> </scroll_container> - </panel> - <panel name="notes_buttons_panel"> + </layout_panel> + <layout_panel name="notes_buttons_panel"> <button label="Adicionar amigo" name="add_friend" tool_tip="Oferecer amizade ao residente"/> <button label="MI" name="im" tool_tip="Abrir sessão de mensagem instantânea"/> <button label="Ligar" name="call" tool_tip="Ligar para este residente"/> <button label="Mapa" name="show_on_map_btn" tool_tip="Exibir o residente no mapa"/> <button label="Teletransportar" name="teleport" tool_tip="Oferecer teletransporte"/> - </panel> + </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_online_status.xml b/indra/newview/skins/default/xui/pt/panel_online_status.xml deleted file mode 100644 index fdc489f375..0000000000 --- a/indra/newview/skins/default/xui/pt/panel_online_status.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="friend_online_status" name="friend_online_status"/> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml index 02b0ef35fe..1ec674e2e2 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml @@ -56,4 +56,27 @@ <radio_item label="Janelas separadas" name="radio" value="0"/> <radio_item label="Guias" name="radio2" value="1"/> </radio_group> + <check_box label="Traduzir Chat" name="translate_chat_checkbox" /> + <text name="translate_language_text"> + Chat Língua: + </text> + <combo_box name="translate_language_combobox"> + <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)" /> + <combo_box.item name="German" label="Deutsch (Alemão)" /> + <combo_box.item name="Spanish" label="Español (Espanhol)" /> + <combo_box.item name="French" label="Français (Francês)" /> + <combo_box.item name="Italian" label="Italiano" /> + <combo_box.item name="Hungarian" label="Magyar (Húngaro)" /> + <combo_box.item name="Dutch" label="Nederlands (Holandês)" /> + <combo_box.item name="Polish" label="Polski (Polonês)" /> + <combo_box.item name="Portugese" label="Português" /> + <combo_box.item name="Russian" label="Русский (Russo)" /> + <combo_box.item name="Turkish" label="Türkçe (Turco)" /> + <combo_box.item name="Ukrainian" label="Українська (Ucraniano)" /> + <combo_box.item name="Chinese" label="中文 (简体) (Chinês)" /> + <combo_box.item name="Japanese" label="日本語 (Japonês)" /> + <combo_box.item name="Korean" label="한국어 (Coreano)" /> + </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml index a1254b4da0..9e07b6772f 100644 --- a/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml @@ -13,9 +13,9 @@ 50 </string> <layout_stack name="progress_indicator_area"> - <panel name="media_progress_indicator"> + <layout_panel name="media_progress_indicator"> <progress_bar name="media_progress_bar" tool_tip="Carregando mídia"/> - </panel> + </layout_panel> </layout_stack> <layout_stack name="media_controls"> <layout_panel name="back"> diff --git a/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml b/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml deleted file mode 100644 index 534b2826af..0000000000 --- a/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml +++ /dev/null @@ -1,43 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Região" name="General"> - <text name="region_text_lbl"> - Região: - </text> - <text name="region_text"> - (Desconhecido) - </text> - <text name="version_channel_text_lbl"> - Versão: - </text> - <text name="version_channel_text"> - (Desconhecido) - </text> - <text name="region_type_lbl"> - Tipo: - </text> - <text name="region_type"> - (Desconhecido) - </text> - <check_box label="Bloquear terraplanagens" name="block_terraform_check"/> - <check_box label="Bloquear voos" name="block_fly_check"/> - <check_box label="Permitir danos" name="allow_damage_check"/> - <check_box label="Limitar empurrões" name="restrict_pushobject"/> - <check_box label="Permitir revenda de terrenos" name="allow_land_resell_check"/> - <check_box label="Permitir união e divisão de terrenos" name="allow_parcel_changes_check"/> - <check_box label="Não mostrar nos resultados de pesquisa" name="block_parcel_search_check" tool_tip="Mostrar esta região e lotes nos resultados de pesquisa"/> - <spinner label="Limite do agente" name="agent_limit_spin"/> - <spinner label="Bônus do objeto" name="object_bonus_spin"/> - <text label="Nível de maturidade" name="access_text"> - Classificação: - </text> - <combo_box label="Moderado" name="access_combo"> - <combo_box.item label="Público adulto" name="Adult"/> - <combo_box.item label="Moderado" name="Mature"/> - <combo_box.item label="Geral" name="PG"/> - </combo_box> - <button label="Aplicar" name="apply_btn"/> - <button label="Teletransportar um residente para início..." name="kick_btn"/> - <button label="Teletransportar todos para início..." name="kick_all_btn"/> - <button label="Enviar mensagem para região..." name="im_btn"/> - <button label="Gerenciar telehub..." name="manage_telehub_btn"/> -</panel> diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index 4bf2bda248..b6ecc9347b 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -1120,6 +1120,9 @@ <string name="InvFolder Favorite"> Favoritos </string> + <string name="InvFolder favorite"> + Favoritos + </string> <string name="InvFolder Current Outfit"> Look atual </string> diff --git a/indra/newview/tests/llagentaccess_test.cpp b/indra/newview/tests/llagentaccess_test.cpp index e08193f785..9614c1798b 100644 --- a/indra/newview/tests/llagentaccess_test.cpp +++ b/indra/newview/tests/llagentaccess_test.cpp @@ -80,7 +80,7 @@ namespace tut typedef test_group<agentaccess> agentaccess_t; typedef agentaccess_t::object agentaccess_object_t; - tut::agentaccess_t tut_agentaccess("agentaccess"); + tut::agentaccess_t tut_agentaccess("LLAgentAccess"); template<> template<> void agentaccess_object_t::test<1>() diff --git a/indra/newview/tests/lldateutil_test.cpp b/indra/newview/tests/lldateutil_test.cpp index 7ba82fbd2c..8f4bfc8d6e 100644 --- a/indra/newview/tests/lldateutil_test.cpp +++ b/indra/newview/tests/lldateutil_test.cpp @@ -109,7 +109,7 @@ namespace tut typedef test_group<dateutil> dateutil_t; typedef dateutil_t::object dateutil_object_t; - tut::dateutil_t tut_dateutil("dateutil"); + tut::dateutil_t tut_dateutil("LLDateUtil"); template<> template<> void dateutil_object_t::test<1>() diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp index 347a5e8ab8..dc9554d97e 100644 --- a/indra/newview/tests/lllogininstance_test.cpp +++ b/indra/newview/tests/lllogininstance_test.cpp @@ -45,6 +45,12 @@ LLSLURL LLStartUp::sStartSLURL; static std::string gLoginURI; static LLSD gLoginCreds; static bool gDisconnectCalled = false; + +#include "../llviewerwindow.h" +void LLViewerWindow::setShowProgress(BOOL show) {} + +LLViewerWindow* gViewerWindow; + class LLLogin::Impl { }; @@ -90,6 +96,8 @@ void LLGridManager::addGrid(LLSD& grid_data) { } LLGridManager::LLGridManager() +: + mIsInProductionGrid(false) { } @@ -297,7 +305,7 @@ namespace tut typedef test_group<lllogininstance_data> lllogininstance_group; typedef lllogininstance_group::object lllogininstance_object; - lllogininstance_group llsdmgr("lllogininstance"); + lllogininstance_group llsdmgr("LLLoginInstance"); template<> template<> void lllogininstance_object::test<1>() diff --git a/indra/newview/tests/llmediadataclient_test.cpp b/indra/newview/tests/llmediadataclient_test.cpp index 5f3dc5b162..0254c5881f 100644 --- a/indra/newview/tests/llmediadataclient_test.cpp +++ b/indra/newview/tests/llmediadataclient_test.cpp @@ -236,7 +236,7 @@ namespace tut typedef test_group<mediadataclient> mediadataclient_t; typedef mediadataclient_t::object mediadataclient_object_t; - tut::mediadataclient_t tut_mediadataclient("mediadataclient"); + tut::mediadataclient_t tut_mediadataclient("LLMediaDataClient"); void ensure(const std::string &msg, int value, int expected) { diff --git a/indra/newview/tests/llsecapi_test.cpp b/indra/newview/tests/llsecapi_test.cpp index 90cacfe3c9..703603e2db 100644 --- a/indra/newview/tests/llsecapi_test.cpp +++ b/indra/newview/tests/llsecapi_test.cpp @@ -87,7 +87,7 @@ namespace tut // Tut templating thingamagic: test group, object and test instance typedef test_group<secapiTest> secapiTestFactory; typedef secapiTestFactory::object secapiTestObject; - tut::secapiTestFactory tut_test("llsecapi"); + tut::secapiTestFactory tut_test("LLSecAPI"); // --------------------------------------------------------------------------------------- // Test functions diff --git a/indra/newview/tests/llsechandler_basic_test.cpp b/indra/newview/tests/llsechandler_basic_test.cpp index fa9fff3ac9..cb8791d268 100644 --- a/indra/newview/tests/llsechandler_basic_test.cpp +++ b/indra/newview/tests/llsechandler_basic_test.cpp @@ -317,7 +317,7 @@ namespace tut // Tut templating thingamagic: test group, object and test instance typedef test_group<sechandler_basic_test> sechandler_basic_test_factory; typedef sechandler_basic_test_factory::object sechandler_basic_test_object; - tut::sechandler_basic_test_factory tut_test("llsechandler_basic"); + tut::sechandler_basic_test_factory tut_test("LLSecHandler"); // --------------------------------------------------------------------------------------- // Test functions diff --git a/indra/newview/tests/llslurl_test.cpp b/indra/newview/tests/llslurl_test.cpp index 40425a5caf..f96f79006a 100644 --- a/indra/newview/tests/llslurl_test.cpp +++ b/indra/newview/tests/llslurl_test.cpp @@ -101,7 +101,7 @@ namespace tut // Tut templating thingamagic: test group, object and test instance typedef test_group<slurlTest> slurlTestFactory; typedef slurlTestFactory::object slurlTestObject; - tut::slurlTestFactory tut_test("llslurl"); + tut::slurlTestFactory tut_test("LLSlurl"); // --------------------------------------------------------------------------------------- // Test functions diff --git a/indra/newview/tests/lltextureinfo_test.cpp b/indra/newview/tests/lltextureinfo_test.cpp index 8dfba46262..dd663525cb 100644 --- a/indra/newview/tests/lltextureinfo_test.cpp +++ b/indra/newview/tests/lltextureinfo_test.cpp @@ -74,7 +74,7 @@ namespace tut // Tut templating thingamagic: test group, object and test instance typedef test_group<textureinfo_test> textureinfo_t; typedef textureinfo_t::object textureinfo_object_t; - tut::textureinfo_t tut_textureinfo("textureinfo"); + tut::textureinfo_t tut_textureinfo("LLTectureInfo"); // --------------------------------------------------------------------------------------- diff --git a/indra/newview/tests/lltextureinfodetails_test.cpp b/indra/newview/tests/lltextureinfodetails_test.cpp index aa2697fb8e..a3042b1dd2 100644 --- a/indra/newview/tests/lltextureinfodetails_test.cpp +++ b/indra/newview/tests/lltextureinfodetails_test.cpp @@ -73,7 +73,7 @@ namespace tut // Tut templating thingamagic: test group, object and test instance typedef test_group<textureinfodetails_test> textureinfodetails_t; typedef textureinfodetails_t::object textureinfodetails_object_t; - tut::textureinfodetails_t tut_textureinfodetails("textureinfodetails"); + tut::textureinfodetails_t tut_textureinfodetails("LLTextureInfoDetails"); // --------------------------------------------------------------------------------------- diff --git a/indra/newview/tests/lltexturestatsuploader_test.cpp b/indra/newview/tests/lltexturestatsuploader_test.cpp index 77a3e2c3d8..b05cd573f6 100644 --- a/indra/newview/tests/lltexturestatsuploader_test.cpp +++ b/indra/newview/tests/lltexturestatsuploader_test.cpp @@ -96,7 +96,7 @@ namespace tut // Tut templating thingamagic: test group, object and test instance typedef test_group<texturestatsuploader_test> texturestatsuploader_t; typedef texturestatsuploader_t::object texturestatsuploader_object_t; - tut::texturestatsuploader_t tut_texturestatsuploader("texturestatsuploader"); + tut::texturestatsuploader_t tut_texturestatsuploader("LLTextureStatsUploader"); // --------------------------------------------------------------------------------------- diff --git a/indra/newview/tests/llviewerhelputil_test.cpp b/indra/newview/tests/llviewerhelputil_test.cpp index eecc79d36c..7bbae6292b 100644 --- a/indra/newview/tests/llviewerhelputil_test.cpp +++ b/indra/newview/tests/llviewerhelputil_test.cpp @@ -115,7 +115,7 @@ namespace tut typedef test_group<viewerhelputil> viewerhelputil_t; typedef viewerhelputil_t::object viewerhelputil_object_t; - tut::viewerhelputil_t tut_viewerhelputil("viewerhelputil"); + tut::viewerhelputil_t tut_viewerhelputil("LLViewerHelpUtil"); template<> template<> void viewerhelputil_object_t::test<1>() diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp index d5d6ca671d..dd7761475e 100644 --- a/indra/newview/tests/llviewernetwork_test.cpp +++ b/indra/newview/tests/llviewernetwork_test.cpp @@ -127,7 +127,7 @@ namespace tut // Tut templating thingamagic: test group, object and test instance typedef test_group<viewerNetworkTest> viewerNetworkTestFactory; typedef viewerNetworkTestFactory::object viewerNetworkTestObject; - tut::viewerNetworkTestFactory tut_test("llviewernetwork"); + tut::viewerNetworkTestFactory tut_test("LLViewerNetwork"); // --------------------------------------------------------------------------------------- // Test functions diff --git a/indra/newview/tests/llworldmap_test.cpp b/indra/newview/tests/llworldmap_test.cpp index 56cf86f6df..69f15b0f73 100644 --- a/indra/newview/tests/llworldmap_test.cpp +++ b/indra/newview/tests/llworldmap_test.cpp @@ -150,15 +150,15 @@ namespace tut // Tut templating thingamagic: test group, object and test instance typedef test_group<iteminfo_test> iteminfo_t; typedef iteminfo_t::object iteminfo_object_t; - tut::iteminfo_t tut_iteminfo("iteminfo"); + tut::iteminfo_t tut_iteminfo("LLItemInfo"); typedef test_group<siminfo_test> siminfo_t; typedef siminfo_t::object siminfo_object_t; - tut::siminfo_t tut_siminfo("siminfo"); + tut::siminfo_t tut_siminfo("LLSimInfo"); typedef test_group<worldmap_test> worldmap_t; typedef worldmap_t::object worldmap_object_t; - tut::worldmap_t tut_worldmap("worldmap"); + tut::worldmap_t tut_worldmap("LLWorldMap"); // --------------------------------------------------------------------------------------- // Test functions diff --git a/indra/newview/tests/llworldmipmap_test.cpp b/indra/newview/tests/llworldmipmap_test.cpp index 9938175c55..a266a612c6 100644 --- a/indra/newview/tests/llworldmipmap_test.cpp +++ b/indra/newview/tests/llworldmipmap_test.cpp @@ -95,7 +95,7 @@ namespace tut // Tut templating thingamagic: test group, object and test instance typedef test_group<worldmipmap_test> worldmipmap_t; typedef worldmipmap_t::object worldmipmap_object_t; - tut::worldmipmap_t tut_worldmipmap("worldmipmap"); + tut::worldmipmap_t tut_worldmipmap("LLWorldMipmap"); // --------------------------------------------------------------------------------------- // Test functions diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 8296c28e80..cd1b9bf048 100644 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -325,6 +325,7 @@ class WindowsManifest(ViewerManifest): self.path(src="licenses-win32.txt", dst="licenses.txt") self.path("featuretable.txt") + self.path("featuretable_xp.txt") # For use in crash reporting (generates minidumps) self.path("dbghelp.dll") @@ -653,6 +654,7 @@ class DarwinManifest(ViewerManifest): "libaprutil-1.0.3.8.dylib", "libexpat.0.5.0.dylib", "libexception_handler.dylib", + "libGLOD.dylib", ): self.path(os.path.join(libdir, libfile), libfile) @@ -676,6 +678,7 @@ class DarwinManifest(ViewerManifest): "libaprutil-1.0.3.8.dylib", "libexpat.0.5.0.dylib", "libexception_handler.dylib", + "libGLOD.dylib", ): target_lib = os.path.join('../../..', libfile) self.run_command("ln -sf %(target)r %(link)r" % @@ -937,6 +940,8 @@ class Linux_i686Manifest(LinuxManifest): self.path("libalut.so") self.path("libopenal.so", "libopenal.so.1") self.path("libopenal.so", "libvivoxoal.so.1") # vivox's sdk expects this soname + self.path("libtcmalloc_minimal.so", "libtcmalloc_minimal.so") #formerly called google perf tools + self.path("libtcmalloc_minimal.so.0", "libtcmalloc_minimal.so.0") #formerly called google perf tools try: self.path("libkdu.so") pass |