diff --git a/.hgtags b/.hgtags index 59b516bf928e9259c855c94f27785093c2ffb18b..5bc619156a62880f5c5e1986051d1c258d323130 100644 --- a/.hgtags +++ b/.hgtags @@ -35,3 +35,4 @@ b0cd7e150009809a0b5b0a9d5785cd4bb230413a 2.2.0-beta3 a3c12342b1af0951b8aa3b828aacef17fcea8178 2.3.0-beta1 db0fe9bb65187f365e58a717dd23d0f4754a9c1d 2.3.0-beta2 6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 2.3.0-beta3 +6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 2.3.0-release diff --git a/BuildParams b/BuildParams index 8bd72d2ce8da445faac0add37ee69814b4d7dbdb..abeaebae984f95ca6f7c4beb8a2a5a64e0b8446a 100644 --- a/BuildParams +++ b/BuildParams @@ -51,7 +51,7 @@ viewer-release.viewer_channel = "Second Life Release" viewer-release.login_channel = "Second Life Release" viewer-release.build_debug_release_separately = true viewer-release.build_viewer_update_version_manager = true - +viewer-release.release-viewer.jira = DRTVWR-13 # ======================================== # aimee diff --git a/doc/contributions.txt b/doc/contributions.txt index 46f025ae8304e4c60a042ecf3d52f30ca630da43..adfee2cce9c0885026d90ada659423e870e91328 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -177,6 +177,7 @@ Boroondas Gupte SNOW-610 SNOW-624 SNOW-737 + STORM-318 VWR-233 VWR-20583 VWR-20891 @@ -354,6 +355,7 @@ Joghert LeSabre VWR-64 Jonathan Yap VWR-17801 + STORM-616 Kage Pixel VWR-11 Ken March @@ -766,6 +768,9 @@ WolfPup Lowenhar STORM-102 STORM-103 STORM-143 + STORM-535 + STORM-544 + STORM-654 VWR-20741 VWR-20933 Zai Lynch diff --git a/etc/message.xml b/etc/message.xml index ebbb4e57a96fafd0407f74861500e67daf1916cf..7c4a927cc5e7997b7533e98ec4d2143c60f19b87 100644 --- a/etc/message.xml +++ b/etc/message.xml @@ -442,6 +442,14 @@ <boolean>true</boolean> </map> + <key>SimConsoleResponse</key> + <map> + <key>flavor</key> + <string>llsd</string> + <key>trusted-sender</key> + <boolean>true</boolean> + </map> + <key>DirLandReply</key> <map> <key>flavor</key> diff --git a/indra/cmake/Python.cmake b/indra/cmake/Python.cmake index 0901c1b7a2174979f4d5546962c7db9c1fd62f02..748c8c2bec1b80b3680c2b7e410fbf3de1830df5 100644 --- a/indra/cmake/Python.cmake +++ b/indra/cmake/Python.cmake @@ -9,10 +9,12 @@ if (WINDOWS) NAMES python25.exe python23.exe python.exe NO_DEFAULT_PATH # added so that cmake does not find cygwin python PATHS + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.7\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.6\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\2.3\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.7\\InstallPath] [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.6\\InstallPath] [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.5\\InstallPath] [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\2.4\\InstallPath] diff --git a/indra/cmake/TemplateCheck.cmake b/indra/cmake/TemplateCheck.cmake index fa4e387dd5c60aac177fb36fa3bfc1ddc0ed2b75..90d58d93ad4bd652f0260d48f03ec9e04239edea 100644 --- a/indra/cmake/TemplateCheck.cmake +++ b/indra/cmake/TemplateCheck.cmake @@ -7,8 +7,9 @@ macro (check_message_template _target) TARGET ${_target} POST_BUILD COMMAND ${PYTHON_EXECUTABLE} - ARGS ${SCRIPTS_DIR}/template_verifier.py - --mode=development --cache_master - COMMENT "Verifying message template" + ARGS ${SCRIPTS_DIR}/md5check.py + 3f19d130400c547de36278a6b6f9b028 + ${SCRIPTS_DIR}/messages/message_template.msg + COMMENT "Verifying message template - See http://wiki.secondlife.com/wiki/Template_verifier.py" ) endmacro (check_message_template) diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake index 32c4bc81dfc4af75a888e511ba62beb7004a984f..df013b1665058e458ede89172c2aa5281ea480a5 100644 --- a/indra/cmake/ViewerMiscLibs.cmake +++ b/indra/cmake/ViewerMiscLibs.cmake @@ -3,7 +3,7 @@ include(Prebuilt) if (NOT STANDALONE) use_prebuilt_binary(libuuid) - use_prebuilt_binary(vivox) + use_prebuilt_binary(slvoice) use_prebuilt_binary(fontconfig) endif(NOT STANDALONE) diff --git a/indra/llcommon/llprocesslauncher.cpp b/indra/llcommon/llprocesslauncher.cpp index 99308c94e7caceda486897c83d5f4dc3a8d04284..81e5f8820d73c9b21723b2a3ed5f29ff3c769d87 100644 --- a/indra/llcommon/llprocesslauncher.cpp +++ b/indra/llcommon/llprocesslauncher.cpp @@ -58,6 +58,11 @@ void LLProcessLauncher::setWorkingDirectory(const std::string &dir) mWorkingDir = dir; } +const std::string& LLProcessLauncher::getExecutable() const +{ + return mExecutable; +} + void LLProcessLauncher::clearArguments() { mLaunchArguments.clear(); diff --git a/indra/llcommon/llprocesslauncher.h b/indra/llcommon/llprocesslauncher.h index 479aeb664a5df4cd3498252c5b8f66968b6636eb..954c2491472eb2e17b11122fe7d95eeb53348fff 100644 --- a/indra/llcommon/llprocesslauncher.h +++ b/indra/llcommon/llprocesslauncher.h @@ -47,6 +47,8 @@ class LL_COMMON_API LLProcessLauncher void setExecutable(const std::string &executable); void setWorkingDirectory(const std::string &dir); + const std::string& getExecutable() const; + void clearArguments(); void addArgument(const std::string &arg); void addArgument(const char *arg); diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index 5f5fe851bb8c819349299954986c02c0ecbc9883..3eb58e1aec1b8e80b3abe9d0242dd7a083709c0e 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -1304,7 +1304,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask) // handle ctrl-uparrow if we have a history enabled line editor. case KEY_UP: - if( mHaveHistory && ( MASK_CONTROL == mask ) ) + if( mHaveHistory && ((mIgnoreArrowKeys == false) || ( MASK_CONTROL == mask )) ) { if( mCurrentHistoryLine > mLineHistory.begin() ) { @@ -1319,9 +1319,9 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask) } break; - // handle ctrl-downarrow if we have a history enabled line editor + // handle [ctrl]-downarrow if we have a history enabled line editor case KEY_DOWN: - if( mHaveHistory && ( MASK_CONTROL == mask ) ) + if( mHaveHistory && ((mIgnoreArrowKeys == false) || ( MASK_CONTROL == mask )) ) { if( !mLineHistory.empty() && mCurrentHistoryLine < mLineHistory.end() - 1 ) { diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 5721df6b3627c24281c164d6bb30b087d55175eb..3f213ed13e331e2050ad95d51e26155538a00179 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1591,7 +1591,10 @@ void LLTextBase::setText(const LLStringExplicit &utf8str, const LLStyle::Params& // appendText modifies mCursorPos... appendText(text, false, input_params); // ...so move cursor to top after appending text - startOfDoc(); + if (!mTrackEnd) + { + startOfDoc(); + } onValueChange(0, getLength()); } diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index b478270586ed8eaa7084023e334b5b07637727ea..5647418619fa9f5213af9691992836f00c85e664 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -143,6 +143,7 @@ set(viewer_SOURCE_FILES lleventnotifier.cpp lleventpoll.cpp llexpandabletextbox.cpp + llexternaleditor.cpp llface.cpp llfasttimerview.cpp llfavoritesbar.cpp @@ -200,6 +201,7 @@ set(viewer_SOURCE_FILES llfloaterpostprocess.cpp llfloaterpreference.cpp llfloaterproperties.cpp + llfloaterregiondebugconsole.cpp llfloaterregioninfo.cpp llfloaterreporter.cpp llfloaterscriptdebug.cpp @@ -675,6 +677,7 @@ set(viewer_HEADER_FILES lleventnotifier.h lleventpoll.h llexpandabletextbox.h + llexternaleditor.h llface.h llfasttimerview.h llfavoritesbar.h @@ -732,6 +735,7 @@ set(viewer_HEADER_FILES llfloaterpostprocess.h llfloaterpreference.h llfloaterproperties.h + llfloaterregiondebugconsole.h llfloaterregioninfo.h llfloaterreporter.h llfloaterscriptdebug.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index cc8ad745263dc99f7160bdbff492e9ee9ea25314..e5845bc9474f6c07a64b65e22cc0f9999e94c0b0 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1365,6 +1365,17 @@ <key>Value</key> <integer>1</integer> </map> + <key>LetterKeysFocusChatBar</key> + <map> + <key>Comment</key> + <string>When printable characters keys (possibly with Shift held) are pressed, the chatbar takes focus</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>0</integer> + </map> <key>ChatBubbleOpacity</key> <map> <key>Comment</key> @@ -8340,6 +8351,17 @@ <key>Value</key> <real>1.0</real> </map> + <key>RenderTransparentWater</key> + <map> + <key>Comment</key> + <string>Render water as transparent. Setting to false renders water as opaque with a simple texture applied.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>RenderTreeLODFactor</key> <map> <key>Comment</key> @@ -11905,10 +11927,10 @@ <key>Value</key> <real>150000.0</real> </map> - <key>XUIEditor</key> + <key>ExternalEditor</key> <map> <key>Comment</key> - <string>Path to program used to edit XUI files</string> + <string>Path to program used to edit LSL scripts and XUI files, e.g.: /usr/bin/gedit --new-window "%s"</string> <key>Persist</key> <integer>1</integer> <key>Type</key> diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index d69842d5f100320355b9f9e60c98e5603fd8577b..a95abd7dd185e55e8992b612dfbb20f393d61788 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -42,6 +42,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 4 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 2.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderUseImpostors 1 1 RenderVBOEnable 1 1 @@ -80,6 +81,7 @@ RenderObjectBump 1 0 RenderReflectionDetail 1 0 RenderTerrainDetail 1 0 RenderTerrainLODFactor 1 1 +RenderTransparentWater 1 0 RenderTreeLODFactor 1 0 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 0.5 @@ -108,6 +110,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 0 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 1.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 1.125 @@ -135,6 +138,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 2 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 2.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 1.125 @@ -162,6 +166,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 4 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 2.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 2.0 diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index efe29005f23895393beffe1f9cf34e8b4fe299bf..a52b32355de22ba0efbafb2451686a9cf8fdf8d4 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -42,6 +42,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 4 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 2.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderUseImpostors 1 1 RenderVBOEnable 1 1 @@ -79,6 +80,7 @@ RenderObjectBump 1 0 RenderReflectionDetail 1 0 RenderTerrainDetail 1 0 RenderTerrainLODFactor 1 1 +RenderTransparentWater 1 0 RenderTreeLODFactor 1 0 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 0.5 @@ -107,6 +109,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 0 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 1.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 1.125 @@ -134,6 +137,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 2 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 2.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 1.125 @@ -161,6 +165,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 4 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 2.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 2.0 diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index f030c9f8e594015287ff2d7946f1f67559a158fd..6dabef53a846a54d69de2f6f83ed623c531c3e65 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -43,6 +43,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 3 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 2.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderUseImpostors 1 1 RenderVBOEnable 1 1 @@ -80,6 +81,7 @@ RenderObjectBump 1 0 RenderReflectionDetail 1 0 RenderTerrainDetail 1 0 RenderTerrainLODFactor 1 1 +RenderTransparentWater 1 0 RenderTreeLODFactor 1 0 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 0.5 @@ -107,6 +109,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 0 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 1.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 1.125 @@ -133,6 +136,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 2 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 2.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 1.125 @@ -159,6 +163,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 3 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 2.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 2.0 diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt index dae77059710835a1c45477dc308e0d806b794438..a09ba17c6246535e031014482d732addb02f9114 100644 --- a/indra/newview/featuretable_xp.txt +++ b/indra/newview/featuretable_xp.txt @@ -42,6 +42,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 4 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 2.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderUseImpostors 1 1 RenderVBOEnable 1 1 @@ -80,6 +81,7 @@ RenderObjectBump 1 0 RenderReflectionDetail 1 0 RenderTerrainDetail 1 0 RenderTerrainLODFactor 1 1 +RenderTransparentWater 1 0 RenderTreeLODFactor 1 0 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 0.5 @@ -108,6 +110,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 0 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 1.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 1.125 @@ -135,6 +138,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 2 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 2.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 0.5 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 1.125 @@ -162,6 +166,7 @@ RenderObjectBump 1 1 RenderReflectionDetail 1 4 RenderTerrainDetail 1 1 RenderTerrainLODFactor 1 2.0 +RenderTransparentWater 1 1 RenderTreeLODFactor 1 1.0 RenderUseImpostors 1 1 RenderVolumeLODFactor 1 2.0 diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 0f7e9313a9fff1e60e13e877f3692f4396bf62c7..271ee0c4a48961ee24e1aeb10687f3ac5bf78d19 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -798,9 +798,14 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL else if ( chat.mFromName != SYSTEM_FROM && chat.mFromID.notNull() && !message_from_log) { LLStyle::Params link_params(style_params); - link_params.overwriteFrom(LLStyleMap::instance().lookupAgent(chat.mFromID)); + + // Setting is_link = true for agent SLURL to avoid applying default style to it. + // See LLTextBase::appendTextImpl(). + link_params.is_link = true; + link_params.link_href = LLSLURL("agent", chat.mFromID, "inspect").getSLURLString(); + // Add link to avatar's inspector and delimiter to message. - mEditor->appendText(link_params.link_href, false, style_params); + mEditor->appendText(chat.mFromName, false, link_params); mEditor->appendText(delimiter, false, style_params); } else diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp index d353c809cac14e2c06a36a0ab0fdf23d17dadfab..3afddc114506ad711868ef346aff187dde5da986 100644 --- a/indra/newview/llchatitemscontainerctrl.cpp +++ b/indra/newview/llchatitemscontainerctrl.cpp @@ -213,7 +213,6 @@ void LLNearbyChatToastPanel::init(LLSD& notification) { LLStyle::Params style_params_name; - LLColor4 userNameColor = LLUIColorTable::instance().getColor("ChatToastAgentNameColor"); std::string href; if (mSourceType == CHAT_SOURCE_AGENT) @@ -225,7 +224,7 @@ void LLNearbyChatToastPanel::init(LLSD& notification) href = LLSLURL("object", mFromID, "inspect").getSLURLString(); } - style_params_name.color(userNameColor); + style_params_name.color(textColor); std::string font_name = LLFontGL::nameFromFont(messageFont); std::string font_style_size = LLFontGL::sizeFromFont(messageFont); diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp index 0ee70bcdd14525a810dd9c11461b4d8239a927b1..dc94924da4e2cc358fee04a08d82c861061ae4de 100644 --- a/indra/newview/lldrawpoolwater.cpp +++ b/indra/newview/lldrawpoolwater.cpp @@ -48,7 +48,8 @@ #include "llviewershadermgr.h" #include "llwaterparammanager.h" -const LLUUID WATER_TEST("2bfd3884-7e27-69b9-ba3a-3e673f680004"); +const LLUUID TRANSPARENT_WATER_TEXTURE("2bfd3884-7e27-69b9-ba3a-3e673f680004"); +const LLUUID OPAQUE_WATER_TEXTURE("43c32285-d658-1793-c123-bf86315de055"); static float sTime; @@ -71,10 +72,14 @@ LLDrawPoolWater::LLDrawPoolWater() : gGL.getTexUnit(0)->bind(mHBTex[1]); mHBTex[1]->setAddressMode(LLTexUnit::TAM_CLAMP); - mWaterImagep = LLViewerTextureManager::getFetchedTexture(WATER_TEST); - mWaterImagep->setNoDelete() ; + + mWaterImagep = LLViewerTextureManager::getFetchedTexture(TRANSPARENT_WATER_TEXTURE); + llassert(mWaterImagep); + mWaterImagep->setNoDelete(); + mOpaqueWaterImagep = LLViewerTextureManager::getFetchedTexture(OPAQUE_WATER_TEXTURE); + llassert(mOpaqueWaterImagep); mWaterNormp = LLViewerTextureManager::getFetchedTexture(DEFAULT_WATER_NORMAL); - mWaterNormp->setNoDelete() ; + mWaterNormp->setNoDelete(); restoreGL(); } @@ -161,6 +166,14 @@ void LLDrawPoolWater::render(S32 pass) std::sort(mDrawFace.begin(), mDrawFace.end(), LLFace::CompareDistanceGreater()); + // See if we are rendering water as opaque or not + if (!gSavedSettings.getBOOL("RenderTransparentWater")) + { + // render water for low end hardware + renderOpaqueLegacyWater(); + return; + } + LLGLEnable blend(GL_BLEND); if ((mVertexShaderLevel > 0) && !sSkipScreenCopy) @@ -314,6 +327,87 @@ void LLDrawPoolWater::render(S32 pass) gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } +// for low end hardware +void LLDrawPoolWater::renderOpaqueLegacyWater() +{ + LLVOSky *voskyp = gSky.mVOSkyp; + + stop_glerror(); + + // Depth sorting and write to depth buffer + // since this is opaque, we should see nothing + // behind the water. No blending because + // of no transparency. And no face culling so + // that the underside of the water is also opaque. + LLGLDepthTest gls_depth(GL_TRUE, GL_TRUE); + LLGLDisable no_cull(GL_CULL_FACE); + LLGLDisable no_blend(GL_BLEND); + + gPipeline.disableLights(); + + mOpaqueWaterImagep->addTextureStats(1024.f*1024.f); + + // Activate the texture binding and bind one + // texture since all images will have the same texture + gGL.getTexUnit(0)->activate(); + gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE); + gGL.getTexUnit(0)->bind(mOpaqueWaterImagep); + + // Automatically generate texture coords for water texture + glEnable(GL_TEXTURE_GEN_S); //texture unit 0 + glEnable(GL_TEXTURE_GEN_T); //texture unit 0 + glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); + glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); + + // Use the fact that we know all water faces are the same size + // to save some computation + + // Slowly move texture coordinates over time so the watter appears + // to be moving. + F32 movement_period_secs = 50.f; + + F32 offset = fmod(gFrameTimeSeconds, movement_period_secs); + + if (movement_period_secs != 0) + { + offset /= movement_period_secs; + } + else + { + offset = 0; + } + + F32 tp0[4] = { 16.f / 256.f, 0.0f, 0.0f, offset }; + F32 tp1[4] = { 0.0f, 16.f / 256.f, 0.0f, offset }; + + glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0); + glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1); + + glColor3f(1.f, 1.f, 1.f); + + for (std::vector<LLFace*>::iterator iter = mDrawFace.begin(); + iter != mDrawFace.end(); iter++) + { + LLFace *face = *iter; + if (voskyp->isReflFace(face)) + { + continue; + } + + face->renderIndexed(); + } + + stop_glerror(); + + // Reset the settings back to expected values + glDisable(GL_TEXTURE_GEN_S); //texture unit 0 + glDisable(GL_TEXTURE_GEN_T); //texture unit 0 + + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); +} + + void LLDrawPoolWater::renderReflection(LLFace* face) { LLVOSky *voskyp = gSky.mVOSkyp; diff --git a/indra/newview/lldrawpoolwater.h b/indra/newview/lldrawpoolwater.h index 2648a5276cb6b2ae8d8121a4ed5869ca4daba49b..99b541ca5a384d1de939c9795e96b908f0265abd 100644 --- a/indra/newview/lldrawpoolwater.h +++ b/indra/newview/lldrawpoolwater.h @@ -39,6 +39,7 @@ class LLDrawPoolWater: public LLFacePool protected: LLPointer<LLViewerTexture> mHBTex[2]; LLPointer<LLViewerTexture> mWaterImagep; + LLPointer<LLViewerTexture> mOpaqueWaterImagep; LLPointer<LLViewerTexture> mWaterNormp; public: @@ -80,6 +81,9 @@ class LLDrawPoolWater: public LLFacePool void renderReflection(LLFace* face); void shade(); + +protected: + void renderOpaqueLegacyWater(); }; void cgErrorCallback(); diff --git a/indra/newview/llexternaleditor.cpp b/indra/newview/llexternaleditor.cpp new file mode 100644 index 0000000000000000000000000000000000000000..54968841ab1521461002482ad0631f39aecfa46f --- /dev/null +++ b/indra/newview/llexternaleditor.cpp @@ -0,0 +1,192 @@ +/** + * @file llexternaleditor.cpp + * @brief A convenient class to run external editor. + * + * $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 "llexternaleditor.h" + +#include "llui.h" + +// static +const std::string LLExternalEditor::sFilenameMarker = "%s"; + +// static +const std::string LLExternalEditor::sSetting = "ExternalEditor"; + +bool LLExternalEditor::setCommand(const std::string& env_var, const std::string& override) +{ + std::string cmd = findCommand(env_var, override); + if (cmd.empty()) + { + llwarns << "Empty editor command" << llendl; + return false; + } + + // Add the filename marker if missing. + if (cmd.find(sFilenameMarker) == std::string::npos) + { + cmd += " \"" + sFilenameMarker + "\""; + llinfos << "Adding the filename marker (" << sFilenameMarker << ")" << llendl; + } + + string_vec_t tokens; + if (tokenize(tokens, cmd) < 2) // 2 = bin + at least one arg (%s) + { + llwarns << "Error parsing editor command" << llendl; + return false; + } + + // Check executable for existence. + std::string bin_path = tokens[0]; + if (!LLFile::isfile(bin_path)) + { + llwarns << "Editor binary [" << bin_path << "] not found" << llendl; + return false; + } + + // Save command. + mProcess.setExecutable(bin_path); + mArgs.clear(); + for (size_t i = 1; i < tokens.size(); ++i) + { + if (i > 1) mArgs += " "; + mArgs += "\"" + tokens[i] + "\""; + } + llinfos << "Setting command [" << bin_path << " " << mArgs << "]" << llendl; + + return true; +} + +bool LLExternalEditor::run(const std::string& file_path) +{ + std::string args = mArgs; + if (mProcess.getExecutable().empty() || args.empty()) + { + llwarns << "Editor command not set" << llendl; + return false; + } + + // Substitute the filename marker in the command with the actual passed file name. + LLStringUtil::replaceString(args, sFilenameMarker, file_path); + + // Split command into separate tokens. + string_vec_t tokens; + tokenize(tokens, args); + + // Set process arguments taken from the command. + mProcess.clearArguments(); + for (string_vec_t::const_iterator arg_it = tokens.begin(); arg_it != tokens.end(); ++arg_it) + { + mProcess.addArgument(*arg_it); + } + + // Run the editor. + llinfos << "Running editor command [" << mProcess.getExecutable() + " " + args << "]" << llendl; + int result = mProcess.launch(); + if (result == 0) + { + // Prevent killing the process in destructor (will add it to the zombies list). + mProcess.orphan(); + } + + return result == 0; +} + +// static +size_t LLExternalEditor::tokenize(string_vec_t& tokens, const std::string& str) +{ + tokens.clear(); + + // Split the argument string into separate strings for each argument + typedef boost::tokenizer< boost::char_separator<char> > tokenizer; + boost::char_separator<char> sep("", "\" ", boost::drop_empty_tokens); + + tokenizer tokens_list(str, sep); + tokenizer::iterator token_iter; + BOOL inside_quotes = FALSE; + BOOL last_was_space = FALSE; + for (token_iter = tokens_list.begin(); token_iter != tokens_list.end(); ++token_iter) + { + if (!strncmp("\"",(*token_iter).c_str(),2)) + { + inside_quotes = !inside_quotes; + } + else if (!strncmp(" ",(*token_iter).c_str(),2)) + { + if(inside_quotes) + { + tokens.back().append(std::string(" ")); + last_was_space = TRUE; + } + } + else + { + std::string to_push = *token_iter; + if (last_was_space) + { + tokens.back().append(to_push); + last_was_space = FALSE; + } + else + { + tokens.push_back(to_push); + } + } + } + + return tokens.size(); +} + +// static +std::string LLExternalEditor::findCommand( + const std::string& env_var, + const std::string& override) +{ + std::string cmd; + + // Get executable path. + if (!override.empty()) // try the supplied override first + { + cmd = override; + llinfos << "Using override" << llendl; + } + else if (!LLUI::sSettingGroups["config"]->getString(sSetting).empty()) + { + cmd = LLUI::sSettingGroups["config"]->getString(sSetting); + llinfos << "Using setting" << llendl; + } + else // otherwise use the path specified by the environment variable + { + char* env_var_val = getenv(env_var.c_str()); + if (env_var_val) + { + cmd = env_var_val; + llinfos << "Using env var " << env_var << llendl; + } + } + + llinfos << "Found command [" << cmd << "]" << llendl; + return cmd; +} diff --git a/indra/newview/llexternaleditor.h b/indra/newview/llexternaleditor.h new file mode 100644 index 0000000000000000000000000000000000000000..6ea210d5e222d69dfc81ed3d4d9ab23758ad520b --- /dev/null +++ b/indra/newview/llexternaleditor.h @@ -0,0 +1,91 @@ +/** + * @file llexternaleditor.h + * @brief A convenient class to run external editor. + * + * $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_LLEXTERNALEDITOR_H +#define LL_LLEXTERNALEDITOR_H + +#include <llprocesslauncher.h> + +/** + * Usage: + * LLExternalEditor ed; + * ed.setCommand("MY_EXTERNAL_EDITOR_VAR"); + * ed.run("/path/to/file1"); + * ed.run("/other/path/to/file2"); + */ +class LLExternalEditor +{ + typedef std::vector<std::string> string_vec_t; + +public: + + /** + * Set editor command. + * + * @param env_var Environment variable of the same purpose. + * @param override Optional override. + * + * First tries the override, then a predefined setting (sSetting), + * then the environment variable. + * + * @return Command if found, empty string otherwise. + * + * @see sSetting + */ + bool setCommand(const std::string& env_var, const std::string& override = LLStringUtil::null); + + /** + * Run the editor with the given file. + * + * @param file_path File to edit. + * @return true on success, false on error. + */ + bool run(const std::string& file_path); + +private: + + static std::string findCommand( + const std::string& env_var, + const std::string& override); + + static size_t tokenize(string_vec_t& tokens, const std::string& str); + + /** + * Filename placeholder that gets replaced with an actual file name. + */ + static const std::string sFilenameMarker; + + /** + * Setting that can specify the editor command. + */ + static const std::string sSetting; + + + std::string mArgs; + LLProcessLauncher mProcess; +}; + +#endif // LL_LLEXTERNALEDITOR_H diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index c105f023c770eb11b1400b1143d2d3d990df7ab7..ac940f4f77596ac2b37b00449189142633049f51 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -282,7 +282,8 @@ std::string LLFloaterPreference::sSkin = ""; LLFloaterPreference::LLFloaterPreference(const LLSD& key) : LLFloater(key), mGotPersonalInfo(false), - mOriginalIMViaEmail(false) + mOriginalIMViaEmail(false), + mDoubleClickActionDirty(false) { //Build Floater is now Called from LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>); @@ -320,6 +321,8 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key) mCommitCallbackRegistrar.add("Pref.getUIColor", boost::bind(&LLFloaterPreference::getUIColor, this ,_1, _2)); mCommitCallbackRegistrar.add("Pref.MaturitySettings", boost::bind(&LLFloaterPreference::onChangeMaturity, this)); mCommitCallbackRegistrar.add("Pref.BlockList", boost::bind(&LLFloaterPreference::onClickBlockList, this)); + mCommitCallbackRegistrar.add("Pref.CommitDoubleClickChekbox", boost::bind(&LLFloaterPreference::onDoubleClickCheckBox, this, _1)); + mCommitCallbackRegistrar.add("Pref.CommitRadioDoubleClick", boost::bind(&LLFloaterPreference::onDoubleClickRadio, this)); sSkin = gSavedSettings.getString("SkinCurrent"); @@ -342,6 +345,8 @@ BOOL LLFloaterPreference::postBuild() if (!tabcontainer->selectTab(gSavedSettings.getS32("LastPrefTab"))) tabcontainer->selectFirstTab(); + updateDoubleClickControls(); + getChild<LLUICtrl>("cache_location")->setEnabled(FALSE); // make it read-only but selectable (STORM-227) std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, ""); setCacheLocation(cache_location); @@ -475,6 +480,12 @@ void LLFloaterPreference::apply() gAgent.sendAgentUpdateUserInfo(new_im_via_email,mDirectoryVisibility); } } + + if (mDoubleClickActionDirty) + { + updateDoubleClickSettings(); + mDoubleClickActionDirty = false; + } } void LLFloaterPreference::cancel() @@ -501,6 +512,12 @@ void LLFloaterPreference::cancel() // reverts any changes to current skin gSavedSettings.setString("SkinCurrent", sSkin); + + if (mDoubleClickActionDirty) + { + updateDoubleClickControls(); + mDoubleClickActionDirty = false; + } } void LLFloaterPreference::onOpen(const LLSD& key) @@ -1318,6 +1335,68 @@ void LLFloaterPreference::onClickBlockList() } } +void LLFloaterPreference::onDoubleClickCheckBox(LLUICtrl* ctrl) +{ + if (!ctrl) return; + mDoubleClickActionDirty = true; + LLRadioGroup* radio_double_click_action = getChild<LLRadioGroup>("double_click_action"); + if (!radio_double_click_action) return; + // select default value("teleport") in radio-group. + radio_double_click_action->setSelectedIndex(0); + // set radio-group enabled depending on state of checkbox + radio_double_click_action->setEnabled(ctrl->getValue()); +} + +void LLFloaterPreference::onDoubleClickRadio() +{ + mDoubleClickActionDirty = true; +} + +void LLFloaterPreference::updateDoubleClickSettings() +{ + LLCheckBoxCtrl* double_click_action_cb = getChild<LLCheckBoxCtrl>("double_click_chkbox"); + if (!double_click_action_cb) return; + bool enable = double_click_action_cb->getValue().asBoolean(); + + LLRadioGroup* radio_double_click_action = getChild<LLRadioGroup>("double_click_action"); + if (!radio_double_click_action) return; + + // enable double click radio-group depending on state of checkbox + radio_double_click_action->setEnabled(enable); + + if (!enable) + { + // set double click action settings values to false if checkbox was unchecked + gSavedSettings.setBOOL("DoubleClickAutoPilot", false); + gSavedSettings.setBOOL("DoubleClickTeleport", false); + } + else + { + std::string selected = radio_double_click_action->getValue().asString(); + bool teleport_selected = selected == "radio_teleport"; + // set double click action settings values depending on chosen radio-button + gSavedSettings.setBOOL( "DoubleClickTeleport", teleport_selected ); + gSavedSettings.setBOOL( "DoubleClickAutoPilot", !teleport_selected ); + } +} + +void LLFloaterPreference::updateDoubleClickControls() +{ + // check is one of double-click actions settings enabled + bool double_click_action_enabled = gSavedSettings.getBOOL("DoubleClickAutoPilot") || gSavedSettings.getBOOL("DoubleClickTeleport"); + LLCheckBoxCtrl* double_click_action_cb = getChild<LLCheckBoxCtrl>("double_click_chkbox"); + if (double_click_action_cb) + { + // check checkbox if one of double-click actions settings enabled, uncheck otherwise + double_click_action_cb->setValue(double_click_action_enabled); + } + LLRadioGroup* double_click_action_radio = getChild<LLRadioGroup>("double_click_action"); + if (!double_click_action_radio) return; + // set radio-group enabled if one of double-click actions settings enabled + double_click_action_radio->setEnabled(double_click_action_enabled); + // select button in radio-group depending on setting + double_click_action_radio->setSelectedIndex(gSavedSettings.getBOOL("DoubleClickAutoPilot")); +} void LLFloaterPreference::applyUIColor(LLUICtrl* ctrl, const LLSD& param) { diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index e99731b92e41c0d3b0808283ac2e99ca7cd25f88..46f50d9a4d3f957e22459d927a0cdc634dbf03a4 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -95,6 +95,14 @@ class LLFloaterPreference : public LLFloater void setHardwareDefaults(); // callback for when client turns on shaders void onVertexShaderEnable(); + // callback for changing double click action checkbox + void onDoubleClickCheckBox(LLUICtrl* ctrl); + // callback for selecting double click action radio-button + void onDoubleClickRadio(); + // updates double-click action settings depending on controls from preferences + void updateDoubleClickSettings(); + // updates double-click action controls depending on values from settings.xml + void updateDoubleClickControls(); // This function squirrels away the current values of the controls so that // cancel() can restore them. @@ -145,6 +153,9 @@ class LLFloaterPreference : public LLFloater static void refreshSkin(void* data); private: static std::string sSkin; + // set true if state of double-click action checkbox or radio-group was changed by user + // (reset back to false on apply or cancel) + bool mDoubleClickActionDirty; bool mGotPersonalInfo; bool mOriginalIMViaEmail; diff --git a/indra/newview/llfloaterregiondebugconsole.cpp b/indra/newview/llfloaterregiondebugconsole.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b3b7645dd4f2f07f6576c809fc0ef10cd413eb59 --- /dev/null +++ b/indra/newview/llfloaterregiondebugconsole.cpp @@ -0,0 +1,227 @@ +/** + * @file llfloaterregiondebugconsole.h + * @author Brad Kittenbrink <brad@lindenlab.com> + * @brief Quick and dirty console for region debug settings + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010-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 "llfloaterregiondebugconsole.h" + +#include "llagent.h" +#include "llhttpclient.h" +#include "llhttpnode.h" +#include "lllineeditor.h" +#include "lltexteditor.h" +#include "llviewerregion.h" + +// Two versions of the sim console API are supported. +// +// SimConsole capability (deprecated): +// This is the initial implementation that is supported by some versions of the +// simulator. It is simple and straight forward, just POST a command and the +// body of the response has the result. This API is deprecated because it +// doesn't allow the sim to use any asynchronous API. +// +// SimConsoleAsync capability: +// This capability replaces the original SimConsole capability. It is similar +// in that the command is POSTed to the SimConsoleAsync cap, but the response +// comes in through the event poll, which gives the simulator more flexibility +// and allows it to perform complex operations without blocking any frames. +// +// We will assume the SimConsoleAsync capability is available, and fall back to +// the SimConsole cap if it is not. The simulator will only support one or the +// other. + +namespace +{ + // Signal used to notify the floater of responses from the asynchronous + // API. + typedef boost::signals2::signal< + void (const std::string& output)> console_reply_signal_t; + console_reply_signal_t sConsoleReplySignal; + + const std::string PROMPT("\n\n> "); + const std::string UNABLE_TO_SEND_COMMAND( + "ERROR: The last command was not received by the server."); + const std::string CONSOLE_UNAVAILABLE( + "ERROR: No console available for this region/simulator."); + const std::string CONSOLE_NOT_SUPPORTED( + "This region does not support the simulator console."); + + // This responder handles the initial response. Unless error() is called + // we assume that the simulator has received our request. Error will be + // called if this request times out. + class AsyncConsoleResponder : public LLHTTPClient::Responder + { + public: + /* virtual */ + void error(U32 status, const std::string& reason) + { + sConsoleReplySignal(UNABLE_TO_SEND_COMMAND); + } + }; + + class ConsoleResponder : public LLHTTPClient::Responder + { + public: + ConsoleResponder(LLTextEditor *output) : mOutput(output) + { + } + + /*virtual*/ + void error(U32 status, const std::string& reason) + { + if (mOutput) + { + mOutput->appendText( + UNABLE_TO_SEND_COMMAND + PROMPT, + false); + } + } + + /*virtual*/ + void result(const LLSD& content) + { + if (mOutput) + { + mOutput->appendText( + content.asString() + PROMPT, false); + } + } + + LLTextEditor * mOutput; + }; + + // This handles responses for console commands sent via the asynchronous + // API. + class ConsoleResponseNode : public LLHTTPNode + { + public: + /* virtual */ + void post( + LLHTTPNode::ResponsePtr reponse, + const LLSD& context, + const LLSD& input) const + { + llinfos << "Received response from the debug console: " + << input << llendl; + sConsoleReplySignal(input["body"].asString()); + } + }; +} + +LLFloaterRegionDebugConsole::LLFloaterRegionDebugConsole(LLSD const & key) +: LLFloater(key), mOutput(NULL) +{ + mReplySignalConnection = sConsoleReplySignal.connect( + boost::bind( + &LLFloaterRegionDebugConsole::onReplyReceived, + this, + _1)); +} + +LLFloaterRegionDebugConsole::~LLFloaterRegionDebugConsole() +{ + mReplySignalConnection.disconnect(); +} + +BOOL LLFloaterRegionDebugConsole::postBuild() +{ + LLLineEditor* input = getChild<LLLineEditor>("region_debug_console_input"); + input->setEnableLineHistory(true); + input->setCommitCallback(boost::bind(&LLFloaterRegionDebugConsole::onInput, this, _1, _2)); + input->setFocus(true); + input->setCommitOnFocusLost(false); + + mOutput = getChild<LLTextEditor>("region_debug_console_output"); + + std::string url = gAgent.getRegion()->getCapability("SimConsoleAsync"); + if (url.empty()) + { + // Fall back to see if the old API is supported. + url = gAgent.getRegion()->getCapability("SimConsole"); + if (url.empty()) + { + mOutput->appendText( + CONSOLE_NOT_SUPPORTED + PROMPT, + false); + return TRUE; + } + } + + mOutput->appendText("> ", false); + return TRUE; +} + +void LLFloaterRegionDebugConsole::onInput(LLUICtrl* ctrl, const LLSD& param) +{ + LLLineEditor* input = static_cast<LLLineEditor*>(ctrl); + std::string text = input->getText() + "\n"; + + std::string url = gAgent.getRegion()->getCapability("SimConsoleAsync"); + if (url.empty()) + { + // Fall back to the old API + url = gAgent.getRegion()->getCapability("SimConsole"); + if (url.empty()) + { + text += CONSOLE_UNAVAILABLE + PROMPT; + } + else + { + // Using SimConsole (deprecated) + LLHTTPClient::post( + url, + LLSD(input->getText()), + new ConsoleResponder(mOutput)); + } + } + else + { + // Using SimConsoleAsync + LLHTTPClient::post( + url, + LLSD(input->getText()), + new AsyncConsoleResponder); + } + + mOutput->appendText(text, false); + input->clear(); +} + +void LLFloaterRegionDebugConsole::onReplyReceived(const std::string& output) +{ + mOutput->appendText(output + PROMPT, false); +} + +LLHTTPRegistration<ConsoleResponseNode> + gHTTPRegistrationMessageDebugConsoleResponse( + "/message/SimConsoleResponse"); diff --git a/indra/newview/llfloaterregiondebugconsole.h b/indra/newview/llfloaterregiondebugconsole.h new file mode 100644 index 0000000000000000000000000000000000000000..4171a4da6baf293c0475c410b7bd65f6288f2d13 --- /dev/null +++ b/indra/newview/llfloaterregiondebugconsole.h @@ -0,0 +1,63 @@ +/** + * @file llfloaterregiondebugconsole.h + * @author Brad Kittenbrink <brad@lindenlab.com> + * @brief Quick and dirty console for region debug settings + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010-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_LLFLOATERREGIONDEBUGCONSOLE_H +#define LL_LLFLOATERREGIONDEBUGCONSOLE_H + +#include <boost/signals2.hpp> + +#include "llfloater.h" +#include "llhttpclient.h" + +class LLTextEditor; + +class LLFloaterRegionDebugConsole : public LLFloater, public LLHTTPClient::Responder +{ +public: + LLFloaterRegionDebugConsole(LLSD const & key); + virtual ~LLFloaterRegionDebugConsole(); + + // virtual + BOOL postBuild(); + + void onInput(LLUICtrl* ctrl, const LLSD& param); + + LLTextEditor * mOutput; + + private: + void onReplyReceived(const std::string& output); + + boost::signals2::connection mReplySignalConnection; +}; + +#endif // LL_LLFLOATERREGIONDEBUGCONSOLE_H diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index 5687b88a1f12496cf4748055c541b8570cd769d0..11b3379814a52d3de44e343675abd7196417e5e9 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -36,6 +36,7 @@ // Internal utility #include "lleventtimer.h" +#include "llexternaleditor.h" #include "llrender.h" #include "llsdutil.h" #include "llxmltree.h" @@ -160,6 +161,8 @@ class LLFloaterUIPreview : public LLFloater DiffMap mDiffsMap; // map, of filename to pair of list of changed element paths and list of errors private: + LLExternalEditor mExternalEditor; + // XUI elements for this floater LLScrollListCtrl* mFileList; // scroll list control for file list LLLineEditor* mEditorPathTextBox; // text field for path to editor executable @@ -185,7 +188,7 @@ class LLFloaterUIPreview : public LLFloater std::string mSavedDiffPath; // stored diff file path so closing this floater doesn't reset it // Internal functionality - static void popupAndPrintWarning(std::string& warning); // pop up a warning + static void popupAndPrintWarning(const std::string& warning); // pop up a warning std::string getLocalizedDirectory(); // build and return the path to the XUI directory for the currently-selected localization void scanDiffFile(LLXmlTreeNode* file_node); // scan a given XML node for diff entries and highlight them in its associated file void highlightChangedElements(); // look up the list of elements to highlight and highlight them in the current floater @@ -597,7 +600,7 @@ void LLFloaterUIPreview::onClose(bool app_quitting) // Error handling (to avoid code repetition) // *TODO: this is currently unlocalized. Add to alerts/notifications.xml, someday, maybe. -void LLFloaterUIPreview::popupAndPrintWarning(std::string& warning) +void LLFloaterUIPreview::popupAndPrintWarning(const std::string& warning) { llwarns << warning << llendl; LLSD args; @@ -998,190 +1001,55 @@ void LLFloaterUIPreview::displayFloater(BOOL click, S32 ID, bool save) // Respond to button click to edit currently-selected floater void LLFloaterUIPreview::onClickEditFloater() { - std::string file_name = mFileList->getSelectedItemLabel(1); // get the file name of the currently-selected floater - if(std::string("") == file_name) // if no item is selected - { - return; // ignore click - } - std::string path = getLocalizedDirectory() + file_name; - - // stat file to see if it exists (some localized versions may not have it there are no diffs, and then we try to open an nonexistent file) - llstat dummy; - if(LLFile::stat(path.c_str(), &dummy)) // if the file does not exist - { - std::string warning = "No file for this floater exists in the selected localization. Opening the EN version instead."; - popupAndPrintWarning(warning); - - path = get_xui_dir() + mDelim + "en" + mDelim + file_name; // open the en version instead, by default - } - - // get executable path - const char* exe_path_char; - std::string path_in_textfield = mEditorPathTextBox->getText(); - if(std::string("") != path_in_textfield) // if the text field is not emtpy, use its path - { - exe_path_char = path_in_textfield.c_str(); - } - else if (!LLUI::sSettingGroups["config"]->getString("XUIEditor").empty()) - { - exe_path_char = LLUI::sSettingGroups["config"]->getString("XUIEditor").c_str(); - } - else // otherwise use the path specified by the environment variable + // Determine file to edit. + std::string file_path; { - exe_path_char = getenv("LL_XUI_EDITOR"); - } - - // error check executable path - if(NULL == exe_path_char) - { - std::string warning = "Select an editor by setting the environment variable LL_XUI_EDITOR or specifying its path in the \"Editor Path\" field."; - popupAndPrintWarning(warning); - return; - } - std::string exe_path = exe_path_char; // do this after error check, otherwise internal strlen call fails on bad char* - - // remove any quotes; they're added back in later where necessary - int found_at; - while((found_at = exe_path.find("\"")) != -1 || (found_at = exe_path.find("'")) != -1) - { - exe_path.erase(found_at,1); - } - - llstat s; - if(!LLFile::stat(exe_path.c_str(), &s)) // If the executable exists - { - // build paths and arguments - std::string quote = std::string("\""); - std::string args; - std::string custom_args = mEditorArgsTextBox->getText(); - int position_of_file = custom_args.find(std::string("%FILE%"), 0); // prepare to replace %FILE% with actual file path - std::string first_part_of_args = ""; - std::string second_part_of_args = ""; - if(-1 == position_of_file) // default: Executable.exe File.xml - { - args = quote + path + quote; // execute the command Program.exe "File.xml" - } - else // use advanced command-line arguments, e.g. "Program.exe -safe File.xml" -windowed for "-safe %FILE% -windowed" + std::string file_name = mFileList->getSelectedItemLabel(1); // get the file name of the currently-selected floater + if (file_name.empty()) // if no item is selected { - first_part_of_args = custom_args.substr(0,position_of_file); // get part of args before file name - second_part_of_args = custom_args.substr(position_of_file+6,custom_args.length()); // get part of args after file name - custom_args = first_part_of_args + std::string("\"") + path + std::string("\"") + second_part_of_args; // replace %FILE% with "<file path>" and put back together - args = custom_args; // and save in the variable that is actually used + llwarns << "No file selected" << llendl; + return; // ignore click } + file_path = getLocalizedDirectory() + file_name; - // find directory in which executable resides by taking everything after last slash - int last_slash_position = exe_path.find_last_of(mDelim); - if(-1 == last_slash_position) - { - std::string warning = std::string("Unable to find a valid path to the specified executable for XUI XML editing: ") + exe_path; - popupAndPrintWarning(warning); - return; - } - std::string exe_dir = exe_path.substr(0,last_slash_position); // strip executable off, e.g. get "C:\Program Files\TextPad 5" (with or without trailing slash) - -#if LL_WINDOWS - PROCESS_INFORMATION pinfo; - STARTUPINFOA sinfo; - memset(&sinfo, 0, sizeof(sinfo)); - memset(&pinfo, 0, sizeof(pinfo)); - - std::string exe_name = exe_path.substr(last_slash_position+1); - args = quote + exe_name + quote + std::string(" ") + args; // and prepend the executable name, so we get 'Program.exe "Arg1"' - - char *args2 = new char[args.size() + 1]; // Windows requires that the second parameter to CreateProcessA be a writable (non-const) string... - strcpy(args2, args.c_str()); - - // we don't want the current directory to be the executable directory, since the file path is now relative. By using - // NULL for the current directory instead of exe_dir.c_str(), the path to the target file will work. - if(!CreateProcessA(exe_path.c_str(), args2, NULL, NULL, FALSE, 0, NULL, NULL, &sinfo, &pinfo)) - { - // DWORD dwErr = GetLastError(); - std::string warning = "Creating editor process failed!"; - popupAndPrintWarning(warning); - } - else + // stat file to see if it exists (some localized versions may not have it there are no diffs, and then we try to open an nonexistent file) + llstat dummy; + if(LLFile::stat(file_path.c_str(), &dummy)) // if the file does not exist { - // foo = pinfo.dwProcessId; // get your pid here if you want to use it later on - // sGatewayHandle = pinfo.hProcess; - CloseHandle(pinfo.hThread); // stops leaks - nothing else + popupAndPrintWarning("No file for this floater exists in the selected localization. Opening the EN version instead."); + file_path = get_xui_dir() + mDelim + "en" + mDelim + file_name; // open the en version instead, by default } + } - delete[] args2; -#else // if !LL_WINDOWS - // This code was copied from the code to run SLVoice, with some modification; should work in UNIX (Mac/Darwin or Linux) + // Set the editor command. + std::string cmd_override; + { + std::string bin = mEditorPathTextBox->getText(); + if (!bin.empty()) { - std::vector<std::string> arglist; - arglist.push_back(exe_path.c_str()); - - // Split the argument string into separate strings for each argument - typedef boost::tokenizer< boost::char_separator<char> > tokenizer; - boost::char_separator<char> sep("","\" ", boost::drop_empty_tokens); - - tokenizer tokens(args, sep); - tokenizer::iterator token_iter; - BOOL inside_quotes = FALSE; - BOOL last_was_space = FALSE; - for(token_iter = tokens.begin(); token_iter != tokens.end(); ++token_iter) - { - if(!strncmp("\"",(*token_iter).c_str(),2)) - { - inside_quotes = !inside_quotes; - } - else if(!strncmp(" ",(*token_iter).c_str(),2)) - { - if(inside_quotes) - { - arglist.back().append(std::string(" ")); - last_was_space = TRUE; - } - } - else - { - std::string to_push = *token_iter; - if(last_was_space) - { - arglist.back().append(to_push); - last_was_space = FALSE; - } - else - { - arglist.push_back(to_push); - } - } - } - - // create an argv vector for the child process - char **fakeargv = new char*[arglist.size() + 1]; - int i; - for(i=0; i < arglist.size(); i++) - fakeargv[i] = const_cast<char*>(arglist[i].c_str()); - - fakeargv[i] = NULL; - - fflush(NULL); // flush all buffers before the child inherits them - pid_t id = vfork(); - if(id == 0) + // surround command with double quotes for the case if the path contains spaces + if (bin.find("\"") == std::string::npos) { - // child - execv(exe_path.c_str(), fakeargv); - - // If we reach this point, the exec failed. - // Use _exit() instead of exit() per the vfork man page. - std::string warning = "Creating editor process failed (vfork/execv)!"; - popupAndPrintWarning(warning); - _exit(0); + bin = "\"" + bin + "\""; } - // parent - delete[] fakeargv; - // sGatewayPID = id; + std::string args = mEditorArgsTextBox->getText(); + cmd_override = bin + " " + args; } -#endif // LL_WINDOWS } - else + if (!mExternalEditor.setCommand("LL_XUI_EDITOR", cmd_override)) { - std::string warning = "Unable to find path to external XML editor for XUI preview tool"; + std::string warning = "Select an editor by setting the environment variable LL_XUI_EDITOR " + "or the ExternalEditor setting or specifying its path in the \"Editor Path\" field."; popupAndPrintWarning(warning); + return; + } + + // Run the editor. + if (!mExternalEditor.run(file_path)) + { + popupAndPrintWarning("Failed to run editor"); + return; } } diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp index fc758569e4b5fcf6d0ba005dfe2c97bb62db13a8..c099a3964b9b2c1cd24d384f2037576be0c84108 100644 --- a/indra/newview/llhudnametag.cpp +++ b/indra/newview/llhudnametag.cpp @@ -87,7 +87,6 @@ LLHUDNameTag::LLHUDNameTag(const U8 type) mZCompare(TRUE), mVisibleOffScreen(FALSE), mOffscreen(FALSE), - mColor(1.f, 1.f, 1.f, 1.f), // mScale(), mWidth(0.f), mHeight(0.f), @@ -109,6 +108,8 @@ LLHUDNameTag::LLHUDNameTag(const U8 type) { LLPointer<LLHUDNameTag> ptr(this); sTextObjects.insert(ptr); + + mColor = LLUIColorTable::instance().getColor("BackgroundChatColor"); } LLHUDNameTag::~LLHUDNameTag() @@ -256,6 +257,7 @@ void LLHUDNameTag::renderText(BOOL for_select) LLColor4 shadow_color(0.f, 0.f, 0.f, 1.f); F32 alpha_factor = 1.f; + mColor = LLUIColorTable::instance().getColor("BackgroundChatColor"); LLColor4 text_color = mColor; if (mDoFade) { @@ -521,7 +523,6 @@ void LLHUDNameTag::renderText(BOOL for_select) x_offset += 1; } - text_color = segment_iter->mColor; text_color.mV[VALPHA] *= alpha_factor; hud_render_text(segment_iter->getText(), render_position, *fontp, style, shadow, x_offset, y_offset, text_color, FALSE); diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index e000abda2a3a6e73ccb2847687549816db097801..bdc0dfa7e2f6f4bc57b30ba2f9e1d04980ae8257 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -680,8 +680,6 @@ void LLIMFloater::updateMessages() if (messages.size()) { -// LLUIColor chat_color = LLUIColorTable::instance().getColor("IMChatColor"); - LLSD chat_args; chat_args["use_plain_text_chat_history"] = use_plain_text_chat_history; diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index cc482260528106e590014b91e12704e9b6150e3d..3578c986224b1713f1f9ac33ae8abbd756d29850 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -537,7 +537,15 @@ bool LLIMModel::LLIMSession::isOtherParticipantAvaline() void LLIMModel::LLIMSession::onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name) { - mHistoryFileName = av_name.mUsername; + if (av_name.mUsername.empty()) + { + // display names is off, use mDisplayName which will be the legacy name + mHistoryFileName = LLCacheName::buildUsername(av_name.mDisplayName); + } + else + { + mHistoryFileName = av_name.mUsername; + } } void LLIMModel::LLIMSession::buildHistoryFileName() diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 904e3dabcc6adc4f5d59efb8c48f356e813cbd92..17433a557b91d805bf4bd601c67b5dfef2b13ce0 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -329,15 +329,23 @@ void LLPanelMainInventory::setSortBy(const LLSD& userdata) if (sort_field == "name") { U32 order = getActivePanel()->getSortOrder(); - getActivePanel()->setSortOrder( order & ~LLInventoryFilter::SO_DATE ); - + order &= ~LLInventoryFilter::SO_DATE; + + getActivePanel()->setSortOrder( order ); + + gSavedSettings.setU32("InventorySortOrder", order); + gSavedSettings.setBOOL("Inventory.SortByName", TRUE ); gSavedSettings.setBOOL("Inventory.SortByDate", FALSE ); } else if (sort_field == "date") { U32 order = getActivePanel()->getSortOrder(); - getActivePanel()->setSortOrder( order | LLInventoryFilter::SO_DATE ); + order |= LLInventoryFilter::SO_DATE; + + getActivePanel()->setSortOrder( order ); + + gSavedSettings.setU32("InventorySortOrder", order); gSavedSettings.setBOOL("Inventory.SortByName", FALSE ); gSavedSettings.setBOOL("Inventory.SortByDate", TRUE ); @@ -375,6 +383,8 @@ void LLPanelMainInventory::setSortBy(const LLSD& userdata) gSavedSettings.setBOOL("Inventory.SystemFoldersToTop", TRUE ); } getActivePanel()->setSortOrder( order ); + + gSavedSettings.setU32("InventorySortOrder", order); } } @@ -915,6 +925,7 @@ void LLPanelMainInventory::initListCommandsHandlers() )); mCommitCallbackRegistrar.add("Inventory.GearDefault.Custom.Action", boost::bind(&LLPanelMainInventory::onCustomAction, this, _2)); + mEnableCallbackRegistrar.add("Inventory.GearDefault.Check", boost::bind(&LLPanelMainInventory::isActionChecked, this, _2)); mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2)); mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); mGearMenuButton->setMenu(mMenuGearDefault); @@ -1000,6 +1011,11 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata) const LLSD arg = "date"; setSortBy(arg); } + if (command_name == "sort_system_folders_to_top") + { + const LLSD arg = "systemfolderstotop"; + setSortBy(arg); + } if (command_name == "show_filters") { toggleFindOptions(); @@ -1173,6 +1189,31 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata) return TRUE; } +BOOL LLPanelMainInventory::isActionChecked(const LLSD& userdata) +{ + const std::string command_name = userdata.asString(); + + if (command_name == "sort_by_name") + { + U32 order = getActivePanel()->getSortOrder(); + return ~order & LLInventoryFilter::SO_DATE; + } + + if (command_name == "sort_by_recent") + { + U32 order = getActivePanel()->getSortOrder(); + return order & LLInventoryFilter::SO_DATE; + } + + if (command_name == "sort_system_folders_to_top") + { + U32 order = getActivePanel()->getSortOrder(); + return order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP; + } + + return FALSE; +} + bool LLPanelMainInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept) { *accept = ACCEPT_NO; diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index d136e2d32ea686cf7242df0732920ba33f65a1c7..c2b78ff9ea0370e26a9fc9b5ddc13b6efdb317b7 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -136,6 +136,7 @@ class LLPanelMainInventory : public LLPanel, LLInventoryObserver void onTrashButtonClick(); void onClipboardAction(const LLSD& userdata); BOOL isActionEnabled(const LLSD& command_name); + BOOL isActionChecked(const LLSD& userdata); void onCustomAction(const LLSD& command_name); bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept); /** diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index cf2ea3828808d0c4d53f5a1296386f1e62d12280..330e809c539106477037af7dad2eb11da5e4e15f 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -34,11 +34,13 @@ #include "llcheckboxctrl.h" #include "llcombobox.h" #include "lldir.h" +#include "llexternaleditor.h" #include "llfloaterreg.h" #include "llinventorydefines.h" #include "llinventorymodel.h" #include "llkeyboard.h" #include "lllineeditor.h" +#include "lllivefile.h" #include "llhelp.h" #include "llnotificationsutil.h" #include "llresmgr.h" @@ -115,6 +117,54 @@ static bool have_script_upload_cap(LLUUID& object_id) return object && (! object->getRegion()->getCapability("UpdateScriptTask").empty()); } +/// --------------------------------------------------------------------------- +/// LLLiveLSLFile +/// --------------------------------------------------------------------------- +class LLLiveLSLFile : public LLLiveFile +{ +public: + LLLiveLSLFile(std::string file_path, LLLiveLSLEditor* parent); + ~LLLiveLSLFile(); + + void ignoreNextUpdate() { mIgnoreNextUpdate = true; } + +protected: + /*virtual*/ bool loadFile(); + + LLLiveLSLEditor* mParent; + bool mIgnoreNextUpdate; +}; + +LLLiveLSLFile::LLLiveLSLFile(std::string file_path, LLLiveLSLEditor* parent) +: mParent(parent) +, mIgnoreNextUpdate(false) +, LLLiveFile(file_path, 1.0) +{ +} + +LLLiveLSLFile::~LLLiveLSLFile() +{ + LLFile::remove(filename()); +} + +bool LLLiveLSLFile::loadFile() +{ + if (mIgnoreNextUpdate) + { + mIgnoreNextUpdate = false; + return true; + } + + if (!mParent->loadScriptText(filename())) + { + return false; + } + + // Disable sync to avoid recursive load->save->load calls. + mParent->saveIfNeeded(false); + return true; +} + /// --------------------------------------------------------------------------- /// LLFloaterScriptSearch /// --------------------------------------------------------------------------- @@ -281,6 +331,7 @@ LLScriptEdCore::LLScriptEdCore( const LLHandle<LLFloater>& floater_handle, void (*load_callback)(void*), void (*save_callback)(void*, BOOL), + void (*edit_callback)(void*), void (*search_replace_callback) (void* userdata), void* userdata, S32 bottom_pad) @@ -290,6 +341,7 @@ LLScriptEdCore::LLScriptEdCore( mEditor( NULL ), mLoadCallback( load_callback ), mSaveCallback( save_callback ), + mEditCallback( edit_callback ), mSearchReplaceCallback( search_replace_callback ), mUserdata( userdata ), mForceClose( FALSE ), @@ -329,6 +381,7 @@ BOOL LLScriptEdCore::postBuild() childSetCommitCallback("lsl errors", &LLScriptEdCore::onErrorList, this); childSetAction("Save_btn", boost::bind(&LLScriptEdCore::doSave,this,FALSE)); + childSetAction("Edit_btn", boost::bind(&LLScriptEdCore::onEditButtonClick, this)); initMenu(); @@ -809,6 +862,13 @@ void LLScriptEdCore::doSave( BOOL close_after_save ) } } +void LLScriptEdCore::onEditButtonClick() +{ + if (mEditCallback) + { + mEditCallback(mUserdata); + } +} void LLScriptEdCore::onBtnUndoChanges() { @@ -949,6 +1009,7 @@ void* LLPreviewLSL::createScriptEdPanel(void* userdata) self->getHandle(), LLPreviewLSL::onLoad, LLPreviewLSL::onSave, + NULL, // no edit callback LLPreviewLSL::onSearchReplace, self, 0); @@ -1417,6 +1478,7 @@ void* LLLiveLSLEditor::createScriptEdPanel(void* userdata) self->getHandle(), &LLLiveLSLEditor::onLoad, &LLLiveLSLEditor::onSave, + &LLLiveLSLEditor::onEdit, &LLLiveLSLEditor::onSearchReplace, self, 0); @@ -1433,6 +1495,7 @@ LLLiveLSLEditor::LLLiveLSLEditor(const LLSD& key) : mCloseAfterSave(FALSE), mPendingUploads(0), mIsModifiable(FALSE), + mLiveFile(NULL), mIsNew(false) { mFactoryMap["script ed panel"] = LLCallbackMap(LLLiveLSLEditor::createScriptEdPanel, this); @@ -1458,6 +1521,7 @@ BOOL LLLiveLSLEditor::postBuild() LLLiveLSLEditor::~LLLiveLSLEditor() { + delete mLiveFile; } // virtual @@ -1639,38 +1703,39 @@ void LLLiveLSLEditor::onLoadComplete(LLVFS *vfs, const LLUUID& asset_id, delete xored_id; } -// unused -// void LLLiveLSLEditor::loadScriptText(const std::string& filename) -// { -// if(!filename) -// { -// llerrs << "Filename is Empty!" << llendl; -// return; -// } -// LLFILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/ -// if(file) -// { -// // read in the whole file -// fseek(file, 0L, SEEK_END); -// long file_length = ftell(file); -// fseek(file, 0L, SEEK_SET); -// char* buffer = new char[file_length+1]; -// size_t nread = fread(buffer, 1, file_length, file); -// if (nread < (size_t) file_length) -// { -// llwarns << "Short read" << llendl; -// } -// buffer[nread] = '\0'; -// fclose(file); -// mScriptEd->mEditor->setText(LLStringExplicit(buffer)); -// mScriptEd->mEditor->makePristine(); -// delete[] buffer; -// } -// else -// { -// llwarns << "Error opening " << filename << llendl; -// } -// } + bool LLLiveLSLEditor::loadScriptText(const std::string& filename) + { + if (filename.empty()) + { + llwarns << "Empty file name" << llendl; + return false; + } + + LLFILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/ + if (!file) + { + llwarns << "Error opening " << filename << llendl; + return false; + } + + // read in the whole file + fseek(file, 0L, SEEK_END); + size_t file_length = (size_t) ftell(file); + fseek(file, 0L, SEEK_SET); + char* buffer = new char[file_length+1]; + size_t nread = fread(buffer, 1, file_length, file); + if (nread < file_length) + { + llwarns << "Short read" << llendl; + } + buffer[nread] = '\0'; + fclose(file); + mScriptEd->mEditor->setText(LLStringExplicit(buffer)); + //mScriptEd->mEditor->makePristine(); + delete[] buffer; + + return true; + } void LLLiveLSLEditor::loadScriptText(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type) { @@ -1825,9 +1890,8 @@ LLLiveLSLSaveData::LLLiveLSLSaveData(const LLUUID& id, mItem = new LLViewerInventoryItem(item); } -void LLLiveLSLEditor::saveIfNeeded() +void LLLiveLSLEditor::saveIfNeeded(bool sync) { - llinfos << "LLLiveLSLEditor::saveIfNeeded()" << llendl; LLViewerObject* object = gObjectList.findObject(mObjectUUID); if(!object) { @@ -1877,9 +1941,74 @@ void LLLiveLSLEditor::saveIfNeeded() mItem->setAssetUUID(asset_id); mItem->setTransactionID(tid); - // write out the data, and store it in the asset database + writeToFile(filename); + + if (sync) + { + // Sync with external ed2itor. + std::string tmp_file = getTmpFileName(); + llstat s; + if (LLFile::stat(tmp_file, &s) == 0) // file exists + { + if (mLiveFile) mLiveFile->ignoreNextUpdate(); + writeToFile(tmp_file); + } + } + + // save it out to asset server + std::string url = object->getRegion()->getCapability("UpdateScriptTask"); + getWindow()->incBusyCount(); + mPendingUploads++; + BOOL is_running = getChild<LLCheckBoxCtrl>( "running")->get(); + if (!url.empty()) + { + uploadAssetViaCaps(url, filename, mObjectUUID, mItemUUID, is_running); + } + else if (gAssetStorage) + { + uploadAssetLegacy(filename, object, tid, is_running); + } +} + +void LLLiveLSLEditor::openExternalEditor() +{ + LLViewerObject* object = gObjectList.findObject(mObjectUUID); + if(!object) + { + LLNotificationsUtil::add("SaveScriptFailObjectNotFound"); + return; + } + + delete mLiveFile; // deletes file + + // Save the script to a temporary file. + std::string filename = getTmpFileName(); + writeToFile(filename); + + // Start watching file changes. + mLiveFile = new LLLiveLSLFile(filename, this); + mLiveFile->addToEventTimer(); + + // Open it in external editor. + { + LLExternalEditor ed; + + if (!ed.setCommand("LL_SCRIPT_EDITOR")) + { + std::string msg = "Select an editor by setting the environment variable LL_SCRIPT_EDITOR " + "or the ExternalEditor setting"; // *TODO: localize + LLNotificationsUtil::add("GenericAlert", LLSD().with("MESSAGE", msg)); + return; + } + + ed.run(filename); + } +} + +bool LLLiveLSLEditor::writeToFile(const std::string& filename) +{ LLFILE* fp = LLFile::fopen(filename, "wb"); - if(!fp) + if (!fp) { llwarns << "Unable to write to " << filename << llendl; @@ -1887,33 +2016,25 @@ void LLLiveLSLEditor::saveIfNeeded() row["columns"][0]["value"] = "Error writing to local file. Is your hard drive full?"; row["columns"][0]["font"] = "SANSSERIF_SMALL"; mScriptEd->mErrorList->addElement(row); - return; + return false; } + std::string utf8text = mScriptEd->mEditor->getText(); // Special case for a completely empty script - stuff in one space so it can store properly. See SL-46889 - if ( utf8text.size() == 0 ) + if (utf8text.size() == 0) { utf8text = " "; } fputs(utf8text.c_str(), fp); fclose(fp); - fp = NULL; - - // save it out to asset server - std::string url = object->getRegion()->getCapability("UpdateScriptTask"); - getWindow()->incBusyCount(); - mPendingUploads++; - BOOL is_running = getChild<LLCheckBoxCtrl>( "running")->get(); - if (!url.empty()) - { - uploadAssetViaCaps(url, filename, mObjectUUID, mItemUUID, is_running); - } - else if (gAssetStorage) - { - uploadAssetLegacy(filename, object, tid, is_running); - } + return true; +} + +std::string LLLiveLSLEditor::getTmpFileName() +{ + return std::string(LLFile::tmpdir()) + "sl_script_" + mObjectUUID.asString() + ".lsl"; } void LLLiveLSLEditor::uploadAssetViaCaps(const std::string& url, @@ -2138,6 +2259,14 @@ void LLLiveLSLEditor::onSave(void* userdata, BOOL close_after_save) self->saveIfNeeded(); } + +// static +void LLLiveLSLEditor::onEdit(void* userdata) +{ + LLLiveLSLEditor* self = (LLLiveLSLEditor*)userdata; + self->openExternalEditor(); +} + // static void LLLiveLSLEditor::processScriptRunningReply(LLMessageSystem* msg, void**) { diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index f4b31e5962f5a4b5926c661ec058f7829ad70855..d35c6b85283b0445ee09b2b69f3f414f76b64544 100644 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -35,6 +35,7 @@ #include "lliconctrl.h" #include "llframetimer.h" +class LLLiveLSLFile; class LLMessageSystem; class LLTextEditor; class LLButton; @@ -62,6 +63,7 @@ class LLScriptEdCore : public LLPanel const LLHandle<LLFloater>& floater_handle, void (*load_callback)(void* userdata), void (*save_callback)(void* userdata, BOOL close_after_save), + void (*edit_callback)(void*), void (*search_replace_callback)(void* userdata), void* userdata, S32 bottom_pad = 0); // pad below bottom row of buttons @@ -80,6 +82,8 @@ class LLScriptEdCore : public LLPanel bool handleSaveChangesDialog(const LLSD& notification, const LLSD& response); bool handleReloadFromServerDialog(const LLSD& notification, const LLSD& response); + void onEditButtonClick(); + static void onCheckLock(LLUICtrl*, void*); static void onHelpComboCommit(LLUICtrl* ctrl, void* userdata); static void onClickBack(void* userdata); @@ -114,6 +118,7 @@ class LLScriptEdCore : public LLPanel LLTextEditor* mEditor; void (*mLoadCallback)(void* userdata); void (*mSaveCallback)(void* userdata, BOOL close_after_save); + void (*mEditCallback)(void* userdata); void (*mSearchReplaceCallback) (void* userdata); void* mUserdata; LLComboBox *mFunctions; @@ -179,6 +184,7 @@ class LLPreviewLSL : public LLPreview // Used to view and edit an LSL that is attached to an object. class LLLiveLSLEditor : public LLPreview { + friend class LLLiveLSLFile; public: LLLiveLSLEditor(const LLSD& key); ~LLLiveLSLEditor(); @@ -202,7 +208,10 @@ class LLLiveLSLEditor : public LLPreview virtual void loadAsset(); void loadAsset(BOOL is_new); - void saveIfNeeded(); + void saveIfNeeded(bool sync = true); + void openExternalEditor(); + std::string getTmpFileName(); + bool writeToFile(const std::string& filename); void uploadAssetViaCaps(const std::string& url, const std::string& filename, const LLUUID& task_id, @@ -218,6 +227,7 @@ class LLLiveLSLEditor : public LLPreview static void onSearchReplace(void* userdata); static void onLoad(void* userdata); static void onSave(void* userdata, BOOL close_after_save); + static void onEdit(void* userdata); static void onLoadComplete(LLVFS *vfs, const LLUUID& asset_uuid, LLAssetType::EType type, @@ -227,7 +237,7 @@ class LLLiveLSLEditor : public LLPreview static void onRunningCheckboxClicked(LLUICtrl*, void* userdata); static void onReset(void* userdata); -// void loadScriptText(const std::string& filename); // unused + bool loadScriptText(const std::string& filename); void loadScriptText(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type); static void onErrorList(LLUICtrl*, void* user_data); @@ -253,6 +263,7 @@ class LLLiveLSLEditor : public LLPreview LLCheckBoxCtrl* mMonoCheckbox; BOOL mIsModifiable; + LLLiveLSLFile* mLiveFile; }; #endif // LL_LLPREVIEWSCRIPT_H diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index fbec2a7b9e6e36571bd3b21bee612a20db82a5e8..117e49d67faa1a136156ef3c313c8b67996e246c 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -117,10 +117,23 @@ static bool handleSetShaderChanged(const LLSD& newvalue) gBumpImageList.destroyGL(); gBumpImageList.restoreGL(); + // Changing shader also changes the terrain detail to high, reflect that change here + if (newvalue.asBoolean()) + { + // shaders enabled, set terrain detail to high + gSavedSettings.setS32("RenderTerrainDetail", 1); + } + // else, leave terrain detail as is LLViewerShaderMgr::instance()->setShaders(); return true; } +bool handleRenderTransparentWaterChanged(const LLSD& newvalue) +{ + LLWorld::getInstance()->updateWaterObjects(); + return true; +} + static bool handleReleaseGLBufferChanged(const LLSD& newvalue) { if (gPipeline.isInit()) @@ -637,6 +650,7 @@ void settings_setup_listeners() gSavedSettings.getControl("ShowMiniLocationPanel")->getSignal()->connect(boost::bind(&toggle_show_mini_location_panel, _2)); gSavedSettings.getControl("ShowObjectRenderingCost")->getSignal()->connect(boost::bind(&toggle_show_object_render_cost, _2)); gSavedSettings.getControl("ForceShowGrid")->getSignal()->connect(boost::bind(&handleForceShowGrid, _2)); + gSavedSettings.getControl("RenderTransparentWater")->getSignal()->connect(boost::bind(&handleRenderTransparentWaterChanged, _2)); } #if TEST_CACHED_CONTROL diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index b3f14b441d4e468c2dfacee9f720b1601688b765..f573f25efe79727216cac4a46522f2a831cd3a27 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -81,6 +81,7 @@ #include "llfloaterpostprocess.h" #include "llfloaterpreference.h" #include "llfloaterproperties.h" +#include "llfloaterregiondebugconsole.h" #include "llfloaterregioninfo.h" #include "llfloaterreporter.h" #include "llfloaterscriptdebug.h" @@ -227,6 +228,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("reporter", "floater_report_abuse.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterReporter>); LLFloaterReg::add("reset_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterResetQueue>); + LLFloaterReg::add("region_debug_console", "floater_region_debug_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRegionDebugConsole>); LLFloaterReg::add("region_info", "floater_region_info.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRegionInfo>); LLFloaterReg::add("script_debug", "floater_script_debug.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterScriptDebug>); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 2874a6ec7935ba82792318255d2ae00fe5093271..03490034d85fc963d461ad5870481d534e960721 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -6500,16 +6500,6 @@ 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; } }; @@ -7805,6 +7795,9 @@ void initialize_menus() view_listener_t::addMenu(new LLViewCheckRenderType(), "View.CheckRenderType"); view_listener_t::addMenu(new LLViewCheckHUDAttachments(), "View.CheckHUDAttachments"); + // Me > Movement + view_listener_t::addMenu(new LLAdvancedAgentFlyingInfo(), "Agent.getFlying"); + // World menu commit.add("World.Chat", boost::bind(&handle_chat, (void*)NULL)); view_listener_t::addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun"); @@ -7878,9 +7871,6 @@ void initialize_menus() // Advanced Other Settings view_listener_t::addMenu(new LLAdvancedClearGroupCache(), "Advanced.ClearGroupCache"); - - // Advanced > Shortcuts - view_listener_t::addMenu(new LLAdvancedAgentFlyingInfo(), "Agent.getFlying"); // Advanced > Render > Types view_listener_t::addMenu(new LLAdvancedToggleRenderType(), "Advanced.ToggleRenderType"); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 700b5e9fb1ff1eec19e5f6b211990b07b36c2113..0fb64f29ff481727be4939fa52f3a84e6ed34658 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -3032,6 +3032,7 @@ void process_offer_callingcard(LLMessageSystem* msg, void**) } else { + args["NAME"] = source_name; LLNotificationsUtil::add("OfferCallingCard", args, payload); } } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index b684206960b329d900492b2f38d23fb8bb2d490f..ca07e7c4cf1886ecb7979e04af7e84c954b7949a 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1400,6 +1400,8 @@ void LLViewerRegion::setSeedCapability(const std::string& url) capabilityNames.append("SendUserReportWithScreenshot"); capabilityNames.append("ServerReleaseNotes"); capabilityNames.append("SetDisplayName"); + capabilityNames.append("SimConsole"); + capabilityNames.append("SimConsoleAsync"); capabilityNames.append("StartGroupProposal"); capabilityNames.append("TextureStats"); capabilityNames.append("UntrustedSimulatorMessage"); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 743def4a0ce7d7d5ac12867eb8e9c1288f0f97d1..a7790243ed35a687770461fe8d34acbb569a22e0 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2266,6 +2266,20 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask) return TRUE; } + // If "Pressing letter keys starts local chat" option is selected, we are not in mouselook, + // no view has keyboard focus, this is a printable character key (and no modifier key is + // pressed except shift), then give focus to nearby chat (STORM-560) + if ( gSavedSettings.getS32("LetterKeysFocusChatBar") && !gAgentCamera.cameraMouselook() && + !keyboard_focus && key < 0x80 && (mask == MASK_NONE || mask == MASK_SHIFT) ) + { + LLLineEditor* chat_editor = LLBottomTray::instanceExists() ? LLBottomTray::getInstance()->getNearbyChatBar()->getChatBox() : NULL; + if (chat_editor) + { + // passing NULL here, character will be added later when it is handled by character handler. + LLBottomTray::getInstance()->getNearbyChatBar()->startChat(NULL); + return TRUE; + } + } // give menus a chance to handle unmodified accelerator keys if ((gMenuBarView && gMenuBarView->handleAcceleratorKey(key, mask)) diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp index 9280eb8fa48ded86450bab537fc1700b7d93c049..71f08ec36d7dfcee856a86d1919fa9c5f81cecb5 100644 --- a/indra/newview/llvowater.cpp +++ b/indra/newview/llvowater.cpp @@ -60,8 +60,10 @@ const U32 WIDTH = (N_RES * WAVE_STEP); //128.f //64 // width of wave tile, in const F32 WAVE_STEP_INV = (1. / WAVE_STEP); -LLVOWater::LLVOWater(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp) -: LLStaticViewerObject(id, pcode, regionp), +LLVOWater::LLVOWater(const LLUUID &id, + const LLPCode pcode, + LLViewerRegion *regionp) : + LLStaticViewerObject(id, pcode, regionp), mRenderType(LLPipeline::RENDER_TYPE_WATER) { // Terrain must draw during selection passes so it can block objects behind it. @@ -153,11 +155,17 @@ BOOL LLVOWater::updateGeometry(LLDrawable *drawable) LLStrider<U16> indicesp; U16 index_offset; - S32 size = 16; - S32 num_quads = size*size; - face->setSize(4*num_quads, 6*num_quads); + // A quad is 4 vertices and 6 indices (making 2 triangles) + static const unsigned int vertices_per_quad = 4; + static const unsigned int indices_per_quad = 6; + const S32 size = gSavedSettings.getBOOL("RenderTransparentWater") ? 16 : 1; + + const S32 num_quads = size * size; + face->setSize(vertices_per_quad * num_quads, + indices_per_quad * num_quads); + if (face->mVertexBuffer.isNull()) { face->mVertexBuffer = new LLVertexBuffer(LLDrawPoolWater::VERTEX_DATA_MASK, GL_DYNAMIC_DRAW_ARB); diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index ddd2ff196b6cc9bb52a74427a41fd86b784df47d..aeea2306f773d8082e67e852b40cdb3e71750010 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -399,9 +399,6 @@ <color name="HighlightParentColor" value="0.67 0.83 0.96 1" /> - <color - name="IMChatColor" - reference="LtGray" /> <color name="IMHistoryBgColor" reference="Unused?" /> @@ -766,9 +763,6 @@ <color name="SysWellItemSelected" value="0.3 0.3 0.3 1.0" /> - <color - name="ChatToastAgentNameColor" - reference="EmphasisColor" /> <color name="ColorSwatchBorderColor" value="0.45098 0.517647 0.607843 1"/> diff --git a/indra/newview/skins/default/xui/da/floater_bumps.xml b/indra/newview/skins/default/xui/da/floater_bumps.xml index d22de6e7f135ade8784adadcb99a469133e66412..1db2e93fd27c5bd23021d30e8b0eff8e1808e402 100644 --- a/indra/newview/skins/default/xui/da/floater_bumps.xml +++ b/indra/newview/skins/default/xui/da/floater_bumps.xml @@ -4,19 +4,19 @@ Ingen registreret </floater.string> <floater.string name="bump"> - [TIME] [FIRST] [LAST] ramte dig + [TIME] [NAME] ramte dig </floater.string> <floater.string name="llpushobject"> - [TIME] [FIRST] [LAST] skubbede dig med et script + [TIME] [NAME] skubbede dig med et script </floater.string> <floater.string name="selected_object_collide"> - [TIME] [FIRST] [LAST] ramte dig med et objekt + [TIME] [NAME] ramte dig med et objekt </floater.string> <floater.string name="scripted_object_collide"> - [TIME] [FIRST] [LAST] ramte dig med et scriptet objekt + [TIME] [NAME] ramte dig med et scriptet objekt </floater.string> <floater.string name="physical_object_collide"> - [TIME] [FIRST] [LAST] ramte dig med et fysisk objekt + [TIME] [NAME] ramte dig med et fysisk objekt </floater.string> <floater.string name="timeStr"> [[hour,datetime,slt]:[min,datetime,slt]] diff --git a/indra/newview/skins/default/xui/da/floater_pay.xml b/indra/newview/skins/default/xui/da/floater_pay.xml index b2cdc0bfe78164de6ab59c18f142ea717694268f..5ebdd3f084ca30c41aad9d70d5ff8d8524bcd7a7 100644 --- a/indra/newview/skins/default/xui/da/floater_pay.xml +++ b/indra/newview/skins/default/xui/da/floater_pay.xml @@ -11,7 +11,7 @@ </text> <icon name="icon_person" tool_tip="Person"/> <text name="payee_name"> - [FIRST] [LAST] + Test Name That Is Extremely Long To Check Clipping </text> <button label="L$1" label_selected="L$1" name="fastpay 1"/> <button label="L$5" label_selected="L$5" name="fastpay 5"/> diff --git a/indra/newview/skins/default/xui/da/floater_pay_object.xml b/indra/newview/skins/default/xui/da/floater_pay_object.xml index 368d6786818411ff12861504b702748a29ad51bd..260b257c33311c8073cc83f7ceee189465872fa2 100644 --- a/indra/newview/skins/default/xui/da/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/da/floater_pay_object.xml @@ -8,7 +8,7 @@ </string> <icon name="icon_person" tool_tip="Person"/> <text name="payee_name"> - [FIRST] [LAST] + Ericacita Moostopolison </text> <text name="object_name_label"> Via objekt: diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml index 917b7cc21e34541f94aef41509b512c96312b8f6..a8849861cf6e092c993628df0737447113335550 100644 --- a/indra/newview/skins/default/xui/da/notifications.xml +++ b/indra/newview/skins/default/xui/da/notifications.xml @@ -931,10 +931,10 @@ Henvis til dette fra en hjemmeside for at give andre nem adgang til denne lokati Erstattet manglende tøj/kropsdele med standard. </notification> <notification name="FriendOnline"> - [FIRST] [LAST] er Online + [NAME] er Online </notification> <notification name="FriendOffline"> - [FIRST] [LAST] er Offline + [NAME] er Offline </notification> <notification name="AddSelfFriend"> Selvom du nok er meget sød, kan du ikke tilføje dig selv som ven. @@ -1002,9 +1002,6 @@ Prøv venligst igen. <notification name="CannotRemoveProtectedCategories"> Du kan ikke fjerne beskyttede kategorier. </notification> - <notification name="OfferedCard"> - Du har tilbudt et visitkort til [FIRST] [LAST] - </notification> <notification name="UnableToBuyWhileDownloading"> Ikke muligt at købe, imens genstandens data hentes. Prøv venligst igen. @@ -1120,7 +1117,7 @@ Prøv venligst at geninstallere plugin eller kontakt leverandøren hvis probleme De genstande du ejer pÃ¥ det valgte stykke land er blevet returneret til din beholdning. </notification> <notification name="OtherObjectsReturned"> - Genstandene pÃ¥ det valgte stykke land der er ejet af [FIRST] [LAST] er blevet returneret til hans eller hendes beholdning. + Genstandene pÃ¥ det valgte stykke land der er ejet af [NAME] er blevet returneret til hans eller hendes beholdning. </notification> <notification name="OtherObjectsReturned2"> Objekterne i den valgte parcel, ejet af beboeren '[NAME]', er blevet returneret til deres ejer. @@ -1321,7 +1318,7 @@ Prøv igen om lidt. Tilbud om venskab afvist. </notification> <notification name="OfferCallingCard"> - [FIRST] [LAST] tilbyder dig et visitkort. + [NAME] tilbyder dig et visitkort. Dette vil lave et bogmørke i din beholding, sÃ¥ du hurtigt kan sende en IM til denne beboer. <form name="form"> <button name="Accept" text="Acceptér"/> @@ -1380,7 +1377,7 @@ Tillad denne anmodning? </form> </notification> <notification name="ScriptDialog"> - [FIRST] [LAST]'s '[TITLE]' + [NAME]'s '<nolink>[TITLE]</nolink>' [MESSAGE] <form name="form"> <button name="Ignore" text="Ignorér"/> @@ -1424,13 +1421,13 @@ Klik pÃ¥ Acceptér for at deltage eller Afvis for at afvise invitationen. Klik p </form> </notification> <notification name="AutoUnmuteByIM"> - [FIRST] [LAST] fik tilsendt en personlig besked og er dermed automatisk ikke mere blokeret. + [NAME] fik tilsendt en personlig besked og er dermed automatisk ikke mere blokeret. </notification> <notification name="AutoUnmuteByMoney"> - [FIRST] [LAST] blev givet penge og er dermed automatisk ikke mere blokeret. + [NAME] blev givet penge og er dermed automatisk ikke mere blokeret. </notification> <notification name="AutoUnmuteByInventory"> - [FIRST] [LAST] blev tilbudt en genstand og er dermed automatisk ikke mere blokeret. + [NAME] blev tilbudt en genstand og er dermed automatisk ikke mere blokeret. </notification> <notification name="VoiceInviteGroup"> [NAME] har has sluttet sig til stemme-chaten i gruppen [GROUP]. diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml index afd933c7fab406de4f9dd7bf671a1e372513990c..1c583f2e95ec1b441e496051494e83720408712d 100644 --- a/indra/newview/skins/default/xui/da/strings.xml +++ b/indra/newview/skins/default/xui/da/strings.xml @@ -3469,7 +3469,7 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE]. Du er den eneste deltager i denne samtale </string> <string name="offline_message"> - [FIRST] [LAST] er ikke logget pÃ¥. + [NAME] er ikke logget pÃ¥. </string> <string name="invite_message"> Tryk pÃ¥ [BUTTON NAME] knappen for at acceptére/tilslutte til denne stemme chat. diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index c2ca0c2fb032a1c2d7fca38c81cfafda561f856a..a904604b628c6bd24354298fefc7ca21a793249f 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -2481,7 +2481,7 @@ Versuchen Sie es in einigen Minuten erneut. Ihr Freundschaftsangebot wurde abgelehnt. </notification> <notification name="OfferCallingCard"> - [FIRST] [LAST] bietet Ihnen ihre/seine Visitenkarte an. + [NAME] bietet Ihnen ihre/seine Visitenkarte an. Ihrem Inventar wird ein Lesezeichen erstellt, damit Sie diesem Einwohner einfach eine IM schicken können. <form name="form"> <button name="Accept" text="Akzeptieren"/> diff --git a/indra/newview/skins/default/xui/de/panel_edit_profile.xml b/indra/newview/skins/default/xui/de/panel_edit_profile.xml index 7f6054dd608e3d5d564f34f0dc423f1f46d85b1a..be124050e89dbe79dd5f456611582b434314569f 100644 --- a/indra/newview/skins/default/xui/de/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/de/panel_edit_profile.xml @@ -54,7 +54,7 @@ <text name="my_account_link" value="[[URL] Meine Startseite aufrufen]"/> <text name="title_partner_text" value="Mein Partner:"/> <panel name="partner_data_panel"> - <text initial_value="(wird in Datenbank gesucht)" name="partner_text" value="[FIRST] [LAST]"/> + <text initial_value="(wird in Datenbank gesucht)" name="partner_text"/> </panel> <text name="partner_edit_link" value="[[URL] bearbeiten]"/> </panel> diff --git a/indra/newview/skins/default/xui/en/floater_region_debug_console.xml b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml new file mode 100644 index 0000000000000000000000000000000000000000..cf95257b0a508d9d5a1e937f4c6ff4a7894cc68e --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + name="region_debug_console" + title="Region Debug" + layout="topleft" + min_height="300" + min_width="300" + height="400" + width="600" + default_tab_group="1"> + <text_editor + left="10" + type="string" + length="1" + follows="left|top|right|bottom" + font="Monospace" + height="366" + width="576" + ignore_tab="false" + layout="topleft" + max_length="65536" + name="region_debug_console_output" + show_line_numbers="false" + word_wrap="true" + track_end="true" + read_only="true"> + </text_editor> + <line_editor + border_style="line" + border_thickness="1" + tab_group="1" + follows="left|top|right" + font="SansSerif" + height="19" + layout="topleft" + bottom_delta="20" + max_length="127" + name="region_debug_console_input" + top_delta="0" + width="576" /> +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index f361cb7f8e26639226fa6678826981fdaca3ab45..e70e1eb61b3a05db9c45570b418838b72f10e048 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -160,7 +160,7 @@ layout="topleft" left="10" height="70" - top="54" + top="59" name="focus_radio_group"> <radio_item top_pad="6" @@ -197,7 +197,7 @@ <radio_group left="10" height="70" - top="54" + top="59" layout="topleft" name="move_radio_group"> <radio_item @@ -931,7 +931,7 @@ height="23" image_overlay="Edit_Wrench" layout="topleft" - left_pad="3" + left_pad="13" name="button set group" tab_stop="false" tool_tip="Choose a group to share this object's permissions" @@ -944,7 +944,7 @@ name="checkbox share with group" tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions." top_pad="10" - left="106" + left="100" width="87" /> <button follows="top|left" @@ -953,7 +953,7 @@ label_selected="Deed" layout="topleft" name="button deed" - left_pad="3" + left_pad="19" tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer." width="80" /> <text @@ -974,7 +974,7 @@ layout="topleft" name="clickaction" width="148" - left_pad="0"> + left_pad="10"> <combo_box.item label="Touch (default)" name="Touch/grab(default)" @@ -1009,7 +1009,7 @@ width="100" /> <!-- NEW SALE TYPE COMBO BOX --> <combo_box - left_pad="0" + left_pad="10" layout="topleft" follows="left|top" allow_text_entry="false" @@ -1041,7 +1041,7 @@ even though the user gets a free copy. decimal_digits="0" increment="1" top_pad="8" - left="108" + left="118" control_name="Edit Cost" name="Edit Cost" label="Price: L$" diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml index 679d5bc82e4582d588fef5630463de6ff410aea4..7fa4cd840a6b0ad30475b078757e23a530786756 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml @@ -16,22 +16,39 @@ </menu_item_call> <menu_item_separator layout="topleft" /> - <menu_item_call + <menu_item_check label="Sort by Name" layout="topleft" name="sort_by_name"> <on_click function="Inventory.GearDefault.Custom.Action" parameter="sort_by_name" /> - </menu_item_call> - <menu_item_call + <on_check + function="Inventory.GearDefault.Check" + parameter="sort_by_name" /> + </menu_item_check> + <menu_item_check label="Sort by Most Recent" layout="topleft" name="sort_by_recent"> <on_click function="Inventory.GearDefault.Custom.Action" parameter="sort_by_recent" /> - </menu_item_call> + <on_check + function="Inventory.GearDefault.Check" + parameter="sort_by_recent" /> + </menu_item_check> + <menu_item_check + label="Sort System Folders to Top" + layout="topleft" + name="sort_system_folders_to_top"> + <on_click + function="Inventory.GearDefault.Custom.Action" + parameter="sort_system_folders_to_top" /> + <on_check + function="Inventory.GearDefault.Check" + parameter="sort_system_folders_to_top" /> + </menu_item_check> <menu_item_separator layout="topleft" /> <menu_item_call diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index b36cf13f1bb194c8d36fd583a539694781663911..27ab7c4fbd24a48ad02c726bcf40f0f019d6478a 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -94,6 +94,49 @@ function="Floater.Toggle" parameter="voice_effect" /> </menu_item_check> + <menu + create_jump_keys="true" + label="Movement" + name="Movement" + tear_off="true"> + <menu_item_call + label="Sit Down" + layout="topleft" + shortcut="alt|shift|S" + name="Sit Down Here"> + <menu_item_call.on_click + function="Self.SitDown" + parameter="" /> + <menu_item_call.on_enable + function="Self.EnableSitDown" /> + </menu_item_call> + <menu_item_check + label="Fly" + name="Fly" + shortcut="Home"> + <menu_item_check.on_check + function="Agent.getFlying" /> + <menu_item_check.on_click + function="Agent.toggleFlying" /> + <menu_item_check.on_enable + function="Agent.enableFlying" /> + </menu_item_check> + <menu_item_check + label="Always Run" + name="Always Run" + shortcut="control|R"> + <menu_item_check.on_check + function="World.CheckAlwaysRun" /> + <menu_item_check.on_click + function="World.AlwaysRun" /> + </menu_item_check> + <menu_item_call + label="Stop Animating Me" + name="Stop Animating My Avatar"> + <menu_item_call.on_click + function="Tools.StopAllAnimations" /> + </menu_item_call> + </menu> <menu create_jump_keys="true" label="My Status" @@ -359,6 +402,18 @@ <menu_item_check.on_check control="NavBarShowParcelProperties" /> </menu_item_check> + <menu_item_separator /> + <menu_item_check + label="Advanced Menu" + name="Show Advanced Menu" + shortcut="control|alt|shift|D"> + <on_check + function="CheckControl" + parameter="UseDebugMenus" /> + <on_click + function="ToggleControl" + parameter="UseDebugMenus" /> + </menu_item_check> </menu> <menu_item_separator/> @@ -983,12 +1038,6 @@ name="Advanced" tear_off="true" visible="false"> - <menu_item_call - label="Stop Animating Me" - name="Stop Animating My Avatar"> - <menu_item_call.on_click - function="Tools.StopAllAnimations" /> - </menu_item_call> <menu_item_call label="Rebake Textures" name="Rebake Texture" @@ -1526,28 +1575,17 @@ <menu_item_call.on_click function="View.DefaultUISize" /> </menu_item_call> - - <menu_item_separator/> - + <!-- This second, alternative shortcut for Show Advanced Menu is for backward compatibility. The main shortcut has been changed so it's Linux-friendly, where the old shortcut is typically eaten by the window manager. --> <menu_item_check - label="Always Run" - name="Always Run" - shortcut="control|R"> - <menu_item_check.on_check - function="World.CheckAlwaysRun" /> - <menu_item_check.on_click - function="World.AlwaysRun" /> - </menu_item_check> - <menu_item_check - label="Fly" - name="Fly" - shortcut="Home"> - <menu_item_check.on_check - function="Agent.getFlying" /> - <menu_item_check.on_click - function="Agent.toggleFlying" /> - <menu_item_check.on_enable - function="Agent.enableFlying" /> + label="Show Advanced Menu - legacy shortcut" + name="Show Advanced Menu - legacy shortcut" + shortcut="control|alt|D"> + <on_check + function="CheckControl" + parameter="UseDebugMenus" /> + <on_click + function="ToggleControl" + parameter="UseDebugMenus" /> </menu_item_check> <menu_item_separator/> @@ -1693,23 +1731,6 @@ <menu_item_call.on_click function="View.ZoomOut" /> </menu_item_call> - <menu_item_separator - visible="false"/> - <!-- 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" - name="Show Advanced Menu" - shortcut="control|alt|D" - visible="false"> - <on_check - function="CheckControl" - parameter="UseDebugMenus" /> - <on_click - function="ToggleControl" - parameter="UseDebugMenus" /> - </menu_item_check> </menu> <!--Shortcuts--> <menu_item_separator/> @@ -1732,7 +1753,6 @@ function="ToggleControl" parameter="QAMode" /> </menu_item_check> - </menu> <menu create_jump_keys="true" @@ -2655,24 +2675,16 @@ function="Advanced.PrintTextureMemoryStats" /> </menu_item_call> <menu_item_check - label="Double-ClickAuto-Pilot" - name="Double-ClickAuto-Pilot"> - <menu_item_check.on_check - function="CheckControl" - parameter="DoubleClickAutoPilot" /> - <menu_item_check.on_click - function="ToggleControl" - parameter="DoubleClickAutoPilot" /> - </menu_item_check> - <menu_item_check - label="Double-Click Teleport" - name="DoubleClick Teleport"> + label="Region Debug Console" + name="Region Debug Console" + shortcut="control|shift|`" + use_mac_ctrl="true"> <menu_item_check.on_check - function="CheckControl" - parameter="DoubleClickTeleport" /> + function="Floater.Visible" + parameter="region_debug_console" /> <menu_item_check.on_click - function="ToggleControl" - parameter="DoubleClickTeleport" /> + function="Floater.Toggle" + parameter="region_debug_console" /> </menu_item_check> <menu_item_separator /> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index a0fd0a13ccea2a0e24b830aaba974e6f3353e785..1247e4724e443b141f81208a429f9ce6060b3f73 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5539,7 +5539,7 @@ Friendship offer declined. name="OfferCallingCard" persist="true" type="notify"> -[FIRST] [LAST] is offering their calling card. +[NAME] is offering their calling card. This will add a bookmark in your inventory so you can quickly IM this Resident. <form name="form"> <button diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml index 15d1222d001b5e7f054c247b2bde62dbb93f7eaf..d6e4c5611363e08b7b435a383db2a0737b1c93e7 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml @@ -79,6 +79,7 @@ </radio_group> <check_box + control_name="AllowMultipleViewers" follows="top|left" height="15" label="Allow Multiple Viewer" @@ -88,6 +89,7 @@ top_pad="20" width="237"/> <check_box + control_name="ForceShowGrid" follows="top|left" height="15" label="Show Grid Selection at login" @@ -97,6 +99,7 @@ top_pad="5" width="237"/> <check_box + control_name="UseDebugMenus" follows="top|left" height="15" label="Show Advanced Menu" @@ -106,6 +109,7 @@ top_pad="5" width="237"/> <check_box + control_name="QAMode" follows="top|left" height="15" label="Show Developer Menu" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml index 036730a646c79efbf600729eeb1d8d3732707479..6dc419a96c2b095014ffc96d22f54fa1fc9f7e41 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml @@ -113,22 +113,22 @@ </text> <color_swatch can_apply_immediately="true" - color="LtGray" + color="EmphasisColor_35" follows="left|top" height="24" label_height="0" label_width="60" layout="topleft" left="360" - name="im" + name="objects" top_pad="-15" width="44"> <color_swatch.init_callback function="Pref.getUIColor" - parameter="IMChatColor" /> + parameter="ObjectChatColor" /> <color_swatch.commit_callback function="Pref.applyUIColor" - parameter="IMChatColor" /> + parameter="ObjectChatColor" /> </color_swatch> <text type="string" @@ -141,7 +141,7 @@ name="text_box3" top_delta="5" width="95"> - IM + Objects </text> <color_swatch can_apply_immediately="true" @@ -206,37 +206,6 @@ width="95"> Errors </text> - <color_swatch - can_apply_immediately="true" - color="EmphasisColor_35" - follows="left|top" - height="24" - label_height="0" - layout="topleft" - left="360" - name="objects" - top_pad="-15" - width="44" > - <color_swatch.init_callback - function="Pref.getUIColor" - parameter="ObjectChatColor" /> - <color_swatch.commit_callback - function="Pref.applyUIColor" - parameter="ObjectChatColor" /> - </color_swatch> - <text - type="string" - length="1" - follows="left|top" - height="10" - layout="topleft" - left_pad="5" - mouse_opaque="false" - name="text_box6" - top_delta="5" - width="95"> - Objects - </text> <color_swatch can_apply_immediately="true" color="LtYellow" @@ -305,7 +274,7 @@ left="30" height="12" name="bubble_chat" - top_pad="28" + top_pad="20" width="120" > Bubble chat: @@ -336,11 +305,58 @@ height="16" increment="0.05" initial_value="1" - label="Opacity" + label="Opacity:" layout="topleft" - left_pad="15" - label_width="56" + left_pad="10" + label_width="70" name="bubble_chat_opacity" top_delta = "6" - width="347" /> + width="378" /> + <text + follows="left|top" + layout="topleft" + left="30" + height="12" + name="bubble_chat" + top_pad="15" + width="120" + > + Floater Opacity: + </text> + <slider + can_edit_text="false" + control_name="ActiveFloaterTransparency" + decimal_digits="2" + follows="left|top" + height="16" + increment="0.01" + initial_value="0.8" + layout="topleft" + label_width="115" + label="Active :" + left="50" + max_val="1.00" + min_val="0.00" + name="active" + show_text="true" + top_pad="5" + width="415" /> + <slider + can_edit_text="false" + control_name="InactiveFloaterTransparency" + decimal_digits="2" + follows="left|top" + height="16" + increment="0.01" + initial_value="0.5" + layout="topleft" + label_width="115" + label="Inctive :" + left="50" + max_val="1.00" + min_val="0.00" + name="active" + show_text="true" + top_pad="5" + width="415" /> </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 a660b5d785d629d75fd6c3d0ce03f780f586f8e0..36f8f991789402b79939992a6e57177bc499235b 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml @@ -331,6 +331,7 @@ Pressing letter keys: </text> <radio_group + control_name="LetterKeysFocusChatBar" height="20" layout="topleft" left="35" @@ -338,12 +339,12 @@ name="inworld_typing_preference"> <radio_item label="Starts local chat" - name="radio_button1" + name="radio_start_chat" top_delta="20" layout="topleft" height="16" left="0" - value="0" + value="1" width="150" /> <radio_item label="Affects movement (i.e. WASD)" @@ -351,8 +352,8 @@ layout="topleft" top_delta="0" height="16" - name="radio_button2" - value="1" + name="radio_move" + value="0" width="75" /> </radio_group> 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 7d49a671e66d258865730cc6635a8ca2edd07039..3ceee609273bfc914de8b758f8aac0b0a2321d91 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -163,536 +163,546 @@ top="76" width="485"> <text - type="string" - length="1" - follows="left|top" - height="12" - layout="topleft" - left_delta="5" - name="ShadersText" - top="3" - width="128"> + type="string" + length="1" + follows="left|top" + height="12" + layout="topleft" + left_delta="5" + name="ShadersText" + top="3" + width="128"> Shaders: </text> <check_box - control_name="RenderObjectBump" - height="16" - initial_value="true" - label="Bump mapping and shiny" - layout="topleft" - left_delta="0" - name="BumpShiny" - top_pad="7" - width="256" /> + control_name="RenderTransparentWater" + height="16" + initial_value="true" + label="Transparent Water" + layout="topleft" + left_delta="0" + name="BumpShiny" + top_pad="7" + width="256" /> <check_box - control_name="VertexShaderEnable" - height="16" - initial_value="true" - label="Basic shaders" - layout="topleft" - left_delta="0" - name="BasicShaders" - tool_tip="Disabling this option may prevent some graphics card drivers from crashing" - top_pad="1" - width="315"> + control_name="RenderObjectBump" + height="16" + initial_value="true" + label="Bump mapping and shiny" + layout="topleft" + left_delta="0" + name="BumpShiny" + top_pad="1" + width="256" /> + <check_box + control_name="VertexShaderEnable" + height="16" + initial_value="true" + label="Basic shaders" + layout="topleft" + left_delta="0" + name="BasicShaders" + tool_tip="Disabling this option may prevent some graphics card drivers from crashing" + top_pad="1" + width="315"> <check_box.commit_callback - function="Pref.VertexShaderEnable" /> + function="Pref.VertexShaderEnable" /> </check_box> <check_box - control_name="WindLightUseAtmosShaders" - height="16" - initial_value="true" - label="Atmospheric shaders" - layout="topleft" - left_delta="0" - name="WindLightUseAtmosShaders" - top_pad="1" - width="256"> + control_name="WindLightUseAtmosShaders" + height="16" + initial_value="true" + label="Atmospheric shaders" + layout="topleft" + left_delta="0" + name="WindLightUseAtmosShaders" + top_pad="1" + width="256"> <check_box.commit_callback - function="Pref.VertexShaderEnable" /> + function="Pref.VertexShaderEnable" /> </check_box> <!-- DISABLED UNTIL WE REALLY WANT TO SUPPORT THIS - <check_box - control_name="RenderDeferred" - height="16" - initial_value="true" - label="Lighting and Shadows" - layout="topleft" - left_delta="0" - name="UseLightShaders" - top_pad="1" - width="256"> - <check_box.commit_callback - function="Pref.VertexShaderEnable" /> - </check_box> - <check_box - control_name="RenderDeferredSSAO" - height="16" - initial_value="true" - label="Ambient Occlusion" - layout="topleft" - left_delta="0" - name="UseSSAO" - top_pad="1" - width="256"> - <check_box.commit_callback - function="Pref.VertexShaderEnable" /> - </check_box> + <check_box + control_name="RenderDeferred" + height="16" + initial_value="true" + label="Lighting and Shadows" + layout="topleft" + left_delta="0" + name="UseLightShaders" + top_pad="1" + width="256"> + <check_box.commit_callback + function="Pref.VertexShaderEnable" /> + </check_box> + <check_box + control_name="RenderDeferredSSAO" + height="16" + initial_value="true" + label="Ambient Occlusion" + layout="topleft" + left_delta="0" + name="UseSSAO" + top_pad="1" + width="256"> + <check_box.commit_callback + function="Pref.VertexShaderEnable" /> + </check_box> - <text - type="string" - length="1" - top_pad="8" - follows="top|left" - height="23" - width="110" - word_wrap="true" - layout="topleft" - left="10" - name="shadows_label"> - Shadows: - </text> - <combo_box - control_name="RenderShadowDetail" - height="23" - layout="topleft" - left="10" - top_pad="0" - name="ShadowDetail" - width="150"> - <combo_box.item - label="None" - name="0" - value="0"/> - <combo_box.item - label="Sun/Moon" - name="1" - value="1"/> - <combo_box.item - label="Sun/Moon + Projectors" - name="2" - value="2"/> - </combo_box> + <text + type="string" + length="1" + top_pad="8" + follows="top|left" + height="23" + width="110" + word_wrap="true" + layout="topleft" + left="10" + name="shadows_label"> + Shadows: + </text> + <combo_box + control_name="RenderShadowDetail" + height="23" + layout="topleft" + left="10" + top_pad="0" + name="ShadowDetail" + width="150"> + <combo_box.item + label="None" + name="0" + value="0"/> + <combo_box.item + label="Sun/Moon" + name="1" + value="1"/> + <combo_box.item + label="Sun/Moon + Projectors" + name="2" + value="2"/> + </combo_box> --> - <text - type="string" - length="1" - top_pad="8" - follows="top|left" - height="23" - width="110" - word_wrap="true" - layout="topleft" - left="10" - name="reflection_label"> - Water Reflections: - </text> - <combo_box - control_name="RenderReflectionDetail" - height="23" - layout="topleft" - left_delta="10" - top_pad ="0" - name="Reflections" - width="150"> - <combo_box.item - label="Minimal" - name="0" - value="0"/> - <combo_box.item - label="Terrain and trees" - name="1" - value="1"/> - <combo_box.item - label="All static objects" - name="2" - value="2"/> - <combo_box.item - label="All avatars and objects" - name="3" - value="3"/> - <combo_box.item - label="Everything" - name="4" - value="4"/> - </combo_box> + <text + type="string" + length="1" + top_pad="8" + follows="top|left" + height="12" + width="110" + word_wrap="true" + layout="topleft" + left="05" + name="reflection_label"> + Water Reflections: + </text> + <combo_box + control_name="RenderReflectionDetail" + height="18" + layout="topleft" + left_delta="10" + top_pad ="3" + name="Reflections" + width="150"> + <combo_box.item + label="Minimal" + name="0" + value="0"/> + <combo_box.item + label="Terrain and trees" + name="1" + value="1"/> + <combo_box.item + label="All static objects" + name="2" + value="2"/> + <combo_box.item + label="All avatars and objects" + name="3" + value="3"/> + <combo_box.item + label="Everything" + name="4" + value="4"/> + </combo_box> <slider - control_name="RenderFarClip" - decimal_digits="0" - follows="left|top" - height="16" - increment="8" - initial_value="160" - label="Draw distance:" - label_width="185" - layout="topleft" - left="200" - max_val="512" - min_val="64" - name="DrawDistance" - top="3" - width="296" /> + control_name="RenderFarClip" + decimal_digits="0" + follows="left|top" + height="16" + increment="8" + initial_value="160" + label="Draw distance:" + label_width="185" + layout="topleft" + left="200" + max_val="512" + min_val="64" + name="DrawDistance" + top="3" + width="296" /> <text - type="string" - length="1" - follows="left|top" - height="12" - layout="topleft" - left_delta="291" - name="DrawDistanceMeterText2" - top_delta="0" - width="128"> + type="string" + length="1" + follows="left|top" + height="12" + layout="topleft" + left_delta="291" + name="DrawDistanceMeterText2" + top_delta="0" + width="128"> m </text> <slider - control_name="RenderMaxPartCount" - decimal_digits="0" - follows="left|top" - height="16" - increment="256" - initial_value="4096" - label="Max. particle count:" - label_width="185" - layout="topleft" - left="200" - max_val="8192" - name="MaxParticleCount" - top_pad="7" - width="303" /> - <slider - control_name="RenderAvatarMaxVisible" - decimal_digits="0" - follows="left|top" - height="16" - increment="1" - initial_value="12" - label="Max. # of non-impostor avatars:" - label_width="185" - layout="topleft" - left_delta="0" - max_val="65" - min_val="1" - name="MaxNumberAvatarDrawn" - top_pad="4" - width="290" /> + control_name="RenderMaxPartCount" + decimal_digits="0" + follows="left|top" + height="16" + increment="256" + initial_value="4096" + label="Max. particle count:" + label_width="185" + layout="topleft" + left="200" + max_val="8192" + name="MaxParticleCount" + top_pad="7" + width="303" /> + <slider + control_name="RenderAvatarMaxVisible" + decimal_digits="0" + follows="left|top" + height="16" + increment="1" + initial_value="12" + label="Max. # of non-impostor avatars:" + label_width="185" + layout="topleft" + left_delta="0" + max_val="65" + min_val="1" + name="MaxNumberAvatarDrawn" + top_pad="4" + width="290" /> <slider - control_name="RenderGlowResolutionPow" - decimal_digits="0" - follows="left|top" - height="16" - increment="1" - initial_value="8" - label="Post process quality:" - label_width="185" - layout="topleft" - left="200" - max_val="9" - min_val="8" - name="RenderPostProcess" - show_text="false" - top_pad="4" - width="264"> + control_name="RenderGlowResolutionPow" + decimal_digits="0" + follows="left|top" + height="16" + increment="1" + initial_value="8" + label="Post process quality:" + label_width="185" + layout="topleft" + left="200" + max_val="9" + min_val="8" + name="RenderPostProcess" + show_text="false" + top_pad="4" + width="264"> <slider.commit_callback - function="Pref.UpdateSliderText" - parameter="PostProcessText" /> + function="Pref.UpdateSliderText" + parameter="PostProcessText" /> </slider> <text - type="string" - length="1" - follows="left|top" - height="12" - layout="topleft" - left_delta="0" - name="MeshDetailText" - top_pad="5" - width="128"> + type="string" + length="1" + follows="left|top" + height="12" + layout="topleft" + left_delta="0" + name="MeshDetailText" + top_pad="5" + width="128"> Mesh detail: </text> <slider - control_name="RenderVolumeLODFactor" - follows="left|top" - height="16" - increment="0.125" - initial_value="160" - label=" Objects:" - label_width="185" - layout="topleft" - left_delta="0" - max_val="2" - name="ObjectMeshDetail" - show_text="false" - top_pad="6" - width="264"> + control_name="RenderVolumeLODFactor" + follows="left|top" + height="16" + increment="0.125" + initial_value="160" + label=" Objects:" + label_width="185" + layout="topleft" + left_delta="0" + max_val="2" + name="ObjectMeshDetail" + show_text="false" + top_pad="6" + width="264"> <slider.commit_callback - function="Pref.UpdateSliderText" - parameter="ObjectMeshDetailText" /> + function="Pref.UpdateSliderText" + parameter="ObjectMeshDetailText" /> </slider> <slider - control_name="RenderFlexTimeFactor" - follows="left|top" - height="16" - initial_value="160" - label=" Flexiprims:" - label_width="185" - layout="topleft" - left_delta="0" - name="FlexibleMeshDetail" - show_text="false" - top_pad="4" - width="264"> + control_name="RenderFlexTimeFactor" + follows="left|top" + height="16" + initial_value="160" + label=" Flexiprims:" + label_width="185" + layout="topleft" + left_delta="0" + name="FlexibleMeshDetail" + show_text="false" + top_pad="4" + width="264"> <slider.commit_callback - function="Pref.UpdateSliderText" - parameter="FlexibleMeshDetailText" /> + function="Pref.UpdateSliderText" + parameter="FlexibleMeshDetailText" /> </slider> <slider - control_name="RenderTreeLODFactor" - follows="left|top" - height="16" - increment="0.125" - initial_value="160" - label=" Trees:" - label_width="185" - layout="topleft" - left_delta="0" - name="TreeMeshDetail" - show_text="false" - top_pad="4" - width="264"> - <slider.commit_callback - function="Pref.UpdateSliderText" - parameter="TreeMeshDetailText" /> - </slider> + control_name="RenderTreeLODFactor" + follows="left|top" + height="16" + increment="0.125" + initial_value="160" + label=" Trees:" + label_width="185" + layout="topleft" + left_delta="0" + name="TreeMeshDetail" + show_text="false" + top_pad="4" + width="264"> + <slider.commit_callback + function="Pref.UpdateSliderText" + parameter="TreeMeshDetailText" /> + </slider> <slider - control_name="RenderAvatarLODFactor" - follows="left|top" - height="16" - increment="0.125" - initial_value="160" - label=" Avatars:" - label_width="185" - layout="topleft" - left_delta="0" - name="AvatarMeshDetail" - show_text="false" - top_pad="4" - width="264"> - <slider.commit_callback - function="Pref.UpdateSliderText" - parameter="AvatarMeshDetailText" /> + control_name="RenderAvatarLODFactor" + follows="left|top" + height="16" + increment="0.125" + initial_value="160" + label=" Avatars:" + label_width="185" + layout="topleft" + left_delta="0" + name="AvatarMeshDetail" + show_text="false" + top_pad="4" + width="264"> + <slider.commit_callback + function="Pref.UpdateSliderText" + parameter="AvatarMeshDetailText" /> </slider> <slider - control_name="RenderTerrainLODFactor" - follows="left|top" - height="16" - increment="0.125" - initial_value="160" - label=" Terrain:" - label_width="185" - layout="topleft" - left_delta="0" - max_val="2" - min_val="1" - name="TerrainMeshDetail" - show_text="false" - top_pad="4" - width="264"> - <slider.commit_callback - function="Pref.UpdateSliderText" - parameter="TerrainMeshDetailText" /> + control_name="RenderTerrainLODFactor" + follows="left|top" + height="16" + increment="0.125" + initial_value="160" + label=" Terrain:" + label_width="185" + layout="topleft" + left_delta="0" + max_val="2" + min_val="1" + name="TerrainMeshDetail" + show_text="false" + top_pad="4" + width="264"> + <slider.commit_callback + function="Pref.UpdateSliderText" + parameter="TerrainMeshDetailText" /> </slider> <slider - control_name="WLSkyDetail" - enabled_control="WindLightUseAtmosShaders" - decimal_digits="0" - follows="left|top" - height="16" - increment="8" - initial_value="160" - label=" Sky:" - label_width="185" - layout="topleft" - left_delta="0" - max_val="128" - min_val="16" - name="SkyMeshDetail" - show_text="false" - top_pad="4" - width="264"> - <slider.commit_callback - function="Pref.UpdateSliderText" - parameter="SkyMeshDetailText" /> + control_name="WLSkyDetail" + enabled_control="WindLightUseAtmosShaders" + decimal_digits="0" + follows="left|top" + height="16" + increment="8" + initial_value="160" + label=" Sky:" + label_width="185" + layout="topleft" + left_delta="0" + max_val="128" + min_val="16" + name="SkyMeshDetail" + show_text="false" + top_pad="4" + width="264"> + <slider.commit_callback + function="Pref.UpdateSliderText" + parameter="SkyMeshDetailText" /> </slider> <text - type="string" - length="1" - follows="left|top" - height="12" - layout="topleft" - left="469" - name="PostProcessText" - top="60" - width="128"> - Low + type="string" + length="1" + follows="left|top" + height="12" + layout="topleft" + left="469" + name="PostProcessText" + top="60" + width="128"> + Low </text> <text - type="string" - length="1" - follows="left|top" - height="12" - layout="topleft" - left_delta="0" - name="ObjectMeshDetailText" - top_pad="26" - width="128"> - Low + type="string" + length="1" + follows="left|top" + height="12" + layout="topleft" + left_delta="0" + name="ObjectMeshDetailText" + top_pad="26" + width="128"> + Low </text> <text - type="string" - length="1" - follows="left|top" - height="12" - layout="topleft" - left_delta="0" - name="FlexibleMeshDetailText" - top_pad="8" - width="128"> - Low + type="string" + length="1" + follows="left|top" + height="12" + layout="topleft" + left_delta="0" + name="FlexibleMeshDetailText" + top_pad="8" + width="128"> + Low </text> <text - type="string" - length="1" - follows="left|top" - height="12" - layout="topleft" - left_delta="0" - name="TreeMeshDetailText" - top_pad="8" - width="128"> - Low + type="string" + length="1" + follows="left|top" + height="12" + layout="topleft" + left_delta="0" + name="TreeMeshDetailText" + top_pad="8" + width="128"> + Low </text> <text - type="string" - length="1" - follows="left|top" - height="12" - layout="topleft" - left_delta="0" - name="AvatarMeshDetailText" - top_pad="8" - width="128"> - Low + type="string" + length="1" + follows="left|top" + height="12" + layout="topleft" + left_delta="0" + name="AvatarMeshDetailText" + top_pad="8" + width="128"> + Low </text> <text - type="string" - length="1" - follows="left|top" - height="12" - layout="topleft" - left_delta="0" - name="TerrainMeshDetailText" - top_pad="8" - width="128"> - Low + type="string" + length="1" + follows="left|top" + height="12" + layout="topleft" + left_delta="0" + name="TerrainMeshDetailText" + top_pad="8" + width="128"> + Low </text> <text - enabled_control="WindLightUseAtmosShaders" - type="string" - length="1" - follows="left|top" - height="12" - layout="topleft" - left_delta="0" - name="SkyMeshDetailText" - top_pad="8" - width="128"> - Low + enabled_control="WindLightUseAtmosShaders" + type="string" + length="1" + follows="left|top" + height="12" + layout="topleft" + left_delta="0" + name="SkyMeshDetailText" + top_pad="8" + width="128"> + Low </text> - <text - type="string" - length="1" - follows="left|top" - height="12" - layout="topleft" - left_delta="-260" - name="AvatarRenderingText" - top_pad="18" - width="128"> - Avatar rendering: + <text + type="string" + length="1" + follows="left|top" + height="12" + layout="topleft" + left_delta="-260" + name="AvatarRenderingText" + top_pad="18" + width="128"> + Avatar rendering: </text> <check_box - control_name="RenderUseImpostors" - height="16" - initial_value="true" - label="Avatar impostors" - layout="topleft" - left_delta="0" - name="AvatarImpostors" - top_pad="7" - width="256" /> + control_name="RenderUseImpostors" + height="16" + initial_value="true" + label="Avatar impostors" + layout="topleft" + left_delta="0" + name="AvatarImpostors" + top_pad="7" + width="256" /> <check_box - control_name="RenderAvatarVP" - height="16" - initial_value="true" - label="Hardware skinning" - layout="topleft" - left_delta="0" - name="AvatarVertexProgram" - top_pad="1" - width="256"> - <check_box.commit_callback - function="Pref.VertexShaderEnable" /> + control_name="RenderAvatarVP" + height="16" + initial_value="true" + label="Hardware skinning" + layout="topleft" + left_delta="0" + name="AvatarVertexProgram" + top_pad="1" + width="256"> + <check_box.commit_callback + function="Pref.VertexShaderEnable" /> </check_box> <check_box - control_name="RenderAvatarCloth" - height="16" - initial_value="true" - label="Avatar cloth" - layout="topleft" - left_delta="0" - name="AvatarCloth" - top_pad="1" - width="256" /> - <text - type="string" - length="1" - follows="left|top" - height="12" - layout="topleft" - left="358" - left_pad="-30" - name="TerrainDetailText" - top="226" - width="155"> - Terrain detail: - </text> - <radio_group - control_name="RenderTerrainDetail" - draw_border="false" - height="38" - layout="topleft" - left_delta="0" - name="TerrainDetailRadio" - top_pad="5" - width="70"> - <radio_item - height="16" - label="Low" - layout="topleft" - name="0" - top="3" - width="50" /> - <radio_item - height="16" - label="High" - layout="topleft" - name="2" - top_delta="16" - width="50" /> - </radio_group> --> + control_name="RenderAvatarCloth" + height="16" + initial_value="true" + label="Avatar cloth" + layout="topleft" + left_delta="0" + name="AvatarCloth" + top_pad="1" + width="256" /> + <text + type="string" + length="1" + follows="left|top" + height="12" + layout="topleft" + left="358" + left_pad="-30" + name="TerrainDetailText" + top="226" + width="155"> + Terrain detail: + </text> + <radio_group + control_name="RenderTerrainDetail" + draw_border="false" + height="38" + layout="topleft" + left_delta="0" + name="TerrainDetailRadio" + top_pad="5" + width="70"> + <radio_item + height="16" + label="Low" + layout="topleft" + name="0" + top="3" + width="50" /> + <radio_item + height="16" + label="High" + layout="topleft" + name="2" + top_delta="16" + width="50" /> + </radio_group> --> </panel> - <button + <button follows="left|bottom" height="23" label="Apply" @@ -701,8 +711,7 @@ left="10" name="Apply" top="383" - width="115" - > + width="115"> <button.commit_callback function="Pref.Apply" /> </button> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_move.xml b/indra/newview/skins/default/xui/en/panel_preferences_move.xml index ec80efe188b3a5b65854ceaff1a62952d68471dc..d2fc6ea09a3ae2a575e11abab399166c9b4e05cc 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_move.xml @@ -177,7 +177,10 @@ left_delta="0" name="double_click_chkbox" width="237" - top_pad="0"/> + top_pad="0"> + <check_box.commit_callback + function="Pref.CommitDoubleClickChekbox"/> + </check_box> <radio_group height="20" layout="topleft" @@ -191,7 +194,6 @@ left="0" name="radio_teleport" top_delta="20" - value="0" width="100" /> <radio_item height="16" @@ -200,7 +202,19 @@ layout="topleft" name="radio_autopilot" top_delta="0" - value="1" width="75" /> + <radio_group.commit_callback + function="Pref.CommitRadioDoubleClick"/> </radio_group> -</panel> + <button + height="23" + label="Other Devices" + left="30" + name="joystick_setup_button" + top="30" + width="155"> + <button.commit_callback + function="Floater.Show" + parameter="pref_joystick" /> + </button> +</panel> \ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml index 8ade41f587b6246205fb685cd2bee4a503d8e47f..da366f30aef79687850b22b734d8e380f433e25b 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml @@ -70,7 +70,7 @@ name="UI Volume" show_text="false" slider_label.halign="right" - top_pad="5" + top_pad="4" volume="true" width="300"> <slider.commit_callback @@ -104,7 +104,7 @@ name="Wind Volume" show_text="false" slider_label.halign="right" - top_pad="5" + top_pad="4" volume="true" width="300"> <slider.commit_callback @@ -138,7 +138,7 @@ left="0" name="SFX Volume" show_text="false" - top_pad="7" + top_pad="4" volume="true" width="300"> <slider.commit_callback @@ -172,7 +172,7 @@ name="Music Volume" slider_label.halign="right" show_text="false" - top_pad="5" + top_pad="4" volume="true" width="300"> <slider.commit_callback @@ -215,7 +215,7 @@ name="Media Volume" show_text="false" slider_label.halign="right" - top_pad="5" + top_pad="4" volume="true" width="300"> <slider.commit_callback @@ -257,7 +257,7 @@ label_width="120" layout="topleft" left="0" - top_pad="5" + top_pad="4" name="Voice Volume" show_text="false" slider_label.halign="right" @@ -301,9 +301,9 @@ height="15" tool_tip="Check this to let media auto-play if it wants" label="Allow Media to auto-play" - top_pad="5" + top_pad="1" left="25"/> - <check_box + <check_box name="media_show_on_others_btn" control_name="MediaShowOnOthers" value="true" @@ -313,16 +313,6 @@ label="Play media attached to other avatars" left="25" width="230"/> - <check_box - control_name="LipSyncEnabled" - follows="left|top" - height="20" - label="Move avatar lips when speaking" - layout="topleft" - left_pad="0" - name="enable_lip_sync" - width="237" - top_delta="-4" /> <text type="string" @@ -333,7 +323,7 @@ left="25" name="voice_chat_settings" width="180" - top_pad="10"> + top_pad="7"> Voice Chat Settings </text> <text @@ -341,10 +331,10 @@ length="1" follows="left|top" layout="topleft" - left="80" + left="46" top_delta="16" name="Listen from" - width="102"> + width="112"> Listen from: </text> <icon @@ -363,7 +353,7 @@ height="18" image_name="Move_Walk_Off" layout="topleft" - left_pad="130" + left_pad="170" name="avatar_icon" mouse_opaque="false" visible="true" @@ -375,7 +365,7 @@ draw_border="false" follows="left|top" layout="topleft" - left_delta="-128" + left_delta="-168" width="221" height="20" name="ear_location"> @@ -391,11 +381,21 @@ follows="left|top" label="Avatar position" layout="topleft" - left_pad="-54" + left_pad="-16" name="1" top_delta ="0" width="200" /> </radio_group> + <check_box + control_name="LipSyncEnabled" + follows="left|top" + height="15" + label="Move avatar lips when speaking" + layout="topleft" + left="44" + name="enable_lip_sync" + top_pad="5" + width="237"/> <check_box follows="top|left" enabled_control="EnableVoiceChat" @@ -403,10 +403,11 @@ height="15" label="Toggle speak on/off when I press:" layout="topleft" - left="30" + left="44" name="push_to_talk_toggle_check" width="237" - tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."/> + tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down." + top_pad="3"/> <line_editor follows="top|left" control_name="PushToTalkButton" @@ -454,7 +455,7 @@ label="Input/Output devices" layout="topleft" left="20" - top_pad="8" + top_pad="6" name="device_settings_btn" width="190"> </button> diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml index 1e332a40c2ef6101a38df83a021dcd51edc594e0..a041c9b2293ffd777af8f2ae999622c6e9171b04 100644 --- a/indra/newview/skins/default/xui/en/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml @@ -179,4 +179,13 @@ right="487" name="Save_btn" width="81" /> + <button + follows="right|bottom" + height="23" + label="Edit..." + layout="topleft" + top_pad="-23" + right="400" + name="Edit_btn" + width="81" /> </panel> 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 3850b94fd67fd4ad678c88caa565b49148ef99fe..0000000000000000000000000000000000000000 --- 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/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index 286af718e39d8e5732b74849b1f1255803bf3316..6c5fe6a9ebc906ca57630d83f32e7de73f928ad3 100644 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -2469,7 +2469,7 @@ Por favor, vuelve a intentarlo en unos momentos. Rehusado el ofrecimiento de amistad. </notification> <notification name="OfferCallingCard"> - [FIRST] [LAST] te está ofreciendo su tarjeta de visita. + [NAME] te está ofreciendo su tarjeta de visita. Esto añadirá un marcador en tu inventario para que puedas enviarle rápidamente un MI. <form name="form"> <button name="Accept" text="Aceptar"/> diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml index 8bda133a0b469002b24fdfe1343b541dd48dbac4..17254ff325f1802100a79d37524276917b93acb5 100644 --- a/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml +++ b/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml @@ -3,7 +3,7 @@ <menu_item_call label="Voir le profil" name="view_profile"/> <menu_item_call label="Devenir amis" name="add_friend"/> <menu_item_call label="IM" name="im"/> - <menu_item_call label="Appeler" name="call"/> + <menu_item_call label="Appel" name="call"/> <menu_item_call label="Téléporter" name="teleport"/> <menu_item_call label="Inviter dans le groupe" name="invite_to_group"/> <menu_item_call label="Ignorer" name="block"/> diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index 89fd9c6fdcaadaa715ccd9746d7042bd0346cb3f..341cc9830dde6b65edfc69d77f3dfe264c4e25e5 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -2464,7 +2464,7 @@ Veuillez réessayer dans quelques minutes. Amitié refusée. </notification> <notification name="OfferCallingCard"> - [FIRST] [LAST] vous offre sa carte de visite. + [NAME] vous offre sa carte de visite. Cela ajoute un marque-page dans votre inventaire, ce qui vous permet d'envoyer rapidement un IM à ce résident. <form name="form"> <button name="Accept" text="Accepter"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml index 30799caf1f57f5e0ceb2b65b9410f5a6bf9a4693..ef65d2fe242fd3c0a82a0fa6abdcca976c6901f7 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml @@ -54,7 +54,7 @@ <text name="my_account_link" value="[[URL] Accéder à ma Page d'accueil]"/> <text name="title_partner_text" value="Mon partenaire :"/> <panel name="partner_data_panel"> - <text initial_value="(récupération en cours)" name="partner_text" value="[FIRST] [LAST]"/> + <text initial_value="(récupération en cours)" name="partner_text"/> </panel> <text name="partner_edit_link" value="[[URL] Modifier]"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml index e4c35d60fe400d7a5ac6ae1979f2a7b12a97c08d..3e7225d8ac82b4e160c99def8ffff7cdc7cf1829 100644 --- a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Choses" name="main inventory panel"> <panel.string name="ItemcountFetching"> - Récupération de [ITEM_COUNT] articles... [FILTER] + Récupération : [ITEM_COUNT] articles... [FILTER] </panel.string> <panel.string name="ItemcountCompleted"> [ITEM_COUNT] articles [FILTER] diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index d6c701dc904a7c84f270387f976607f75fe62c8e..8b958119eb7e9d8f13afafbcf4994313af8d0935 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -1089,7 +1089,7 @@ <string name="Textures" value=" Textures,"/> <string name="Snapshots" value=" Photos,"/> <string name="No Filters" value="Non "/> - <string name="Since Logoff" value=" - Depuis la déconnexion"/> + <string name="Since Logoff" value=" depuis la déconnexion"/> <string name="InvFolder My Inventory"> Mon inventaire </string> diff --git a/indra/newview/skins/default/xui/it/floater_bumps.xml b/indra/newview/skins/default/xui/it/floater_bumps.xml index d9dd3f26d722946375722b46e575614661b5e100..6de2fea67f98947063350c48867a4485b6f95899 100644 --- a/indra/newview/skins/default/xui/it/floater_bumps.xml +++ b/indra/newview/skins/default/xui/it/floater_bumps.xml @@ -4,19 +4,19 @@ Nessuno rilevato </floater.string> <floater.string name="bump"> - [TIME] [FIRST] [LAST] ti ha urtato + [TIME] [NAME] ti ha urtato </floater.string> <floater.string name="llpushobject"> - [TIME] [FIRST] [LAST] ti ha spinto per mezzo di uno script + [TIME] [NAME] ti ha spinto per mezzo di uno script </floater.string> <floater.string name="selected_object_collide"> - [TIME] [FIRST] [LAST] ti ha colpito con un oggetto + [TIME] [NAME] ti ha colpito con un oggetto </floater.string> <floater.string name="scripted_object_collide"> - [TIME] [FIRST] [LAST] ti ha colpito con un oggetto scriptato + [TIME] [NAME] ti ha colpito con un oggetto scriptato </floater.string> <floater.string name="physical_object_collide"> - [TIME] [FIRST] [LAST] ti ha colpito con un oggetto fisico + [TIME] [NAME] ti ha colpito con un oggetto fisico </floater.string> <floater.string name="timeStr"> [[hour,datetime,slt]:[min,datetime,slt]] diff --git a/indra/newview/skins/default/xui/it/floater_pay.xml b/indra/newview/skins/default/xui/it/floater_pay.xml index c1ea8ec9c8e243e7cdef68b2b7d98eaf2a843d04..6389cbfbf7bc9ffd4e12b82ee8e8104cb74fb68f 100644 --- a/indra/newview/skins/default/xui/it/floater_pay.xml +++ b/indra/newview/skins/default/xui/it/floater_pay.xml @@ -11,7 +11,7 @@ </text> <icon name="icon_person" tool_tip="Persona"/> <text left="115" name="payee_name"> - [FIRST] [LAST] + Test Name That Is Extremely Long To Check Clipping </text> <button label="1 L$" label_selected="1 L$" left="118" name="fastpay 1" width="80"/> <button label="5 L$" label_selected="5 L$" left="210" name="fastpay 5"/> diff --git a/indra/newview/skins/default/xui/it/floater_pay_object.xml b/indra/newview/skins/default/xui/it/floater_pay_object.xml index 37f549b5da077bafd80205a9fe27d2993bd490a6..8805f3208e726c88dbae5c5867e6738a9e4a350d 100644 --- a/indra/newview/skins/default/xui/it/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/it/floater_pay_object.xml @@ -8,7 +8,7 @@ </string> <icon name="icon_person" tool_tip="Persona"/> <text left="120" name="payee_name"> - [FIRST] [LAST] + Ericacita Moostopolison </text> <text halign="left" left="5" name="object_name_label" width="110"> Mediante l'oggetto: diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml index fbe611407eecd23200f3d66e898e056e8a6fe010..a8c985cb124fa412d9341b5cfb82ce3a80e2efa5 100644 --- a/indra/newview/skins/default/xui/it/floater_tools.xml +++ b/indra/newview/skins/default/xui/it/floater_tools.xml @@ -283,7 +283,7 @@ <combo_box.item label="Plastica" name="Plastic"/> <combo_box.item label="Gomma" name="Rubber"/> </combo_box> - <text name="text cut"> + <text name="text cut" left_delta="-10" width="170"> Riduci una sezione (inizio/fine) </text> <spinner label="I" name="cut begin"/> diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml index ffd27d55e8895c5d68013bf37088d93f88ebf5a5..32483881b2b6d07aa2a5f62210bf4ab6df776145 100644 --- a/indra/newview/skins/default/xui/it/notifications.xml +++ b/indra/newview/skins/default/xui/it/notifications.xml @@ -2035,10 +2035,10 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica Oggetto: [SUBJECT], Messaggio: [MESSAGE] </notification> <notification name="FriendOnline"> - [FIRST] [LAST] è Online + [NAME] è Online </notification> <notification name="FriendOffline"> - [FIRST] [LAST] è Offline + [NAME] è Offline </notification> <notification name="AddSelfFriend"> Anche se sei molto simpatico, non puoi aggiungere te stesso all'elenco degli amici. @@ -2105,9 +2105,6 @@ Questo potrebbe incidere sulla tua password. <notification name="CannotRemoveProtectedCategories"> Non è possibile rimuovere le categorie protette. </notification> - <notification name="OfferedCard"> - Hai offerto un biglietto da visita a [FIRST] [LAST] - </notification> <notification name="UnableToBuyWhileDownloading"> Impossibile acquistare l'oggetto durante il download dei dati. Riprova. @@ -2223,7 +2220,7 @@ Reinstalla il plugin o contatta il venditore se continui ad avere questi problem Gli oggetti che possiedi sul terreno selezionato ti sono stati restituiti nell'inventario. </notification> <notification name="OtherObjectsReturned"> - Gli oggetti selezionati sul terreno che è di proprietà di [FIRST] [LAST] sono stati restituiti nel suo inventario. + Gli oggetti selezionati sul terreno che è di proprietà di [NAME] sono stati restituiti nel suo inventario. </notification> <notification name="OtherObjectsReturned2"> Sono stati restituiti al proprietario gli oggetti selezionati sul lotto nella terra di proprietà del residente '[NAME]'. @@ -2433,7 +2430,7 @@ Riprova tra qualche istante. Offerta di amicizia rifiutata. </notification> <notification name="OfferCallingCard"> - [FIRST] [LAST] ti offre il suo biglietto da visita. + [NAME] ti offre il suo biglietto da visita. Questo sarà aggiunto nel tuo inventario come segnalibro per consentirti di inviare rapidamente messaggi IM a questo residente. <form name="form"> <button name="Accept" text="Accetta"/> @@ -2493,7 +2490,7 @@ Concedi questa richiesta? </form> </notification> <notification name="ScriptDialog"> - [FIRST] [LAST] '[TITLE]' + [NAME] '<nolink>[TITLE]</nolink>' [MESSAGE] <form name="form"> <button name="Ignore" text="Ignora"/> @@ -2537,13 +2534,13 @@ Clicca su Accetta per unirti alla chiamata oppure su Declina to declinare l&apos </form> </notification> <notification name="AutoUnmuteByIM"> - [FIRST] [LAST] ha ricevuto un IM ed è stato automaticamente sbloccato. + [NAME] ha ricevuto un IM ed è stato automaticamente sbloccato. </notification> <notification name="AutoUnmuteByMoney"> - [FIRST] [LAST] ha ricevuto del denaro e pertanto è stato automaticamente sbloccato. + [NAME] ha ricevuto del denaro e pertanto è stato automaticamente sbloccato. </notification> <notification name="AutoUnmuteByInventory"> - A [FIRST] [LAST] è stato offerto un elemento dell'Inventario e pertanto è stato automaticamente sbloccato. + A [NAME] è stato offerto un elemento dell'Inventario e pertanto è stato automaticamente sbloccato. </notification> <notification name="VoiceInviteGroup"> [NAME] si è aggiunto alla chiamata in chat vocale con il gruppo [GROUP]. diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index 9dbfc2b79c9851acc3fe9d559ad8819c6a9d5744..dfe635182e60ccf3090e6ab955fc30000213e574 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -3478,7 +3478,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Sei l'unico utente di questa sessione. </string> <string name="offline_message"> - [FIRST] [LAST] è offline. + [NAME] è offline. </string> <string name="invite_message"> Clicca il tasto [BUTTON NAME] per accettare/connetterti a questa voice chat. diff --git a/indra/newview/skins/default/xui/ja/floater_bumps.xml b/indra/newview/skins/default/xui/ja/floater_bumps.xml index 8a1e19b852928ca35ee1cde81f29fdef59dad3a4..c7e4dd348fb704665b65572f9b6fd530aa5eb459 100644 --- a/indra/newview/skins/default/xui/ja/floater_bumps.xml +++ b/indra/newview/skins/default/xui/ja/floater_bumps.xml @@ -4,19 +4,19 @@ 検出ãªã— </floater.string> <floater.string name="bump"> - [TIME] [FIRST] [LAST]ãŒã€ã‚ãªãŸã«ã¶ã¤ã‹ã‚Šã¾ã—ãŸã€‚ + [TIME] [NAME]ãŒã€ã‚ãªãŸã«ã¶ã¤ã‹ã‚Šã¾ã—ãŸã€‚ </floater.string> <floater.string name="llpushobject"> - [TIME] [FIRST] [LAST]ãŒã€ã‚¹ã‚¯ãƒªãƒ—トã§ã‚ãªãŸã‚’プッシュã—ã¾ã—ãŸã€‚ + [TIME] [NAME]ãŒã€ã‚¹ã‚¯ãƒªãƒ—トã§ã‚ãªãŸã‚’プッシュã—ã¾ã—ãŸã€‚ </floater.string> <floater.string name="selected_object_collide"> - [TIME] [FIRST] [LAST]ãŒã€ã‚ªãƒ–ジェクトをã‚ãªãŸã«å½“ã¦ã¾ã—ãŸã€‚ + [TIME] [NAME]ãŒã€ã‚ªãƒ–ジェクトをã‚ãªãŸã«å½“ã¦ã¾ã—ãŸã€‚ </floater.string> <floater.string name="scripted_object_collide"> - [TIME] [FIRST] [LAST]ãŒã€ã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトをã‚ãªãŸã«å½“ã¦ã¾ã—ãŸã€‚ + [TIME] [NAME]ãŒã€ã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトをã‚ãªãŸã«å½“ã¦ã¾ã—ãŸã€‚ </floater.string> <floater.string name="physical_object_collide"> - [TIME] [FIRST] [LAST]ãŒã€ç‰©ç†ã‚ªãƒ–ジェクトをã‚ãªãŸã«å½“ã¦ã¾ã—ãŸã€‚ + [TIME] [NAME]ãŒã€ç‰©ç†ã‚ªãƒ–ジェクトをã‚ãªãŸã«å½“ã¦ã¾ã—ãŸã€‚ </floater.string> <floater.string name="timeStr"> [[hour,datetime,slt]:[min,datetime,slt]] diff --git a/indra/newview/skins/default/xui/ja/floater_pay.xml b/indra/newview/skins/default/xui/ja/floater_pay.xml index 39bc37bc6c2e9beac84be7e3718750eecfb7dc4e..83a3c641f9a75b58c99c7f63dae0726b1d56f74a 100644 --- a/indra/newview/skins/default/xui/ja/floater_pay.xml +++ b/indra/newview/skins/default/xui/ja/floater_pay.xml @@ -11,7 +11,7 @@ </text> <icon name="icon_person" tool_tip="ä½äºº"/> <text name="payee_name"> - [FIRST] [LAST] + Test Name That Is Extremely Long To Check Clipping </text> <button label="L$1" label_selected="L$1" name="fastpay 1"/> <button label="L$5" label_selected="L$5" name="fastpay 5"/> diff --git a/indra/newview/skins/default/xui/ja/floater_pay_object.xml b/indra/newview/skins/default/xui/ja/floater_pay_object.xml index ffd57ab67b5f53a1abf38f5d0f0e169f7e1e2ff5..637ad496efab8d712e9a32e44caea39e3853dd5c 100644 --- a/indra/newview/skins/default/xui/ja/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/ja/floater_pay_object.xml @@ -8,7 +8,7 @@ </string> <icon name="icon_person" tool_tip="ä½äºº"/> <text name="payee_name"> - [FIRST] [LAST] + Ericacita Moostopolison </text> <text name="object_name_label"> オブジェクトを介ã—ã¦ï¼š diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index 93d664490203c28541d3447a1ded8d3d046d2ca8..c0af0e03ff2edfddb4ddeb85b97272b97703b3fe 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -2082,10 +2082,10 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚» 件å: [SUBJECT]ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ï¼š [MESSAGE] </notification> <notification name="FriendOnline"> - [FIRST] [LAST] ã¯ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã§ã™ + [NAME] ã¯ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã§ã™ </notification> <notification name="FriendOffline"> - [FIRST] [LAST] ã¯ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã§ã™ + [NAME] ã¯ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã§ã™ </notification> <notification name="AddSelfFriend"> 残念ãªãŒã‚‰è‡ªåˆ†è‡ªèº«ã‚’フレンド登録ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 @@ -2153,9 +2153,6 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚» <notification name="CannotRemoveProtectedCategories"> ä¿è·ã•ã‚ŒãŸã‚«ãƒ†ã‚´ãƒªã¯å‰Šé™¤ã§ãã¾ã›ã‚“。 </notification> - <notification name="OfferedCard"> - [FIRST] [LAST] ã«ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’é€ã‚Šã¾ã—ãŸã€‚ - </notification> <notification name="UnableToBuyWhileDownloading"> オブジェクトデータã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ä¸ã¯è³¼å…¥ã§ãã¾ã›ã‚“。 ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。 @@ -2273,7 +2270,7 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚» </notification> <notification name="OtherObjectsReturned"> é¸æŠžã—ãŸåœŸåœ°ã®åŒºç”»ä¸Šã«ã‚ã£ãŸ - [FIRST] [LAST] + [NAME] ãŒæ‰€æœ‰ã™ã‚‹ã‚ªãƒ–ジェクトã¯ã€ã™ã¹ã¦æ‰€æœ‰è€…ã®ã€ŒæŒã¡ç‰©ã€ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚ </notification> <notification name="OtherObjectsReturned2"> @@ -2488,7 +2485,7 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚» フレンドã®ç™»éŒ²ä¾é ¼ãŒæ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚ </notification> <notification name="OfferCallingCard"> - [FIRST] [LAST] ãŒã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’渡ãã†ã¨ã—ã¦ã„ã¾ã™ã€‚ + [NAME] ãŒã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’渡ãã†ã¨ã—ã¦ã„ã¾ã™ã€‚ ã‚ãªãŸã®ã€ŒæŒã¡ç‰©ã€ã«ãƒ–ックマークãŒè¿½åŠ ã•ã‚Œã€ã“ã®ä½äººã«ç´ æ—©ã IM ã‚’é€ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ <form name="form"> <button name="Accept" text="å—ã‘入れる"/> @@ -2548,7 +2545,7 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚» </form> </notification> <notification name="ScriptDialog"> - [FIRST] [LAST] ã®ã€Œ [TITLE] 〠+ [NAME] ã®ã€Œ <nolink>[TITLE]</nolink> 〠[MESSAGE] <form name="form"> <button name="Ignore" text="無視ã™ã‚‹"/> @@ -2592,13 +2589,13 @@ M ã‚ーを押ã—ã¦å¤‰æ›´ã—ã¾ã™ã€‚ </form> </notification> <notification name="AutoUnmuteByIM"> - [FIRST] [LAST] ã¯ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å—ã‘å–ã‚Šã€è‡ªå‹•çš„ã«ãƒ–ãƒãƒƒã‚¯ãŒè§£é™¤ã•ã‚Œã¾ã—ãŸã€‚ + [NAME] ã¯ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å—ã‘å–ã‚Šã€è‡ªå‹•çš„ã«ãƒ–ãƒãƒƒã‚¯ãŒè§£é™¤ã•ã‚Œã¾ã—ãŸã€‚ </notification> <notification name="AutoUnmuteByMoney"> - [FIRST] [LAST] ã¯ãŠé‡‘ã‚’å—ã‘å–ã‚Šã€è‡ªå‹•çš„ã«ãƒ–ãƒãƒƒã‚¯ãŒè§£é™¤ã•ã‚Œã¾ã—ãŸã€‚ + [NAME] ã¯ãŠé‡‘ã‚’å—ã‘å–ã‚Šã€è‡ªå‹•çš„ã«ãƒ–ãƒãƒƒã‚¯ãŒè§£é™¤ã•ã‚Œã¾ã—ãŸã€‚ </notification> <notification name="AutoUnmuteByInventory"> - [FIRST] [LAST] ã¯ã‚¢ã‚¤ãƒ†ãƒ ã‚’å—ã‘å–ã‚Šã€è‡ªå‹•çš„ã«ãƒ–ãƒãƒƒã‚¯ãŒè§£é™¤ã•ã‚Œã¾ã—ãŸã€‚ + [NAME] ã¯ã‚¢ã‚¤ãƒ†ãƒ ã‚’å—ã‘å–ã‚Šã€è‡ªå‹•çš„ã«ãƒ–ãƒãƒƒã‚¯ãŒè§£é™¤ã•ã‚Œã¾ã—ãŸã€‚ </notification> <notification name="VoiceInviteGroup"> [NAME] 㯠[GROUP] ã®ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆã‚³ãƒ¼ãƒ«ã«å‚åŠ ã—ã¾ã—ãŸã€‚ diff --git a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml index 2aba4edc0d6c9afae404350d5dd1585834ee288d..334cf54a4dd24f58e3c55b23c91df9782fc09e63 100644 --- a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml @@ -46,7 +46,7 @@ <text name="my_account_link" value="[[URL] マイアカウントã«ç§»å‹•]"/> <text name="title_partner_text" value="マイパートナー:"/> <panel name="partner_data_panel"> - <name_box initial_value="(å–å¾—ä¸ï¼‰" name="partner_text" value="[FIRST] [LAST]"/> + <name_box initial_value="(å–å¾—ä¸ï¼‰" name="partner_text"/> </panel> <text name="partner_edit_link" value="[[URL] 編集]" width="100"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index 92bbedaee52e06dea5bbe63088ba4cf8c2cb54ee..187f21257a33755e89a8f57faae26f910ea36dc8 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -3574,7 +3574,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンãƒãƒ¼ãƒ‰ã—ã¦ãã ã“ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã«ã„るユーザーã¯ã‚ãªãŸã ã‘ã§ã™ã€‚ </string> <string name="offline_message"> - [FIRST] [LAST] ã¯ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã§ã™ã€‚ + [NAME] ã¯ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã§ã™ã€‚ </string> <string name="invite_message"> ã“ã®ãƒœã‚¤ã‚¹ãƒãƒ£ãƒƒãƒˆã«å¿œç”・接続ã™ã‚‹å ´åˆã¯ã€[BUTTON NAME] をクリックã—ã¦ãã ã•ã„。 diff --git a/indra/newview/skins/default/xui/nl/floater_bumps.xml b/indra/newview/skins/default/xui/nl/floater_bumps.xml index df9a99d62ef8bfb81cbdb4bdfc50622e3713529b..516b59658d9d421dae23a6c55262c98999558382 100644 --- a/indra/newview/skins/default/xui/nl/floater_bumps.xml +++ b/indra/newview/skins/default/xui/nl/floater_bumps.xml @@ -4,18 +4,18 @@ Geen gedetecteerd </string> <string name="bump"> - [TIME] [FIRST] [LAST] botste tegen u aan + [TIME] [NAME] botste tegen u aan </string> <string name="llpushobject"> - [TIME] [FIRST] [LAST] duwde u met een script + [TIME] [NAME] duwde u met een script </string> <string name="selected_object_collide"> - [TIME] [FIRST] [LAST] raakte u met een object + [TIME] [NAME] raakte u met een object </string> <string name="scripted_object_collide"> - [TIME] [FIRST] [LAST] raakte u met een gescript object + [TIME] [NAME] raakte u met een gescript object </string> <string name="physical_object_collide"> - [TIME] [FIRST] [LAST] raakte u met een fysiek object + [TIME] [NAME] raakte u met een fysiek object </string> </floater> diff --git a/indra/newview/skins/default/xui/nl/floater_pay.xml b/indra/newview/skins/default/xui/nl/floater_pay.xml index 4018ebdc93b0f977083a569260f446ff33c4099e..f2b34d78d727e15fadfad7c7e8be6c6578c93799 100644 --- a/indra/newview/skins/default/xui/nl/floater_pay.xml +++ b/indra/newview/skins/default/xui/nl/floater_pay.xml @@ -10,7 +10,7 @@ Betaal inwoner: </text> <text name="payee_name" left="110"> - [FIRST] [LAST] + Test Name That Is Extremely Long To Check Clipping </text> <text name="fastpay text"> Snel betalen: diff --git a/indra/newview/skins/default/xui/nl/floater_pay_object.xml b/indra/newview/skins/default/xui/nl/floater_pay_object.xml index d3826648f23a37acc8d3219f9345aa200340740b..11fa6d4a44d6c90e4ecff95a7092e6a37d875461 100644 --- a/indra/newview/skins/default/xui/nl/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/nl/floater_pay_object.xml @@ -7,7 +7,7 @@ Betaal inwoner: </text> <text name="payee_name" left="100" width="200"> - [FIRST] [LAST] + Ericacita Moostopolison </text> <text name="object_name_label" left="5" width="90" halign="left"> Via object: diff --git a/indra/newview/skins/default/xui/nl/floater_tools.xml b/indra/newview/skins/default/xui/nl/floater_tools.xml index d49ffc2f51225369b1385b6bd5c40ccaa7b3c81a..4ffe675831579ddd98bfd2299914a398b9cc6b4d 100644 --- a/indra/newview/skins/default/xui/nl/floater_tools.xml +++ b/indra/newview/skins/default/xui/nl/floater_tools.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="toolbox floater" title="" short_title="BOUWEN" height="587"> +<floater name="toolbox floater" title="" short_title="BOUWEN" height="592"> <button label="" label_selected="" name="button focus" tool_tip="Focus"/> <button label="" label_selected="" name="button move" tool_tip="Verplaats"/> <button label="" label_selected="" name="button edit" tool_tip="Bewerk"/> @@ -81,13 +81,13 @@ <text name="Strength:"> Sterkte </text> - <text name="obj_count" top_pad="15"> + <text name="obj_count" top_pad="20"> Geselecteerde objecten: [COUNT] </text> <text name="prim_count"> primitieven: [COUNT] </text> - <tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" top="180"> + <tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" top="185"> <panel label="Algemeen" name="General"> <text name="Name:"> Naam: @@ -115,19 +115,19 @@ <text name="Group Name Proxy"> De Lindens </text> - <button label="Instellen..." label_selected="Instellen..." name="button set group" left_pad="13"/> + <button label="Instellen..." label_selected="Instellen..." name="button set group"/> <text name="Permissions:"> Permissies: </text> - <check_box label="Deel met groep" name="checkbox share with group" tool_tip="Alle leden van de ingestelde groep toestaan om te delen en uw permissies voor dit object te gebruiken. U moet 'Overdragen' om rolbeperkingen in te schakelen." left="100"/> + <check_box label="Deel met groep" name="checkbox share with group" tool_tip="Alle leden van de ingestelde groep toestaan om te delen en uw permissies voor dit object te gebruiken. U moet 'Overdragen' om rolbeperkingen in te schakelen."/> <string name="text deed continued"> Overdragen... </string> <string name="text deed"> Overdragen </string> - <button label="Overdragen..." label_selected="Overdragen..." name="button deed" tool_tip="Groepgedeelde objecten kunnen door een groepofficier worden overgedragen" left_pad="19"/> + <button label="Overdragen..." label_selected="Overdragen..." name="button deed" tool_tip="Groepgedeelde objecten kunnen door een groepofficier worden overgedragen"/> <check_box label="Iedereen mag verplaatsen" name="checkbox allow everyone move"/> <check_box label="Iedereen mag kopiëren" name="checkbox allow everyone copy"/> <check_box label="Toon in zoeken" name="search_check" tool_tip="Laat mensen dit object zien in zoekresultaten"/> diff --git a/indra/newview/skins/default/xui/nl/notifications.xml b/indra/newview/skins/default/xui/nl/notifications.xml index b4b56a035ff55204ce95f82819382f57d08f8a3b..be0c17d2ff8a7145f51aca577a62311a38bbe875 100644 --- a/indra/newview/skins/default/xui/nl/notifications.xml +++ b/indra/newview/skins/default/xui/nl/notifications.xml @@ -2478,9 +2478,6 @@ Wilt u de [SECOND_LIFE] website bezoeken om dit in te stellen? <notification name="CannotRemoveProtectedCategories"> U kunt geen beschermde categorieën verwijderen. </notification> - <notification name="OfferedCard"> - U heeft een visitekaartje aangeboden aan [FIRST] [LAST] - </notification> <notification name="UnableToBuyWhileDownloading"> Niet mogelijk te kopen terwijl objectdata wordt gedownload. Probeer het alstublieft opnieuw. </notification> @@ -2780,7 +2777,7 @@ Probeer het alstublieft opnieuw over enkele ogenblikken. [NAME] heeft uw vriendschapsaanbod afgewezen. </notification> <notification name="OfferCallingCard"> - [FIRST] [LAST] biedt zijn/haar visitekaartje aan. + [NAME] biedt zijn/haar visitekaartje aan. Dit zal een bladwijzer in uw inventaris toevoegen zodat u deze inwoner snel kunt een IM kunt sturen. <form name="form"> <button name="Accept" text="Accepteren"/> diff --git a/indra/newview/skins/default/xui/nl/panel_edit_profile.xml b/indra/newview/skins/default/xui/nl/panel_edit_profile.xml index 172395e20a27b6ca938f09d58240b33ee8ac636e..fffdb9e8dfd9b71e656aff5a575ea7f874fb3c1d 100644 --- a/indra/newview/skins/default/xui/nl/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/nl/panel_edit_profile.xml @@ -35,7 +35,7 @@ </panel> <text name="title_partner_text" value="Partner:"/> <panel name="partner_data_panel"> - <text name="partner_text" value="[FIRST] [LAST]"/> + <text name="partner_text"/> </panel> <text name="text_box3"> Antwoord bij Niet Storen: diff --git a/indra/newview/skins/default/xui/nl/strings.xml b/indra/newview/skins/default/xui/nl/strings.xml index 844945913fb31a86cd49de3a36f5585b8f95f6cb..07265d27162a5d65edc62c7ae49144a6b1f9c557 100644 --- a/indra/newview/skins/default/xui/nl/strings.xml +++ b/indra/newview/skins/default/xui/nl/strings.xml @@ -3211,7 +3211,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. U bent de enige gebruiker in deze sessie. </string> <string name="offline_message"> - [FIRST] [LAST] is offline. + [NAME] is offline. </string> <string name="invite_message"> Klik de [BUTTON NAME] knop om deze voicechat te accepteren/verbinden. diff --git a/indra/newview/skins/default/xui/pl/floater_tools.xml b/indra/newview/skins/default/xui/pl/floater_tools.xml index 8c77df92487610984fab5c30186d21841ebdd481..7c1ced0eaee7349f6de61cef899a7760a383da45 100644 --- a/indra/newview/skins/default/xui/pl/floater_tools.xml +++ b/indra/newview/skins/default/xui/pl/floater_tools.xml @@ -307,7 +307,7 @@ <combo_box.item label="Kwadrat" name="Square"/> <combo_box.item label="TrójkÄ…t" name="Triangle"/> </combo_box> - <text name="text twist"> + <text name="text twist" left_delta="-5" width="160"> SkrÄ™cenie (poczÄ…tek/koniec) </text> <spinner label="P" name="Twist Begin"/> diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml index 7e5ed4347553c1b58c99c15db92bc64c17f22b90..8151c7eb938304846d51f890b8b1d769879b4d9f 100644 --- a/indra/newview/skins/default/xui/pl/notifications.xml +++ b/indra/newview/skins/default/xui/pl/notifications.xml @@ -2440,7 +2440,7 @@ Spróbuj ponowanie za kilka minut. Propozycja znajomoÅ›ci zostaÅ‚a odrzucona. </notification> <notification name="OfferCallingCard"> - [FIRST] [LAST] daje Tobie swojÄ… wizytówkÄ™. + [NAME] daje Tobie swojÄ… wizytówkÄ™. Wizytówka bÄ™dzie znajdowaÅ‚a siÄ™ w Szafie i umożliwi szybkie wysÅ‚anie IM do tego Rezydenta. <form name="form"> <button name="Accept" text="Zaakceptuj"/> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml index dad8bca1830342d98d6f31b44d7a22a4c16e032a..c409666ec92b307772d1a1673ffd95064197e0c9 100644 --- a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml @@ -46,7 +46,7 @@ <text name="my_account_link" value="[[URL] idź do dashboard]"/> <text name="title_partner_text" value="Partner:"/> <panel name="partner_data_panel"> - <text initial_value="(wyszukiwanie)" name="partner_text" value="[FIRST] [LAST]"/> + <text initial_value="(wyszukiwanie)" name="partner_text"/> </panel> <text name="partner_edit_link" value="[[URL] Edytuj]"/> </panel> 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 c81d0dd7ef37d079c0641a4044a9cc20a11d28a0..0000000000000000000000000000000000000000 --- 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_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml index 2925e286edf255d9db2317538d7a82279445212f..bd5fbf80d13ece103f164ebab873ac30e2188147 100644 --- a/indra/newview/skins/default/xui/pt/floater_tools.xml +++ b/indra/newview/skins/default/xui/pt/floater_tools.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="toolbox floater" short_title="BUILD TOOLS" title="" width="288"> +<floater name="toolbox floater" short_title="BUILD TOOLS" title=""> <floater.string name="status_rotate"> Arrastar as faixas coloridas para girar o objeto </floater.string> diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml index 466a24742d0f2ad20de56c234fae1c2b6d373307..76399e966c589819953f330518be940ce017a69d 100644 --- a/indra/newview/skins/default/xui/pt/notifications.xml +++ b/indra/newview/skins/default/xui/pt/notifications.xml @@ -2448,7 +2448,7 @@ Cada um pode ver o status do outro (definição padrão). Oferta de amizada aceita. </notification> <notification name="OfferCallingCard"> - [FIRST] [LAST] estão te oferecendo um cartão de visita. + [NAME] estão te oferecendo um cartão de visita. Ele colocará um item de inventário, para você possa contatá-lo facilmente. <form name="form"> <button name="Accept" text="Aceitar"/> @@ -2552,13 +2552,13 @@ Clique em Aceitar para atender ou em Recusar para recusar este convite. Clique </form> </notification> <notification name="AutoUnmuteByIM"> - [FIRST] recebeu uma MI e foi desbloqueado(a) automaticamente. + [NAME] recebeu uma MI e foi desbloqueado(a) automaticamente. </notification> <notification name="AutoUnmuteByMoney"> - [FIRST] recebeu dinheiro e foi desbloqueado(a) automaticamente. + [NAME] recebeu dinheiro e foi desbloqueado(a) automaticamente. </notification> <notification name="AutoUnmuteByInventory"> - [FIRST] recebeu dinheiro e foi desbloqueado(a) automaticamente. + [NAME] recebeu dinheiro e foi desbloqueado(a) automaticamente. </notification> <notification name="VoiceInviteGroup"> [NAME] atendeu uma ligação de bate-papo de voz com o grupo [GROUP]. diff --git a/install.xml b/install.xml index 391d83b2246f8017bfaf5a2500a214c41c36f14d..98e983299e413afa5c879da1852f30389cf162fa 100644 --- a/install.xml +++ b/install.xml @@ -1408,7 +1408,7 @@ anguage Infrstructure (CLI) international standard</string> </map> </map> </map> - <key>vivox</key> + <key>slvoice</key> <map> <key>copyright</key> <string> </string> @@ -1419,23 +1419,23 @@ anguage Infrstructure (CLI) international standard</string> <key>darwin</key> <map> <key>md5sum</key> - <string>aa144917d0e33453d3c2cc2c05c6c47c</string> + <string>2f9b3528d4b5f858fb8dcee4b6dd5188</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8821-darwin-20100529.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-darwin-20101117a.tar.bz2</uri> </map> <key>linux</key> <map> <key>md5sum</key> - <string>98f7945755f3ee8e52f685a3eff4d7be</string> + <string>cde4728b8a75a76c72a8785815cb769f</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8821-linux-20100529.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-linux-20101117a.tar.bz2</uri> </map> <key>windows</key> <map> <key>md5sum</key> - <string>e8fdd46cb026c2ec72c4489eb3bf39c1</string> + <string>940ac55a6d0141c958bf2b14939d8474</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8821-windows-20100529.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-windows-20101117a.tar.bz2</uri> </map> </map> </map> diff --git a/scripts/md5check.py b/scripts/md5check.py new file mode 100755 index 0000000000000000000000000000000000000000..951fe0105ca8a7106c0ac9649b6f4d050b016402 --- /dev/null +++ b/scripts/md5check.py @@ -0,0 +1,61 @@ +#!/usr/bin/python +"""\ +@file md5check.py +@brief Replacement for message template compatibility verifier. + +$LicenseInfo:firstyear=20i10&license=viewergpl$ +Copyright (c) 2010, Linden Research, Inc. + +Second Life Viewer Source Code +The source code in this file ("Source Code") is provided by Linden Lab +to you under the terms of the GNU General Public License, version 2.0 +("GPL"), unless you have obtained a separate licensing agreement +("Other License"), formally executed by you and Linden Lab. Terms of +the GPL can be found in doc/GPL-license.txt in this distribution, or +online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + +There are special exceptions to the terms and conditions of the GPL as +it is applied to this Source Code. View the full text of the exception +in the file doc/FLOSS-exception.txt in this software distribution, or +online at +http://secondlifegrid.net/programs/open_source/licensing/flossexception + +By copying, modifying or distributing this software, you acknowledge +that you have read and understood your obligations described above, +and agree to abide by those obligations. + +ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +COMPLETENESS OR PERFORMANCE. +$/LicenseInfo$ +""" + +import sys +import hashlib + +if len(sys.argv) != 3: + print """Usage: %s --create|<hash-digest> <file> + +Creates an md5sum hash digest of the specified file content +and compares it with the given hash digest. + +If --create is used instead of a hash digest, it will simply +print out the hash digest of specified file content. +""" % sys.argv[0] + sys.exit(1) + +if sys.argv[2] == '-': + fh = sys.stdin + filename = "<stdin>" +else: + filename = sys.argv[2] + fh = open(filename) + +hexdigest = hashlib.md5(fh.read()).hexdigest() +if sys.argv[1] == '--create': + print hexdigest +elif hexdigest == sys.argv[1]: + print "md5sum check passed:", filename +else: + print "md5sum check FAILED:", filename + sys.exit(1)