diff --git a/.hgtags b/.hgtags index 4b169ffba1d8caab936c28d284d5656e50efd9cb..ce10f5e784eb36c22af5b2ddba74ff7efdc459bd 100755 --- a/.hgtags +++ b/.hgtags @@ -538,3 +538,4 @@ ad0e15543836d64d6399d28b32852510435e344a 5.1.0-release 7b6b020fd5ad9a8dc3670c5c92d1ca92e55fc485 5.1.4-release 2ea47f358b171178eb9a95503a1670d519c2886f 5.1.5-release 04538b8157c1f5cdacd9403f0a395452d4a93689 5.1.6-release +ac3b1332ad4f55b7182a8cbcc1254535a0069f75 5.1.7-release diff --git a/autobuild.xml b/autobuild.xml index 0ea1f83f557f964efb91ecc314e30dd0f9e54c86..f07cae8e81b8f94866f6341cae2c8002d2b9f7fb 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -3260,9 +3260,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> <key>archive</key> <map> <key>hash</key> - <string>86f6708f393c162cd4f92426b0a3cde7</string> + <string>f45c0a5e7b4601b355e163bf62f5718e</string> <key>url</key> - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/15341/99062/viewer_manager-1.0.513570-darwin64-513570.tar.bz2</string> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/20587/147509/viewer_manager-1.0.517052-darwin64-517052.tar.bz2</string> </map> <key>name</key> <string>darwin64</string> @@ -3284,9 +3284,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> <key>archive</key> <map> <key>hash</key> - <string>c4dec51062ad78c09b11f7432aff4d1d</string> + <string>d2443caf062697430071d458a965f611</string> <key>url</key> - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/17857/121832/viewer_manager-1.0.515286-windows-515286.tar.bz2</string> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/20588/147516/viewer_manager-1.0.517052-windows-517052.tar.bz2</string> </map> <key>name</key> <string>windows</string> @@ -3297,7 +3297,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> <key>source_type</key> <string>hg</string> <key>version</key> - <string>1.0.515286</string> + <string>1.0.517052</string> </map> <key>vlc-bin</key> <map> @@ -3548,6 +3548,8 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> </map> <key>package_description</key> <map> + <key>canonical_repo</key> + <string>https://bitbucket.org/lindenlab/viewer-release</string> <key>copyright</key> <string>Copyright (c) 2014, Linden Research, Inc.</string> <key>description</key> diff --git a/doc/contributions.txt b/doc/contributions.txt index 039d00cbbfb8c1013f6036015faabce68ce7bbd2..90bbb1c2c6b60944192ab93ed97d127ea7c8620d 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -220,7 +220,6 @@ Ansariel Hiller STORM-2151 MAINT-6917 MAINT-8085 - STORM-2122 Aralara Rajal Arare Chantilly CHUIBUG-191 diff --git a/indra/llcommon/indra_constants.h b/indra/llcommon/indra_constants.h index fda84aa5a8c4cf4b4de411b66d3270dc0d8f10e2..a00a82aff0a8f7118e1e8e8ae2c77a9894246aef 100644 --- a/indra/llcommon/indra_constants.h +++ b/indra/llcommon/indra_constants.h @@ -323,6 +323,7 @@ const U8 CLICK_ACTION_OPEN = 4; const U8 CLICK_ACTION_PLAY = 5; const U8 CLICK_ACTION_OPEN_MEDIA = 6; const U8 CLICK_ACTION_ZOOM = 7; +const U8 CLICK_ACTION_DISABLED = 8; // DO NOT CHANGE THE SEQUENCE OF THIS LIST!! diff --git a/indra/llcommon/llcoros.cpp b/indra/llcommon/llcoros.cpp index c5ba23f68cfbc25c924c5bec41217c50d772f7cd..67e9fad1abf2b14e890624dfaee349f33ccd9350 100644 --- a/indra/llcommon/llcoros.cpp +++ b/indra/llcommon/llcoros.cpp @@ -35,6 +35,7 @@ // external library headers #include <boost/bind.hpp> // other Linden headers +#include "lltimer.h" #include "llevents.h" #include "llerror.h" #include "stringize.h" @@ -280,6 +281,25 @@ void LLCoros::setStackSize(S32 stacksize) mStackSize = stacksize; } +void LLCoros::printActiveCoroutines() +{ + LL_INFOS("LLCoros") << "Number of active coroutines: " << (S32)mCoros.size() << LL_ENDL; + if (mCoros.size() > 0) + { + LL_INFOS("LLCoros") << "-------------- List of active coroutines ------------"; + CoroMap::iterator iter; + CoroMap::iterator end = mCoros.end(); + F64 time = LLTimer::getTotalSeconds(); + for (iter = mCoros.begin(); iter != end; iter++) + { + F64 life_time = time - iter->second->mCreationTime; + LL_CONT << LL_NEWLINE << "Name: " << iter->first << " life: " << life_time; + } + LL_CONT << LL_ENDL; + LL_INFOS("LLCoros") << "-----------------------------------------------------" << LL_ENDL; + } +} + #if LL_WINDOWS static const U32 STATUS_MSC_EXCEPTION = 0xE06D7363; // compiler specific @@ -375,7 +395,8 @@ LLCoros::CoroData::CoroData(CoroData* prev, const std::string& name, mCoro(boost::bind(toplevel, _1, this, callable), stacksize), // don't consume events unless specifically directed mConsuming(false), - mSelf(0) + mSelf(0), + mCreationTime(LLTimer::getTotalSeconds()) { } @@ -384,7 +405,13 @@ std::string LLCoros::launch(const std::string& prefix, const callable_t& callabl std::string name(generateDistinctName(prefix)); Current current; // pass the current value of Current as previous context - CoroData* newCoro = new CoroData(current, name, callable, mStackSize); + CoroData* newCoro = new(std::nothrow) CoroData(current, name, callable, mStackSize); + if (newCoro == NULL) + { + // Out of memory? + printActiveCoroutines(); + LL_ERRS("LLCoros") << "Failed to start coroutine: " << name << " Stacksize: " << mStackSize << " Total coroutines: " << mCoros.size() << LL_ENDL; + } // Store it in our pointer map mCoros.insert(name, newCoro); // also set it as current diff --git a/indra/llcommon/llcoros.h b/indra/llcommon/llcoros.h index 884d6b159c5a3fc21b70ef6e80da618555225c76..8fb27af6a474d175b3d6d49505bbb2df54e261dd 100644 --- a/indra/llcommon/llcoros.h +++ b/indra/llcommon/llcoros.h @@ -151,6 +151,9 @@ class LL_COMMON_API LLCoros: public LLSingleton<LLCoros> /// for delayed initialization void setStackSize(S32 stacksize); + /// for delayed initialization + void printActiveCoroutines(); + /// get the current coro::self& for those who really really care static coro::self& get_self(); @@ -223,6 +226,7 @@ class LL_COMMON_API LLCoros: public LLSingleton<LLCoros> // function signature down to that point -- and of course through every // other caller of every such function. LLCoros::coro::self* mSelf; + F64 mCreationTime; // since epoch }; typedef boost::ptr_map<std::string, CoroData> CoroMap; CoroMap mCoros; diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index f31a054139ee23cf9268dab395055b3b7cf981ef..29de79dc6423efc167280989a1d86fe966aa8030 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -249,23 +249,13 @@ namespace LLError { #ifdef __GNUC__ // GCC: type_info::name() returns a mangled class name,st demangle - - static size_t abi_name_len = 100; - static char* abi_name_buf = (char*)malloc(abi_name_len); - // warning: above is voodoo inferred from the GCC manual, - // do NOT change - - int status; - // We don't use status, and shouldn't have to pass apointer to it - // but gcc 3.3 libstc++'s implementation of demangling is broken - // and fails without. - - char* name = abi::__cxa_demangle(mangled, - abi_name_buf, &abi_name_len, &status); - // this call can realloc the abi_name_buf pointer (!) - - return name ? name : mangled; - + // passing nullptr, 0 forces allocation of a unique buffer we can free + // fixing MAINT-8724 on OSX 10.14 + int status = -1; + char* name = abi::__cxa_demangle(mangled, nullptr, 0, &status); + std::string result(name ? name : mangled); + free(name); + return result; #elif LL_WINDOWS // DevStudio: type_info::name() includes the text "class " at the start diff --git a/indra/llcorehttp/_httpservice.cpp b/indra/llcorehttp/_httpservice.cpp index 49d865cbfaa79749c6fbe10384a5aa64f425ee88..0b72b5318601f92834dadb93df0cfd968838576e 100644 --- a/indra/llcorehttp/_httpservice.cpp +++ b/indra/llcorehttp/_httpservice.cpp @@ -95,10 +95,12 @@ HttpService::~HttpService() if (! mThread->timedJoin(250)) { // Failed to join, expect problems ahead so do a hard termination. - mThread->cancel(); + LL_WARNS(LOG_CORE) << "Destroying HttpService with running thread. Expect problems." << LL_NEWLINE + << "State: " << S32(sState) + << " Last policy: " << U32(mLastPolicy) + << LL_ENDL; - LL_WARNS(LOG_CORE) << "Destroying HttpService with running thread. Expect problems." - << LL_ENDL; + mThread->cancel(); } } } diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index e3e605d040aae7aa7ed8bc808520e5bfe3ede00c..1312f6afda3f3e8bee997d70d10614d6215a6384 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -192,7 +192,13 @@ volatile U8* LLVBOPool::allocate(U32& name, U32 size, bool for_seed) ret = (U8*) ll_aligned_malloc<64>(size); if (!ret) { - LL_ERRS() << "Failed to allocate for LLVBOPool buffer" << LL_ENDL; + LL_ERRS() << "Failed to allocate "<< size << " bytes for LLVBOPool buffer " << name <<"." << LL_NEWLINE + << "Free list size: " << mFreeList.size() // this happens if we are out of memory so a solution might be to clear some from freelist + << " Allocated Bytes: " << LLVertexBuffer::sAllocatedBytes + << " Allocated Index Bytes: " << LLVertexBuffer::sAllocatedIndexBytes + << " Pooled Bytes: " << sBytesPooled + << " Pooled Index Bytes: " << sIndexBytesPooled + << LL_ENDL; } } } diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index 212e27477ba70f94f9e1e91a07352e3336fe11ee..ed65b1e45f1b6cb55a3fcb9be4d50ae7322800fd 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -2784,7 +2784,6 @@ void LLScrollListCtrl::onClickColumn(void *userdata) } // if this column is the primary sort key, reverse the direction - sort_column_t cur_sort_column; if (!parent->mSortColumns.empty() && parent->mSortColumns.back().first == column_index) { ascending = !parent->mSortColumns.back().second; diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index b7a860aae095d39215c0297f7c6e8f90adb4cd25..2fc722d4c3e0c0cd33778edfeb45c8a03b596ea1 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -201,6 +201,7 @@ set(viewer_SOURCE_FILES llflickrconnect.cpp llfloaterabout.cpp llfloaterbvhpreview.cpp + llfloaterauction.cpp llfloaterautoreplacesettings.cpp llfloateravatar.cpp llfloateravatarpicker.cpp @@ -822,6 +823,7 @@ set(viewer_HEADER_FILES llflickrconnect.h llfloaterabout.h llfloaterbvhpreview.h + llfloaterauction.h llfloaterautoreplacesettings.h llfloateravatar.h llfloateravatarpicker.h @@ -2055,7 +2057,12 @@ if (DARWIN) # These all get set with PROPERTIES set(product "Second Life") # this is the setting for the Python wrapper, see SL-322 and WRAPPER line in Info-SecondLife.plist - set(MACOSX_WRAPPER_EXECUTABLE_NAME "SL_Launcher") + if (PACKAGE) + set(MACOSX_WRAPPER_EXECUTABLE_NAME "SL_Launcher") + else (PACKAGE) + # force the name of the actual executable to allow running it within Xcode for debugging + set(MACOSX_WRAPPER_EXECUTABLE_NAME "../Resources/Second Life Viewer.app/Contents/MacOS/Second Life") + endif (PACKAGE) set(MACOSX_BUNDLE_INFO_STRING "Second Life Viewer") set(MACOSX_BUNDLE_ICON_FILE "secondlife.icns") set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.secondlife.indra.viewer") diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index cbad66a094e701fb77716ef165189b36a282ba36..d4bda08b51bdbca6f7b0e514a3fb8ad247cd41ab 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -5.1.7 +5.1.8 diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index f0782e0bf780c482ad9bfc2aa3a0e72db5a5cea2..8e8cce578771de6ddeb1de7b736376ff8c067c97 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3703,13 +3703,13 @@ <key>FeatureManagerHTTPTable</key> <map> <key>Comment</key> - <string>Base directory for HTTP feature/gpu table fetches</string> + <string>Deprecated</string> <key>Persist</key> - <integer>1</integer> + <integer>0</integer> <key>Type</key> <string>String</string> <key>Value</key> - <string>http://viewer-settings.secondlife.com</string> + <string></string> </map> <key>FPSLogFrequency</key> <map> @@ -12280,7 +12280,7 @@ <key>Comment</key> <string>If TRUE, always load textures at full resolution (discard = 0)</string> <key>Persist</key> - <integer>1</integer> + <integer>0</integer> <key>Type</key> <string>Boolean</string> <key>Value</key> diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 5b9f1b9d4fd31d45c0736e7a6832ade9d08e5add..92a30260964a2fe8aeb7a63b83672106c3dadf72 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -76,6 +76,8 @@ const F32 AVATAR_ZOOM_MIN_Y_FACTOR = 0.7f; const F32 AVATAR_ZOOM_MIN_Z_FACTOR = 1.15f; const F32 MAX_CAMERA_DISTANCE_FROM_AGENT = 50.f; +const F32 MAX_CAMERA_DISTANCE_FROM_OBJECT = 496.f; +const F32 CAMERA_FUDGE_FROM_OBJECT = 16.f; const F32 MAX_CAMERA_SMOOTH_DISTANCE = 50.0f; @@ -738,10 +740,7 @@ F32 LLAgentCamera::getCameraZoomFraction() else { F32 min_zoom; - const F32 DIST_FUDGE = 16.f; // meters - F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE, - LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE, - MAX_CAMERA_DISTANCE_FROM_AGENT); + F32 max_zoom = getCameraMaxZoomDistance(); F32 distance = (F32)mCameraFocusOffsetTarget.magVec(); if (mFocusObject.notNull()) @@ -787,23 +786,17 @@ void LLAgentCamera::setCameraZoomFraction(F32 fraction) else { F32 min_zoom = LAND_MIN_ZOOM; - const F32 DIST_FUDGE = 16.f; // meters - F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE, - LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE, - MAX_CAMERA_DISTANCE_FROM_AGENT); + F32 max_zoom = getCameraMaxZoomDistance(); if (mFocusObject.notNull()) { - if (mFocusObject.notNull()) + if (mFocusObject->isAvatar()) { - if (mFocusObject->isAvatar()) - { - min_zoom = AVATAR_MIN_ZOOM; - } - else - { - min_zoom = OBJECT_MIN_ZOOM; - } + min_zoom = AVATAR_MIN_ZOOM; + } + else + { + min_zoom = OBJECT_MIN_ZOOM; } } @@ -909,10 +902,7 @@ void LLAgentCamera::cameraZoomIn(const F32 fraction) new_distance = llmax(new_distance, min_zoom); - // Don't zoom too far back - const F32 DIST_FUDGE = 16.f; // meters - F32 max_distance = llmin(mDrawDistance - DIST_FUDGE, - LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE ); + F32 max_distance = getCameraMaxZoomDistance(); max_distance = llmin(max_distance, current_distance * 4.f); //Scaled max relative to current distance. MAINT-3154 @@ -978,10 +968,7 @@ void LLAgentCamera::cameraOrbitIn(const F32 meters) new_distance = llmax(new_distance, min_zoom); - // Don't zoom too far back - const F32 DIST_FUDGE = 16.f; // meters - F32 max_distance = llmin(mDrawDistance - DIST_FUDGE, - LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE ); + F32 max_distance = getCameraMaxZoomDistance(); if (new_distance > max_distance) { @@ -1946,6 +1933,13 @@ LLVector3 LLAgentCamera::getCameraOffsetInitial() return convert_from_llsd<LLVector3>(mCameraOffsetInitial[mCameraPreset]->get(), TYPE_VEC3, ""); } +F32 LLAgentCamera::getCameraMaxZoomDistance() +{ + // Ignore "DisableCameraConstraints", we don't want to be out of draw range when we focus onto objects or avatars + return llmin(MAX_CAMERA_DISTANCE_FROM_OBJECT, + mDrawDistance - 1, // convenience, don't hit draw limit when focusing on something + LLWorld::getInstance()->getRegionWidthInMeters() - CAMERA_FUDGE_FROM_OBJECT); +} //----------------------------------------------------------------------------- // handleScrollWheel() diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h index ab793ff316b2ea54eef884323d6b81506b66a07b..d087de1e2ff5d55227ea3bb700faf579b818f139 100644 --- a/indra/newview/llagentcamera.h +++ b/indra/newview/llagentcamera.h @@ -112,6 +112,8 @@ class LLAgentCamera private: /** Determines default camera offset depending on the current camera preset */ LLVector3 getCameraOffsetInitial(); + /** Determines maximum camera distance from target for mouselook, opposite to LAND_MIN_ZOOM */ + F32 getCameraMaxZoomDistance(); /** Camera preset in Third Person Mode */ ECameraPreset mCameraPreset; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index f705084bdbccb2fd709329e9fe5b1bf92a1d8f6e..687b76c224ca7e5fef0952edcf9d9ece29fc8280 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -42,6 +42,7 @@ #include "llagentlanguage.h" #include "llagentui.h" #include "llagentwearables.h" +#include "lldirpicker.h" #include "llfloaterimcontainer.h" #include "llimprocessing.h" #include "llwindow.h" @@ -1082,6 +1083,8 @@ bool LLAppViewer::init() } } +// don't nag developers who need to run the executable directly +#if LL_RELEASE_FOR_DOWNLOAD // MAINT-8305: If we're processing a SLURL, skip the launcher check. if (gSavedSettings.getString("CmdLineLoginLocation").empty()) { @@ -1098,6 +1101,7 @@ bool LLAppViewer::init() LLNotificationsUtil::add("RunLauncher"); } } +#endif #if LL_WINDOWS if (gGLManager.mGLVersion < LLFeatureManager::getInstance()->getExpectedGLVersion()) @@ -1577,6 +1581,11 @@ bool LLAppViewer::doFrame() saveFinalSnapshot(); } + if (LLVoiceClient::instanceExists()) + { + LLVoiceClient::getInstance()->terminate(); + } + delete gServicePump; destroyMainloopTimeout(); @@ -1676,11 +1685,6 @@ bool LLAppViewer::cleanup() // Give any remaining SLPlugin instances a chance to exit cleanly. LLPluginProcessParent::shutdown(); - if (LLVoiceClient::instanceExists()) - { - LLVoiceClient::getInstance()->terminate(); - } - disconnectViewer(); LL_INFOS() << "Viewer disconnected" << LL_ENDL; @@ -1794,6 +1798,8 @@ bool LLAppViewer::cleanup() // (Deleted observers should have already removed themselves) gInventory.cleanupInventory(); + LLCoros::getInstance()->printActiveCoroutines(); + LL_INFOS() << "Cleaning up Selections" << LL_ENDL; // Clean up selection managers after UI is destroyed, as UI may be observing them. @@ -1980,6 +1986,7 @@ bool LLAppViewer::cleanup() mAppCoreHttp.cleanup(); SUBSYSTEM_CLEANUP(LLFilePickerThread); + SUBSYSTEM_CLEANUP(LLDirPickerThread); //MUST happen AFTER SUBSYSTEM_CLEANUP(LLCurl) delete sTextureCache; @@ -2150,6 +2157,7 @@ bool LLAppViewer::initThreads() gMeshRepo.init(); LLFilePickerThread::initClass(); + LLDirPickerThread::initClass(); // *FIX: no error handling here! return true; @@ -4584,7 +4592,7 @@ void LLAppViewer::idle() LLSmoothInterpolation::updateInterpolants(); LLMortician::updateClass(); LLFilePickerThread::clearDead(); //calls LLFilePickerThread::notify() - + LLDirPickerThread::clearDead(); F32 dt_raw = idle_timer.getElapsedTimeAndResetF32(); // Cap out-of-control frame times diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 97a71a880276c7c716bd7451af0fb10377127bfb..1099d4bc09e1481233d1c41b3a64656ff5a5979f 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -528,10 +528,24 @@ class LLChatHistoryHeader: public LLPanel registrar_enable.add("ObjectIcon.Visible", boost::bind(&LLChatHistoryHeader::onObjectIconContextMenuItemVisible, this, _2)); LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_avatar_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); - mPopupMenuHandleAvatar = menu->getHandle(); + if (menu) + { + mPopupMenuHandleAvatar = menu->getHandle(); + } + else + { + LL_WARNS() << " Failed to create menu_avatar_icon.xml" << LL_ENDL; + } menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_object_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); - mPopupMenuHandleObject = menu->getHandle(); + if (menu) + { + mPopupMenuHandleObject = menu->getHandle(); + } + else + { + LL_WARNS() << " Failed to create menu_object_icon.xml" << LL_ENDL; + } setDoubleClickCallback(boost::bind(&LLChatHistoryHeader::showInspector, this)); @@ -619,7 +633,12 @@ class LLChatHistoryHeader: public LLPanel } mUserNameFont = style_params.font(); - LLTextBox* user_name = getChild<LLTextBox>("user_name"); + if (!mUserNameTextBox) + { + mUserNameTextBox = getChild<LLTextBox>("user_name"); + mTimeBoxTextBox = getChild<LLTextBox>("time_box"); + } + LLTextBox* user_name = mUserNameTextBox; user_name->setReadOnlyColor(style_params.readonly_color()); user_name->setColor(style_params.color()); diff --git a/indra/newview/lldirpicker.cpp b/indra/newview/lldirpicker.cpp index 5c4f0f4d5dbb460c580bc3c45947482421b03ad4..5443afe60c1c5418e8ec0fa295c5a726591b8eba 100644 --- a/indra/newview/lldirpicker.cpp +++ b/indra/newview/lldirpicker.cpp @@ -77,6 +77,14 @@ LLDirPicker::LLDirPicker() : mFileName(NULL), mLocked(false) { + bi.hwndOwner = NULL; + bi.pidlRoot = NULL; + bi.pszDisplayName = NULL; + bi.lpszTitle = NULL; + bi.ulFlags = BIF_USENEWUI; + bi.lpfn = NULL; + bi.lParam = NULL; + bi.iImage = 0; } LLDirPicker::~LLDirPicker() @@ -84,7 +92,7 @@ LLDirPicker::~LLDirPicker() // nothing } -BOOL LLDirPicker::getDir(std::string* filename) +BOOL LLDirPicker::getDir(std::string* filename, bool blocking) { if( mLocked ) { @@ -99,39 +107,39 @@ BOOL LLDirPicker::getDir(std::string* filename) BOOL success = FALSE; - // Modal, so pause agent - send_agent_pause(); - - BROWSEINFO bi; - memset(&bi, 0, sizeof(bi)); - - bi.ulFlags = BIF_USENEWUI; - bi.hwndOwner = (HWND)gViewerWindow->getPlatformWindow(); - bi.lpszTitle = NULL; - - ::OleInitialize(NULL); + + if (blocking) + { + // Modal, so pause agent + send_agent_pause(); + } - LPITEMIDLIST pIDL = ::SHBrowseForFolder(&bi); + bi.hwndOwner = (HWND)gViewerWindow->getPlatformWindow(); - if(pIDL != NULL) - { - WCHAR buffer[_MAX_PATH] = {'\0'}; + ::OleInitialize(NULL); + LPITEMIDLIST pIDL = ::SHBrowseForFolder(&bi); - if(::SHGetPathFromIDList(pIDL, buffer) != 0) - { - // Set the string value. + if(pIDL != NULL) + { + WCHAR buffer[_MAX_PATH] = {'\0'}; - mDir = utf16str_to_utf8str(llutf16string(buffer)); - success = TRUE; - } + if(::SHGetPathFromIDList(pIDL, buffer) != 0) + { + // Set the string value. - // free the item id list - CoTaskMemFree(pIDL); - } + mDir = utf16str_to_utf8str(llutf16string(buffer)); + success = TRUE; + } + // free the item id list + CoTaskMemFree(pIDL); + } - ::OleUninitialize(); + ::OleUninitialize(); - send_agent_resume(); + if (blocking) + { + send_agent_resume(); + } // Account for the fact that the app has been stalled. LLFrameTimer::updateFrameTime(); @@ -167,7 +175,7 @@ void LLDirPicker::reset() //static -BOOL LLDirPicker::getDir(std::string* filename) +BOOL LLDirPicker::getDir(std::string* filename, bool blocking) { LLFilePicker::ELoadFilter filter=LLFilePicker::FFLOAD_DIRECTORY; @@ -201,7 +209,7 @@ void LLDirPicker::reset() mFilePicker->reset(); } -BOOL LLDirPicker::getDir(std::string* filename) +BOOL LLDirPicker::getDir(std::string* filename, bool blocking) { reset(); @@ -256,7 +264,7 @@ void LLDirPicker::reset() { } -BOOL LLDirPicker::getDir(std::string* filename) +BOOL LLDirPicker::getDir(std::string* filename, bool blocking) { return FALSE; } @@ -267,3 +275,94 @@ std::string LLDirPicker::getDirName() } #endif + + +LLMutex* LLDirPickerThread::sMutex = NULL; +std::queue<LLDirPickerThread*> LLDirPickerThread::sDeadQ; + +void LLDirPickerThread::getFile() +{ +#if LL_WINDOWS + start(); +#else + run(); +#endif +} + +//virtual +void LLDirPickerThread::run() +{ +#if LL_WINDOWS + bool blocking = false; +#else + bool blocking = true; // modal +#endif + + LLDirPicker picker; + + if (picker.getDir(&mProposedName, blocking)) + { + mResponses.push_back(picker.getDirName()); + } + + { + LLMutexLock lock(sMutex); + sDeadQ.push(this); + } + +} + +//static +void LLDirPickerThread::initClass() +{ + sMutex = new LLMutex(NULL); +} + +//static +void LLDirPickerThread::cleanupClass() +{ + clearDead(); + + delete sMutex; + sMutex = NULL; +} + +//static +void LLDirPickerThread::clearDead() +{ + if (!sDeadQ.empty()) + { + LLMutexLock lock(sMutex); + while (!sDeadQ.empty()) + { + LLDirPickerThread* thread = sDeadQ.front(); + thread->notify(thread->mResponses); + delete thread; + sDeadQ.pop(); + } + } +} + +LLDirPickerThread::LLDirPickerThread(const dir_picked_signal_t::slot_type& cb, const std::string &proposed_name) + : LLThread("dir picker"), + mFilePickedSignal(NULL) +{ + mFilePickedSignal = new dir_picked_signal_t(); + mFilePickedSignal->connect(cb); +} + +LLDirPickerThread::~LLDirPickerThread() +{ + delete mFilePickedSignal; +} + +void LLDirPickerThread::notify(const std::vector<std::string>& filenames) +{ + if (!filenames.empty()) + { + if (mFilePickedSignal) + { + (*mFilePickedSignal)(filenames, mProposedName); + } + } +} diff --git a/indra/newview/lldirpicker.h b/indra/newview/lldirpicker.h index 8656b23afd670314542ddf58eb85d20955cdfc54..c7dba12130b9e26c8d8490823ff21a9a71701207 100644 --- a/indra/newview/lldirpicker.h +++ b/indra/newview/lldirpicker.h @@ -33,6 +33,13 @@ #include "stdtypes.h" +#include "llthread.h" +#include <queue> + +#if LL_WINDOWS +#include <shlobj.h> +#endif + #if LL_DARWIN // AssertMacros.h does bad things. @@ -53,7 +60,7 @@ class LLDirPicker // calling this before main() is undefined static LLDirPicker& instance( void ) { return sInstance; } - BOOL getDir(std::string* filename); + BOOL getDir(std::string* filename, bool blocking = true); std::string getDirName(); // clear any lists of buffers or whatever, and make sure the dir @@ -76,11 +83,15 @@ class LLDirPicker LLFilePicker *mFilePicker; #endif + std::string* mFileName; std::string mDir; bool mLocked; static LLDirPicker sInstance; +#if LL_WINDOWS + BROWSEINFO bi; +#endif public: // don't call these directly please. @@ -88,4 +99,33 @@ class LLDirPicker ~LLDirPicker(); }; +class LLDirPickerThread : public LLThread +{ +public: + + static std::queue<LLDirPickerThread*> sDeadQ; + static LLMutex* sMutex; + + static void initClass(); + static void cleanupClass(); + static void clearDead(); + + std::vector<std::string> mResponses; + std::string mProposedName; + + typedef boost::signals2::signal<void(const std::vector<std::string>& filenames, std::string proposed_name)> dir_picked_signal_t; + + LLDirPickerThread(const dir_picked_signal_t::slot_type& cb, const std::string &proposed_name); + ~LLDirPickerThread(); + + void getFile(); + + virtual void run(); + + virtual void notify(const std::vector<std::string>& filenames); + +private: + dir_picked_signal_t* mFilePickedSignal; +}; + #endif diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index b0d48abb14901e6d44a1aacea5782856e512b765..0873300cd257bffec2f0408c4e267fb01cde120f 100644 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -328,6 +328,9 @@ void LLDrawPoolAlpha::render(S32 pass) gGL.diffuseColor4f(0, 0, 1, 1); pushBatches(LLRenderPass::PASS_MATERIAL_ALPHA_MASK, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE); + gGL.diffuseColor4f(0, 1, 0, 1); + pushBatches(LLRenderPass::PASS_INVISIBLE, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE); + if(shaders) { gHighlightProgram.unbind(); diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index bc96ee00f78f6d06b8220d93a09f8846d88195df..487496df9a3691a16d809525d721ccc2a2a555c4 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -62,13 +62,10 @@ #if LL_DARWIN const char FEATURE_TABLE_FILENAME[] = "featuretable_mac.txt"; -const char FEATURE_TABLE_VER_FILENAME[] = "featuretable_mac.%s.txt"; #elif LL_LINUX const char FEATURE_TABLE_FILENAME[] = "featuretable_linux.txt"; -const char FEATURE_TABLE_VER_FILENAME[] = "featuretable_linux.%s.txt"; #else const char FEATURE_TABLE_FILENAME[] = "featuretable.txt"; -const char FEATURE_TABLE_VER_FILENAME[] = "featuretable.%s.txt"; #endif #if 0 // consuming code in #if 0 below @@ -273,33 +270,11 @@ bool LLFeatureManager::loadFeatureTables() app_path += gDirUtilp->getDirDelimiter(); std::string filename; - std::string http_filename; filename = FEATURE_TABLE_FILENAME; - http_filename = llformat(FEATURE_TABLE_VER_FILENAME, LLVersionInfo::getVersion().c_str()); app_path += filename; - // second table is downloaded with HTTP - note that this will only be used on the run _after_ it is downloaded - std::string http_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, http_filename); - - // use HTTP table if it exists - std::string path; - bool parse_ok = false; - if (gDirUtilp->fileExists(http_path)) - { - parse_ok = parseFeatureTable(http_path); - if (!parse_ok) - { - // the HTTP table failed to parse, so delete it - LLFile::remove(http_path); - LL_WARNS("RenderInit") << "Removed invalid feature table '" << http_path << "'" << LL_ENDL; - } - } - - if (!parse_ok) - { - parse_ok = parseFeatureTable(app_path); - } + bool parse_ok = parseFeatureTable(app_path); return parse_ok; } @@ -407,7 +382,16 @@ bool LLFeatureManager::loadGPUClass() if (!gSavedSettings.getBOOL("SkipBenchmark")) { //get memory bandwidth from benchmark - F32 gbps = gpu_benchmark(); + F32 gbps; + try + { + gbps = gpu_benchmark(); + } + catch (const std::exception& e) + { + gbps = -1.f; + LL_WARNS("RenderInit") << "GPU benchmark failed: " << e.what() << LL_ENDL; + } if (gbps < 0.f) { //couldn't bench, use GLVersion @@ -486,70 +470,6 @@ bool LLFeatureManager::loadGPUClass() return true; // indicates that a gpu value was established } -void LLFeatureManager::fetchFeatureTableCoro(std::string tableName) -{ - LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID); - LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t - httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("FeatureManagerHTTPTable", httpPolicy)); - LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest); - - const std::string base = gSavedSettings.getString("FeatureManagerHTTPTable"); - - -#if LL_WINDOWS - std::string os_string = LLOSInfo::instance().getOSStringSimple(); - std::string filename; - - if (os_string.find("Microsoft Windows XP") == 0) - { - filename = llformat(tableName.c_str(), "_xp", LLVersionInfo::getVersion().c_str()); - } - else - { - filename = llformat(tableName.c_str(), "", LLVersionInfo::getVersion().c_str()); - } -#else - const std::string filename = llformat(tableName.c_str(), LLVersionInfo::getVersion().c_str()); -#endif - - std::string url = base + "/" + filename; - // testing url below - //url = "http://viewer-settings.secondlife.com/featuretable.2.1.1.208406.txt"; - const std::string path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, filename); - - - LL_INFOS() << "LLFeatureManager fetching " << url << " into " << path << LL_ENDL; - - LLSD result = httpAdapter->getRawAndSuspend(httpRequest, url); - - LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS]; - LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults); - - if (status) - { // There was a newer feature table on the server. We've grabbed it and now should write it. - // write to file - const LLSD::Binary &raw = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_RAW].asBinary(); - - LL_INFOS() << "writing feature table to " << path << LL_ENDL; - - S32 size = raw.size(); - if (size > 0) - { - // write to file - LLAPRFile out(path, LL_APR_WB); - out.write(raw.data(), size); - out.close(); - } - } -} - -// fetch table(s) from a website (S3) -void LLFeatureManager::fetchHTTPTables() -{ - LLCoros::instance().launch("LLFeatureManager::fetchFeatureTableCoro", - boost::bind(&LLFeatureManager::fetchFeatureTableCoro, this, FEATURE_TABLE_VER_FILENAME)); -} - void LLFeatureManager::cleanupFeatureTables() { std::for_each(mMaskList.begin(), mMaskList.end(), DeletePairedPointer()); diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h index 54bd07329a9541fd8ea5176610724c99fb31ea44..f77861a1a754f4efa001027f946ac55897000d46 100644 --- a/indra/newview/llfeaturemanager.h +++ b/indra/newview/llfeaturemanager.h @@ -145,9 +145,6 @@ class LLFeatureManager : public LLFeatureList, public LLSingleton<LLFeatureManag // in the skip list if true void applyFeatures(bool skipFeatures); - // load the dynamic GPU/feature table from a website - void fetchHTTPTables(); - LLSD getRecommendedSettingsMap(); protected: @@ -158,8 +155,6 @@ class LLFeatureManager : public LLFeatureList, public LLSingleton<LLFeatureManag void initBaseMask(); - void fetchFeatureTableCoro(std::string name); - std::map<std::string, LLFeatureList *> mMaskList; std::set<std::string> mSkippedFeatures; BOOL mInited; diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp new file mode 100644 index 0000000000000000000000000000000000000000..56619e818af2526f399da48e11796809130da5c5 --- /dev/null +++ b/indra/newview/llfloaterauction.cpp @@ -0,0 +1,552 @@ +/** + * @file llfloaterauction.cpp + * @author James Cook, Ian Wilkes + * @brief Implementation of the auction floater. + * + * $LicenseInfo:firstyear=2004&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llfloaterauction.h" + +#include "llgl.h" +#include "llimagej2c.h" +#include "llimagetga.h" +#include "llparcel.h" +#include "llvfile.h" +#include "llvfs.h" +#include "llwindow.h" +#include "message.h" + +#include "llagent.h" +#include "llassetstorage.h" +#include "llcombobox.h" +#include "llestateinfomodel.h" +#include "llmimetypes.h" +#include "llnotifications.h" +#include "llnotificationsutil.h" +#include "llsavedsettingsglue.h" +#include "llviewertexturelist.h" +#include "llviewerparcelmgr.h" +#include "llviewerregion.h" +#include "lluictrlfactory.h" +#include "llviewerwindow.h" +#include "llviewerdisplay.h" +#include "llviewercontrol.h" +#include "llui.h" +#include "llrender.h" +#include "llsdutil.h" +#include "llsdutil_math.h" +#include "lltrans.h" +#include "llcorehttputil.h" + +///---------------------------------------------------------------------------- +/// Local function declarations, constants, enums, and typedefs +///---------------------------------------------------------------------------- + +void auction_j2c_upload_done(const LLUUID& asset_id, + void* user_data, S32 status, LLExtStat ext_status); +void auction_tga_upload_done(const LLUUID& asset_id, + void* user_data, S32 status, LLExtStat ext_status); + +///---------------------------------------------------------------------------- +/// Class llfloaterauction +///---------------------------------------------------------------------------- + +// Default constructor +LLFloaterAuction::LLFloaterAuction(const LLSD& key) + : LLFloater(key), + mParcelID(-1) +{ + mCommitCallbackRegistrar.add("ClickSnapshot", boost::bind(&LLFloaterAuction::onClickSnapshot, this)); + mCommitCallbackRegistrar.add("ClickSellToAnyone", boost::bind(&LLFloaterAuction::onClickSellToAnyone, this)); + mCommitCallbackRegistrar.add("ClickStartAuction", boost::bind(&LLFloaterAuction::onClickStartAuction, this)); + mCommitCallbackRegistrar.add("ClickResetParcel", boost::bind(&LLFloaterAuction::onClickResetParcel, this)); +} + +// Destroys the object +LLFloaterAuction::~LLFloaterAuction() +{ +} + +BOOL LLFloaterAuction::postBuild() +{ + return TRUE; +} + +void LLFloaterAuction::onOpen(const LLSD& key) +{ + initialize(); +} + +void LLFloaterAuction::initialize() +{ + mParcelUpdateCapUrl.clear(); + + mParcelp = LLViewerParcelMgr::getInstance()->getParcelSelection(); + LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); + LLParcel* parcelp = mParcelp->getParcel(); + if(parcelp && region && !parcelp->getForSale()) + { + mParcelHost = region->getHost(); + mParcelID = parcelp->getLocalID(); + mParcelUpdateCapUrl = region->getCapability("ParcelPropertiesUpdate"); + + getChild<LLUICtrl>("parcel_text")->setValue(parcelp->getName()); + getChildView("snapshot_btn")->setEnabled(TRUE); + getChildView("reset_parcel_btn")->setEnabled(TRUE); + getChildView("start_auction_btn")->setEnabled(TRUE); + + U32 estate_id = LLEstateInfoModel::instance().getID(); + // Only enable "Sell to Anyone" on Teen grid or if we don't know the ID yet + getChildView("sell_to_anyone_btn")->setEnabled(estate_id == ESTATE_TEEN || estate_id == 0); + } + else + { + mParcelHost.invalidate(); + if(parcelp && parcelp->getForSale()) + { + getChild<LLUICtrl>("parcel_text")->setValue(getString("already for sale")); + } + else + { + getChild<LLUICtrl>("parcel_text")->setValue(LLStringUtil::null); + } + mParcelID = -1; + getChildView("snapshot_btn")->setEnabled(false); + getChildView("reset_parcel_btn")->setEnabled(false); + getChildView("sell_to_anyone_btn")->setEnabled(false); + getChildView("start_auction_btn")->setEnabled(false); + } + + mImageID.setNull(); + mImage = NULL; +} + +void LLFloaterAuction::draw() +{ + LLFloater::draw(); + + if(!isMinimized() && mImage.notNull()) + { + LLView* snapshot_icon = findChildView("snapshot_icon"); + if (snapshot_icon) + { + LLRect rect = snapshot_icon->getRect(); + { + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + gl_rect_2d(rect, LLColor4(0.f, 0.f, 0.f, 1.f)); + rect.stretch(-1); + } + { + LLGLSUIDefault gls_ui; + gGL.color3f(1.f, 1.f, 1.f); + gl_draw_scaled_image(rect.mLeft, + rect.mBottom, + rect.getWidth(), + rect.getHeight(), + mImage); + } + } + } +} + + +// static +void LLFloaterAuction::onClickSnapshot(void* data) +{ + LLFloaterAuction* self = (LLFloaterAuction*)(data); + + LLPointer<LLImageRaw> raw = new LLImageRaw; + + gForceRenderLandFence = self->getChild<LLUICtrl>("fence_check")->getValue().asBoolean(); + BOOL success = gViewerWindow->rawSnapshot(raw, + gViewerWindow->getWindowWidthScaled(), + gViewerWindow->getWindowHeightScaled(), + TRUE, FALSE, + FALSE, FALSE); + gForceRenderLandFence = FALSE; + + if (success) + { + self->mTransactionID.generate(); + self->mImageID = self->mTransactionID.makeAssetID(gAgent.getSecureSessionID()); + + if(!gSavedSettings.getBOOL("QuietSnapshotsToDisk")) + { + gViewerWindow->playSnapshotAnimAndSound(); + } + LL_INFOS() << "Writing TGA..." << LL_ENDL; + + LLPointer<LLImageTGA> tga = new LLImageTGA; + tga->encode(raw); + LLVFile::writeFile(tga->getData(), tga->getDataSize(), gVFS, self->mImageID, LLAssetType::AT_IMAGE_TGA); + + raw->biasedScaleToPowerOfTwo(LLViewerTexture::MAX_IMAGE_SIZE_DEFAULT); + + LL_INFOS() << "Writing J2C..." << LL_ENDL; + + LLPointer<LLImageJ2C> j2c = new LLImageJ2C; + j2c->encode(raw, 0.0f); + LLVFile::writeFile(j2c->getData(), j2c->getDataSize(), gVFS, self->mImageID, LLAssetType::AT_TEXTURE); + + self->mImage = LLViewerTextureManager::getLocalTexture((LLImageRaw*)raw, FALSE); + gGL.getTexUnit(0)->bind(self->mImage); + self->mImage->setAddressMode(LLTexUnit::TAM_CLAMP); + } + else + { + LL_WARNS() << "Unable to take snapshot" << LL_ENDL; + } +} + +// static +void LLFloaterAuction::onClickStartAuction(void* data) +{ + LLFloaterAuction* self = (LLFloaterAuction*)(data); + + if(self->mImageID.notNull()) + { + LLSD parcel_name = self->getChild<LLUICtrl>("parcel_text")->getValue(); + + // create the asset + std::string* name = new std::string(parcel_name.asString()); + gAssetStorage->storeAssetData(self->mTransactionID, LLAssetType::AT_IMAGE_TGA, + &auction_tga_upload_done, + (void*)name, + FALSE); + self->getWindow()->incBusyCount(); + + std::string* j2c_name = new std::string(parcel_name.asString()); + gAssetStorage->storeAssetData(self->mTransactionID, LLAssetType::AT_TEXTURE, + &auction_j2c_upload_done, + (void*)j2c_name, + FALSE); + self->getWindow()->incBusyCount(); + + LLNotificationsUtil::add("UploadingAuctionSnapshot"); + + } + LLMessageSystem* msg = gMessageSystem; + + msg->newMessage("ViewerStartAuction"); + + msg->nextBlock("AgentData"); + msg->addUUID("AgentID", gAgent.getID()); + msg->addUUID("SessionID", gAgent.getSessionID()); + msg->nextBlock("ParcelData"); + msg->addS32("LocalID", self->mParcelID); + msg->addUUID("SnapshotID", self->mImageID); + msg->sendReliable(self->mParcelHost); + + // clean up floater, and get out + self->cleanupAndClose(); +} + + +void LLFloaterAuction::cleanupAndClose() +{ + mImageID.setNull(); + mImage = NULL; + mParcelID = -1; + mParcelHost.invalidate(); + closeFloater(); +} + + + +// static glue +void LLFloaterAuction::onClickResetParcel(void* data) +{ + LLFloaterAuction* self = (LLFloaterAuction*)(data); + if (self) + { + self->doResetParcel(); + } +} + + +// Reset all the values for the parcel in preparation for a sale +void LLFloaterAuction::doResetParcel() +{ + LLParcel* parcelp = mParcelp->getParcel(); + LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); + + if (parcelp + && region + && !mParcelUpdateCapUrl.empty()) + { + LLSD body; + std::string empty; + + // request new properties update from simulator + U32 message_flags = 0x01; + body["flags"] = ll_sd_from_U32(message_flags); + + // Set all the default parcel properties for auction + body["local_id"] = parcelp->getLocalID(); + + U32 parcel_flags = PF_ALLOW_LANDMARK | + PF_ALLOW_FLY | + PF_CREATE_GROUP_OBJECTS | + PF_ALLOW_ALL_OBJECT_ENTRY | + PF_ALLOW_GROUP_OBJECT_ENTRY | + PF_ALLOW_GROUP_SCRIPTS | + PF_RESTRICT_PUSHOBJECT | + PF_SOUND_LOCAL | + PF_ALLOW_VOICE_CHAT | + PF_USE_ESTATE_VOICE_CHAN; + + body["parcel_flags"] = ll_sd_from_U32(parcel_flags); + + // Build a parcel name like "Ahern (128,128) PG 4032m" + std::ostringstream parcel_name; + LLVector3 center_point( parcelp->getCenterpoint() ); + center_point.snap(0); // Get rid of fractions + parcel_name << region->getName() + << " (" + << (S32) center_point.mV[VX] + << "," + << (S32) center_point.mV[VY] + << ") " + << region->getSimAccessString() + << " " + << parcelp->getArea() + << "m"; + + std::string new_name(parcel_name.str().c_str()); + body["name"] = new_name; + getChild<LLUICtrl>("parcel_text")->setValue(new_name); // Set name in dialog as well, since it won't get updated otherwise + + body["sale_price"] = (S32) 0; + body["description"] = empty; + body["music_url"] = empty; + body["media_url"] = empty; + body["media_desc"] = empty; + body["media_type"] = LLMIMETypes::getDefaultMimeType(); + body["media_width"] = (S32) 0; + body["media_height"] = (S32) 0; + body["auto_scale"] = (S32) 0; + body["media_loop"] = (S32) 0; + body["obscure_media"] = (S32) 0; // OBSOLETE - no longer used + body["obscure_music"] = (S32) 0; // OBSOLETE - no longer used + body["media_id"] = LLUUID::null; + body["group_id"] = MAINTENANCE_GROUP_ID; // Use maintenance group + body["pass_price"] = (S32) 10; // Defaults to $10 + body["pass_hours"] = 0.0f; + body["category"] = (U8) LLParcel::C_NONE; + body["auth_buyer_id"] = LLUUID::null; + body["snapshot_id"] = LLUUID::null; + body["user_location"] = ll_sd_from_vector3( LLVector3::zero ); + body["user_look_at"] = ll_sd_from_vector3( LLVector3::zero ); + body["landing_type"] = (U8) LLParcel::L_DIRECT; + + LL_INFOS() << "Sending parcel update to reset for auction via capability to: " + << mParcelUpdateCapUrl << LL_ENDL; + + LLCoreHttpUtil::HttpCoroutineAdapter::messageHttpPost(mParcelUpdateCapUrl, body, + "Parcel reset for auction", + "Parcel not set for auction."); + + // Send a message to clear the object return time + LLMessageSystem *msg = gMessageSystem; + msg->newMessageFast(_PREHASH_ParcelSetOtherCleanTime); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_ParcelData); + msg->addS32Fast(_PREHASH_LocalID, parcelp->getLocalID()); + msg->addS32Fast(_PREHASH_OtherCleanTime, 5); // 5 minute object auto-return + + msg->sendReliable(region->getHost()); + + // Clear the access lists + clearParcelAccessList(parcelp, region, AL_ACCESS); + clearParcelAccessList(parcelp, region, AL_BAN); + clearParcelAccessList(parcelp, region, AL_ALLOW_EXPERIENCE); + clearParcelAccessList(parcelp, region, AL_BLOCK_EXPERIENCE); + } +} + + + +void LLFloaterAuction::clearParcelAccessList(LLParcel* parcel, LLViewerRegion* region, U32 list) +{ + if (!region || !parcel) return; + + LLUUID transactionUUID; + transactionUUID.generate(); + + LLMessageSystem* msg = gMessageSystem; + + msg->newMessageFast(_PREHASH_ParcelAccessListUpdate); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() ); + msg->nextBlockFast(_PREHASH_Data); + msg->addU32Fast(_PREHASH_Flags, list); + msg->addS32(_PREHASH_LocalID, parcel->getLocalID() ); + msg->addUUIDFast(_PREHASH_TransactionID, transactionUUID); + msg->addS32Fast(_PREHASH_SequenceID, 1); // sequence_id + msg->addS32Fast(_PREHASH_Sections, 0); // num_sections + + // pack an empty block since there will be no data + msg->nextBlockFast(_PREHASH_List); + msg->addUUIDFast(_PREHASH_ID, LLUUID::null ); + msg->addS32Fast(_PREHASH_Time, 0 ); + msg->addU32Fast(_PREHASH_Flags, 0 ); + + msg->sendReliable( region->getHost() ); +} + + + +// static - 'Sell to Anyone' clicked, throw up a confirmation dialog +void LLFloaterAuction::onClickSellToAnyone(void* data) +{ + LLFloaterAuction* self = (LLFloaterAuction*)(data); + if (self) + { + LLParcel* parcelp = self->mParcelp->getParcel(); + + // Do a confirmation + S32 sale_price = parcelp->getArea(); // Selling for L$1 per meter + S32 area = parcelp->getArea(); + + LLSD args; + args["LAND_SIZE"] = llformat("%d", area); + args["SALE_PRICE"] = llformat("%d", sale_price); + args["NAME"] = LLTrans::getString("Anyone"); + + LLNotification::Params params("ConfirmLandSaleChange"); // Re-use existing dialog + params.substitutions(args) + .functor.function(boost::bind(&LLFloaterAuction::onSellToAnyoneConfirmed, self, _1, _2)); + + params.name("ConfirmLandSaleToAnyoneChange"); + + // ask away + LLNotifications::instance().add(params); + } +} + + +// Sell confirmation clicked +bool LLFloaterAuction::onSellToAnyoneConfirmed(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (option == 0) + { + doSellToAnyone(); + } + + return false; +} + + + +// Reset all the values for the parcel in preparation for a sale +void LLFloaterAuction::doSellToAnyone() +{ + LLParcel* parcelp = mParcelp->getParcel(); + LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); + + if (parcelp + && region + && !mParcelUpdateCapUrl.empty()) + { + LLSD body; + std::string empty; + + // request new properties update from simulator + U32 message_flags = 0x01; + body["flags"] = ll_sd_from_U32(message_flags); + + // Set all the default parcel properties for auction + body["local_id"] = parcelp->getLocalID(); + + // Set 'for sale' flag + U32 parcel_flags = parcelp->getParcelFlags() | PF_FOR_SALE; + // Ensure objects not included + parcel_flags &= ~PF_FOR_SALE_OBJECTS; + body["parcel_flags"] = ll_sd_from_U32(parcel_flags); + + body["sale_price"] = parcelp->getArea(); // Sell for L$1 per square meter + body["auth_buyer_id"] = LLUUID::null; // To anyone + + LL_INFOS() << "Sending parcel update to sell to anyone for L$1 via capability to: " + << mParcelUpdateCapUrl << LL_ENDL; + + LLCoreHttpUtil::HttpCoroutineAdapter::messageHttpPost(mParcelUpdateCapUrl, body, + "Parcel set as sell to everyone.", + "Parcel sell to everyone failed."); + + // clean up floater, and get out + cleanupAndClose(); + } +} + + +///---------------------------------------------------------------------------- +/// Local function definitions +///---------------------------------------------------------------------------- + +void auction_tga_upload_done(const LLUUID& asset_id, void* user_data, S32 status, LLExtStat ext_status) // StoreAssetData callback (fixed) +{ + std::string* name = (std::string*)(user_data); + LL_INFOS() << "Upload of asset '" << *name << "' " << asset_id + << " returned " << status << LL_ENDL; + delete name; + + gViewerWindow->getWindow()->decBusyCount(); + + if (0 == status) + { + LLNotificationsUtil::add("UploadWebSnapshotDone"); + } + else + { + LLSD args; + args["REASON"] = std::string(LLAssetStorage::getErrorString(status)); + LLNotificationsUtil::add("UploadAuctionSnapshotFail", args); + } +} + +void auction_j2c_upload_done(const LLUUID& asset_id, void* user_data, S32 status, LLExtStat ext_status) // StoreAssetData callback (fixed) +{ + std::string* name = (std::string*)(user_data); + LL_INFOS() << "Upload of asset '" << *name << "' " << asset_id + << " returned " << status << LL_ENDL; + delete name; + + gViewerWindow->getWindow()->decBusyCount(); + + if (0 == status) + { + LLNotificationsUtil::add("UploadSnapshotDone"); + } + else + { + LLSD args; + args["REASON"] = std::string(LLAssetStorage::getErrorString(status)); + LLNotificationsUtil::add("UploadAuctionSnapshotFail", args); + } +} diff --git a/indra/newview/llfloaterauction.h b/indra/newview/llfloaterauction.h new file mode 100644 index 0000000000000000000000000000000000000000..c83a11ba8b9af0b2d782cb33b690a30f6bdb85fd --- /dev/null +++ b/indra/newview/llfloaterauction.h @@ -0,0 +1,86 @@ +/** + * @file llfloaterauction.h + * @author James Cook, Ian Wilkes + * @brief llfloaterauction class header file + * + * $LicenseInfo:firstyear=2004&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLFLOATERAUCTION_H +#define LL_LLFLOATERAUCTION_H + +#include "llfloater.h" +#include "lluuid.h" +#include "llpointer.h" +#include "llviewertexture.h" + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLFloaterAuction +// +// Class which holds the functionality to start auctions. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +class LLParcelSelection; +class LLParcel; +class LLViewerRegion; + +class LLFloaterAuction : public LLFloater +{ + friend class LLFloaterReg; +public: + // LLFloater interface + /*virtual*/ void onOpen(const LLSD& key); + /*virtual*/ void draw(); + +private: + + LLFloaterAuction(const LLSD& key); + ~LLFloaterAuction(); + + void initialize(); + + static void onClickSnapshot(void* data); + static void onClickResetParcel(void* data); + static void onClickSellToAnyone(void* data); // Sell to anyone clicked + bool onSellToAnyoneConfirmed(const LLSD& notification, const LLSD& response); // Sell confirmation clicked + static void onClickStartAuction(void* data); + + /*virtual*/ BOOL postBuild(); + + void doResetParcel(); + void doSellToAnyone(); + void clearParcelAccessList( LLParcel* parcel, LLViewerRegion* region, U32 list); + void cleanupAndClose(); + +private: + + LLTransactionID mTransactionID; + LLAssetID mImageID; + LLPointer<LLViewerTexture> mImage; + LLSafeHandle<LLParcelSelection> mParcelp; + S32 mParcelID; + LLHost mParcelHost; + + std::string mParcelUpdateCapUrl; // "ParcelPropertiesUpdate" capability +}; + + +#endif // LL_LLFLOATERAUCTION_H diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 596b04c31cb8b2dc9d73789792f0026aa0545ad1..88b3fb7b9681f7af464beabb007f05086decf15e 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -45,6 +45,7 @@ #include "llcombobox.h" #include "llfloaterreg.h" #include "llfloateravatarpicker.h" +#include "llfloaterauction.h" #include "llfloatergroups.h" #include "llfloaterscriptlimits.h" #include "llavataractions.h" @@ -78,7 +79,6 @@ #include "llpanelexperiencelisteditor.h" #include "llpanelexperiencepicker.h" #include "llexperiencecache.h" -#include "llweb.h" #include "llgroupactions.h" @@ -542,6 +542,7 @@ void LLPanelLandGeneral::refresh() mBtnDeedToGroup->setEnabled(FALSE); mBtnSetGroup->setEnabled(FALSE); + mBtnStartAuction->setEnabled(FALSE); mCheckDeedToGroup ->set(FALSE); mCheckDeedToGroup ->setEnabled(FALSE); @@ -639,6 +640,7 @@ void LLPanelLandGeneral::refresh() mTextClaimDate->setEnabled(FALSE); mTextGroup->setText(getString("none_text")); mTextGroup->setEnabled(FALSE); + mBtnStartAuction->setEnabled(FALSE); } else { @@ -690,6 +692,11 @@ void LLPanelLandGeneral::refresh() LLStringUtil::format (claim_date_str, substitution); mTextClaimDate->setText(claim_date_str); mTextClaimDate->setEnabled(is_leased); + + BOOL enable_auction = (gAgent.getGodLevel() >= GOD_LIAISON) + && (owner_id == GOVERNOR_LINDEN_ID) + && (parcel->getAuctionID() == 0); + mBtnStartAuction->setEnabled(enable_auction); } // Display options @@ -1017,8 +1024,20 @@ void LLPanelLandGeneral::onClickBuyPass(void* data) // static void LLPanelLandGeneral::onClickStartAuction(void* data) { - std::string auction_url = "https://places.[GRID]/auctions/"; - LLWeb::loadURLExternal(LLWeb::expandURLSubstitutions(auction_url, LLSD())); + LLPanelLandGeneral* panelp = (LLPanelLandGeneral*)data; + LLParcel* parcelp = panelp->mParcel->getParcel(); + if(parcelp) + { + if(parcelp->getForSale()) + { + LLNotificationsUtil::add("CannotStartAuctionAlreadyForSale"); + } + else + { + //LLFloaterAuction::showInstance(); + LLFloaterReg::showInstance("auction"); + } + } } // static diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 9d723bdd9de16ead341a7d253bf27a24eb67371b..4ce35643b13ba9136740a7b5842ba232f0c283e4 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -1096,16 +1096,15 @@ void LLFloaterPreference::onClickSetCache() std::string proposed_name(cur_name); - LLDirPicker& picker = LLDirPicker::instance(); - if (! picker.getDir(&proposed_name ) ) - { - return; //Canceled! - } + (new LLDirPickerThread(boost::bind(&LLFloaterPreference::changeCachePath, this, _1, _2), proposed_name))->getFile(); +} - std::string dir_name = picker.getDirName(); - if (!dir_name.empty() && dir_name != cur_name) +void LLFloaterPreference::changeCachePath(const std::vector<std::string>& filenames, std::string proposed_name) +{ + std::string dir_name = filenames[0]; + if (!dir_name.empty() && dir_name != proposed_name) { - std::string new_top_folder(gDirUtilp->getBaseFileName(dir_name)); + std::string new_top_folder(gDirUtilp->getBaseFileName(dir_name)); LLNotificationsUtil::add("CacheWillBeMoved"); gSavedSettings.setString("NewCacheLocation", dir_name); gSavedSettings.setString("NewCacheLocationTopFolder", new_top_folder); @@ -1744,25 +1743,21 @@ void LLFloaterPreference::onClickLogPath() std::string proposed_name(gSavedPerAccountSettings.getString("InstantMessageLogPath")); mPriorInstantMessageLogPath.clear(); - LLDirPicker& picker = LLDirPicker::instance(); - //Launches a directory picker and waits for feedback - if (!picker.getDir(&proposed_name ) ) - { - return; //Canceled! - } - //Gets the path from the directory picker - std::string dir_name = picker.getDirName(); + (new LLDirPickerThread(boost::bind(&LLFloaterPreference::changeLogPath, this, _1, _2), proposed_name))->getFile(); +} +void LLFloaterPreference::changeLogPath(const std::vector<std::string>& filenames, std::string proposed_name) +{ //Path changed - if(proposed_name != dir_name) + if (proposed_name != filenames[0]) { - gSavedPerAccountSettings.setString("InstantMessageLogPath", dir_name); + gSavedPerAccountSettings.setString("InstantMessageLogPath", filenames[0]); mPriorInstantMessageLogPath = proposed_name; - - // enable/disable 'Delete transcripts button - updateDeleteTranscriptsButton(); -} + + // enable/disable 'Delete transcripts button + updateDeleteTranscriptsButton(); + } } bool LLFloaterPreference::moveTranscriptsAndLog() diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index 0cd7bac20fc3f22047c8089ab98a3c4e46351538..8339a182965cc0e810520851f9b189af8255ee7d 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -133,6 +133,7 @@ class LLFloaterPreference : public LLFloater, public LLAvatarPropertiesObserver, void setCacheLocation(const LLStringExplicit& location); void onClickSetCache(); + void changeCachePath(const std::vector<std::string>& filenames, std::string proposed_name); void onClickResetCache(); void onClickSkin(LLUICtrl* ctrl,const LLSD& userdata); void onSelectSkin(); @@ -145,6 +146,7 @@ class LLFloaterPreference : public LLFloater, public LLAvatarPropertiesObserver, void resetAllIgnored(); void setAllIgnored(); void onClickLogPath(); + void changeLogPath(const std::vector<std::string>& filenames, std::string proposed_name); bool moveTranscriptsAndLog(); void enableHistory(); void setPersonalInfo(const std::string& visibility, bool im_via_email, bool is_verified_email); diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 156b2ba7b104c72275bad4bee1ec018b784a25bc..c08aaf3f501dbeb0bce2c19ae450a05c12377801 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -1309,17 +1309,15 @@ void LLFloaterSnapshot::saveTexture() previewp->saveTexture(); } -BOOL LLFloaterSnapshot::saveLocal() +void LLFloaterSnapshot::saveLocal(const snapshot_saved_signal_t::slot_type& success_cb, const snapshot_saved_signal_t::slot_type& failure_cb) { LL_DEBUGS() << "saveLocal" << LL_ENDL; LLSnapshotLivePreview* previewp = getPreviewView(); - if (!previewp) + llassert(previewp != NULL); + if (previewp) { - llassert(previewp != NULL); - return FALSE; + previewp->saveLocal(success_cb, failure_cb); } - - return previewp->saveLocal(); } void LLFloaterSnapshotBase::postSave() diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h index 698273ac904ebf6af7c7d5888e29980196c9807c..bcba14d63d107cec93b113a321fd57628724234b 100644 --- a/indra/newview/llfloatersnapshot.h +++ b/indra/newview/llfloatersnapshot.h @@ -156,7 +156,9 @@ class LLFloaterSnapshot : public LLFloaterSnapshotBase static LLFloaterSnapshot* getInstance(); static LLFloaterSnapshot* findInstance(); /*virtual*/ void saveTexture(); - BOOL saveLocal(); + + typedef boost::signals2::signal<void(void)> snapshot_saved_signal_t; + void saveLocal(const snapshot_saved_signal_t::slot_type& success_cb, const snapshot_saved_signal_t::slot_type& failure_cb); static void setAgentEmail(const std::string& email); BOOL isWaitingState(); diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp index 4b0b10dd5ab28e0d5a8cdc136bcd282bb171d404..a9b15fc8b6296aa507bfd2759a6475a628db8aa2 100644 --- a/indra/newview/llglsandbox.cpp +++ b/indra/newview/llglsandbox.cpp @@ -966,15 +966,6 @@ class ShaderBinder //----------------------------------------------------------------------------- F32 gpu_benchmark() { -#if LL_WINDOWS - if (gGLManager.mIsIntel - && std::string::npos != LLOSInfo::instance().getOSStringSimple().find("Microsoft Windows 8")) // or 8.1 - { // don't run benchmark on Windows 8/8.1 based PCs with Intel GPU (MAINT-8197) - LL_WARNS() << "Skipping gpu_benchmark() for Intel graphics on Windows 8." << LL_ENDL; - return -1.f; - } -#endif - if (!gGLManager.mHasShaderObjects || !gGLManager.mHasTimerQuery) { // don't bother benchmarking the fixed function // or venerable drivers which don't support accurate timing anyway diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index dc3b153da2564338c7e66ba2a143a55ad1a62215..a90a29a7310f07c5a73e94d8dad1286b16457dc8 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -1166,72 +1166,72 @@ void LLOutfitGallery::refreshTextures(const LLUUID& category_id) void LLOutfitGallery::uploadPhoto(LLUUID outfit_id) { - outfit_map_t::iterator outfit_it = mOutfitMap.find(outfit_id); - if (outfit_it == mOutfitMap.end() || outfit_it->first.isNull()) - { - return; - } + outfit_map_t::iterator outfit_it = mOutfitMap.find(outfit_id); + if (outfit_it == mOutfitMap.end() || outfit_it->first.isNull()) + { + return; + } + (new LLFilePickerReplyThread(boost::bind(&LLOutfitGallery::uploadOutfitImage, this, _1, outfit_id), LLFilePicker::FFLOAD_IMAGE, false))->getFile(); +} - LLFilePicker& picker = LLFilePicker::instance(); - if (picker.getOpenFile(LLFilePicker::FFLOAD_IMAGE)) +void LLOutfitGallery::uploadOutfitImage(const std::vector<std::string>& filenames, LLUUID outfit_id) +{ + std::string filename = filenames[0]; + LLLocalBitmap* unit = new LLLocalBitmap(filename); + if (unit->getValid()) { - std::string filename = picker.getFirstFile(); - LLLocalBitmap* unit = new LLLocalBitmap(filename); - if (unit->getValid()) + std::string exten = gDirUtilp->getExtension(filename); + U32 codec = LLImageBase::getCodecFromExtension(exten); + + LLImageDimensionsInfo image_info; + std::string image_load_error; + if (!image_info.load(filename, codec)) { - std::string exten = gDirUtilp->getExtension(filename); - U32 codec = LLImageBase::getCodecFromExtension(exten); + image_load_error = image_info.getLastError(); + } - LLImageDimensionsInfo image_info; - std::string image_load_error; - if (!image_info.load(filename, codec)) - { - image_load_error = image_info.getLastError(); - } + S32 max_width = MAX_OUTFIT_PHOTO_WIDTH; + S32 max_height = MAX_OUTFIT_PHOTO_HEIGHT; - S32 max_width = MAX_OUTFIT_PHOTO_WIDTH; - S32 max_height = MAX_OUTFIT_PHOTO_HEIGHT; + if ((image_info.getWidth() > max_width) || (image_info.getHeight() > max_height)) + { + LLStringUtil::format_map_t args; + args["WIDTH"] = llformat("%d", max_width); + args["HEIGHT"] = llformat("%d", max_height); - if ((image_info.getWidth() > max_width) || (image_info.getHeight() > max_height)) - { - LLStringUtil::format_map_t args; - args["WIDTH"] = llformat("%d", max_width); - args["HEIGHT"] = llformat("%d", max_height); + image_load_error = LLTrans::getString("outfit_photo_load_dimensions_error", args); + } - image_load_error = LLTrans::getString("outfit_photo_load_dimensions_error", args); - } + if (!image_load_error.empty()) + { + LLSD subst; + subst["REASON"] = image_load_error; + LLNotificationsUtil::add("OutfitPhotoLoadError", subst); + return; + } - if (!image_load_error.empty()) - { - LLSD subst; - subst["REASON"] = image_load_error; - LLNotificationsUtil::add("OutfitPhotoLoadError", subst); - return; - } + S32 expected_upload_cost = LLGlobalEconomy::getInstance()->getPriceUpload(); // kinda hack - assumes that unsubclassed LLFloaterNameDesc is only used for uploading chargeable assets, which it is right now (it's only used unsubclassed for the sound upload dialog, and THAT should be a subclass). + void *nruserdata = NULL; + nruserdata = (void *)&outfit_id; - S32 expected_upload_cost = LLGlobalEconomy::getInstance()->getPriceUpload(); // kinda hack - assumes that unsubclassed LLFloaterNameDesc is only used for uploading chargeable assets, which it is right now (it's only used unsubclassed for the sound upload dialog, and THAT should be a subclass). - void *nruserdata = NULL; - nruserdata = (void *)&outfit_id; - - LLViewerInventoryCategory *outfit_cat = gInventory.getCategory(outfit_id); - if (!outfit_cat) return; - updateSnapshotFolderObserver(); - checkRemovePhoto(outfit_id); - std::string upload_pending_name = outfit_id.asString(); - std::string upload_pending_desc = ""; - LLAssetStorage::LLStoreAssetCallback callback = NULL; - LLUUID photo_id = upload_new_resource(filename, // file - upload_pending_name, - upload_pending_desc, - 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, - LLFloaterPerms::getNextOwnerPerms("Uploads"), - LLFloaterPerms::getGroupPerms("Uploads"), - LLFloaterPerms::getEveryonePerms("Uploads"), - upload_pending_name, callback, expected_upload_cost, nruserdata); - mOutfitLinkPending = outfit_id; - } - delete unit; - } + LLViewerInventoryCategory *outfit_cat = gInventory.getCategory(outfit_id); + if (!outfit_cat) return; + updateSnapshotFolderObserver(); + checkRemovePhoto(outfit_id); + std::string upload_pending_name = outfit_id.asString(); + std::string upload_pending_desc = ""; + LLAssetStorage::LLStoreAssetCallback callback = NULL; + LLUUID photo_id = upload_new_resource(filename, // file + upload_pending_name, + upload_pending_desc, + 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, + LLFloaterPerms::getNextOwnerPerms("Uploads"), + LLFloaterPerms::getGroupPerms("Uploads"), + LLFloaterPerms::getEveryonePerms("Uploads"), + upload_pending_name, callback, expected_upload_cost, nruserdata); + mOutfitLinkPending = outfit_id; + } + delete unit; } void LLOutfitGallery::linkPhotoToOutfit(LLUUID photo_id, LLUUID outfit_id) diff --git a/indra/newview/lloutfitgallery.h b/indra/newview/lloutfitgallery.h index 383924a7d6f3746818a60f7a31f9a725b4b3f3a1..6dd8a6298fedb36ff320e1c02fd5f5d8642d4f25 100644 --- a/indra/newview/lloutfitgallery.h +++ b/indra/newview/lloutfitgallery.h @@ -130,6 +130,7 @@ class LLOutfitGallery : public LLOutfitListBase private: void loadPhotos(); void uploadPhoto(LLUUID outfit_id); + void uploadOutfitImage(const std::vector<std::string>& filenames, LLUUID outfit_id); void updateSnapshotFolderObserver(); LLUUID getPhotoAssetId(const LLUUID& outfit_id); LLUUID getDefaultPhoto(); diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index ef5ce155b1f23ec3742219fee73a8ff106bb5235..142dea83e2d2b9cf45760151223a2eec1057653f 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -204,6 +204,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, // change z sort of clickable text to be behind buttons sendChildToBack(getChildView("forgot_password_text")); + sendChildToBack(getChildView("sign_up_text")); LLComboBox* favorites_combo = getChild<LLComboBox>("start_location_combo"); updateLocationSelectorsVisibility(); // separate so that it can be called from preferences @@ -271,6 +272,9 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, LLTextBox* forgot_password_text = getChild<LLTextBox>("forgot_password_text"); forgot_password_text->setClickedCallback(onClickForgotPassword, NULL); + LLTextBox* sign_up_text = getChild<LLTextBox>("sign_up_text"); + sign_up_text->setClickedCallback(onClickSignUp, NULL); + // get the web browser control LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html"); web_browser->addObserver(this); @@ -921,6 +925,15 @@ void LLPanelLogin::onClickForgotPassword(void*) } } +//static +void LLPanelLogin::onClickSignUp(void*) +{ + if (sInstance) + { + LLWeb::loadURLExternal(sInstance->getString("sign_up_url")); + } +} + // static void LLPanelLogin::onPassKey(LLLineEditor* caller, void* user_data) { diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h index 852195b304b2914fd2d781669ae3b3bb85707a61..c633582d89886ea55e669e942d65222079a85fbd 100644 --- a/indra/newview/llpanellogin.h +++ b/indra/newview/llpanellogin.h @@ -99,6 +99,7 @@ class LLPanelLogin: static void onClickNewAccount(void*); static void onClickVersion(void*); static void onClickForgotPassword(void*); + static void onClickSignUp(void*); static void onPassKey(LLLineEditor* caller, void* user_data); static void updateServerCombo(); diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp index d8ef5b39adecf94e203f94f22fec83de2c83a54e..f3a2ed94085baa3d6aa31a5ce03052eeb5d81c04 100644 --- a/indra/newview/llpanelnearbymedia.cpp +++ b/indra/newview/llpanelnearbymedia.cpp @@ -1168,12 +1168,12 @@ void LLPanelNearByMedia::onClickSelectedMediaMute() F32 volume = impl->getVolume(); if(volume > 0.0) { - impl->setVolume(0.0); + impl->setMute(true); } else if (mVolumeSlider->getValueF32() == 0.0) { - impl->setVolume(1.0); - mVolumeSlider->setValue(1.0); + impl->setMute(false); + mVolumeSlider->setValue(impl->getVolume()); } else { diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index a7c53a70504da3710f88a172b67642d4a5560744..ef16427713692b7b9188ee91436405b14ff87260 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -100,6 +100,10 @@ U8 string_value_to_click_action(std::string p_value) { return CLICK_ACTION_ZOOM; } + if (p_value == "None") + { + return CLICK_ACTION_DISABLED; + } return CLICK_ACTION_TOUCH; } @@ -126,6 +130,9 @@ std::string click_action_to_string_value( U8 action) case CLICK_ACTION_ZOOM: return "Zoom"; break; + case CLICK_ACTION_DISABLED: + return "None"; + break; } } @@ -1203,23 +1210,34 @@ void LLPanelPermissions::setAllSaleInfo() LLSaleInfo new_sale_info(sale_type, price); LLSelectMgr::getInstance()->selectionSetObjectSaleInfo(new_sale_info); - struct f : public LLSelectedObjectFunctor + // Note: won't work right if a root and non-root are both single-selected (here and other places). + BOOL is_perm_modify = (LLSelectMgr::getInstance()->getSelection()->getFirstRootNode() + && LLSelectMgr::getInstance()->selectGetRootsModify()) + || LLSelectMgr::getInstance()->selectGetModify(); + BOOL is_nonpermanent_enforced = (LLSelectMgr::getInstance()->getSelection()->getFirstRootNode() + && LLSelectMgr::getInstance()->selectGetRootsNonPermanentEnforced()) + || LLSelectMgr::getInstance()->selectGetNonPermanentEnforced(); + + if (is_perm_modify && is_nonpermanent_enforced) { - virtual bool apply(LLViewerObject* object) + struct f : public LLSelectedObjectFunctor { - return object->getClickAction() == CLICK_ACTION_BUY - || object->getClickAction() == CLICK_ACTION_TOUCH; + virtual bool apply(LLViewerObject* object) + { + return object->getClickAction() == CLICK_ACTION_BUY + || object->getClickAction() == CLICK_ACTION_TOUCH; + } + } check_actions; + + // Selection should only contain objects that are of target + // action already or of action we are aiming to remove. + bool default_actions = LLSelectMgr::getInstance()->getSelection()->applyToObjects(&check_actions); + + if (default_actions && old_sale_info.isForSale() != new_sale_info.isForSale()) + { + U8 new_click_action = new_sale_info.isForSale() ? CLICK_ACTION_BUY : CLICK_ACTION_TOUCH; + LLSelectMgr::getInstance()->selectionSetClickAction(new_click_action); } - } check_actions; - - // Selection should only contain objects that are of target - // action already or of action we are aiming to remove. - bool default_actions = LLSelectMgr::getInstance()->getSelection()->applyToObjects(&check_actions); - - if (default_actions && old_sale_info.isForSale() != new_sale_info.isForSale()) - { - U8 new_click_action = new_sale_info.isForSale() ? CLICK_ACTION_BUY : CLICK_ACTION_TOUCH; - LLSelectMgr::getInstance()->selectionSetClickAction(new_click_action); } } diff --git a/indra/newview/llpanelsnapshotlocal.cpp b/indra/newview/llpanelsnapshotlocal.cpp index 77378f8092b8ddbd3510a76232ae4d0733bb31dd..e7fced92a7f8473783777976ada26735f9060aee 100644 --- a/indra/newview/llpanelsnapshotlocal.cpp +++ b/indra/newview/llpanelsnapshotlocal.cpp @@ -65,6 +65,9 @@ class LLPanelSnapshotLocal void onFormatComboCommit(LLUICtrl* ctrl); void onQualitySliderCommit(LLUICtrl* ctrl); void onSaveFlyoutCommit(LLUICtrl* ctrl); + + void onLocalSaved(); + void onLocalCanceled(); }; static LLPanelInjector<LLPanelSnapshotLocal> panel_class("llpanelsnapshotlocal"); @@ -164,19 +167,22 @@ void LLPanelSnapshotLocal::onSaveFlyoutCommit(LLUICtrl* ctrl) LLFloaterSnapshot* floater = LLFloaterSnapshot::getInstance(); floater->notify(LLSD().with("set-working", true)); - BOOL saved = floater->saveLocal(); - if (saved) - { - mSnapshotFloater->postSave(); - floater->notify(LLSD().with("set-finished", LLSD().with("ok", true).with("msg", "local"))); - } - else - { - cancel(); - floater->notify(LLSD().with("set-finished", LLSD().with("ok", false).with("msg", "local"))); - } + floater->saveLocal((boost::bind(&LLPanelSnapshotLocal::onLocalSaved, this)), (boost::bind(&LLPanelSnapshotLocal::onLocalCanceled, this))); +} + +void LLPanelSnapshotLocal::onLocalSaved() +{ + mSnapshotFloater->postSave(); + LLFloaterSnapshot::getInstance()->notify(LLSD().with("set-finished", LLSD().with("ok", true).with("msg", "local"))); +} + +void LLPanelSnapshotLocal::onLocalCanceled() +{ + cancel(); + LLFloaterSnapshot::getInstance()->notify(LLSD().with("set-finished", LLSD().with("ok", false).with("msg", "local"))); } + LLSnapshotModel::ESnapshotType LLPanelSnapshotLocal::getSnapshotType() { return LLSnapshotModel::SNAPSHOT_LOCAL; diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index d4eecaffce88d8a43b69c18ed31d7fe93efbc3c0..9431914ba376f205e8407b8d6726ec88c7e098b4 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1741,14 +1741,22 @@ void LLPreviewLSL::onLoadComplete( LLVFS *vfs, const LLUUID& asset_uuid, LLAsset buffer[file_length] = 0; preview->mScriptEd->setScriptText(LLStringExplicit(&buffer[0]), TRUE); preview->mScriptEd->mEditor->makePristine(); + + std::string script_name = DEFAULT_SCRIPT_NAME; LLInventoryItem* item = gInventory.getItem(*item_uuid); BOOL is_modifiable = FALSE; - if(item - && gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), - GP_OBJECT_MANIPULATE)) + if (item) { - is_modifiable = TRUE; + if (!item->getName().empty()) + { + script_name = item->getName(); + } + if (gAgent.allowOperation(PERM_MODIFY, item->getPermissions(), GP_OBJECT_MANIPULATE)) + { + is_modifiable = TRUE; + } } + preview->mScriptEd->setScriptName(script_name); preview->mScriptEd->setEnableEditing(is_modifiable); preview->mAssetStatus = PREVIEW_ASSET_LOADED; } diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp index f73722521af0ee8d43894fc7cc15f00583f2fc39..f03c7abc4d193bbf1d82df09f5b5836355c8b556 100644 --- a/indra/newview/llsidepaneltaskinfo.cpp +++ b/indra/newview/llsidepaneltaskinfo.cpp @@ -1130,6 +1130,8 @@ static U8 string_value_to_click_action(std::string p_value) return CLICK_ACTION_OPEN; if (p_value == "Zoom") return CLICK_ACTION_ZOOM; + if (p_value == "None") + return CLICK_ACTION_DISABLED; return CLICK_ACTION_TOUCH; } diff --git a/indra/newview/llsnapshotlivepreview.cpp b/indra/newview/llsnapshotlivepreview.cpp index ee8b2d79c0f6f536648c2727f1e5b93abcf2177f..d0cff1464b5eaed7bcf58295f644c3f4892f751a 100644 --- a/indra/newview/llsnapshotlivepreview.cpp +++ b/indra/newview/llsnapshotlivepreview.cpp @@ -70,6 +70,7 @@ S32 BORDER_WIDTH = 6; const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512 std::set<LLSnapshotLivePreview*> LLSnapshotLivePreview::sList; +LLPointer<LLImageFormatted> LLSnapshotLivePreview::sSaveLocalImage = NULL; LLSnapshotLivePreview::LLSnapshotLivePreview (const LLSnapshotLivePreview::Params& p) : LLView(p), @@ -131,6 +132,7 @@ LLSnapshotLivePreview::~LLSnapshotLivePreview() // gIdleCallbacks.deleteFunction( &LLSnapshotLivePreview::onIdle, (void*)this ); sList.erase(this); + sSaveLocalImage = NULL; } void LLSnapshotLivePreview::setMaxImageSize(S32 size) @@ -1065,53 +1067,19 @@ void LLSnapshotLivePreview::saveTexture(BOOL outfit_snapshot, std::string name) mDataSize = 0; } -BOOL LLSnapshotLivePreview::saveLocal() +void LLSnapshotLivePreview::saveLocal(const snapshot_saved_signal_t::slot_type& success_cb, const snapshot_saved_signal_t::slot_type& failure_cb) { // Update mFormattedImage if necessary getFormattedImage(); // Save the formatted image - BOOL success = saveLocal(mFormattedImage); - - if(success) - { - gViewerWindow->playSnapshotAnimAndSound(); - } - return success; + saveLocal(mFormattedImage, success_cb, failure_cb); } //Check if failed due to insufficient memory -BOOL LLSnapshotLivePreview::saveLocal(LLPointer<LLImageFormatted> mFormattedImage) +void LLSnapshotLivePreview::saveLocal(LLPointer<LLImageFormatted> image, const snapshot_saved_signal_t::slot_type& success_cb, const snapshot_saved_signal_t::slot_type& failure_cb) { - BOOL insufficient_memory; - BOOL success = gViewerWindow->saveImageNumbered(mFormattedImage, FALSE, insufficient_memory); + sSaveLocalImage = image; - if (insufficient_memory) - { - std::string lastSnapshotDir = LLViewerWindow::getLastSnapshotDir(); - -#ifdef LL_WINDOWS - boost::filesystem::path b_path(utf8str_to_utf16str(lastSnapshotDir)); -#else - boost::filesystem::path b_path(lastSnapshotDir); -#endif - boost::filesystem::space_info b_space = boost::filesystem::space(b_path); - if (b_space.free < mFormattedImage->getDataSize()) - { - LLSD args; - args["PATH"] = lastSnapshotDir; - - std::string needM_bytes_string; - LLResMgr::getInstance()->getIntegerString(needM_bytes_string, (mFormattedImage->getDataSize()) >> 10); - args["NEED_MEMORY"] = needM_bytes_string; - - std::string freeM_bytes_string; - LLResMgr::getInstance()->getIntegerString(freeM_bytes_string, (b_space.free) >> 10); - args["FREE_MEMORY"] = freeM_bytes_string; - - LLNotificationsUtil::add("SnapshotToComputerFailed", args); - return false; - } - } - return success; + gViewerWindow->saveImageNumbered(sSaveLocalImage, FALSE, success_cb, failure_cb); } diff --git a/indra/newview/llsnapshotlivepreview.h b/indra/newview/llsnapshotlivepreview.h index 4ea8d25a5ad0196edc5cb7c6df1dfd211c2fe86a..683cd016d8387d05ddd6652fc8f224bce1357f9b 100644 --- a/indra/newview/llsnapshotlivepreview.h +++ b/indra/newview/llsnapshotlivepreview.h @@ -40,8 +40,9 @@ class LLSnapshotLivePreview : public LLView { LOG_CLASS(LLSnapshotLivePreview); public: + typedef boost::signals2::signal<void(void)> snapshot_saved_signal_t; - static BOOL saveLocal(LLPointer<LLImageFormatted>); + static void saveLocal(LLPointer<LLImageFormatted> image, const snapshot_saved_signal_t::slot_type& success_cb = snapshot_saved_signal_t(), const snapshot_saved_signal_t::slot_type& failure_cb = snapshot_saved_signal_t()); struct Params : public LLInitParam::Block<Params, LLView::Params> { Params() @@ -101,7 +102,7 @@ class LLSnapshotLivePreview : public LLView std::string getFilter() const { return mFilterName; } void updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail = FALSE, F32 delay = 0.f); void saveTexture(BOOL outfit_snapshot = FALSE, std::string name = ""); - BOOL saveLocal(); + void saveLocal(const snapshot_saved_signal_t::slot_type& success_cb, const snapshot_saved_signal_t::slot_type& failure_cb); LLPointer<LLImageFormatted> getFormattedImage(); LLPointer<LLImageRaw> getEncodedImage(); @@ -170,7 +171,9 @@ class LLSnapshotLivePreview : public LLView LLQuaternion mCameraRot; BOOL mSnapshotActive; LLSnapshotModel::ESnapshotLayerType mSnapshotBufferType; - std::string mFilterName; + std::string mFilterName; + + static LLPointer<LLImageFormatted> sSaveLocalImage; public: static std::set<LLSnapshotLivePreview*> sList; diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 2a0d961952c49e14aad5ac53d906c030d9399cd8..633e0254789b32220fb1f5beb1f9c855d1149a14 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -615,7 +615,7 @@ bool LLTextureCacheRemoteWorker::doWrite() if(idx >= 0) { // write to the fast cache. - if(!mCache->writeToFastCache(idx, mRawImage, mRawDiscardLevel)) + if(!mCache->writeToFastCache(mID, idx, mRawImage, mRawDiscardLevel)) { LL_WARNS() << "writeToFastCache failed" << LL_ENDL; mDataSize = -1; // failed @@ -1998,8 +1998,48 @@ LLPointer<LLImageRaw> LLTextureCache::readFromFastCache(const LLUUID& id, S32& d return raw; } +#if LL_WINDOWS + +static const U32 STATUS_MSC_EXCEPTION = 0xE06D7363; // compiler specific + +U32 exception_dupe_filter(U32 code, struct _EXCEPTION_POINTERS *exception_infop) +{ + if (code == STATUS_MSC_EXCEPTION) + { + // C++ exception, go on + return EXCEPTION_CONTINUE_SEARCH; + } + else + { + // handle it + return EXCEPTION_EXECUTE_HANDLER; + } +} + +//due to unwinding +void dupe(LLPointer<LLImageRaw> &raw) +{ + raw = raw->duplicate(); +} + +void logExceptionDupplicate(LLPointer<LLImageRaw> &raw) +{ + __try + { + dupe(raw); + } + __except (exception_dupe_filter(GetExceptionCode(), GetExceptionInformation())) + { + // convert to C++ styled exception + char integer_string[32]; + sprintf(integer_string, "SEH, code: %lu\n", GetExceptionCode()); + throw std::exception(integer_string); + } +} +#endif + //return the fast cache location -bool LLTextureCache::writeToFastCache(S32 id, LLPointer<LLImageRaw> raw, S32 discardlevel) +bool LLTextureCache::writeToFastCache(LLUUID image_id, S32 id, LLPointer<LLImageRaw> raw, S32 discardlevel) { //rescale image if needed if (raw.isNull() || raw->isBufferInvalid() || !raw->getData()) @@ -2027,13 +2067,39 @@ bool LLTextureCache::writeToFastCache(S32 id, LLPointer<LLImageRaw> raw, S32 dis if(w * h *c > 0) //valid { //make a duplicate to keep the original raw image untouched. - raw = raw->scaled(w, h); + + try + { +#if LL_WINDOWS + // Temporary diagnostics for scale/duplicate crash + logExceptionDupplicate(raw); +#else + raw = raw->duplicate(); +#endif + } + catch (...) + { + removeFromCache(image_id); + LL_ERRS() << "Failed to cache image: " << image_id + << " local id: " << id + << " Exception: " << boost::current_exception_diagnostic_information() + << " Image new width: " << w + << " Image new height: " << h + << " Image new components: " << c + << " Image discard difference: " << i + << LL_ENDL; + + return false; + } + if (raw->isBufferInvalid()) { LL_WARNS() << "Invalid image duplicate buffer" << LL_ENDL; return false; } + raw->scale(w, h); + discardlevel += i ; } } diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h index 95f9afc2bc7fe3a5fd93e0564f68c1e00551f802..987b9375c04982132563524ccf670cf8686ba7b7 100644 --- a/indra/newview/lltexturecache.h +++ b/indra/newview/lltexturecache.h @@ -179,7 +179,7 @@ class LLTextureCache : public LLWorkerThread void openFastCache(bool first_time = false); void closeFastCache(bool forced = false); - bool writeToFastCache(S32 id, LLPointer<LLImageRaw> raw, S32 discardlevel); + bool writeToFastCache(LLUUID image_id, S32 cache_id, LLPointer<LLImageRaw> raw, S32 discardlevel); private: // Internal diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 9fb53dc9ab72576f7a63719e854fce2d087b8762..0f38cca56f20a5a3117da393491e4e59fc6ee78e 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -263,7 +263,7 @@ LLToolDragAndDrop::LLDragAndDropDictionary::LLDragAndDropDictionary() addEntry(DAD_CLOTHING, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dWearItem, &LLToolDragAndDrop::dad3dGiveInventory, &LLToolDragAndDrop::dad3dUpdateInventory, &LLToolDragAndDrop::dad3dNULL)); addEntry(DAD_OBJECT, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dRezAttachmentFromInv, &LLToolDragAndDrop::dad3dGiveInventoryObject, &LLToolDragAndDrop::dad3dRezObjectOnObject, &LLToolDragAndDrop::dad3dRezObjectOnLand)); addEntry(DAD_NOTECARD, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dGiveInventory, &LLToolDragAndDrop::dad3dUpdateInventory, &LLToolDragAndDrop::dad3dNULL)); - addEntry(DAD_CATEGORY, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dWearCategory, &LLToolDragAndDrop::dad3dGiveInventoryCategory, &LLToolDragAndDrop::dad3dUpdateInventoryCategory, &LLToolDragAndDrop::dad3dNULL)); + addEntry(DAD_CATEGORY, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dWearCategory, &LLToolDragAndDrop::dad3dGiveInventoryCategory, &LLToolDragAndDrop::dad3dRezCategoryOnObject, &LLToolDragAndDrop::dad3dNULL)); addEntry(DAD_ROOT_CATEGORY, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL)); addEntry(DAD_BODYPART, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dWearItem, &LLToolDragAndDrop::dad3dGiveInventory, &LLToolDragAndDrop::dad3dUpdateInventory, &LLToolDragAndDrop::dad3dNULL)); addEntry(DAD_ANIMATION, new DragAndDropEntry(&LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dNULL, &LLToolDragAndDrop::dad3dGiveInventory, &LLToolDragAndDrop::dad3dUpdateInventory, &LLToolDragAndDrop::dad3dNULL)); @@ -2335,6 +2335,21 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventoryCategory( return rv; } + +EAcceptance LLToolDragAndDrop::dad3dRezCategoryOnObject( + LLViewerObject* obj, S32 face, MASK mask, BOOL drop) +{ + if ((mask & MASK_CONTROL)) + { + return dad3dUpdateInventoryCategory(obj, face, mask, drop); + } + else + { + return ACCEPT_NO; + } +} + + BOOL LLToolDragAndDrop::dadUpdateInventoryCategory(LLViewerObject* obj, BOOL drop) { diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h index 2d99de224429c06ebc5ffdc33c5ba5fffa973eba..24a712029c9e30ed735f8e75335be0382a3a434e 100644 --- a/indra/newview/lltooldraganddrop.h +++ b/indra/newview/lltooldraganddrop.h @@ -162,6 +162,8 @@ class LLToolDragAndDrop : public LLTool, public LLSingleton<LLToolDragAndDrop> MASK mask, BOOL drop); EAcceptance dad3dRezObjectOnObject(LLViewerObject* obj, S32 face, MASK mask, BOOL drop); + EAcceptance dad3dRezCategoryOnObject(LLViewerObject* obj, S32 face, + MASK mask, BOOL drop); EAcceptance dad3dRezScript(LLViewerObject* obj, S32 face, MASK mask, BOOL drop); EAcceptance dad3dTextureObject(LLViewerObject* obj, S32 face, diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index f473000657f78b45d8aa5b3db90d51852164da59..6a8843cb4470ca38c41dfc973b1f326752bb0930 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -300,6 +300,8 @@ BOOL LLToolPie::handleLeftClickPick() } } return TRUE; + case CLICK_ACTION_DISABLED: + return TRUE; default: // nothing break; @@ -463,6 +465,8 @@ ECursorType LLToolPie::cursorFromObject(LLViewerObject* object) case CLICK_ACTION_OPEN_MEDIA: cursor = cursor_from_parcel_media(click_action); break; + case CLICK_ACTION_DISABLED: + break; default: break; } @@ -528,6 +532,8 @@ void LLToolPie::selectionPropertiesReceived() case CLICK_ACTION_OPEN: LLFloaterReg::showInstance("openobject"); break; + case CLICK_ACTION_DISABLED: + break; default: break; } diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 55317bdaf59b96ae7ff39830282bcc9df7f9c37f..0ebacddd9b175f98017d7bc58cc51b158e41f21c 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -34,6 +34,7 @@ #include "llcompilequeue.h" #include "llfasttimerview.h" #include "llfloaterabout.h" +#include "llfloaterauction.h" #include "llfloaterautoreplacesettings.h" #include "llfloateravatar.h" #include "llfloateravatarpicker.h" @@ -193,6 +194,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("about_land", "floater_about_land.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLand>); LLFloaterReg::add("appearance", "floater_my_appearance.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>); LLFloaterReg::add("associate_listing", "floater_associate_listing.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAssociateListing>); + LLFloaterReg::add("auction", "floater_auction.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAuction>); LLFloaterReg::add("avatar", "floater_avatar.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatar>); LLFloaterReg::add("avatar_picker", "floater_avatar_picker.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarPicker>); LLFloaterReg::add("avatar_render_settings", "floater_avatar_render_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarRenderSettings>); diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 4334cbfda33f2f12cc5b9c5b4f59f715d91d79b5..22a21c9ca3c60e3d0144804c93c3cf15bdc31daa 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -1555,6 +1555,7 @@ LLViewerMediaImpl::LLViewerMediaImpl( const LLUUID& texture_id, mNavigateServerRequest(false), mMediaSourceFailed(false), mRequestedVolume(1.0f), + mPreviousVolume(1.0f), mIsMuted(false), mNeedsMuteCheck(false), mPreviousMediaState(MEDIA_NONE), @@ -2081,6 +2082,20 @@ void LLViewerMediaImpl::setVolume(F32 volume) updateVolume(); } +////////////////////////////////////////////////////////////////////////////////////////// +void LLViewerMediaImpl::setMute(bool mute) +{ + if (mute) + { + mPreviousVolume = mRequestedVolume; + setVolume(0.0); + } + else + { + setVolume(mPreviousVolume); + } +} + ////////////////////////////////////////////////////////////////////////////////////////// void LLViewerMediaImpl::updateVolume() { diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index c52960dfcfe85e8e58625f6e905d7c52e61ff572..e2e758befb6df2a59946f55cae1671100075c6b3 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -216,6 +216,7 @@ class LLViewerMediaImpl void skipBack(F32 step_scale); void skipForward(F32 step_scale); void setVolume(F32 volume); + void setMute(bool mute); void updateVolume(); F32 getVolume(); void focus(bool focus); @@ -448,6 +449,7 @@ class LLViewerMediaImpl bool mNavigateServerRequest; bool mMediaSourceFailed; F32 mRequestedVolume; + F32 mPreviousVolume; bool mIsMuted; bool mNeedsMuteCheck; int mPreviousMediaState; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 0eebf2051c6ab622459d242ad023c88b6a133810..f7250ffb66b7264bd5ba1fcc628b3fad94f5a7c5 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -3649,9 +3649,16 @@ class LLSelfSitDown : public view_listener_t } }; + + +bool show_sitdown_self() +{ + return isAgentAvatarValid() && !gAgentAvatarp->isSitting(); +} + bool enable_sitdown_self() { - return isAgentAvatarValid() && !gAgentAvatarp->isSitting() && !gAgentAvatarp->isEditingAppearance() && !gAgent.getFlying(); + return show_sitdown_self() && !gAgentAvatarp->isEditingAppearance() && !gAgent.getFlying(); } class LLCheckPanelPeopleTab : public view_listener_t @@ -9068,7 +9075,8 @@ void initialize_menus() view_listener_t::addMenu(new LLSelfStandUp(), "Self.StandUp"); enable.add("Self.EnableStandUp", boost::bind(&enable_standup_self)); view_listener_t::addMenu(new LLSelfSitDown(), "Self.SitDown"); - enable.add("Self.EnableSitDown", boost::bind(&enable_sitdown_self)); + enable.add("Self.EnableSitDown", boost::bind(&enable_sitdown_self)); + enable.add("Self.ShowSitDown", boost::bind(&show_sitdown_self)); view_listener_t::addMenu(new LLSelfRemoveAllAttachments(), "Self.RemoveAllAttachments"); view_listener_t::addMenu(new LLSelfEnableRemoveAllAttachments(), "Self.EnableRemoveAllAttachments"); diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index dc05d98228e76809c98869c67cd6997a190f1c4a..cf1c442ce970c9deef8bda0535d332da0afc978d 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -203,38 +203,55 @@ void LLFilePickerThread::clearDead() } } -LLFilePickerReplyThread::LLFilePickerReplyThread(const file_picked_signal_t::slot_type& cb, LLFilePicker::ELoadFilter filter, bool get_multiple) +LLFilePickerReplyThread::LLFilePickerReplyThread(const file_picked_signal_t::slot_type& cb, LLFilePicker::ELoadFilter filter, bool get_multiple, const file_picked_signal_t::slot_type& failure_cb) : LLFilePickerThread(filter, get_multiple), mLoadFilter(filter), mSaveFilter(LLFilePicker::FFSAVE_ALL), - mFilePickedSignal(NULL) + mFilePickedSignal(NULL), + mFailureSignal(NULL) { mFilePickedSignal = new file_picked_signal_t(); mFilePickedSignal->connect(cb); + + mFailureSignal = new file_picked_signal_t(); + mFailureSignal->connect(failure_cb); } -LLFilePickerReplyThread::LLFilePickerReplyThread(const file_picked_signal_t::slot_type& cb, LLFilePicker::ESaveFilter filter, const std::string &proposed_name) +LLFilePickerReplyThread::LLFilePickerReplyThread(const file_picked_signal_t::slot_type& cb, LLFilePicker::ESaveFilter filter, const std::string &proposed_name, const file_picked_signal_t::slot_type& failure_cb) : LLFilePickerThread(filter, proposed_name), mLoadFilter(LLFilePicker::FFLOAD_ALL), mSaveFilter(filter), - mFilePickedSignal(NULL) + mFilePickedSignal(NULL), + mFailureSignal(NULL) { mFilePickedSignal = new file_picked_signal_t(); mFilePickedSignal->connect(cb); + + mFailureSignal = new file_picked_signal_t(); + mFailureSignal->connect(failure_cb); } LLFilePickerReplyThread::~LLFilePickerReplyThread() { delete mFilePickedSignal; + delete mFailureSignal; } void LLFilePickerReplyThread::notify(const std::vector<std::string>& filenames) { - if (filenames.empty()) return; - - if (mFilePickedSignal) + if (filenames.empty()) + { + if (mFailureSignal) + { + (*mFailureSignal)(filenames, mLoadFilter, mSaveFilter); + } + } + else { - (*mFilePickedSignal)(filenames, mLoadFilter, mSaveFilter); + if (mFilePickedSignal) + { + (*mFilePickedSignal)(filenames, mLoadFilter, mSaveFilter); + } } } @@ -592,7 +609,6 @@ class LLFileTakeSnapshotToDisk : public view_listener_t gSavedSettings.getBOOL("RenderUIInSnapshot"), FALSE)) { - gViewerWindow->playSnapshotAnimAndSound(); LLPointer<LLImageFormatted> formatted; LLSnapshotModel::ESnapshotFormat fmt = (LLSnapshotModel::ESnapshotFormat) gSavedSettings.getS32("SnapshotFormat"); switch (fmt) diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h index 15bbdd1e2d3fcf46e52ca496ba9e116d9add15e1..35f86f606b42673bab61c88940e003fdd90a66ed 100644 --- a/indra/newview/llviewermenufile.h +++ b/indra/newview/llviewermenufile.h @@ -113,8 +113,8 @@ class LLFilePickerReplyThread : public LLFilePickerThread typedef boost::signals2::signal<void(const std::vector<std::string>& filenames, LLFilePicker::ELoadFilter load_filter, LLFilePicker::ESaveFilter save_filter)> file_picked_signal_t; - LLFilePickerReplyThread(const file_picked_signal_t::slot_type& cb, LLFilePicker::ELoadFilter filter, bool get_multiple); - LLFilePickerReplyThread(const file_picked_signal_t::slot_type& cb, LLFilePicker::ESaveFilter filter, const std::string &proposed_name); + LLFilePickerReplyThread(const file_picked_signal_t::slot_type& cb, LLFilePicker::ELoadFilter filter, bool get_multiple, const file_picked_signal_t::slot_type& failure_cb = file_picked_signal_t()); + LLFilePickerReplyThread(const file_picked_signal_t::slot_type& cb, LLFilePicker::ESaveFilter filter, const std::string &proposed_name, const file_picked_signal_t::slot_type& failure_cb = file_picked_signal_t()); ~LLFilePickerReplyThread(); virtual void notify(const std::vector<std::string>& filenames); @@ -123,6 +123,7 @@ class LLFilePickerReplyThread : public LLFilePickerThread LLFilePicker::ELoadFilter mLoadFilter; LLFilePicker::ESaveFilter mSaveFilter; file_picked_signal_t* mFilePickedSignal; + file_picked_signal_t* mFailureSignal; }; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 0f326efe0929f8043358ef59530e67584499cef0..850d455c3659366fdd61a44a1701936b9e29c869 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -153,6 +153,98 @@ const U8 AU_FLAGS_NONE = 0x00; const U8 AU_FLAGS_HIDETITLE = 0x01; const U8 AU_FLAGS_CLIENT_AUTOPILOT = 0x02; +void accept_friendship_coro(std::string url, LLSD notification) +{ + LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID); + LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t + httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("friendshipResponceErrorProcessing", httpPolicy)); + LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest); + if (url.empty()) + { + LL_WARNS("Friendship") << "Empty capability!" << LL_ENDL; + return; + } + + LLSD payload = notification["payload"]; + url += "?from=" + payload["from_id"].asString(); + url += "&agent_name=\"" + LLURI::escape(gAgentAvatarp->getFullname()) + "\""; + + LLSD result = httpAdapter->getAndSuspend(httpRequest, url); + + LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS]; + LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults); + + if (!status) + { + LL_WARNS("Friendship") << "HTTP status, " << status.toTerseString() << + ". friendship offer accept failed." << LL_ENDL; + } + else + { + if (!result.has("success") || result["success"].asBoolean() == false) + { + LL_WARNS("Friendship") << "Server failed to process accepted friendship. " << httpResults << LL_ENDL; + } + else + { + LL_DEBUGS("Friendship") << "Adding friend to list" << httpResults << LL_ENDL; + // add friend to recent people list + LLRecentPeople::instance().add(payload["from_id"]); + + LLNotificationsUtil::add("FriendshipAcceptedByMe", + notification["substitutions"], payload); + } + } +} + +void decline_friendship_coro(std::string url, LLSD notification, S32 option) +{ + LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID); + LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t + httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("friendshipResponceErrorProcessing", httpPolicy)); + LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest); + if (url.empty()) + { + LL_WARNS("Friendship") << "Empty capability!" << LL_ENDL; + return; + } + + LLSD payload = notification["payload"]; + url += "?from=" + payload["from_id"].asString(); + + LLSD result = httpAdapter->getAndSuspend(httpRequest, url); + + LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS]; + LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults); + + if (!status) + { + LL_WARNS("Friendship") << "HTTP status, " << status.toTerseString() << + ". friendship offer decline failed." << LL_ENDL; + } + else + { + if (!result.has("success") || result["success"].asBoolean() == false) + { + LL_WARNS("Friendship") << "Server failed to process declined friendship. " << httpResults << LL_ENDL; + } + else + { + LL_DEBUGS("Friendship") << "Friendship declined" << httpResults << LL_ENDL; + if (option == 1) + { + LLNotificationsUtil::add("FriendshipDeclinedByMe", + notification["substitutions"], payload); + } + else if (option == 2) + { + // start IM session + LLAvatarActions::startIM(payload["from_id"].asUUID()); + } + } + } +} + bool friendship_offer_callback(const LLSD& notification, const LLSD& response) { S32 option = LLNotificationsUtil::getSelectedOption(notification, response); @@ -163,9 +255,6 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response) // this will be skipped if the user offering friendship is blocked if (notification_ptr) { - // add friend to recent people list - LLRecentPeople::instance().add(payload["from_id"]); - switch(option) { case 0: @@ -176,46 +265,79 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response) const LLUUID fid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); // This will also trigger an onlinenotification if the user is online - msg->newMessageFast(_PREHASH_AcceptFriendship); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->nextBlockFast(_PREHASH_TransactionBlock); - msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]); - msg->nextBlockFast(_PREHASH_FolderData); - msg->addUUIDFast(_PREHASH_FolderID, fid); - msg->sendReliable(LLHost(payload["sender"].asString())); - - LLSD payload = notification["payload"]; - LLNotificationsUtil::add("FriendshipAcceptedByMe", - notification["substitutions"], payload); + std::string url = gAgent.getRegionCapability("AcceptFriendship"); + LL_DEBUGS("Friendship") << "Cap string: " << url << LL_ENDL; + if (!url.empty() && payload.has("online") && payload["online"].asBoolean() == false) + { + LL_DEBUGS("Friendship") << "Accepting friendship via capability" << LL_ENDL; + LLCoros::instance().launch("LLMessageSystem::acceptFriendshipOffer", + boost::bind(accept_friendship_coro, url, notification)); + } + else if (payload.has("session_id") && payload["session_id"].asUUID().notNull()) + { + LL_DEBUGS("Friendship") << "Accepting friendship via viewer message" << LL_ENDL; + msg->newMessageFast(_PREHASH_AcceptFriendship); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_TransactionBlock); + msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]); + msg->nextBlockFast(_PREHASH_FolderData); + msg->addUUIDFast(_PREHASH_FolderID, fid); + msg->sendReliable(LLHost(payload["sender"].asString())); + + // add friend to recent people list + LLRecentPeople::instance().add(payload["from_id"]); + LLNotificationsUtil::add("FriendshipAcceptedByMe", + notification["substitutions"], payload); + } + else + { + LL_WARNS("Friendship") << "Failed to accept friendship offer, neither capability nor transaction id are accessible" << LL_ENDL; + } break; } case 1: // Decline - { - LLSD payload = notification["payload"]; - LLNotificationsUtil::add("FriendshipDeclinedByMe", - notification["substitutions"], payload); - } // fall-through case 2: // Send IM - decline and start IM session { // decline // We no longer notify other viewers, but we DO still send - // the rejection to the simulator to delete the pending userop. - msg->newMessageFast(_PREHASH_DeclineFriendship); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->nextBlockFast(_PREHASH_TransactionBlock); - msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]); - msg->sendReliable(LLHost(payload["sender"].asString())); - - // start IM session - if(2 == option) - { - LLAvatarActions::startIM(payload["from_id"].asUUID()); - } + // the rejection to the simulator to delete the pending userop. + std::string url = gAgent.getRegionCapability("DeclineFriendship"); + LL_DEBUGS("Friendship") << "Cap string: " << url << LL_ENDL; + if (!url.empty() && payload.has("online") && payload["online"].asBoolean() == false) + { + LL_DEBUGS("Friendship") << "Declining friendship via capability" << LL_ENDL; + LLCoros::instance().launch("LLMessageSystem::declineFriendshipOffer", + boost::bind(decline_friendship_coro, url, notification, option)); + } + else if (payload.has("session_id") && payload["session_id"].asUUID().notNull()) + { + LL_DEBUGS("Friendship") << "Declining friendship via viewer message" << LL_ENDL; + msg->newMessageFast(_PREHASH_DeclineFriendship); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_TransactionBlock); + msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]); + msg->sendReliable(LLHost(payload["sender"].asString())); + + if (option == 1) // due to fall-through + { + LLNotificationsUtil::add("FriendshipDeclinedByMe", + notification["substitutions"], payload); + } + else if (option == 2) + { + // start IM session + LLAvatarActions::startIM(payload["from_id"].asUUID()); + } + } + else + { + LL_WARNS("Friendship") << "Failed to decline friendship offer, neither capability nor transaction id are accessible" << LL_ENDL; + } } default: // close button probably, possibly timed out @@ -3258,6 +3380,110 @@ void send_agent_update(BOOL force_send, BOOL send_reliable) } +// sounds can arrive before objects, store them for a short time +// Note: this is a workaround for MAINT-4743, real fix would be to make +// server send sound along with object update that creates (rezes) the object +class PostponedSoundData +{ +public: + PostponedSoundData() : + mExpirationTime(0) + {} + PostponedSoundData(const LLUUID &object_id, const LLUUID &sound_id, const LLUUID& owner_id, const F32 gain, const U8 flags); + bool hasExpired() { return LLFrameTimer::getTotalSeconds() > mExpirationTime; } + + LLUUID mObjectId; + LLUUID mSoundId; + LLUUID mOwnerId; + F32 mGain; + U8 mFlags; + static const F64 MAXIMUM_PLAY_DELAY; + +private: + F64 mExpirationTime; //seconds since epoch +}; +const F64 PostponedSoundData::MAXIMUM_PLAY_DELAY = 15.0; +static F64 postponed_sounds_update_expiration = 0.0; +static std::map<LLUUID, PostponedSoundData> postponed_sounds; + +void set_attached_sound(LLViewerObject *objectp, const LLUUID &object_id, const LLUUID &sound_id, const LLUUID& owner_id, const F32 gain, const U8 flags) +{ + if (LLMuteList::getInstance()->isMuted(object_id)) return; + + if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return; + + // Don't play sounds from a region with maturity above current agent maturity + LLVector3d pos = objectp->getPositionGlobal(); + if (!gAgent.canAccessMaturityAtGlobal(pos)) + { + return; + } + + objectp->setAttachedSound(sound_id, owner_id, gain, flags); +} + +PostponedSoundData::PostponedSoundData(const LLUUID &object_id, const LLUUID &sound_id, const LLUUID& owner_id, const F32 gain, const U8 flags) + : + mObjectId(object_id), + mSoundId(sound_id), + mOwnerId(owner_id), + mGain(gain), + mFlags(flags), + mExpirationTime(LLFrameTimer::getTotalSeconds() + MAXIMUM_PLAY_DELAY) +{ +} + +// static +void update_attached_sounds() +{ + if (postponed_sounds.empty()) + { + return; + } + + std::map<LLUUID, PostponedSoundData>::iterator iter = postponed_sounds.begin(); + std::map<LLUUID, PostponedSoundData>::iterator end = postponed_sounds.end(); + while (iter != end) + { + std::map<LLUUID, PostponedSoundData>::iterator cur_iter = iter++; + PostponedSoundData* data = &cur_iter->second; + if (data->hasExpired()) + { + postponed_sounds.erase(cur_iter); + } + else + { + LLViewerObject *objectp = gObjectList.findObject(data->mObjectId); + if (objectp) + { + set_attached_sound(objectp, data->mObjectId, data->mSoundId, data->mOwnerId, data->mGain, data->mFlags); + postponed_sounds.erase(cur_iter); + } + } + } + postponed_sounds_update_expiration = LLFrameTimer::getTotalSeconds() + 2 * PostponedSoundData::MAXIMUM_PLAY_DELAY; +} + +//static +void clear_expired_postponed_sounds() +{ + if (postponed_sounds_update_expiration > LLFrameTimer::getTotalSeconds()) + { + return; + } + std::map<LLUUID, PostponedSoundData>::iterator iter = postponed_sounds.begin(); + std::map<LLUUID, PostponedSoundData>::iterator end = postponed_sounds.end(); + while (iter != end) + { + std::map<LLUUID, PostponedSoundData>::iterator cur_iter = iter++; + PostponedSoundData* data = &cur_iter->second; + if (data->hasExpired()) + { + postponed_sounds.erase(cur_iter); + } + } + postponed_sounds_update_expiration = LLFrameTimer::getTotalSeconds() + 2 * PostponedSoundData::MAXIMUM_PLAY_DELAY; +} // *TODO: Remove this dependency, or figure out a better way to handle // this hack. @@ -3276,7 +3502,12 @@ void process_object_update(LLMessageSystem *mesgsys, void **user_data) } // Update the object... + S32 old_num_objects = gObjectList.mNumNewObjects; gObjectList.processObjectUpdate(mesgsys, user_data, OUT_FULL); + if (old_num_objects != gObjectList.mNumNewObjects) + { + update_attached_sounds(); + } } void process_compressed_object_update(LLMessageSystem *mesgsys, void **user_data) @@ -3292,7 +3523,12 @@ void process_compressed_object_update(LLMessageSystem *mesgsys, void **user_data } // Update the object... + S32 old_num_objects = gObjectList.mNumNewObjects; gObjectList.processCompressedObjectUpdate(mesgsys, user_data, OUT_FULL_COMPRESSED); + if (old_num_objects != gObjectList.mNumNewObjects) + { + update_attached_sounds(); + } } void process_cached_object_update(LLMessageSystem *mesgsys, void **user_data) @@ -3323,7 +3559,12 @@ void process_terse_object_update_improved(LLMessageSystem *mesgsys, void **user_ gObjectData += (U32Bytes)mesgsys->getReceiveSize(); } + S32 old_num_objects = gObjectList.mNumNewObjects; gObjectList.processCompressedObjectUpdate(mesgsys, user_data, OUT_TERSE_IMPROVED); + if (old_num_objects != gObjectList.mNumNewObjects) + { + update_attached_sounds(); + } } static LLTrace::BlockTimerStatHandle FTM_PROCESS_OBJECTS("Process Kill Objects"); @@ -3545,28 +3786,27 @@ void process_attached_sound(LLMessageSystem *msg, void **user_data) msg->getU8Fast(_PREHASH_DataBlock, _PREHASH_Flags, flags); LLViewerObject *objectp = gObjectList.findObject(object_id); - if (!objectp) + if (objectp) { - // we don't know about this object, just bail - return; + set_attached_sound(objectp, object_id, sound_id, owner_id, gain, flags); } - - if (LLMuteList::getInstance()->isMuted(object_id)) return; - - if (LLMuteList::getInstance()->isMuted(owner_id, LLMute::flagObjectSounds)) return; - - - // Don't play sounds from a region with maturity above current agent maturity - LLVector3d pos = objectp->getPositionGlobal(); - if( !gAgent.canAccessMaturityAtGlobal(pos) ) + else if (sound_id.notNull()) { - return; + // we don't know about this object yet, probably it has yet to arrive + // std::map for dupplicate prevention. + postponed_sounds[object_id] = (PostponedSoundData(object_id, sound_id, owner_id, gain, flags)); + clear_expired_postponed_sounds(); + } + else + { + std::map<LLUUID, PostponedSoundData>::iterator iter = postponed_sounds.find(object_id); + if (iter != postponed_sounds.end()) + { + postponed_sounds.erase(iter); + } } - - objectp->setAttachedSound(sound_id, owner_id, gain, flags); } - void process_attached_sound_gain_change(LLMessageSystem *mesgsys, void **user_data) { F32 gain = 0; diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp index 6937d064f982bfa5ce88a0e5b7ed5dd6bd639c8d..9f6d606a225ac8d02d0e047466bf3877b15ac3f1 100644 --- a/indra/newview/llviewernetwork.cpp +++ b/indra/newview/llviewernetwork.cpp @@ -63,7 +63,7 @@ const std::string GRID_LOGIN_IDENTIFIER_TYPES = "login_identifier_types"; const std::string GRID_SLURL_BASE = "slurl_base"; const std::string GRID_APP_SLURL_BASE = "app_slurl_base"; -const std::string DEFAULT_LOGIN_PAGE = "http://viewer-login.agni.lindenlab.com/"; +const std::string DEFAULT_LOGIN_PAGE = "https://viewer-splash.secondlife.com/"; const std::string MAIN_GRID_LOGIN_URI = "https://login.agni.lindenlab.com/cgi-bin/login.cgi"; diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index feaafad2e12810c1814ac07fc8646fbba2fb42c0..b759c2a3ab4ae2070a78158c106580cf7ce873f4 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1877,7 +1877,7 @@ void LLViewerRegion::updateNetStats() mLastPacketsLost = mPacketsLost; mPacketsIn = cdp->getPacketsIn(); - mBitsIn = cdp->getBytesIn(); + mBitsIn = 8 * cdp->getBytesIn(); mPacketsOut = cdp->getPacketsOut(); mPacketsLost = cdp->getPacketsLost(); mPingDelay = cdp->getPingDelay(); @@ -2817,6 +2817,7 @@ void LLViewerRegion::unpackRegionHandshake() void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) { capabilityNames.append("AbuseCategories"); + //capabilityNames.append("AcceptFriendship"); capabilityNames.append("AgentPreferences"); capabilityNames.append("AgentState"); capabilityNames.append("AttachmentResources"); @@ -2826,6 +2827,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("ChatSessionRequest"); capabilityNames.append("CopyInventoryFromNotecard"); capabilityNames.append("CreateInventoryCategory"); + //capabilityNames.append("DeclineFriendship"); capabilityNames.append("DispatchRegionInfo"); capabilityNames.append("DirectDelivery"); capabilityNames.append("EnvironmentSettings"); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index f394d6913fb1c6f309f4d0c1d347d5af2ae388e7..cef19c9c2d6d5513d8916fbb1fc295d568904baf 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -193,6 +193,7 @@ #include "llviewerdisplay.h" #include "llspatialpartition.h" #include "llviewerjoystick.h" +#include "llviewermenufile.h" // LLFilePickerReplyThread #include "llviewernetwork.h" #include "llpostprocess.h" #include "llfloaterimnearbychat.h" @@ -4365,77 +4366,110 @@ BOOL LLViewerWindow::mousePointOnLandGlobal(const S32 x, const S32 y, LLVector3d } // Saves an image to the harddrive as "SnapshotX" where X >= 1. -BOOL LLViewerWindow::saveImageNumbered(LLImageFormatted *image, BOOL force_picker, BOOL& insufficient_memory) +void LLViewerWindow::saveImageNumbered(LLImageFormatted *image, BOOL force_picker, const snapshot_saved_signal_t::slot_type& success_cb, const snapshot_saved_signal_t::slot_type& failure_cb) { - insufficient_memory = FALSE; - if (!image) { LL_WARNS() << "No image to save" << LL_ENDL; - return FALSE; + return; } - - LLFilePicker::ESaveFilter pick_type; std::string extension("." + image->getExtension()); - if (extension == ".j2c") - pick_type = LLFilePicker::FFSAVE_J2C; - else if (extension == ".bmp") - pick_type = LLFilePicker::FFSAVE_BMP; - else if (extension == ".jpg") - pick_type = LLFilePicker::FFSAVE_JPEG; - else if (extension == ".png") - pick_type = LLFilePicker::FFSAVE_PNG; - else if (extension == ".tga") - pick_type = LLFilePicker::FFSAVE_TGA; - else - pick_type = LLFilePicker::FFSAVE_ALL; // ??? - - BOOL is_snapshot_name_loc_set = isSnapshotLocSet(); - + LLImageFormatted* formatted_image = image; // Get a base file location if needed. if (force_picker || !isSnapshotLocSet()) { - std::string proposed_name( sSnapshotBaseName ); + std::string proposed_name(sSnapshotBaseName); // getSaveFile will append an appropriate extension to the proposed name, based on the ESaveFilter constant passed in. + LLFilePicker::ESaveFilter pick_type; + + if (extension == ".j2c") + pick_type = LLFilePicker::FFSAVE_J2C; + else if (extension == ".bmp") + pick_type = LLFilePicker::FFSAVE_BMP; + else if (extension == ".jpg") + pick_type = LLFilePicker::FFSAVE_JPEG; + else if (extension == ".png") + pick_type = LLFilePicker::FFSAVE_PNG; + else if (extension == ".tga") + pick_type = LLFilePicker::FFSAVE_TGA; + else + pick_type = LLFilePicker::FFSAVE_ALL; - // pick a directory in which to save - LLFilePicker& picker = LLFilePicker::instance(); - if (!picker.getSaveFile(pick_type, proposed_name)) - { - // Clicked cancel - return FALSE; - } + (new LLFilePickerReplyThread(boost::bind(&LLViewerWindow::onDirectorySelected, this, _1, formatted_image, success_cb, failure_cb), pick_type, proposed_name, + boost::bind(&LLViewerWindow::onSelectionFailure, this, failure_cb)))->getFile(); + } + else + { + saveImageLocal(formatted_image, success_cb, failure_cb); + } +} + +void LLViewerWindow::onDirectorySelected(const std::vector<std::string>& filenames, LLImageFormatted *image, const snapshot_saved_signal_t::slot_type& success_cb, const snapshot_saved_signal_t::slot_type& failure_cb) +{ + // Copy the directory + file name + std::string filepath = filenames[0]; - // Copy the directory + file name - std::string filepath = picker.getFirstFile(); + gSavedPerAccountSettings.setString("SnapshotBaseName", gDirUtilp->getBaseFileName(filepath, true)); + gSavedPerAccountSettings.setString("SnapshotBaseDir", gDirUtilp->getDirName(filepath)); + saveImageLocal(image, success_cb, failure_cb); +} - gSavedPerAccountSettings.setString("SnapshotBaseName", gDirUtilp->getBaseFileName(filepath, true)); - gSavedPerAccountSettings.setString("SnapshotBaseDir", gDirUtilp->getDirName(filepath)); - } +void LLViewerWindow::onSelectionFailure(const snapshot_saved_signal_t::slot_type& failure_cb) +{ + failure_cb(); +} - std::string snapshot_dir = sSnapshotDir; - if(snapshot_dir.empty()) + +void LLViewerWindow::saveImageLocal(LLImageFormatted *image, const snapshot_saved_signal_t::slot_type& success_cb, const snapshot_saved_signal_t::slot_type& failure_cb) +{ + std::string lastSnapshotDir = LLViewerWindow::getLastSnapshotDir(); + if (lastSnapshotDir.empty()) { - return FALSE; + failure_cb(); + return; } // Check if there is enough free space to save snapshot #ifdef LL_WINDOWS - boost::filesystem::space_info b_space = boost::filesystem::space(utf8str_to_utf16str(snapshot_dir)); + boost::filesystem::path b_path(utf8str_to_utf16str(lastSnapshotDir)); #else - boost::filesystem::space_info b_space = boost::filesystem::space(snapshot_dir); + boost::filesystem::path b_path(lastSnapshotDir); #endif + if (!boost::filesystem::is_directory(b_path)) + { + LLSD args; + args["PATH"] = lastSnapshotDir; + LLNotificationsUtil::add("SnapshotToLocalDirNotExist", args); + resetSnapshotLoc(); + failure_cb(); + return; + } + boost::filesystem::space_info b_space = boost::filesystem::space(b_path); if (b_space.free < image->getDataSize()) { - insufficient_memory = TRUE; - return FALSE; + LLSD args; + args["PATH"] = lastSnapshotDir; + + std::string needM_bytes_string; + LLResMgr::getInstance()->getIntegerString(needM_bytes_string, (image->getDataSize()) >> 10); + args["NEED_MEMORY"] = needM_bytes_string; + + std::string freeM_bytes_string; + LLResMgr::getInstance()->getIntegerString(freeM_bytes_string, (b_space.free) >> 10); + args["FREE_MEMORY"] = freeM_bytes_string; + + LLNotificationsUtil::add("SnapshotToComputerFailed", args); + + failure_cb(); } + // Look for an unused file name + BOOL is_snapshot_name_loc_set = isSnapshotLocSet(); std::string filepath; S32 i = 1; S32 err = 0; - + std::string extension("." + image->getExtension()); do { filepath = sSnapshotDir; @@ -4457,7 +4491,15 @@ BOOL LLViewerWindow::saveImageNumbered(LLImageFormatted *image, BOOL force_picke && is_snapshot_name_loc_set); // Or stop if we are rewriting. LL_INFOS() << "Saving snapshot to " << filepath << LL_ENDL; - return image->save(filepath); + if (image->save(filepath)) + { + playSnapshotAnimAndSound(); + success_cb(); + } + else + { + failure_cb(); + } } void LLViewerWindow::resetSnapshotLoc() diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index c01921641ccfb92c6839f8f23bb5a332a03db29f..d8d420e6becd0179e1b59859a7becbe4d81fa507 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -352,7 +352,13 @@ class LLViewerWindow : public LLWindowCallbacks BOOL thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, LLSnapshotModel::ESnapshotLayerType type); BOOL isSnapshotLocSet() const; void resetSnapshotLoc() const; - BOOL saveImageNumbered(LLImageFormatted *image, BOOL force_picker, BOOL& insufficient_memory); + + typedef boost::signals2::signal<void(void)> snapshot_saved_signal_t; + + void saveImageNumbered(LLImageFormatted *image, BOOL force_picker, const snapshot_saved_signal_t::slot_type& success_cb, const snapshot_saved_signal_t::slot_type& failure_cb); + void onDirectorySelected(const std::vector<std::string>& filenames, LLImageFormatted *image, const snapshot_saved_signal_t::slot_type& success_cb, const snapshot_saved_signal_t::slot_type& failure_cb); + void saveImageLocal(LLImageFormatted *image, const snapshot_saved_signal_t::slot_type& success_cb, const snapshot_saved_signal_t::slot_type& failure_cb); + void onSelectionFailure(const snapshot_saved_signal_t::slot_type& failure_cb); // Reset the directory where snapshots are saved. // Client will open directory picker on next snapshot save. diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index 858f71e151071b5ca150775e27ab7a27a1243bf3..da874008c8db4b2cfef713851e6d6337686aead2 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -542,6 +542,10 @@ void LLVivoxVoiceClient::connectorShutdown() writeString(stream.str()); } + else + { + mShutdownComplete = true; + } } void LLVivoxVoiceClient::userAuthorized(const std::string& user_id, const LLUUID &agentID) @@ -1062,16 +1066,25 @@ bool LLVivoxVoiceClient::breakVoiceConnection(bool corowait) retval = result.has("connector"); } else - { // If we are not doing a corowait then we must sleep until the connector has responded + { + mRelogRequested = false; //stop the control coro + // If we are not doing a corowait then we must sleep until the connector has responded // otherwise we may very well close the socket too early. #if LL_WINDOWS - int count = 0; - while (!mShutdownComplete && 10 > count++) - { // Rider: This comes out to a max wait time of 10 seconds. - // The situation that brings us here is a call from ::terminate() - // and so the viewer is attempting to go away. Don't slow it down - // longer than this. + if (!mShutdownComplete) + { + // The situation that brings us here is a call from ::terminate() + // At this point message system is already down so we can't wait for + // the message, yet we need to receive "connector shutdown response". + // Either wait a bit and emulate it or check gMessageSystem for specific message _sleep(1000); + if (mConnected) + { + mConnected = false; + LLSD vivoxevent(LLSDMap("connector", LLSD::Boolean(false))); + LLEventPumps::instance().post("vivoxClientPump", vivoxevent); + } + mShutdownComplete = true; } #endif } @@ -3280,6 +3293,7 @@ void LLVivoxVoiceClient::connectorShutdownResponse(int statusCode, std::string & } mConnected = false; + mShutdownComplete = true; LLSD vivoxevent(LLSDMap("connector", LLSD::Boolean(false))); @@ -6230,6 +6244,7 @@ void LLVivoxVoiceClient::expireVoiceFonts() LLSD args; args["URL"] = LLTrans::getString("voice_morphing_url"); + args["PREMIUM_URL"] = LLTrans::getString("premium_voice_morphing_url"); // Give a notification if any voice fonts have expired. if (have_expired) diff --git a/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml index 65a7e255f9bfec29d7cb2e8b6263b91505b135dd..1361366bd5ca9111c23f54ad7540dd649f919705 100644 --- a/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml +++ b/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml @@ -31,7 +31,7 @@ <text name="AvatarPhysicsDetailText"> Niedrig </text> - <text name="ShadersText"> + <text name="HardwareText"> Hardware </text> <slider label="Texturen-Cache (MB):" name="GraphicsCardTextureMemory" tool_tip="Speicherplatz, der für Texturen zur Verfügung steht. In der Regel handelt es sich um Grafikkartenspeicher. Ein kleinerer Wert kann die Geschwindigkeit erhöhen, aber auch zu Texturunschärfen führen."/> @@ -56,6 +56,9 @@ <text name="antialiasing restart"> (Neustart erforderlich) </text> + <text name="MeshText"> + Netz + </text> <slider label="Gitterdetails Terrain:" name="TerrainMeshDetail"/> <text name="TerrainMeshDetailText"> Niedrig @@ -72,6 +75,9 @@ <text name="FlexibleMeshDetailText"> Niedrig </text> + <text name="ShadersText"> + Shader + </text> <check_box initial_value="true" label="Transparentes Wasser" name="TransparentWater"/> <check_box initial_value="true" label="Bumpmapping und Glanz" name="BumpShiny"/> <check_box initial_value="true" label="Lokale Lichtquellen" name="LocalLights"/> @@ -111,5 +117,6 @@ <button label="Auf empfohlene Einstellungen zurücksetzen" name="Defaults"/> <button label="OK" label_selected="OK" name="OK"/> <button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/> - <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxNonImpostors"/> + <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxComplexity"/> + <check_box label="RenderAvatarMaxNonImpostors" name="RenderAvatarMaxNonImpostors"/> </floater> diff --git a/indra/newview/skins/default/xui/de/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/de/menu_people_blocked_gear.xml index 4508465d25e3199d3444468fd36f92b78a172c04..c32223aef641c4deec98748d0d3d55623d98fe3c 100644 --- a/indra/newview/skins/default/xui/de/menu_people_blocked_gear.xml +++ b/indra/newview/skins/default/xui/de/menu_people_blocked_gear.xml @@ -3,6 +3,7 @@ <menu_item_call label="Nicht mehr ignorieren" name="unblock"/> <menu_item_check label="Voice ignorieren" name="BlockVoice"/> <menu_item_check label="Text ignorieren" name="MuteText"/> + <menu_item_check label="Partikel blockieren" name="MuteParticles"/> <menu_item_check label="Objektsounds ignorieren" name="BlockObjectSounds"/> <menu_item_call label="Profil..." name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index 8ff3ac770b9d0b8e68a1a545661d0b95b3892854..8cebd1f4410c5a0bf19a63e7362d83c808b6aefe 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -4317,7 +4317,7 @@ Wählen Sie eine kleinere Landfläche aus. Aufgrund eines internen Fehlers konnte Ihr Viewer nicht ordnungsgemäß aktualisiert werden. Der in Ihrem Viewer angezeigte L$-Kontostand oder Parzellenbesitz stimmt möglicherweise nicht mit dem aktuellen Stand auf den Servern überein. </notification> <notification name="LargePrimAgentIntersect"> - Große Prims, die sich mit anderen Spielern überschneiden, können nicht erstellt werden. Bitte erneut versuchen, wenn sich die anderen Spieler bewegt haben. + Große Prims, die sich mit anderen Einwohnern überschneiden, können nicht erstellt werden. Bitte erneut versuchen, wenn sich die anderen Einwohner fort bewegt haben. </notification> <notification name="PreferenceChatClearLog"> Dadurch werden die Protokolle vorheriger Unterhaltungen und alle Backups dieser Datei gelöscht. diff --git a/indra/newview/skins/default/xui/de/panel_group_roles.xml b/indra/newview/skins/default/xui/de/panel_group_roles.xml index 2f3268164c5fe900a1c5c1c44c08dd5f83ac5e85..dec71dd8ef2019e3ba0b6f50eef4f8aafeee75c1 100644 --- a/indra/newview/skins/default/xui/de/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/de/panel_group_roles.xml @@ -96,6 +96,11 @@ um mehrere Mitglieder auszuwählen. <scroll_list.columns label="" name="action"/> </scroll_list> </panel> + <panel name="members_header"> + <text_editor name="member_action_description"> + Diese Fähigkeit wird als „Mitglieder dieser Gruppe verweisen“ bezeichnet. Eigentümer können nur von anderen Eigentümern verwiesen werden. + </text_editor> + </panel> <panel name="roles_footer"> <text name="static"> Rolle: @@ -121,6 +126,11 @@ um mehrere Mitglieder auszuwählen. <scroll_list.columns label="" name="action"/> </scroll_list> </panel> + <panel name="roles_header"> + <text_editor name="role_action_description"> + Diese Fähigkeit wird als „Mitglieder dieser Gruppe verweisen“ bezeichnet. Eigentümer können nur von anderen Eigentümern verwiesen werden. + </text_editor> + </panel> <panel name="actions_footer"> <text_editor name="action_description"> Diese Fähigkeit heißt „Mitglieder aus dieser Gruppe werfen“. Eigentümer können nur von anderen Eigentümern hinausgeworfen werden. diff --git a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml index 7ac6708321db455a13c694ed5455bf192a24b263..3b1a7187569126375712cfd1137413e62cd81f7e 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml @@ -3,7 +3,7 @@ <panel.string name="log_in_to_change"> Anmelden, um Änderungen vorzunehmen </panel.string> - <button label="Cache leeren" name="clear_cache" tool_tip="Bild bei Anmeldung, letzter Standort, Teleport-Liste, Internet- und Texturen-Cache löschen"/> + <button label="Cache leeren" name="clear_cache" tool_tip="Anmeldungsbild, letzten Standort, Teleport-Liste, Internet- und Texturen-Cache löschen"/> <text name="cache_size_label_l"> (Standorte, Bilder, Web, Suchverlauf) </text> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml index 3e596de55c2020bc85dcad022697c63d676dc2ed..1435b7f87d34aea0a3ef44ca26a3de6d86d2aed2 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml @@ -15,8 +15,8 @@ Web: </text> <radio_group name="preferred_browser_behavior"> - <radio_item label="Meinen Browser (Chrome, Firefox, IE) für alle Links verwenden" name="internal" tool_tip="Standard-Browser für Hilfe, Weblinks usw. verwenden. Im Vollbildmodus nicht empfohlen." value="0"/> - <radio_item label="Integrierten Browser nur für Linden Lab-/Second Life-Links verwenden" name="external" tool_tip="Verwenden Sie den Standard-Webbrowser Ihres Systems für Hilfe, Weblinks usw. Der integrierte Browser wird nur für Linden Lab-/Second Life-Links verwendet." value="1"/> + <radio_item label="Standard-Systembrowser für alle Links verwenden" name="internal" tool_tip="Standard-Browser für Hilfe, Weblinks usw. verwenden. Im Vollbildmodus nicht empfohlen." value="0"/> + <radio_item label="Integrierten Browser nur für Second Life-Links verwenden" name="external" tool_tip="Standard-Systembrowser für Hilfe, Weblinks usw. verwenden. Der integrierte Browser wird nur für LindenLab-/Second Life-Links verwendet." value="1"/> <radio_item label="Integrierten Browser für alle Links verwenden" name="external_all" tool_tip="Integrierten Browser für Hilfe, Internetlinks, usw. verwenden. Der Browser wird als eigenständiges Fenster in [APP_NAME] geöffnet." value="2"/> </radio_group> <check_box initial_value="true" label="Plugins aktivieren" name="browser_plugins_enabled"/> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/de/panel_preferences_uploads.xml index e2759715d10f0c8f60a6c5d6c5dd6a833fb8852f..40c80f50746ce44ab255fdffe94e4ea8bf677856 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_uploads.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_uploads.xml @@ -12,6 +12,9 @@ <text name="title_animation"> Animationen </text> + <text name="title_model"> + Modelle + </text> <text name="upload_help"> Um einen Zielordner zu ändern, klicken Sie im Inventar mit der rechten Maustaste auf den Ordner und wählen Sie „Als Standard verwenden für“. </text> diff --git a/indra/newview/skins/default/xui/de/role_actions.xml b/indra/newview/skins/default/xui/de/role_actions.xml index daddefd69ea93028b70a6da160e8dbd72e6909dd..26187678a05039be237f4d1671f086787c4a9e6b 100644 --- a/indra/newview/skins/default/xui/de/role_actions.xml +++ b/indra/newview/skins/default/xui/de/role_actions.xml @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <role_actions> <action_set description="Diese Fähigkeiten ermöglichen das Hinzufügen und Entfernen von Mitgliedern sowie den Beitritt ohne Einladung." name="Membership"> - <action description="Personen in diese Gruppe einladen" longdescription="Leute in diese Gruppe mit der Schaltfläche „Einladen“ im Abschnitt „Rollen“ > Registerkarte „Mitglieder“ in die Gruppe einladen." name="member invite" value="1"/> - <action description="Mitglieder aus dieser Gruppe werfen" longdescription="Leute aus dieser Gruppe mit der Schaltfläche „Hinauswerfen“ im Abschnitt „Rollen“ > Registerkarte „Mitglieder“ aus der Gruppe werfen. Ein Eigentümer kann jeden, außer einen anderen Eigentümer, ausschließen. Wenn Sie kein Eigentümer sind, können Sie ein Mitglied nur dann aus der Gruppe werfen, wenn es die Rolle Jeder inne hat, jedoch KEINE andere Rolle. Um Mitgliedern Rollen entziehen zu können, müssen Sie über die Fähigkeit „Mitgliedern Rollen entziehen“ verfügen." name="member eject" value="2"/> + <action description="Personen in diese Gruppe einladen" longdescription="Andere Personen über die Schaltfläche "Einladen" im Bereich "Rollen und Mitglieder" > Registerkarte "Mitglieder" in diese Gruppe einladen." name="member invite" value="1"/> + <action description="Mitglieder mit der Rolle "Jeder" dieser Gruppe verweisen" longdescription="Mitglieder mithilfe der Schaltfläche „Hinauswerfen“ im Abschnitt „Rollen und Mitglieder“ > Registerkarte „Mitglieder“ der Gruppe verweisen. Ein Eigentümer kann, mit Ausnahme eines anderen Eigentümers, jedes Mitglied ausschließen. Wenn Sie kein Eigentümer sind, können Sie ein Mitglied nur dann aus der Gruppe ausschließen, wenn es über die Rolle "Jeder", ansonsten jedoch über KEINE weitere Rolle verfügt. Um Mitgliedern Rollen entziehen zu können, müssen Sie über die Fähigkeit „Mitgliedern Rollen entziehen“ verfügen." name="member eject" value="2"/> <action description="Bannliste verwalten" longdescription="Gruppenmitglied das Verbannen/Zulassen von Einwohnern aus dieser Gruppe gestatten." name="allow ban" value="51"/> <action description="„Registrierung offen“ aktivieren/deaktivieren und „Beitrittsgebühr“ ändern." longdescription="„Registrierung offen“ aktivieren, um damit neue Mitglieder ohne Einladung beitreten können, und die „Beitrittsgebühr“ im Abschnitt „Allgemein“ ändern." name="member options" value="3"/> </action_set> <action_set description="Diese Fähigkeiten ermöglichen das Hinzufügen, Entfernen und Ändern von Gruppenrollen, das Zuweisen und Entfernen von Rollen und das Zuweisen von Fähigkeiten zu Rollen." name="Roles"> - <action description="Neue Rollen erstellen" longdescription="Neue Rollen im Abschnitt „Rollen“ > Registerkarte „Rollen“ erstellen." name="role create" value="4"/> - <action description="Rollen löschen" longdescription="Neue Rollen im Abschnitt „Rollen“ > Registerkarte „Rollen“ löschen." name="role delete" value="5"/> - <action description="Rollennamen, Titel, Beschreibungen und ob die Rolleninhaber öffentlich bekannt sein sollen, ändern." longdescription="Rollennamen, Titel, Beschreibungen und ob die Rolleninhaber öffentlich bekannt sein sollen, ändern. Dies wird im unteren Bereich des Abschnitts „Rollen“ > Registerkarte „Rollen“ eingestellt, nachdem eine Rolle ausgewählt wurde." name="role properties" value="6"/> - <action description="Mitgliedern nur eigene Rollen zuweisen" longdescription="In der Liste „Rollen“ (Abschnitt „Rollen“ > Registerkarte „Mitglieder“) können Mitgliedern Rollen zugewiesen werden. Ein Mitglied mit dieser Fähigkeit kann anderen Mitgliedern nur die eigenen Rollen zuweisen." name="role assign member limited" value="7"/> - <action description="Mitgliedern beliebige Rolle zuweisen" longdescription="Sie können Mitglieder jede beliebige Rolle der Liste „Rollen“ (Abschnitt „Rollen“ > Registerkarte „Mitglieder“) zuweisen. *WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann sich selbst und jedem anderen Mitglied (außer dem Eigentümer) Rollen mit weitreichenden Fähigkeiten zuweisen und damit fast Eigentümerrechte erreichen. Ãœberlegen Sie sich gut, wem Sie diese Fähigkeit verleihen." name="role assign member" value="8"/> - <action description="Mitgliedern Rollen entziehen" longdescription="In der Liste „Rollen“ (Abschnitt „Rollen“ > Registerkarte „Mitglieder“) können Mitgliedern Rollen abgenommen werden. Eigentümer können nicht entfernt werden." name="role remove member" value="9"/> - <action description="Rollenfähigkeiten zuweisen und entfernen" longdescription="Fähigkeiten für jede Rolle können in der Liste „Zulässige Fähigkeiten" (Abschnitt „Rollen" > Registerkarte „Rollen“) zugewiesen und auch entzogen werden. *WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann sich selbst und jedem anderen Mitglied (außer dem Eigentümer) alle Fähigkeiten zuweisen und damit fast Eigentümerrechte erreichen. Ãœberlegen Sie sich gut, wem Sie diese Fähigkeit verleihen." name="role change actions" value="10"/> + <action description="Neue Rollen erstellen" longdescription="Erstellen neuer Rollen im Abschnitt „Rollen und Mitglieder“ > Registerkarte „Rollen“." name="role create" value="4"/> + <action description="Rollen löschen" longdescription="Löschen von Rollen im Abschnitt „Rollen und Mitglieder“ > Registerkarte „Rollen“." name="role delete" value="5"/> + <action description="Rollennamen, Titel, Beschreibungen und ob die Rolleninhaber öffentlich bekannt sein sollen, ändern." longdescription="Ändern von Rollennamen, Titeln, Beschreibungen und öffentlicher Bekanntgabe der Rolleninhaber. Dies wird im unteren Bereich des Abschnitts „Rollen und Mitglieder“ > Registerkarte „Rollen“ eingestellt, nachdem eine Rolle ausgewählt wurde." name="role properties" value="6"/> + <action description="Mitgliedern nur eigene Rollen zuweisen" longdescription="In der Liste „Zugewiesene Rollen“ (Abschnitt „Rollen und Mitglieder“ > Registerkarte „Mitglieder“) können Mitgliedern Rollen zugewiesen werden. Ein Mitglied mit dieser Fähigkeit kann anderen Mitgliedern nur die eigene Rolle zuweisen." name="role assign member limited" value="7"/> + <action description="Mitgliedern beliebige Rolle zuweisen" longdescription="Sie können Mitgliedern in der Liste „Zugewiesene Rollen“ (Abschnitt „Rollen und Mitglieder“ > Registerkarte „Mitglieder“) jede beliebige Rolle zuweisen.*WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann sich selbst und jedem anderen Mitglied (außer dem Eigentümer) Rollen mit weitreichenden Berechtigungen zuweisen und damit nahezu Eigentümerrechte erreichen. Ãœberlegen Sie also genau, wem Sie diese Berechtigung erteilen." name="role assign member" value="8"/> + <action description="Mitgliedern Rollen entziehen" longdescription="In der Liste „Zugewiesene Rollen“ (Abschnitt „Rollen und Mitglieder“ > Registerkarte „Mitglieder“) können Mitglieder aus Rollenzuweisungen entfernt werden. Eigentümer können nicht entfernt werden." name="role remove member" value="9"/> + <action description="Rollenfähigkeiten zuweisen und entfernen" longdescription="In der Liste "Zulässige Fähigkeiten" (Bereich "Rollen und Mitglieder" > Registerkarte "Rollen") können für jede Rolle Fähigkeiten hinzugefügt und entfernt werden. *WARNUNG* Jedes Mitglied in einer Rolle mit dieser Fähigkeit kann sich selbst und jedem anderen Mitglied (außer dem Eigentümer) alle Fähigkeiten zuweisen und damit nahezu Eigentümerrechte erreichen. Ãœberlegen Sie also genau, wem Sie diese Fähigkeit zuweisen." name="role change actions" value="10"/> </action_set> <action_set description="Diese Fähigkeiten ermöglichen es, die Gruppenidentität zu ändern, z. B. öffentliche Sichtbarkeit, Charta und Insignien." name="Group Identity"> <action description="Charta, Insignien und „Im Web veröffentlichen“ ändern und festlegen, welche Mitglieder in der Gruppeninfo öffentlich sichtbar sind." longdescription="Charta, Insignien und „In Suche anzeigen" ändern. Diese Einstellungen werden im Abschnitt „Allgemein" vorgenommen." name="group change identity" value="11"/> diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index cf843a07a60d044fd791236b41b68ae954c3ef45..535af317d991f072f4f72567655aa0fa09c2fd54 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -502,7 +502,7 @@ name="Buy Land..." width="130" /> <button - enabled="true" + enabled="false" follows="left|top" height="23" label="Linden Sale" diff --git a/indra/newview/skins/default/xui/en/floater_auction.xml b/indra/newview/skins/default/xui/en/floater_auction.xml new file mode 100644 index 0000000000000000000000000000000000000000..9c6d114c4ca1792c875b553bb4655cec7fac0c2b --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_auction.xml @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + legacy_header_height="18" + can_resize="true" + height="412" + layout="topleft" + min_height="412" + min_width="420" + name="floater_auction" + help_topic="floater_auction" + title="START LINDEN LAND SALE" + width="420"> + <floater.string + name="already for sale"> + You cannot auction parcels which are already for sale. + </floater.string> + <icon + bottom="280" + follows="left|right|top|bottom" + layout="topleft" + left="4" + name="snapshot_icon" + right="-4" + top="24" /> + <text + follows="left|right|bottom" + height="16" + layout="topleft" + left_delta="0" + name="parcel_text" + top_pad="12" + width="400" /> + <check_box + control_name="AuctionShowFence" + follows="left|bottom" + height="16" + initial_value="true" + label="Include yellow selection fence" + layout="topleft" + left_delta="0" + name="fence_check" + top_pad="12" + width="199" /> + <button + follows="left|bottom" + height="20" + label="Snapshot" + label_selected="Snapshot" + layout="topleft" + left_delta="0" + name="snapshot_btn" + top_pad="4" + width="150"> + <button.commit_callback + function="ClickSnapshot" /> + </button> + <button + follows="left|bottom" + height="20" + label="Sell to Anyone" + label_selected="Sell to Anyone" + layout="topleft" + left_delta="0" + name="sell_to_anyone_btn" + top_pad="4" + width="150"> + <button.commit_callback + function="ClickSellToAnyone" /> + </button> + <button + follows="left|bottom" + height="20" + label="Clear Settings" + label_selected="Clear Settings" + layout="topleft" + left_delta="0" + name="reset_parcel_btn" + top_pad="4" + width="150"> + <button.commit_callback + function="ClickResetParcel" /> + </button> + <button + follows="left|bottom" + height="20" + label="Start Auction" + label_selected="Start Auction" + layout="topleft" + left_pad="4" + name="start_auction_btn" + top_delta="0" + width="150"> + <button.commit_callback + function="ClickStartAuction" /> + </button> +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index ed3cc268516747b450d385cab0a7405b6115a682..bdcf3648fae73abfec2adceaf32e3be8402f2709 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -1115,6 +1115,10 @@ label="Zoom" name="Zoom" value="Zoom" /> + <combo_box.item + label="None" + name="None" + value="None" /> </combo_box> <check_box height="23" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index d28f47c2e1782c389d8dba695935d887c70eea7a..7c6b1bc357015a63be6a09fc1f8c98adf8deeb21 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -92,11 +92,24 @@ shortcut="alt|shift|S" name="Sit Down Here"> <menu_item_call.on_click - function="Self.SitDown" - parameter="" /> + function="Self.SitDown"/> + <menu_item_call.on_visible + function="Self.ShowSitDown"/> <menu_item_call.on_enable function="Self.EnableSitDown" /> </menu_item_call> + <menu_item_call + label="Stand Up" + layout="topleft" + shortcut="alt|shift|S" + name="Stand up"> + <menu_item_call.on_click + function="Self.StandUp"/> + <menu_item_call.on_visible + function="Self.EnableStandUp"/> + <menu_item_call.on_enable + function="Self.EnableStandUp" /> + </menu_item_call> <menu_item_check label="Fly" name="Fly" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 7f9dc0c41f870bdccade7f6c40c09805dc7ed5de..6b164c660a15496276ce5e1c032b669d449dcb91 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -8102,6 +8102,8 @@ Failed to connect to [VOICE_CHANNEL_NAME], please try again later. You will now <unique/> One or more of your subscribed Voice Morphs has expired. [[URL] Click here] to renew your subscription. + +If you are a Premium Member, [[PREMIUM_URL] click here] to receive your voice morphing perk. <tag>fail</tag> <tag>voice</tag> </notification> @@ -8115,6 +8117,8 @@ One or more of your subscribed Voice Morphs has expired. <unique/> The active Voice Morph has expired, your normal voice settings have been applied. [[URL] Click here] to renew your subscription. + +If you are a Premium Member, [[PREMIUM_URL] click here] to receive your voice morphing perk. <tag>fail</tag> <tag>voice</tag> </notification> @@ -8128,6 +8132,8 @@ The active Voice Morph has expired, your normal voice settings have been applied <unique/> One or more of your Voice Morphs will expire in less than [INTERVAL] days. [[URL] Click here] to renew your subscription. + +If you are a Premium Member, [[PREMIUM_URL] click here] to receive your voice morphing perk. <tag>fail</tag> <tag>voice</tag> </notification> @@ -8260,6 +8266,11 @@ Failed to save appearance to XML. Failed to save snapshot to [PATH]: Disk is full. [NEED_MEMORY]KB is required but only [FREE_MEMORY]KB is free. </notification> + <notification icon="notifytip.tga" + name="SnapshotToLocalDirNotExist" type="notifytip"> +Failed to save snapshot to [PATH]: Directory does not exist. + </notification> + <notification icon="notifytip.tga" name="PresetNotSaved" diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index 3a34bcbe21c5e8dc749fcf9b78faafc9ecf8aa99..7759d4fdb2975cadfc31b9bf6d426da8a54526a9 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -12,6 +12,10 @@ name="forgot_password_url"> http://secondlife.com/account/request.php </panel.string> + <panel.string + name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack follows="left|right|top" height="172" @@ -149,7 +153,18 @@ label="Select grid" layout="topleft" name="server_combo" - width="149" /> + width="149" /> + <text + follows="left|top" + font="SansSerifMedium" + text_color="EmphasisColor" + height="16" + name="sign_up_text" + left="778" + bottom_delta="-10" + width="200"> + Sign up + </text> </layout_panel> <layout_panel height="172" diff --git a/indra/newview/skins/default/xui/en/panel_login_first.xml b/indra/newview/skins/default/xui/en/panel_login_first.xml index 35b80c56abe7cc0f2837fa2905b1065e0d6699fa..213f9a6b0cc2f85273ac4358ffa38f6928e941d9 100644 --- a/indra/newview/skins/default/xui/en/panel_login_first.xml +++ b/indra/newview/skins/default/xui/en/panel_login_first.xml @@ -12,6 +12,10 @@ name="forgot_password_url"> http://secondlife.com/account/request.php </panel.string> + <panel.string + name="sign_up_url"> + https://join.secondlife.com/ + </panel.string> <layout_stack follows="left|right|top|bottom" width="1024" @@ -168,6 +172,17 @@ width="200"> Forgotten password </text> + <text + follows="left|top" + font="SansSerifLarge" + text_color="EmphasisColor" + height="16" + name="sign_up_text" + left="432" + top="34" + width="200"> + Sign up + </text> </layout_panel> <layout_panel height="100" diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml index b84dce222f4e22fbb12caec4beda99b34d07b0fa..efedb9559ef11d0654f9deb802c1db62365b6180 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml @@ -292,10 +292,14 @@ label="Open" name="Open" value="Open" /> - <combo_box.item - label="Zoom" - name="Zoom" - value="Zoom" /> + <combo_box.item + label="Zoom" + name="Zoom" + value="Zoom" /> + <combo_box.item + label="None" + name="None" + value="None" /> </combo_box> <panel border="false" diff --git a/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml index 84b256c8e3ab86b441bc4a9614d86e95197370c4..a0618521ee3996370b661a344b6224adf0b386bc 100644 --- a/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml +++ b/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml @@ -31,7 +31,7 @@ <text name="AvatarPhysicsDetailText"> Bajo </text> - <text name="ShadersText"> + <text name="HardwareText"> Hardware </text> <slider label="Memoria para texturas (MB):" name="GraphicsCardTextureMemory" tool_tip="Cantidad de memoria asignada a las texturas. Por defecto es la memoria de la tarjeta de vÃdeo. Reducir esta cantidad puede mejorar el rendimiento, pero también hacer que las texturas se vean borrosas."/> @@ -56,6 +56,9 @@ <text name="antialiasing restart"> (requiere reiniciar) </text> + <text name="MeshText"> + Malla + </text> <slider label="Detalle de la malla del terreno:" name="TerrainMeshDetail"/> <text name="TerrainMeshDetailText"> Bajo @@ -72,6 +75,9 @@ <text name="FlexibleMeshDetailText"> Bajo </text> + <text name="ShadersText"> + Shaders + </text> <check_box initial_value="true" label="Agua transparente" name="TransparentWater"/> <check_box initial_value="true" label="Efecto de relieve y brillo" name="BumpShiny"/> <check_box initial_value="true" label="Puntos de luz locales" name="LocalLights"/> @@ -111,5 +117,6 @@ <button label="Restablecer la configuración recomendada" name="Defaults"/> <button label="OK" label_selected="OK" name="OK"/> <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxNonImpostors"/> + <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxComplexity"/> + <check_box label="RenderAvatarMaxNonImpostors" name="RenderAvatarMaxNonImpostors"/> </floater> diff --git a/indra/newview/skins/default/xui/es/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/es/menu_people_blocked_gear.xml index 98b07980119d30a3ebfa5a12bba85588c9e4abc8..5cfcaf29a02ee4f1593ad35b4660433d8902a53c 100644 --- a/indra/newview/skins/default/xui/es/menu_people_blocked_gear.xml +++ b/indra/newview/skins/default/xui/es/menu_people_blocked_gear.xml @@ -3,6 +3,7 @@ <menu_item_call label="No ignorar" name="unblock"/> <menu_item_check label="Bloquear la voz" name="BlockVoice"/> <menu_item_check label="Bloquear el texto" name="MuteText"/> + <menu_item_check label="Bloquear partÃculas" name="MuteParticles"/> <menu_item_check label="Bloquear los sonidos de objeto" name="BlockObjectSounds"/> <menu_item_call label="Perfil..." name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index fdf9003321d6c6dc7760442f693a66df3c795619..028354f3cf52e5ebeb83c4890a21965c50012029 100644 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -4299,7 +4299,7 @@ Prueba a seleccionar un terreno más pequeño. Un error interno nos ha impedido actualizar tu visor correctamente. El saldo en L$ o las parcelas en propiedad presentadas en el visor podrÃan no coincidir con tu saldo real en los servidores. </notification> <notification name="LargePrimAgentIntersect"> - No se pueden crear prims grandes que intersectan a otros jugadores. Reinténtalo cuando se hayan movido otros jugadores. + No se pudo crear primitivas grandes que se crucen con otros residentes. Por favor, vuelve a intentar cuando otros residentes se hayan desplazado. </notification> <notification name="PreferenceChatClearLog"> Esto eliminará los registros de conversaciones anteriores y las copias de seguridad de ese archivo. diff --git a/indra/newview/skins/default/xui/es/panel_group_roles.xml b/indra/newview/skins/default/xui/es/panel_group_roles.xml index 54a556660017298dac2252f7cdd641cd3092ec61..f9c31a14e0358447e0ca8fc0bb3aa1eff8973f6a 100644 --- a/indra/newview/skins/default/xui/es/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/es/panel_group_roles.xml @@ -91,6 +91,11 @@ Seleccione varios nombres manteniendo pulsada la tecla Ctrl y pulsando en cada u <scroll_list.columns label="" name="action"/> </scroll_list> </panel> + <panel name="members_header"> + <text_editor name="member_action_description"> + Esta habilidad es 'Expulsar miembros de este grupo'. Sólo un propietario puede expulsar a otro propietario. + </text_editor> + </panel> <panel name="roles_footer"> <text name="static"> Nombre del rol @@ -117,6 +122,11 @@ Seleccione varios nombres manteniendo pulsada la tecla Ctrl y pulsando en cada u <scroll_list.columns label="" name="action"/> </scroll_list> </panel> + <panel name="roles_header"> + <text_editor name="role_action_description"> + Esta habilidad es 'Expulsar miembros de este grupo'. Sólo un propietario puede expulsar a otro propietario. + </text_editor> + </panel> <panel name="actions_footer"> <text_editor name="action_description"> Esta capacidad es la de 'Expulsar miembros de este grupo'. Sólo un propietario puede expulsar a otro. diff --git a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml index 34947ca478930bd2d5171595031aaaa9caea47e7..1b191d3e46b84f1fd6ae8fce7e0b2a093b270cf1 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml @@ -15,8 +15,8 @@ Web: </text> <radio_group name="preferred_browser_behavior"> - <radio_item label="Usar mi navegador (Chrome, Firefox, IE) para todos los enlaces" name="internal" tool_tip="Usa el navegador predeterminado para obtener ayuda, visitar enlaces web, etc. No es aconsejable si estás a pantalla completa." value="0"/> - <radio_item label="Usar el navegador integrado solo para los enlaces de Second Life" name="external" tool_tip="Usa el navegador predeterminado del sistema para obtener ayuda, visitar enlaces web, etc. El navegador integrado solo se utilizará para los enlaces de LindenLab/SecondLife." value="1"/> + <radio_item label="Usar el navegador incorporado para todos los enlaces" name="internal" tool_tip="Usa el navegador predeterminado para obtener ayuda, visitar enlaces web, etc. No es aconsejable si estás a pantalla completa." value="0"/> + <radio_item label="Usar el navegador integrado solo para los enlaces de Second Life" name="external" tool_tip="Usa el navegador predeterminado para obtener ayuda, visitar enlaces web, etc. Se utilizará el navegador incorporado sólo para los enlaces LindenLab/Second Life." value="1"/> <radio_item label="Usar el navegador incorporado para todos los vÃnculos" name="external_all" tool_tip="Usa el navegador incorporado para ayuda, enlaces web, etc. Este navegador se abre en una nueva ventana dentro de [APP_NAME]." value="2"/> </radio_group> <check_box initial_value="true" label="Activar plugins" name="browser_plugins_enabled"/> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/es/panel_preferences_uploads.xml index b095ed6c6783ecc4ade89d8cb22a6c02401699eb..27642687526235af5104f1f710f5c565da9faf97 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_uploads.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_uploads.xml @@ -12,6 +12,9 @@ <text name="title_animation"> Animaciones </text> + <text name="title_model"> + Modelos + </text> <text name="upload_help"> Para cambiar una carpeta de destino, pulsa con el botón derecho en ella en el inventario y elige "Usar como valor predeterminado para" diff --git a/indra/newview/skins/default/xui/es/role_actions.xml b/indra/newview/skins/default/xui/es/role_actions.xml index 25708ae731cc579e62c73ae9b687a5d352119735..80379da064059a7cf2c57ed5be3af3ff4d6691ca 100644 --- a/indra/newview/skins/default/xui/es/role_actions.xml +++ b/indra/newview/skins/default/xui/es/role_actions.xml @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <role_actions> <action_set description="Estas capacidades incluyen poderes para añadir o quitar miembros del grupo, y para pemitir que se sumen nuevos miembros sin necesidad de invitación." name="Membership"> - <action description="Invitar personas al grupo" longdescription="Invitar a gente a este grupo usando el botón 'Invitar' en la sección Roles > pestaña Miembros." name="member invite" value="1"/> - <action description="Expulsar a miembros del grupo" longdescription="Expulsar a miembros de este grupo usando el botón 'Expulsar' en la sección Roles > pestaña Miembros. Un propietario puede expulsar a cualquiera, excepto a otro propietario. Si no eres un propietario, un miembro puede ser expulsado única y exclusivamente si está en el rol de Cualquiera y NO en otros roles. Para quitar roles a los miembros, tienes que tener la capacidad de 'Quitar roles a los miembros'." name="member eject" value="2"/> + <action description="Invitar personas al grupo" longdescription="Invitar a gente a este grupo usando el botón 'Invitar' en la sección Roles y Miembros > pestaña Miembros." name="member invite" value="1"/> + <action description="Expulsar miembros que pertenecen al rol 'Todos' en este grupo." longdescription="Expulsar a miembros de este grupo usando el botón 'Expulsar' en la sección Roles y Miembros > pestaña Miembros. Un propietario puede expulsar a cualquiera, excepto a otro propietario. Si no eres un propietario, un miembro puede ser expulsado única y exclusivamente si está en el rol de Todos y NO en otros roles. Para quitar roles a los miembros, tienes que tener la capacidad de 'Quitar roles a los miembros'." name="member eject" value="2"/> <action description="Administra la lista de expulsados" longdescription="Permite que el miembro del grupo expulse a residentes de este grupo o los readmita." name="allow ban" value="51"/> <action description="Cambiar 'Inscripción abierta' y 'Cuota de inscripción'" longdescription="En la sección General, cambiar la 'Inscripción abierta' -que permite entrar al grupo sin invitación- y la 'Cuota de inscripción'." name="member options" value="3"/> </action_set> <action_set description="Estas habilidades incluyen el poder añadir, quitar y cambiar roles, asignarlos a miembros, y darles capacidades." name="Roles"> - <action description="Crear nuevos roles" longdescription="Crear roles nuevos en la sección Roles > pestaña Roles." name="role create" value="4"/> - <action description="Borrar roles" longdescription="Borrar roles en la sección Roles > pestaña Roles." name="role delete" value="5"/> - <action description="Cambiar el nombre, la etiqueta y la descripción de los roles, asà como qué miembros se muestran públicamente en ese rol" longdescription="Cambiar el nombre, la etiqueta y la descripción de los roles, asà como qué miembros se muestran públicamente en ese rol. Se hace seleccionando el rol, dentro de la sección Roles > pestaña Roles." name="role properties" value="6"/> - <action description="Designar miembros para el rol del asignador" longdescription="Añadir miembros a los roles en la lista de Roles asignados (sección Roles > pestaña Miembros). Un miembro con esta capacidad sólo puede añadir miembros a los roles que tenga él mismo." name="role assign member limited" value="7"/> - <action description="Designar miembros para cualquier rol" longdescription="Designar miembros para cualquier rol en la lista de Roles asignados (sección Roles > pestaña Miembros). *AVISO* Todos los miembros que tengan un rol con esta capacidad podrán asignarse a sà mismos -y a otros miembros que no sean los propietarios- roles con mayores poderes de los que actualmente tienen. Potencialmente, podrÃan elevarse hasta poderes cercanos a los del propietario. Asegúrate de lo que estás haciendo antes de otorgar esta capacidad." name="role assign member" value="8"/> - <action description="Quitar capacidades a los miembros" longdescription="Quitar miembros de los roles en la lista de roles asignados (sección Roles > pestaña Miembros). No se puede quitar a los Propietarios." name="role remove member" value="9"/> - <action description="Añadir o quitar capacidades a los roles" longdescription="Asignar y quitar capacidades a cada rol en la lista de capacidades permitidas (sección Roles > pestaña Roles). *AVISO* Todos los miembros que tengan un rol con esta capacidad podrán asignarse a sà mismos -y a otros miembros que no sean los propietarios- todas las capacidades. Potencialmente, podrÃan elevarse hasta poderes cercanos a los del propietario. Asegúrate de lo que estás haciendo antes de otorgar esta capacidad." name="role change actions" value="10"/> + <action description="Crear nuevos roles" longdescription="Crear roles nuevos en la sección Roles y Miembros > pestaña Roles." name="role create" value="4"/> + <action description="Borrar roles" longdescription="Borrar roles en la sección Roles y Miembros > pestaña Roles." name="role delete" value="5"/> + <action description="Cambiar el nombre, la etiqueta y la descripción de los roles, asà como qué miembros se muestran públicamente en ese rol" longdescription="Cambiar el nombre, la etiqueta y la descripción de los roles, y si los miembros se muestran públicamente en ese rol. Esto se hace al final de la sección Roles y Miembros > pestaña Roles, luego de seleccionar un Rol." name="role properties" value="6"/> + <action description="Designar miembros para el rol del asignador" longdescription="Añadir miembros a los roles en la lista de Roles asignados (sección Roles y Miembros > pestaña Miembros). Un miembro con esta capacidad sólo puede añadir miembros a los roles que tenga él mismo." name="role assign member limited" value="7"/> + <action description="Designar miembros para cualquier rol" longdescription="Asignar miembros a cualquier rol en la lista de roles asignados (Sección Roles y miembros > pestaña Miembros) *AVISO* Todos los miembros que tengan un rol con esta capacidad podrán asignarse a sà mismos -y a otros miembros que no sean los propietarios- roles con mayores poderes de los que actualmente tienen. Potencialmente, podrÃan elevarse hasta poderes cercanos a los del propietario. Asegúrate de lo que estás haciendo antes de otorgar esta capacidad." name="role assign member" value="8"/> + <action description="Quitar capacidades a los miembros" longdescription="Quitar miembros de los roles en la lista de roles asignados (sección Roles y Miembros > pestaña Miembros). No se puede quitar a los Propietarios." name="role remove member" value="9"/> + <action description="Añadir o quitar capacidades a los roles" longdescription="Asignar y quitar habilidades para cada Rol en la lista de capacidades permitidas (Sección Roles y Miembros > pestaña Roles). *AVISO* Todos los miembros que tengan un rol con esta capacidad podrán asignarse a sà mismos -y a otros miembros que no sean los propietarios- todas las capacidades. Potencialmente, podrÃan elevarse hasta poderes cercanos a los del propietario. Asegúrate de lo que estás haciendo antes de otorgar esta capacidad." name="role change actions" value="10"/> </action_set> <action_set description="Estas capacidades incluyen poderes para modificar la identidad del grupo, como su visibilidad pública, su carta o su emblema." name="Group Identity"> <action description="Cambiar la carta, emblema, 'Mostrar en la búsqueda', y qué miembros serán visibles en la información del grupo" longdescription="Cambia la carta, emblema y 'Mostrar en la búsqueda'. Se hace en la sección General." name="group change identity" value="11"/> diff --git a/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml index 42cc2e6dac9a9cc30843a1339abcb79c3ae65902..23fff3b77054d5479677bb7017e0675726263729 100644 --- a/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml +++ b/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml @@ -31,7 +31,7 @@ <text name="AvatarPhysicsDetailText"> Faible </text> - <text name="ShadersText"> + <text name="HardwareText"> Matériel </text> <slider label="Mémoire textures (Mo) :" name="GraphicsCardTextureMemory" tool_tip="Quantité de mémoire à affecter aux textures. Utilise la mémoire de la carte vidéo par défaut. Si vous réduisez ce paramètre, cela peut améliorer les performances, mais les textures risquent d’être floues."/> @@ -56,6 +56,9 @@ <text name="antialiasing restart"> (redémarrage requis) </text> + <text name="MeshText"> + Maillage + </text> <slider label="Détails des rendus des terrains :" name="TerrainMeshDetail"/> <text name="TerrainMeshDetailText"> Faible @@ -72,6 +75,9 @@ <text name="FlexibleMeshDetailText"> Faible </text> + <text name="ShadersText"> + Effets + </text> <check_box initial_value="true" label="Eau transparente" name="TransparentWater"/> <check_box initial_value="true" label="Placage de relief et brillance" name="BumpShiny"/> <check_box initial_value="true" label="Lumières locales" name="LocalLights"/> @@ -111,5 +117,6 @@ <button label="Réinitialiser les paramètres recommandés" name="Defaults"/> <button label="OK" label_selected="OK" name="OK"/> <button label="Annuler" label_selected="Annuler" name="Cancel"/> - <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxNonImpostors"/> + <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxComplexity"/> + <check_box label="RenderAvatarMaxNonImpostors" name="RenderAvatarMaxNonImpostors"/> </floater> diff --git a/indra/newview/skins/default/xui/fr/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/fr/menu_people_blocked_gear.xml index adce6f56821913a13362f99e888ef22703fa90f7..26243c48c29da2a3ae9b6797ba2f090b58bc95a3 100644 --- a/indra/newview/skins/default/xui/fr/menu_people_blocked_gear.xml +++ b/indra/newview/skins/default/xui/fr/menu_people_blocked_gear.xml @@ -3,6 +3,7 @@ <menu_item_call label="Ne plus ignorer" name="unblock"/> <menu_item_check label="Bloquer le chat vocal" name="BlockVoice"/> <menu_item_check label="Ignorer le texte" name="MuteText"/> + <menu_item_check label="Ignorez les particules" name="MuteParticles"/> <menu_item_check label="Bloquer les sons des objets" name="BlockObjectSounds"/> <menu_item_call label="Profil..." name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index 6225eba119fdae047e87498b223d540279d1df87..4976b4a72472ad0578361e255cabea0f29d8144d 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -4302,7 +4302,7 @@ Veuillez sélectionner un terrain plus petit. Une erreur interne nous a empêchés de mettre votre client à jour correctement. Le solde de L$ et le patrimoine affichés dans votre client peuvent ne pas correspondre à votre solde réel sur les serveurs. </notification> <notification name="LargePrimAgentIntersect"> - Impossible de créer de grandes prims qui coupent d'autres joueurs. Réessayez une fois que les autres joueurs se seront déplacés. + Impossible de créer de grands prims qui rejoignent d'autres résidents. Veuillez essayer à nouveau lorsque les autres résidents seront partis. </notification> <notification name="PreferenceChatClearLog"> Cela supprimera les journaux des conversations précédentes, ainsi que toute copie de sauvegarde de ce fichier. diff --git a/indra/newview/skins/default/xui/fr/panel_group_roles.xml b/indra/newview/skins/default/xui/fr/panel_group_roles.xml index 3e66190c8d816a211d58317c0e5d7e963b414a4e..66f4c8a768050b7627a9201cd23f6e2680e30581 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_roles.xml @@ -95,6 +95,11 @@ Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la to <scroll_list.columns label="" name="action"/> </scroll_list> </panel> + <panel name="members_header"> + <text_editor name="member_action_description"> + Ce pouvoir permet « d'expulser des membres de ce groupe ». Seul un propriétaire peut expulser un autre propriétaire. + </text_editor> + </panel> <panel name="roles_footer"> <text name="static"> Nom du rôle @@ -120,6 +125,11 @@ Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la to <scroll_list.columns label="" name="action"/> </scroll_list> </panel> + <panel name="roles_header"> + <text_editor name="role_action_description"> + Ce pouvoir permet « d'expulser des membres de ce groupe ». Seul un propriétaire peut expulser un autre propriétaire. + </text_editor> + </panel> <panel name="actions_footer"> <text_editor name="action_description"> Ce pouvoir permet d'expulser des membres du groupe. Seul un propriétaire peut expulser un autre propriétaire. diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml index 0a78a1bb93cf34cc75059fc97d90e4d728049ea5..ee167fce99d9176aa0415626ea6ba697dbaf23a0 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml @@ -3,7 +3,7 @@ <panel.string name="log_in_to_change"> se connecter pour changer </panel.string> - <button label="Vider l'historique" name="clear_cache" tool_tip="Effacer le cache de l'image de connexion, du dernier lieu, de l'historique des téléportations, Web et de texture."/> + <button label="Vider l'historique" name="clear_cache" tool_tip="Effacez le cache de l'image de connexion, du dernier lieu, de l'historique des téléportations, du Web et des textures."/> <text name="cache_size_label_l"> (endroits, images, web, historique des recherches) </text> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml index 7ac84fb4bd171dda15da9c5d45c1584f40ec554a..c010fa9e90650cc30d9cd69e33b083e97ac929e1 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml @@ -15,9 +15,9 @@ Web : </text> <radio_group name="preferred_browser_behavior"> - <radio_item label="Utiliser mon navigateur (Chrome, Firefox, IE) pour tous les liens" name="internal" tool_tip="Utiliser le navigateur web système par défaut pour l'aide, les liens, etc. Non recommandé en mode plein écran." value="0"/> - <radio_item label="Utiliser le navigateur intégré pour les liens Second Life uniquement" name="external" tool_tip="Utilisez le navigateur web système par défaut pour l'aide, les liens Web, etc. Le navigateur intégré sera uniquement utilisé pour les liens LindenLab/SecondLife." value="1"/> - <radio_item label="Utiliser le navigateur intégré pour tous les liens" name="external_all" tool_tip="Utilisez le navigateur intégré pour obtenir de l’aide, ouvrir des liens etc. Ce navigateur s’ouvre dans [APP_NAME]." value="2"/> + <radio_item label="Utilisez le navigateur intégré par défaut pour tous les liens" name="internal" tool_tip="Utiliser le navigateur web système par défaut pour l'aide, les liens, etc. Non recommandé en mode plein écran." value="0"/> + <radio_item label="Utilisez le navigateur intégré pour les liens Second Life uniquement" name="external" tool_tip="Utilisez le navigateur web système par défaut pour trouver de l'aide, les liens web, etc. Le navigateur intégré ne sera utilisé que pour les liens LindenLab / SeconLife." value="1"/> + <radio_item label="Utilisez le navigateur intégré pour tous les liens" name="external_all" tool_tip="Utilisez le navigateur intégré pour obtenir de l’aide, ouvrir des liens etc. Ce navigateur s’ouvre dans [APP_NAME]." value="2"/> </radio_group> <check_box initial_value="true" label="Activer les plugins" name="browser_plugins_enabled"/> <check_box initial_value="true" label="Accepter les cookies" name="cookies_enabled"/> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/fr/panel_preferences_uploads.xml index c1d9d15a93ffab6bd70f6a9fec773298d01ded93..76a08da7dbfad0dbe3715371960d36705ad611ff 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_uploads.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_uploads.xml @@ -12,6 +12,9 @@ <text name="title_animation"> Animations </text> + <text name="title_model"> + Modèles + </text> <text name="upload_help"> Pour modifier un dossier de destination, cliquez-droit sur ce dossier dans l’inventaire et faites votre choix "Utiliser comme défaut pour" diff --git a/indra/newview/skins/default/xui/fr/role_actions.xml b/indra/newview/skins/default/xui/fr/role_actions.xml index cc29066ba26e37e39b70ef25a04d0a63430c4585..d10de3843772d7f4b1025ea04ceec33373c52b17 100644 --- a/indra/newview/skins/default/xui/fr/role_actions.xml +++ b/indra/newview/skins/default/xui/fr/role_actions.xml @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <role_actions> <action_set description="Ces pouvoirs permettent d'ajouter et de supprimer des membres du groupe et permettent aux nouveaux membres de rejoindre le groupe sans recevoir d'invitation." name="Membership"> - <action description="Inviter des membres dans ce groupe" longdescription="Invitez des personnes à rejoindre ce groupe en utilisant le bouton Inviter dans l'onglet Membres de la section Rôles." name="member invite" value="1"/> - <action description="Expulser des membres du groupe" longdescription="Expulsez des personnes de ce groupe en utilisant le bouton Expulser dans l'onglet Membres de la section Rôles. Un propriétaire peut expulser tout le monde à l'exception des autres propriétaires. Si vous n'êtes pas propriétaire, vous pouvez expulser un membre d'un groupe uniquement si il n'a que le rôle Tous et AUCUN autre rôle. Pour supprimer des membres des rôles, vous devez disposer du pouvoir correspondant." name="member eject" value="2"/> + <action description="Inviter des membres dans ce groupe" longdescription="Invitez des personnes à rejoindre ce groupe en utilisant le bouton « Inviter » dans la section Rôles et membres > onglet Membres" name="member invite" value="1"/> + <action description="Expulser les Membres appartenant du rôle « Tous » de ce groupe" longdescription="Expulsez des personnes de ce groupe en utilisant le bouton « Expulser » dans la section Rôles et membres > onglet Membres Un propriétaire peut expulser tout le monde à l’exception des autres propriétaires. Si vous n’êtes pas propriétaire, vous pouvez expulser un membre d’un groupe si, et uniquement s'il n’a que le rôle Tous et AUCUN autre rôle. Pour supprimer des membres des rôles, vous devez disposer du pouvoir « Supprimer des membres des rôles »" name="member eject" value="2"/> <action description="Gérer la liste des résidents bannis" longdescription="Permet au membre du groupe de bannir / d'annuler le bannissement des résidents de ce groupe." name="allow ban" value="51"/> <action description="Activer Inscription libre et modifier les frais d'inscription" longdescription="Activez Inscription libre pour permettre aux nouveaux membres de s'inscrire sans invitation, et changez les frais d'inscription dans la section Général." name="member options" value="3"/> </action_set> <action_set description="Ces pouvoirs permettent d'ajouter, de supprimer et de modifier les rôles dans le groupe et d'y assigner des membres et des pouvoirs." name="Roles"> - <action description="Créer des rôles" longdescription="Créez de nouveaux rôles dans l'onglet Rôles de la section Rôles." name="role create" value="4"/> - <action description="Supprimer des rôles" longdescription="Supprimez des rôles dans l'onglet Rôles de la section Rôles." name="role delete" value="5"/> - <action description="Changer les noms, les titres et les descriptions des rôles et indiquer si les membres des rôles sont rendus publics" longdescription="Changez les noms, les titres et les descriptions des rôles, et indiquez si les membres des rôles sont rendus publics. Vous pouvez le faire au bas de l'onglet Rôles dans la section Rôles, après avoir sélectionné un rôle." name="role properties" value="6"/> - <action description="Attribuer des rôles limités" longdescription="Assignez des membres aux rôles dans la liste Rôles assignés (section Rôles > onglet Membres). Un membre avec ce pouvoir peut uniquement ajouter des membres à un rôle dans lequel le responsable de l'assignation est déjà présent." name="role assign member limited" value="7"/> - <action description="Attribuer tous les rôles" longdescription="Assignez des membres à n'importe quel rôle dans la liste Rôles assignés (section Rôles > onglet Membres). *AVERTISSEMENT* Tout membre disposant de ce pouvoir peut s'assigner lui-même, ainsi que tout autre membre non-propriétaire, à des rôles disposant de pouvoirs plus importants, et accéder potentiellement à des pouvoirs proches de ceux d'un propriétaire. Assurez-vous de bien comprendre ce que vous faites avant d'attribuer ce pouvoir." name="role assign member" value="8"/> - <action description="Destituer des membres de leurs rôles" longdescription="Supprimez des membres des rôles dans la liste Rôles assignés (section Rôles > onglet Membres). Les propriétaires ne peuvent pas être supprimés." name="role remove member" value="9"/> - <action description="Modifier les pouvoirs d'un rôle" longdescription="Attribuez et supprimez des pouvoirs pour chaque rôle dans la liste Pouvoirs attribués (section Rôles > onglet Rôles). *AVERTISSEMENT* Tout membre dans un rôle avec ce pouvoir peut s'attribuer à lui-même, ainsi qu'à tout autre membre non-propriétaire, tous les pouvoirs, et accéder potentiellement à des pouvoirs proches de ceux d'un propriétaire. Assurez-vous de bien comprendre ce que vous faites avant d'attribuer ce pouvoir." name="role change actions" value="10"/> + <action description="Créer des rôles" longdescription="Créez de nouveaux rôles dans la section Rôles et membres > onglet Rôles" name="role create" value="4"/> + <action description="Supprimer des rôles" longdescription="Supprimez des rôles dans la section Rôles et membres > onglet Rôles" name="role delete" value="5"/> + <action description="Changer les noms, les titres et les descriptions des rôles et indiquer si les membres des rôles sont rendus publics" longdescription="Changez les noms, les titres et les descriptions des rôles, et indiquez si les membres des rôles sont rendus publics. Vous pouvez le faire au bas de la section Rôles et membres > onglet Rôles après avoir sélectionné un rôle." name="role properties" value="6"/> + <action description="Attribuer des rôles limités" longdescription="Assignez des membres aux rôles dans la liste Rôles assignés (section Rôles et membres > onglet Membres). Un membre avec ce pouvoir peut uniquement ajouter des membres à un rôle dans lequel le responsable de l’assignation est déjà présent." name="role assign member limited" value="7"/> + <action description="Attribuer tous les rôles" longdescription="Attribuez aux membres tout rôle dans la liste des Rôles assignés (Section Rôles et membres > onglet Membres). AVERTISSEMENT* Tout membre disposant de ce pouvoir peut s’assigner lui-même, ainsi que tout autre membre non-propriétaire, à des rôles disposant de pouvoirs plus importants que ceux dont ils disposent actuellement, et accéder potentiellement à des pouvoirs proches de ceux d'un propriétaire. Assurez-vous de bien comprendre ce que vous faites avant d'attribuer ce pouvoir." name="role assign member" value="8"/> + <action description="Destituer des membres de leurs rôles" longdescription="Supprimez des membres des rôles dans la liste Rôles assignés (section Rôles et membres > onglet Membres). Les propriétaires ne peuvent pas être supprimés." name="role remove member" value="9"/> + <action description="Modifier les pouvoirs d'un rôle" longdescription="Attribuez et Supprimez des pouvoirs pour chaque rôle figurant dans la liste Pouvoirs assignés (Section Rôles et membres > onglet Rôles). *AVERTISSEMENT* Tout membre dans un rôle avec ce pouvoir peut s'attribuer à lui-même, ainsi qu'à tout autre membre non-propriétaire, tous les pouvoirs, et accéder potentiellement à des pouvoirs proches de ceux d'un propriétaire. Assurez-vous de bien comprendre ce que vous faites avant d'attribuer ce pouvoir." name="role change actions" value="10"/> </action_set> <action_set description="Ces pouvoirs permettent de modifier le profil public du groupe, sa charte et son logo." name="Group Identity"> <action description="Modifier le profil public du groupe" longdescription="Modifiez la charte, le logo et l'affichage dans les résultats de recherche. Vous pouvez faire cela dans la section Général." name="group change identity" value="11"/> diff --git a/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml index 056889126432a1aa8f18426a667d50759e0e36e1..b9fe6d76e7cd60db909e548ee20e557b8a6e1b17 100644 --- a/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml +++ b/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml @@ -31,7 +31,7 @@ <text name="AvatarPhysicsDetailText"> Basso </text> - <text name="ShadersText"> + <text name="HardwareText"> Hardware </text> <slider label="Memoria texture (MB):" name="GraphicsCardTextureMemory" tool_tip="Spazio di memoria da assegnare alle texture. Utilizza la memoria della scheda video come impostazione predefinita. La riduzione di questa impostazione potrebbe migliorare il rendimento ma potrebbe anche rendere le texture poco definite."/> @@ -56,6 +56,9 @@ <text name="antialiasing restart"> (richiede il riavvio) </text> + <text name="MeshText"> + Mesh + </text> <slider label="Dettagli mesh terreno:" name="TerrainMeshDetail"/> <text name="TerrainMeshDetailText"> Basso @@ -72,6 +75,9 @@ <text name="FlexibleMeshDetailText"> Basso </text> + <text name="ShadersText"> + Shader + </text> <check_box initial_value="true" label="Acqua trasparente" name="TransparentWater"/> <check_box initial_value="true" label="Mappatura urti e brillantezza" name="BumpShiny"/> <check_box initial_value="true" label="Luci locali" name="LocalLights"/> @@ -111,5 +117,6 @@ <button label="Ripristina impostazioni consigliate" name="Defaults"/> <button label="OK" label_selected="OK" name="OK"/> <button label="Annulla" label_selected="Annulla" name="Cancel"/> - <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxNonImpostors"/> + <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxComplexity"/> + <check_box label="RenderAvatarMaxNonImpostors" name="RenderAvatarMaxNonImpostors"/> </floater> diff --git a/indra/newview/skins/default/xui/it/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/it/menu_people_blocked_gear.xml index 172d712a1e0908a3aa05a2998b33c4142b3276e8..6ef8a330ad20703ecbda8317b219302a339478a6 100644 --- a/indra/newview/skins/default/xui/it/menu_people_blocked_gear.xml +++ b/indra/newview/skins/default/xui/it/menu_people_blocked_gear.xml @@ -3,6 +3,7 @@ <menu_item_call label="Sblocca" name="unblock"/> <menu_item_check label="Blocca voce" name="BlockVoice"/> <menu_item_check label="Blocca testo" name="MuteText"/> + <menu_item_check label="Blocca Particelle" name="MuteParticles"/> <menu_item_check label="Blocca suoni oggetto" name="BlockObjectSounds"/> <menu_item_call label="Profilo..." name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml index cf354b8f4fe96fdb72bfca06080f537b62d5be65..e0c1403491976c27aa2a745d9f09a6efc327d99b 100644 --- a/indra/newview/skins/default/xui/it/notifications.xml +++ b/indra/newview/skins/default/xui/it/notifications.xml @@ -4301,7 +4301,7 @@ Prova a selezionare un pezzo di terreno più piccolo. Un errore interno ha impedito l'aggiornamento del Viewer. Il saldo in L$ o i lotti posseduti mostrati nel Viewer potrebbero non corrispondere ai valori correnti sui server. </notification> <notification name="LargePrimAgentIntersect"> - Non puoi creare prim grandi che intersecano altri giocatori. Riprova quando gli altri giocatori si sono spostati. + Impossibile creare prim larghi che si intersechino con altri residenti. Si prega di riprovare quando gli altri residenti si saranno mossi. </notification> <notification name="PreferenceChatClearLog"> Verranno cancellati i registri delle conversazioni precedenti e tutti gli eventuali backup di quel file. diff --git a/indra/newview/skins/default/xui/it/panel_group_roles.xml b/indra/newview/skins/default/xui/it/panel_group_roles.xml index 4d414d47ce6e1db80893af484d887aa2299f2674..2047793f30ca0a18131075797de2447cd1fbbb71 100644 --- a/indra/newview/skins/default/xui/it/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/it/panel_group_roles.xml @@ -82,6 +82,11 @@ cliccando sui loro nomi. </text> <scroll_list name="member_allowed_actions" tool_tip="Per i dettagli di ogni abilità consentita vedi la scheda abilità ."/> </panel> + <panel name="members_header"> + <text_editor name="member_action_description"> + Questa abilità è “Espelli membri da questo gruppoâ€. Solo un proprietario può espellere un altro proprietario. + </text_editor> + </panel> <panel name="roles_footer"> <text name="static"> Nome del ruolo @@ -104,6 +109,11 @@ cliccando sui loro nomi. </text> <scroll_list name="role_allowed_actions" tool_tip="Per i dettagli di ogni abilità consentita vedi la scheda abilità ."/> </panel> + <panel name="roles_header"> + <text_editor name="role_action_description"> + Questa abilità è “Espelli membri da questo gruppoâ€. Solo un proprietario può espellere un altro proprietario. + </text_editor> + </panel> <panel name="actions_footer"> <text_editor name="action_description"> Questa abilità è 'Espelli i membri dal gruppo'. Solo un Capogruppo puo espellere un'altro Capogruppo. diff --git a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml index 2a73b66c9e677af28da7fe61a13ed6f81401075e..4365dd8caac28da897f4625e4e2e5fe78535f70a 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml @@ -3,7 +3,7 @@ <panel.string name="log_in_to_change"> accedi per cambiare </panel.string> - <button label="Pulisci la cronologia" name="clear_cache" tool_tip="Elimina immagine login, ultimo luogo, cronologia teleport, web e texture cache"/> + <button label="Pulisci la cronologia" name="clear_cache" tool_tip="Elimina immagine login, ultimo luogo, cronologia teletrasporto, cache web e texture"/> <text name="cache_size_label_l"> (Luoghi, immagini, web, cronologia ricerche) </text> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml index 24375e0de1cf1c22904ba7a6efb478faa7afb18e..aa3ff53f4aea97473fded82735133fc78c30d74d 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml @@ -15,9 +15,9 @@ Web: </text> <radio_group name="preferred_browser_behavior"> - <radio_item label="Usa il mio browser (Chrome, Firefox, IE) per tutti i link" name="internal" tool_tip="Utilizza il browser Web predefinito di sistema per l'aiuto, per i link Web e così via. Sconsigliato durante l'esecuzione a tutto schermo." value="0"/> - <radio_item label="Usa il browser incorporato solo per i link di Second Life" name="external" tool_tip="Utilizza il browser Web predefinito di sistema per l'aiuto, per i link Web e così via. Il browser incorporato verrà usato solo per i link LindenLab/SecondLife." value="1"/> - <radio_item label="Usa il browser incorporato per tutti i link" name="external_all" tool_tip="Utilizza il browser Web integrato per l'aiuto, per i link Web e così via. Questo browser si apre in una nuova finestra in [APP_NAME]." value="2"/> + <radio_item label="Usa il browser predefinito per tutti i link" name="internal" tool_tip="Utilizza il browser Web predefinito di sistema per l'aiuto, per i link Web e così via. Sconsigliato durante l'esecuzione a tutto schermo." value="0"/> + <radio_item label="Usa il browser integrato solo per i link di Second Life" name="external" tool_tip="Utilizza il browser Web predefinito di sistema per l’aiuto, link Web, ecc. Il browser integrato verrà utilizzato solo per aprire i link LindenLab/Second Life." value="1"/> + <radio_item label="Usa il browser integrato per tutti i link" name="external_all" tool_tip="Utilizza il browser Web integrato per l'aiuto, per i link Web e così via. Questo browser si apre in una nuova finestra in [APP_NAME]." value="2"/> </radio_group> <check_box initial_value="true" label="Abilita plugin" name="browser_plugins_enabled"/> <check_box initial_value="true" label="Accetta cookie" name="cookies_enabled"/> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/it/panel_preferences_uploads.xml index 5083ceb55204dff374a8ff42d298ca22c6add561..bab2baacd8ca98f7d478a51faa87dbc9a88dce90 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_uploads.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_uploads.xml @@ -12,6 +12,9 @@ <text name="title_animation"> Animazioni </text> + <text name="title_model"> + Modelli + </text> <text name="upload_help"> Per cambiare una cartella di destinazione, fai clic col pulsante destro del mouse sulla cartella desiderata nell'inventario e sceglila "Usa come impostazione predefinita per" diff --git a/indra/newview/skins/default/xui/it/role_actions.xml b/indra/newview/skins/default/xui/it/role_actions.xml index fe9a51d619e0740160ec9a72a44921423ea6ca4a..2bfaea89631d657c14e9fd1a9fc6ecc9ff3f1d68 100644 --- a/indra/newview/skins/default/xui/it/role_actions.xml +++ b/indra/newview/skins/default/xui/it/role_actions.xml @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <role_actions> <action_set description="Queste abilità permettono di aggiungere e rimuovere membri dal gruppo e consentono ai nuovi membri di aderire al gruppo senza invito." name="Membership"> - <action description="Invita persone in questo gruppo" longdescription="Invita persone in questo gruppo usando il pulsante Invita nella sezione Ruoli > scheda membri." name="member invite" value="1"/> - <action description="Espelli membri da questo gruppo" longdescription="Espelli membri dal gruppo usando il pulsante Espelli nella sezione Ruoli > scheda membri. Un proprietario può espellere chiunque tranne un altro proprietario. Se non sei un proprietario, un membro può essere espulso da un gruppo soltanto qualora abbia soltanto il ruolo Tutti, e nessun altro ruolo. Per rimuovere membri dai ruoli, devi avere l'Abilità corrispondente." name="member eject" value="2"/> + <action description="Invita persone in questo gruppo" longdescription="Invita persone a questo gruppo usando il pulsante “Invita†nella sezione Ruoli e Membri > scheda Membri." name="member invite" value="1"/> + <action description="Espelli dal gruppo membri appartenenti alla categoria “Tuttiâ€." longdescription="Espelli membri dal gruppo usando il pulsante Espelli nella sezione Ruoli e Membri > scheda Membri. Un proprietario può espellere chiunque tranne un altro proprietario. Se non sei un proprietario, un membro può essere espulso da un gruppo soltanto qualora abbia soltanto il ruolo Tutti, e nessun altro ruolo. Per rimuovere membri dai ruoli, devi avere l’Abilità corrispondente." name="member eject" value="2"/> <action description="Gestisci lista espulsi" longdescription="Consenti ai membri del gruppo di espellere / riammettere i residenti nel gruppo." name="allow ban" value="51"/> <action description="Seleziona Iscrizione libera e modifica la Quota d'iscrizione" longdescription="Seleziona Iscrizione libera per permettere ai nuovi membri di aderire senza invito e modifica la quota d'iscrizione nella scheda Generale." name="member options" value="3"/> </action_set> <action_set description="Queste Abilità permettono di aggiungere, rimuovere, cambiare i ruoli del gruppo, aggiungere e rimuovere membri dai ruoli, nonché assegnare abilità ai ruoli." name="Roles"> - <action description="Creare nuovi ruoli" longdescription="Crea nuovi ruoli nella sezione Ruoli > scheda ruoli." name="role create" value="4"/> - <action description="Eliminare ruoli" longdescription="Elimina ruoli nella sezione Ruoli > scheda ruoli." name="role delete" value="5"/> - <action description="Cambia i nomi di ruoli, i titoli, le descrizioni e definisci se i membri in quel ruolo sono resi pubblici" longdescription="Cambia i nomi di ruoli, i titoli, le descrizioni e definisci se i membri in quel ruolo sono resi pubblici Viene fatto nella parte inferiore della sezione Ruoli > scheda Ruoli, dopo avere selezionato un ruolo." name="role properties" value="6"/> - <action description="Assegnare membri a ruoli del responsabile" longdescription="Assegna un ruolo a membri nella lista dei ruoli assegnati (sezione Ruoli > scheda membri). Un utente con questa Abilità può aggiungere membri ad un ruolo nel quale il responsabile è già presente." name="role assign member limited" value="7"/> - <action description="Assegnare membri a qualsiasi ruolo" longdescription="Assegna i membri a qualsiasi ruolo nell'elenco dei ruoli assegnati (sezione Ruoli > scheda membri). *ATTENZIONE* Ogni membro con questo Ruolo e Abilità può assegnarsi -- e assegnare ad altri membri non proprietari -- ruoli con poteri maggiori di quelli normalmente concessi, potenzialmente con poteri analoghi a quelli di proprietario. Sii sicuro della scelta prima di assegnare questa Abilità ." name="role assign member" value="8"/> - <action description="Rimuovere membri dai ruoli" longdescription="Rimuovi dai ruoli i membri nell'elenco dei ruoli assegnati (sezione Ruoli > scheda membri). Il proprietario non può essere rimosso." name="role remove member" value="9"/> - <action description="Assegnare e rimuovere abilità nei ruoli" longdescription="Assegna e Rimuovi Abilità per ogni ruolo nell'elenco dei ruoli assegnati (sezione Ruoli > scheda Ruoli). *ATTENZIONE* Ogni membro con questo ruolo e Abilità può assegnarsi -- ed assegnare ad altri membri non proprietari -- tutte le Abilità , che potenzialmente con poteri analoghi a quelli di proprietario. Sii sicuro della scelta prima di assegnare questa Abilità ." name="role change actions" value="10"/> + <action description="Creare nuovi ruoli" longdescription="Crea nuovi ruoli nella sezione Ruoli e Membri > scheda Ruoli." name="role create" value="4"/> + <action description="Eliminare ruoli" longdescription="Elimina ruoli nella sezione Ruoli e Membri > scheda Ruoli." name="role delete" value="5"/> + <action description="Cambia i nomi di ruoli, i titoli, le descrizioni e definisci se i membri in quel ruolo sono resi pubblici" longdescription="Cambia i nomi di ruoli, i titoli, le descrizioni e definisci se i membri in quel ruolo sono resi pubblici. Tutto ciò si può fare andando nella parte inferiore della sezione Ruoli e Membri > scheda Ruoli, dopo avere selezionato un ruolo." name="role properties" value="6"/> + <action description="Assegnare membri a ruoli del responsabile" longdescription="Assegna un ruolo a membri nella lista dei ruoli assegnati (sezione Ruoli e Membri> scheda Membri). Un utente con questa Abilità può solo aggiungere membri ad un ruolo nel quale il responsabile è già presente." name="role assign member limited" value="7"/> + <action description="Assegnare membri a qualsiasi ruolo" longdescription="Assegna un qualunque ruolo a membri nella lista dei ruoli assegnati (sezione Ruoli e membri > scheda Membri). *ATTENZIONE* Ogni membro con questo Ruolo e Abilità può assegnarsi (e assegnare ad altri membri non proprietari) ruoli con poteri maggiori di quelli normalmente concessi, potenzialmente con poteri analoghi a quelli di un proprietario. Sii sicuro della scelta prima di assegnare questa Abilità ." name="role assign member" value="8"/> + <action description="Rimuovere membri dai ruoli" longdescription="Rimuovi dai ruoli i membri nella lista dei ruoli assegnati (sezione Ruoli e Membri> scheda Membri). I proprietari non possono essere rimossi." name="role remove member" value="9"/> + <action description="Assegnare e rimuovere abilità nei ruoli" longdescription="Assegna e rimuovi abilità per ogni ruolo nella lista delle abilità permesse (sezione Ruoli e membri > scheda Ruoli). *ATTENZIONE* Ogni membro con questo ruolo e Abilità può assegnarsi (e assegnare ad altri membri non proprietari) tutte le Abilità , arrivando potenzialmente ad avere poteri analoghi a quelli di un proprietario. Sii sicuro della scelta prima di assegnare questa Abilità ." name="role change actions" value="10"/> </action_set> <action_set description="Queste abilità autorizzano a modificare l'identità di questo gruppo, come ad esempio la modifica della visibilità pubblica, lo statuto e il logo." name="Group Identity"> <action description="Cambiare lo statuto, il logo, e 'Mostra nella ricerca'" longdescription="Cambia statuto, logo e 'Mostra nella ricerca'. Viene fatto nella sezione Generale." name="group change identity" value="11"/> diff --git a/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml index db4e086c13a1db33eb2454e6b99f92a7567ec428..ff7814ffb7e57eead486fc9fad80e09fe69fc823 100644 --- a/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml +++ b/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml @@ -31,7 +31,7 @@ <text name="AvatarPhysicsDetailText"> 低 </text> - <text name="ShadersText"> + <text name="HardwareText"> ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ </text> <slider label="テクスãƒãƒ£ãƒ¡ãƒ¢ãƒª (MB):" name="GraphicsCardTextureMemory" tool_tip="テクスãƒãƒ£ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸãƒ¡ãƒ¢ãƒªã®é‡ã€‚ビデオカードã®ãƒ¡ãƒ¢ãƒªã«æ—¢å®šã€‚数値を下ã’ã‚‹ã¨ãƒ‘フォーマンスãŒå‘上ã—ã¾ã™ãŒã€ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ç²¾åº¦ãŒè½ã¡ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚"/> @@ -56,6 +56,9 @@ <text name="antialiasing restart"> (å†èµ·å‹•å¾Œã«åæ˜ ) </text> + <text name="MeshText"> + メッシュ + </text> <slider label="地形ã®ãƒ¡ãƒƒã‚·ãƒ¥ã®è©³ç´°ï¼š" name="TerrainMeshDetail"/> <text name="TerrainMeshDetailText"> 低 @@ -72,6 +75,9 @@ <text name="FlexibleMeshDetailText"> 低 </text> + <text name="ShadersText"> + シェーダー + </text> <check_box initial_value="true" label="é€æ˜Žãªæ°´" name="TransparentWater"/> <check_box initial_value="true" label="ãƒãƒ³ãƒ—マッピングã¨å…‰æ²¢" name="BumpShiny"/> <check_box initial_value="true" label="è¿‘ãã®å…‰" name="LocalLights"/> @@ -111,5 +117,6 @@ <button label="推奨è¨å®šã«ãƒªã‚»ãƒƒãƒˆ" name="Defaults"/> <button label="OK" label_selected="OK" name="OK"/> <button label="å–り消ã—" label_selected="å–り消ã—" name="Cancel"/> - <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxNonImpostors"/> + <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxComplexity"/> + <check_box label="RenderAvatarMaxNonImpostors" name="RenderAvatarMaxNonImpostors"/> </floater> diff --git a/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml index fcc67f8d89b596c563737fe4d1d4eb557fe9ad0d..f74399f2bac87712f7efd0928f1b8ae218e439e7 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml @@ -3,6 +3,7 @@ <menu_item_call label="ブãƒãƒƒã‚¯è§£é™¤" name="unblock"/> <menu_item_check label="ボイスをブãƒãƒƒã‚¯" name="BlockVoice"/> <menu_item_check label="æ–‡å—をブãƒãƒƒã‚¯" name="MuteText"/> + <menu_item_check label="パーティクルをブãƒãƒƒã‚¯" name="MuteParticles"/> <menu_item_check label="オブジェクトã®ã‚µã‚¦ãƒ³ãƒ‰ã‚’ブãƒãƒƒã‚¯" name="BlockObjectSounds"/> <menu_item_call label="プãƒãƒ•ã‚£ãƒ¼ãƒ«..." name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index 67586efc9e473c642b71fd3832c39b49f1eaeb37..c032e0d1ba2835298d600cc2f394bd270b5e5a51 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -4337,7 +4337,7 @@ M ã‚ーを押ã—ã¦å¤‰æ›´ã—ã¾ã™ã€‚ 内部エラーãŒç™ºç”Ÿã—ãŸãŸã‚ã€ãƒ“ューワをæ£ã—ãæ›´æ–°ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ビューワã«è¡¨ç¤ºã•ã‚Œã‚‹ãƒªãƒ³ãƒ‡ãƒ³ãƒ‰ãƒ«ã®æ®‹é«˜ã¾ãŸã¯åŒºç”»ã®æ‰€æœ‰ã¯ã€ã‚µãƒ¼ãƒãƒ¼ä¸Šã®å®Ÿéš›ã®æ®‹é«˜ã‚’åæ˜ ã—ã¦ã„ãªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ </notification> <notification name="LargePrimAgentIntersect"> - ä»–ã®ãƒ—レイヤーã®é–¢å¿ƒã‚’引ã大ããªãƒ—リムを作æˆã§ãã¾ã›ã‚“。他ã®ãƒ—レイヤーãŒç§»å‹•ã—ãŸã¨ãã«å†è©¦è¡Œã—ã¦ãã ã•ã„。 + ä»–ã®ä½æ°‘ã¨äº¤å·®ã™ã‚‹å¤§ããªãƒ—リムを作æˆã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。他ã®ä½æ°‘ãŒç§»å‹•ã—ãŸå ´åˆã¯å†åº¦ãŠè©¦ã—ãã ã•ã„。 </notification> <notification name="PreferenceChatClearLog"> ã“ã‚Œã«ã‚ˆã‚Šã€éŽåŽ»ã®ä¼šè©±ã®ãƒã‚°ã€ãŠã‚ˆã³ãã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ã™ã¹ã¦ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ãŒå‰Šé™¤ã•ã‚Œã¾ã™ã€‚ diff --git a/indra/newview/skins/default/xui/ja/panel_group_roles.xml b/indra/newview/skins/default/xui/ja/panel_group_roles.xml index 0e231b5b4f80cf24d5a5ca9a9262593a4eff3d01..2549266ee8ddf510428789bed66e28f2489e8736 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_roles.xml @@ -96,6 +96,11 @@ Ctrl ã‚ーを押ã—ãªãŒã‚‰ãƒ¡ãƒ³ãƒãƒ¼åをクリックã™ã‚‹ã¨ <scroll_list.columns label="" name="action"/> </scroll_list> </panel> + <panel name="members_header"> + <text_editor name="member_action_description"> + ã“ã‚Œã¯ã€Œã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’追放ã€ã™ã‚‹èƒ½åŠ›ã§ã™ã€‚「オーナーã€ã®ã¿ãŒä»–ã®ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ã‚’追放ã§ãã¾ã™ã€‚ + </text_editor> + </panel> <panel name="roles_footer"> <text name="static"> 役割å @@ -121,6 +126,11 @@ Ctrl ã‚ーを押ã—ãªãŒã‚‰ãƒ¡ãƒ³ãƒãƒ¼åをクリックã™ã‚‹ã¨ <scroll_list.columns label="" name="action"/> </scroll_list> </panel> + <panel name="roles_header"> + <text_editor name="role_action_description"> + ã“ã‚Œã¯ã€Œã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’追放ã€ã™ã‚‹èƒ½åŠ›ã§ã™ã€‚「オーナーã€ã®ã¿ãŒä»–ã®ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ã‚’追放ã§ãã¾ã™ã€‚ + </text_editor> + </panel> <panel name="actions_footer"> <text_editor name="action_description"> ã“ã‚Œã¯ã€Œã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’追放ã™ã‚‹ã€èƒ½åŠ›ã§ã™ã€‚ オーナーを追放ã§ãã‚‹ã®ã¯ã€åˆ¥ã®ã‚ªãƒ¼ãƒŠãƒ¼ã ã‘ã§ã™ã€‚ diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml index ac5e43c4d41ce064dc268e97e5bac3738af6de60..2ceecf9df6b4c14ce2cd4d4f2d762118fe217149 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml @@ -15,9 +15,9 @@ Web: </text> <radio_group name="preferred_browser_behavior"> - <radio_item label="ã™ã¹ã¦ã®ãƒªãƒ³ã‚¯ã«ãƒžã‚¤ ブラウザ (Chromeã€Firefoxã€IE) を使用" name="internal" tool_tip="デフォルトã®ã‚·ã‚¹ãƒ†ãƒ Web ブラウザã§ãƒ˜ãƒ«ãƒ—ã‚„ Web リンク先ãªã©ã‚’見ã¾ã™ã€‚全画é¢ã§èµ·å‹•ä¸ã«ã¯ãŠã™ã™ã‚ã—ã¾ã›ã‚“。" value="0"/> - <radio_item label="Second Life リンクã«ã®ã¿å†…蔵ブラウザを使用" name="external" tool_tip="ヘルプã€Web リンクãªã©ã«ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚·ã‚¹ãƒ†ãƒ ã®ãƒ–ラウザを使用ã—ã¾ã™ã€‚ 内蔵ブラウザ㯠LindenLab/SecondLife リンクã«ã®ã¿ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚" value="1"/> - <radio_item label="ã™ã¹ã¦ã®ãƒªãƒ³ã‚¯ã«å†…蔵ブラウザを使用" name="external_all" tool_tip="内蔵ブラウザã§ãƒ˜ãƒ«ãƒ—ã‚„ Web リンクãªã©ã‚’見ã¾ã™ã€‚[APP_NAME] 内ã«æ–°ã—ã„ウィンドウã§ã“ã®ãƒ–ラウザãŒé–‹ãã¾ã™ã€‚" value="2"/> + <radio_item label="ã™ã¹ã¦ã®ãƒªãƒ³ã‚¯ã«ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚·ã‚¹ãƒ†ãƒ ã®ãƒ–ラウザを使用ã—ã¾ã™" name="internal" tool_tip="デフォルトã®ã‚·ã‚¹ãƒ†ãƒ Web ブラウザã§ãƒ˜ãƒ«ãƒ—ã‚„ Web リンク先ãªã©ã‚’見ã¾ã™ã€‚全画é¢ã§èµ·å‹•ä¸ã«ã¯ãŠã™ã™ã‚ã—ã¾ã›ã‚“。" value="0"/> + <radio_item label="Second Life リンクã«ã®ã¿å†…蔵ブラウザを使用ã—ã¾ã™" name="external" tool_tip="ヘルプã€Web リンクãªã©ã«ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚·ã‚¹ãƒ†ãƒ ã®ãƒ–ラウザを使用ã—ã¾ã™å†…蔵ブラウザ㯠LindenLab/Second Life リンクã«ã®ã¿ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚" value="1"/> + <radio_item label="ã™ã¹ã¦ã®ãƒªãƒ³ã‚¯ã«å†…蔵ブラウザを使用ã—ã¾ã™" name="external_all" tool_tip="内蔵ブラウザã§ãƒ˜ãƒ«ãƒ—ã‚„ Web リンクãªã©ã‚’見ã¾ã™ã€‚[APP_NAME] 内ã«æ–°ã—ã„ウィンドウã§ã“ã®ãƒ–ラウザãŒé–‹ãã¾ã™ã€‚" value="2"/> </radio_group> <check_box initial_value="true" label="プラグインを有効ã«ã™ã‚‹" name="browser_plugins_enabled"/> <check_box initial_value="true" label="Cookie ã‚’å—ã‘入れる" name="cookies_enabled"/> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/ja/panel_preferences_uploads.xml index b8524aa60fc8416f39a2e55085a195b85f160aa3..50d0e311a0ed1a111b3a0d466ad850da71d3445d 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_uploads.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_uploads.xml @@ -12,6 +12,9 @@ <text name="title_animation"> アニメーション </text> + <text name="title_model"> + モデル + </text> <text name="upload_help"> 宛先フォルダを変更ã™ã‚‹ã«ã¯ã€æŒã¡ç‰©ã§ãã®ãƒ•ã‚©ãƒ«ãƒ€ã‚’å³ã‚¯ãƒªãƒƒã‚¯ã—ã¦ã€"デフォルトã¨ã—ã¦ä½¿ç”¨" ã‚’é¸æŠžã—ã¾ã™ </text> diff --git a/indra/newview/skins/default/xui/ja/role_actions.xml b/indra/newview/skins/default/xui/ja/role_actions.xml index 0dc3528acb5a1e166c9b43a11ce6055e47c2f983..fe90da89c7eea3964f032f33aa69c5ed830df2bd 100644 --- a/indra/newview/skins/default/xui/ja/role_actions.xml +++ b/indra/newview/skins/default/xui/ja/role_actions.xml @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <role_actions> <action_set description="ã“れらã®èƒ½åŠ›ã«ã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã‚’è¿½åŠ ã€æŽ’除ã—ã€æ‹›å¾…状ãªã—ã«æ–°ãƒ¡ãƒ³ãƒãƒ¼ã®å‚åŠ ã‚’èªã‚る権é™ãŒå«ã¾ã‚Œã¾ã™ã€‚" name="Membership"> - <action description="ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«äººã‚’招待" longdescription="「役割ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ã€Œãƒ¡ãƒ³ãƒãƒ¼ã€ã‚¿ãƒ–内ã«ã‚る「招待ã€ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ã€ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ãƒ¡ãƒ³ãƒãƒ¼ã‚’招待ã—ã¾ã™ã€‚" name="member invite" value="1"/> - <action description="メンãƒãƒ¼ã‚’ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰è¿½æ”¾" longdescription="「役割ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ã€Œãƒ¡ãƒ³ãƒãƒ¼ã€ã‚¿ãƒ–内ã«ã‚る「追放ã€ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ã€ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’追放ã—ã¾ã™ã€‚ 「オーナーã€ã¯ã€ä»–ã®ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ä»¥å¤–ã¯èª°ã§ã‚‚追放ã§ãã¾ã™ã€‚ 「オーナーã€ã§ã¯ãªã„人ãŒã€Œå…¨å“¡ï¼ˆEveryone)ã€ã«ã—ã‹å½¹å‰²ãŒãªã„å ´åˆã€ãƒ¡ãƒ³ãƒãƒ¼ã¯ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰è¿½æ”¾ã•ã‚Œã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚ 「役割ã€ã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’削除ã™ã‚‹ã«ã¯ã€ã€Œå½¹å‰²ã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’削除ã€ã®èƒ½åŠ›ãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚" name="member eject" value="2"/> + <action description="ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«äººã‚’招待" longdescription="「役割&メンãƒãƒ¼ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ã€Œãƒ¡ãƒ³ãƒãƒ¼ã€ã‚¿ãƒ–内ã«ã‚る「招待ã€ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ã€ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ãƒ¡ãƒ³ãƒãƒ¼ã‚’招待ã—ã¾ã™ã€‚" name="member invite" value="1"/> + <action description="ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ã€Œå…¨å“¡ï¼ˆEveryone)ã€ã®å½¹å‰²ã«å±žã™ã‚‹ãƒ¡ãƒ³ãƒãƒ¼ã‚’追放ã—ã¾ã™" longdescription="「役割&メンãƒãƒ¼ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã®ã€Œãƒ¡ãƒ³ãƒãƒ¼ã€ã‚¿ãƒ–内ã«ã‚る「追放ã€ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ã€ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’追放ã—ã¾ã™ã€‚「オーナーã€ã¯ã€ä»–ã®ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ä»¥å¤–ã¯èª°ã§ã‚‚追放ã§ãã¾ã™ã€‚「オーナーã€ã§ã¯ãªã„人ãŒã€Œå…¨å“¡ï¼ˆEveryone)ã€ã«ã—ã‹å½¹å‰²ãŒãªã„å ´åˆã€ãƒ¡ãƒ³ãƒãƒ¼ã¯ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰è¿½æ”¾ã•ã‚Œã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚「役割ã€ã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’削除ã™ã‚‹ã«ã¯ã€ã€Œå½¹å‰²ã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’削除ã€ã®èƒ½åŠ›ãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚" name="member eject" value="2"/> <action description="ç«‹å…¥ç¦æ¢ãƒªã‚¹ãƒˆã®ç®¡ç†" longdescription="グループã®ãƒ¡ãƒ³ãƒãƒ¼ã«ã€ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ä½äººã‚’ç«‹å…¥ç¦æ¢/ç«‹å…¥ç¦æ¢è§£é™¤ã§ãるよã†ã«ã—ã¾ã™ã€‚" name="allow ban" value="51"/> <action description="「自由å‚åŠ ã€ã¨ã€Œå…¥ä¼šè²»ã€ã®åˆ‡ã‚Šæ›¿ãˆ" longdescription="「自由å‚åŠ ã€ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã¨ã€æ‹›å¾…ã•ã‚Œãªãã¦ã‚‚æ–°ã—ã„メンãƒãƒ¼ãŒå…¥ä¼šã§ãã¾ã™ã€‚「入会費ã€ã¯ã€Œä¸€èˆ¬ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§å¤‰æ›´ã—ã¾ã™ã€‚" name="member options" value="3"/> </action_set> <action_set description="ã“れらã®èƒ½åŠ›ã«ã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—内ã®å½¹å‰²ã‚’è¿½åŠ ã€å‰Šé™¤ã€å¤‰æ›´ã—ã€å½¹å‰²ã«ãƒ¡ãƒ³ãƒãƒ¼ã‚’è¿½åŠ ã€å‰Šé™¤ã—ã€ã•ã‚‰ã«å½¹å‰²ã¸èƒ½åŠ›ã‚’割り当ã¦ã‚‹æ¨©é™ãŒå«ã¾ã‚Œã¾ã™ã€‚" name="Roles"> - <action description="æ–°ã—ã„役割を作æˆ" longdescription="æ–°ã—ã„「役割ã€ã¯ã€ã€Œå½¹å‰²ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ > 「役割ã€ã‚¿ãƒ–ã§ä½œæˆã—ã¾ã™ã€‚" name="role create" value="4"/> - <action description="役割を削除" longdescription="「役割ã€ã¯ã€ã€Œå½¹å‰²ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ > 「役割ã€ã‚¿ãƒ–ã§å‰Šé™¤ã§ãã¾ã™ã€‚" name="role delete" value="5"/> - <action description="「役割ã€ã®åå‰ã€ã‚¿ã‚¤ãƒˆãƒ«ã€èª¬æ˜Žã€ãƒ¡ãƒ³ãƒãƒ¼å…¬é–‹ã®æœ‰ç„¡ã‚’変更" longdescription="「役割ã€ã®åå‰ã€ã‚¿ã‚¤ãƒˆãƒ«ã€èª¬æ˜Žã€ãƒ¡ãƒ³ãƒãƒ¼å…¬é–‹ã®æœ‰ç„¡ã‚’変更ã—ã¾ã™ã€‚ 「役割ã€ã‚’é¸æŠžå¾Œã«ã€ã€Œå½¹å‰²ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ > 「役割ã€ã‚¿ãƒ– ã®ä¸‹ã§è¨å®šã§ãã¾ã™ã€‚" name="role properties" value="6"/> - <action description="メンãƒãƒ¼ã‚’割り当ã¦äººã®å½¹å‰²ã«å‰²ã‚Šå½“ã¦ã‚‹" longdescription="「割り当ã¦ã‚‰ã‚ŒãŸå½¹å‰²ã€ï¼ˆã€Œå½¹å‰²ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ > 「メンãƒãƒ¼ã€ã‚¿ãƒ–)ã®ãƒªã‚¹ãƒˆã§ã€ãƒ¡ãƒ³ãƒãƒ¼ã‚’「役割ã€ã«å‰²ã‚Šå½“ã¦ã¾ã™ã€‚ ã“ã®èƒ½åŠ›ãŒã‚るメンãƒãƒ¼ã¯ã€å‰²ã‚Šå½“ã¦ã‚‹äººãŒæ—¢ã«æ‰€å±žã™ã‚‹ã€Œå½¹å‰²ã€ã«ã®ã¿ãƒ¡ãƒ³ãƒãƒ¼ã‚’è¿½åŠ ã§ãã¾ã™ã€‚" name="role assign member limited" value="7"/> - <action description="メンãƒãƒ¼ã‚’ä»»æ„ã®å½¹å‰²ã«å‰²ã‚Šå½“ã¦ã‚‹" longdescription="「割り当ã¦ã‚‰ã‚ŒãŸå½¹å‰²ã€ï¼ˆã€Œå½¹å‰²ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ > 「メンãƒãƒ¼ã€ã‚¿ãƒ–)ã®ãƒªã‚¹ãƒˆã§ã€ãƒ¡ãƒ³ãƒãƒ¼ã‚’ã©ã®ã€Œå½¹å‰²ã€ã«ã‚‚割り当ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ *è¦å‘Š* ã“ã®ã€Œèƒ½åŠ›ã€ãŒã‚る「役割ã€ã‚’æŒã¤ãƒ¡ãƒ³ãƒãƒ¼ãªã‚‰èª°ã§ã‚‚自分自身ã¨ã€ä»–ã®ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ä»¥å¤–ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’ç¾åœ¨ä»¥ä¸Šã®æ¨©é™ã®ã‚る「役割ã€ã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¤ã¾ã‚Šã€ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ä»¥å¤–ã®äººãŒã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ã«è¿‘ã„力をæŒã¤ã‚ˆã†è¨å®šã§ãã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚ ã“ã®ã€Œèƒ½åŠ›ã€ã‚’割り当ã¦ã‚‹å‰ã«ã€è‡ªåˆ†ãŒã—よã†ã¨ã—ã¦ã„ã‚‹ã“ã¨ã‚’よã把æ¡ã—ã¦ãã ã•ã„。" name="role assign member" value="8"/> - <action description="役割ã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’解除" longdescription="「割り当ã¦ã‚‰ã‚ŒãŸå½¹å‰²ã€ï¼ˆã€Œå½¹å‰²ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ > 「メンãƒãƒ¼ã€ã‚¿ãƒ–)ã®ãƒªã‚¹ãƒˆã§ã€ãƒ¡ãƒ³ãƒãƒ¼ã‚’「役割ã€ã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã€‚ 「オーナーã€ã¯å‰Šé™¤ã§ãã¾ã›ã‚“。" name="role remove member" value="9"/> - <action description="役割ã®èƒ½åŠ›ã®å‰²ã‚Šå½“ã¦ã¨è§£é™¤" longdescription="「許å¯ã•ã‚ŒãŸèƒ½åŠ›ã€ï¼ˆã€Œå½¹å‰²ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ > 「役割ã€ã‚¿ãƒ–)ã®ãƒªã‚¹ãƒˆã«ã‚ã‚‹ã€å„「役割ã€ã®ã€Œèƒ½åŠ›ã€ã‚’割り当ã¦ãŸã‚Šã€å‰Šé™¤ã—ã¾ã™ã€‚ *è¦å‘Š* ã“ã®ã€Œèƒ½åŠ›ã€ãŒã‚る「役割ã€ã‚’æŒã¤ãƒ¡ãƒ³ãƒãƒ¼ãªã‚‰èª°ã§ã‚‚自分自身ã¨ã€ä»–ã®ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ä»¥å¤–ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’ã™ã¹ã¦ã®ã€Œèƒ½åŠ›ã€ã€ã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¤ã¾ã‚Šã€ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ä»¥å¤–ã®äººãŒã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ã«è¿‘ã„権é™ã‚’æŒã¤ã‚ˆã†è¨å®šã§ãã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚ ã“ã®ã€Œèƒ½åŠ›ã€ã‚’割り当ã¦ã‚‹å‰ã«ã€è‡ªåˆ†ãŒã—よã†ã¨ã—ã¦ã„ã‚‹ã“ã¨ã‚’よã把æ¡ã—ã¦ãã ã•ã„。" name="role change actions" value="10"/> + <action description="æ–°ã—ã„役割を作æˆ" longdescription="æ–°ã—ã„「役割ã€ã¯ã€ã€Œå½¹å‰²&メンãƒãƒ¼ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ > 「役割ã€ã‚¿ãƒ–ã§ä½œæˆã—ã¾ã™ã€‚" name="role create" value="4"/> + <action description="役割を削除" longdescription="「役割ã€ã¯ã€ã€Œå½¹å‰²&メンãƒãƒ¼ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ > 「役割ã€ã‚¿ãƒ–ã§å‰Šé™¤ã—ã¾ã™ã€‚" name="role delete" value="5"/> + <action description="「役割ã€ã®åå‰ã€ã‚¿ã‚¤ãƒˆãƒ«ã€èª¬æ˜Žã€ãƒ¡ãƒ³ãƒãƒ¼å…¬é–‹ã®æœ‰ç„¡ã‚’変更" longdescription="「役割ã€ã®åå‰ã€è‚©æ›¸ãã€èª¬æ˜Žã€ãƒ¡ãƒ³ãƒãƒ¼å…¬é–‹ã®æœ‰ç„¡ã‚’変更ã—ã¾ã™ã€‚「役割ã€ã‚’é¸æŠžå¾Œã«ã€ã€Œå½¹å‰²&メンãƒãƒ¼ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ > 「役割ã€ã‚¿ãƒ– ã®ä¸‹ã§è¨å®šã§ãã¾ã™ã€‚" name="role properties" value="6"/> + <action description="メンãƒãƒ¼ã‚’割り当ã¦äººã®å½¹å‰²ã«å‰²ã‚Šå½“ã¦ã‚‹" longdescription="「割り当ã¦ã‚‰ã‚ŒãŸå½¹å‰²ã€ï¼ˆã€Œå½¹å‰²&メンãƒãƒ¼ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ > 「メンãƒãƒ¼ã€ã‚¿ãƒ–)ã®ãƒªã‚¹ãƒˆã§ã€ãƒ¡ãƒ³ãƒãƒ¼ã‚’「役割ã€ã«å‰²ã‚Šå½“ã¦ã¾ã™ã€‚ã“ã®èƒ½åŠ›ãŒã‚るメンãƒãƒ¼ã¯ã€å‰²ã‚Šå½“ã¦ã‚‹äººãŒæ—¢ã«æ‰€å±žã™ã‚‹ã€Œå½¹å‰²ã€ã«ã®ã¿ãƒ¡ãƒ³ãƒãƒ¼ã‚’è¿½åŠ ã§ãã¾ã™ã€‚" name="role assign member limited" value="7"/> + <action description="メンãƒãƒ¼ã‚’ä»»æ„ã®å½¹å‰²ã«å‰²ã‚Šå½“ã¦ã‚‹" longdescription="「割り当ã¦ã‚‰ã‚ŒãŸå½¹å‰²ã€ï¼ˆã€Œå½¹å‰²&メンãƒãƒ¼ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ > 「メンãƒãƒ¼ã€ã‚¿ãƒ–)ã®ãƒªã‚¹ãƒˆã§ã€ãƒ¡ãƒ³ãƒãƒ¼ã‚’「ã„ãšã‚Œã‹ã®å½¹å‰²ã€ã«å‰²ã‚Šå½“ã¦ã¾ã™ã€‚*è¦å‘Š* ã“ã®ã€Œèƒ½åŠ›ã€ãŒã‚る「役割ã€ã‚’æŒã¤ãƒ¡ãƒ³ãƒãƒ¼ãªã‚‰èª°ã§ã‚‚自分自身ã¨ã€ä»–ã®ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ä»¥å¤–ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’ç¾åœ¨ä»¥ä¸Šã®æ¨©é™ã®ã‚る「役割ã€ã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¤ã¾ã‚Šã€ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ä»¥å¤–ã®äººãŒã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ã«è¿‘ã„力をæŒã¤ã‚ˆã†è¨å®šã§ãã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚ã“ã®ã€Œèƒ½åŠ›ã€ã‚’割り当ã¦ã‚‹å‰ã«ã€è‡ªåˆ†ãŒã—よã†ã¨ã—ã¦ã„ã‚‹ã“ã¨ã‚’よã把æ¡ã—ã¦ãã ã•ã„。" name="role assign member" value="8"/> + <action description="役割ã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’解除" longdescription="「割り当ã¦ã‚‰ã‚ŒãŸå½¹å‰²ã€ï¼ˆã€Œå½¹å‰²&メンãƒãƒ¼ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ > 「メンãƒãƒ¼ã€ã‚¿ãƒ–)ã®ãƒªã‚¹ãƒˆã§ã€ãƒ¡ãƒ³ãƒãƒ¼ã‚’「役割ã€ã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã€‚「オーナーã€ã¯å‰Šé™¤ã§ãã¾ã›ã‚“。" name="role remove member" value="9"/> + <action description="役割ã®èƒ½åŠ›ã®å‰²ã‚Šå½“ã¦ã¨è§£é™¤" longdescription="「許å¯ã•ã‚ŒãŸèƒ½åŠ›ã€ï¼ˆã€Œå½¹å‰²&メンãƒãƒ¼ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ > 「役割ã€ã‚¿ãƒ–)ã®ãƒªã‚¹ãƒˆã§ã€å„「役割ã€ã«å¯¾ã™ã‚‹ã€Œèƒ½åŠ›ã€ã‚’割り当ã¦ãŸã‚Šå‰Šé™¤ã—ãŸã‚Šã—ã¾ã™ã€‚*è¦å‘Š* ã“ã®ã€Œèƒ½åŠ›ã€ãŒã‚る「役割ã€ã‚’æŒã¤ãƒ¡ãƒ³ãƒãƒ¼ãªã‚‰èª°ã§ã‚‚自分自身ã¨ã€ä»–ã®ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ä»¥å¤–ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’ã™ã¹ã¦ã®ã€Œèƒ½åŠ›ã€ã€ã«å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¤ã¾ã‚Šã€ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ä»¥å¤–ã®äººãŒã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ã«è¿‘ã„権é™ã‚’æŒã¤ã‚ˆã†è¨å®šã§ãã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚ã“ã®ã€Œèƒ½åŠ›ã€ã‚’割り当ã¦ã‚‹å‰ã«ã€è‡ªåˆ†ãŒã—よã†ã¨ã—ã¦ã„ã‚‹ã“ã¨ã‚’よã把æ¡ã—ã¦ãã ã•ã„。" name="role change actions" value="10"/> </action_set> <action_set description="ã“れらã®èƒ½åŠ›ã«ã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—ã®å…¬é–‹æ€§ã‚„ç†å¿µã€è¨˜ç« ã®å¤‰æ›´ã¨ã„ã£ãŸã€ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ã‚’ä¿®æ£ã™ã‚‹æ¨©é™ãŒå«ã¾ã‚Œã¾ã™ã€‚" name="Group Identity"> <action description="ç†å¿µã€è¨˜ç« ã€ã€ŒWeb 上ã§å…¬é–‹ã€ã€ãŠã‚ˆã³ã‚°ãƒ«ãƒ¼ãƒ—æƒ…å ±å†…ã§å…¬é–‹ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’変更。" longdescription="ç†å¿µã€è¨˜ç« ã€ã€Œæ¤œç´¢ã«è¡¨ç¤ºã€ã®å¤‰æ›´ã‚’ã—ã¾ã™ã€‚ 「一般ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§è¡Œãˆã¾ã™ã€‚" name="group change identity" value="11"/> diff --git a/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml index 6fa25262ea858c4ced4751a5c401603d51cda4e3..89b3781151cf9454fd91d6ec9a45e398b7c7f728 100644 --- a/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml +++ b/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml @@ -31,7 +31,7 @@ <text name="AvatarPhysicsDetailText"> Baixo </text> - <text name="ShadersText"> + <text name="HardwareText"> Hardware </text> <slider label="Memória da textura (MB):" name="GraphicsCardTextureMemory" tool_tip="Quantidade de memória que deve ser alocada para texturas. O padrão é definido pela memória da placa de vÃdeo. Reduzir este valor pode melhorar o desempenho, mas pode deixar as texturas fora de foco."/> @@ -56,6 +56,9 @@ <text name="antialiasing restart"> (reinicie para ativar) </text> + <text name="MeshText"> + Mesh + </text> <slider label="Detalhe de mesh de terreno:" name="TerrainMeshDetail"/> <text name="TerrainMeshDetailText"> Baixo @@ -72,6 +75,9 @@ <text name="FlexibleMeshDetailText"> Baixo </text> + <text name="ShadersText"> + Sombreamento + </text> <check_box initial_value="true" label="Ãgua transparente" name="TransparentWater"/> <check_box initial_value="true" label="Mapeamento de relevo e brilho" name="BumpShiny"/> <check_box initial_value="true" label="Luzes locais" name="LocalLights"/> @@ -111,5 +117,6 @@ <button label="Redefinir para configurações recomendadas" name="Defaults"/> <button label="OK" label_selected="OK" name="OK"/> <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxNonImpostors"/> + <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxComplexity"/> + <check_box label="RenderAvatarMaxNonImpostors" name="RenderAvatarMaxNonImpostors"/> </floater> diff --git a/indra/newview/skins/default/xui/pt/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/pt/menu_people_blocked_gear.xml index da824589c85e11d2e760a5edbd523dc0efd22088..c0415eb3dcee621af01bac5a8ac8f0b0c8dec949 100644 --- a/indra/newview/skins/default/xui/pt/menu_people_blocked_gear.xml +++ b/indra/newview/skins/default/xui/pt/menu_people_blocked_gear.xml @@ -3,6 +3,7 @@ <menu_item_call label="Desbloquear" name="unblock"/> <menu_item_check label="Bloquear voz" name="BlockVoice"/> <menu_item_check label="Bloquear texto" name="MuteText"/> + <menu_item_check label="Bloquear partÃcula" name="MuteParticles"/> <menu_item_check label="Bloquear sons de objeto" name="BlockObjectSounds"/> <menu_item_call label="Perfil..." name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml index b66f65c682ed1a85f8d3102d6bdb292da7560ad4..a7759e1b04ac0bce915a73fd50f97ddd83a66bf4 100644 --- a/indra/newview/skins/default/xui/pt/notifications.xml +++ b/indra/newview/skins/default/xui/pt/notifications.xml @@ -4289,7 +4289,7 @@ Tente selecionar uma quantidade menor de terreno. Um erro interno impediu que seu visualizador fosse atualizado corretamente. O saldo em L$ ou a propriedade de lotes exibidos em seu visualizador pode não refletir o saldo real nos servidores. </notification> <notification name="LargePrimAgentIntersect"> - Não é possÃvel criar grandes prims que interceptam outros jogadores. Tente novamente quando os outros jogadores tiverem se movido. + Não é possÃvel prims maiores que cruzam com outros residentes. Tente novamente quando os outros residentes tiverem mudado. </notification> <notification name="PreferenceChatClearLog"> Isso excluirá os registros das conversas anteriores e qualquer backup desse arquivo. diff --git a/indra/newview/skins/default/xui/pt/panel_group_roles.xml b/indra/newview/skins/default/xui/pt/panel_group_roles.xml index 162c4743ec9d03c3d1d5133d456885e5973b8808..531701754f56bc377020511ae68ae051fd79b74d 100644 --- a/indra/newview/skins/default/xui/pt/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/pt/panel_group_roles.xml @@ -80,6 +80,11 @@ </text> <scroll_list name="member_allowed_actions" tool_tip="Clique na guia Funções para ver mais detalhes"/> </panel> + <panel name="members_header"> + <text_editor name="member_action_description"> + Esta Habilidade é ‘Expulsar Membros deste Grupo'. Somente os Proprietários podem expulsar outro Proprietário. + </text_editor> + </panel> <panel name="roles_footer"> <text name="static"> Nome da função @@ -102,6 +107,11 @@ </text> <scroll_list name="role_allowed_actions" tool_tip="Clique na guia Funções para ver mais detalhes"/> </panel> + <panel name="roles_header"> + <text_editor name="role_action_description"> + Esta Habilidade é ‘Expulsar Membros deste Grupo'. Somente os Proprietários podem expulsar outro Proprietário. + </text_editor> + </panel> <panel name="actions_footer"> <text_editor name="action_description"> Essa habilidade permite tirar alguem do grupo. Somente o dono do grupo poderá retirar outro dono do grupo. diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml index ce356a6447ae4e85c3658212ac6025e9af890e10..03536f28c378b4da3093577ab4099cd1285c5350 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml @@ -15,8 +15,8 @@ Web: </text> <radio_group name="preferred_browser_behavior"> - <radio_item label="Usar meu navegador (Chrome, Firefox, IE) para todos os links" name="internal" tool_tip="Use o navegador padrão do sistema para consultar a ajuda, abrir links da web etc. Uso em tela inteira não recomendado." value="0"/> - <radio_item label="Usar o navegador incorporado somente para links do SecondLife" name="external" tool_tip="Usar o navegador padrão do sistema para consultar a ajuda, abrir links da web etc. O navegador incorporado será usado somente para os links da LindenLab/SecondLife." value="1"/> + <radio_item label="Usar os sistema padrão de navegador para todos os links" name="internal" tool_tip="Use o navegador padrão do sistema para consultar a ajuda, abrir links da web etc. Uso em tela inteira não recomendado." value="0"/> + <radio_item label="Usar o navegador incorporado somente para links do SecondLife" name="external" tool_tip="Use osistema padrão de navegador para ajudar, abrir links da web etc. O navegador incorporado somente será usado para os links LindenLab/Second Life." value="1"/> <radio_item label="Usar navegador incorporado para todos os links" name="external_all" tool_tip="Use este navegador para consultar a ajuda, abrir links da web, etc. A nova janela é aberta dentro do [APP_NAME]." value="2"/> </radio_group> <check_box initial_value="true" label="Habilitar plugins" name="browser_plugins_enabled"/> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/pt/panel_preferences_uploads.xml index 8050b56f0a46acb6363c7bacd5952956df6f658d..a33413fe127151b7bb50ab7e194877dffd419715 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_uploads.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_uploads.xml @@ -12,6 +12,9 @@ <text name="title_animation"> Animações </text> + <text name="title_model"> + Modelos + </text> <text name="upload_help"> Para alterar a pasta de destino, clique com o botão direito nela no inventário e selecione "Usar como padrão para" diff --git a/indra/newview/skins/default/xui/pt/role_actions.xml b/indra/newview/skins/default/xui/pt/role_actions.xml index cc97669be13b038bf22c2f0ff82fb5f316e9d85c..67ecfa0be3e047db9eafeedecbf1eb67b740db44 100644 --- a/indra/newview/skins/default/xui/pt/role_actions.xml +++ b/indra/newview/skins/default/xui/pt/role_actions.xml @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <role_actions> <action_set description="Esta habilidades incluem poderes de adicionar ou remover membros do grupo e permitir que novos membros se juntem sem um convite." name="Membership"> - <action description="Convidar pessoas para este grupo" longdescription="Em Membros > Cargos, use o botão 'Convidar' para convidar pessoas para entrar no grupo." name="member invite" value="1"/> - <action description="Expulsar membros deste grupo" longdescription="Em Membros > Cargos, use o botão 'Ejetar' para tirar pessoas do grupo. Proprietários podem expulsar qualquer pessoa, menos outro proprietário. Se você não é Proprietário, um membro só pode ser expulso se tiver cargo 'Todos' e nenhum outro cargo. Para destituir um membro de seu cargo, você precisa ter a função 'Destituir membro com cargo'." name="member eject" value="2"/> + <action description="Convidar pessoas para este grupo" longdescription="Convide Pessoas para este Grupo usando o botão ‘Convidar' na seção Cargos e Membros > na aba Membros." name="member invite" value="1"/> + <action description="Expulse Membros pertencendo ao cargo ‘Todos' deste Grupo" longdescription="Expulse Membros deste Grupo usando o botão ‘Expulsar' na seção Cargos e Membros > aba Membros. Proprietários podem expulsar qualquer pessoa, menos outro proprietário. Se você não é Proprietário, um membro só pode ser expulso se tiver cargo 'Todos' e nenhum outro cargo. Para destituir um membro de seu cargo, você precisa ter a função 'Destituir membro com cargo'." name="member eject" value="2"/> <action description="Gerenciar lista de banidos" longdescription="Permite que membros do grupo banam residentes ou revoguem o banimento neste grupo." name="allow ban" value="51"/> <action description="Alterna entre 'Inscrições abertas' e 'Taxa de associação'." longdescription="Ative 'Inscrições abertas' para que novos membros entrem no grupo sem convite, mude a 'Taxa de associação' na seção Geral." name="member options" value="3"/> </action_set> <action_set description="Estas habilidades incluem poderes de adicionar, remover e mudar funções do grupo; adicionar e remover membros em funções e designar habilidades a funções." name="Roles"> - <action description="Criar novas funções" longdescription="Crie novos cargos na guia Cargos." name="role create" value="4"/> - <action description="Apagar funções" longdescription="Exclua cargos na guia Cargos." name="role delete" value="5"/> - <action description="Modificar o nome, tÃtulo e a descrição de cargos, e se o acesso a essas informações é público ou não" longdescription="Modificar o nome, tÃtulo e a descrição de cargos, e se o acesso a essas informações é público ou não. Essas configurações ficam na guia Cargos, depois da seleção do cargo." name="role properties" value="6"/> - <action description="Designar membros para a função do designador" longdescription="Na lista Cargos desempenhados, distribua os cargos aos membros (em Cargos > guia Membros). Membros exercendo esta função devem exercer um cargo para poder adicionar outros membros ao mesmo cargo." name="role assign member limited" value="7"/> - <action description="Designar membros para qualquer função" longdescription="Designe cargos aos membros na lista Cargos desempenhados (Cargos > guia Membros). *ATENÇÃO* Qualquer membro exercendo um cargo com esta função pode se designar -- ou designar outros membros não-proprietários -- a cargos com mais poder do que têm. Ou seja, membros com essa função podem assumir poderes quase iguais aos do proprietário. Pense bem antes de dar esta função a alguém." name="role assign member" value="8"/> - <action description="Remover membros das funções" longdescription="Use a lista Cargos desempenhados para destituir membros de seus cargos (Cargos > guia Membros). Proprietários não podem ser destituÃdos." name="role remove member" value="9"/> - <action description="Determinar e remover habilidades em funções" longdescription="Use a lista Funções autorizadas para adicionar e tirar as funções de cada cargo (Cargos > guia Cargos). *ATENÇÃO* Qualquer membro exercendo um cargo com esta função pode dar a sim mesmo -- ou a outros membros não-proprietários -- todas as funções. Membros excercendo todas as funções podem assumir poderes quase iguais aos do proprietário. Pense bem antes de dar esta função a alguém." name="role change actions" value="10"/> + <action description="Criar novas funções" longdescription="Crie novos Cargos na seção Cargos e Membros > na aba Cargos." name="role create" value="4"/> + <action description="Apagar funções" longdescription="Exclua Cargos na seção Cargos e Membros > na aba Cargos." name="role delete" value="5"/> + <action description="Modificar o nome, tÃtulo e a descrição de cargos, e se o acesso a essas informações é público ou não" longdescription="Modificar o nome, tÃtulo e a descrição de cargos, e se o acesso a essas informações é público ou não. Iste é feito por último na seção Cargos e Membros > na aba Cargos após selecionar um Cargo." name="role properties" value="6"/> + <action description="Designar membros para a função do designador" longdescription="Atribuir Membros para os Cargos na lista de Cargos desempenhados (na seção Cargos e Membros > na aba Membros). Membros exercendo esta função devem exercer um cargo para poder adicionar outros membros ao mesmo cargo." name="role assign member limited" value="7"/> + <action description="Designar membros para qualquer função" longdescription="Atribuir Membros para Qualquer Cargo na lista de Cargos desempenhados (na seção Cargos e Membros > na aba Membros). *ATENÇÃO* Qualquer membro exercendo um cargo com esta função pode-se designar -- para os Cargos com mais poder do que têm atualmente podem assumir poderes quase iguais aos do proprietário. Pense bem antes de dar esta função a alguém." name="role assign member" value="8"/> + <action description="Remover membros das funções" longdescription="Remova os Membros dos Cargos na lista Cargos desempenhados (na seção Cargos e Membros > na aba Membros). Proprietários não podem ser destituÃdos." name="role remove member" value="9"/> + <action description="Determinar e remover habilidades em funções" longdescription="Atribuir e Remover Funções para cada Cargo na lista de Funções Permitidas (na seção Cargos e Membros > na aba Cargos). *ATENÇÃO* Qualquer membro exercendo um cargo com esta função pode dar a sim mesmo -- ou a outros membros não-proprietários -- todas as funções, que podem assumir poderes quase iguais aos do proprietário. Pense bem antes de dar esta função a alguém." name="role change actions" value="10"/> </action_set> <action_set description="Estas habilidade incluem poderes para modificar esta identidade de grupo, como mudar a visibilidade pública, apresentação e insÃgnia." name="Group Identity"> <action description="Mudar apresentação, insÃgnia, 'Publicar na web', e quais membros estão publicamente visÃveis em Informações do Grupo." longdescription="Modificar o estatuto, sÃmbolo e exibição nos resultados de busca. Use a seção Geral." name="group change identity" value="11"/> diff --git a/indra/newview/skins/default/xui/ru/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/ru/floater_preferences_graphics_advanced.xml index 05a02df83e736c7a6f77d862dccc60dc9198b018..efad8678b66f99dbe95ee5321a29ea89a17e665e 100644 --- a/indra/newview/skins/default/xui/ru/floater_preferences_graphics_advanced.xml +++ b/indra/newview/skins/default/xui/ru/floater_preferences_graphics_advanced.xml @@ -31,8 +31,8 @@ <text name="AvatarPhysicsDetailText"> ÐÐ¸Ð·ÐºÐ°Ñ </text> - <text name="ShadersText"> - Ðппаратура + <text name="HardwareText"> + Ðппаратное оборудование </text> <slider label="ПамÑÑ‚ÑŒ Ð´Ð»Ñ Ñ‚ÐµÐºÑтур (МБ):" name="GraphicsCardTextureMemory" tool_tip="Объем памÑти, отводимый Ð´Ð»Ñ Ñ‚ÐµÐºÑтур. По умолчанию – объем памÑти видеокарты. Уменьшение поможет увеличить производительноÑÑ‚ÑŒ, но текÑтуры могут Ñтать размытыми."/> <slider label="ДиÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ñ‚ÑƒÐ¼Ð°Ð½Ð°:" name="fog"/> @@ -56,6 +56,9 @@ <text name="antialiasing restart"> (требуетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿ÑƒÑк) </text> + <text name="MeshText"> + Сетка + </text> <slider label="Ð”ÐµÑ‚Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¼ÐµÑˆÐ°:" name="TerrainMeshDetail"/> <text name="TerrainMeshDetailText"> ÐÐ¸Ð·ÐºÐ°Ñ @@ -72,6 +75,9 @@ <text name="FlexibleMeshDetailText"> ÐÐ¸Ð·ÐºÐ°Ñ </text> + <text name="ShadersText"> + Шейдеры + </text> <check_box initial_value="true" label="ПрозрачноÑÑ‚ÑŒ воды" name="TransparentWater"/> <check_box initial_value="true" label="РельефноÑÑ‚ÑŒ и ÑиÑние" name="BumpShiny"/> <check_box initial_value="true" label="Локальный Ñвет" name="LocalLights"/> @@ -111,5 +117,6 @@ <button label="Вернуть рекомендуемые наÑтройки" name="Defaults"/> <button label="OK" label_selected="OK" name="OK"/> <button label="Отмена" label_selected="Отмена" name="Cancel"/> - <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxNonImpostors"/> + <check_box label="RenderAvatarMaxComplexity (ОтриÑовка аватара макÑ. ÑложноÑти)" name="RenderAvatarMaxComplexity"/> + <check_box label="RenderAvatarMaxNonImpostors (ОтриÑовка макÑ. кол-ва 3-D аватаров)" name="RenderAvatarMaxNonImpostors"/> </floater> diff --git a/indra/newview/skins/default/xui/ru/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/ru/menu_people_blocked_gear.xml index c06776d5f903b4add4220cb85b6d6a5eb8dc74d6..628a545be3fd9b0cbe7e5f3ee07702f06f5b7222 100644 --- a/indra/newview/skins/default/xui/ru/menu_people_blocked_gear.xml +++ b/indra/newview/skins/default/xui/ru/menu_people_blocked_gear.xml @@ -3,6 +3,7 @@ <menu_item_call label="Разблокировать" name="unblock"/> <menu_item_check label="Блокировать голоÑ" name="BlockVoice"/> <menu_item_check label="Блокировать текÑÑ‚" name="MuteText"/> + <menu_item_check label="Блокировка учаÑтка" name="MuteParticles"/> <menu_item_check label="Блокировать звуки объекта" name="BlockObjectSounds"/> <menu_item_call label="Профиль…" name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml index 483cebaac5d89459ed404679fb41a2f5b096c704..8f0fec96072cc6d103c5641e85e7a2d6c24eaf7c 100644 --- a/indra/newview/skins/default/xui/ru/notifications.xml +++ b/indra/newview/skins/default/xui/ru/notifications.xml @@ -4302,7 +4302,7 @@ Ðе удалоÑÑŒ обновить клиент из-за внутренней ошибки. Отображаемый в клиенте Ð±Ð°Ð»Ð°Ð½Ñ L$ или владение учаÑтками могут не ÑоответÑтвовать дейÑтвительному баланÑу на Ñерверах. </notification> <notification name="LargePrimAgentIntersect"> - ÐÐµÐ»ÑŒÐ·Ñ Ñоздавать большие примитивы, которые переÑекаютÑÑ Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ игроками. Повторите попытку, когда другие игроки уйдут. + Ðевозможно Ñоздать большие примитивы, которые переÑекаютÑÑ Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ жителÑми. ПожалуйÑта, повторите попытку, когда другие жители переедут. </notification> <notification name="PreferenceChatClearLog"> Будут удалены журналы предыдущих разговоров и вÑе резервные копии Ñтих файлов. diff --git a/indra/newview/skins/default/xui/ru/panel_group_roles.xml b/indra/newview/skins/default/xui/ru/panel_group_roles.xml index 88af469fbdcd004273876fdd40f7c8318f819e00..b03c300204514cd2b6fe9655ff96bc4672446e15 100644 --- a/indra/newview/skins/default/xui/ru/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/ru/panel_group_roles.xml @@ -79,6 +79,11 @@ </text> <scroll_list name="member_allowed_actions" tool_tip="Данные о каждой доÑтупной ÑпоÑобноÑти Ñм. на вкладке «СпоÑобноÑти»"/> </panel> + <panel name="members_header"> + <text_editor name="member_action_description"> + Ðто возможноÑÑ‚ÑŒ «ИÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑƒÑ‡Ð°Ñтников из группы». Владельца может иÑключить только другой владелец. + </text_editor> + </panel> <panel name="roles_footer"> <text name="static"> Ð˜Ð¼Ñ Ñ€Ð¾Ð»Ð¸ @@ -98,6 +103,11 @@ </text> <scroll_list name="role_allowed_actions" tool_tip="Данные о каждой доÑтупной ÑпоÑобноÑти Ñм. на вкладке «СпоÑобноÑти»"/> </panel> + <panel name="roles_header"> + <text_editor name="role_action_description"> + Ðто возможноÑÑ‚ÑŒ «ИÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑƒÑ‡Ð°Ñтников из группы». Владельца может иÑключить только другой владелец. + </text_editor> + </panel> <panel name="actions_footer"> <text_editor name="action_description"> Ðто ÑпоÑобноÑÑ‚ÑŒ «ИÑключать учаÑтников из группы». Владельца может иÑключить только другой владелец. diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml index d19a35c8b5bdcf0aaa4135606dead849358f4f81..d4d0ef9e7ca84bbac88ea1f422caf3d576fa4b17 100644 --- a/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml @@ -15,9 +15,9 @@ Браузер: </text> <radio_group name="preferred_browser_behavior"> - <radio_item label="ИÑпользовать мой браузер (Chrome, Firefox, IE) Ð´Ð»Ñ Ð²Ñех ÑÑылок" name="internal" tool_tip="Будет иÑпользоватьÑÑ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€, заданный в ÑиÑтеме по умолчанию. Ðе рекомендуетÑÑ, еÑли [APP_NAME] работает в полноÑкранном режиме." value="0"/> - <radio_item label="ИÑпользовать вÑтроенный браузер только Ð´Ð»Ñ ÑÑылок Second Life" name="external" tool_tip="Стандартный браузер ÑиÑтемы будет иÑпользоватьÑÑ Ð´Ð»Ñ Ñправки, ÑÑылок Интернета и Ñ‚.д. Ð’Ñтроенный браузер будет иÑпользоватьÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ ÑÑылок LindenLab/SecondLife." value="1"/> - <radio_item label="ИÑпользовать вÑтроенный браузер Ð´Ð»Ñ Ð²Ñех ÑÑылок" name="external_all" tool_tip="Ð”Ð»Ñ Ð¿Ñ€Ð¾Ñмотра Ñправки, ÑÑылок на веб-Ñтраницы и Ñ‚. д. будет иÑпользоватьÑÑ Ð²Ñтроенный браузер. Ðтот браузер открываетÑÑ ÐºÐ°Ðº новое окно в [APP_NAME]." value="2"/> + <radio_item label="ИÑпользуйте вÑтроенный браузер Ð´Ð»Ñ Ð²Ñех ÑÑылок" name="internal" tool_tip="Будет иÑпользоватьÑÑ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€, заданный в ÑиÑтеме по умолчанию. Ðе рекомендуетÑÑ, еÑли [APP_NAME] работает в полноÑкранном режиме." value="0"/> + <radio_item label="Ð”Ð»Ñ ÑÑылок Second Life Ñледует иÑпользовать только вÑтроенный браузер" name="external" tool_tip="ИÑпользуйте вÑтроенный браузер Ð´Ð»Ñ Ñправки, веб-ÑÑылок и Ñ‚.д. Ð”Ð»Ñ ÑÑылок LindenLab/Second Life Ñледует иÑпользовать только вÑтроенный браузер." value="1"/> + <radio_item label="Ð”Ð»Ñ Ð²Ñех ÑÑылок Ñледует иÑпользовать вÑтроенный браузер" name="external_all" tool_tip="Ð”Ð»Ñ Ð¿Ñ€Ð¾Ñмотра Ñправки, ÑÑылок на веб-Ñтраницы и Ñ‚. д. будет иÑпользоватьÑÑ Ð²Ñтроенный браузер. Ðтот браузер открываетÑÑ ÐºÐ°Ðº новое окно в [APP_NAME]." value="2"/> </radio_group> <check_box initial_value="true" label="Разрешить плагины" name="browser_plugins_enabled"/> <check_box initial_value="true" label="Принимать файлы cookie" name="cookies_enabled"/> diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/ru/panel_preferences_uploads.xml index 487c92bd2a0719ca8bd0f2ab348142e27cfd3282..b30665f8066dbd6cd5be7e1eb67b2febc8bf54bb 100644 --- a/indra/newview/skins/default/xui/ru/panel_preferences_uploads.xml +++ b/indra/newview/skins/default/xui/ru/panel_preferences_uploads.xml @@ -12,6 +12,9 @@ <text name="title_animation"> ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ </text> + <text name="title_model"> + Модели + </text> <text name="upload_help"> Чтобы Ñменить папку назначениÑ, щелкните ее в инвентаре правой кнопкой мыши и выберите "ИÑпользовать по умолчанию длÑ" diff --git a/indra/newview/skins/default/xui/ru/role_actions.xml b/indra/newview/skins/default/xui/ru/role_actions.xml index 02b51f7e1d7094b70345f30aeab4cb1c04e1c8cf..1d526b90e46537a94380f4b67a06f7e2a6ecf763 100644 --- a/indra/newview/skins/default/xui/ru/role_actions.xml +++ b/indra/newview/skins/default/xui/ru/role_actions.xml @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <role_actions> <action_set description="Ðти ÑпоÑобноÑти позволÑÑŽÑ‚ добавлÑÑ‚ÑŒ и удалÑÑ‚ÑŒ учаÑтников группы, а также вÑтупать в группы без приглашениÑ." name="Membership"> - <action description="Приглашение людей в Ñту группу" longdescription="ПриглаÑите людей в группу Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ кнопки «ПриглаÑить» в разделе «Роли» на вкладке «УчаÑтники»." name="member invite" value="1"/> - <action description="Удаление учаÑтников из группы" longdescription="Удалите учаÑтников из группы Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ кнопки «Выкинуть» в разделе «Роли» на вкладке «УчаÑтники». Владелец может удалÑÑ‚ÑŒ вÑех, кроме другого владельца. ЕÑли вы не владелец, то удалить учаÑтника из группы можно только в том Ñлучае, еÑли ему назначена ТОЛЬКО роль «ВÑе». Чтобы удалÑÑ‚ÑŒ учаÑтников из ролей, необходима ÑпоÑобноÑÑ‚ÑŒ «Удаление учаÑтников из ролей»." name="member eject" value="2"/> + <action description="Приглашение людей в Ñту группу" longdescription="ПриглаÑите людей в Ñту группу Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ кнопки «ПриглаÑить» в разделе «Роли и УчаÑтники» на вкладке «УчаÑтники»." name="member invite" value="1"/> + <action description="Удаление учаÑтников, отноÑÑщихÑÑ Ðº роли Â«Ð”Ð»Ñ Ð²Ñех» из Ñтой группы" longdescription="Удалите учаÑтников из Ñтой группы Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ кнопки «Выкинуть» в разделе «Роли и УчаÑтники» на вкладке «УчаÑтники». Владелец может удалÑÑ‚ÑŒ вÑех, кроме другого владельца. ЕÑли вы не владелец, то удалить учаÑтника из группы можно только в том Ñлучае, еÑли он в роли Â«Ð”Ð»Ñ Ð²Ñех» и ÐЕ в одной другой роли. Чтобы удалÑÑ‚ÑŒ учаÑтников из ролей, необходима ÑпоÑобноÑÑ‚ÑŒ «Удаление учаÑтников из ролей»." name="member eject" value="2"/> <action description="Управление ÑпиÑком заблокированных пользователей" longdescription="Разрешить учаÑтнику группы блокировать/разблокировать жителей из Ñтой группы." name="allow ban" value="51"/> <action description="Включение-отключение Ñвободного вÑÑ‚ÑƒÐ¿Ð»ÐµÐ½Ð¸Ñ Ð¸ изменение платы за вÑтупление" longdescription="Включение-отключение Ñвободного вÑтуплениÑ, что обеÑпечит вÑтупление новых учаÑтников без приглашениÑ, а также изменение платы за вÑтупление в разделе «Общие»." name="member options" value="3"/> </action_set> <action_set description="Ðти ÑпоÑобноÑти позволÑÑŽÑ‚ добавлÑÑ‚ÑŒ, удалÑÑ‚ÑŒ и изменÑÑ‚ÑŒ роли группы, добавлÑÑ‚ÑŒ и удалÑÑ‚ÑŒ учаÑтников ролей, а также назначать ролÑм ÑпоÑобноÑти." name="Roles"> - <action description="Создание ролей" longdescription="Создавайте новые роли в разделе «Роли» на вкладке «Роли»." name="role create" value="4"/> - <action description="Удаление ролей" longdescription="УдалÑйте роли в разделе «Роли» на вкладке «Роли»." name="role delete" value="5"/> - <action description="Изменение названий, титулов, опиÑаний ролей, а также наÑтройка публичноÑти их учаÑтников" longdescription="Изменение названий, титулов, опиÑаний ролей, а также наÑтройка публичноÑти их учаÑтников. Ðто можно Ñделать в разделе «Роли», в нижней чаÑти вкладки «Роли» Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ роли." name="role properties" value="6"/> - <action description="Ðазначение учаÑтникам ролей назначающего" longdescription="Ðазначьте учаÑтникам роли в ÑпиÑке «Ðазначенные роли» (раздел «Роли» > вкладка «УчаÑтники»). УчаÑтник Ñ Ñтой ÑпоÑобноÑтью может добавлÑÑ‚ÑŒ учаÑтников только той роли, в которой ÑоÑтоит он Ñам." name="role assign member limited" value="7"/> - <action description="Ðазначение учаÑтников любой роли" longdescription="Ðазначение учаÑтникам любой роли в ÑпиÑке «Ðазначенные роли» (раздел «Роли» > вкладка «УчаÑтники»). *ПРЕДУПРЕЖДЕÐИЕ* Любой учаÑтник роли Ñ Ñтой ÑпоÑобноÑтью может назначить Ñебе (и любому другому учаÑтнику, кроме владельца) роли Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼Ð¸ возможноÑÑ‚Ñми, чем он имеет, и поднÑÑ‚ÑŒÑÑ Ð¿Ñ€Ð°ÐºÑ‚Ð¸Ñ‡ÐµÑки до ÑƒÑ€Ð¾Ð²Ð½Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑŒÑ†Ð°. Прежде чем назначить Ñту ÑпоÑобноÑÑ‚ÑŒ, убедитеÑÑŒ в целеÑообразноÑти Ñтого." name="role assign member" value="8"/> - <action description="Удаление учаÑтников из ролей" longdescription="УдалÑйте учаÑтников из ролей в ÑпиÑке «Ðазначенные роли» (раздел «Роли» > вкладка «УчаÑтники»). Владельцев удалÑÑ‚ÑŒ нельзÑ." name="role remove member" value="9"/> - <action description="Ðазначение и удаление ÑпоÑобноÑтей ролей" longdescription="Ðазначайте и удалÑйте ÑпоÑобноÑти Ð´Ð»Ñ Ñ€Ð¾Ð»ÐµÐ¹ в ÑпиÑке «ДоÑтупные ÑпоÑобноÑти» (раздел «Роли» > вкладка «Роли»). *ПРЕДУПРЕЖДЕÐИЕ* Любой учаÑтник роли Ñ Ñ‚Ð°ÐºÐ¾Ð¹ ÑпоÑобноÑтью может назначить Ñебе (и любому другому учаÑтнику, кроме владельца) вÑе роли, потенциально поднимаÑÑÑŒ практичеÑки до ÑƒÑ€Ð¾Ð²Ð½Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑŒÑ†Ð°. Прежде чем назначить Ñту ÑпоÑобноÑÑ‚ÑŒ, убедитеÑÑŒ в целеÑообразноÑти Ñтого." name="role change actions" value="10"/> + <action description="Создание ролей" longdescription="Создание новых ролей в разделе «Роли и УчаÑтники» на вкладке «Роли»." name="role create" value="4"/> + <action description="Удаление ролей" longdescription="УдалÑйте роли в разделе «Роли и УчаÑтники» на вкладке «Роли»." name="role delete" value="5"/> + <action description="Изменение названий, титулов, опиÑаний ролей, а также наÑтройка публичноÑти их учаÑтников" longdescription="Изменение названий, титулов, опиÑаний ролей, а также наÑтройка публичноÑти их учаÑтников. Ðто можно Ñделать в разделе «Роли и УчаÑтники» в нижней чаÑти вкладки «Роли» поÑле выбора роли." name="role properties" value="6"/> + <action description="Ðазначение учаÑтникам ролей назначающего" longdescription="ПриÑвоение учаÑтникам роли в ÑпиÑке «Ðазначенные роли» (раздел «Роли и УчаÑтники» > вкладка «УчаÑтники»). УчаÑтник Ñ Ñтой возможноÑтью может добавлÑÑ‚ÑŒ учаÑтников только той роли, в которой ÑоÑтоит он Ñам." name="role assign member limited" value="7"/> + <action description="Ðазначение учаÑтников любой роли" longdescription="ПриÑвоение учаÑтникам любой роли в ÑпиÑке «Ðазначенные роли» (раздел «Роли и УчаÑтники» > вкладка «УчаÑтники»). *ПРЕДУПРЕЖДЕÐИЕ* Любой учаÑтник роли Ñ Ñтой ÑпоÑобноÑтью может назначить Ñебе (и любому другому учаÑтнику, кроме владельца) роли Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼Ð¸ возможноÑÑ‚Ñми, чем он имеет, и поднÑÑ‚ÑŒÑÑ Ð¿Ñ€Ð°ÐºÑ‚Ð¸Ñ‡ÐµÑки до ÑƒÑ€Ð¾Ð²Ð½Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑŒÑ†Ð°. Прежде чем назначить Ñту ÑпоÑобноÑÑ‚ÑŒ, убедитеÑÑŒ в целеÑообразноÑти Ñтого." name="role assign member" value="8"/> + <action description="Удаление учаÑтников из ролей" longdescription="УдалÑйте учаÑтников из ролей в ÑпиÑке «Ðазначенные роли» (раздел «Роли» > вкладка «УчаÑтники») Удаление владельцев невозможно." name="role remove member" value="9"/> + <action description="Ðазначение и удаление ÑпоÑобноÑтей ролей" longdescription="Ðазначайте и удалÑйте ÑпоÑобноÑти Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ роли в ÑпиÑке «ДоÑтупные ÑпоÑобноÑти» (раздел «Роли и УчаÑтники» > вкладка «Роли»). *ПРЕДУПРЕЖДЕÐИЕ* Любой учаÑтник роли Ñ Ñ‚Ð°ÐºÐ¾Ð¹ ÑпоÑобноÑтью может назначить Ñебе (и любому другому учаÑтнику, кроме владельца) вÑе роли, потенциально поднимаÑÑÑŒ практичеÑки до ÑƒÑ€Ð¾Ð²Ð½Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑŒÑ†Ð°. Прежде чем назначить Ñту ÑпоÑобноÑÑ‚ÑŒ, убедитеÑÑŒ в целеÑообразноÑти Ñтого." name="role change actions" value="10"/> </action_set> <action_set description="К Ñтим ÑпоÑобноÑÑ‚Ñм отноÑитÑÑ ÑпоÑобноÑÑ‚ÑŒ изменить характер группы, в том чиÑле общедоÑтупноÑÑ‚ÑŒ, уÑтав и Ñимвол." name="Group Identity"> <action description="Изменение уÑтава, Ñимвола и параметра «Показать в поиÑке»" longdescription="Изменение уÑтава, Ñимвола и параметра «Показать в поиÑке». Ðто можно выполнить в разделе «Общие»." name="group change identity" value="11"/> diff --git a/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml index 72c897ad47f87abf86306e74e72829475f982d7b..734ceec89fb6cc01a604c6af34ecbe884be07af8 100644 --- a/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml +++ b/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml @@ -31,7 +31,7 @@ <text name="AvatarPhysicsDetailText"> Düşük </text> - <text name="ShadersText"> + <text name="HardwareText"> Donanım </text> <slider label="Doku BelleÄŸi (MB):" name="GraphicsCardTextureMemory" tool_tip="Dokular için tahsis edilecek bellek miktarı. Varsayılan deÄŸer video kartı belleÄŸidir. Bu deÄŸerin küçültülmesi performansı artırabilir, ama ayrıca dokuları bulanıklaÅŸtırabilir."/> @@ -56,6 +56,9 @@ <text name="antialiasing restart"> (yeniden baÅŸlatma gerektirir) </text> + <text name="MeshText"> + AÄŸ + </text> <slider label="Yüzey AÄŸ Ayrıntısı:" name="TerrainMeshDetail"/> <text name="TerrainMeshDetailText"> Düşük @@ -72,6 +75,9 @@ <text name="FlexibleMeshDetailText"> Düşük </text> + <text name="ShadersText"> + Gölgelendiriciler: + </text> <check_box initial_value="true" label="Saydam Su" name="TransparentWater"/> <check_box initial_value="true" label="Tümsek eÅŸleme ve parlaklık" name="BumpShiny"/> <check_box initial_value="true" label="Yerel Işıklar" name="LocalLights"/> @@ -111,5 +117,6 @@ <button label="Önerilen ayarlara dön" name="Defaults"/> <button label="Tamam" label_selected="Tamam" name="OK"/> <button label="Ä°ptal" label_selected="Ä°ptal" name="Cancel"/> - <check_box label="AvatarMaksKarmaşıklığıİşleme" name="RenderAvatarMaxNonImpostors"/> + <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxComplexity"/> + <check_box label="RenderAvatarMaxNonImpostors" name="RenderAvatarMaxNonImpostors"/> </floater> diff --git a/indra/newview/skins/default/xui/tr/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/tr/menu_people_blocked_gear.xml index e9770a72b8a6b1aa38269367ee6e2a20e3400df0..03cdd3af048b2b6769a93048da0911305974035c 100644 --- a/indra/newview/skins/default/xui/tr/menu_people_blocked_gear.xml +++ b/indra/newview/skins/default/xui/tr/menu_people_blocked_gear.xml @@ -3,6 +3,7 @@ <menu_item_call label="Engellemeyi Kaldır" name="unblock"/> <menu_item_check label="Sesi Engelle" name="BlockVoice"/> <menu_item_check label="Metni Engelle" name="MuteText"/> + <menu_item_check label="Parçacıkları Engelle" name="MuteParticles"/> <menu_item_check label="Nesne Seslerini Engelle" name="BlockObjectSounds"/> <menu_item_call label="Profil..." name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml index d218eb1957fb0e27df7e118a486d097ae5bf1d47..d09d485a147b827cf20a1d36a88f6904de1a8267 100644 --- a/indra/newview/skins/default/xui/tr/notifications.xml +++ b/indra/newview/skins/default/xui/tr/notifications.xml @@ -4295,7 +4295,7 @@ Daha küçük bir arazi parçası seçmeyi deneyin. Dahili bir hata nedeniyle görüntüleyicinizi gerektiÄŸi gibi güncelleyemedik. Görüntüleyicinizde gösterilen L$ bakiyesi veya parsel tutarı sunucular üzerinde gerçekteki bakiyenizi yansıtmayabilir. </notification> <notification name="LargePrimAgentIntersect"> - BaÅŸka oyuncularla kesiÅŸen büyük primler oluÅŸturulamaz. Öbür oyuncular hareket ettiÄŸinde lütfen tekrar deneyin. + DiÄŸer sakinler ile kesiÅŸen büyük primler oluÅŸturulamaz. Lütfen diÄŸer sakinler taşındıktan sonra yeniden deneyin. </notification> <notification name="PreferenceChatClearLog"> Bu, geçmiÅŸ sohbetlerin günlüklerini ve bu dosyanın tüm yedeklerini silecektir. diff --git a/indra/newview/skins/default/xui/tr/panel_group_roles.xml b/indra/newview/skins/default/xui/tr/panel_group_roles.xml index 59a48bbdc27ab4bdf273dd3d03c514c2ef206f1f..f95daae27561c18bbdd320719c88a4ca2bf89cb1 100644 --- a/indra/newview/skins/default/xui/tr/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/tr/panel_group_roles.xml @@ -77,6 +77,11 @@ Ctrl tuÅŸuna basıp adlarına tıklayarak birden fazla Ãœye seçebilirsiniz. </text> <scroll_list name="member_allowed_actions" tool_tip="Ä°zin verilen her bir yeteneÄŸin ayrıntıları için yetenekler sekmesine bakın"/> </panel> + <panel name="members_header"> + <text_editor name="member_action_description"> + Bu Yetenek 'Ãœyeleri bu Gruptan Çıkar' özelliÄŸidir. Bir Sahibi sadece baÅŸka bir Sahip çıkarabilir. + </text_editor> + </panel> <panel name="roles_footer"> <text name="static"> Rol Adı @@ -96,6 +101,11 @@ Ctrl tuÅŸuna basıp adlarına tıklayarak birden fazla Ãœye seçebilirsiniz. </text> <scroll_list name="role_allowed_actions" tool_tip="Ä°zin verilen her bir yeteneÄŸin ayrıntıları için yetenekler sekmesine bakın"/> </panel> + <panel name="roles_header"> + <text_editor name="role_action_description"> + Bu Yetenek 'Ãœyeleri bu Gruptan Çıkar' özelliÄŸidir. Bir Sahibi sadece baÅŸka bir Sahip çıkarabilir. + </text_editor> + </panel> <panel name="actions_footer"> <text_editor name="action_description"> Bu Yetenek 'Bu Gruptan Ãœye Çıkarma'dır. Bir Sahibi sadece baÅŸka bir Sahip çıkartabilir. diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml index 185d557567780ce86082b8d29da82f4f75de2f52..f1ed78cd1e5193f5ca3a658bb0915f49b70c95c3 100644 --- a/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml @@ -3,7 +3,7 @@ <panel.string name="log_in_to_change"> deÄŸiÅŸtirmek için oturum açın </panel.string> - <button label="GeçmiÅŸi Temizle" name="clear_cache" tool_tip="Oturum açma görüntüsünü, son konumu, ışınlama geçmiÅŸini, web ve dokulama önbelleÄŸini temizleyin."/> + <button label="GeçmiÅŸi Temizle" name="clear_cache" tool_tip="Oturum açma görüntüsünü, son konumu, ışınlama geçmiÅŸini, web ve doku önbelleÄŸini temizleyin."/> <text name="cache_size_label_l"> (Konumlar, görüntüler, web, arama geçmiÅŸi) </text> diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml index 91a7cb48b7d1d36eff32a8d5ebbe7795ce2fd46f..a20d0e5ff1a10206495370ff4031f8d6331687e3 100644 --- a/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml @@ -15,8 +15,8 @@ Web: </text> <radio_group name="preferred_browser_behavior"> - <radio_item label="Tüm baÄŸlantılar için kendi tarayıcımı kullan (Chrome, Firefox, IE)" name="internal" tool_tip="Yardım, web baÄŸlantıları vb. için sistemin varsayılan web tarayıcısını kullanın. Tam ekran çalıştırılıyorsa tavsiye edilmez." value="0"/> - <radio_item label="YerleÅŸik tarayıcıyı yalnızca Second Life baÄŸlantıları için kullan" name="external" tool_tip="Yardım, web baÄŸlantıları vb. için sistemin varsayılan web tarayıcısını kullanın. YerleÅŸik tarayıcı yalnızca LindenLab/SecondLife baÄŸlantıları için kullanılır." value="1"/> + <radio_item label="Tüm baÄŸlantılar için sisteme ait varsayılan tarayıcıyı kullan" name="internal" tool_tip="Yardım, web baÄŸlantıları vb. için sistemin varsayılan web tarayıcısını kullanın. Tam ekran çalıştırılıyorsa tavsiye edilmez." value="0"/> + <radio_item label="YerleÅŸik tarayıcıyı yalnızca Second Life baÄŸlantıları için kullan" name="external" tool_tip="Yardım, web baÄŸlantıları vb. için sisteme ait varsayılan web tarayıcıyı kullan YerleÅŸik tarayıcı yalnızca LindenLab/Second Life baÄŸlantıları için kullanılır." value="1"/> <radio_item label="Tüm baÄŸlantılar için yerleÅŸik tarayıcıyı kullan" name="external_all" tool_tip="Yardım, web baÄŸlantıları vs. için dahili web tarayıcısını kullanın. Bu tarayıcı [APP_NAME] içerisinde yeni bir pencere olarak açılır." value="2"/> </radio_group> <check_box initial_value="true" label="Eklentileri etkinleÅŸtir" name="browser_plugins_enabled"/> diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/tr/panel_preferences_uploads.xml index d60a11159dba652c072689684bdf01931ddd2cf3..163f85cfe38c83bf366cc2a388ec4e5247c1f635 100644 --- a/indra/newview/skins/default/xui/tr/panel_preferences_uploads.xml +++ b/indra/newview/skins/default/xui/tr/panel_preferences_uploads.xml @@ -12,6 +12,9 @@ <text name="title_animation"> Animasyonlar </text> + <text name="title_model"> + Modeller + </text> <text name="upload_help"> Bir hedef klasörü deÄŸiÅŸtirmek için, envanterde o klasöre saÄŸ tıklayın ve ÅŸu öğeyi seçin: "Åžunun için varsayılan olarak kullan:" diff --git a/indra/newview/skins/default/xui/tr/role_actions.xml b/indra/newview/skins/default/xui/tr/role_actions.xml index c6cb7ea156048737a7a5070f4abe68e36828dcb5..5e830bddd56f71d90a81b0898a6a5c04e9b765e9 100644 --- a/indra/newview/skins/default/xui/tr/role_actions.xml +++ b/indra/newview/skins/default/xui/tr/role_actions.xml @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <role_actions> <action_set description="Bu Yetenekler arasında gruba Ãœye ekleme ve çıkarma ile davetiye olmadan yeni Ãœyelerin katılmasına imkan tanıma yer alır." name="Membership"> - <action description="KiÅŸileri Bu Gruba Davet Et" longdescription="Roller bölümü > Ãœyeler sekmesindeki "Davet Et" düğmesini kullanarak KiÅŸileri Bu Gruba davet et" name="member invite" value="1"/> - <action description="Ãœyeleri Bu Gruptan Çıkar" longdescription="Roller bölümü > Ãœyeler sekmesindeki "Çıkar" düğmesini kullanarak Ãœyeleri Bu Gruptan çıkar. Bir Sahip, baÅŸka bir Sahip dışında herkesi çıkartabilir. EÄŸer bir Sahip deÄŸilseniz, bir Ãœyenin bir gruptan çıkarılmasının tek yolu, Herkes Rolünde olmaları ve baÅŸka hiçbir Rolde OLMAMALARIDIR. Ãœyeleri Rollerden çıkarmak için, "Ãœyeleri Rollerden Çıkar" YeteneÄŸine sahip olmalısınız." name="member eject" value="2"/> + <action description="KiÅŸileri Bu Gruba Davet Et" longdescription="Roller ve Ãœyeler bölümü > Ãœyeler sekmesindeki 'Davet Et' düğmesini kullanarak KiÅŸileri Bu Gruba davet edin." name="member invite" value="1"/> + <action description="'Herkes' rolüne ait olan Ãœyeleri bu Gruptan çıkar" longdescription="Roller ve Ãœyeler bölümü > Ãœyeler sekmesindeki 'Çıkar' düğmesini kullanarak Ãœyeleri Bu Gruptan çıkarın. Bir Sahip, baÅŸka bir Sahip dışında herkesi çıkarabilir. EÄŸer bir Sahip deÄŸilseniz, bir Ãœye, sadece ve sadece, Herkes Rolündeyse ve baÅŸka HİÇBÄ°R Rolde deÄŸilse bir gruptan çıkarılabilir. Ãœyeleri Rollerden çıkarmak için, 'Ãœyeleri Rollerden Çıkar' YeteneÄŸine sahip olmanız gerekir." name="member eject" value="2"/> <action description="Yasaklı listesini yönet" longdescription="Grup üyelerinin, grupta sakinleri yasaklamalarına / bu yasaklamaları kaldırmalarına izin verir" name="allow ban" value="51"/> <action description=""Katılıma Açık" için Aç/Kapa yapın ve "Kayıt Ãœcretini" deÄŸiÅŸtirin" longdescription="Yeni üyelerin davetiye olmadan katılmasına imkan tanımak amacıyla "Katılıma Açık" için Aç/Kapa yapın ve Genel bölümünde "Kayıt Ãœcretini" deÄŸiÅŸtirin" name="member options" value="3"/> </action_set> <action_set description="Bu Yetenekler arasında grup Rolleri ekleme, kaldırma ve deÄŸiÅŸtirme; Rollere Ãœye ekleme ve kaldırma ile Rollere Yetenek atama imkanları yer alır." name="Roles"> - <action description="Yeni Roller OluÅŸtur" longdescription="Roller bölümü > Roller sekmesinde yeni Roller oluÅŸturun." name="role create" value="4"/> - <action description="Rolleri Silin" longdescription="Roller bölümü > Roller sekmesinde Rolleri silin." name="role delete" value="5"/> - <action description="Rol adlarını, baÅŸlıklarını, açıklamalarını ve Rol üyelerinin kamuyla paylaşılıp paylaşılmadığını deÄŸiÅŸtirin" longdescription="Rol adlarını, baÅŸlıklarını, açıklamalarını ve Rol üyelerinin kamuyla paylaşılıp paylaşılmadığını deÄŸiÅŸtirin. Bu iÅŸlem, bir Rol seçtikten sonra Roller bölümü > Roller sekmesinin altında yapılır." name="role properties" value="6"/> - <action description="Ãœyeleri Atayan Rollerine Atama" longdescription="Ãœyeleri Atanmış Roller listesindeki Rollere atayın (Roller bölümü > Ãœyeler sekmesi). Bu YeteneÄŸe sahip bir Ãœye, sadece atayanın zaten olduÄŸu bir Role Ãœye ekleyebilir." name="role assign member limited" value="7"/> - <action description="Ãœyelere Herhangi bir Role Atama" longdescription="Ãœyeleri Atanmış Roller listesindeki Herhangi Bir Role atayın (Roller bölümü > Ãœyeler sekmesi). *UYARI* Bu YeteneÄŸe sahip olan bir Roldeki herhangi bir Ãœye kendisini -- ve baÅŸka herhangi bir Sahip olmayan Ãœyeyi -- ÅŸu anda sahip olduklarından daha fazla güce sahip olan Rollere atayabilir, kendi güçlerini Grup Sahibininkine yakın bir güce yükseltebilir. Bu YeteneÄŸi atamadan önce ne yaptığınızı bildiÄŸinizden emin olun." name="role assign member" value="8"/> - <action description="Ãœyeleri Rollerden Çıkarma" longdescription="Ãœyeleri Atanmış Roller listesindeki Rollerden çıkartın (Roller bölümü > Ãœyeler sekmesi). Sahipler çıkartılamaz." name="role remove member" value="9"/> - <action description="Rollere Yetenek Atama ve Kaldırma" longdescription="Ä°zin Verilen Yetenekler listesindeki her bir Rol için Rollere Yetenek Atayın ve Kaldırın ((Roller bölümü > Ãœyeler sekmesi). *UYARI* Bu YeteneÄŸe sahip olan bir Roldeki herhangi bir Ãœye kendisine -- ve diÄŸer tüm Sahip olmayan Ãœyelere -- tüm Yetenekleri atayabilir, kendi güçlerini Grup Sahibininkine yakın bir güce yükseltebilir. Bu YeteneÄŸi atamadan önce ne yaptığınızı bildiÄŸinizden emin olun." name="role change actions" value="10"/> + <action description="Yeni Roller OluÅŸtur" longdescription="Roller ve Ãœyeler bölümü > Roller sekmesinde yeni Roller oluÅŸturun." name="role create" value="4"/> + <action description="Rolleri Silin" longdescription="Roller ve Ãœyeler bölümü > Roller sekmesinde Rolleri silin." name="role delete" value="5"/> + <action description="Rol adlarını, baÅŸlıklarını, açıklamalarını ve Rol üyelerinin kamuyla paylaşılıp paylaşılmadığını deÄŸiÅŸtirin" longdescription="Rol adlarını, baÅŸlıklarını, açıklamalarını ve Rol üyelerinin herkese açık ÅŸekilde gösterilip gösterilmeyeceÄŸini deÄŸiÅŸtirin. Bu iÅŸlem, bir Rol seçtikten sonra Roller ve Ãœyeler bölümü > Roller sekmesinin alt kısmında yapılır." name="role properties" value="6"/> + <action description="Ãœyeleri Atayan Rollerine Atama" longdescription="Ãœyeleri Atanmış Roller listesindeki Rollere atayın (Roller ve Ãœyeler bölümü > Ãœyeler sekmesi). Bu YeteneÄŸe sahip bir Ãœye, sadece atayanın zaten bulunduÄŸu bir Role Ãœyeler ekleyebilir." name="role assign member limited" value="7"/> + <action description="Ãœyelere Herhangi bir Role Atama" longdescription="Ãœyeleri Atanmış Roller listesindeki Herhangi Bir Role atayın (Roller ve Ãœyeler bölümü > Ãœyeler sekmesi). *UYARI* Bu YeteneÄŸe sahip olan bir Roldeki herhangi bir Ãœye kendisini -- ve baÅŸka herhangi bir Sahip olmayan Ãœyeyi -- ÅŸu anda sahip olduklarından daha fazla güce sahip olan Rollere atayabilir, potansiyel olarak kendilerini Grup Sahibininkine yakın bir güce yükseltebilir. Bu YeteneÄŸi atamadan önce ne yaptığınızı bildiÄŸinizden emin olun." name="role assign member" value="8"/> + <action description="Ãœyeleri Rollerden Çıkarma" longdescription="Ãœyeleri Atanmış Roller listesindeki Rollerden çıkarın (Roller ve Ãœyeler bölümü > Ãœyeler sekmesi). Sahipler çıkarılamaz." name="role remove member" value="9"/> + <action description="Rollere Yetenek Atama ve Kaldırma" longdescription="Ä°zin Verilen Yetenekler listesindeki her bir Role Yetenek Atayın ve Kaldırın (Roller ve Ãœyeler bölümü > Roller sekmesi).*UYARI* Bu YeteneÄŸe sahip olan bir Roldeki herhangi bir Ãœye kendisine -- ve diÄŸer tüm Sahip olmayan Ãœyelere -- tüm Yetenekleri atayabilir, potansiyel olarak kendilerini Grup Sahibininkine yakın bir güce yükseltebilir. Bu YeteneÄŸi atamadan önce ne yaptığınızı bildiÄŸinizden emin olun." name="role change actions" value="10"/> </action_set> <action_set description="Bu Yetenekler arasında grubun kimliÄŸini deÄŸiÅŸtirme imkanları bulunmaktadır: ÖrneÄŸin bilgilerin kamuya açıklığı, grup bildirgesi ve iÅŸaretleri." name="Group Identity"> <action description="Grup Bildirgesini, Ä°ÅŸaretlerini ve "Aramada gösterilsin" ayarını deÄŸiÅŸtirme" longdescription="Grup Bildirgesini, Ä°ÅŸaretlerini ve "Aramada gösterilsin" ayarını deÄŸiÅŸtirin. Bu iÅŸlem Genel bölümde yapılır." name="group change identity" value="11"/> diff --git a/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml index bbc16dd7e520acc738f1b18f5fa38924a964c813..7d8160a0f0e202ae8171e2ea5033158ed6284152 100644 --- a/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml +++ b/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml @@ -31,7 +31,7 @@ <text name="AvatarPhysicsDetailText"> 低 </text> - <text name="ShadersText"> + <text name="HardwareText"> 硬體 </text> <slider label="æ質記憶體(MB):" name="GraphicsCardTextureMemory" tool_tip="é…置給æ質使用的記憶體é‡ã€‚ é è¨ç‚ºé¡¯åƒå¡è¨˜æ†¶é«”。 é™ä½Žæ¤å€¼å¯ä»¥æå‡æ•ˆèƒ½ï¼Œä½†æ質也會變模糊。"/> @@ -56,6 +56,9 @@ <text name="antialiasing restart"> ï¼ˆé ˆé‡æ–°å•Ÿå‹•ï¼‰ </text> + <text name="MeshText"> + ç¶²é¢ + </text> <slider label="地形網é¢ç´°ç¯€ï¼š" name="TerrainMeshDetail"/> <text name="TerrainMeshDetailText"> 低 @@ -72,6 +75,9 @@ <text name="FlexibleMeshDetailText"> 低 </text> + <text name="ShadersText"> + 著色器 + </text> <check_box initial_value="true" label="清澈é€æ˜Žçš„æ°´" name="TransparentWater"/> <check_box initial_value="true" label="å‡¹å‡¸æ˜ å°„èˆ‡å…‰æ¾¤æ•ˆæžœ" name="BumpShiny"/> <check_box initial_value="true" label="本地光線" name="LocalLights"/> @@ -111,5 +117,6 @@ <button label="é‡è¨ç‚ºæˆ‘們建è°çš„è¨å®š" name="Defaults"/> <button label="確定" label_selected="確定" name="OK"/> <button label="å–消" label_selected="å–消" name="Cancel"/> - <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxNonImpostors"/> + <check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxComplexity"/> + <check_box label="RenderAvatarMaxNonImpostors" name="RenderAvatarMaxNonImpostors"/> </floater> diff --git a/indra/newview/skins/default/xui/zh/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/zh/menu_people_blocked_gear.xml index 8af35457afa0cec818ae99170a673d2dc0026599..db2cfb6f7d433ce9edfd42d08c52930c088e487c 100644 --- a/indra/newview/skins/default/xui/zh/menu_people_blocked_gear.xml +++ b/indra/newview/skins/default/xui/zh/menu_people_blocked_gear.xml @@ -3,6 +3,7 @@ <menu_item_call label="解除å°éŽ–" name="unblock"/> <menu_item_check label="ç¦æ¢èªžéŸ³" name="BlockVoice"/> <menu_item_check label="ç¦æ¢æ–‡å—" name="MuteText"/> + <menu_item_check label="å°éŽ–ç²’å效果" name="MuteParticles"/> <menu_item_check label="ç¦æ¢ç‰©ä»¶è²éŸ³" name="BlockObjectSounds"/> <menu_item_call label="檔案..." name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml index 5949d068c35656edf6389b20adf1b8056a28b147..c418ce72cc61054f35066cfd90b5afdd9bd60796 100644 --- a/indra/newview/skins/default/xui/zh/notifications.xml +++ b/indra/newview/skins/default/xui/zh/notifications.xml @@ -4295,7 +4295,7 @@ SHA1 指紋:[MD5_DIGEST] ç™¼ç”Ÿå…§éƒ¨éŒ¯èª¤ï¼Œæˆ‘å€‘ç„¡æ³•å¦‚å¸¸æ›´æ–°ä½ çš„ç€è¦½å™¨ã€‚ ä½ ç€è¦½å™¨é¡¯ç¤ºçš„ L$ 餘é¡æˆ–æ“有地段,å¯èƒ½å’Œä¼ºæœå™¨ä¸Šçš„æ£ç¢ºæ•¸é¡ä¸ä¸€è‡´ã€‚ </notification> <notification name="LargePrimAgentIntersect"> - 無法建立和其他åƒèˆ‡è€…發生交截的大型幾何元件。 è«‹ç‰å…¶ä»–åƒèˆ‡è€…移開後å†è©¦ã€‚ + 無法建立和其他居民形æˆäº¤æˆªçš„大型幾何元件。 è«‹ç‰å…¶ä»–居民移開原地後å†è©¦ã€‚ </notification> <notification name="PreferenceChatClearLog"> 這動作將刪除先å‰äº¤è«‡çš„記錄,和所有記錄備份。 diff --git a/indra/newview/skins/default/xui/zh/panel_group_roles.xml b/indra/newview/skins/default/xui/zh/panel_group_roles.xml index b4b32c204a5d64d8fa26b73f688c664685bbd5d2..b63f79f9562a9db08138b6e4292d8aacb7333e5a 100644 --- a/indra/newview/skins/default/xui/zh/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/zh/panel_group_roles.xml @@ -79,6 +79,11 @@ </text> <scroll_list name="member_allowed_actions" tool_tip="想çžè§£æ¯ä¸€é …å…許的能力的詳情請查閱能力é 籤。"/> </panel> + <panel name="members_header"> + <text_editor name="member_action_description"> + 這個能力å¯ä»¥ã€Œå°‡æœƒå“¡è¸¢å‡ºæœ¬ç¾¤çµ„ã€ã€‚ å¿…é ˆå…·å‚™æ‰€æœ‰äººèº«åˆ†æ‰èƒ½æŠŠå¦ä¸€ä½æ‰€æœ‰äººè¸¢å‡ºã€‚ + </text_editor> + </panel> <panel name="roles_footer"> <text name="static"> 角色å稱 @@ -98,6 +103,11 @@ </text> <scroll_list name="role_allowed_actions" tool_tip="想çžè§£æ¯ä¸€é …å…許的能力的詳情請查閱能力é 籤。"/> </panel> + <panel name="roles_header"> + <text_editor name="role_action_description"> + 這個能力å¯ä»¥ã€Œå°‡æœƒå“¡è¸¢å‡ºæœ¬ç¾¤çµ„ã€ã€‚ å¿…é ˆå…·å‚™æ‰€æœ‰äººèº«åˆ†æ‰èƒ½æŠŠå¦ä¸€ä½æ‰€æœ‰äººè¸¢å‡ºã€‚ + </text_editor> + </panel> <panel name="actions_footer"> <text_editor name="action_description"> 這個能力å¯ã€Œå°‡æœƒå“¡è‡ªæœ¬ç¾¤çµ„踢出ã€ã€‚ å¿…é ˆæ˜¯æ‰€æœ‰äººæ‰å¯è¸¢å‡ºå¦ä¸€ä½æ‰€æœ‰äººã€‚ diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml b/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml index 64c0fd062e0c8246a7fe47fcb67d569c33f3f667..6ef25ad96ece1579f743799b54b943a0cebe75f4 100644 --- a/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml @@ -15,8 +15,8 @@ 網é : </text> <radio_group name="preferred_browser_behavior"> - <radio_item label="所有連çµéƒ½ç”¨æˆ‘的網é ç€è¦½å™¨ï¼ˆä¾‹å¦‚ Chromeã€Firefoxã€IE)開啟" name="internal" tool_tip="使用系統é è¨çš„ç€è¦½å™¨ç€è¦½å¹«åŠ©ï¼Œé–‹å•Ÿç¶²é 。全螢幕模å¼ä¸‹ä¸å»ºè°é€™éº¼åšã€‚" value="0"/> - <radio_item label="僅在開啟第二人生連çµæ™‚使用內建ç€è¦½å™¨" name="external" tool_tip="使用系統é è¨çš„ç€è¦½å™¨ç€è¦½å¹«åŠ©ï¼Œé–‹å•Ÿç¶²é 。僅在開啟 LindenLab/SecondLife 的連çµæ™‚æ‰æœƒä½¿ç”¨å…§å»ºç€è¦½å™¨ã€‚" value="1"/> + <radio_item label="用內建ç€è¦½å™¨é–‹å•Ÿæ‰€æœ‰é€£çµ" name="internal" tool_tip="使用系統é è¨çš„ç€è¦½å™¨ç€è¦½å¹«åŠ©ï¼Œé–‹å•Ÿç¶²é 。全螢幕模å¼ä¸‹ä¸å»ºè°é€™éº¼åšã€‚" value="0"/> + <radio_item label="僅在開啟Second Life連çµæ™‚使用內建ç€è¦½å™¨" name="external" tool_tip="使用系統é è¨çš„ç€è¦½å™¨ç€è¦½å¹«åŠ©ï¼Œé–‹å•Ÿç¶²é 。僅在開啟「LindenLab/Second Lifeã€çš„連çµæ™‚æ‰æœƒä½¿ç”¨å…§å»ºç€è¦½å™¨ã€‚" value="1"/> <radio_item label="用內建ç€è¦½å™¨é–‹å•Ÿæ‰€æœ‰é€£çµ" name="external_all" tool_tip="使用內建的ç€è¦½å™¨ç€è¦½å¹«åŠ©ï¼Œé–‹å•Ÿç¶²é 。該ç€è¦½å™¨å°‡é€éŽ [APP_NAME] 開啟新視窗。" value="2"/> </radio_group> <check_box initial_value="true" label="啟用外掛" name="browser_plugins_enabled"/> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/zh/panel_preferences_uploads.xml index b34b4109d8be2c33a4f285bae57cb10739658f18..9bb2f956d0464ec9b9dc72a8c43c0ca20a2bb077 100644 --- a/indra/newview/skins/default/xui/zh/panel_preferences_uploads.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_uploads.xml @@ -12,6 +12,9 @@ <text name="title_animation"> 動作 </text> + <text name="title_model"> + 模型 + </text> <text name="upload_help"> è¦è®Šæ›´ç›®çš„資料夾,請在收ç´å€ç”¨æ»‘é¼ å³éµæŒ‰ä¸€ä¸‹æ–°çš„資料夾並é¸æ“‡ 「用作é è¨å€¼ã€ diff --git a/indra/newview/skins/default/xui/zh/role_actions.xml b/indra/newview/skins/default/xui/zh/role_actions.xml index 044232510408ece45399e8e6b499c309c963afd4..e3b0eb1261c8088bf4c188a75e58c320f6252e9f 100644 --- a/indra/newview/skins/default/xui/zh/role_actions.xml +++ b/indra/newview/skins/default/xui/zh/role_actions.xml @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <role_actions> <action_set description="這些能力包括新增或移除群組æˆå“¡å’Œå…許新æˆå“¡ä¸å—é‚€å³å¯åŠ 入群組的ç‰æ¬ŠåŠ›ã€‚" name="Membership"> - <action description="é‚€è«‹ä»–äººåŠ å…¥é€™å€‹ç¾¤çµ„" longdescription="æ¬²é‚€è«‹ä»–äººåŠ å…¥é€™å€‹ç¾¤çµ„ï¼Œè«‹æŒ‰ä¸‹è§’è‰²æ¬„ä¸‹çš„æˆå“¡é 籤ä¸çš„「邀請ã€æŒ‰éˆ•ã€‚" name="member invite" value="1"/> - <action description="將會員由這個群組ä¸è¸¢å‡º" longdescription="欲將æˆå“¡å¾žç¾¤çµ„踢出,請按下角色欄下的æˆå“¡é 籤ä¸çš„「踢出ã€æŒ‰éˆ•ã€‚ 所有人å¯è¸¢å‡ºä»»ä½•ä¸å…·æ‰€æœ‰äººè§’色的人。 å¦‚æžœä½ ä¸æ˜¯æ‰€æœ‰äººï¼Œä¸€ä½æˆå“¡åªåœ¨ä»–僅屬於「任何人ã€è§’色且沒有其他角色的情æ³ä¸‹è¢«è¸¢å‡ºç¾¤çµ„。 欲å¸é™¤æˆå“¡çš„è§’è‰²ï¼Œä½ å¿…é ˆæœ‰ã€Œå¸é™¤æˆå“¡è§’色ã€çš„能力。" name="member eject" value="2"/> + <action description="é‚€è«‹ä»–äººåŠ å…¥é€™å€‹ç¾¤çµ„" longdescription="æ¬²é‚€è«‹ä»–äººåŠ å…¥é€™å€‹ç¾¤çµ„ï¼Œè«‹æŒ‰ä¸‹ã€Œè§’è‰²åŠæˆå“¡ã€æ¬„目下「æˆå“¡ã€é 籤的「邀請ã€æŒ‰éˆ•ã€‚" name="member invite" value="1"/> + <action description="把屬於「任何人ã€è§’色的æˆå“¡è¸¢å‡ºé€™å€‹ç¾¤çµ„" longdescription="欲將æˆå“¡å¾žç¾¤çµ„踢出,請按「角色åŠæˆå“¡ã€æ¬„下「æˆå“¡ã€é 籤的「踢出ã€æŒ‰éˆ•ã€‚ 所有人å¯è¸¢å‡ºä»»ä½•ä¸å…·æ‰€æœ‰äººè§’色的人。 å¦‚æžœä½ ä¸æ˜¯æ‰€æœ‰äººï¼Œä¸€ä½æˆå“¡åªåœ¨ä»–僅屬於「任何人ã€è§’色且沒有其他角色的情æ³ä¸‹è¢«è¸¢å‡ºç¾¤çµ„。 欲å¸é™¤æˆå“¡çš„è§’è‰²ï¼Œä½ å¿…é ˆæœ‰ã€Œå¸é™¤æˆå“¡è§’色ã€çš„能力。" name="member eject" value="2"/> <action description="管ç†ç¦å…¥æ¸…å–®" longdescription="å…許群組æˆå“¡æŽ§åˆ¶æ˜¯å¦ç¦æ¢æˆ–é‡æ–°å…è¨±å±…æ°‘åŠ å…¥é€™å€‹ç¾¤çµ„ã€‚" name="allow ban" value="51"/> <action description="切æ›ã€Œå…è²»è‡ªç”±åŠ å…¥ã€è¨å®šï¼Œæ›´æ”¹ã€ŒåŠ 入費ã€ã€‚" longdescription="切æ›ã€Œå…è²»è‡ªç”±åŠ å…¥ã€è¨å®šï¼Œè®“æˆå“¡ä¸å—邀也å¯åŠ 入,並在基本è¨å®šæ¬„æ›´æ”¹ã€ŒåŠ å…¥è²»ã€ã€‚" name="member options" value="3"/> </action_set> <action_set description="這些能力包括新增ã€ç§»é™¤ã€æ›´æ”¹ç¾¤çµ„角色,新增或移除æˆå“¡çš„角色,和為角色è¨å®šèƒ½åŠ›ç‰æ¬ŠåŠ›ã€‚" name="Roles"> - <action description="創立一個新角色" longdescription="到角色欄的角色é 籤,å¯ä»¥å»ºç«‹æ–°è§’色。" name="role create" value="4"/> - <action description="刪除角色" longdescription="到角色欄的角色é 籤,å¯ä»¥åˆªé™¤è§’色。" name="role delete" value="5"/> - <action description="變更角色å稱ã€é 銜ã€æ述,è¨å®šè§’色的æˆå“¡å單是å¦å…¬é–‹" longdescription="變更角色å稱ã€é 銜ã€æ述,è¨å®šè§’色的æˆå“¡å單是å¦å…¬é–‹ã€‚ é¸å–一個角色後,å¯åˆ°è§’色欄底下的角色é 籤完æˆé€™å‹•ä½œã€‚" name="role properties" value="6"/> - <action description="賦予æˆå“¡ã€ŒæŒ‡æ´¾è€…ã€è§’色" longdescription="從已知的指派角色ä¸é¸æ“‡è‹¥å¹²ï¼Œè³¦äºˆçµ¦æˆå“¡ï¼ˆè§’色欄 > æˆå“¡é 籤)。 有這能力的æˆå“¡ï¼Œåªèƒ½æŠŠä»–è‡ªå·±å·²èº«è² çš„è§’è‰²è³¦äºˆçµ¦åˆ¥çš„æˆå“¡ã€‚" name="role assign member limited" value="7"/> - <action description="賦予æˆå“¡ã€Œä»»ä½•äººã€è§’色" longdescription="從已知的指派角色ä¸ï¼Œè³¦äºˆçµ¦æˆå“¡ã€Œä»»ä½•äººã€è§’色(角色欄 > æˆå“¡é 籤)。 *è¦å‘Š* ä»»ä½•èº«è² å…·é€™èƒ½åŠ›çš„è§’è‰²çš„æˆå“¡ï¼Œéƒ½å¯ä»¥æŠŠæŸäº›è§’色賦予自己或任何ä¸æ˜¯æ‰€æœ‰äººçš„æˆå“¡ï¼Œå› æ¤ä½¿è‡ªå·±æˆ–別人得到比ç¾åœ¨æ›´å¤šçš„權力,最終å¯èƒ½æ“有近似「所有人ã€çš„權力。 è³¦äºˆé€™é …èƒ½åŠ›ä¹‹å‰ï¼Œæ•¬è«‹æ…Žé‡è€ƒæ…®ã€‚" name="role assign member" value="8"/> - <action description="由角色ä¸ç§»é™¤æˆå“¡" longdescription="從已知的指派角色ä¸é¸æ“‡ï¼Œå°‡æˆå“¡å¸é™¤è©²è§’色(角色欄 > æˆå“¡é 籤)。 所有人角色ä¸å¾—被å¸é™¤ã€‚" name="role remove member" value="9"/> - <action description="è¨å®šæˆ–å¸é™¤è§’色能力" longdescription="從å…許的能力清單ä¸é¸æ“‡ï¼Œç‚ºæ¯ä¸€è§’色è¨å®šæˆ–å¸é™¤è©²èƒ½åŠ›ï¼ˆè§’色欄 > 角色é 籤)。 *è¦å‘Š* ä»»ä½•èº«è² å…·æœ‰é€™èƒ½åŠ›çš„è§’è‰²çš„æˆå“¡ï¼Œéƒ½å¯ä»¥å°‡æ‰€æœ‰èƒ½åŠ›è³¦äºˆè‡ªå·±å’Œä»»ä½•å…¶ä»–ä¸æ˜¯æ‰€æœ‰äººçš„äººï¼Œå› æ¤è®“自己或他人æå‡ç‚ºè¿‘似「所有人ã€æ¬ŠåŠ›çš„層級。 è³¦äºˆé€™é …èƒ½åŠ›ä¹‹å‰ï¼Œæ•¬è«‹æ…Žé‡è€ƒæ…®ã€‚" name="role change actions" value="10"/> + <action description="創立一個新角色" longdescription="到「角色åŠæˆå“¡ã€æ¬„的「角色ã€é 籤,å¯ä»¥å»ºç«‹æ–°è§’色。" name="role create" value="4"/> + <action description="刪除角色" longdescription="到「角色åŠæˆå“¡ã€æ¬„的「角色ã€é 籤,å¯ä»¥åˆªé™¤è§’色。" name="role delete" value="5"/> + <action description="變更角色å稱ã€é 銜ã€æ述,è¨å®šè§’色的æˆå“¡å單是å¦å…¬é–‹" longdescription="變更角色å稱ã€é 銜ã€æ述,è¨å®šè§’色的æˆå“¡å單是å¦å…¬é–‹ã€‚ é¸å–一個角色後,å¯åˆ°ã€Œè§’色åŠæˆå“¡ã€æ¬„底下的「角色ã€é 籤完æˆé€™å‹•ä½œã€‚" name="role properties" value="6"/> + <action description="賦予æˆå“¡ã€ŒæŒ‡æ´¾è€…ã€è§’色" longdescription="從已知的指派角色ä¸é¸æ“‡è‹¥å¹²ï¼Œè³¦äºˆçµ¦æˆå“¡ï¼ˆã€Œè§’色åŠæˆå“¡ã€æ¬„ > 「æˆå“¡ã€é 籤)。 有這能力的æˆå“¡ï¼Œåªèƒ½æŠŠä»–è‡ªå·±å·²èº«è² çš„è§’è‰²è³¦äºˆçµ¦åˆ¥çš„æˆå“¡ã€‚" name="role assign member limited" value="7"/> + <action description="賦予æˆå“¡ã€Œä»»ä½•äººã€è§’色" longdescription="從已知的指派角色ä¸ï¼Œè³¦äºˆçµ¦æˆå“¡ã€Œä»»ä½•äººã€è§’色(「角色åŠæˆå“¡ã€æ¬„ > 「æˆå“¡ã€é 籤)。 *è¦å‘Š* ä»»ä½•èº«è² å…·é€™èƒ½åŠ›çš„è§’è‰²çš„æˆå“¡ï¼Œéƒ½å¯ä»¥æŠŠæŸäº›è§’色賦予自己或任何ä¸æ˜¯æ‰€æœ‰äººçš„æˆå“¡ï¼Œå› æ¤ä½¿è‡ªå·±æˆ–別人得到比ç¾åœ¨æ›´å¤šçš„權力,最終å¯èƒ½æ“有近似「所有人ã€çš„權力。 è³¦äºˆé€™é …èƒ½åŠ›ä¹‹å‰ï¼Œæ•¬è«‹æ…Žé‡è€ƒæ…®ã€‚" name="role assign member" value="8"/> + <action description="由角色ä¸ç§»é™¤æˆå“¡" longdescription="從已知的指派角色ä¸é¸æ“‡ï¼Œå°‡æˆå“¡å¸é™¤è©²è§’色(「角色åŠæˆå“¡ã€æ¬„ > 「æˆå“¡ã€é 籤)。 所有人ä¸å¾—被å¸é™¤ã€‚" name="role remove member" value="9"/> + <action description="è¨å®šæˆ–å¸é™¤è§’色能力" longdescription="從å…許的能力清單ä¸é¸æ“‡ï¼Œç‚ºæ¯ä¸€è§’色è¨å®šæˆ–å¸é™¤è©²èƒ½åŠ›ï¼ˆã€Œè§’色åŠæˆå“¡ã€æ¬„ > 「角色ã€é 籤)。 *è¦å‘Š* ä»»ä½•èº«è² å…·æœ‰é€™èƒ½åŠ›çš„è§’è‰²çš„æˆå“¡ï¼Œéƒ½å¯ä»¥å°‡æ‰€æœ‰èƒ½åŠ›è³¦äºˆè‡ªå·±å’Œä»»ä½•å…¶ä»–ä¸æ˜¯æ‰€æœ‰äººçš„äººï¼Œå› æ¤è®“自己或他人æå‡ç‚ºè¿‘似「所有人ã€æ¬ŠåŠ›çš„層級。 è³¦äºˆé€™é …èƒ½åŠ›ä¹‹å‰ï¼Œæ•¬è«‹æ…Žé‡è€ƒæ…®ã€‚" name="role change actions" value="10"/> </action_set> <action_set description="這些能力包括有權修改群組身份,例如更改公開程度ã€è¦ç« å’Œå¾½ç« ã€‚" name="Group Identity"> <action description="更改è¦ç« ã€å¾½ç« ,è¨å®šæ˜¯å¦ã€Œé¡¯ç¤ºæ–¼æœå°‹çµæžœã€ã€‚" longdescription="更改è¦ç« ã€å¾½ç« ,è¨å®šæ˜¯å¦ã€Œé¡¯ç¤ºæ–¼æœå°‹çµæžœã€ã€‚ 這å¯åœ¨ã€ŒåŸºæœ¬è³‡æ–™ã€æ¬„è¨å®šã€‚" name="group change identity" value="11"/> diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp index 3dd327591e17dd2b28a4968a09d55ed478d451a5..d1dddf8e7e248a485a3c4c4aa8f7cf60cfd014b1 100644 --- a/indra/newview/tests/llviewernetwork_test.cpp +++ b/indra/newview/tests/llviewernetwork_test.cpp @@ -236,7 +236,7 @@ namespace tut std::string("https://secondlife.com/helpers/")); ensure_equals("Agni login page", LLGridManager::getInstance()->getLoginPage("util.agni.lindenlab.com"), - std::string("http://viewer-login.agni.lindenlab.com/")); + std::string("https://viewer-splash.secondlife.com/")); ensure("Agni is a system grid", LLGridManager::getInstance()->isSystemGrid("util.agni.lindenlab.com")); @@ -261,7 +261,7 @@ namespace tut std::string("http://aditi-secondlife.webdev.lindenlab.com/helpers/")); ensure_equals("Aditi login page", LLGridManager::getInstance()->getLoginPage("util.aditi.lindenlab.com"), - std::string("http://viewer-login.agni.lindenlab.com/")); + std::string("https://viewer-splash.secondlife.com/")); ensure("Aditi is a system grid", LLGridManager::getInstance()->isSystemGrid("util.aditi.lindenlab.com")); } @@ -309,7 +309,7 @@ namespace tut std::string("https://secondlife.com/helpers/")); ensure_equals("Agni login page", LLGridManager::getInstance()->getLoginPage("util.agni.lindenlab.com"), - std::string("http://viewer-login.agni.lindenlab.com/")); + std::string("https://viewer-splash.secondlife.com/")); ensure("Agni is a system grid", LLGridManager::getInstance()->isSystemGrid("util.agni.lindenlab.com")); @@ -333,7 +333,7 @@ namespace tut std::string("http://aditi-secondlife.webdev.lindenlab.com/helpers/")); ensure_equals("Aditi login page", LLGridManager::getInstance()->getLoginPage("util.aditi.lindenlab.com"), - std::string("http://viewer-login.agni.lindenlab.com/")); + std::string("https://viewer-splash.secondlife.com/")); ensure("Aditi is a system grid", LLGridManager::getInstance()->isSystemGrid("util.aditi.lindenlab.com")); @@ -422,7 +422,7 @@ namespace tut std::string("https://secondlife.com/helpers/")); ensure_equals("getLoginPage", LLGridManager::getInstance()->getLoginPage(), - std::string("http://viewer-login.agni.lindenlab.com/")); + std::string("https://viewer-splash.secondlife.com/")); ensure_equals("update url base for Agni", // relies on agni being the default std::string("https://update.secondlife.com/update"), LLGridManager::getInstance()->getUpdateServiceURL());