diff options
299 files changed, 4331 insertions, 1001 deletions
@@ -526,3 +526,4 @@ c9ce2295012995e3cf5c57bcffcb4870b94c649f 5.0.1-release cea1632c002c065985ebea15eeeb4aac90f50545 5.0.2-release 02c24e9f4f7d8aa0de75f27817dda098582f4936 5.0.3-release 022709ef76a331cac1ba6ef1a6da8a5e9ef63f5a 5.0.4-release +b4d76b5590fdf8bab72c64442353753a527cbc44 5.0.5-release diff --git a/doc/contributions.txt b/doc/contributions.txt index 0fb6110adb..eb012ee318 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -214,6 +214,7 @@ Ansariel Hiller MAINT-6953 MAINT-7028 MAINT-7059 + MAINT-6519 Aralara Rajal Arare Chantilly CHUIBUG-191 @@ -770,6 +771,8 @@ Kadah Coba STORM-1060 STORM-1843 Jondan Lundquist +Joosten Briebers + MAINT-7074 Josef Munster Josette Windlow Juilan Tripsa diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 16b42dad38..142e56dfca 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -323,26 +323,27 @@ if (LL_TESTS) LL_ADD_INTEGRATION_TEST(lldeadmantimer "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lldependencies "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llerror "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(lleventdispatcher "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(lleventcoro "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(lleventfilter "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llframetimer "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(llheteromap "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llinstancetracker "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(llleap "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(llpounceable "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(llprocess "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llprocessor "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llprocinfo "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llrand "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llsdserialize "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llsingleton "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(llstreamqueue "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llstring "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lltrace "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lltreeiterators "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lluri "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llunits "" "${test_libs}") LL_ADD_INTEGRATION_TEST(stringize "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(lleventdispatcher "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(lleventcoro "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(llprocess "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(llleap "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(llstreamqueue "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(llpounceable "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(llheteromap "" "${test_libs}") ## llexception_test.cpp isn't a regression test, and doesn't need to be run ## every build. It's to help a developer make implementation choices about diff --git a/indra/llcommon/lleventfilter.cpp b/indra/llcommon/lleventfilter.cpp index 64ab58adcd..9fb18dc67d 100644 --- a/indra/llcommon/lleventfilter.cpp +++ b/indra/llcommon/lleventfilter.cpp @@ -38,12 +38,18 @@ #include "llerror.h" // LL_ERRS #include "llsdutil.h" // llsd_matches() +/***************************************************************************** +* LLEventFilter +*****************************************************************************/ LLEventFilter::LLEventFilter(LLEventPump& source, const std::string& name, bool tweak): LLEventStream(name, tweak), mSource(source.listen(getName(), boost::bind(&LLEventFilter::post, this, _1))) { } +/***************************************************************************** +* LLEventMatching +*****************************************************************************/ LLEventMatching::LLEventMatching(const LLSD& pattern): LLEventFilter("matching"), mPattern(pattern) @@ -64,6 +70,9 @@ bool LLEventMatching::post(const LLSD& event) return LLEventStream::post(event); } +/***************************************************************************** +* LLEventTimeoutBase +*****************************************************************************/ LLEventTimeoutBase::LLEventTimeoutBase(): LLEventFilter("timeout") { @@ -148,6 +157,14 @@ bool LLEventTimeoutBase::tick(const LLSD&) return false; // show event to other listeners } +bool LLEventTimeoutBase::running() const +{ + return mMainloop.connected(); +} + +/***************************************************************************** +* LLEventTimeout +*****************************************************************************/ LLEventTimeout::LLEventTimeout() {} LLEventTimeout::LLEventTimeout(LLEventPump& source): @@ -164,3 +181,231 @@ bool LLEventTimeout::countdownElapsed() const { return mTimer.hasExpired(); } + +/***************************************************************************** +* LLEventBatch +*****************************************************************************/ +LLEventBatch::LLEventBatch(std::size_t size): + LLEventFilter("batch"), + mBatchSize(size) +{} + +LLEventBatch::LLEventBatch(LLEventPump& source, std::size_t size): + LLEventFilter(source, "batch"), + mBatchSize(size) +{} + +void LLEventBatch::flush() +{ + // copy and clear mBatch BEFORE posting to avoid weird circularity effects + LLSD batch(mBatch); + mBatch.clear(); + LLEventStream::post(batch); +} + +bool LLEventBatch::post(const LLSD& event) +{ + mBatch.append(event); + // calling setSize(same) performs the very check we want + setSize(mBatchSize); + return false; +} + +void LLEventBatch::setSize(std::size_t size) +{ + mBatchSize = size; + // changing the size might mean that we have to flush NOW + if (mBatch.size() >= mBatchSize) + { + flush(); + } +} + +/***************************************************************************** +* LLEventThrottleBase +*****************************************************************************/ +LLEventThrottleBase::LLEventThrottleBase(F32 interval): + LLEventFilter("throttle"), + mInterval(interval), + mPosts(0) +{} + +LLEventThrottleBase::LLEventThrottleBase(LLEventPump& source, F32 interval): + LLEventFilter(source, "throttle"), + mInterval(interval), + mPosts(0) +{} + +void LLEventThrottleBase::flush() +{ + // flush() is a no-op unless there's something pending. + // Don't test mPending because there's no requirement that the consumer + // post() anything but an isUndefined(). This is what mPosts is for. + if (mPosts) + { + mPosts = 0; + alarmCancel(); + // This is not to set our alarm; we are not yet requesting + // any notification. This is just to track whether subsequent post() + // calls fall within this mInterval or not. + timerSet(mInterval); + // copy and clear mPending BEFORE posting to avoid weird circularity + // effects + LLSD pending = mPending; + mPending.clear(); + LLEventStream::post(pending); + } +} + +LLSD LLEventThrottleBase::pending() const +{ + return mPending; +} + +bool LLEventThrottleBase::post(const LLSD& event) +{ + // Always capture most recent post() event data. If caller wants to + // aggregate multiple events, let them retrieve pending() and modify + // before calling post(). + mPending = event; + // Always increment mPosts. Unless we count this call, flush() does + // nothing. + ++mPosts; + // We reset mTimer on every flush() call to let us know if we're still + // within the same mInterval. So -- are we? + F32 timeRemaining = timerGetRemaining(); + if (! timeRemaining) + { + // more than enough time has elapsed, immediately flush() + flush(); + } + else + { + // still within mInterval of the last flush() call: have to defer + if (! alarmRunning()) + { + // timeRemaining tells us how much longer it will be until + // mInterval seconds since the last flush() call. At that time, + // flush() deferred events. + alarmActionAfter(timeRemaining, boost::bind(&LLEventThrottleBase::flush, this)); + } + } + return false; +} + +void LLEventThrottleBase::setInterval(F32 interval) +{ + F32 oldInterval = mInterval; + mInterval = interval; + // If we are not now within oldInterval of the last flush(), we're done: + // this will only affect behavior starting with the next flush(). + F32 timeRemaining = timerGetRemaining(); + if (timeRemaining) + { + // We are currently within oldInterval of the last flush(). Figure out + // how much time remains until (the new) mInterval of the last + // flush(). Bt we don't actually store a timestamp for the last + // flush(); it's implicit. There are timeRemaining seconds until what + // used to be the end of the interval. Move that endpoint by the + // difference between the new interval and the old. + timeRemaining += (mInterval - oldInterval); + // If we're called with a larger interval, the difference is positive + // and timeRemaining increases. + // If we're called with a smaller interval, the difference is negative + // and timeRemaining decreases. The interesting case is when it goes + // nonpositive: when the new interval means we can flush immediately. + if (timeRemaining <= 0.0f) + { + flush(); + } + else + { + // immediately reset mTimer + timerSet(timeRemaining); + // and if mAlarm is running, reset that too + if (alarmRunning()) + { + alarmActionAfter(timeRemaining, boost::bind(&LLEventThrottleBase::flush, this)); + } + } + } +} + +F32 LLEventThrottleBase::getDelay() const +{ + return timerGetRemaining(); +} + +/***************************************************************************** +* LLEventThrottle implementation +*****************************************************************************/ +LLEventThrottle::LLEventThrottle(F32 interval): + LLEventThrottleBase(interval) +{} + +LLEventThrottle::LLEventThrottle(LLEventPump& source, F32 interval): + LLEventThrottleBase(source, interval) +{} + +void LLEventThrottle::alarmActionAfter(F32 interval, const LLEventTimeoutBase::Action& action) +{ + mAlarm.actionAfter(interval, action); +} + +bool LLEventThrottle::alarmRunning() const +{ + return mAlarm.running(); +} + +void LLEventThrottle::alarmCancel() +{ + return mAlarm.cancel(); +} + +void LLEventThrottle::timerSet(F32 interval) +{ + mTimer.setTimerExpirySec(interval); +} + +F32 LLEventThrottle::timerGetRemaining() const +{ + return mTimer.getRemainingTimeF32(); +} + +/***************************************************************************** +* LLEventBatchThrottle +*****************************************************************************/ +LLEventBatchThrottle::LLEventBatchThrottle(F32 interval, std::size_t size): + LLEventThrottle(interval), + mBatchSize(size) +{} + +LLEventBatchThrottle::LLEventBatchThrottle(LLEventPump& source, F32 interval, std::size_t size): + LLEventThrottle(source, interval), + mBatchSize(size) +{} + +bool LLEventBatchThrottle::post(const LLSD& event) +{ + // simply retrieve pending value and append the new event to it + LLSD partial = pending(); + partial.append(event); + bool ret = LLEventThrottle::post(partial); + // The post() call above MIGHT have called flush() already. If it did, + // then pending() was reset to empty. If it did not, though, but the batch + // size has grown to the limit, flush() anyway. If there's a limit at all, + // of course. Calling setSize(same) performs the very check we want. + setSize(mBatchSize); + return ret; +} + +void LLEventBatchThrottle::setSize(std::size_t size) +{ + mBatchSize = size; + // Changing the size might mean that we have to flush NOW. Don't forget + // that 0 means unlimited. + if (mBatchSize && pending().size() >= mBatchSize) + { + flush(); + } +} diff --git a/indra/llcommon/lleventfilter.h b/indra/llcommon/lleventfilter.h index 66f3c14869..ff8fc9bc7f 100644 --- a/indra/llcommon/lleventfilter.h +++ b/indra/llcommon/lleventfilter.h @@ -177,6 +177,9 @@ public: /// Cancel timer without event void cancel(); + /// Is this timer currently running? + bool running() const; + protected: virtual void setCountdown(F32 seconds) = 0; virtual bool countdownElapsed() const = 0; @@ -215,4 +218,162 @@ private: LLTimer mTimer; }; +/** + * LLEventBatch: accumulate post() events (LLSD blobs) into an LLSD Array + * until the array reaches a certain size, then call listeners with the Array + * and clear it back to empty. + */ +class LL_COMMON_API LLEventBatch: public LLEventFilter +{ +public: + // pass batch size + LLEventBatch(std::size_t size); + // construct and connect + LLEventBatch(LLEventPump& source, std::size_t size); + + // force out the pending batch + void flush(); + + // accumulate an event and flush() when big enough + virtual bool post(const LLSD& event); + + // query or reset batch size + std::size_t getSize() const { return mBatchSize; } + void setSize(std::size_t size); + +private: + LLSD mBatch; + std::size_t mBatchSize; +}; + +/** + * LLEventThrottleBase: construct with a time interval. Regardless of how + * frequently you call post(), LLEventThrottle will pass on an event to + * its listeners no more often than once per specified interval. + * + * A new event after more than the specified interval will immediately be + * passed along to listeners. But subsequent events will be delayed until at + * least one time interval since listeners were last called. Consider the + * sequence below. Suppose we have an LLEventThrottle constructed with an + * interval of 3 seconds. The numbers on the left are timestamps in seconds + * relative to an arbitrary reference point. + * + * 1: post(): event immediately passed to listeners, next no sooner than 4 + * 2: post(): deferred: waiting for 3 seconds to elapse + * 3: post(): deferred + * 4: no post() call, but event delivered to listeners; next no sooner than 7 + * 6: post(): deferred + * 7: no post() call, but event delivered; next no sooner than 10 + * 12: post(): immediately passed to listeners, next no sooner than 15 + * 17: post(): immediately passed to listeners, next no sooner than 20 + * + * For a deferred event, the LLSD blob delivered to listeners is from the most + * recent deferred post() call. However, a sender may obtain the previous + * event blob by calling pending(), modifying it as desired and post()ing the + * new value. (See LLEventBatchThrottle.) Each time an event is delivered to + * listeners, the pending() value is reset to isUndefined(). + * + * You may also call flush() to immediately pass along any deferred events to + * all listeners. + * + * @NOTE This is an abstract base class so that, for testing, we can use an + * alternate "timer" that doesn't actually consume real time. See + * LLEventThrottle. + */ +class LL_COMMON_API LLEventThrottleBase: public LLEventFilter +{ +public: + // pass time interval + LLEventThrottleBase(F32 interval); + // construct and connect + LLEventThrottleBase(LLEventPump& source, F32 interval); + + // force out any deferred events + void flush(); + + // retrieve (aggregate) deferred event since last event sent to listeners + LLSD pending() const; + + // register an event, may be either passed through or deferred + virtual bool post(const LLSD& event); + + // query or reset interval + F32 getInterval() const { return mInterval; } + void setInterval(F32 interval); + + // deferred posts + std::size_t getPostCount() const { return mPosts; } + + // time until next event would be passed through, 0.0 if now + F32 getDelay() const; + +protected: + // Implement these time-related methods for a valid LLEventThrottleBase + // subclass (see LLEventThrottle). For testing, we use a subclass that + // doesn't involve actual elapsed time. + virtual void alarmActionAfter(F32 interval, const LLEventTimeoutBase::Action& action) = 0; + virtual bool alarmRunning() const = 0; + virtual void alarmCancel() = 0; + virtual void timerSet(F32 interval) = 0; + virtual F32 timerGetRemaining() const = 0; + +private: + // remember throttle interval + F32 mInterval; + // count post() calls since last flush() + std::size_t mPosts; + // pending event data from most recent deferred event + LLSD mPending; +}; + +/** + * Production implementation of LLEventThrottle. + */ +class LLEventThrottle: public LLEventThrottleBase +{ +public: + LLEventThrottle(F32 interval); + LLEventThrottle(LLEventPump& source, F32 interval); + +private: + virtual void alarmActionAfter(F32 interval, const LLEventTimeoutBase::Action& action) /*override*/; + virtual bool alarmRunning() const /*override*/; + virtual void alarmCancel() /*override*/; + virtual void timerSet(F32 interval) /*override*/; + virtual F32 timerGetRemaining() const /*override*/; + + // use this to arrange a deferred flush() call + LLEventTimeout mAlarm; + // use this to track whether we're within mInterval of last flush() + LLTimer mTimer; +}; + +/** + * LLEventBatchThrottle: like LLEventThrottle, it's reluctant to pass events + * to listeners more often than once per specified time interval -- but only + * reluctant, since exceeding the specified batch size limit can cause it to + * deliver accumulated events sooner. Like LLEventBatch, it accumulates + * pending events into an LLSD Array, optionally flushing when the batch grows + * to a certain size. + */ +class LLEventBatchThrottle: public LLEventThrottle +{ +public: + // pass time interval and (optionally) max batch size; 0 means batch can + // grow arbitrarily large + LLEventBatchThrottle(F32 interval, std::size_t size = 0); + // construct and connect + LLEventBatchThrottle(LLEventPump& source, F32 interval, std::size_t size = 0); + + // append a new event to current batch + virtual bool post(const LLSD& event); + + // query or reset batch size + std::size_t getSize() const { return mBatchSize; } + void setSize(std::size_t size); + +private: + std::size_t mBatchSize; +}; + #endif /* ! defined(LL_LLEVENTFILTER_H) */ diff --git a/indra/llcommon/llsingleton.cpp b/indra/llcommon/llsingleton.cpp index 18e1b96a5f..9fbd78a000 100644 --- a/indra/llcommon/llsingleton.cpp +++ b/indra/llcommon/llsingleton.cpp @@ -220,6 +220,9 @@ void LLSingletonBase::capture_dependency(list_t& initializing, EInitState initSt std::find(initializing.begin(), initializing.end(), this); if (found != initializing.end()) { + list_t::const_iterator it_next = found; + it_next++; + // Report the circularity. Requiring the coder to dig through the // logic to diagnose exactly how we got here is less than helpful. std::ostringstream out; @@ -238,11 +241,30 @@ void LLSingletonBase::capture_dependency(list_t& initializing, EInitState initSt // otherwise we'd be returning a pointer to a partially- // constructed object! But from initSingleton() is okay: that // method exists specifically to support circularity. - // Decide which log helper to call based on initState. They have - // identical signatures. - ((initState == CONSTRUCTING)? logerrs : logwarns) - ("LLSingleton circularity: ", out.str().c_str(), - demangle(typeid(*this).name()).c_str(), ""); + // Decide which log helper to call. + if (initState == CONSTRUCTING) + { + logerrs("LLSingleton circularity in Constructor: ", out.str().c_str(), + demangle(typeid(*this).name()).c_str(), ""); + } + else if (it_next == initializing.end()) + { + // Points to self after construction, but during initialization. + // Singletons can initialize other classes that depend onto them, + // so this is expected. + // + // Example: LLNotifications singleton initializes default channels. + // Channels register themselves with singleton once done. + logdebugs("LLSingleton circularity: ", out.str().c_str(), + demangle(typeid(*this).name()).c_str(), ""); + } + else + { + // Actual circularity with other singleton (or single singleton is used extensively). + // Dependency can be unclear. + logwarns("LLSingleton circularity: ", out.str().c_str(), + demangle(typeid(*this).name()).c_str(), ""); + } } else { diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h index 2fdb8be84f..a6629bc178 100644 --- a/indra/llcommon/llstring.h +++ b/indra/llcommon/llstring.h @@ -336,6 +336,7 @@ public: static void addCRLF(string_type& string); static void removeCRLF(string_type& string); + static void removeWindowsCR(string_type& string); static void replaceTabsWithSpaces( string_type& string, size_type spaces_per_tab ); static void replaceNonstandardASCII( string_type& string, T replacement ); @@ -1322,6 +1323,28 @@ void LLStringUtilBase<T>::removeCRLF(string_type& string) //static template<class T> +void LLStringUtilBase<T>::removeWindowsCR(string_type& string) +{ + const T LF = 10; + const T CR = 13; + + size_type cr_count = 0; + size_type len = string.size(); + size_type i; + for( i = 0; i < len - cr_count - 1; i++ ) + { + if( string[i+cr_count] == CR && string[i+cr_count+1] == LF) + { + cr_count++; + } + + string[i] = string[i+cr_count]; + } + string.erase(i, cr_count); +} + +//static +template<class T> void LLStringUtilBase<T>::replaceChar( string_type& string, T target, T replacement ) { size_type found_pos = 0; diff --git a/indra/llcommon/lluri.cpp b/indra/llcommon/lluri.cpp index 9f12d49244..758b98e143 100644 --- a/indra/llcommon/lluri.cpp +++ b/indra/llcommon/lluri.cpp @@ -40,7 +40,8 @@ #include <boost/algorithm/string/find_iterator.hpp> #include <boost/algorithm/string/finder.hpp> -void encode_character(std::ostream& ostr, std::string::value_type val) +// static +void LLURI::encodeCharacter(std::ostream& ostr, std::string::value_type val) { ostr << "%" @@ -95,7 +96,7 @@ std::string LLURI::escape( } else { - encode_character(ostr, c); + encodeCharacter(ostr, c); } } } @@ -106,7 +107,7 @@ std::string LLURI::escape( c = *it; if(allowed.find(c) == std::string::npos) { - encode_character(ostr, c); + encodeCharacter(ostr, c); } else { diff --git a/indra/llcommon/lluri.h b/indra/llcommon/lluri.h index c82a666e48..9e44cc7da2 100644 --- a/indra/llcommon/lluri.h +++ b/indra/llcommon/lluri.h @@ -121,6 +121,14 @@ public: /** @name Escaping Utilities */ //@{ /** + * @brief 'Escape' symbol into stream + * + * @param ostr Output stream. + * @param val Symbol to encode. + */ + static void encodeCharacter(std::ostream& ostr, std::string::value_type val); + + /** * @brief Escape the string passed except for unreserved * * ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz diff --git a/indra/llcommon/tests/listener.h b/indra/llcommon/tests/listener.h index 9c5c18a150..6072060bb6 100644 --- a/indra/llcommon/tests/listener.h +++ b/indra/llcommon/tests/listener.h @@ -138,4 +138,15 @@ struct Collect StringVec result; }; +struct Concat +{ + bool operator()(const LLSD& event) + { + result += event.asString(); + return false; + } + void clear() { result.clear(); } + std::string result; +}; + #endif /* ! defined(LL_LISTENER_H) */ diff --git a/indra/llcommon/tests/lleventfilter_test.cpp b/indra/llcommon/tests/lleventfilter_test.cpp index 2cdfb52f2f..eb98b12ef5 100644 --- a/indra/llcommon/tests/lleventfilter_test.cpp +++ b/indra/llcommon/tests/lleventfilter_test.cpp @@ -70,6 +70,85 @@ private: bool mElapsed; }; +// Similar remarks about LLEventThrottle: we're actually testing the logic in +// LLEventThrottleBase, dummying out the LLTimer and LLEventTimeout used by +// the production LLEventThrottle class. +class TestEventThrottle: public LLEventThrottleBase +{ +public: + TestEventThrottle(F32 interval): + LLEventThrottleBase(interval), + mAlarmRemaining(-1), + mTimerRemaining(-1) + {} + TestEventThrottle(LLEventPump& source, F32 interval): + LLEventThrottleBase(source, interval), + mAlarmRemaining(-1), + mTimerRemaining(-1) + {} + + /*----- implementation of LLEventThrottleBase timing functionality -----*/ + virtual void alarmActionAfter(F32 interval, const LLEventTimeoutBase::Action& action) /*override*/ + { + mAlarmRemaining = interval; + mAlarmAction = action; + } + + virtual bool alarmRunning() const /*override*/ + { + // decrementing to exactly 0 should mean the alarm fires + return mAlarmRemaining > 0; + } + + virtual void alarmCancel() /*override*/ + { + mAlarmRemaining = -1; + } + + virtual void timerSet(F32 interval) /*override*/ + { + mTimerRemaining = interval; + } + + virtual F32 timerGetRemaining() const /*override*/ + { + // LLTimer.getRemainingTimeF32() never returns negative; 0.0 means expired + return (mTimerRemaining > 0.0)? mTimerRemaining : 0.0; + } + + /*------------------- methods for manipulating time --------------------*/ + void alarmAdvance(F32 delta) + { + bool wasRunning = alarmRunning(); + mAlarmRemaining -= delta; + if (wasRunning && ! alarmRunning()) + { + mAlarmAction(); + } + } + + void timerAdvance(F32 delta) + { + // This simple implementation, like alarmAdvance(), completely ignores + // HOW negative mTimerRemaining might go. All that matters is whether + // it's negative. We trust that no test method in this source will + // drive it beyond the capacity of an F32. Seems like a safe assumption. + mTimerRemaining -= delta; + } + + void advance(F32 delta) + { + // Advance the timer first because it has no side effects. + // alarmAdvance() might call flush(), which will need to see the + // change in the timer. + timerAdvance(delta); + alarmAdvance(delta); + } + + F32 mAlarmRemaining, mTimerRemaining; + LLEventTimeoutBase::Action mAlarmAction; +}; + /***************************************************************************** * TUT *****************************************************************************/ @@ -116,7 +195,9 @@ namespace tut listener0.listenTo(driver)); // Construct a pattern LLSD: desired Event must have a key "foo" // containing string "bar" - LLEventMatching filter(driver, LLSD().insert("foo", "bar")); + LLSD pattern; + pattern.insert("foo", "bar"); + LLEventMatching filter(driver, pattern); listener1.reset(0); LLTempBoundListener temp2( listener1.listenTo(filter)); @@ -285,6 +366,47 @@ namespace tut mainloop.post(17); check_listener("no timeout 3", listener0, LLSD(0)); } + + template<> template<> + void filter_object::test<5>() + { + set_test_name("LLEventThrottle"); + TestEventThrottle throttle(3); + Concat cat; + throttle.listen("concat", boost::ref(cat)); + + // (sequence taken from LLEventThrottleBase Doxygen comments) + // 1: post(): event immediately passed to listeners, next no sooner than 4 + throttle.advance(1); + throttle.post("1"); + ensure_equals("1", cat.result, "1"); // delivered immediately + // 2: post(): deferred: waiting for 3 seconds to elapse + throttle.advance(1); + throttle.post("2"); + ensure_equals("2", cat.result, "1"); // "2" not yet delivered + // 3: post(): deferred + throttle.advance(1); + throttle.post("3"); + ensure_equals("3", cat.result, "1"); // "3" not yet delivered + // 4: no post() call, but event delivered to listeners; next no sooner than 7 + throttle.advance(1); + ensure_equals("4", cat.result, "13"); // "3" delivered + // 6: post(): deferred + throttle.advance(2); + throttle.post("6"); + ensure_equals("6", cat.result, "13"); // "6" not yet delivered + // 7: no post() call, but event delivered; next no sooner than 10 + throttle.advance(1); + ensure_equals("7", cat.result, "136"); // "6" delivered + // 12: post(): immediately passed to listeners, next no sooner than 15 + throttle.advance(5); + throttle.post(";12"); + ensure_equals("12", cat.result, "136;12"); // "12" delivered + // 17: post(): immediately passed to listeners, next no sooner than 20 + throttle.advance(5); + throttle.post(";17"); + ensure_equals("17", cat.result, "136;12;17"); // "17" delivered + } } // namespace tut /***************************************************************************** diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h index e68331b99a..135d0ca7b9 100644 --- a/indra/llinventory/llparcel.h +++ b/indra/llinventory/llparcel.h @@ -508,6 +508,9 @@ public: { return mRegionDenyAnonymousOverride; } BOOL getRegionDenyAgeUnverifiedOverride() const { return mRegionDenyAgeUnverifiedOverride; } + BOOL getRegionAllowAccessOverride() const + { return mRegionAllowAccessoverride; } + BOOL getAllowGroupAVSounds() const { return mAllowGroupAVSounds; } BOOL getAllowAnyAVSounds() const { return mAllowAnyAVSounds; } @@ -576,6 +579,7 @@ public: void setRegionPushOverride(BOOL override) {mRegionPushOverride = override; } void setRegionDenyAnonymousOverride(BOOL override) { mRegionDenyAnonymousOverride = override; } void setRegionDenyAgeUnverifiedOverride(BOOL override) { mRegionDenyAgeUnverifiedOverride = override; } + void setRegionAllowAccessOverride(BOOL override) { mRegionAllowAccessoverride = override; } // Accessors for parcel sellWithObjects void setPreviousOwnerID(LLUUID prev_owner) { mPreviousOwnerID = prev_owner; } @@ -657,6 +661,7 @@ protected: BOOL mRegionPushOverride; BOOL mRegionDenyAnonymousOverride; BOOL mRegionDenyAgeUnverifiedOverride; + BOOL mRegionAllowAccessoverride; BOOL mAllowGroupAVSounds; BOOL mAllowAnyAVSounds; diff --git a/indra/llmessage/llregionflags.h b/indra/llmessage/llregionflags.h index eb0c4e6d1e..d3791ef4d1 100644 --- a/indra/llmessage/llregionflags.h +++ b/indra/llmessage/llregionflags.h @@ -42,6 +42,9 @@ const U64 REGION_FLAGS_RESET_HOME_ON_TELEPORT = (1 << 3); // Does the sun move? const U64 REGION_FLAGS_SUN_FIXED = (1 << 4); +// Does the estate owner allow private parcels? +const U64 REGION_FLAGS_ALLOW_ACCESS_OVERRIDE = (1 << 5); + // Can't change the terrain heightfield, even on owned parcels, // but can plant trees and grass. const U64 REGION_FLAGS_BLOCK_TERRAFORM = (1 << 6); diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp index 6675e12649..1ae8a6ac15 100644 --- a/indra/llmessage/message_prehash.cpp +++ b/indra/llmessage/message_prehash.cpp @@ -1373,6 +1373,9 @@ char const* const _PREHASH_OwnerMask = LLMessageStringTable::getInstance()->getS char const* const _PREHASH_TransferInventoryAck = LLMessageStringTable::getInstance()->getString("TransferInventoryAck"); char const* const _PREHASH_RegionDenyAgeUnverified = LLMessageStringTable::getInstance()->getString("RegionDenyAgeUnverified"); char const* const _PREHASH_AgeVerificationBlock = LLMessageStringTable::getInstance()->getString("AgeVerificationBlock"); +char const* const _PREHASH_RegionAllowAccessBlock = LLMessageStringTable::getInstance()->getString("RegionAllowAccessBlock"); +char const* const _PREHASH_RegionAllowAccessOverride = LLMessageStringTable::getInstance()->getString("RegionAllowAccessOverride"); + char const* const _PREHASH_UCoord = LLMessageStringTable::getInstance()->getString("UCoord"); char const* const _PREHASH_VCoord = LLMessageStringTable::getInstance()->getString("VCoord"); char const* const _PREHASH_FaceIndex = LLMessageStringTable::getInstance()->getString("FaceIndex"); diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h index a510b4498f..7910fde305 100644 --- a/indra/llmessage/message_prehash.h +++ b/indra/llmessage/message_prehash.h @@ -1373,6 +1373,8 @@ extern char const* const _PREHASH_OwnerMask; extern char const* const _PREHASH_TransferInventoryAck; extern char const* const _PREHASH_RegionDenyAgeUnverified; extern char const* const _PREHASH_AgeVerificationBlock; +extern char const* const _PREHASH_RegionAllowAccessBlock; +extern char const* const _PREHASH_RegionAllowAccessOverride; extern char const* const _PREHASH_UCoord; extern char const* const _PREHASH_VCoord; extern char const* const _PREHASH_FaceIndex; diff --git a/indra/llprimitive/lldaeloader.cpp b/indra/llprimitive/lldaeloader.cpp index 76d3a405d8..768dc8284b 100644 --- a/indra/llprimitive/lldaeloader.cpp +++ b/indra/llprimitive/lldaeloader.cpp @@ -305,6 +305,8 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa } face = LLVolumeFace(); + face.mExtents[0].set(v[0], v[1], v[2]); + face.mExtents[1].set(v[0], v[1], v[2]); point_map.clear(); } } @@ -549,6 +551,8 @@ LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& fac } face = LLVolumeFace(); + face.mExtents[0].set(v[0], v[1], v[2]); + face.mExtents[1].set(v[0], v[1], v[2]); verts.clear(); indices.clear(); point_map.clear(); diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index 0cb959a315..604092d536 100644 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -1405,20 +1405,14 @@ void LLNotifications::createDefaultChannels() mDefaultChannels.push_back(new LLPersistentNotificationChannel()); // connect action methods to these channels - LLNotifications::instance().getChannel("Enabled")-> - connectFailedFilter(&defaultResponse); - LLNotifications::instance().getChannel("Expiration")-> - connectChanged(boost::bind(&LLNotifications::expirationHandler, this, _1)); + getChannel("Enabled")->connectFailedFilter(&defaultResponse); + getChannel("Expiration")->connectChanged(boost::bind(&LLNotifications::expirationHandler, this, _1)); // uniqueHandler slot should be added as first slot of the signal due to // usage LLStopWhenHandled combiner in LLStandardSignal - LLNotifications::instance().getChannel("Unique")-> - connectAtFrontChanged(boost::bind(&LLNotifications::uniqueHandler, this, _1)); - LLNotifications::instance().getChannel("Unique")-> - connectFailedFilter(boost::bind(&LLNotifications::failedUniquenessTest, this, _1)); - LLNotifications::instance().getChannel("Ignore")-> - connectFailedFilter(&handleIgnoredNotification); - LLNotifications::instance().getChannel("VisibilityRules")-> - connectFailedFilter(&visibilityRuleMached); + getChannel("Unique")->connectAtFrontChanged(boost::bind(&LLNotifications::uniqueHandler, this, _1)); + getChannel("Unique")->connectFailedFilter(boost::bind(&LLNotifications::failedUniquenessTest, this, _1)); + getChannel("Ignore")->connectFailedFilter(&handleIgnoredNotification); + getChannel("VisibilityRules")->connectFailedFilter(&visibilityRuleMached); } diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index f3a99dcef2..c570285856 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1505,8 +1505,8 @@ void LLTextBase::reflow() segment_set_t::iterator seg_iter = mSegments.begin(); S32 seg_offset = 0; S32 line_start_index = 0; - const S32 text_available_width = mVisibleTextRect.getWidth() - mHPad; // reserve room for margin - S32 remaining_pixels = text_available_width; + const F32 text_available_width = mVisibleTextRect.getWidth() - mHPad; // reserve room for margin + F32 remaining_pixels = text_available_width; S32 line_count = 0; // find and erase line info structs starting at start_index and going to end of document @@ -1532,14 +1532,15 @@ void LLTextBase::reflow() S32 cur_index = segment->getStart() + seg_offset; // ask segment how many character fit in remaining space - S32 character_count = segment->getNumChars(getWordWrap() ? llmax(0, remaining_pixels) : S32_MAX, + S32 character_count = segment->getNumChars(getWordWrap() ? llmax(0, ll_round(remaining_pixels)) : S32_MAX, seg_offset, cur_index - line_start_index, S32_MAX, line_count - seg_line_offset); - S32 segment_width, segment_height; - bool force_newline = segment->getDimensions(seg_offset, character_count, segment_width, segment_height); + F32 segment_width; + S32 segment_height; + bool force_newline = segment->getDimensionsF32(seg_offset, character_count, segment_width, segment_height); // grow line height as necessary based on reported height of this segment line_height = llmax(line_height, segment_height); remaining_pixels -= segment_width; @@ -1548,11 +1549,13 @@ void LLTextBase::reflow() S32 last_segment_char_on_line = segment->getStart() + seg_offset; - S32 text_actual_width = text_available_width - remaining_pixels; + // Note: make sure text will fit in width - use ceil, but also make sure + // ceil is used only once per line + S32 text_actual_width = llceil(text_available_width - remaining_pixels); S32 text_left = getLeftOffset(text_actual_width); LLRect line_rect(text_left, cur_top, - text_left + text_actual_width, + text_left + text_actual_width, cur_top - line_height); // if we didn't finish the current segment... @@ -3066,7 +3069,15 @@ boost::signals2::connection LLTextBase::setIsObjectBlockedCallback(const is_bloc LLTextSegment::~LLTextSegment() {} -bool LLTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const { width = 0; height = 0; return false;} +bool LLTextSegment::getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const { width = 0; height = 0; return false; } +bool LLTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const +{ + F32 fwidth = 0; + bool result = getDimensionsF32(first_char, num_chars, fwidth, height); + width = ll_round(fwidth); + return result; +} + S32 LLTextSegment::getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const { return 0; } S32 LLTextSegment::getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars, S32 line_ind) const { return 0; } void LLTextSegment::updateLayout(const LLTextBase& editor) {} @@ -3314,7 +3325,7 @@ void LLNormalTextSegment::setToolTip(const std::string& tooltip) mTooltip = tooltip; } -bool LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const +bool LLNormalTextSegment::getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const { height = 0; width = 0; @@ -3323,7 +3334,7 @@ bool LLNormalTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& widt height = mFontHeight; const LLWString &text = getWText(); // if last character is a newline, then return true, forcing line break - width = mStyle->getFont()->getWidth(text.c_str(), mStart + first_char, num_chars); + width = mStyle->getFont()->getWidthF32(text.c_str(), mStart + first_char, num_chars); } return false; } @@ -3491,7 +3502,7 @@ LLInlineViewSegment::~LLInlineViewSegment() mView->die(); } -bool LLInlineViewSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const +bool LLInlineViewSegment::getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const { if (first_char == 0 && num_chars == 0) { @@ -3578,7 +3589,7 @@ LLLineBreakTextSegment::LLLineBreakTextSegment(LLStyleConstSP style,S32 pos):LLT LLLineBreakTextSegment::~LLLineBreakTextSegment() { } -bool LLLineBreakTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const +bool LLLineBreakTextSegment::getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const { width = 0; height = mFontHeight; @@ -3607,7 +3618,7 @@ LLImageTextSegment::~LLImageTextSegment() static const S32 IMAGE_HPAD = 3; -bool LLImageTextSegment::getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const +bool LLImageTextSegment::getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const { width = 0; height = mStyle->getFont()->getLineHeight(); diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index c7b6203445..5fdde445ef 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -61,8 +61,9 @@ public: mEnd(end) {} virtual ~LLTextSegment(); + bool getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const; - virtual bool getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const; + virtual bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const; virtual S32 getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const; /** @@ -126,7 +127,7 @@ public: LLNormalTextSegment( const LLColor4& color, S32 start, S32 end, LLTextBase& editor, BOOL is_visible = TRUE); virtual ~LLNormalTextSegment(); - /*virtual*/ bool getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const; + /*virtual*/ bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const; /*virtual*/ S32 getOffset(S32 segment_local_x_coord, S32 start_offset, S32 num_chars, bool round) const; /*virtual*/ S32 getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars, S32 line_ind) const; /*virtual*/ F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRectf& draw_rect); @@ -212,7 +213,7 @@ public: LLInlineViewSegment(const Params& p, S32 start, S32 end); ~LLInlineViewSegment(); - /*virtual*/ bool getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const; + /*virtual*/ bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const; /*virtual*/ S32 getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars, S32 line_ind) const; /*virtual*/ void updateLayout(const class LLTextBase& editor); /*virtual*/ F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRectf& draw_rect); @@ -236,7 +237,7 @@ public: LLLineBreakTextSegment(LLStyleConstSP style,S32 pos); LLLineBreakTextSegment(S32 pos); ~LLLineBreakTextSegment(); - bool getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const; + /*virtual*/ bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const; S32 getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars, S32 line_ind) const; F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRectf& draw_rect); @@ -249,7 +250,7 @@ class LLImageTextSegment : public LLTextSegment public: LLImageTextSegment(LLStyleConstSP style,S32 pos,class LLTextBase& editor); ~LLImageTextSegment(); - bool getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const; + /*virtual*/ bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const; S32 getNumChars(S32 num_pixels, S32 segment_offset, S32 char_offset, S32 max_chars, S32 line_ind) const; F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRectf& draw_rect); diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index b211829496..a4243ebfa1 100644 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -917,7 +917,7 @@ std::string LLUrlEntryInventory::getLabel(const std::string &url, const LLUrlLab // LLUrlEntryObjectIM::LLUrlEntryObjectIM() { - mPattern = boost::regex("secondlife:///app/objectim/[\\da-f-]+\?.*", + mPattern = boost::regex("secondlife:///app/objectim/[\\da-f-]+\?\\S*\\w", boost::regex::perl|boost::regex::icase); mMenuName = "menu_url_objectim.xml"; } diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp index 86a15f2ef2..924e1166ee 100644 --- a/indra/llvfs/lldir.cpp +++ b/indra/llvfs/lldir.cpp @@ -720,6 +720,15 @@ std::vector<std::string> LLDir::findSkinnedFilenames(const std::string& subdir, << ((constraint == CURRENT_SKIN)? "CURRENT_SKIN" : "ALL_SKINS") << LL_ENDL; + // Build results vector. + std::vector<std::string> results; + // Disallow filenames that may escape subdir + if (filename.find("..") != std::string::npos) + { + LL_WARNS("LLDir") << "Ignoring potentially relative filename '" << filename << "'" << LL_ENDL; + return results; + } + // Cache the default language directory for each subdir we've encountered. // A cache entry whose value is the empty string means "not localized, // don't bother checking again." @@ -784,8 +793,6 @@ std::vector<std::string> LLDir::findSkinnedFilenames(const std::string& subdir, } } - // Build results vector. - std::vector<std::string> results; // The process we use depends on 'constraint'. if (constraint != CURRENT_SKIN) // meaning ALL_SKINS { diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 5ec0ada6eb..1a280661b9 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -2801,7 +2801,7 @@ BOOL LLWindowWin32::pasteTextFromClipboard(LLWString &dst) if (utf16str) { dst = utf16str_to_wstring(utf16str); - LLWStringUtil::removeCRLF(dst); + LLWStringUtil::removeWindowsCR(dst); GlobalUnlock(h_data); success = TRUE; } diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 821f46edd2..8d36214506 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -255,6 +255,7 @@ set(viewer_SOURCE_FILES llfloaterlagmeter.cpp llfloaterland.cpp llfloaterlandholdings.cpp + llfloaterlinkreplace.cpp llfloaterloadprefpreset.cpp llfloatermarketplacelistings.cpp llfloatermap.cpp @@ -277,6 +278,7 @@ set(viewer_SOURCE_FILES llfloaterperms.cpp llfloaterpostprocess.cpp llfloaterpreference.cpp + llfloaterpreviewtrash.cpp llfloaterproperties.cpp llfloaterregiondebugconsole.cpp llfloaterregioninfo.cpp @@ -876,6 +878,7 @@ set(viewer_HEADER_FILES llfloaterlagmeter.h llfloaterland.h llfloaterlandholdings.h + llfloaterlinkreplace.h llfloaterloadprefpreset.h llfloatermap.h llfloatermarketplacelistings.h @@ -898,6 +901,7 @@ set(viewer_HEADER_FILES llfloaterperms.h llfloaterpostprocess.h llfloaterpreference.h + llfloaterpreviewtrash.h llfloaterproperties.h llfloaterregiondebugconsole.h llfloaterregioninfo.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 4a6f30b5a9..de31425c27 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -333,7 +333,7 @@ <key>Type</key> <string>F32</string> <key>Value</key> - <real>0.5</real> + <real>0.3</real> </map> <key>AudioLevelMic</key> <map> @@ -355,7 +355,7 @@ <key>Type</key> <string>F32</string> <key>Value</key> - <real>0.5</real> + <real>0.3</real> </map> <key>AudioLevelRolloff</key> <map> @@ -1619,6 +1619,17 @@ <key>Value</key> <string>default</string> </map> + <key>ChatAutocompleteGestures</key> + <map> + <key>Comment</key> + <string>Auto-complete gestures in nearby chat</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>ChatBarStealsFocus</key> <map> <key>Comment</key> @@ -5439,6 +5450,28 @@ <key>Value</key> <integer>1</integer> </map> + <key>LinkReplaceBatchSize</key> + <map> + <key>Comment</key> + <string>The maximum size of a batch in a link replace operation</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <integer>25</integer> + </map> + <key>LinkReplaceBatchPauseTime</key> + <map> + <key>Comment</key> + <string>The time in seconds between two batches in a link replace operation</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>1.0</real> + </map> <key>LipSyncAah</key> <map> <key>Comment</key> @@ -10157,6 +10190,17 @@ <key>Value</key> <integer>10</integer> </map> + <key>MaxAttachmentComplexity</key> + <map> + <key>Comment</key> + <string>Attachment's render weight limit</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>1.0E6</real> + </map> <key>ComplexityChangesPopUpDelay</key> <map> <key>Comment</key> @@ -10723,6 +10767,17 @@ <key>Value</key> <integer>1</integer> </map> + <key>ScriptDialogLimitations</key> + <map> + <key>Comment</key> + <string>Limits amount of dialogs per script (0 - per object, 1 - per channel, 2 - per channel for attachments, 3 - per channel for HUDs, 4 -unconstrained for HUDs)</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <integer>0</integer> + </map> <key>SecondLifeEnterprise</key> <map> <key>Comment</key> @@ -11834,6 +11889,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>SyncMaterialSettings</key> + <map> + <key>Comment</key> + <string>SyncMaterialSettings</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>SnapshotQuality</key> <map> <key>Comment</key> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 7d0d39e22a..8dd0b06ed2 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -1644,7 +1644,7 @@ void LLAgent::stopAutoPilot(BOOL user_cancel) if (user_cancel && !mAutoPilotBehaviorName.empty()) { if (mAutoPilotBehaviorName == "Sit") - LLNotificationsUtil::add("CancelledSit"); + LL_INFOS("Agent") << "Autopilot-Sit was canceled by user action" << LL_ENDL; else if (mAutoPilotBehaviorName == "Attach") LLNotificationsUtil::add("CancelledAttach"); else diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index feb981217d..c928cf0601 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -2917,11 +2917,32 @@ void LLAppearanceMgr::removeAllAttachmentsFromAvatar() removeItemsFromAvatar(ids_to_remove); } -void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id, LLPointer<LLInventoryCallback> cb) +class LLUpdateOnCOFLinkRemove : public LLInventoryCallback { - gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); +public: + LLUpdateOnCOFLinkRemove(const LLUUID& remove_item_id, LLPointer<LLInventoryCallback> cb = NULL): + mItemID(remove_item_id), + mCB(cb) + { + } - LLInventoryModel::cat_array_t cat_array; + /* virtual */ void fire(const LLUUID& item_id) + { + // just removed cof link, "(wear)" suffix depends on presence of link, so update label + gInventory.addChangedMask(LLInventoryObserver::LABEL, mItemID); + if (mCB.notNull()) + { + mCB->fire(item_id); + } + } + +private: + LLUUID mItemID; + LLPointer<LLInventoryCallback> mCB; +}; + +void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id, LLPointer<LLInventoryCallback> cb) +{ LLInventoryModel::cat_array_t cat_array; LLInventoryModel::item_array_t item_array; gInventory.collectDescendents(LLAppearanceMgr::getCOF(), cat_array, @@ -2932,12 +2953,20 @@ void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id, LLPointer<LLInve const LLInventoryItem* item = item_array.at(i).get(); if (item->getIsLinkType() && item->getLinkedUUID() == item_id) { - bool immediate_delete = false; if (item->getType() == LLAssetType::AT_OBJECT) { - immediate_delete = true; + // Immediate delete + remove_inventory_item(item->getUUID(), cb, true); + gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); + } + else + { + // Delayed delete + // Pointless to update item_id label here since link still exists and first notifyObservers + // call will restore (wear) suffix, mark for update after deletion + LLPointer<LLUpdateOnCOFLinkRemove> cb_label = new LLUpdateOnCOFLinkRemove(item_id, cb); + remove_inventory_item(item->getUUID(), cb_label, false); } - remove_inventory_item(item->getUUID(), cb, immediate_delete); } } } diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 2045c3e297..219d9da01f 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -929,7 +929,6 @@ void LLAvatarActions::shareWithAvatars(LLView * panel) LLNotificationsUtil::add("ShareNotification"); } - // static bool LLAvatarActions::canShareSelectedItems(LLInventoryPanel* inv_panel /* = NULL*/) { diff --git a/indra/newview/llenvmanager.cpp b/indra/newview/llenvmanager.cpp index c58a21d0c8..fa1c3b983e 100644 --- a/indra/newview/llenvmanager.cpp +++ b/indra/newview/llenvmanager.cpp @@ -492,7 +492,7 @@ void LLEnvManagerNew::onRegionSettingsResponse(const LLSD& content) mCachedRegionPrefs = new_settings; // Load region sky presets. - LLWLParamManager::instance().refreshRegionPresets(); + LLWLParamManager::instance().refreshRegionPresets(getRegionSettings().getSkyMap()); // If using server settings, update managers. if (getUseRegionSettings()) @@ -525,6 +525,25 @@ void LLEnvManagerNew::initSingleton() LL_DEBUGS("Windlight") << "Initializing LLEnvManagerNew" << LL_ENDL; loadUserPrefs(); + + // preferences loaded, can set params + std::string preferred_day = getDayCycleName(); + if (!useDayCycle(preferred_day, LLEnvKey::SCOPE_LOCAL)) + { + LL_WARNS() << "No day cycle named " << preferred_day << ", reverting LLWLParamManager to defaults" << LL_ENDL; + LLWLParamManager::instance().setDefaultDay(); + } + + std::string sky = getSkyPresetName(); + if (!useSkyPreset(sky)) + { + LL_WARNS() << "No sky preset named " << sky << ", falling back to defaults" << LL_ENDL; + LLWLParamManager::instance().setDefaultSky(); + + // *TODO: Fix user preferences accordingly. + } + + LLWLParamManager::instance().resetAnimator(0.5 /*noon*/, getUseDayCycle()); } void LLEnvManagerNew::updateSkyFromPrefs() diff --git a/indra/newview/llestateinfomodel.cpp b/indra/newview/llestateinfomodel.cpp index 8f2eb41307..e422581129 100644 --- a/indra/newview/llestateinfomodel.cpp +++ b/indra/newview/llestateinfomodel.cpp @@ -71,14 +71,16 @@ bool LLEstateInfoModel::getIsExternallyVisible() const { return getFlag(REGION_F bool LLEstateInfoModel::getAllowDirectTeleport() const { return getFlag(REGION_FLAGS_ALLOW_DIRECT_TELEPORT); } bool LLEstateInfoModel::getDenyAnonymous() const { return getFlag(REGION_FLAGS_DENY_ANONYMOUS); } bool LLEstateInfoModel::getDenyAgeUnverified() const { return getFlag(REGION_FLAGS_DENY_AGEUNVERIFIED); } -bool LLEstateInfoModel::getAllowVoiceChat() const { return getFlag(REGION_FLAGS_ALLOW_VOICE); } +bool LLEstateInfoModel::getAllowVoiceChat() const { return getFlag(REGION_FLAGS_ALLOW_VOICE); } +bool LLEstateInfoModel::getAllowAccessOverride() const { return getFlag(REGION_FLAGS_ALLOW_ACCESS_OVERRIDE); } void LLEstateInfoModel::setUseFixedSun(bool val) { setFlag(REGION_FLAGS_SUN_FIXED, val); } void LLEstateInfoModel::setIsExternallyVisible(bool val) { setFlag(REGION_FLAGS_EXTERNALLY_VISIBLE, val); } void LLEstateInfoModel::setAllowDirectTeleport(bool val) { setFlag(REGION_FLAGS_ALLOW_DIRECT_TELEPORT, val); } void LLEstateInfoModel::setDenyAnonymous(bool val) { setFlag(REGION_FLAGS_DENY_ANONYMOUS, val); } void LLEstateInfoModel::setDenyAgeUnverified(bool val) { setFlag(REGION_FLAGS_DENY_AGEUNVERIFIED, val); } -void LLEstateInfoModel::setAllowVoiceChat(bool val) { setFlag(REGION_FLAGS_ALLOW_VOICE, val); } +void LLEstateInfoModel::setAllowVoiceChat(bool val) { setFlag(REGION_FLAGS_ALLOW_VOICE, val); } +void LLEstateInfoModel::setAllowAccessOverride(bool val) { setFlag(REGION_FLAGS_ALLOW_ACCESS_OVERRIDE, val); } void LLEstateInfoModel::update(const strings_t& strings) { @@ -145,6 +147,7 @@ void LLEstateInfoModel::commitEstateInfoCapsCoro(std::string url) body["deny_anonymous"] = getDenyAnonymous(); body["deny_age_unverified"] = getDenyAgeUnverified(); body["allow_voice_chat"] = getAllowVoiceChat(); + body["override_public_access"] = getAllowAccessOverride(); body["invoice"] = LLFloaterRegionInfo::getLastInvoice(); @@ -218,6 +221,7 @@ std::string LLEstateInfoModel::getInfoDump() dump["deny_anonymous" ] = getDenyAnonymous(); dump["deny_age_unverified" ] = getDenyAgeUnverified(); dump["allow_voice_chat" ] = getAllowVoiceChat(); + dump["override_public_access"] = getAllowAccessOverride(); std::stringstream dump_str; dump_str << dump; diff --git a/indra/newview/llestateinfomodel.h b/indra/newview/llestateinfomodel.h index e7a6a2a725..0082b5b1f4 100644 --- a/indra/newview/llestateinfomodel.h +++ b/indra/newview/llestateinfomodel.h @@ -55,6 +55,7 @@ public: bool getDenyAnonymous() const; bool getDenyAgeUnverified() const; bool getAllowVoiceChat() const; + bool getAllowAccessOverride() const; const std::string& getName() const { return mName; } const LLUUID& getOwnerID() const { return mOwnerID; } @@ -68,6 +69,7 @@ public: void setDenyAnonymous(bool val); void setDenyAgeUnverified(bool val); void setAllowVoiceChat(bool val); + void setAllowAccessOverride(bool val); void setSunHour(F32 sun_hour) { mSunHour = sun_hour; } diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index 314b859cea..711a87dc99 100644 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -44,7 +44,7 @@ public: mExpanderLabel(more_text) {} - /*virtual*/ bool getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const + /*virtual*/ bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const { // more label always spans width of text box if (num_chars == 0) diff --git a/indra/newview/llfloateravatarrendersettings.cpp b/indra/newview/llfloateravatarrendersettings.cpp index e7ac3f2737..2bae7d63aa 100644 --- a/indra/newview/llfloateravatarrendersettings.cpp +++ b/indra/newview/llfloateravatarrendersettings.cpp @@ -33,6 +33,7 @@ #include "llfloaterreg.h" #include "llnamelistctrl.h" #include "llmenugl.h" +#include "lltrans.h" #include "llviewerobjectlist.h" #include "llvoavatar.h" @@ -144,6 +145,8 @@ void LLFloaterAvatarRenderSettings::updateList() item_params.columns.add().value(av_name.getCompleteName()).column("name"); std::string setting = getString(iter->second == 1 ? "av_never_render" : "av_always_render"); item_params.columns.add().value(setting).column("setting"); + std::string timestamp = createTimestamp(LLRenderMuteList::getInstance()->getVisualMuteDate(iter->first)); + item_params.columns.add().value(timestamp).column("timestamp"); mAvatarSettingsList->addNameItemRow(item_params); } } @@ -205,15 +208,7 @@ void LLFloaterAvatarRenderSettings::onCustomAction (const LLSD& userdata, const new_setting = S32(LLVOAvatar::AV_ALWAYS_RENDER); } - LLVOAvatar *avatarp = find_avatar(av_id); - if (avatarp) - { - avatarp->setVisualMuteSettings(LLVOAvatar::VisualMuteSettings(new_setting)); - } - else - { - LLRenderMuteList::getInstance()->saveVisualMuteSetting(av_id, new_setting); - } + setAvatarRenderSetting(av_id, new_setting); } @@ -273,14 +268,44 @@ void LLFloaterAvatarRenderSettings::onClickAdd(const LLSD& userdata) void LLFloaterAvatarRenderSettings::callbackAvatarPicked(const uuid_vec_t& ids, S32 visual_setting) { if (ids.empty()) return; + setAvatarRenderSetting(ids[0], visual_setting); +} - LLVOAvatar *avatarp = find_avatar(ids[0]); +void LLFloaterAvatarRenderSettings::setAvatarRenderSetting(const LLUUID& av_id, S32 new_setting) +{ + LLVOAvatar *avatarp = find_avatar(av_id); if (avatarp) { - avatarp->setVisualMuteSettings(LLVOAvatar::VisualMuteSettings(visual_setting)); + avatarp->setVisualMuteSettings(LLVOAvatar::VisualMuteSettings(new_setting)); } else { - LLRenderMuteList::getInstance()->saveVisualMuteSetting(ids[0], visual_setting); + LLRenderMuteList::getInstance()->saveVisualMuteSetting(av_id, new_setting); + } +} + +BOOL LLFloaterAvatarRenderSettings::handleKeyHere(KEY key, MASK mask ) +{ + BOOL handled = FALSE; + + if (KEY_DELETE == key) + { + setAvatarRenderSetting(mAvatarSettingsList->getCurrentID(), (S32)LLVOAvatar::AV_RENDER_NORMALLY); + handled = TRUE; } + return handled; +} + +std::string LLFloaterAvatarRenderSettings::createTimestamp(S32 datetime) +{ + std::string timeStr; + LLSD substitution; + substitution["datetime"] = datetime; + + timeStr = "["+LLTrans::getString ("TimeMonth")+"]/[" + +LLTrans::getString ("TimeDay")+"]/[" + +LLTrans::getString ("TimeYear")+"]"; + + LLStringUtil::format (timeStr, substitution); + return timeStr; } diff --git a/indra/newview/llfloateravatarrendersettings.h b/indra/newview/llfloateravatarrendersettings.h index fe727bcf32..6790b24b90 100644 --- a/indra/newview/llfloateravatarrendersettings.h +++ b/indra/newview/llfloateravatarrendersettings.h @@ -43,6 +43,7 @@ public: /*virtual*/ BOOL postBuild(); /*virtual*/ void onOpen(const LLSD& key); /*virtual*/ void draw(); + /*virtual*/ BOOL handleKeyHere(KEY key, MASK mask ); void onAvatarListRightClick(LLUICtrl* ctrl, S32 x, S32 y); @@ -51,6 +52,9 @@ public: void onCustomAction (const LLSD& userdata, const LLUUID& av_id); bool isActionChecked(const LLSD& userdata, const LLUUID& av_id); void onClickAdd(const LLSD& userdata); + void setAvatarRenderSetting(const LLUUID& av_id, S32 new_setting); + + std::string createTimestamp(S32 datetime); static void setNeedsUpdate(); diff --git a/indra/newview/llfloaterimnearbychat.cpp b/indra/newview/llfloaterimnearbychat.cpp index d18f03d8e9..7bf4516d8c 100644 --- a/indra/newview/llfloaterimnearbychat.cpp +++ b/indra/newview/llfloaterimnearbychat.cpp @@ -485,7 +485,8 @@ void LLFloaterIMNearbyChat::onChatBoxKeystroke() KEY key = gKeyboard->currentKey(); // Ignore "special" keys, like backspace, arrows, etc. - if (length > 1 + if (gSavedSettings.getBOOL("ChatAutocompleteGestures") + && length > 1 && raw_text[0] == '/' && key < KEY_SPECIAL) { diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index a340cd1143..4352909706 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -2432,9 +2432,16 @@ void LLPanelLandAccess::refresh() BOOL use_group = parcel->getParcelFlag(PF_USE_ACCESS_GROUP); BOOL public_access = !use_access_list; - getChild<LLUICtrl>("public_access")->setValue(public_access ); - getChild<LLUICtrl>("GroupCheck")->setValue(use_group ); - + if (parcel->getRegionAllowAccessOverride()) + { + getChild<LLUICtrl>("public_access")->setValue(public_access); + getChild<LLUICtrl>("GroupCheck")->setValue(use_group); + } + else + { + getChild<LLUICtrl>("public_access")->setValue(TRUE); + getChild<LLUICtrl>("GroupCheck")->setValue(FALSE); + } std::string group_name; gCacheName->getGroupName(parcel->getGroupID(), group_name); getChild<LLUICtrl>("GroupCheck")->setLabelArg("[GROUP]", group_name ); @@ -2610,9 +2617,14 @@ void LLPanelLandAccess::refresh_ui() LLParcel *parcel = mParcel->getParcel(); if (parcel && !gDisconnected) { - BOOL can_manage_allowed = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_ALLOWED); + BOOL can_manage_allowed = false; BOOL can_manage_banned = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_BANNED); + if (parcel->getRegionAllowAccessOverride()) + { // Estate owner may have disabled allowing the parcel owner from managing access. + can_manage_allowed = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_ALLOWED); + } + getChildView("public_access")->setEnabled(can_manage_allowed); BOOL public_access = getChild<LLUICtrl>("public_access")->getValue().asBoolean(); if (public_access) @@ -2666,7 +2678,8 @@ void LLPanelLandAccess::refresh_ui() std::string group_name; if (gCacheName->getGroupName(parcel->getGroupID(), group_name)) { - getChildView("GroupCheck")->setEnabled(can_manage_allowed); + bool can_allow_groups = !public_access || (public_access && (getChild<LLUICtrl>("limit_payment")->getValue().asBoolean() ^ getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean())); + getChildView("GroupCheck")->setEnabled(can_manage_allowed && can_allow_groups); } getChildView("AccessList")->setEnabled(can_manage_allowed); S32 allowed_list_count = parcel->mAccessList.size(); diff --git a/indra/newview/llfloaterlinkreplace.cpp b/indra/newview/llfloaterlinkreplace.cpp new file mode 100644 index 0000000000..3f80d6f1a4 --- /dev/null +++ b/indra/newview/llfloaterlinkreplace.cpp @@ -0,0 +1,396 @@ +/** + * @file llfloaterlinkreplace.cpp + * @brief Allows replacing link targets in inventory links + * @author Ansariel Hiller + * + * $LicenseInfo:firstyear=2017&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2017, 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 "llfloaterlinkreplace.h" + +#include "llagent.h" +#include "llappearancemgr.h" +#include "lllineeditor.h" +#include "lltextbox.h" +#include "llviewercontrol.h" + +LLFloaterLinkReplace::LLFloaterLinkReplace(const LLSD& key) + : LLFloater(key), + LLEventTimer(gSavedSettings.getF32("LinkReplaceBatchPauseTime")), + mRemainingItems(0), + mSourceUUID(LLUUID::null), + mTargetUUID(LLUUID::null), + mInstance(NULL), + mBatchSize(gSavedSettings.getU32("LinkReplaceBatchSize")) +{ + mEventTimer.stop(); + mInstance = this; +} + +LLFloaterLinkReplace::~LLFloaterLinkReplace() +{ + mInstance = NULL; +} + +BOOL LLFloaterLinkReplace::postBuild() +{ + mStartBtn = getChild<LLButton>("btn_start"); + mStartBtn->setCommitCallback(boost::bind(&LLFloaterLinkReplace::onStartClicked, this)); + + mRefreshBtn = getChild<LLButton>("btn_refresh"); + mRefreshBtn->setCommitCallback(boost::bind(&LLFloaterLinkReplace::checkEnableStart, this)); + + mSourceEditor = getChild<LLInventoryLinkReplaceDropTarget>("source_uuid_editor"); + mTargetEditor = getChild<LLInventoryLinkReplaceDropTarget>("target_uuid_editor"); + + mSourceEditor->setDADCallback(boost::bind(&LLFloaterLinkReplace::onSourceItemDrop, this, _1)); + mTargetEditor->setDADCallback(boost::bind(&LLFloaterLinkReplace::onTargetItemDrop, this, _1)); + + mStatusText = getChild<LLTextBox>("status_text"); + + return TRUE; +} + +void LLFloaterLinkReplace::onOpen(const LLSD& key) +{ + if (key.asUUID().notNull()) + { + LLUUID item_id = key.asUUID(); + LLViewerInventoryItem* item = gInventory.getItem(item_id); + mSourceEditor->setItem(item); + onSourceItemDrop(item->getLinkedUUID()); + } + else + { + checkEnableStart(); + } +} + +void LLFloaterLinkReplace::onSourceItemDrop(const LLUUID& source_item_id) +{ + mSourceUUID = source_item_id; + checkEnableStart(); +} + +void LLFloaterLinkReplace::onTargetItemDrop(const LLUUID& target_item_id) +{ + mTargetUUID = target_item_id; + checkEnableStart(); +} + +void LLFloaterLinkReplace::updateFoundLinks() +{ + LLInventoryModel::item_array_t items; + LLInventoryModel::cat_array_t cat_array; + LLLinkedItemIDMatches is_linked_item_match(mSourceUUID); + gInventory.collectDescendentsIf(gInventory.getRootFolderID(), + cat_array, + items, + LLInventoryModel::INCLUDE_TRASH, + is_linked_item_match); + mRemainingItems = (U32)items.size(); + + LLStringUtil::format_map_t args; + args["NUM"] = llformat("%d", mRemainingItems); + mStatusText->setText(getString("ItemsFound", args)); +} + +void LLFloaterLinkReplace::checkEnableStart() +{ + if (mSourceUUID.notNull() && mTargetUUID.notNull() && mSourceUUID == mTargetUUID) + { + mStatusText->setText(getString("ItemsIdentical")); + } + else if (mSourceUUID.notNull()) + { + updateFoundLinks(); + } + + mStartBtn->setEnabled(mRemainingItems > 0 && mSourceUUID.notNull() && mTargetUUID.notNull() && mSourceUUID != mTargetUUID); +} + +void LLFloaterLinkReplace::onStartClicked() +{ + LL_INFOS() << "Starting inventory link replace" << LL_ENDL; + + if (mSourceUUID.isNull() || mTargetUUID.isNull()) + { + LL_WARNS() << "Cannot replace. Either source or target UUID is null." << LL_ENDL; + return; + } + + if (mSourceUUID == mTargetUUID) + { + LL_WARNS() << "Cannot replace. Source and target are identical." << LL_ENDL; + return; + } + + LLInventoryModel::cat_array_t cat_array; + LLLinkedItemIDMatches is_linked_item_match(mSourceUUID); + gInventory.collectDescendentsIf(gInventory.getRootFolderID(), + cat_array, + mRemainingInventoryItems, + LLInventoryModel::INCLUDE_TRASH, + is_linked_item_match); + LL_INFOS() << "Found " << mRemainingInventoryItems.size() << " inventory links that need to be replaced." << LL_ENDL; + + if (mRemainingInventoryItems.size() > 0) + { + LLViewerInventoryItem* target_item = gInventory.getItem(mTargetUUID); + if (target_item) + { + mRemainingItems = (U32)mRemainingInventoryItems.size(); + + LLStringUtil::format_map_t args; + args["NUM"] = llformat("%d", mRemainingItems); + mStatusText->setText(getString("ItemsRemaining", args)); + + mStartBtn->setEnabled(FALSE); + mRefreshBtn->setEnabled(FALSE); + + mEventTimer.start(); + tick(); + } + else + { + mStatusText->setText(getString("TargetNotFound")); + LL_WARNS() << "Link replace target not found." << LL_ENDL; + } + } +} + +void LLFloaterLinkReplace::linkCreatedCallback(const LLUUID& old_item_id, + const LLUUID& target_item_id, + bool needs_wearable_ordering_update, + bool needs_description_update, + const LLUUID& outfit_folder_id) +{ + LL_DEBUGS() << "Inventory link replace:" << LL_NEWLINE + << " - old_item_id = " << old_item_id.asString() << LL_NEWLINE + << " - target_item_id = " << target_item_id.asString() << LL_NEWLINE + << " - order update = " << (needs_wearable_ordering_update ? "true" : "false") << LL_NEWLINE + << " - description update = " << (needs_description_update ? "true" : "false") << LL_NEWLINE + << " - outfit_folder_id = " << outfit_folder_id.asString() << LL_ENDL; + + // If we are replacing an object, bodypart or gesture link within an outfit folder, + // we need to change the actual description of the link itself. LLAppearanceMgr *should* + // have created COF links that will be used to save the outfit with an empty description. + // Since link_inventory_array() will set the description of the linked item for the link + // itself, this will lead to a dirty outfit state when the outfit with the replaced + // link is worn. So we have to correct this. + if (needs_description_update && outfit_folder_id.notNull()) + { + LLInventoryModel::item_array_t items; + LLInventoryModel::cat_array_t cats; + LLLinkedItemIDMatches is_target_link(target_item_id); + gInventory.collectDescendentsIf(outfit_folder_id, + cats, + items, + LLInventoryModel::EXCLUDE_TRASH, + is_target_link); + + for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); ++it) + { + LLPointer<LLViewerInventoryItem> item = *it; + + if ((item->getType() == LLAssetType::AT_BODYPART || + item->getType() == LLAssetType::AT_OBJECT || + item->getType() == LLAssetType::AT_GESTURE) + && !item->getActualDescription().empty()) + { + LL_DEBUGS() << "Updating description for " << item->getName() << LL_ENDL; + + LLSD updates; + updates["desc"] = ""; + update_inventory_item(item->getUUID(), updates, LLPointer<LLInventoryCallback>(NULL)); + } + } + } + + LLUUID outfit_update_folder = LLUUID::null; + if (needs_wearable_ordering_update && outfit_folder_id.notNull()) + { + // If a wearable item was involved in the link replace operation and replaced + // a link in an outfit folder, we need to update the clothing ordering information + // *after* the original link has been removed. LLAppearanceMgr abuses the actual link + // description to store the clothing ordering information it. We will have to update + // the clothing ordering information or the outfit will be in dirty state when worn. + outfit_update_folder = outfit_folder_id; + } + + LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(&LLFloaterLinkReplace::itemRemovedCallback, this, outfit_update_folder)); + remove_inventory_object(old_item_id, cb); +} + +void LLFloaterLinkReplace::itemRemovedCallback(const LLUUID& outfit_folder_id) +{ + if (outfit_folder_id.notNull()) + { + LLAppearanceMgr::getInstance()->updateClothingOrderingInfo(outfit_folder_id); + } + + if (mInstance) + { + decreaseOpenItemCount(); + } +} + +void LLFloaterLinkReplace::decreaseOpenItemCount() +{ + mRemainingItems--; + + if (mRemainingItems == 0) + { + mStatusText->setText(getString("ReplaceFinished")); + mStartBtn->setEnabled(TRUE); + mRefreshBtn->setEnabled(TRUE); + mEventTimer.stop(); + LL_INFOS() << "Inventory link replace finished." << LL_ENDL; + } + else + { + LLStringUtil::format_map_t args; + args["NUM"] = llformat("%d", mRemainingItems); + mStatusText->setText(getString("ItemsRemaining", args)); + LL_DEBUGS() << "Inventory link replace: " << mRemainingItems << " links remaining..." << LL_ENDL; + } +} + +BOOL LLFloaterLinkReplace::tick() +{ + LL_DEBUGS() << "Calling tick - remaining items = " << mRemainingInventoryItems.size() << LL_ENDL; + + LLInventoryModel::item_array_t current_batch; + + for (U32 i = 0; i < mBatchSize; ++i) + { + if (!mRemainingInventoryItems.size()) + { + mEventTimer.stop(); + break; + } + + current_batch.push_back(mRemainingInventoryItems.back()); + mRemainingInventoryItems.pop_back(); + } + processBatch(current_batch); + + return FALSE; +} + +void LLFloaterLinkReplace::processBatch(LLInventoryModel::item_array_t items) +{ + const LLViewerInventoryItem* target_item = gInventory.getItem(mTargetUUID); + const LLUUID cof_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false); + const LLUUID outfit_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false); + + for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); ++it) + { + LLPointer<LLInventoryItem> source_item = *it; + + if (source_item->getParentUUID() != cof_folder_id) + { + bool is_outfit_folder = gInventory.isObjectDescendentOf(source_item->getParentUUID(), outfit_folder_id); + // If either the new or old item in the COF is a wearable, we need to update wearable ordering after the link has been replaced + bool needs_wearable_ordering_update = (is_outfit_folder && source_item->getType() == LLAssetType::AT_CLOTHING) || target_item->getType() == LLAssetType::AT_CLOTHING; + // Other items in the COF need a description update (description of the actual link item must be empty) + bool needs_description_update = is_outfit_folder && target_item->getType() != LLAssetType::AT_CLOTHING; + + LL_DEBUGS() << "is_outfit_folder = " << (is_outfit_folder ? "true" : "false") << LL_NEWLINE + << "needs_wearable_ordering_update = " << (needs_wearable_ordering_update ? "true" : "false") << LL_NEWLINE + << "needs_description_update = " << (needs_description_update ? "true" : "false") << LL_ENDL; + + LLInventoryObject::const_object_list_t obj_array; + obj_array.push_back(LLConstPointer<LLInventoryObject>(target_item)); + LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(&LLFloaterLinkReplace::linkCreatedCallback, + this, + source_item->getUUID(), + target_item->getUUID(), + needs_wearable_ordering_update, + needs_description_update, + (is_outfit_folder ? source_item->getParentUUID() : LLUUID::null) )); + link_inventory_array(source_item->getParentUUID(), obj_array, cb); + } + else + { + decreaseOpenItemCount(); + } + } +} + + +////////////////////////////////////////////////////////////////////////////// +// LLInventoryLinkReplaceDropTarget + +static LLDefaultChildRegistry::Register<LLInventoryLinkReplaceDropTarget> r("inventory_link_replace_drop_target"); + +BOOL LLInventoryLinkReplaceDropTarget::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, + EDragAndDropType cargo_type, + void* cargo_data, + EAcceptance* accept, + std::string& tooltip_msg) +{ + LLInventoryItem* item = (LLInventoryItem*)cargo_data; + + if (cargo_type >= DAD_TEXTURE && cargo_type <= DAD_LINK && + item && item->getActualType() != LLAssetType::AT_LINK_FOLDER && item->getType() != LLAssetType::AT_CATEGORY && + ( + LLAssetType::lookupCanLink(item->getType()) || + (item->getType() == LLAssetType::AT_LINK && !gInventory.getObject(item->getLinkedUUID())) // Broken Link! + )) + { + if (drop) + { + setItem(item); + if (!mDADSignal.empty()) + { + mDADSignal(mItemID); + } + } + else + { + *accept = ACCEPT_YES_SINGLE; + } + } + else + { + *accept = ACCEPT_NO; + } + + return TRUE; +} + +void LLInventoryLinkReplaceDropTarget::setItem(LLInventoryItem* item) +{ + if (item) + { + mItemID = item->getLinkedUUID(); + setText(item->getName()); + } + else + { + mItemID.setNull(); + setText(LLStringExplicit("")); + } +} diff --git a/indra/newview/llfloaterlinkreplace.h b/indra/newview/llfloaterlinkreplace.h new file mode 100644 index 0000000000..377dd1d450 --- /dev/null +++ b/indra/newview/llfloaterlinkreplace.h @@ -0,0 +1,127 @@ +/** + * @file llfloaterlinkreplace.h + * @brief Allows replacing link targets in inventory links + * @author Ansariel Hiller + * + * $LicenseInfo:firstyear=2017&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2017, 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_FLOATERLINKREPLACE_H +#define LL_FLOATERLINKREPLACE_H + +#include "llfloater.h" +#include "lleventtimer.h" +#include "lllineeditor.h" +#include "llinventoryfunctions.h" +#include "llviewerinventory.h" + +class LLButton; +class LLTextBox; + +class LLInventoryLinkReplaceDropTarget : public LLLineEditor +{ +public: + struct Params : public LLInitParam::Block<Params, LLLineEditor::Params> + { + Params() + {} + }; + + LLInventoryLinkReplaceDropTarget(const Params& p) + : LLLineEditor(p) {} + ~LLInventoryLinkReplaceDropTarget() {} + + typedef boost::signals2::signal<void(const LLUUID& id)> item_dad_callback_t; + boost::signals2::connection setDADCallback(const item_dad_callback_t::slot_type& cb) + { + return mDADSignal.connect(cb); + } + + virtual BOOL postBuild() + { + setEnabled(FALSE); + return LLLineEditor::postBuild(); + } + + virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, + EDragAndDropType cargo_type, + void* cargo_data, + EAcceptance* accept, + std::string& tooltip_msg); + + LLUUID getItemID() const { return mItemID; } + void setItem(LLInventoryItem* item); + +private: + LLUUID mItemID; + + item_dad_callback_t mDADSignal; +}; + + +class LLFloaterLinkReplace : public LLFloater, LLEventTimer +{ + LOG_CLASS(LLFloaterLinkReplace); + +public: + LLFloaterLinkReplace(const LLSD& key); + virtual ~LLFloaterLinkReplace(); + + BOOL postBuild(); + virtual void onOpen(const LLSD& key); + + virtual BOOL tick(); + +private: + void checkEnableStart(); + void onStartClicked(); + void decreaseOpenItemCount(); + void updateFoundLinks(); + void processBatch(LLInventoryModel::item_array_t items); + + void linkCreatedCallback(const LLUUID& old_item_id, + const LLUUID& target_item_id, + bool needs_wearable_ordering_update, + bool needs_description_update, + const LLUUID& outfit_folder_id); + void itemRemovedCallback(const LLUUID& outfit_folder_id); + + void onSourceItemDrop(const LLUUID& source_item_id); + void onTargetItemDrop(const LLUUID& target_item_id); + + LLInventoryLinkReplaceDropTarget* mSourceEditor; + LLInventoryLinkReplaceDropTarget* mTargetEditor; + LLButton* mStartBtn; + LLButton* mRefreshBtn; + LLTextBox* mStatusText; + + LLUUID mSourceUUID; + LLUUID mTargetUUID; + U32 mRemainingItems; + U32 mBatchSize; + + LLInventoryModel::item_array_t mRemainingInventoryItems; + + LLFloaterLinkReplace* mInstance; +}; + +#endif // LL_FLOATERLINKREPLACE_H diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index c654817849..b3885bf36c 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -1262,6 +1262,10 @@ LLModelPreview::~LLModelPreview() // glod.dll!glodShutdown() + 0x77 bytes // //glodShutdown(); + if(mModelLoader) + { + mModelLoader->shutdown(); + } } U32 LLModelPreview::calcResourceCost() diff --git a/indra/newview/llfloaterpreviewtrash.cpp b/indra/newview/llfloaterpreviewtrash.cpp new file mode 100644 index 0000000000..cf4e3f04e6 --- /dev/null +++ b/indra/newview/llfloaterpreviewtrash.cpp @@ -0,0 +1,82 @@ +/** + * @file llfloaterpreviewtrash.cpp + * @author AndreyK Productengine + * @brief LLFloaterPreviewTrash class implementation + * + * $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 "llfloaterpreviewtrash.h" + +#include "llinventoryfunctions.h" +#include "llfloaterreg.h" + +LLFloaterPreviewTrash::LLFloaterPreviewTrash(const LLSD& key) +: LLFloater(key) +{ +} + +BOOL LLFloaterPreviewTrash::postBuild() +{ + getChild<LLUICtrl>("empty_btn")->setCommitCallback( + boost::bind(&LLFloaterPreviewTrash::onClickEmpty, this)); + getChild<LLUICtrl>("cancel_btn")->setCommitCallback( + boost::bind(&LLFloaterPreviewTrash::onClickCancel, this)); + // Always center the dialog. User can change the size, + // but purchases are important and should be center screen. + // This also avoids problems where the user resizes the application window + // mid-session and the saved rect is off-center. + center(); + + return TRUE; +} + +LLFloaterPreviewTrash::~LLFloaterPreviewTrash() +{ +} + + +// static +void LLFloaterPreviewTrash::show() +{ + LLFloaterReg::showTypedInstance<LLFloaterPreviewTrash>("preview_trash", LLSD(), TRUE); +} + +// static +bool LLFloaterPreviewTrash::isVisible() +{ + return LLFloaterReg::instanceVisible("preview_trash"); +} + + +void LLFloaterPreviewTrash::onClickEmpty() +{ + gInventory.emptyFolderType("PurgeSelectedItems", LLFolderType::FT_TRASH); + closeFloater(); +} + +void LLFloaterPreviewTrash::onClickCancel() +{ + closeFloater(); +} diff --git a/indra/newview/llfloaterpreviewtrash.h b/indra/newview/llfloaterpreviewtrash.h new file mode 100644 index 0000000000..465c0c677f --- /dev/null +++ b/indra/newview/llfloaterpreviewtrash.h @@ -0,0 +1,49 @@ +/** + * @file llfloaterpreviewtrash.h + * @author AndreyK Productengine + * @brief LLFloaterPreviewTrash 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_LLFLOATERPREVIEWTRASH_H +#define LL_LLFLOATERPREVIEWTRASH_H + +#include "llfloater.h" + +class LLFloaterPreviewTrash +: public LLFloater +{ +public: + static void show(); + static bool isVisible(); + + LLFloaterPreviewTrash(const LLSD& key); + ~LLFloaterPreviewTrash(); + /*virtual*/ BOOL postBuild(); + +protected: + void onClickEmpty(); + void onClickCancel(); +}; + +#endif diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 75d7d787b1..c33dee5fb4 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -2235,11 +2235,12 @@ bool LLPanelEstateInfo::estateUpdate(LLMessageSystem* msg) BOOL LLPanelEstateInfo::postBuild() { // set up the callbacks for the generic controls - initCtrl("externally_visible_check"); + initCtrl("externally_visible_radio"); initCtrl("allow_direct_teleport"); initCtrl("limit_payment"); initCtrl("limit_age_verified"); initCtrl("voice_chat_check"); + initCtrl("parcel_access_override"); getChild<LLUICtrl>("allowed_avatar_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1)); LLNameListCtrl *avatar_name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list"); @@ -2287,13 +2288,15 @@ BOOL LLPanelEstateInfo::postBuild() childSetAction("message_estate_btn", boost::bind(&LLPanelEstateInfo::onClickMessageEstate, this)); childSetAction("kick_user_from_estate_btn", boost::bind(&LLPanelEstateInfo::onClickKickUser, this)); + getChild<LLUICtrl>("parcel_access_override")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeAccessOverride, this)); + return LLPanelRegionInfo::postBuild(); } void LLPanelEstateInfo::refresh() { // Disable access restriction controls if they make no sense. - bool public_access = getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean(); + bool public_access = getChild<LLRadioGroup>("externally_visible_radio")->getSelectedIndex(); getChildView("Only Allow")->setEnabled(public_access); getChildView("limit_payment")->setEnabled(public_access); @@ -2314,11 +2317,12 @@ void LLPanelEstateInfo::refreshFromEstate() getChild<LLUICtrl>("estate_name")->setValue(estate_info.getName()); setOwnerName(LLSLURL("agent", estate_info.getOwnerID(), "inspect").getSLURLString()); - getChild<LLUICtrl>("externally_visible_check")->setValue(estate_info.getIsExternallyVisible()); + getChild<LLRadioGroup>("externally_visible_radio")->setSelectedIndex(estate_info.getIsExternallyVisible() ? 1 : 0); getChild<LLUICtrl>("voice_chat_check")->setValue(estate_info.getAllowVoiceChat()); getChild<LLUICtrl>("allow_direct_teleport")->setValue(estate_info.getAllowDirectTeleport()); getChild<LLUICtrl>("limit_payment")->setValue(estate_info.getDenyAnonymous()); getChild<LLUICtrl>("limit_age_verified")->setValue(estate_info.getDenyAgeUnverified()); + getChild<LLUICtrl>("parcel_access_override")->setValue(estate_info.getAllowAccessOverride()); // Ensure appriopriate state of the management UI updateControls(gAgent.getRegion()); @@ -2356,12 +2360,14 @@ bool LLPanelEstateInfo::callbackChangeLindenEstate(const LLSD& notification, con // update model estate_info.setUseFixedSun(false); // we don't support fixed sun estates anymore - estate_info.setIsExternallyVisible(getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean()); + estate_info.setIsExternallyVisible(getChild<LLRadioGroup>("externally_visible_radio")->getSelectedIndex()); estate_info.setAllowDirectTeleport(getChild<LLUICtrl>("allow_direct_teleport")->getValue().asBoolean()); estate_info.setDenyAnonymous(getChild<LLUICtrl>("limit_payment")->getValue().asBoolean()); estate_info.setDenyAgeUnverified(getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean()); estate_info.setAllowVoiceChat(getChild<LLUICtrl>("voice_chat_check")->getValue().asBoolean()); - + estate_info.setAllowAccessOverride(getChild<LLUICtrl>("parcel_access_override")->getValue().asBoolean()); + // JIGGLYPUFF + //estate_info.setAllowAccessOverride(getChild<LLUICtrl>("")->getValue().asBoolean()); // send the update to sim estate_info.sendEstateInfo(); } @@ -2462,6 +2468,14 @@ bool LLPanelEstateInfo::onMessageCommit(const LLSD& notification, const LLSD& re return false; } +void LLPanelEstateInfo::onChangeAccessOverride() +{ + if (!getChild<LLUICtrl>("parcel_access_override")->getValue().asBoolean()) + { + LLNotificationsUtil::add("EstateParcelAccessOverride"); + } +} + LLPanelEstateCovenant::LLPanelEstateCovenant() : mCovenantID(LLUUID::null), diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index dbb0ad05e9..c9d0e51640 100644 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -274,6 +274,7 @@ public: void onChangeFixedSun(); void onChangeUseGlobalTime(); + void onChangeAccessOverride(); void onClickEditSky(); void onClickEditSkyHelp(); diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index ff8b8b0403..feef726630 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -269,8 +269,11 @@ void notify_of_message(const LLSD& msg, bool is_dnd_msg) { if(!gAgent.isDoNotDisturb()) { - // Open conversations floater - LLFloaterReg::showInstance("im_container"); + if(!LLAppViewer::instance()->quitRequested() && !LLFloater::isVisible(im_box)) + { + // Open conversations floater + LLFloaterReg::showInstance("im_container"); + } im_box->collapseMessagesPane(false); if (session_floater) { @@ -2677,49 +2680,57 @@ void LLIMMgr::addMessage( LLIMModel::getInstance()->newSession(new_session_id, fixed_session_name, dialog, other_participant_id, false, is_offline_msg); LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(new_session_id); - skip_message &= !session->isGroupSessionType(); // Do not skip group chats... - if(skip_message) - { - gIMMgr->leaveSession(new_session_id); - } - // When we get a new IM, and if you are a god, display a bit - // of information about the source. This is to help liaisons - // when answering questions. - if(gAgent.isGodlike()) + if (session) { - // *TODO:translate (low priority, god ability) - std::ostringstream bonus_info; - bonus_info << LLTrans::getString("***")+ " "+ LLTrans::getString("IMParentEstate") + ":" + " " - << parent_estate_id - << ((parent_estate_id == 1) ? "," + LLTrans::getString("IMMainland") : "") - << ((parent_estate_id == 5) ? "," + LLTrans::getString ("IMTeen") : ""); - - // once we have web-services (or something) which returns - // information about a region id, we can print this out - // and even have it link to map-teleport or something. - //<< "*** region_id: " << region_id << std::endl - //<< "*** position: " << position << std::endl; + skip_message &= !session->isGroupSessionType(); // Do not skip group chats... + if (skip_message) + { + gIMMgr->leaveSession(new_session_id); + } + // When we get a new IM, and if you are a god, display a bit + // of information about the source. This is to help liaisons + // when answering questions. + if (gAgent.isGodlike()) + { + // *TODO:translate (low priority, god ability) + std::ostringstream bonus_info; + bonus_info << LLTrans::getString("***") + " " + LLTrans::getString("IMParentEstate") + ":" + " " + << parent_estate_id + << ((parent_estate_id == 1) ? "," + LLTrans::getString("IMMainland") : "") + << ((parent_estate_id == 5) ? "," + LLTrans::getString("IMTeen") : ""); + + // once we have web-services (or something) which returns + // information about a region id, we can print this out + // and even have it link to map-teleport or something. + //<< "*** region_id: " << region_id << std::endl + //<< "*** position: " << position << std::endl; + + LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, bonus_info.str()); + } - LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, bonus_info.str()); - } + // Logically it would make more sense to reject the session sooner, in another area of the + // code, but the session has to be established inside the server before it can be left. + if (LLMuteList::getInstance()->isMuted(other_participant_id, LLMute::flagTextChat) && !from_linden) + { + LL_WARNS() << "Leaving IM session from initiating muted resident " << from << LL_ENDL; + if (!gIMMgr->leaveSession(new_session_id)) + { + LL_INFOS() << "Session " << new_session_id << " does not exist." << LL_ENDL; + } + return; + } - // Logically it would make more sense to reject the session sooner, in another area of the - // code, but the session has to be established inside the server before it can be left. - if (LLMuteList::getInstance()->isMuted(other_participant_id, LLMute::flagTextChat) && !from_linden) - { - LL_WARNS() << "Leaving IM session from initiating muted resident " << from << LL_ENDL; - if(!gIMMgr->leaveSession(new_session_id)) + //Play sound for new conversations + if (!gAgent.isDoNotDisturb() && (gSavedSettings.getBOOL("PlaySoundNewConversation") == TRUE)) { - LL_INFOS() << "Session " << new_session_id << " does not exist." << LL_ENDL; + make_ui_sound("UISndNewIncomingIMSession"); } - return; } - - //Play sound for new conversations - if (!gAgent.isDoNotDisturb() && (gSavedSettings.getBOOL("PlaySoundNewConversation") == TRUE)) - { - make_ui_sound("UISndNewIncomingIMSession"); - } + else + { + // Failed to create a session, most likely due to empty name (name cache failed?) + LL_WARNS() << "Failed to create IM session " << fixed_session_name << LL_ENDL; + } } if (!LLMuteList::getInstance()->isMuted(other_participant_id, LLMute::flagTextChat) && !skip_message) @@ -3022,7 +3033,7 @@ void LLIMMgr::inviteToSession( LLIncomingCallDialog::processCallResponse(1, payload); return; } - else if (LLMuteList::getInstance()->isMuted(caller_id, LLMute::flagAll & ~LLMute::flagVoiceChat)) + else if (LLMuteList::getInstance()->isMuted(caller_id, LLMute::flagAll & ~LLMute::flagVoiceChat) && !voice_invite) { LL_INFOS() << "Rejecting session invite from initiating muted resident " << caller_name << LL_ENDL; return; diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 555c19baac..1b32fc9dfe 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -391,6 +391,7 @@ void LLInvFVBridge::removeBatch(std::vector<LLFolderViewModelItem*>& batch) } } removeBatchNoCheck(batch); + model->checkTrashOverflow(); } void LLInvFVBridge::removeBatchNoCheck(std::vector<LLFolderViewModelItem*>& batch) @@ -851,6 +852,7 @@ void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags) getClipboardEntries(true, items, disabled_items, flags); } + addLinkReplaceMenuOption(items, disabled_items); hide_context_entries(menu, items, disabled_items); } @@ -1051,6 +1053,20 @@ void LLInvFVBridge::addMarketplaceContextMenuOptions(U32 flags, items.push_back(std::string("Marketplace Listings Separator")); } +void LLInvFVBridge::addLinkReplaceMenuOption(menuentry_vec_t& items, menuentry_vec_t& disabled_items) +{ + const LLInventoryObject* obj = getInventoryObject(); + + if (isAgentInventory() && obj && obj->getType() != LLAssetType::AT_CATEGORY && obj->getType() != LLAssetType::AT_LINK_FOLDER) + { + items.push_back(std::string("Replace Links")); + + if (mRoot->getSelectedCount() != 1) + { + disabled_items.push_back(std::string("Replace Links")); + } + } +} // *TODO: remove this BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const @@ -3855,6 +3871,13 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items } if(trash_id == mUUID) { + bool is_recent_panel = false; + LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE); + if (active_panel && (active_panel->getName() == "Recent Items")) + { + is_recent_panel = true; + } + // This is the trash. items.push_back(std::string("Empty Trash")); @@ -3862,7 +3885,7 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items LLInventoryModel::item_array_t* item_array; gInventory.getDirectDescendentsOf(mUUID, cat_array, item_array); // Enable Empty menu item only when there is something to act upon. - if (0 == cat_array->size() && 0 == item_array->size()) + if ((0 == cat_array->size() && 0 == item_array->size()) || is_recent_panel) { disabled_items.push_back(std::string("Empty Trash")); } @@ -5179,6 +5202,7 @@ void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) disabled_items.push_back(std::string("Save As")); } } + addLinkReplaceMenuOption(items, disabled_items); hide_context_entries(menu, items, disabled_items); } @@ -5251,6 +5275,7 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags) items.push_back(std::string("Sound Play")); } + addLinkReplaceMenuOption(items, disabled_items); hide_context_entries(menu, items, disabled_items); } @@ -5339,6 +5364,7 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags) disabled_items.push_back(std::string("About Landmark")); } + addLinkReplaceMenuOption(items, disabled_items); hide_context_entries(menu, items, disabled_items); } @@ -5641,6 +5667,7 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags) disabled_items.push_back(std::string("Conference Chat")); } } + addLinkReplaceMenuOption(items, disabled_items); hide_context_entries(menu, items, disabled_items); } @@ -5910,6 +5937,7 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) items.push_back(std::string("Activate")); } } + addLinkReplaceMenuOption(items, disabled_items); hide_context_entries(menu, items, disabled_items); } @@ -5967,6 +5995,7 @@ void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags) items.push_back(std::string("Animation Audition")); } + addLinkReplaceMenuOption(items, disabled_items); hide_context_entries(menu, items, disabled_items); } @@ -6283,6 +6312,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) } } } + addLinkReplaceMenuOption(items, disabled_items); hide_context_entries(menu, items, disabled_items); } @@ -6511,6 +6541,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags) } } } + addLinkReplaceMenuOption(items, disabled_items); hide_context_entries(menu, items, disabled_items); } @@ -6682,6 +6713,7 @@ void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags) items.push_back(std::string("Properties")); addDeleteContextMenuOptions(items, disabled_items); } + addLinkReplaceMenuOption(items, disabled_items); hide_context_entries(menu, items, disabled_items); } @@ -6733,6 +6765,7 @@ void LLMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags) getClipboardEntries(true, items, disabled_items, flags); } + addLinkReplaceMenuOption(items, disabled_items); hide_context_entries(menu, items, disabled_items); } diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index b7d8c9d034..e6fcb6be96 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -148,6 +148,9 @@ protected: virtual void addMarketplaceContextMenuOptions(U32 flags, menuentry_vec_t &items, menuentry_vec_t &disabled_items); + virtual void addLinkReplaceMenuOption(menuentry_vec_t& items, + menuentry_vec_t& disabled_items); + protected: LLInvFVBridge(LLInventoryPanel* inventory, LLFolderView* root, const LLUUID& uuid); diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index f04d6cc753..bccc654fbf 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -2306,6 +2306,26 @@ void LLInventoryAction::doToSelected(LLInventoryModel* model, LLFolderView* root // Clear the clipboard before we start adding things on it LLClipboard::instance().reset(); } + if ("replace_links" == action) + { + LLSD params; + if (root->getSelectedCount() == 1) + { + LLFolderViewItem* folder_item = root->getSelectedItems().front(); + LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getViewModelItem(); + + if (bridge) + { + LLInventoryObject* obj = bridge->getInventoryObject(); + if (obj && obj->getType() != LLAssetType::AT_CATEGORY && obj->getActualType() != LLAssetType::AT_LINK_FOLDER) + { + params = LLSD(obj->getUUID()); + } + } + } + LLFloaterReg::showInstance("linkreplace", params); + return; + } static const std::string change_folder_string = "change_folder_type_"; if (action.length() > change_folder_string.length() && diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 855f7c750e..e5fd126d53 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -41,6 +41,7 @@ #include "llinventoryfunctions.h" #include "llinventoryobserver.h" #include "llinventorypanel.h" +#include "llfloaterpreviewtrash.h" #include "llnotificationsutil.h" #include "llmarketplacefunctions.h" #include "llwindow.h" @@ -3299,9 +3300,7 @@ void LLInventoryModel::processMoveInventoryItem(LLMessageSystem* msg, void**) } //---------------------------------------------------------------------------- - // Trash: LLFolderType::FT_TRASH, "ConfirmEmptyTrash" -// Trash: LLFolderType::FT_TRASH, "TrashIsFull" when trash exceeds maximum capacity // Lost&Found: LLFolderType::FT_LOST_AND_FOUND, "ConfirmEmptyLostAndFound" bool LLInventoryModel::callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLFolderType::EType preferred_type) @@ -3319,7 +3318,14 @@ void LLInventoryModel::emptyFolderType(const std::string notification, LLFolderT { if (!notification.empty()) { - LLNotificationsUtil::add(notification, LLSD(), LLSD(), + LLSD args; + if(LLFolderType::FT_TRASH == preferred_type) + { + static const U32 trash_max_capacity = gSavedSettings.getU32("InventoryTrashMaxCapacity"); + const LLUUID trash_id = findCategoryUUIDForType(preferred_type); + args["COUNT"] = (S32)getDescendentsCountRecursive(trash_id, trash_max_capacity); + } + LLNotificationsUtil::add(notification, args, LLSD(), boost::bind(&LLInventoryModel::callbackEmptyFolderType, this, _1, _2, preferred_type)); } else @@ -3415,13 +3421,32 @@ void LLInventoryModel::removeObject(const LLUUID& object_id) } } +bool callback_preview_trash_folder(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (option == 0) // YES + { + LLFloaterPreviewTrash::show(); + } + return false; +} + void LLInventoryModel::checkTrashOverflow() { static const U32 trash_max_capacity = gSavedSettings.getU32("InventoryTrashMaxCapacity"); const LLUUID trash_id = findCategoryUUIDForType(LLFolderType::FT_TRASH); if (getDescendentsCountRecursive(trash_id, trash_max_capacity) >= trash_max_capacity) { - gInventory.emptyFolderType("TrashIsFull", LLFolderType::FT_TRASH); + if (LLFloaterPreviewTrash::isVisible()) + { + // bring to front + LLFloaterPreviewTrash::show(); + } + else + { + LLNotificationsUtil::add("TrashIsFull", LLSD(), LLSD(), + boost::bind(callback_preview_trash_folder, _1, _2)); + } } } diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index dee1769172..c558c0803b 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -411,6 +411,7 @@ public: /// removeItem() or removeCategory(), whichever is appropriate void removeObject(const LLUUID& object_id); + // "TrashIsFull" when trash exceeds maximum capacity void checkTrashOverflow(); protected: diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index a8919db828..406c8b89d0 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -76,13 +76,6 @@ // * Review the download rate throttling. Slow then fast? // Detect bandwidth usage and speed up when it drops? // -// * A lot of calls to notifyObservers(). It looks like -// these could be collapsed by maintaining a 'dirty' -// bit and there appears to be an attempt to do this. -// But it isn't used or is used in a limited fashion. -// Are there semanic issues requiring a call after certain -// updateItem() calls? -// // * An error on a fetch could be due to one item in the batch. // If the batch were broken up, perhaps more of the inventory // would download. (Handwave here, not certain this is an @@ -393,6 +386,12 @@ void LLInventoryModelBackgroundFetch::bulkFetch() { // Process completed background HTTP requests gInventory.handleResponses(false); + // Just processed a bunch of items. + // Note: do we really need notifyObservers() here? + // OnIdle it will be called anyway due to Add flag for processed item. + // It seems like in some cases we are updaiting on fail (no flag), + // but is there anything to update? + gInventory.notifyObservers(); } if ((mFetchCount > max_concurrent_fetches) || @@ -711,7 +710,6 @@ void BGFolderHttpHandler::processData(LLSD & content, LLCore::HttpResponse * res titem->setParent(lost_uuid); titem->updateParentOnServer(FALSE); gInventory.updateItem(titem); - gInventory.notifyObservers(); } } } @@ -784,8 +782,6 @@ void BGFolderHttpHandler::processData(LLSD & content, LLCore::HttpResponse * res { fetcher->setAllFoldersFetched(); } - - gInventory.notifyObservers(); } @@ -828,7 +824,6 @@ void BGFolderHttpHandler::processFailure(LLCore::HttpStatus status, LLCore::Http fetcher->setAllFoldersFetched(); } } - gInventory.notifyObservers(); } @@ -866,7 +861,6 @@ void BGFolderHttpHandler::processFailure(const char * const reason, LLCore::Http fetcher->setAllFoldersFetched(); } } - gInventory.notifyObservers(); } diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index bd15ba4975..4b117941a0 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -43,6 +43,7 @@ #include "llinventorybridge.h" #include "llinventoryfunctions.h" #include "llinventorymodelbackgroundfetch.h" +#include "llnotificationsutil.h" #include "llpreview.h" #include "llsidepanelinventory.h" #include "lltrans.h" @@ -1211,6 +1212,33 @@ void LLInventoryPanel::fileUploadLocation(const LLSD& userdata) } } +void LLInventoryPanel::purgeSelectedItems() +{ + const std::set<LLFolderViewItem*> inventory_selected = mFolderRoot.get()->getSelectionList(); + if (inventory_selected.empty()) return; + LLSD args; + args["COUNT"] = (S32)inventory_selected.size(); + LLNotificationsUtil::add("PurgeSelectedItems", args, LLSD(), boost::bind(&LLInventoryPanel::callbackPurgeSelectedItems, this, _1, _2)); +} + +void LLInventoryPanel::callbackPurgeSelectedItems(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (option == 0) + { + const std::set<LLFolderViewItem*> inventory_selected = mFolderRoot.get()->getSelectionList(); + if (inventory_selected.empty()) return; + + std::set<LLFolderViewItem*>::const_iterator it = inventory_selected.begin(); + const std::set<LLFolderViewItem*>::const_iterator it_end = inventory_selected.end(); + for (; it != it_end; ++it) + { + LLUUID item_id = static_cast<LLFolderViewModelItemInventory*>((*it)->getViewModelItem())->getUUID(); + remove_inventory_object(item_id, NULL); + } + } +} + bool LLInventoryPanel::attachObject(const LLSD& userdata) { // Copy selected item UUIDs to a vector. @@ -1448,6 +1476,11 @@ void LLInventoryPanel::updateSelection() void LLInventoryPanel::doToSelected(const LLSD& userdata) { + if (("purge" == userdata.asString())) + { + purgeSelectedItems(); + return; + } LLInventoryAction::doToSelected(mInventory, mFolderRoot.get(), userdata.asString()); return; @@ -1482,7 +1515,9 @@ BOOL LLInventoryPanel::handleKeyHere( KEY key, MASK mask ) } break; case KEY_DELETE: +#if LL_DARWIN case KEY_BACKSPACE: +#endif // Delete selected items if delete or backspace key hit on the inventory panel // Note: on Mac laptop keyboards, backspace and delete are one and the same if (isSelectionRemovable() && (mask == MASK_NONE)) diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index 5cb9dde47a..5ee58707b0 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -202,6 +202,7 @@ public: void doCreate(const LLSD& userdata); bool beginIMSession(); void fileUploadLocation(const LLSD& userdata); + void purgeSelectedItems(); bool attachObject(const LLSD& userdata); static void idle(void* user_data); @@ -232,6 +233,8 @@ public: // Clean up stuff when the folder root gets deleted void clearFolderRoot(); + void callbackPurgeSelectedItems(const LLSD& notification, const LLSD& response); + protected: void openStartFolderOrMyInventory(); // open the first level of inventory void onItemsCompletion(); // called when selected items are complete diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index 2635054bba..c535fc1cdf 100644 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -67,7 +67,8 @@ const std::string LL_IM_FROM("from"); const std::string LL_IM_FROM_ID("from_id"); const std::string LL_TRANSCRIPT_FILE_EXTENSION("txt"); -const static std::string IM_SEPARATOR(": "); +const static char IM_SYMBOL_SEPARATOR(':'); +const static std::string IM_SEPARATOR(std::string() + IM_SYMBOL_SEPARATOR + " "); const static std::string NEW_LINE("\n"); const static std::string NEW_LINE_SPACE_PREFIX("\n "); const static std::string TWO_SPACES(" "); @@ -838,7 +839,7 @@ void LLChatLogFormatter::format(const LLSD& im, std::ostream& ostr) const } if (im[LL_IM_TIME].isDefined()) -{ + { std::string timestamp = im[LL_IM_TIME].asString(); boost::trim(timestamp); ostr << '[' << timestamp << ']' << TWO_SPACES; @@ -851,9 +852,29 @@ void LLChatLogFormatter::format(const LLSD& im, std::ostream& ostr) const { std::string from = im[LL_IM_FROM].asString(); boost::trim(from); - if (from.size()) + + std::size_t found = from.find(IM_SYMBOL_SEPARATOR); + std::size_t len = from.size(); + std::size_t start = 0; + while (found != std::string::npos) { - ostr << from << IM_SEPARATOR; + std::size_t sub_len = found - start; + if (sub_len > 0) + { + ostr << from.substr(start, sub_len); + } + LLURI::encodeCharacter(ostr, IM_SYMBOL_SEPARATOR); + start = found + 1; + found = from.find(IM_SYMBOL_SEPARATOR, start); + } + if (start < len) + { + std::string str_end = from.substr(start, len - start); + ostr << str_end; + } + if (len > 0) + { + ostr << IM_SEPARATOR; } } @@ -865,7 +886,7 @@ void LLChatLogFormatter::format(const LLSD& im, std::ostream& ostr) const boost::replace_all(im_text, NEW_LINE, NEW_LINE_SPACE_PREFIX); ostr << im_text; } - } +} bool LLChatLogParser::parse(std::string& raw, LLSD& im, const LLSD& parse_params) { @@ -912,7 +933,7 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im, const LLSD& parse_params if (!boost::regex_match(stuff, name_and_text, NAME_AND_TEXT)) return false; bool has_name = name_and_text[IDX_NAME].matched; - std::string name = name_and_text[IDX_NAME]; + std::string name = LLURI::unescape(name_and_text[IDX_NAME]); //we don't need a name/text separator if (has_name && name.length() && name[name.length()-1] == ':') @@ -933,7 +954,7 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im, const LLSD& parse_params std::string::size_type divider_pos = stuff.find(NAME_TEXT_DIVIDER); if (divider_pos != std::string::npos && divider_pos < (stuff.length() - NAME_TEXT_DIVIDER.length())) { - im[LL_IM_FROM] = stuff.substr(0, divider_pos); + im[LL_IM_FROM] = LLURI::unescape(stuff.substr(0, divider_pos)); im[LL_IM_TEXT] = stuff.substr(divider_pos + NAME_TEXT_DIVIDER.length()); return true; } diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 1a533dace7..f7e0e32256 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -3626,7 +3626,15 @@ void LLMeshRepository::notifyLoadedMeshes() //popup queued error messages from background threads while (!mUploadErrorQ.empty()) { - LLNotificationsUtil::add("MeshUploadError", mUploadErrorQ.front()); + LLSD substitutions(mUploadErrorQ.front()); + if (substitutions.has("DETAILS")) + { + LLNotificationsUtil::add("MeshUploadErrorDetails", substitutions); + } + else + { + LLNotificationsUtil::add("MeshUploadError", substitutions); + } mUploadErrorQ.pop(); } diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index 02b28a2bf8..5b53a05274 100644 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -825,13 +825,14 @@ bool LLRenderMuteList::saveToFile() LL_WARNS() << "Couldn't open render mute list file: " << filename << LL_ENDL; return false; } + for (std::map<LLUUID, S32>::iterator it = sVisuallyMuteSettingsMap.begin(); it != sVisuallyMuteSettingsMap.end(); ++it) { if (it->second != 0) { std::string id_string; it->first.toString(id_string); - fprintf(fp, "%d %s\n", (S32)it->second, id_string.c_str()); + fprintf(fp, "%d %s [%d]\n", (S32)it->second, id_string.c_str(), (S32)sVisuallyMuteDateMap[it->first]); } } fclose(fp); @@ -854,8 +855,10 @@ bool LLRenderMuteList::loadFromFile() { id_buffer[0] = '\0'; S32 setting = 0; - sscanf(buffer, " %d %254s\n", &setting, id_buffer); + S32 time = 0; + sscanf(buffer, " %d %254s [%d]\n", &setting, id_buffer, &time); sVisuallyMuteSettingsMap[LLUUID(id_buffer)] = setting; + sVisuallyMuteDateMap[LLUUID(id_buffer)] = (time == 0) ? (S32)time_corrected() : time; } fclose(fp); return true; @@ -866,10 +869,15 @@ void LLRenderMuteList::saveVisualMuteSetting(const LLUUID& agent_id, S32 setting if(setting == 0) { sVisuallyMuteSettingsMap.erase(agent_id); + sVisuallyMuteDateMap.erase(agent_id); } else { sVisuallyMuteSettingsMap[agent_id] = setting; + if (sVisuallyMuteDateMap.find(agent_id) == sVisuallyMuteDateMap.end()) + { + sVisuallyMuteDateMap[agent_id] = (S32)time_corrected(); + } } saveToFile(); notifyObservers(); @@ -886,6 +894,17 @@ S32 LLRenderMuteList::getSavedVisualMuteSetting(const LLUUID& agent_id) return 0; } +S32 LLRenderMuteList::getVisualMuteDate(const LLUUID& agent_id) +{ + std::map<LLUUID, S32>::iterator iter = sVisuallyMuteDateMap.find(agent_id); + if (iter != sVisuallyMuteDateMap.end()) + { + return iter->second; + } + + return 0; +} + void LLRenderMuteList::addObserver(LLMuteListObserver* observer) { mObservers.insert(observer); diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h index 9ab978353b..f2fcf3dbb3 100644 --- a/indra/newview/llmutelist.h +++ b/indra/newview/llmutelist.h @@ -184,10 +184,13 @@ public: S32 getSavedVisualMuteSetting(const LLUUID& agent_id); void saveVisualMuteSetting(const LLUUID& agent_id, S32 setting); + S32 getVisualMuteDate(const LLUUID& agent_id); + void addObserver(LLMuteListObserver* observer); void removeObserver(LLMuteListObserver* observer); std::map<LLUUID, S32> sVisuallyMuteSettingsMap; + std::map<LLUUID, S32> sVisuallyMuteDateMap; private: void notifyObservers(); diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index eeeb7e5c25..31e89c0ed0 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -34,6 +34,7 @@ #include "llcommonutils.h" #include "llvfile.h" +#include "llaccordionctrltab.h" #include "llappearancemgr.h" #include "lleconomy.h" #include "llerror.h" @@ -46,6 +47,8 @@ #include "llinventorymodel.h" #include "lllocalbitmaps.h" #include "llnotificationsutil.h" +#include "llpaneloutfitsinventory.h" +#include "lltabcontainer.h" #include "lltexturectrl.h" #include "lltrans.h" #include "llviewercontrol.h" @@ -742,6 +745,33 @@ BOOL LLOutfitGalleryItem::handleRightMouseDown(S32 x, S32 y, MASK mask) return LLUICtrl::handleRightMouseDown(x, y, mask); } +BOOL LLOutfitGallery::handleDoubleClick(S32 x, S32 y, MASK mask) +{ + LLTabContainer* appearence_tabs = LLPanelOutfitsInventory::findInstance()->getChild<LLTabContainer>("appearance_tabs"); + LLPanel* panel = NULL; + LLAccordionCtrl* accordion = NULL; + if (appearence_tabs != NULL) + { + appearence_tabs->selectTabByName("outfitslist_tab"); + panel = appearence_tabs->getCurrentPanel(); + if (panel != NULL) + { + accordion = panel->getChild<LLAccordionCtrl>("outfits_accordion"); + LLOutfitsList* outfit_list = dynamic_cast<LLOutfitsList*>(panel); + if (accordion != NULL && outfit_list != NULL) + { + LLUUID item_id = getSelectedOutfitUUID(); + outfit_list->setSelectedOutfitByUUID(item_id); + LLAccordionCtrlTab* tab = accordion->getSelectedTab(); + tab->showAndFocusHeader(); + return TRUE; + } + } + } + + return LLUICtrl::handleDoubleClick(x, y, mask); +} + void LLOutfitGalleryItem::setImageAssetId(LLUUID image_asset_id) { mImageAssetId = image_asset_id; diff --git a/indra/newview/lloutfitgallery.h b/indra/newview/lloutfitgallery.h index b9fc10f015..37e75f1109 100644 --- a/indra/newview/lloutfitgallery.h +++ b/indra/newview/lloutfitgallery.h @@ -114,6 +114,9 @@ public: void onTexturePickerUpdateImageStats(LLPointer<LLViewerTexture> texture); void onBeforeOutfitSnapshotSave(); void onAfterOutfitSnapshotSave(); + + /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask); + protected: /*virtual*/ void onHighlightBaseOutfit(LLUUID base_id, LLUUID prev_id); /*virtual*/ void onSetSelectedOutfitByUUID(const LLUUID& outfit_uuid); diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index e1f51e62e3..f87ce8aa52 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -311,7 +311,7 @@ void LLOutfitsList::onSetSelectedOutfitByUUID(const LLUUID& outfit_uuid) tab->setFocus(TRUE); ChangeOutfitSelection(list, outfit_uuid); - tab->setDisplayChildren(true); + tab->changeOpenClose(false); } } } diff --git a/indra/newview/llpanelblockedlist.cpp b/indra/newview/llpanelblockedlist.cpp index 25ae4774fc..3322e8a3df 100644 --- a/indra/newview/llpanelblockedlist.cpp +++ b/indra/newview/llpanelblockedlist.cpp @@ -123,6 +123,7 @@ void LLPanelBlockedList::onOpen(const LLSD& key) void LLPanelBlockedList::selectBlocked(const LLUUID& mute_id) { + mBlockedList->resetSelection(); mBlockedList->selectItemByUUID(mute_id); } diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index ad600358dd..a16259886d 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -131,13 +131,13 @@ BOOL LLPanelFace::postBuild() childSetCommitCallback("combobox shininess",&LLPanelFace::onCommitShiny,this); childSetCommitCallback("combobox bumpiness",&LLPanelFace::onCommitBump,this); childSetCommitCallback("combobox alphamode",&LLPanelFace::onCommitAlphaMode,this); - childSetCommitCallback("TexScaleU",&LLPanelFace::onCommitTextureInfo, this); - childSetCommitCallback("TexScaleV",&LLPanelFace::onCommitTextureInfo, this); - childSetCommitCallback("TexRot",&LLPanelFace::onCommitTextureInfo, this); + childSetCommitCallback("TexScaleU",&LLPanelFace::onCommitTextureScaleX, this); + childSetCommitCallback("TexScaleV",&LLPanelFace::onCommitTextureScaleY, this); + childSetCommitCallback("TexRot",&LLPanelFace::onCommitTextureRot, this); childSetCommitCallback("rptctrl",&LLPanelFace::onCommitRepeatsPerMeter, this); childSetCommitCallback("checkbox planar align",&LLPanelFace::onCommitPlanarAlign, this); - childSetCommitCallback("TexOffsetU",LLPanelFace::onCommitTextureInfo, this); - childSetCommitCallback("TexOffsetV",LLPanelFace::onCommitTextureInfo, this); + childSetCommitCallback("TexOffsetU",LLPanelFace::onCommitTextureOffsetX, this); + childSetCommitCallback("TexOffsetV",LLPanelFace::onCommitTextureOffsetY, this); childSetCommitCallback("bumpyScaleU",&LLPanelFace::onCommitMaterialBumpyScaleX, this); childSetCommitCallback("bumpyScaleV",&LLPanelFace::onCommitMaterialBumpyScaleY, this); @@ -691,6 +691,8 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) } getChildView("radio_material_type")->setEnabled(editable); + getChildView("checkbox_sync_settings")->setEnabled(editable); + childSetValue("checkbox_sync_settings", gSavedSettings.getBOOL("SyncMaterialSettings")); updateVisibility(); bool identical = true; // true because it is anded below @@ -1863,11 +1865,38 @@ void LLPanelFace::onSelectNormalTexture(const LLSD& data) } //static +void LLPanelFace::syncOffsetX(LLPanelFace* self, F32 offsetU) +{ + LLSelectedTEMaterial::setNormalOffsetX(self,offsetU); + LLSelectedTEMaterial::setSpecularOffsetX(self,offsetU); + self->getChild<LLSpinCtrl>("TexOffsetU")->forceSetValue(offsetU); + self->sendTextureInfo(); +} + +//static +void LLPanelFace::syncOffsetY(LLPanelFace* self, F32 offsetV) +{ + LLSelectedTEMaterial::setNormalOffsetY(self,offsetV); + LLSelectedTEMaterial::setSpecularOffsetY(self,offsetV); + self->getChild<LLSpinCtrl>("TexOffsetV")->forceSetValue(offsetV); + self->sendTextureInfo(); +} + +//static void LLPanelFace::onCommitMaterialBumpyOffsetX(LLUICtrl* ctrl, void* userdata) { LLPanelFace* self = (LLPanelFace*) userdata; llassert_always(self); - LLSelectedTEMaterial::setNormalOffsetX(self,self->getCurrentBumpyOffsetU()); + + if (gSavedSettings.getBOOL("SyncMaterialSettings")) + { + syncOffsetX(self,self->getCurrentBumpyOffsetU()); + } + else + { + LLSelectedTEMaterial::setNormalOffsetX(self,self->getCurrentBumpyOffsetU()); + } + } //static @@ -1875,7 +1904,15 @@ void LLPanelFace::onCommitMaterialBumpyOffsetY(LLUICtrl* ctrl, void* userdata) { LLPanelFace* self = (LLPanelFace*) userdata; llassert_always(self); - LLSelectedTEMaterial::setNormalOffsetY(self,self->getCurrentBumpyOffsetV()); + + if (gSavedSettings.getBOOL("SyncMaterialSettings")) + { + syncOffsetY(self,self->getCurrentBumpyOffsetV()); + } + else + { + LLSelectedTEMaterial::setNormalOffsetY(self,self->getCurrentBumpyOffsetV()); + } } //static @@ -1883,7 +1920,15 @@ void LLPanelFace::onCommitMaterialShinyOffsetX(LLUICtrl* ctrl, void* userdata) { LLPanelFace* self = (LLPanelFace*) userdata; llassert_always(self); - LLSelectedTEMaterial::setSpecularOffsetX(self,self->getCurrentShinyOffsetU()); + + if (gSavedSettings.getBOOL("SyncMaterialSettings")) + { + syncOffsetX(self, self->getCurrentShinyOffsetU()); + } + else + { + LLSelectedTEMaterial::setSpecularOffsetX(self,self->getCurrentShinyOffsetU()); + } } //static @@ -1891,7 +1936,31 @@ void LLPanelFace::onCommitMaterialShinyOffsetY(LLUICtrl* ctrl, void* userdata) { LLPanelFace* self = (LLPanelFace*) userdata; llassert_always(self); - LLSelectedTEMaterial::setSpecularOffsetY(self,self->getCurrentShinyOffsetV()); + + if (gSavedSettings.getBOOL("SyncMaterialSettings")) + { + syncOffsetY(self,self->getCurrentShinyOffsetV()); + } + else + { + LLSelectedTEMaterial::setSpecularOffsetY(self,self->getCurrentShinyOffsetV()); + } +} + +//static +void LLPanelFace::syncRepeatX(LLPanelFace* self, F32 scaleU) +{ + LLSelectedTEMaterial::setNormalRepeatX(self,scaleU); + LLSelectedTEMaterial::setSpecularRepeatX(self,scaleU); + self->sendTextureInfo(); +} + +//static +void LLPanelFace::syncRepeatY(LLPanelFace* self, F32 scaleV) +{ + LLSelectedTEMaterial::setNormalRepeatY(self,scaleV); + LLSelectedTEMaterial::setSpecularRepeatY(self,scaleV); + self->sendTextureInfo(); } //static @@ -1904,7 +1973,16 @@ void LLPanelFace::onCommitMaterialBumpyScaleX(LLUICtrl* ctrl, void* userdata) { bumpy_scale_u *= 0.5f; } - LLSelectedTEMaterial::setNormalRepeatX(self,bumpy_scale_u); + + if (gSavedSettings.getBOOL("SyncMaterialSettings")) + { + self->getChild<LLSpinCtrl>("TexScaleU")->forceSetValue(self->getCurrentBumpyScaleU()); + syncRepeatX(self, bumpy_scale_u); + } + else + { + LLSelectedTEMaterial::setNormalRepeatX(self,bumpy_scale_u); + } } //static @@ -1917,7 +1995,17 @@ void LLPanelFace::onCommitMaterialBumpyScaleY(LLUICtrl* ctrl, void* userdata) { bumpy_scale_v *= 0.5f; } - LLSelectedTEMaterial::setNormalRepeatY(self,bumpy_scale_v); + + + if (gSavedSettings.getBOOL("SyncMaterialSettings")) + { + self->getChild<LLSpinCtrl>("TexScaleV")->forceSetValue(self->getCurrentBumpyScaleV()); + syncRepeatY(self, bumpy_scale_v); + } + else + { + LLSelectedTEMaterial::setNormalRepeatY(self,bumpy_scale_v); + } } //static @@ -1930,7 +2018,16 @@ void LLPanelFace::onCommitMaterialShinyScaleX(LLUICtrl* ctrl, void* userdata) { shiny_scale_u *= 0.5f; } - LLSelectedTEMaterial::setSpecularRepeatX(self,shiny_scale_u); + + if (gSavedSettings.getBOOL("SyncMaterialSettings")) + { + self->getChild<LLSpinCtrl>("TexScaleU")->forceSetValue(self->getCurrentShinyScaleU()); + syncRepeatX(self, shiny_scale_u); + } + else + { + LLSelectedTEMaterial::setSpecularRepeatX(self,shiny_scale_u); + } } //static @@ -1943,7 +2040,24 @@ void LLPanelFace::onCommitMaterialShinyScaleY(LLUICtrl* ctrl, void* userdata) { shiny_scale_v *= 0.5f; } - LLSelectedTEMaterial::setSpecularRepeatY(self,shiny_scale_v); + + if (gSavedSettings.getBOOL("SyncMaterialSettings")) + { + self->getChild<LLSpinCtrl>("TexScaleV")->forceSetValue(self->getCurrentShinyScaleV()); + syncRepeatY(self, shiny_scale_v); + } + else + { + LLSelectedTEMaterial::setSpecularRepeatY(self,shiny_scale_v); + } +} + +//static +void LLPanelFace::syncMaterialRot(LLPanelFace* self, F32 rot) +{ + LLSelectedTEMaterial::setNormalRotation(self,rot * DEG_TO_RAD); + LLSelectedTEMaterial::setSpecularRotation(self,rot * DEG_TO_RAD); + self->sendTextureInfo(); } //static @@ -1951,7 +2065,16 @@ void LLPanelFace::onCommitMaterialBumpyRot(LLUICtrl* ctrl, void* userdata) { LLPanelFace* self = (LLPanelFace*) userdata; llassert_always(self); - LLSelectedTEMaterial::setNormalRotation(self,self->getCurrentBumpyRot() * DEG_TO_RAD); + + if (gSavedSettings.getBOOL("SyncMaterialSettings")) + { + self->getChild<LLSpinCtrl>("TexRot")->forceSetValue(self->getCurrentBumpyRot()); + syncMaterialRot(self, self->getCurrentBumpyRot()); + } + else + { + LLSelectedTEMaterial::setNormalRotation(self,self->getCurrentBumpyRot() * DEG_TO_RAD); + } } //static @@ -1959,7 +2082,16 @@ void LLPanelFace::onCommitMaterialShinyRot(LLUICtrl* ctrl, void* userdata) { LLPanelFace* self = (LLPanelFace*) userdata; llassert_always(self); - LLSelectedTEMaterial::setSpecularRotation(self,self->getCurrentShinyRot() * DEG_TO_RAD); + + if (gSavedSettings.getBOOL("SyncMaterialSettings")) + { + self->getChild<LLSpinCtrl>("TexRot")->forceSetValue(self->getCurrentShinyRot()); + syncMaterialRot(self, self->getCurrentShinyRot()); + } + else + { + LLSelectedTEMaterial::setSpecularRotation(self,self->getCurrentShinyRot() * DEG_TO_RAD); + } } //static @@ -1994,6 +2126,92 @@ void LLPanelFace::onCommitTextureInfo( LLUICtrl* ctrl, void* userdata ) self->updateUI(true); } +// static +void LLPanelFace::onCommitTextureScaleX( LLUICtrl* ctrl, void* userdata ) +{ + LLPanelFace* self = (LLPanelFace*) userdata; + if (gSavedSettings.getBOOL("SyncMaterialSettings")) + { + F32 bumpy_scale_u = self->getChild<LLUICtrl>("TexScaleU")->getValue().asReal(); + if (self->isIdenticalPlanarTexgen()) + { + bumpy_scale_u *= 0.5f; + } + syncRepeatX(self, bumpy_scale_u); + } + else + { + self->sendTextureInfo(); + } + self->updateUI(true); +} + +// static +void LLPanelFace::onCommitTextureScaleY( LLUICtrl* ctrl, void* userdata ) +{ + LLPanelFace* self = (LLPanelFace*) userdata; + if (gSavedSettings.getBOOL("SyncMaterialSettings")) + { + F32 bumpy_scale_v = self->getChild<LLUICtrl>("TexScaleV")->getValue().asReal(); + if (self->isIdenticalPlanarTexgen()) + { + bumpy_scale_v *= 0.5f; + } + syncRepeatY(self, bumpy_scale_v); + } + else + { + self->sendTextureInfo(); + } + self->updateUI(true); +} + +// static +void LLPanelFace::onCommitTextureRot( LLUICtrl* ctrl, void* userdata ) +{ + LLPanelFace* self = (LLPanelFace*) userdata; + + if (gSavedSettings.getBOOL("SyncMaterialSettings")) + { + syncMaterialRot(self, self->getChild<LLUICtrl>("TexRot")->getValue().asReal()); + } + else + { + self->sendTextureInfo(); + } + self->updateUI(true); +} + +// static +void LLPanelFace::onCommitTextureOffsetX( LLUICtrl* ctrl, void* userdata ) +{ + LLPanelFace* self = (LLPanelFace*) userdata; + if (gSavedSettings.getBOOL("SyncMaterialSettings")) + { + syncOffsetX(self, self->getChild<LLUICtrl>("TexOffsetU")->getValue().asReal()); + } + else + { + self->sendTextureInfo(); + } + self->updateUI(true); +} + +// static +void LLPanelFace::onCommitTextureOffsetY( LLUICtrl* ctrl, void* userdata ) +{ + LLPanelFace* self = (LLPanelFace*) userdata; + if (gSavedSettings.getBOOL("SyncMaterialSettings")) + { + syncOffsetY(self, self->getChild<LLUICtrl>("TexOffsetV")->getValue().asReal()); + } + else + { + self->sendTextureInfo(); + } + self->updateUI(true); +} + // Commit the number of repeats per meter // static void LLPanelFace::onCommitRepeatsPerMeter(LLUICtrl* ctrl, void* userdata) @@ -2017,44 +2235,62 @@ void LLPanelFace::onCommitRepeatsPerMeter(LLUICtrl* ctrl, void* userdata) LLSelectedTE::getObjectScaleS(obj_scale_s, identical_scale_s); LLSelectedTE::getObjectScaleS(obj_scale_t, identical_scale_t); + + LLUICtrl* bumpy_scale_u = self->getChild<LLUICtrl>("bumpyScaleU"); + LLUICtrl* bumpy_scale_v = self->getChild<LLUICtrl>("bumpyScaleV"); + LLUICtrl* shiny_scale_u = self->getChild<LLUICtrl>("shinyScaleU"); + LLUICtrl* shiny_scale_v = self->getChild<LLUICtrl>("shinyScaleV"); - switch (material_type) + if (gSavedSettings.getBOOL("SyncMaterialSettings")) { - case MATTYPE_DIFFUSE: - { - LLSelectMgr::getInstance()->selectionTexScaleAutofit( repeats_per_meter ); -} - break; + LLSelectMgr::getInstance()->selectionTexScaleAutofit( repeats_per_meter ); - case MATTYPE_NORMAL: - { - LLUICtrl* bumpy_scale_u = self->getChild<LLUICtrl>("bumpyScaleU"); - LLUICtrl* bumpy_scale_v = self->getChild<LLUICtrl>("bumpyScaleV"); - - bumpy_scale_u->setValue(obj_scale_s * repeats_per_meter); - bumpy_scale_v->setValue(obj_scale_t * repeats_per_meter); + bumpy_scale_u->setValue(obj_scale_s * repeats_per_meter); + bumpy_scale_v->setValue(obj_scale_t * repeats_per_meter); - LLSelectedTEMaterial::setNormalRepeatX(self,obj_scale_s * repeats_per_meter); - LLSelectedTEMaterial::setNormalRepeatY(self,obj_scale_t * repeats_per_meter); - } - break; + LLSelectedTEMaterial::setNormalRepeatX(self,obj_scale_s * repeats_per_meter); + LLSelectedTEMaterial::setNormalRepeatY(self,obj_scale_t * repeats_per_meter); - case MATTYPE_SPECULAR: + shiny_scale_u->setValue(obj_scale_s * repeats_per_meter); + shiny_scale_v->setValue(obj_scale_t * repeats_per_meter); + + LLSelectedTEMaterial::setSpecularRepeatX(self,obj_scale_s * repeats_per_meter); + LLSelectedTEMaterial::setSpecularRepeatY(self,obj_scale_t * repeats_per_meter); + } + else + { + switch (material_type) { - LLUICtrl* shiny_scale_u = self->getChild<LLUICtrl>("shinyScaleU"); - LLUICtrl* shiny_scale_v = self->getChild<LLUICtrl>("shinyScaleV"); - - shiny_scale_u->setValue(obj_scale_s * repeats_per_meter); - shiny_scale_v->setValue(obj_scale_t * repeats_per_meter); + case MATTYPE_DIFFUSE: + { + LLSelectMgr::getInstance()->selectionTexScaleAutofit( repeats_per_meter ); + } + break; - LLSelectedTEMaterial::setSpecularRepeatX(self,obj_scale_s * repeats_per_meter); - LLSelectedTEMaterial::setSpecularRepeatY(self,obj_scale_t * repeats_per_meter); - } - break; + case MATTYPE_NORMAL: + { + bumpy_scale_u->setValue(obj_scale_s * repeats_per_meter); + bumpy_scale_v->setValue(obj_scale_t * repeats_per_meter); - default: - llassert(false); - break; + LLSelectedTEMaterial::setNormalRepeatX(self,obj_scale_s * repeats_per_meter); + LLSelectedTEMaterial::setNormalRepeatY(self,obj_scale_t * repeats_per_meter); + } + break; + + case MATTYPE_SPECULAR: + { + shiny_scale_u->setValue(obj_scale_s * repeats_per_meter); + shiny_scale_v->setValue(obj_scale_t * repeats_per_meter); + + LLSelectedTEMaterial::setSpecularRepeatX(self,obj_scale_s * repeats_per_meter); + LLSelectedTEMaterial::setSpecularRepeatY(self,obj_scale_t * repeats_per_meter); + } + break; + + default: + llassert(false); + break; + } } // vertical scale and repeats per meter depends on each other, so force set on changes self->updateUI(true); diff --git a/indra/newview/llpanelface.h b/indra/newview/llpanelface.h index 078995e787..7c084cb0ab 100644 --- a/indra/newview/llpanelface.h +++ b/indra/newview/llpanelface.h @@ -162,7 +162,12 @@ protected: // Callback funcs for individual controls // - static void onCommitTextureInfo( LLUICtrl* ctrl, void* userdata); + static void onCommitTextureInfo(LLUICtrl* ctrl, void* userdata); + static void onCommitTextureScaleX(LLUICtrl* ctrl, void* userdata); + static void onCommitTextureScaleY(LLUICtrl* ctrl, void* userdata); + static void onCommitTextureRot(LLUICtrl* ctrl, void* userdata); + static void onCommitTextureOffsetX(LLUICtrl* ctrl, void* userdata); + static void onCommitTextureOffsetY(LLUICtrl* ctrl, void* userdata); static void onCommitMaterialBumpyScaleX( LLUICtrl* ctrl, void* userdata); static void onCommitMaterialBumpyScaleY( LLUICtrl* ctrl, void* userdata); @@ -170,6 +175,12 @@ protected: static void onCommitMaterialBumpyOffsetX( LLUICtrl* ctrl, void* userdata); static void onCommitMaterialBumpyOffsetY( LLUICtrl* ctrl, void* userdata); + static void syncRepeatX(LLPanelFace* self, F32 scaleU); + static void syncRepeatY(LLPanelFace* self, F32 scaleV); + static void syncOffsetX(LLPanelFace* self, F32 offsetU); + static void syncOffsetY(LLPanelFace* self, F32 offsetV); + static void syncMaterialRot(LLPanelFace* self, F32 rot); + static void onCommitMaterialShinyScaleX( LLUICtrl* ctrl, void* userdata); static void onCommitMaterialShinyScaleY( LLUICtrl* ctrl, void* userdata); static void onCommitMaterialShinyRot( LLUICtrl* ctrl, void* userdata); diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index fa946ee5c7..3db9500de0 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -1158,6 +1158,26 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata) mFilterEditor->setText(item_name); mFilterEditor->setFocus(TRUE); } + + if (command_name == "replace_links") + { + LLSD params; + LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem(); + if (current_item) + { + LLInvFVBridge* bridge = (LLInvFVBridge*)current_item->getViewModelItem(); + + if (bridge) + { + LLInventoryObject* obj = bridge->getInventoryObject(); + if (obj && obj->getType() != LLAssetType::AT_CATEGORY && obj->getActualType() != LLAssetType::AT_LINK_FOLDER) + { + params = LLSD(obj->getUUID()); + } + } + } + LLFloaterReg::showInstance("linkreplace", params); + } } void LLPanelMainInventory::onVisibilityChange( BOOL new_visibility ) diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 6409620336..dbfebf901a 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -2052,7 +2052,9 @@ BOOL LLPanelObjectInventory::handleKeyHere( KEY key, MASK mask ) switch (key) { case KEY_DELETE: +#if LL_DARWIN case KEY_BACKSPACE: +#endif // Delete selected items if delete or backspace key hit on the inventory panel // Note: on Mac laptop keyboards, backspace and delete are one and the same if (isSelectionRemovable() && mask == MASK_NONE) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index bc177abc57..eb2a297a35 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1465,7 +1465,17 @@ void LLPanelPeople::onOpen(const LLSD& key) { std::string tab_name = key["people_panel_tab_name"]; if (!tab_name.empty()) + { mTabContainer->selectTabByName(tab_name); + if(tab_name == BLOCKED_TAB_NAME) + { + LLPanel* blocked_tab = mTabContainer->getCurrentPanel()->findChild<LLPanel>("panel_block_list_sidetray"); + if(blocked_tab) + { + blocked_tab->onOpen(key); + } + } + } } bool LLPanelPeople::notifyChildren(const LLSD& info) diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index 203c57b732..29ca172f60 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -56,15 +56,20 @@ #include "llfloatergroups.h" #include "llfloaterreg.h" #include "llavataractions.h" +#include "llavatariconctrl.h" #include "llnamebox.h" #include "llviewercontrol.h" #include "lluictrlfactory.h" #include "llspinctrl.h" #include "roles_constants.h" #include "llgroupactions.h" +#include "llgroupiconctrl.h" #include "lltrans.h" #include "llinventorymodel.h" +#include "llavatarnamecache.h" +#include "llcachename.h" + U8 string_value_to_click_action(std::string p_value); std::string click_action_to_string_value( U8 action); @@ -186,10 +191,13 @@ void LLPanelPermissions::disableAll() getChild<LLUICtrl>("pathfinding_attributes_value")->setValue(LLStringUtil::null); getChildView("Creator:")->setEnabled(FALSE); + getChild<LLUICtrl>("Creator Icon")->setVisible(FALSE); getChild<LLUICtrl>("Creator Name")->setValue(LLStringUtil::null); getChildView("Creator Name")->setEnabled(FALSE); getChildView("Owner:")->setEnabled(FALSE); + getChild<LLUICtrl>("Owner Icon")->setVisible(FALSE); + getChild<LLUICtrl>("Owner Group Icon")->setVisible(FALSE); getChild<LLUICtrl>("Owner Name")->setValue(LLStringUtil::null); getChildView("Owner Name")->setEnabled(FALSE); @@ -366,39 +374,87 @@ void LLPanelPermissions::refresh() // Update creator text field getChildView("Creator:")->setEnabled(TRUE); - std::string creator_name; - LLSelectMgr::getInstance()->selectGetCreator(mCreatorID, creator_name); - - getChild<LLUICtrl>("Creator Name")->setValue(creator_name); + std::string creator_app_link; + LLSelectMgr::getInstance()->selectGetCreator(mCreatorID, creator_app_link); + + // Style for creator and owner links (both group and agent) + LLStyle::Params style_params; + LLColor4 link_color = LLUIColorTable::instance().getColor("HTMLLinkColor"); + style_params.color = link_color; + style_params.readonly_color = link_color; + style_params.is_link = true; // link will be added later + const LLFontGL* fontp = getChild<LLTextBox>("Creator Name")->getFont(); + style_params.font.name = LLFontGL::nameFromFont(fontp); + style_params.font.size = LLFontGL::sizeFromFont(fontp); + style_params.font.style = "UNDERLINE"; + + LLAvatarName av_name; + if (LLAvatarNameCache::get(mCreatorID, &av_name)) + { + // If name isn't present, this will 'request' it and trigger refresh() again + LLTextBox* text_box = getChild<LLTextBox>("Creator Name"); + style_params.link_href = creator_app_link; + text_box->setText(av_name.getCompleteName(), style_params); + } + getChild<LLAvatarIconCtrl>("Creator Icon")->setValue(mCreatorID); + getChild<LLAvatarIconCtrl>("Creator Icon")->setVisible(TRUE); getChildView("Creator Name")->setEnabled(TRUE); // Update owner text field getChildView("Owner:")->setEnabled(TRUE); - std::string owner_name; - const BOOL owners_identical = LLSelectMgr::getInstance()->selectGetOwner(mOwnerID, owner_name); - if (mOwnerID.isNull()) + std::string owner_app_link; + const BOOL owners_identical = LLSelectMgr::getInstance()->selectGetOwner(mOwnerID, owner_app_link); + + + if (LLSelectMgr::getInstance()->selectIsGroupOwned()) { - if (LLSelectMgr::getInstance()->selectIsGroupOwned()) + // Group owned already displayed by selectGetOwner + LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(mOwnerID); + if (group_data && group_data->isGroupPropertiesDataComplete()) { - // Group owned already displayed by selectGetOwner + LLTextBox* text_box = getChild<LLTextBox>("Owner Name"); + style_params.link_href = owner_app_link; + text_box->setText(group_data->mName, style_params); + getChild<LLGroupIconCtrl>("Owner Group Icon")->setIconId(group_data->mInsigniaID); + getChild<LLGroupIconCtrl>("Owner Group Icon")->setVisible(TRUE); + getChild<LLUICtrl>("Owner Icon")->setVisible(FALSE); } else { + // Triggers refresh + LLGroupMgr::getInstance()->sendGroupPropertiesRequest(mOwnerID); + } + } + else + { + LLUUID owner_id = mOwnerID; + if (owner_id.isNull()) + { // Display last owner if public - std::string last_owner_name; - LLSelectMgr::getInstance()->selectGetLastOwner(mLastOwnerID, last_owner_name); + std::string last_owner_app_link; + LLSelectMgr::getInstance()->selectGetLastOwner(mLastOwnerID, last_owner_app_link); // It should never happen that the last owner is null and the owner // is null, but it seems to be a bug in the simulator right now. JC - if (!mLastOwnerID.isNull() && !last_owner_name.empty()) + if (!mLastOwnerID.isNull() && !last_owner_app_link.empty()) { - owner_name.append(", last "); - owner_name.append(last_owner_name); + owner_app_link.append(", last "); + owner_app_link.append(last_owner_app_link); } + owner_id = mLastOwnerID; + } + if (LLAvatarNameCache::get(owner_id, &av_name)) + { + // If name isn't present, this will 'request' it and trigger refresh() again + LLTextBox* text_box = getChild<LLTextBox>("Owner Name"); + style_params.link_href = owner_app_link; + text_box->setText(av_name.getCompleteName(), style_params); } + getChild<LLAvatarIconCtrl>("Owner Icon")->setValue(owner_id); + getChild<LLAvatarIconCtrl>("Owner Icon")->setVisible(TRUE); + getChild<LLUICtrl>("Owner Group Icon")->setVisible(FALSE); } - getChild<LLUICtrl>("Owner Name")->setValue(owner_name); getChildView("Owner Name")->setEnabled(TRUE); // update group text field diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp index 1d021ec28f..b2c450aa0c 100644 --- a/indra/newview/llscriptfloater.cpp +++ b/indra/newview/llscriptfloater.cpp @@ -40,6 +40,7 @@ #include "lltoastnotifypanel.h" #include "lltoastscripttextbox.h" #include "lltrans.h" +#include "llviewerobjectlist.h" #include "llviewerwindow.h" #include "llfloaterimsession.h" @@ -61,6 +62,7 @@ LLUUID notification_id_to_object_id(const LLUUID& notification_id) ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// + LLScriptFloater::LLScriptFloater(const LLSD& key) : LLDockableFloater(NULL, true, key) , mScriptForm(NULL) @@ -346,6 +348,11 @@ void LLScriptFloater::hideToastsIfNeeded() ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// +LLScriptFloaterManager::LLScriptFloaterManager() +{ + gSavedSettings.getControl("ScriptDialogLimitations")->getCommitSignal()->connect(boost::bind(&clearScriptNotifications)); +} + void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id) { if(notification_id.isNull()) @@ -365,16 +372,86 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id) // LLDialog can spawn only one instance, LLLoadURL and LLGiveInventory can spawn unlimited number of instances if(OBJ_SCRIPT == obj_type) { - // If an Object spawns more-than-one floater, only the newest one is shown. - // The previous is automatically closed. - script_notification_map_t::const_iterator it = findUsingObjectId(object_id); + static LLCachedControl<U32> script_dialog_limitations(gSavedSettings, "ScriptDialogLimitations", 0); + script_notification_map_t::const_iterator it = mNotifications.end(); + switch (script_dialog_limitations) + { + case SCRIPT_PER_CHANNEL: + { + // If an Object spawns more-than-one floater per channel, only the newest one is shown. + // The previous is automatically closed. + LLNotificationPtr notification = LLNotifications::instance().find(notification_id); + if (notification) + { + it = findUsingObjectIdAndChannel(object_id, notification->getPayload()["chat_channel"].asInteger()); + } + break; + } + case SCRIPT_ATTACHMENT_PER_CHANNEL: + { + LLViewerObject* objectp = gObjectList.findObject(object_id); + if (objectp && objectp->getAttachmentItemID().notNull()) //in user inventory + { + LLNotificationPtr notification = LLNotifications::instance().find(notification_id); + if (notification) + { + it = findUsingObjectIdAndChannel(object_id, notification->getPayload()["chat_channel"].asInteger()); + } + } + else + { + it = findUsingObjectId(object_id); + } + break; + } + case SCRIPT_HUD_PER_CHANNEL: + { + LLViewerObject* objectp = gObjectList.findObject(object_id); + if (objectp && objectp->isHUDAttachment()) + { + LLNotificationPtr notification = LLNotifications::instance().find(notification_id); + if (notification) + { + it = findUsingObjectIdAndChannel(object_id, notification->getPayload()["chat_channel"].asInteger()); + } + } + else + { + it = findUsingObjectId(object_id); + } + break; + } + case SCRIPT_HUD_UNCONSTRAINED: + { + LLViewerObject* objectp = gObjectList.findObject(object_id); + if (objectp && objectp->isHUDAttachment()) + { + // don't remove existing floaters + break; + } + else + { + it = findUsingObjectId(object_id); + } + break; + } + case SCRIPT_PER_OBJECT: + default: + { + // If an Object spawns more-than-one floater, only the newest one is shown. + // The previous is automatically closed. + it = findUsingObjectId(object_id); + break; + } + } + if(it != mNotifications.end()) { LLChicletPanel * chiclet_panelp = LLChicletBar::getInstance()->getChicletPanel(); if (NULL != chiclet_panelp) { LLIMChiclet * chicletp = chiclet_panelp->findChiclet<LLIMChiclet>(it->first); - if(NULL != chicletp) + if (NULL != chicletp) { // Pass the new_message icon state further. set_new_message = chicletp->getShowNewMessagesIcon(); @@ -383,7 +460,7 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id) } LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", it->first); - if(floater) + if (floater) { // Generate chiclet with a "new message" indicator if a docked window was opened but not in focus. See EXT-3142. set_new_message |= !floater->hasFocus(); @@ -579,6 +656,23 @@ LLScriptFloaterManager::script_notification_map_t::const_iterator LLScriptFloate return mNotifications.end(); } +LLScriptFloaterManager::script_notification_map_t::const_iterator LLScriptFloaterManager::findUsingObjectIdAndChannel(const LLUUID& object_id, S32 im_channel) +{ + script_notification_map_t::const_iterator it = mNotifications.begin(); + for (; mNotifications.end() != it; ++it) + { + if (object_id == it->second) + { + LLNotificationPtr notification = LLNotifications::instance().find(it->first); + if (notification && (im_channel == notification->getPayload()["chat_channel"].asInteger())) + { + return it; + } + } + } + return mNotifications.end(); +} + void LLScriptFloaterManager::saveFloaterPosition(const LLUUID& object_id, const FloaterPositionInfo& fpi) { if(object_id.notNull()) @@ -612,6 +706,33 @@ void LLScriptFloaterManager::setFloaterVisible(const LLUUID& notification_id, bo } } +//static +void LLScriptFloaterManager::clearScriptNotifications() +{ + LLScriptFloaterManager* inst = LLScriptFloaterManager::getInstance(); + static const object_type_map TYPE_MAP = initObjectTypeMap(); + + script_notification_map_t::const_iterator ntf_it = inst->mNotifications.begin(); + while (inst->mNotifications.end() != ntf_it) + { + LLUUID notification_id = ntf_it->first; + ntf_it++; // onRemoveNotification() erases notification + LLNotificationPtr notification = LLNotifications::instance().find(notification_id); + if (notification) + { + object_type_map::const_iterator map_it = TYPE_MAP.find(notification->getName()); + if (map_it != TYPE_MAP.end() && map_it->second == OBJ_SCRIPT) + { + if (notification != NULL && !notification->isCancelled()) + { + LLNotificationsUtil::cancel(notification); + } + inst->onRemoveNotification(notification_id); + } + } + } +} + ////////////////////////////////////////////////////////////////// bool LLScriptFloater::isScriptTextbox(LLNotificationPtr notification) diff --git a/indra/newview/llscriptfloater.h b/indra/newview/llscriptfloater.h index c0b84abdcb..0192a8893e 100644 --- a/indra/newview/llscriptfloater.h +++ b/indra/newview/llscriptfloater.h @@ -41,7 +41,7 @@ class LLScriptFloaterManager : public LLSingleton<LLScriptFloaterManager> // *TODO // LLScriptFloaterManager and LLScriptFloater will need some refactoring after we // know how script notifications should look like. - LLSINGLETON_EMPTY_CTOR(LLScriptFloaterManager); + LLSINGLETON(LLScriptFloaterManager); public: typedef enum e_object_type @@ -53,6 +53,15 @@ public: OBJ_UNKNOWN }EObjectType; + typedef enum e_limitation_type + { + SCRIPT_PER_OBJECT = 0, + SCRIPT_PER_CHANNEL = 1, + SCRIPT_ATTACHMENT_PER_CHANNEL, + SCRIPT_HUD_PER_CHANNEL, + SCRIPT_HUD_UNCONSTRAINED + }ELimitationType; + /** * Handles new notifications. * Saves notification and object ids, removes old notification if needed, creates script chiclet @@ -104,6 +113,11 @@ public: protected: + /** + * Removes all script-dialog notifications + */ + static void clearScriptNotifications(); + typedef std::map<std::string, EObjectType> object_type_map; static object_type_map initObjectTypeMap(); @@ -112,6 +126,7 @@ protected: typedef std::map<LLUUID, LLUUID> script_notification_map_t; script_notification_map_t::const_iterator findUsingObjectId(const LLUUID& object_id); + script_notification_map_t::const_iterator findUsingObjectIdAndChannel(const LLUUID& object_id, S32 im_channel); private: diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp index 3c58dd7194..43e7e57814 100644 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -815,40 +815,49 @@ void LLSidepanelItemInfo::onCommitPermissions() //LL_INFOS() << "LLSidepanelItemInfo::onCommitPermissions()" << LL_ENDL; LLViewerInventoryItem* item = findItem(); if(!item) return; + + BOOL is_group_owned; + LLUUID owner_id; + LLUUID group_id; LLPermissions perm(item->getPermissions()); + perm.getOwnership(owner_id, is_group_owned); + if (is_group_owned && gAgent.hasPowerInGroup(owner_id, GP_OBJECT_MANIPULATE)) + { + group_id = owner_id; + } LLCheckBoxCtrl* CheckShareWithGroup = getChild<LLCheckBoxCtrl>("CheckShareWithGroup"); if(CheckShareWithGroup) { - perm.setGroupBits(gAgent.getID(), gAgent.getGroupID(), + perm.setGroupBits(gAgent.getID(), group_id, CheckShareWithGroup->get(), PERM_MODIFY | PERM_MOVE | PERM_COPY); } LLCheckBoxCtrl* CheckEveryoneCopy = getChild<LLCheckBoxCtrl>("CheckEveryoneCopy"); if(CheckEveryoneCopy) { - perm.setEveryoneBits(gAgent.getID(), gAgent.getGroupID(), + perm.setEveryoneBits(gAgent.getID(), group_id, CheckEveryoneCopy->get(), PERM_COPY); } LLCheckBoxCtrl* CheckNextOwnerModify = getChild<LLCheckBoxCtrl>("CheckNextOwnerModify"); if(CheckNextOwnerModify) { - perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(), + perm.setNextOwnerBits(gAgent.getID(), group_id, CheckNextOwnerModify->get(), PERM_MODIFY); } LLCheckBoxCtrl* CheckNextOwnerCopy = getChild<LLCheckBoxCtrl>("CheckNextOwnerCopy"); if(CheckNextOwnerCopy) { - perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(), + perm.setNextOwnerBits(gAgent.getID(), group_id, CheckNextOwnerCopy->get(), PERM_COPY); } LLCheckBoxCtrl* CheckNextOwnerTransfer = getChild<LLCheckBoxCtrl>("CheckNextOwnerTransfer"); if(CheckNextOwnerTransfer) { - perm.setNextOwnerBits(gAgent.getID(), gAgent.getGroupID(), + perm.setNextOwnerBits(gAgent.getID(), group_id, CheckNextOwnerTransfer->get(), PERM_TRANSFER); } if(perm != item->getPermissions() diff --git a/indra/newview/llsky.cpp b/indra/newview/llsky.cpp index a961f0e3b4..3ef89ba920 100644 --- a/indra/newview/llsky.cpp +++ b/indra/newview/llsky.cpp @@ -51,6 +51,7 @@ #include "llvosky.h" #include "llcubemap.h" #include "llviewercontrol.h" +#include "llenvmanager.h" #include "llvowlsky.h" diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index c3a3af091c..2db1e4c67e 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1461,6 +1461,7 @@ bool idle_startup() LLGLState::checkStates(); LLGLState::checkTextureChannels(); + LLEnvManagerNew::getInstance()->usePrefs(); // Load all presets and settings gSky.init(initial_sun_direction); LLGLState::checkStates(); diff --git a/indra/newview/llviewerassetupload.cpp b/indra/newview/llviewerassetupload.cpp index 49d29c0e4e..01b4fcfbe1 100644 --- a/indra/newview/llviewerassetupload.cpp +++ b/indra/newview/llviewerassetupload.cpp @@ -53,6 +53,8 @@ void dialog_refresh_all(); +static const U32 LL_ASSET_UPLOAD_TIMEOUT_SEC = 60; + LLResourceUploadInfo::LLResourceUploadInfo(LLTransactionID transactId, LLAssetType::EType assetType, std::string name, std::string description, S32 compressionInfo, LLFolderType::EType destinationType, @@ -678,6 +680,8 @@ void LLViewerAssetUpload::AssetInventoryUploadCoproc(LLCoreHttpUtil::HttpCorouti const LLUUID &id, std::string url, LLResourceUploadInfo::ptr_t uploadInfo) { LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest); + LLCore::HttpOptions::ptr_t httpOptions(new LLCore::HttpOptions); + httpOptions->setTimeout(LL_ASSET_UPLOAD_TIMEOUT_SEC); LLSD result = uploadInfo->prepareUpload(); uploadInfo->logPreparedUpload(); @@ -699,7 +703,7 @@ void LLViewerAssetUpload::AssetInventoryUploadCoproc(LLCoreHttpUtil::HttpCorouti LLSD body = uploadInfo->generatePostBody(); - result = httpAdapter->postAndSuspend(httpRequest, url, body); + result = httpAdapter->postAndSuspend(httpRequest, url, body, httpOptions); LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS]; LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults); @@ -717,7 +721,7 @@ void LLViewerAssetUpload::AssetInventoryUploadCoproc(LLCoreHttpUtil::HttpCorouti bool success = false; if (!uploader.empty() && uploadInfo->getAssetId().notNull()) { - result = httpAdapter->postFileAndSuspend(httpRequest, uploader, uploadInfo->getAssetId(), uploadInfo->getAssetType()); + result = httpAdapter->postFileAndSuspend(httpRequest, uploader, uploadInfo->getAssetId(), uploadInfo->getAssetType(), httpOptions); httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS]; status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults); @@ -811,14 +815,19 @@ void LLViewerAssetUpload::HandleUploadError(LLCore::HttpStatus status, LLSD &res } else { - if (status.getType() == 499) - { - reason = "The server is experiencing unexpected difficulties."; - } - else + switch (status.getType()) { - reason = "Error in upload request. Please visit " - "http://secondlife.com/support for help fixing this problem."; + case 404: + reason = LLTrans::getString("AssetUploadServerUnreacheble"); + break; + case 499: + reason = LLTrans::getString("AssetUploadServerDifficulties"); + break; + case 503: + reason = LLTrans::getString("AssetUploadServerUnavaliable"); + break; + default: + reason = LLTrans::getString("AssetUploadRequestInvalid"); } } diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index cf18299b0b..0ebacddd9b 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -83,6 +83,7 @@ #include "llfloaterlagmeter.h" #include "llfloaterland.h" #include "llfloaterlandholdings.h" +#include "llfloaterlinkreplace.h" #include "llfloaterloadprefpreset.h" #include "llfloatermap.h" #include "llfloatermarketplacelistings.h" @@ -103,6 +104,7 @@ #include "llfloaterperms.h" #include "llfloaterpostprocess.h" #include "llfloaterpreference.h" +#include "llfloaterpreviewtrash.h" #include "llfloaterproperties.h" #include "llfloaterregiondebugconsole.h" #include "llfloaterregioninfo.h" @@ -257,6 +259,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("lagmeter", "floater_lagmeter.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLagMeter>); LLFloaterReg::add("land_holdings", "floater_land_holdings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLandHoldings>); + LLFloaterReg::add("linkreplace", "floater_linkreplace.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLinkReplace>); LLFloaterReg::add("load_pref_preset", "floater_load_pref_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLoadPrefPreset>); LLFloaterReg::add("mem_leaking", "floater_mem_leaking.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMemLeak>); @@ -307,6 +310,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("preview_scriptedit", "floater_live_lsleditor.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLLiveLSLEditor>, "preview"); LLFloaterReg::add("preview_sound", "floater_preview_sound.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewSound>, "preview"); LLFloaterReg::add("preview_texture", "floater_preview_texture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewTexture>, "preview"); + LLFloaterReg::add("preview_trash", "floater_preview_trash.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreviewTrash>); LLFloaterReg::add("properties", "floater_inventory_item_properties.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterProperties>); LLFloaterReg::add("publish_classified", "floater_publish_classified.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPublishClassifiedFloater>); LLFloaterReg::add("save_pref_preset", "floater_save_pref_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSavePrefPreset>); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 992470cb3a..9d02ec8a9a 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -6042,7 +6042,14 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem) return LLMarketplaceData::instance().getListing(llsdBlock["listing_id"].asInteger()); } } - + + // Error Notification can come with and without reason + if (notificationID == "JoinGroupError" && llsdBlock.has("reason")) + { + LLNotificationsUtil::add("JoinGroupErrorReason", llsdBlock); + return true; + } + LLNotificationsUtil::add(notificationID, llsdBlock); return true; } diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 45dbd95bea..9299e60b1c 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -6274,6 +6274,24 @@ BOOL LLViewerObject::isTempAttachment() const return (mID.notNull() && (mID == mAttachmentItemID)); } +BOOL LLViewerObject::isHiglightedOrBeacon() const +{ + if (LLFloaterReg::instanceVisible("beacons") && (gPipeline.getRenderBeacons() || gPipeline.getRenderHighlights())) + { + BOOL has_media = (getMediaType() == LLViewerObject::MEDIA_SET); + BOOL is_scripted = !isAvatar() && !getParent() && flagScripted(); + BOOL is_physical = !isAvatar() && flagUsePhysics(); + + return (isParticleSource() && gPipeline.getRenderParticleBeacons()) + || (isAudioSource() && gPipeline.getRenderSoundBeacons()) + || (has_media && gPipeline.getRenderMOAPBeacons()) + || (is_scripted && gPipeline.getRenderScriptedBeacons()) + || (is_scripted && flagHandleTouch() && gPipeline.getRenderScriptedTouchBeacons()) + || (is_physical && gPipeline.getRenderPhysicalBeacons()); + } + return FALSE; +} + const LLUUID &LLViewerObject::getAttachmentItemID() const { diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 1e8f3f4ec2..24fcf0517e 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -178,6 +178,8 @@ public: virtual BOOL isHUDAttachment() const { return FALSE; } virtual BOOL isTempAttachment() const; + virtual BOOL isHiglightedOrBeacon() const; + virtual void updateRadius() {}; virtual F32 getVObjRadius() const; // default implemenation is mDrawable->getRadius() @@ -388,7 +390,7 @@ public: // Create if necessary LLAudioSource *getAudioSource(const LLUUID& owner_id); - bool isAudioSource() {return mAudioSourcep != NULL;} + BOOL isAudioSource() const {return mAudioSourcep != NULL;} U8 getMediaType() const; void setMediaType(U8 media_type); diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 325d523992..f4d14a39fe 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -1427,122 +1427,128 @@ void LLViewerParcelMgr::processParcelOverlay(LLMessageSystem *msg, void **user) // static void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **user) { - S32 request_result; - S32 sequence_id; - BOOL snap_selection = FALSE; - S32 self_count = 0; - S32 other_count = 0; - S32 public_count = 0; - S32 local_id; - LLUUID owner_id; - BOOL is_group_owned; - U32 auction_id = 0; - S32 claim_price_per_meter = 0; - S32 rent_price_per_meter = 0; - S32 claim_date = 0; - LLVector3 aabb_min; - LLVector3 aabb_max; - S32 area = 0; - S32 sw_max_prims = 0; - S32 sw_total_prims = 0; - //LLUUID buyer_id; - U8 status = 0; - S32 max_prims = 0; - S32 total_prims = 0; - S32 owner_prims = 0; - S32 group_prims = 0; - S32 other_prims = 0; - S32 selected_prims = 0; - F32 parcel_prim_bonus = 1.f; - BOOL region_push_override = false; - BOOL region_deny_anonymous_override = false; - BOOL region_deny_identified_override = false; // Deprecated - BOOL region_deny_transacted_override = false; // Deprecated - BOOL region_deny_age_unverified_override = false; + S32 request_result; + S32 sequence_id; + BOOL snap_selection = FALSE; + S32 self_count = 0; + S32 other_count = 0; + S32 public_count = 0; + S32 local_id; + LLUUID owner_id; + BOOL is_group_owned; + U32 auction_id = 0; + S32 claim_price_per_meter = 0; + S32 rent_price_per_meter = 0; + S32 claim_date = 0; + LLVector3 aabb_min; + LLVector3 aabb_max; + S32 area = 0; + S32 sw_max_prims = 0; + S32 sw_total_prims = 0; + //LLUUID buyer_id; + U8 status = 0; + S32 max_prims = 0; + S32 total_prims = 0; + S32 owner_prims = 0; + S32 group_prims = 0; + S32 other_prims = 0; + S32 selected_prims = 0; + F32 parcel_prim_bonus = 1.f; + BOOL region_push_override = false; + BOOL region_deny_anonymous_override = false; + BOOL region_deny_identified_override = false; // Deprecated + BOOL region_deny_transacted_override = false; // Deprecated + BOOL region_deny_age_unverified_override = false; + BOOL region_allow_access_override = true; BOOL agent_parcel_update = false; // updating previous(existing) agent parcel - S32 other_clean_time = 0; + S32 other_clean_time = 0; - LLViewerParcelMgr& parcel_mgr = LLViewerParcelMgr::instance(); + LLViewerParcelMgr& parcel_mgr = LLViewerParcelMgr::instance(); - msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_RequestResult, request_result ); - msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_SequenceID, sequence_id ); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_RequestResult, request_result); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_SequenceID, sequence_id); - if (request_result == PARCEL_RESULT_NO_DATA) - { - // no valid parcel data - LL_INFOS() << "no valid parcel data" << LL_ENDL; - return; - } - - // Decide where the data will go. - LLParcel* parcel = NULL; - if (sequence_id == SELECTED_PARCEL_SEQ_ID) - { - // ...selected parcels report this sequence id - parcel_mgr.mRequestResult = PARCEL_RESULT_SUCCESS; - parcel = parcel_mgr.mCurrentParcel; - } - else if (sequence_id == HOVERED_PARCEL_SEQ_ID) - { - parcel_mgr.mHoverRequestResult = PARCEL_RESULT_SUCCESS; - parcel = parcel_mgr.mHoverParcel; - } - else if (sequence_id == COLLISION_NOT_IN_GROUP_PARCEL_SEQ_ID || - sequence_id == COLLISION_NOT_ON_LIST_PARCEL_SEQ_ID || - sequence_id == COLLISION_BANNED_PARCEL_SEQ_ID) - { - parcel_mgr.mHoverRequestResult = PARCEL_RESULT_SUCCESS; - parcel = parcel_mgr.mCollisionParcel; - } - else if (sequence_id == 0 || sequence_id > parcel_mgr.mAgentParcelSequenceID) - { - // new agent parcel - parcel_mgr.mAgentParcelSequenceID = sequence_id; - parcel = parcel_mgr.mAgentParcel; - } - else - { - LL_INFOS() << "out of order agent parcel sequence id " << sequence_id - << " last good " << parcel_mgr.mAgentParcelSequenceID - << LL_ENDL; - return; - } - - msg->getBOOL("ParcelData", "SnapSelection", snap_selection); - msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_SelfCount, self_count); - msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_OtherCount, other_count); - msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_PublicCount, public_count); - msg->getS32Fast( _PREHASH_ParcelData, _PREHASH_LocalID, local_id ); - msg->getUUIDFast(_PREHASH_ParcelData, _PREHASH_OwnerID, owner_id); - msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_IsGroupOwned, is_group_owned); - msg->getU32Fast(_PREHASH_ParcelData, _PREHASH_AuctionID, auction_id); - msg->getS32Fast( _PREHASH_ParcelData, _PREHASH_ClaimDate, claim_date); - msg->getS32Fast( _PREHASH_ParcelData, _PREHASH_ClaimPrice, claim_price_per_meter); - msg->getS32Fast( _PREHASH_ParcelData, _PREHASH_RentPrice, rent_price_per_meter); - msg->getVector3Fast(_PREHASH_ParcelData, _PREHASH_AABBMin, aabb_min); - msg->getVector3Fast(_PREHASH_ParcelData, _PREHASH_AABBMax, aabb_max); - msg->getS32Fast( _PREHASH_ParcelData, _PREHASH_Area, area ); - //msg->getUUIDFast( _PREHASH_ParcelData, _PREHASH_BuyerID, buyer_id); - msg->getU8("ParcelData", "Status", status); - msg->getS32("ParcelData", "SimWideMaxPrims", sw_max_prims ); - msg->getS32("ParcelData", "SimWideTotalPrims", sw_total_prims ); - msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_MaxPrims, max_prims ); - msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_TotalPrims, total_prims ); - msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_OwnerPrims, owner_prims ); - msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_GroupPrims, group_prims ); - msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_OtherPrims, other_prims ); - msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_SelectedPrims, selected_prims ); - msg->getF32Fast(_PREHASH_ParcelData, _PREHASH_ParcelPrimBonus, parcel_prim_bonus ); - msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_RegionPushOverride, region_push_override ); - msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_RegionDenyAnonymous, region_deny_anonymous_override ); - msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_RegionDenyIdentified, region_deny_identified_override ); // Deprecated - msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_RegionDenyTransacted, region_deny_transacted_override ); // Deprecated - if (msg->getNumberOfBlocksFast(_PREHASH_AgeVerificationBlock)) - { - // this block was added later and may not be on older sims, so we have to test its existence first - msg->getBOOLFast(_PREHASH_AgeVerificationBlock, _PREHASH_RegionDenyAgeUnverified, region_deny_age_unverified_override ); - } + if (request_result == PARCEL_RESULT_NO_DATA) + { + // no valid parcel data + LL_INFOS() << "no valid parcel data" << LL_ENDL; + return; + } + + // Decide where the data will go. + LLParcel* parcel = NULL; + if (sequence_id == SELECTED_PARCEL_SEQ_ID) + { + // ...selected parcels report this sequence id + parcel_mgr.mRequestResult = PARCEL_RESULT_SUCCESS; + parcel = parcel_mgr.mCurrentParcel; + } + else if (sequence_id == HOVERED_PARCEL_SEQ_ID) + { + parcel_mgr.mHoverRequestResult = PARCEL_RESULT_SUCCESS; + parcel = parcel_mgr.mHoverParcel; + } + else if (sequence_id == COLLISION_NOT_IN_GROUP_PARCEL_SEQ_ID || + sequence_id == COLLISION_NOT_ON_LIST_PARCEL_SEQ_ID || + sequence_id == COLLISION_BANNED_PARCEL_SEQ_ID) + { + parcel_mgr.mHoverRequestResult = PARCEL_RESULT_SUCCESS; + parcel = parcel_mgr.mCollisionParcel; + } + else if (sequence_id == 0 || sequence_id > parcel_mgr.mAgentParcelSequenceID) + { + // new agent parcel + parcel_mgr.mAgentParcelSequenceID = sequence_id; + parcel = parcel_mgr.mAgentParcel; + } + else + { + LL_INFOS() << "out of order agent parcel sequence id " << sequence_id + << " last good " << parcel_mgr.mAgentParcelSequenceID + << LL_ENDL; + return; + } + + msg->getBOOL("ParcelData", "SnapSelection", snap_selection); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_SelfCount, self_count); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_OtherCount, other_count); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_PublicCount, public_count); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_LocalID, local_id); + msg->getUUIDFast(_PREHASH_ParcelData, _PREHASH_OwnerID, owner_id); + msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_IsGroupOwned, is_group_owned); + msg->getU32Fast(_PREHASH_ParcelData, _PREHASH_AuctionID, auction_id); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_ClaimDate, claim_date); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_ClaimPrice, claim_price_per_meter); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_RentPrice, rent_price_per_meter); + msg->getVector3Fast(_PREHASH_ParcelData, _PREHASH_AABBMin, aabb_min); + msg->getVector3Fast(_PREHASH_ParcelData, _PREHASH_AABBMax, aabb_max); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_Area, area); + //msg->getUUIDFast( _PREHASH_ParcelData, _PREHASH_BuyerID, buyer_id); + msg->getU8("ParcelData", "Status", status); + msg->getS32("ParcelData", "SimWideMaxPrims", sw_max_prims); + msg->getS32("ParcelData", "SimWideTotalPrims", sw_total_prims); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_MaxPrims, max_prims); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_TotalPrims, total_prims); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_OwnerPrims, owner_prims); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_GroupPrims, group_prims); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_OtherPrims, other_prims); + msg->getS32Fast(_PREHASH_ParcelData, _PREHASH_SelectedPrims, selected_prims); + msg->getF32Fast(_PREHASH_ParcelData, _PREHASH_ParcelPrimBonus, parcel_prim_bonus); + msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_RegionPushOverride, region_push_override); + msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_RegionDenyAnonymous, region_deny_anonymous_override); + msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_RegionDenyIdentified, region_deny_identified_override); // Deprecated + msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_RegionDenyTransacted, region_deny_transacted_override); // Deprecated + if (msg->getNumberOfBlocksFast(_PREHASH_AgeVerificationBlock)) + { + // this block was added later and may not be on older sims, so we have to test its existence first + msg->getBOOLFast(_PREHASH_AgeVerificationBlock, _PREHASH_RegionDenyAgeUnverified, region_deny_age_unverified_override); + } + + if (msg->getNumberOfBlocks(_PREHASH_RegionAllowAccessBlock)) + { + msg->getBOOLFast(_PREHASH_RegionAllowAccessBlock, _PREHASH_RegionAllowAccessOverride, region_allow_access_override); + } msg->getS32("ParcelData", "OtherCleanTime", other_clean_time ); @@ -1585,6 +1591,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use parcel->setRegionPushOverride(region_push_override); parcel->setRegionDenyAnonymousOverride(region_deny_anonymous_override); parcel->setRegionDenyAgeUnverifiedOverride(region_deny_age_unverified_override); + parcel->setRegionAllowAccessOverride(region_allow_access_override); parcel->unpackMessage(msg); if (parcel == parcel_mgr.mAgentParcel) diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index 9e09971ced..7d2d6e25c7 100644 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -176,7 +176,7 @@ public: mToolTip = inv_item->getName() + '\n' + inv_item->getDescription(); } - /*virtual*/ bool getDimensions(S32 first_char, S32 num_chars, S32& width, S32& height) const + /*virtual*/ bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const { if (num_chars == 0) { @@ -185,7 +185,7 @@ public: } else { - width = EMBEDDED_ITEM_LABEL_PADDING + mImage->getWidth() + mStyle->getFont()->getWidth(mLabel.c_str()); + width = EMBEDDED_ITEM_LABEL_PADDING + mImage->getWidth() + mStyle->getFont()->getWidthF32(mLabel.c_str()); height = llmax(mImage->getHeight(), mStyle->getFont()->getLineHeight()); } return false; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index f6a16f7da1..3968266c27 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -119,7 +119,7 @@ const F32 MAX_HOVER_Z = 2.0; const F32 MIN_HOVER_Z = -2.0; const F32 MIN_ATTACHMENT_COMPLEXITY = 0.f; -const F32 MAX_ATTACHMENT_COMPLEXITY = 1.0e6f; +const F32 DEFAULT_MAX_ATTACHMENT_COMPLEXITY = 1.0e6f; using namespace LLAvatarAppearanceDefines; @@ -9018,6 +9018,9 @@ void LLVOAvatar::calculateUpdateRenderComplexity() * the official viewer for consideration. *****************************************************************/ static const U32 COMPLEXITY_BODY_PART_COST = 200; + static LLCachedControl<F32> max_complexity_setting(gSavedSettings,"MaxAttachmentComplexity"); + F32 max_attachment_complexity = max_complexity_setting; + max_attachment_complexity = llmax(max_attachment_complexity, DEFAULT_MAX_ATTACHMENT_COMPLEXITY); // Diagnostic list of all textures on our avatar static std::set<LLUUID> all_textures; @@ -9099,7 +9102,7 @@ void LLVOAvatar::calculateUpdateRenderComplexity() << " children: " << attachment_children_cost << LL_ENDL; // Limit attachment complexity to avoid signed integer flipping of the wearer's ACI - cost += (U32)llclamp(attachment_total_cost, MIN_ATTACHMENT_COMPLEXITY, MAX_ATTACHMENT_COMPLEXITY); + cost += (U32)llclamp(attachment_total_cost, MIN_ATTACHMENT_COMPLEXITY, max_attachment_complexity); } } } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 657babd92c..90ba814a15 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -3977,7 +3977,7 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& start_face = face; end_face = face+1; } - + pick_transparent |= isHiglightedOrBeacon(); bool special_cursor = specialHoverCursor(); for (S32 i = start_face; i < end_face; ++i) { diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp index 28ae569ba2..b484b6d709 100644 --- a/indra/newview/llwaterparammanager.cpp +++ b/indra/newview/llwaterparammanager.cpp @@ -427,7 +427,6 @@ void LLWaterParamManager::initSingleton() { LL_DEBUGS("Windlight") << "Initializing water" << LL_ENDL; loadAllPresets(); - LLEnvManagerNew::instance().usePrefs(); } // static diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp index 2b6d88efef..4b4393b07b 100644 --- a/indra/newview/llwlparammanager.cpp +++ b/indra/newview/llwlparammanager.cpp @@ -50,8 +50,6 @@ #include "llagent.h" #include "llviewerregion.h" -#include "lldaycyclemanager.h" -#include "llenvmanager.h" #include "llwlparamset.h" #include "llpostprocess.h" @@ -252,13 +250,13 @@ void LLWLParamManager::addAllSkies(const LLWLParamKey::EScope scope, const LLSD& } } -void LLWLParamManager::refreshRegionPresets() +void LLWLParamManager::refreshRegionPresets(const LLSD& region_sky_presets) { // Remove all region sky presets because they may belong to a previously visited region. clearParamSetsOfScope(LLEnvKey::SCOPE_REGION); // Add all sky presets belonging to the current region. - addAllSkies(LLEnvKey::SCOPE_REGION, LLEnvManagerNew::instance().getRegionSettings().getSkyMap()); + addAllSkies(LLEnvKey::SCOPE_REGION, region_sky_presets); } void LLWLParamManager::loadAllPresets() @@ -487,6 +485,11 @@ bool LLWLParamManager::applyDayCycleParams(const LLSD& params, LLEnvKey::EScope return true; } +void LLWLParamManager::setDefaultDay() +{ + mDay.loadDayCycleFromFile("Default.xml"); +} + bool LLWLParamManager::applySkyParams(const LLSD& params) { mAnimator.deactivate(); @@ -494,6 +497,12 @@ bool LLWLParamManager::applySkyParams(const LLSD& params) return true; } +void LLWLParamManager::setDefaultSky() +{ + getParamSet(LLWLParamKey("Default", LLWLParamKey::SCOPE_LOCAL), mCurParams); +} + + void LLWLParamManager::resetAnimator(F32 curTime, bool run) { mAnimator.setTrack(mDay.mTimeMap, mDay.mDayRate, @@ -672,34 +681,8 @@ void LLWLParamManager::initSingleton() loadAllPresets(); - // load the day - std::string preferred_day = LLEnvManagerNew::instance().getDayCycleName(); - if (!LLDayCycleManager::instance().getPreset(preferred_day, mDay)) - { - // Fall back to default. - LL_WARNS() << "No day cycle named " << preferred_day << ", falling back to defaults" << LL_ENDL; - mDay.loadDayCycleFromFile("Default.xml"); - - // *TODO: Fix user preferences accordingly. - } - - // *HACK - sets cloud scrolling to what we want... fix this better in the future - std::string sky = LLEnvManagerNew::instance().getSkyPresetName(); - if (!getParamSet(LLWLParamKey(sky, LLWLParamKey::SCOPE_LOCAL), mCurParams)) - { - LL_WARNS() << "No sky preset named " << sky << ", falling back to defaults" << LL_ENDL; - getParamSet(LLWLParamKey("Default", LLWLParamKey::SCOPE_LOCAL), mCurParams); - - // *TODO: Fix user preferences accordingly. - } - - // set it to noon - resetAnimator(0.5, LLEnvManagerNew::instance().getUseDayCycle()); - // but use linden time sets it to what the estate is mAnimator.setTimeType(LLWLAnimator::TIME_LINDEN); - - LLEnvManagerNew::instance().usePrefs(); } // static diff --git a/indra/newview/llwlparammanager.h b/indra/newview/llwlparammanager.h index a55f5bd8fa..61f86b747f 100644 --- a/indra/newview/llwlparammanager.h +++ b/indra/newview/llwlparammanager.h @@ -29,7 +29,6 @@ #include <list> #include <map> -#include "llenvmanager.h" #include "llwlparamset.h" #include "llwlanimator.h" #include "llwldaycycle.h" @@ -146,9 +145,14 @@ public: /// apply specified day cycle, setting time to noon by default bool applyDayCycleParams(const LLSD& params, LLEnvKey::EScope scope, F32 time = 0.5); + /// Apply Default.xml map + void setDefaultDay(); + /// apply specified fixed sky params bool applySkyParams(const LLSD& params); + void setDefaultSky(); + // get where the light is pointing inline LLVector4 getLightDir(void) const; @@ -208,7 +212,7 @@ public: void addAllSkies(LLEnvKey::EScope scope, const LLSD& preset_map); /// refresh region-scope presets - void refreshRegionPresets(); + void refreshRegionPresets(const LLSD& region_sky_presets); // returns all skies referenced by the current day cycle (in mDay), with their final names // side effect: applies changes to all internal structures! (trashes all unreferenced skies in scope, keys in day cycle rescoped to scope, etc.) diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml index 07f297cf0a..fbd75618ca 100644 --- a/indra/newview/skins/default/xui/de/floater_about_land.xml +++ b/indra/newview/skins/default/xui/de/floater_about_land.xml @@ -449,7 +449,7 @@ Nur große Parzellen können in der Suche aufgeführt werden. <spinner label="Online-Zeit:" name="HoursSpin"/> <panel name="Allowed_layout_panel"> <text label="Immer erlauben" name="AllowedText"> - Zulässige Einwohner ([COUNT]) + Zulässige Einwohner ([COUNT], max. [MAX]) </text> <name_list name="AccessList" tool_tip="([LISTED] aufgeführt, [MAX] max)"/> <button label="Hinzufügen" name="add_allowed"/> @@ -457,7 +457,7 @@ Nur große Parzellen können in der Suche aufgeführt werden. </panel> <panel name="Banned_layout_panel"> <text label="Verbannen" name="BanCheck"> - Verbannte Einwohner ([COUNT]) + Verbannte Einwohner ([COUNT], max. [MAX]) </text> <name_list name="BannedList" tool_tip="([LISTED] aufgeführt, [MAX] max)"/> <button label="Hinzufügen" name="add_banned"/> diff --git a/indra/newview/skins/default/xui/de/floater_avatar_render_settings.xml b/indra/newview/skins/default/xui/de/floater_avatar_render_settings.xml new file mode 100644 index 0000000000..e73ace4296 --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_avatar_render_settings.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_avatar_render_settings" title="EINSTELLUNGEN ZUR DARSTELLUNG VON AVATAREN"> + <string name="av_never_render" value="Nie"/> + <string name="av_always_render" value="Immer"/> + <filter_editor label="Nach Personen filtern" name="people_filter_input"/> + <menu_button name="plus_btn" tool_tip="Aktionen für ausgewählte Person"/> + <name_list name="render_settings_list"> + <name_list.columns label="Name" name="name"/> + <name_list.columns label="Darstellungseinstellung" name="setting"/> + </name_list> +</floater> diff --git a/indra/newview/skins/default/xui/de/floater_flickr.xml b/indra/newview/skins/default/xui/de/floater_flickr.xml index b50fa19ec8..525d015c2b 100644 --- a/indra/newview/skins/default/xui/de/floater_flickr.xml +++ b/indra/newview/skins/default/xui/de/floater_flickr.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_flickr" title="AUF FLICKR HOCHLADEN"> +<floater name="floater_flickr" title="AUF FLICKR TEILEN"> <panel name="background"> <tab_container name="tabs"> <panel label="FOTO" name="panel_flickr_photo"/> diff --git a/indra/newview/skins/default/xui/de/floater_preferences.xml b/indra/newview/skins/default/xui/de/floater_preferences.xml index 3624c4c968..a4f6df515d 100644 --- a/indra/newview/skins/default/xui/de/floater_preferences.xml +++ b/indra/newview/skins/default/xui/de/floater_preferences.xml @@ -13,5 +13,6 @@ <panel label="Privatsphäre" name="im"/> <panel label="Konfiguration" name="input"/> <panel label="Erweitert" name="advanced1"/> + <panel label="Uploads" name="uploads"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_tos.xml b/indra/newview/skins/default/xui/de/floater_tos.xml index 0193cf619d..6fee9b5204 100644 --- a/indra/newview/skins/default/xui/de/floater_tos.xml +++ b/indra/newview/skins/default/xui/de/floater_tos.xml @@ -13,6 +13,6 @@ Lesen Sie die folgenden Servicebedingungen und Datenbestimmungen sorgfältig durch. Sie müssen den Servicebedingungen zustimmen, um sich bei [SECOND_LIFE] anmelden zu können. </text> <text name="external_tos_required"> - Sie müssen sich auf my.secondlife.com anmelden und die Servicebedingungen akzeptieren, bevor Sie fortfahren können. Vielen Dank! + Sie müssen sich unter https://my.secondlife.com anmelden und die Servicebedingungen akzeptieren, bevor Sie fortfahren können. Vielen Dank! </text> </floater> diff --git a/indra/newview/skins/default/xui/de/menu_attachment_other.xml b/indra/newview/skins/default/xui/de/menu_attachment_other.xml index e0f0ea72ed..7d8fc9a1f6 100644 --- a/indra/newview/skins/default/xui/de/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/de/menu_attachment_other.xml @@ -17,8 +17,10 @@ <menu_item_call label="Hineinzoomen" name="Zoom In"/> <menu_item_call label="Bezahlen" name="Pay..."/> <menu_item_call label="Objektprofil" name="Object Inspect"/> - <menu_item_check label="Normal darstellen" name="RenderNormally"/> - <menu_item_check label="Nicht darstellen" name="DoNotRender"/> - <menu_item_check label="Komplett darstellen" name="AlwaysRenderFully"/> + <context_menu label="Avatar darstellen" name="Render Avatar"> + <menu_item_check label="Standard" name="RenderNormally"/> + <menu_item_check label="Immer" name="AlwaysRenderFully"/> + <menu_item_check label="Nie" name="DoNotRender"/> + </context_menu> <menu_item_call label="Partikeleigentümer blockieren" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/de/menu_avatar_other.xml b/indra/newview/skins/default/xui/de/menu_avatar_other.xml index 9c24dc2199..9bfab36f76 100644 --- a/indra/newview/skins/default/xui/de/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/de/menu_avatar_other.xml @@ -16,8 +16,10 @@ <menu_item_call label="XML ausgeben" name="Dump XML"/> <menu_item_call label="Hineinzoomen" name="Zoom In"/> <menu_item_call label="Bezahlen" name="Pay..."/> - <menu_item_check label="Normal darstellen" name="RenderNormally"/> - <menu_item_check label="Nicht darstellen" name="DoNotRender"/> - <menu_item_check label="Komplett darstellen" name="AlwaysRenderFully"/> + <context_menu label="Avatar darstellen" name="Render Avatar"> + <menu_item_check label="Standard" name="RenderNormally"/> + <menu_item_check label="Immer" name="AlwaysRenderFully"/> + <menu_item_check label="Nie" name="DoNotRender"/> + </context_menu> <menu_item_call label="Partikeleigentümer blockieren" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/de/menu_avatar_rendering_settings.xml b/indra/newview/skins/default/xui/de/menu_avatar_rendering_settings.xml new file mode 100644 index 0000000000..8d8498e77c --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_avatar_rendering_settings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Settings"> + <menu_item_check label="Standard" name="default"/> + <menu_item_check label="Immer darstellen" name="always_render"/> + <menu_item_check label="Nie darstellen" name="never_render"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/de/menu_avatar_rendering_settings_add.xml b/indra/newview/skins/default/xui/de/menu_avatar_rendering_settings_add.xml new file mode 100644 index 0000000000..01125c0799 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_avatar_rendering_settings_add.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="menu_settings_add.xml"> + <menu_item_call label="Einwohner immer darstellen..." name="add_avatar_always_render"/> + <menu_item_call label="Einwohner nie darstellen..." name="add_avatar_never_render"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/de/menu_gesture_gear.xml b/indra/newview/skins/default/xui/de/menu_gesture_gear.xml index 953c0eeed5..c3e6e94e51 100644 --- a/indra/newview/skins/default/xui/de/menu_gesture_gear.xml +++ b/indra/newview/skins/default/xui/de/menu_gesture_gear.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_gesture_gear"> - <menu_item_call label="Zu Favoriten hinzufügen/daraus entfernen" name="activate"/> + <menu_item_call label="Ausgewählte Geste aktivieren/deaktivieren" name="activate"/> <menu_item_call label="Kopieren" name="copy_gesture"/> <menu_item_call label="Einfügen" name="paste"/> <menu_item_call label="UUID kopieren" name="copy_uuid"/> diff --git a/indra/newview/skins/default/xui/de/menu_inventory.xml b/indra/newview/skins/default/xui/de/menu_inventory.xml index e1f545adfc..178f8f6589 100644 --- a/indra/newview/skins/default/xui/de/menu_inventory.xml +++ b/indra/newview/skins/default/xui/de/menu_inventory.xml @@ -42,6 +42,12 @@ <menu_item_call label="Neues Haar" name="New Hair"/> <menu_item_call label="Neue Augen" name="New Eyes"/> </menu> + <menu label="Als Standard verwenden für" name="upload_def"> + <menu_item_call label="Hochgeladene Bilder" name="Image uploads"/> + <menu_item_call label="Hochgeladene Sounds" name="Sound uploads"/> + <menu_item_call label="Hochgeladene Animationen" name="Animation uploads"/> + <menu_item_call label="Hochgeladene Modelle" name="Model uploads"/> + </menu> <menu label="Typ ändern" name="Change Type"> <menu_item_call label="Standard" name="Default"/> <menu_item_call label="Handschuhe" name="Gloves"/> @@ -60,6 +66,7 @@ <menu_item_call label="Aktuelles Outfit ersetzen" name="Replace Outfit"/> <menu_item_call label="Zum aktuellen Outfit hinzufügen" name="Add To Outfit"/> <menu_item_call label="Vom aktuellen Outfit entfernen" name="Remove From Outfit"/> + <menu_item_call label="Outfitliste in Zwischenablage kopieren" name="Copy outfit list to clipboard"/> <menu_item_call label="Original suchen" name="Find Original"/> <menu_item_call label="Objekt löschen" name="Purge Item"/> <menu_item_call label="Objekt wiederherstellen" name="Restore Item"/> @@ -72,7 +79,6 @@ <menu_item_call label="Kopieren" name="Copy"/> <menu_item_call label="Einfügen" name="Paste"/> <menu_item_call label="Als Link einfügen" name="Paste As Link"/> - <menu_item_call label="Löschen" name="Remove Link"/> <menu_item_call label="Löschen" name="Delete"/> <menu_item_call label="Systemordner löschen" name="Delete System Folder"/> <menu_item_call label="Konferenz-Chat starten" name="Conference Chat Folder"/> @@ -95,7 +101,6 @@ <menu_item_call label="Bearbeiten" name="Wearable Edit"/> <menu_item_call label="Hinzufügen" name="Wearable Add"/> <menu_item_call label="Ausziehen" name="Take Off"/> - <menu_item_call label="In Händler-Outbox kopieren" name="Merchant Copy"/> <menu_item_call label="In Marktplatz-Auflistungen kopieren" name="Marketplace Copy"/> <menu_item_call label="In Marktplatz-Auflistungen verschieben" name="Marketplace Move"/> <menu_item_call label="--keine Optionen--" name="--no options--"/> diff --git a/indra/newview/skins/default/xui/de/menu_login.xml b/indra/newview/skins/default/xui/de/menu_login.xml index ff21f07943..69856c0852 100644 --- a/indra/newview/skins/default/xui/de/menu_login.xml +++ b/indra/newview/skins/default/xui/de/menu_login.xml @@ -2,6 +2,7 @@ <menu_bar name="Login Menu"> <menu label="Ich" name="File"> <menu_item_call label="Einstellungen..." name="Preferences..."/> + <menu_item_check label="Grid-Auswahl anzeigen" name="Show Grid Picker"/> <menu_item_call label="[APP_NAME] schließen" name="Quit"/> </menu> <menu label="Hilfe" name="Help"> @@ -33,7 +34,6 @@ <menu_item_check label="Fehler" name="Error"/> <menu_item_check label="Keine" name="None"/> </menu> - <menu_item_check label="Grid-Auswahl anzeigen" name="Show Grid Picker"/> <menu_item_call label="Benachrichtigungs-Konsole anzeigen" name="Show Notifications Console"/> </menu> </menu_bar> 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 f69a453e58..4508465d25 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 @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_blocked_gear"> <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="Objektsounds ignorieren" name="BlockObjectSounds"/> <menu_item_call label="Profil..." name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml index db57e41661..2a8eaf26ec 100644 --- a/indra/newview/skins/default/xui/de/menu_viewer.xml +++ b/indra/newview/skins/default/xui/de/menu_viewer.xml @@ -44,6 +44,7 @@ <menu_item_check label="Kein Voice-Morphing" name="NoVoiceMorphing"/> <menu_item_check label="Vorschau..." name="Preview"/> <menu_item_call label="Abonnieren..." name="Subscribe"/> + <menu_item_call label="Premium-Vorteil..." name="PremiumPerk"/> </menu> <menu_item_check label="Gesten..." name="Gestures"/> <menu_item_check label="Freunde" name="My Friends"/> @@ -57,7 +58,8 @@ <menu_item_call label="Ziele..." name="Destinations"/> <menu_item_check label="Karte" name="World Map"/> <menu_item_check label="Minikarte" name="Mini-Map"/> - <menu_item_check label="Suchen" name="Search"/> + <menu_item_call label="Events" name="Events"/> + <menu_item_check label="Suchen..." name="Search"/> <menu_item_call label="Nach Hause teleportieren" name="Teleport Home"/> <menu_item_call label="Hier als Zuhause wählen" name="Set Home to Here"/> <menu_item_call label="Foto" name="Take Snapshot"/> @@ -128,8 +130,10 @@ <menu_item_call label="Kopie nehmen" name="Take Copy"/> <menu_item_call label="Wieder in Objektinhalt speichern" name="Save Object Back to Object Contents"/> <menu_item_call label="Objekt zurückgeben" name="Return Object back to Owner"/> + <menu_item_call label="Duplizieren" name="DuplicateObject"/> </menu> <menu label="Skripts" name="Scripts"> + <menu_item_check label="Skriptwarnungen/Fehler..." name="Script debug"/> <menu_item_call label="Skripts rekompilieren (Mono)" name="Mono"/> <menu_item_call label="Skripts rekompilieren (LSL)" name="LSL"/> <menu_item_call label="Skripts zurücksetzen" name="Reset Scripts"/> diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index 25e013ed90..9da6f4ac8b 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -144,8 +144,7 @@ Marktplatzinitialisierung aufgrund eines System- oder Netzwerkfehlers fehlgeschl <notification name="MerchantTransactionFailed"> Marktplatztransaktion fehlgeschlagen mit Fehler: - Grund: „[ERROR_REASON]“ - [ERROR_DESCRIPTION] + [ERROR_REASON][ERROR_DESCRIPTION] <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="MerchantUnprocessableEntity"> @@ -769,6 +768,9 @@ Stellen Sie sicher, dass kein Objekt gesperrt ist und alle Objekte Ihnen gehöre <notification name="CannotLinkPermanent"> Objekte können nicht über Regionsgrenzen hinweg verknüpft werden. </notification> + <notification name="CannotLinkAcrossRegions"> + Objekte können nicht über Regionsgrenzen hinweg verknüpft werden. + </notification> <notification name="CannotLinkDifferentOwners"> Verknüpfung nicht möglich, da nicht alle Objekte denselben Eigentümer haben. @@ -1798,7 +1800,6 @@ Diese Gruppe verlassen? Nicht-stören-Modus ist aktiviert: Sie erhalten keine Benachrichtigung über eingehende Kommunikation. - Andere Einwohner erhalten Ihre Nicht-stören-Antwort (festgelegt in Einstellungen > Allgemein). -- Teleport-Angebote werden abgelehnt. - Voice-Anrufe werden abgelehnt. <usetemplate ignoretext="Ich ändere meinen Status zu „Nicht stören“" name="okignore" yestext="OK"/> </notification> @@ -2568,9 +2569,6 @@ Von einer Webseite zu diesem Formular linken, um anderen leichten Zugang zu dies <notification name="Cancelled"> Abgebrochen </notification> - <notification name="CancelledSit"> - Sitzen beendet - </notification> <notification name="CancelledAttach"> Anhängen abgebrochen </notification> @@ -3897,32 +3895,32 @@ Warten Sie kurz und versuchen Sie es noch einmal. <notification name="AvatarEjectFailed"> Hinauswerfen fehlgeschlagen, da Sie keine Admin-Berechtigung für diese Parzelle haben. </notification> - <notification name="CantMoveObjectParcelFull"> - Objekt „[OBJECT_NAME]“ kann nicht nach -[OBJ_POSITION] in Region [REGION_NAME] verschoben werden, da die Parzelle voll ist. + <notification name="CMOParcelFull"> + Objekt „[O]“ kann nicht nach +[P] in Region [R] verschoben werden, da die Parzelle voll ist. </notification> - <notification name="CantMoveObjectParcelPerms"> - Objekt „[OBJECT_NAME]“ kann nicht nach -[OBJ_POSITION] in Region [REGION_NAME] verschoben werden, da Ihre Objekte auf dieser Parzelle nicht gestattet sind. + <notification name="CMOParcelPerms"> + Objekt „[O]“ kann nicht nach +[P] in Region [R] verschoben werden, da Ihre Objekte auf dieser Parzelle nicht gestattet sind. </notification> - <notification name="CantMoveObjectParcelResources"> - Objekt „[OBJECT_NAME]“ kann nicht nach -[OBJ_POSITION] in Region [REGION_NAME] verschoben werden, da nicht genügend Ressourcen für dieses Objekt auf dieser Parzelle vorhanden sind. + <notification name="CMOParcelResources"> + Objekt „[O]“ kann nicht nach +[P] in Region [R] verschoben werden, da nicht genügend Ressourcen für dieses Objekt auf dieser Parzelle vorhanden sind. </notification> <notification name="NoParcelPermsNoObject"> Kopiervorgang fehlgeschlagen, da Sie keinen Zugriff auf diese Parzelle haben. </notification> - <notification name="CantMoveObjectRegionVersion"> - Objekt „[OBJECT_NAME]“ kann nicht nach -[OBJ_POSITION] in Region [REGION_NAME] verschoben werden, da die andere Region eine ältere Version verwendet, die das Empfangen dieses Objekts per Regionswechsel nicht unterstützt. + <notification name="CMORegionVersion"> + Objekt „[O]“ kann nicht nach + [P] in Region [R] verschoben werden, da die andere Region eine ältere Version verwendet, die das Empfangen dieses Objekts per Regionswechsel nicht unterstützt. </notification> - <notification name="CantMoveObjectNavMesh"> - Objekt „[OBJECT_NAME]“ kann nicht nach -[OBJ_POSITION] in Region [REGION_NAME] verschoben werden, da Sie das Navmesh nicht regionsübergreifend modifizieren können. + <notification name="CMONavMesh"> + Objekt „[O]“ kann nicht nach +[P] in Region [R] verschoben werden, da Sie das Navmesh nicht regionsübergreifend modifizieren können. </notification> - <notification name="CantMoveObjectWTF"> - Objekt „[OBJECT_NAME]“ kann nicht nach -[OBJ_POSITION] in Region [REGION_NAME] verschoben werden, da ein unbekannter Fehler vorliegt. ([FAILURE_TYPE]) + <notification name="CMOWTF"> + Objekt „[O]“ kann nicht nach +[P] in Region [R] verschoben werden, da ein unbekannter Fehler vorliegt. ([F]) </notification> <notification name="NoPermModifyObject"> Ihnen fehlt die Berechtigung zum Modifizieren dieses Objekts. diff --git a/indra/newview/skins/default/xui/de/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/de/panel_block_list_sidetray.xml index c105a5b8a3..5c399280df 100644 --- a/indra/newview/skins/default/xui/de/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/de/panel_block_list_sidetray.xml @@ -7,5 +7,8 @@ <menu_button name="plus_btn" tool_tip="Einwohner oder Objekt zum ignorieren auswählen"/> <button name="unblock_btn" tool_tip="Einwohner oder Objekt aus der Liste der ignorierten Einwohner oder Objekte entfernen"/> </panel> + <text name="block_limit"> + [COUNT] Einträge in Ihrer Liste der ignorierten Einwohner. Höchstwert: [LIMIT]. + </text> <block_list name="blocked" tool_tip="Liste der zur Zeit ignorierten Einwohner" width="290"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_flickr_photo.xml b/indra/newview/skins/default/xui/de/panel_flickr_photo.xml index 38b5302fef..d8bc1f310d 100644 --- a/indra/newview/skins/default/xui/de/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/de/panel_flickr_photo.xml @@ -30,6 +30,6 @@ Für Markierungen, die aus mehreren Wörtern bestehen, "" verwenden. <combo_box.item label="Moderate Flickr-Einstufung" name="ModerateRating"/> <combo_box.item label="Beschränkte Flickr-Einstufung" name="RestrictedRating"/> </combo_box> - <button label="Hochladen" name="post_photo_btn"/> + <button label="Teilen" name="post_photo_btn"/> <button label="Abbrechen" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_notify_textbox.xml b/indra/newview/skins/default/xui/de/panel_notify_textbox.xml index da672a0309..40d323a2b0 100644 --- a/indra/newview/skins/default/xui/de/panel_notify_textbox.xml +++ b/indra/newview/skins/default/xui/de/panel_notify_textbox.xml @@ -1,8 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="instant_message" name="panel_notify_textbox"> - <string name="message_max_lines_count" value="7"/> - <panel label="info_panel" name="info_panel"> - <text_editor name="message" value="message"/> + <string name="message_max_lines_count" value="14"/> + <panel label="info_panel" name="info_panel"/> + <panel label="info_panel" name="textbox_panel"> + <text_editor name="message" value="Nachricht"/> </panel> <panel label="control_panel" name="control_panel"> <button label="Senden" name="btn_submit"/> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml index 74fb4d0f85..ff0a6614bd 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml @@ -24,12 +24,14 @@ <text name="BetterText"> Besser </text> + <check_box initial_value="true" label="Atmosphären-Shader" name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="Erweitertes Beleuchtungsmodell" name="UseLightShaders"/> <slider label="Maximale Avatarkomplexität:" name="IndirectMaxComplexity" tool_tip="Bestimmt, an welchem Punkt ein visuell komplexer Avatar als JellyDoll dargestellt wird"/> <text name="IndirectMaxComplexityText"> 0 </text> - <check_box initial_value="true" label="Atmosphären-Shader" name="WindLightUseAtmosShaders"/> - <check_box initial_value="true" label="Erweitertes Beleuchtungsmodell" name="UseLightShaders"/> + <check_box initial_value="true" label="Freunde immer darstellen" name="AlwaysRenderFriends"/> + <button label="Ausnahmen..." name="RenderExceptionsButton"/> <button label="Einstellungen als Voreinstellung speichern..." name="PrefSaveButton"/> <button label="Voreinstellung laden..." name="PrefLoadButton"/> min_val="0.125" diff --git a/indra/newview/skins/default/xui/de/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/de/panel_preferences_uploads.xml new file mode 100644 index 0000000000..e2759715d1 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_preferences_uploads.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="Uploads" name="uploads"> + <text name="title"> + Aktuelle Zielorder für Uploads + </text> + <text name="title_models"> + Bilder + </text> + <text name="title_sounds"> + Sounds + </text> + <text name="title_animation"> + Animationen + </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> +</panel> diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml index 82e2b56f3f..dab20d63eb 100644 --- a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml @@ -2,9 +2,9 @@ <panel name="panel_snapshot_options"> <button label="Auf Datenträger speichern" name="save_to_computer_btn"/> <button label="In Inventar speichern ([AMOUNT] L$)" name="save_to_inventory_btn"/> - <button label="In Profil hochladen" name="save_to_profile_btn"/> - <button label="Auf Facebook hochladen" name="send_to_facebook_btn"/> - <button label="Auf Twitter hochladen" name="send_to_twitter_btn"/> - <button label="Auf Flickr hochladen" name="send_to_flickr_btn"/> + <button label="Im Profil-Feed teilen" name="save_to_profile_btn"/> + <button label="Auf Facebook teilen" name="send_to_facebook_btn"/> + <button label="Auf Twitter teilen" name="send_to_twitter_btn"/> + <button label="Auf Flickr teilen" name="send_to_flickr_btn"/> <button label="Per E-Mail senden" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index de20ed88a3..198dee0a1a 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -1491,7 +1491,8 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. Der [[MARKETPLACE_CREATE_STORE_URL] Marktplatz-Laden] gibt Fehler zurück. </string> <string name="InventoryMarketplaceError"> - Diese Funktion befindet sich in der Betaphase. Wenn Sie teilnehmen möchten, tragen Sie sich in dieses [http://goo.gl/forms/FCQ7UXkakz Google-Formular] ein. + Beim Öffnen der Marktplatz-Auflistungen ist ein Fehler aufgetreten. +Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich unter http://support.secondlife.com an den Support von Second Life. </string> <string name="InventoryMarketplaceListingsNoItemsTitle"> Ihr Ordner mit Marktplatz-Auflistungen ist leer. @@ -4444,7 +4445,10 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_ Konferenz mit [AGENT_NAME] </string> <string name="inventory_item_offered-im"> - Inventarobjekt angeboten + Inventarobjekt „[ITEM_NAME]“ angeboten + </string> + <string name="inventory_folder_offered-im"> + Inventarordner „[ITEM_NAME]“ angeboten </string> <string name="share_alert"> Objekte aus dem Inventar hier her ziehen @@ -4531,7 +4535,10 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_ Position für Zuhause festgelegt. </string> <string name="voice_morphing_url"> - http://secondlife.com/landing/voicemorphing + https://secondlife.com/destination/voice-island + </string> + <string name="premium_voice_morphing_url"> + https://secondlife.com/destination/voice-morphing-premium </string> <string name="paid_you_ldollars"> [NAME] hat Ihnen [REASON] [AMOUNT] L$ bezahlt. @@ -4902,8 +4909,8 @@ Missbrauchsbericht <string name="server_is_down"> Trotz all unserer Bemühungen ist ein unerwarteter Fehler aufgetreten. - Bitte überprüfen Sie status.secondlifegrid.net, um herauszufinden, ob ein Problem besteht. - Falls Sie weiterhin Problem haben, überprüfen Sie bitte Ihre Netzwerk- und Firewalleinstellungen. +Bitte überprüfen Sie http://status.secondlifegrid.net, um herauszufinden, ob ein Problem mit dem Service vorliegt. + Falls Sie weiterhin Problem haben, überprüfen Sie bitte Ihre Netzwerk- und Firewalleinstellungen. </string> <string name="dateTimeWeekdaysNames"> Sonntag:Montag:Dienstag:Mittwoch:Donnerstag:Freitag:Samstag @@ -5363,6 +5370,9 @@ Setzen Sie den Editorpfad in Anführungszeichen <string name="Command_Gestures_Label"> Gesten </string> + <string name="Command_Grid_Status_Label"> + Grid-Status + </string> <string name="Command_HowTo_Label"> Infos </string> @@ -5456,6 +5466,9 @@ Setzen Sie den Editorpfad in Anführungszeichen <string name="Command_Gestures_Tooltip"> Gesten für Ihren Avatar </string> + <string name="Command_Grid_Status_Tooltip"> + Aktuellen Grid-Status anzeigen + </string> <string name="Command_HowTo_Tooltip"> Wie führe ich gängige Aufgaben aus? </string> @@ -5678,6 +5691,9 @@ Setzen Sie den Editorpfad in Anführungszeichen <string name="loading_chat_logs"> Laden... </string> + <string name="na"> + Nicht zutreffend + </string> <string name="preset_combo_label"> -Leere Liste- </string> 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 a137770e26..535af317d9 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -1896,49 +1896,37 @@ Only large parcels can be listed in search. layout="topleft" left="8" name="public_access" - label="Allow Public Access (Unchecking this will create ban lines)" + label="Anyone can visit (Unchecking this will create ban lines)" top_pad="10" width="278" /> - <text - type="string" - length="1" - follows="top|left" - height="16" - layout="topleft" - left_delta="20" - name="Only Allow" - top="30" - width="325"> - Allow access only to Residents who: - </text> <check_box follows="top|left" height="16" - label="Have payment Information on File [ESTATE_PAYMENT_LIMIT]" + label="Must be 18+ [ESTATE_AGE_LIMIT]" layout="topleft" - left_delta="0" - name="limit_payment" - tool_tip="Residents must have payment information on file to access this parcel. See the [SUPPORT_SITE] for more information." + left_delta="20" + name="limit_age_verified" + tool_tip="Residents must be age 18 or older to access this parcel. See the [SUPPORT_SITE] for more information." top_pad="4" width="278" /> <check_box follows="top|left" height="16" - label="Are age 18 or older [ESTATE_AGE_LIMIT]" + label="Must have payment info on file [ESTATE_PAYMENT_LIMIT]" layout="topleft" left_delta="0" - name="limit_age_verified" - tool_tip="Residents must be age 18 or older to access this parcel. See the [SUPPORT_SITE] for more information." + name="limit_payment" + tool_tip="Residents must have payment information on file to access this parcel. See the [SUPPORT_SITE] for more information." top_pad="4" width="278" /> <check_box height="16" - label="Allow Group Access: [GROUP]" + label="Allow group [GROUP] with no restrictions" layout="topleft" left="8" name="GroupCheck" tool_tip="Set group in the General tab." - top="89" + top="73" width="278" /> <check_box enabled="false" @@ -1996,6 +1984,18 @@ Only large parcels can be listed in search. name="HoursSpin" top_pad="5" width="200" /> + <text + type="string" + length="1" + follows="top|left" + height="16" + layout="topleft" + left="8" + name="OwnerLimited" + top_pad="5" + width="400"> + (The estate owner may have limited these choices) + </text> <panel name="Allowed_layout_panel" follows="top|left" @@ -2014,7 +2014,7 @@ Only large parcels can be listed in search. name="AllowedText" top="0" width="230"> - Allowed Residents ([COUNT], max [MAX]) + Always allowed ([COUNT], max [MAX]) </text> <name_list column_padding="0" @@ -2063,7 +2063,7 @@ Only large parcels can be listed in search. name="BanCheck" top="0" width="200"> - Banned Residents ([COUNT], max [MAX]) + Always banned ([COUNT], max [MAX]) </text> <name_list column_padding="0" diff --git a/indra/newview/skins/default/xui/en/floater_avatar_render_settings.xml b/indra/newview/skins/default/xui/en/floater_avatar_render_settings.xml index 03e812d36d..e088d4d2a1 100644 --- a/indra/newview/skins/default/xui/en/floater_avatar_render_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_avatar_render_settings.xml @@ -57,10 +57,14 @@ <name_list.columns label="Name" name="name" - relative_width="0.65" /> + relative_width="0.5" /> <name_list.columns label="Render setting" name="setting" - relative_width="0.35" /> + relative_width="0.25" /> + <name_list.columns + label="Date added" + name="timestamp" + relative_width="0.25" /> </name_list> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_linkreplace.xml b/indra/newview/skins/default/xui/en/floater_linkreplace.xml new file mode 100644 index 0000000000..ece75e2576 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_linkreplace.xml @@ -0,0 +1,106 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + name="linkreplace" + help_topic="linkreplace" + positioning="centered" + title="REPLACE INVENTORY LINKS" + width="333" + height="130" + save_rect="true" + can_minimize="true" + can_close="true"> + <string name="Ready"> + Ready... + </string> + <string name="TargetNotFound"> + Target item not found. + </string> + <string name="ItemsIdentical"> + Source and target are identical. + </string> + <string name="ItemsFound"> + Found [NUM] inventory links. + </string> + <string name="ItemsRemaining"> + Links remaining: [NUM] + </string> + <string name="ReplaceFinished"> + Finished replacing inventory links. + </string> + <text + type="string" + follows="left|top" + font="SansSerif" + height="23" + layout="topleft" + left="10" + width="35" + name="source_label" + top="10"> + Old: + </text> + <inventory_link_replace_drop_target + name="source_uuid_editor" + follows="left|top|right" + height="23" + layout="topleft" + left_pad="10" + max_length_bytes="255" + top_delta="-3" + right="-10" + tool_tip="Drag and drop the current inventory item here that should be replaced."/> + <text + type="string" + follows="left|top" + font="SansSerif" + height="23" + layout="topleft" + left="10" + width="35" + name="target_label" + top_pad="10"> + New: + </text> + <inventory_link_replace_drop_target + name="target_uuid_editor" + follows="left|top|right" + height="23" + layout="topleft" + left_pad="10" + max_length_bytes="255" + top_delta="-3" + right="-10" + tool_tip="Drag and drop new inventory item here."/> + <text + type="string" + follows="left|top|right" + font="SansSerif" + height="20" + layout="topleft" + left="10" + right="-10" + name="status_text" + top_pad="10"> + Ready... + </text> + <button + top_pad="5" + left="10" + height="22" + width="90" + follows="left|top" + mouse_opaque="true" + halign="center" + name="btn_refresh" + label="Refresh"/> + <button + top_delta="0" + right="-10" + height="22" + width="90" + follows="right|top" + mouse_opaque="true" + halign="center" + name="btn_start" + label="Start"/> +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml index 00d70556b4..41384a77b8 100644 --- a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml +++ b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml @@ -13,14 +13,14 @@ reuse_instance="true" save_rect="false" single_instance="true" - title="Pathfinding linksets"> + title="REGION OBJECTS"> <floater.string name="messaging_initial"></floater.string> <floater.string name="messaging_get_inprogress">Querying for pathfinding linksets ...</floater.string> <floater.string name="messaging_get_error">Error detected while querying for pathfinding linksets.</floater.string> <floater.string name="messaging_set_inprogress">Modifying selected pathfinding linksets ...</floater.string> <floater.string name="messaging_set_error">Error detected while modifying selected pathfinding linksets.</floater.string> <floater.string name="messaging_complete_none_found">No pathfinding linksets.</floater.string> - <floater.string name="messaging_complete_available">[NUM_SELECTED] linksets selected out of [NUM_TOTAL].</floater.string> + <floater.string name="messaging_complete_available">[NUM_SELECTED] selected out of [NUM_TOTAL].</floater.string> <floater.string name="messaging_not_enabled">This region is not enabled for pathfinding.</floater.string> <floater.string name="linkset_terrain_name">[Terrain]</floater.string> <floater.string name="linkset_terrain_description">--</floater.string> @@ -211,7 +211,7 @@ name="dist_from_you" width="65" /> <scroll_list.columns - label="Linkset use" + label="Pathfinding use" name="linkset_use" width="236" /> <scroll_list.columns @@ -305,7 +305,7 @@ layout="topleft" top_pad="8" width="580"> - Actions on selected linksets (If a linkset is removed from the world, its attributes may be lost): + Actions on selected </text> <check_box height="19" @@ -393,7 +393,7 @@ left="18" top_pad="8" width="972"> - Edit attributes of selected linksets and press the button to apply changes + Edit pathfinding attributes </text> <combo_box height="20" diff --git a/indra/newview/skins/default/xui/en/floater_preview_trash.xml b/indra/newview/skins/default/xui/en/floater_preview_trash.xml new file mode 100644 index 0000000000..9e50e89ac9 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_preview_trash.xml @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + legacy_header_height="18" + can_resize="true" + height="330" + width="310" + layout="topleft" + min_height="200" + min_width="310" + name="floater_preview_trash" + save_rect="true" + title="TRASH" + single_instance="true" + reuse_instance="true" + can_minimize="false"> + <inventory_panel + name="inventory_outbox" + start_folder.name="Trash" + show_empty_message="false" + start_folder.type="trash" + follows="all" + layout="topleft" + top="18" left="7" height="280" width="296" + top_pad="0" + bg_opaque_color="DkGray2" + bg_alpha_color="DkGray2" + background_visible="true" + border="false" + bevel_style="none" + scroll.reserve_scroll_corner="false"> + <folder folder_arrow_image="Folder_Arrow" + folder_indentation="8" + item_height="20" + item_top_pad="4" + selection_image="Rounded_Square" + left_pad="5" + icon_pad="2" + icon_width="16" + text_pad="1" + text_pad_right="4" + arrow_size="12" + max_folder_item_overlap="2"/> + <item allow_wear="false"/> + </inventory_panel> + + <layout_stack follows="bottom|left|right" + height="23" + layout="topleft" + mouse_opaque="false" + name="button_panel_ls" + left="0" + orientation="horizontal" + top_pad="5" + width="310"> + <layout_panel follows="bottom|left|right" + height="23" + layout="bottomleft" + left="0" + mouse_opaque="false" + name="empty_btn_lp" + auto_resize="true" + width="155"> + <button enabled="true" + follows="bottom|left|right" + height="23" + label="Empty Trash" + layout="topleft" + left="30" + name="empty_btn" + top="0" + width="120" /> + </layout_panel> + <layout_panel + follows="bottom|left|right" + height="23" + layout="bottomleft" + left_pad="0" + mouse_opaque="false" + name="share_btn_lp" + auto_resize="true" + width="155"> + <button + enabled="true" + follows="bottom|left|right" + height="23" + label="Cancel" + layout="topleft" + left="5" + name="cancel_btn" + top="0" + width="120" /> + </layout_panel> + </layout_stack> +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 91e4c1b603..ed3cc26851 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -946,18 +946,29 @@ width="90"> Creator: </text> + <avatar_icon + default_icon_name="Generic_Person" + height="18" + follows="left|top" + layout="topleft" + left_pad="1" + name="Creator Icon" + visible="false" + top_delta="0" + width="18" /> <!-- *NOTE: Intentionally wide for long names --> <text type="string" length="1" follows="left|top" - left_pad="0" + left_pad="1" height="29" layout="topleft" name="Creator Name" - top_delta="0" + font="SansSerifSmall" + top_delta="-1" translate="false" - width="190" + width="170" word_wrap="true" use_ellipses="true"> TestString PleaseIgnore (please.ignore) @@ -974,6 +985,26 @@ width="90"> Owner: </text> + <avatar_icon + default_icon_name="Generic_Person" + height="18" + follows="left|top" + layout="topleft" + left_pad="1" + name="Owner Icon" + visible="false" + top_delta="0" + width="18" /> + <group_icon + default_icon_name="Generic_Group" + height="18" + follows="left|top" + layout="topleft" + left_pad="-18" + name="Owner Group Icon" + visible="false" + top_delta="0" + width="18" /> <!-- *NOTE: Intentionally wide for long names --> <text type="string" @@ -982,10 +1013,11 @@ height="29" layout="topleft" name="Owner Name" - left_pad="0" - top_delta="0" + font="SansSerifSmall" + left_pad="1" + top_delta="-1" translate="false" - width="190" + width="170" word_wrap="true" use_ellipses="true"> TestString PleaseIgnore (please.ignore) diff --git a/indra/newview/skins/default/xui/en/menu_attachment_other.xml b/indra/newview/skins/default/xui/en/menu_attachment_other.xml index 49b9ac273d..38f4b7715f 100644 --- a/indra/newview/skins/default/xui/en/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/en/menu_attachment_other.xml @@ -164,6 +164,14 @@ function="Avatar.SetImpostorMode" parameter="1" /> </menu_item_check> + <menu_item_separator /> + <menu_item_call + label="Exceptions..." + name="RenderExceptions"> + <menu_item_call.on_click + function="Floater.ToggleOrBringToFront" + parameter="avatar_render_settings" /> + </menu_item_call> </context_menu> <menu_item_separator layout="topleft" name="Impostor seperator"/> diff --git a/indra/newview/skins/default/xui/en/menu_avatar_other.xml b/indra/newview/skins/default/xui/en/menu_avatar_other.xml index c5426cb232..f9fb847910 100644 --- a/indra/newview/skins/default/xui/en/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/en/menu_avatar_other.xml @@ -155,6 +155,14 @@ function="Avatar.SetImpostorMode" parameter="1" /> </menu_item_check> + <menu_item_separator /> + <menu_item_call + label="Exceptions..." + name="RenderExceptions"> + <menu_item_call.on_click + function="Floater.ToggleOrBringToFront" + parameter="avatar_render_settings" /> + </menu_item_call> </context_menu> <menu_item_separator diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index e1f9269c70..ec9f947338 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -519,7 +519,7 @@ name="Purge Item"> <menu_item_call.on_click function="Inventory.DoToSelected" - parameter="purge" /> + parameter="purge"/> </menu_item_call> <menu_item_call label="Restore Item" @@ -604,6 +604,14 @@ function="Inventory.DoToSelected" parameter="paste_link" /> </menu_item_call> + <menu_item_call + label="Replace Links" + layout="topleft" + name="Replace Links"> + <menu_item_call.on_click + function="Inventory.DoToSelected" + parameter="replace_links" /> + </menu_item_call> <menu_item_separator layout="topleft" name="Paste Separator" /> diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml index d95541df80..3eacdbc781 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml @@ -146,6 +146,14 @@ function="Inventory.GearDefault.Enable" parameter="find_links" /> </menu_item_call> + <menu_item_call + label="Replace Links" + layout="topleft" + name="Replace Links"> + <on_click + function="Inventory.GearDefault.Custom.Action" + parameter="replace_links" /> + </menu_item_call> <menu_item_separator layout="topleft" /> diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml index 8cd0c415f4..7a73fd6d7c 100644 --- a/indra/newview/skins/default/xui/en/menu_login.xml +++ b/indra/newview/skins/default/xui/en/menu_login.xml @@ -20,6 +20,16 @@ function="Floater.Toggle" parameter="preferences" /> </menu_item_call> + <menu_item_call + label="Close Window" + name="Close Window" + visible="false" + shortcut="control|W"> + <menu_item_call.on_click + function="File.CloseWindow" /> + <menu_item_call.on_enable + function="File.EnableCloseWindow" /> + </menu_item_call> <menu_item_check label="Show Grid Picker" name="Show Grid Picker" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 12df3749f6..697d27907d 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -943,7 +943,7 @@ </menu_item_call> </menu> <menu_item_call - label="Linksets..." + label="Region Objects" name="pathfinding_linkset_menu_item"> <menu_item_call.on_click function="Floater.ToggleOrBringToFront" @@ -1103,7 +1103,7 @@ name="Pathfinding" tear_off="true"> <menu_item_call - label="Linksets..." + label="Region Objects" name="pathfinding_linksets_menu_item"> <menu_item_call.on_click function="Floater.ToggleOrBringToFront" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 3042041a13..53d3e0c398 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -909,6 +909,108 @@ Please invite members within 48 hours. <notification icon="alertmodal.tga" + name="JoinGroupInaccessible" + type="alertmodal"> +This group is not accessible to you. + <tag>group_id</tag> + <tag>success</tag> + <usetemplate + name="okbutton" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" + name="JoinGroupError" + type="alertmodal"> +Error processing your group membership request. + <tag>group_id</tag> + <tag>success</tag> + <usetemplate + name="okbutton" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" + name="JoinGroupErrorReason" + type="alertmodal"> +Unable to join group: [reason] + <tag>group_id</tag> + <tag>success</tag> + <tag>reason</tag> + <usetemplate + name="okbutton" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" + name="JoinGroupTrialUser" + type="alertmodal"> +Sorry, trial users can't join groups. + <tag>group_id</tag> + <tag>success</tag> + <usetemplate + name="okbutton" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" + name="JoinGroupMaxGroups" + type="alertmodal"> +You cannot join '[group_name]': +You are already a member of [group_count] groups, the maximum number allowed is [max_groups] + <tag>success</tag> + <tag>group_id</tag> + <tag>group_name</tag> + <tag>group_count</tag> + <tag>max_groups</tag> + <usetemplate + name="okbutton" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" + name="JoinGroupClosedEnrollment" + type="alertmodal"> +You cannot join '[group_name]': +The group no longer has open enrollment. + <tag>group_id</tag> + <tag>success</tag> + <usetemplate + name="okbutton" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" + name="JoinGroupSuccess" + type="alertmodal"> +You have been added to the group + <tag>group_id</tag> + <tag>success</tag> + <usetemplate + name="okbutton" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" + name="JoinGroupInsufficientFunds" + type="alertmodal"> +Unable to transfer the required L$ [membership_fee] membership fee. + <tag>group_id</tag> + <tag>success</tag> + <usetemplate + name="okbutton" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" name="LandBuyPass" type="alertmodal"> <tag>fail</tag> @@ -4984,6 +5086,17 @@ Are you sure you want to change the Estate Covenant? <notification icon="alertmodal.tga" + name="EstateParcelAccessOverride" + type="alertmodal"> +Unchecking this option may remove restrictions that parcel owners have added to prevent griefing, maintain privacy, or protect underage residents from adult material. Please discuss with your parcel owners as needed. + <tag>confirm</tag> + <usetemplate + name="okbutton" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" name="RegionEntryAccessBlocked" type="alertmodal"> <tag>fail</tag> @@ -6074,13 +6187,24 @@ The folder '[FOLDERNAME]' is a system folder. Deleting system folders <notification icon="alertmodal.tga" + name="PurgeSelectedItems" + type="alertmodal"> +[COUNT] item(s) will be permanently deleted. Are you sure you want to permanently delete selected item(s) from your Trash? + <tag>confirm</tag> + <usetemplate + name="okcancelbuttons" + notext="Cancel" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" name="ConfirmEmptyTrash" type="alertmodal"> -Are you sure you want to permanently delete the contents of your Trash? +[COUNT] items will be permanently deleted. Are you sure you want to permanently delete the contents of your Trash? <tag>confirm</tag> <usetemplate - ignoretext="Confirm before I empty the inventory Trash folder" - name="okcancelignore" + name="okcancelbuttons" notext="Cancel" yestext="OK"/> </notification> @@ -6094,7 +6218,7 @@ Your trash is overflowing. This may cause problems logging in. <usetemplate name="okcancelbuttons" notext="I will empty trash later" - yestext="Empty trash now"/> + yestext="Check trash folder"/> </notification> <notification @@ -6391,13 +6515,6 @@ Cancelled <notification icon="notifytip.tga" - name="CancelledSit" - type="notifytip"> -Cancelled Sit - </notification> - - <notification - icon="notifytip.tga" name="CancelledAttach" type="notifytip"> Cancelled Attach @@ -8507,12 +8624,21 @@ Select residents to share with. </notification> <notification - name="MeshUploadError" + name="MeshUploadErrorDetails" icon="alert.tga" type="alert"> - [LABEL] failed to upload: [MESSAGE] [IDENTIFIER] + [LABEL] failed to upload: [MESSAGE] [DETAILS]See SecondLife.log for details </notification> + + <notification + name="MeshUploadError" + icon="alert.tga" + type="alert"> + [LABEL] failed to upload: [MESSAGE] + +See SecondLife.log for details + </notification> <notification name="MeshUploadPermError" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml index 440c6613d5..78f771cd51 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml @@ -9,6 +9,18 @@ name="chat" top="1" width="517"> + + <check_box + control_name="ChatAutocompleteGestures" + height="16" + initial_value="true" + label="Auto-complete gestures in nearby chat" + layout="topleft" + top="17" + left="13" + name="auto_complete_gestures" + width="330"> + </check_box> <panel border="false" diff --git a/indra/newview/skins/default/xui/en/panel_region_estate.xml b/indra/newview/skins/default/xui/en/panel_region_estate.xml index 76a82212ae..a0c1dd0be6 100644 --- a/indra/newview/skins/default/xui/en/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/en/panel_region_estate.xml @@ -82,36 +82,72 @@ <view_border bevel_style="none" follows="top|left" - height="95" + height="105" layout="topleft" left="10" top_pad="5" - width="470" /> - + width="505" /> + <radio_group + height="32" + layout="topleft" + name="externally_visible_radio" + top_delta="5" + left="20" + width="200"> + <radio_item + height="16" + label="Allow only residents and groups listed below" + layout="topleft" + name="estate_restricted_access" /> + <radio_item + height="16" + label="Anyone can visit" + layout="topleft" + name="estate_public_access" /> + </radio_group> <check_box - height="20" - label="Allow Public Access" + follows="top|left" + height="18" + label="Must be 18+" + layout="topleft" + left_delta="20" + name="limit_age_verified" + tool_tip="Residents must be age 18 or older to access this estate. See the [SUPPORT_SITE] for more information." + top_delta="40" + width="278" /> + <check_box + follows="top|left" + height="18" + label="Must have payment info on file" + layout="topleft" + left_delta="0" + name="limit_payment" + tool_tip="Residents must have payment information on file to access this estate. See the [SUPPORT_SITE] for more information." + top_pad="2" + width="278" /> + <check_box + height="18" + label="Parcel owners can be more restrictive" layout="topleft" left="20" - name="externally_visible_check" - top_delta="5" - width="200" /> - + name="parcel_access_override" + top_pad="2" + width="240" /> <check_box - height="20" + height="18" label="Allow Voice Chat" layout="topleft" - left="280" + left="290" name="voice_chat_check" - top_delta="0" + top_delta="-78" width="200" /> <check_box - height="20" + height="18" label="Allow Direct Teleport" layout="topleft" left_delta="0" name="allow_direct_teleport" - top_pad="4" + top_pad="2" width="80" /> <button enabled="false" @@ -120,43 +156,10 @@ label="Apply" layout="topleft" name="apply_btn" - top_pad="15" + top_pad="30" left_delta="0" width="97" /> - - <text - type="string" - length="1" - follows="top|left" - height="16" - layout="topleft" - left="20" - name="Only Allow" - top_delta="-30" - width="278"> - Allow access only to Residents who: - </text> - <check_box - follows="top|left" - height="16" - label="Have payment information on file" - layout="topleft" - left_delta="0" - name="limit_payment" - tool_tip="Residents must have payment information on file to access this estate. See the [SUPPORT_SITE] for more information." - top_pad="2" - width="278" /> - <check_box - follows="top|left" - height="16" - label="Are age 18 or older" - layout="topleft" - left_delta="0" - name="limit_age_verified" - tool_tip="Residents must be age 18 or older to access this estate. See the [SUPPORT_SITE] for more information." - top_pad="2" - width="278" /> - + <text type="string" length="1" @@ -165,7 +168,7 @@ height="20" layout="topleft" name="estate_manager_label" - top_pad="30" + top_pad="25" left="10" width="200"> Estate Managers: @@ -180,7 +183,7 @@ name="allow_resident_label" top_delta="0" width="200"> - Allowed Residents: + Always allowed: </text> <!-- Estate Managers box --> @@ -191,7 +194,7 @@ layout="topleft" left="10" top_pad="-5" - width="200" /> + width="235" /> <name_list follows="left|top" height="71" @@ -200,9 +203,9 @@ multi_select="true" name="estate_manager_name_list" top_delta="0" - width="200" /> + width="235" /> - <!-- Allowed Residents box --> + <!-- Always allowed box --> <view_border bevel_style="none" follows="top|left" @@ -210,7 +213,7 @@ layout="topleft" left="280" top_delta="0" - width="200" /> + width="235" /> <name_list follows="left|top" height="71" @@ -219,7 +222,7 @@ multi_select="true" name="allowed_avatar_name_list" top_delta="0" - width="200" /> + width="235" /> <!-- Estate Managers buttons --> <button @@ -230,7 +233,7 @@ left="10" name="add_estate_manager_btn" top_pad="6" - width="97" /> + width="114" /> <button follows="left|top" height="23" @@ -238,9 +241,9 @@ layout="topleft" name="remove_estate_manager_btn" left_pad="6" - width="97" /> + width="114" /> - <!-- Allowed Residents buttons --> + <!-- Always allowed buttons --> <button follows="left|top" height="23" @@ -249,7 +252,7 @@ layout="topleft" name="add_allowed_avatar_btn" top_delta="0" - width="97" /> + width="114" /> <button follows="left|top" height="23" @@ -258,7 +261,7 @@ name="remove_allowed_avatar_btn" left_pad="6" top_delta="0" - width="97" /> + width="114" /> <text type="string" @@ -270,7 +273,7 @@ name="allow_group_label" top_pad="10" width="200"> - Allowed Groups: + Groups always allowed: </text> <text type="string" @@ -282,10 +285,10 @@ name="ban_resident_label" top_delta="0" width="200"> - Banned Residents: + Always banned: </text> - <!-- Allowed Groups box --> + <!-- Groups always allowed box --> <view_border bevel_style="none" follows="top|left" @@ -293,7 +296,7 @@ layout="topleft" left="10" top_pad="-5" - width="200" /> + width="235" /> <name_list follows="left|top" height="71" @@ -302,9 +305,9 @@ multi_select="true" name="allowed_group_name_list" top_delta="0" - width="200" /> + width="235" /> - <!-- Banned Residents box --> + <!-- Always banned box --> <view_border bevel_style="none" follows="top|left" @@ -312,7 +315,7 @@ layout="topleft" left="280" top_delta="0" - width="200" /> + width="235" /> <name_list follows="left|top" height="71" @@ -321,9 +324,9 @@ multi_select="true" name="banned_avatar_name_list" top_delta="0" - width="200" /> + width="235" /> - <!-- Allowed Groups buttons --> + <!-- Groups always allowed buttons --> <button follows="left|top" height="23" @@ -332,7 +335,7 @@ left="10" name="add_allowed_group_btn" top_pad="6" - width="97" /> + width="114" /> <button follows="left|top" height="23" @@ -341,9 +344,9 @@ name="remove_allowed_group_btn" left_pad="6" top_delta="0" - width="97" /> + width="114" /> - <!-- Banned Residents buttons --> + <!-- Always banned buttons --> <button follows="left|top" height="23" @@ -352,7 +355,7 @@ left="280" name="add_banned_avatar_btn" top_delta="0" - width="97" /> + width="114" /> <button follows="left|top" height="23" @@ -361,7 +364,7 @@ name="remove_banned_avatar_btn" top_delta="0" left_pad="6" - width="97" /> + width="114" /> <button follows="left|top" @@ -371,7 +374,7 @@ left="10" name="message_estate_btn" top_pad="20" - width="220" /> + width="235" /> <button follows="left|top" height="23" @@ -380,6 +383,6 @@ left="280" name="kick_user_from_estate_btn" top_delta="0" - width="220" /> + width="235" /> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_tools_texture.xml b/indra/newview/skins/default/xui/en/panel_tools_texture.xml index 2dae1025ec..ffdbc5d227 100644 --- a/indra/newview/skins/default/xui/en/panel_tools_texture.xml +++ b/indra/newview/skins/default/xui/en/panel_tools_texture.xml @@ -148,6 +148,18 @@ top_pad="1" value="2"/> </radio_group> + <check_box + control_name="SyncMaterialSettings" + follows="top|left" + height="20" + initial_value="false" + label="Lock repeat" + layout="topleft" + left="8" + name="checkbox_sync_settings" + tool_tip="Adjust all maps repeats simultaneously" + top_pad="-16" + width="160" /> <texture_picker can_apply_immediately="true" default_image_name="Default" @@ -159,7 +171,7 @@ left="10" name="texture control" tool_tip="Click to choose a picture" - top_pad="7" + top_pad="5" width="64" /> <text type="string" @@ -586,7 +598,7 @@ label_width="205" left="10" max_val="100" - min_val="0.1" + min_val="-100" name="rptctrl" width="265" /> <spinner diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index f8bbda320a..f47f8e3dfa 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -360,6 +360,15 @@ Please try logging in again in a minute.</string> <string name="AssetErrorPriceMismatch">Viewer and server do not agree on price</string> <string name="AssetErrorUnknownStatus">Unknown status</string> + <!-- Asset upload errors. --> + <string name="AssetUploadServerUnreacheble">Service unreachable.</string> + <string name="AssetUploadServerDifficulties">The server is experiencing unexpected difficulties.</string> + <string name="AssetUploadServerUnavaliable">Service not available or upload timeout was reached.</string> + <string name="AssetUploadRequestInvalid"> +Error in upload request. Please visit +http://secondlife.com/support for help fixing this problem. +</string> + <!-- Asset Type human readable names: these will replace variable [TYPE] in notification FailedToFindWearable* --> <!-- Will also replace [OBJECTTYPE] in notifications: UserGiveItem, ObjectGiveItem --> <string name="texture">texture</string> @@ -2644,12 +2653,12 @@ If you continue to receive this message, please contact Second Life support for <string name="RegionInfoAllEstatesYouManage"> all estates that you manage for [OWNER] </string> - <string name="RegionInfoAllowedResidents">Allowed Residents: ([ALLOWEDAGENTS], max [MAXACCESS])</string> - <string name="RegionInfoAllowedGroups">Allowed Groups: ([ALLOWEDGROUPS], max [MAXACCESS])</string> + <string name="RegionInfoAllowedResidents">Always allowed: ([ALLOWEDAGENTS], max [MAXACCESS])</string> + <string name="RegionInfoAllowedGroups">Groups always allowed: ([ALLOWEDGROUPS], max [MAXACCESS])</string> <string name="RegionInfoEstateManagers">Estate Managers: ([ESTATEMANAGERS], max [MAXMANAGERS])</string> - <string name="RegionInfoBannedResidents">Banned Residents: ([BANNEDAGENTS], max [MAXBANNED])</string> - <string name="RegionInfoListTypeAllowedAgents">Allowed Residents</string> - <string name="RegionInfoListTypeBannedAgents">Banned Residents</string> + <string name="RegionInfoBannedResidents">Always banned: ([BANNEDAGENTS], max [MAXBANNED])</string> + <string name="RegionInfoListTypeAllowedAgents">Always allowed</string> + <string name="RegionInfoListTypeBannedAgents">Always banned</string> <!-- script limits floater --> <string name="ScriptLimitsParcelScriptMemory">Parcel Script Memory</string> diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml index 39426b2aaf..a272835154 100644 --- a/indra/newview/skins/default/xui/es/floater_about_land.xml +++ b/indra/newview/skins/default/xui/es/floater_about_land.xml @@ -451,7 +451,7 @@ los media: <spinner label="Horas de acceso:" name="HoursSpin"/> <panel name="Allowed_layout_panel"> <text label="Always Allow" name="AllowedText"> - Residentes permitidos ([COUNT]) + Residentes admitidos ([COUNT], máx. [MAX]) </text> <name_list name="AccessList" tool_tip="([LISTED] listados de un máx. de [MAX])"/> <button label="Añadir" name="add_allowed"/> @@ -459,7 +459,7 @@ los media: </panel> <panel name="Banned_layout_panel"> <text label="Ban" name="BanCheck"> - Residentes no admitidos ([COUNT]) + Residentes no admitidos ([COUNT], máx. [MAX]) </text> <name_list name="BannedList" tool_tip="([LISTED] listados de un máx. de [MAX])"/> <button label="Añadir" name="add_banned"/> diff --git a/indra/newview/skins/default/xui/es/floater_avatar_render_settings.xml b/indra/newview/skins/default/xui/es/floater_avatar_render_settings.xml new file mode 100644 index 0000000000..727b1118c3 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_avatar_render_settings.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_avatar_render_settings" title="CONFIGURACIÓN DE RENDERIZADO DE AVATAR"> + <string name="av_never_render" value="Nunca"/> + <string name="av_always_render" value="Siempre"/> + <filter_editor label="Filtrar la gente" name="people_filter_input"/> + <menu_button name="plus_btn" tool_tip="Acciones en la persona seleccionada"/> + <name_list name="render_settings_list"> + <name_list.columns label="Nombre" name="name"/> + <name_list.columns label="Configuración de renderizado" name="setting"/> + </name_list> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_flickr.xml b/indra/newview/skins/default/xui/es/floater_flickr.xml index 7f95d948fe..e254d8ba77 100644 --- a/indra/newview/skins/default/xui/es/floater_flickr.xml +++ b/indra/newview/skins/default/xui/es/floater_flickr.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_flickr" title="SUBIR A FLICKR"> +<floater name="floater_flickr" title="COMPARTIR EN FLICKR"> <panel name="background"> <tab_container name="tabs"> <panel label="FOTO" name="panel_flickr_photo"/> diff --git a/indra/newview/skins/default/xui/es/floater_preferences.xml b/indra/newview/skins/default/xui/es/floater_preferences.xml index 372680f55d..cb2a1dde14 100644 --- a/indra/newview/skins/default/xui/es/floater_preferences.xml +++ b/indra/newview/skins/default/xui/es/floater_preferences.xml @@ -13,5 +13,6 @@ <panel label="Privacidad" name="im"/> <panel label="Configurar" name="input"/> <panel label="Avanzado" name="advanced1"/> + <panel label="Subidas" name="uploads"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_tos.xml b/indra/newview/skins/default/xui/es/floater_tos.xml index d1cd912f87..25048c9dd6 100644 --- a/indra/newview/skins/default/xui/es/floater_tos.xml +++ b/indra/newview/skins/default/xui/es/floater_tos.xml @@ -13,6 +13,6 @@ Por favor, lee detenidamente las siguientes Condiciones del servicio y Política de privacidad. Debes aceptar el acuerdo para poder iniciar sesión en [SECOND_LIFE]. </text> <text name="external_tos_required"> - Para poder proseguir, debes iniciar sesión en my.secondlife.com y aceptar las Condiciones del servicio. Gracias. + Para poder proseguir, debes iniciar sesión en https://my.secondlife.com y aceptar las Condiciones del servicio. Gracias. </text> </floater> diff --git a/indra/newview/skins/default/xui/es/menu_attachment_other.xml b/indra/newview/skins/default/xui/es/menu_attachment_other.xml index f1394dad05..66db2f4969 100644 --- a/indra/newview/skins/default/xui/es/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/es/menu_attachment_other.xml @@ -17,8 +17,10 @@ <menu_item_call label="Acercar el zoom" name="Zoom In"/> <menu_item_call label="Pagar" name="Pay..."/> <menu_item_call label="Perfil del objeto" name="Object Inspect"/> - <menu_item_check label="Renderizar normalmente" name="RenderNormally"/> - <menu_item_check label="No renderizar" name="DoNotRender"/> - <menu_item_check label="Renderizar completamente" name="AlwaysRenderFully"/> + <context_menu label="Renderizar avatar" name="Render Avatar"> + <menu_item_check label="Predeterminado" name="RenderNormally"/> + <menu_item_check label="Siempre" name="AlwaysRenderFully"/> + <menu_item_check label="Nunca" name="DoNotRender"/> + </context_menu> <menu_item_call label="Ignorar al propietario de la partícula" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/es/menu_avatar_other.xml b/indra/newview/skins/default/xui/es/menu_avatar_other.xml index 80f16d3e82..d3e87d7bfb 100644 --- a/indra/newview/skins/default/xui/es/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/es/menu_avatar_other.xml @@ -16,8 +16,10 @@ <menu_item_call label="Volcar XML" name="Dump XML"/> <menu_item_call label="Acercar el zoom" name="Zoom In"/> <menu_item_call label="Pagar" name="Pay..."/> - <menu_item_check label="Renderizar normalmente" name="RenderNormally"/> - <menu_item_check label="No renderizar" name="DoNotRender"/> - <menu_item_check label="Renderizar completamente" name="AlwaysRenderFully"/> + <context_menu label="Renderizar avatar" name="Render Avatar"> + <menu_item_check label="Predeterminado" name="RenderNormally"/> + <menu_item_check label="Siempre" name="AlwaysRenderFully"/> + <menu_item_check label="Nunca" name="DoNotRender"/> + </context_menu> <menu_item_call label="Ignorar al propietario de la partícula" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/es/menu_avatar_rendering_settings.xml b/indra/newview/skins/default/xui/es/menu_avatar_rendering_settings.xml new file mode 100644 index 0000000000..11f68e7792 --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_avatar_rendering_settings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Settings"> + <menu_item_check label="Predeterminado" name="default"/> + <menu_item_check label="Renderizar siempre" name="always_render"/> + <menu_item_check label="No renderizar nunca" name="never_render"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/es/menu_avatar_rendering_settings_add.xml b/indra/newview/skins/default/xui/es/menu_avatar_rendering_settings_add.xml new file mode 100644 index 0000000000..a7c673cf2c --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_avatar_rendering_settings_add.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="menu_settings_add.xml"> + <menu_item_call label="Renderizar siempre un Residente..." name="add_avatar_always_render"/> + <menu_item_call label="No renderizar nunca un Residente..." name="add_avatar_never_render"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/es/menu_gesture_gear.xml b/indra/newview/skins/default/xui/es/menu_gesture_gear.xml index 24706eb2c8..01a98359e3 100644 --- a/indra/newview/skins/default/xui/es/menu_gesture_gear.xml +++ b/indra/newview/skins/default/xui/es/menu_gesture_gear.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_gesture_gear"> - <menu_item_call label="Añadir a / Quitar de los favoritos" name="activate"/> + <menu_item_call label="Activar/Desactivar el gesto elegido" name="activate"/> <menu_item_call label="Copiar" name="copy_gesture"/> <menu_item_call label="Pegar" name="paste"/> <menu_item_call label="Copiar la UUID" name="copy_uuid"/> diff --git a/indra/newview/skins/default/xui/es/menu_inventory.xml b/indra/newview/skins/default/xui/es/menu_inventory.xml index 5d108abf67..074defb006 100644 --- a/indra/newview/skins/default/xui/es/menu_inventory.xml +++ b/indra/newview/skins/default/xui/es/menu_inventory.xml @@ -42,6 +42,12 @@ <menu_item_call label="Pelo nuevo" name="New Hair"/> <menu_item_call label="Ojos nuevos" name="New Eyes"/> </menu> + <menu label="Usar como valor predeterminado para" name="upload_def"> + <menu_item_call label="Imágenes subidas" name="Image uploads"/> + <menu_item_call label="Sonidos subidos" name="Sound uploads"/> + <menu_item_call label="Animaciones subidas" name="Animation uploads"/> + <menu_item_call label="Modelos subidos" name="Model uploads"/> + </menu> <menu label="Change Type" name="Change Type"> <menu_item_call label="Por defecto" name="Default"/> <menu_item_call label="Guantes" name="Gloves"/> @@ -60,6 +66,7 @@ <menu_item_call label="Reemplazar el vestuario" name="Replace Outfit"/> <menu_item_call label="Añadir al vestuario" name="Add To Outfit"/> <menu_item_call label="Quitar del vestuario actual" name="Remove From Outfit"/> + <menu_item_call label="Copiar la lista del vestuario al portapapeles" name="Copy outfit list to clipboard"/> <menu_item_call label="Encontrar el original" name="Find Original"/> <menu_item_call label="Eliminar el ítem" name="Purge Item"/> <menu_item_call label="Restaurar el ítem" name="Restore Item"/> @@ -71,7 +78,6 @@ <menu_item_call label="Copiar" name="Copy"/> <menu_item_call label="Pegar" name="Paste"/> <menu_item_call label="Pegar como enlace" name="Paste As Link"/> - <menu_item_call label="Borrar" name="Remove Link"/> <menu_item_call label="Borrar" name="Delete"/> <menu_item_call label="Borrar carpeta del sistema" name="Delete System Folder"/> <menu_item_call label="Empezar multiconferencia" name="Conference Chat Folder"/> @@ -94,7 +100,6 @@ <menu_item_call label="Editar" name="Wearable Edit"/> <menu_item_call label="Añadir" name="Wearable Add"/> <menu_item_call label="Quitarse" name="Take Off"/> - <menu_item_call label="Copiar al Buzón de salida de comerciante" name="Merchant Copy"/> <menu_item_call label="Copiar en artículos del Mercado" name="Marketplace Copy"/> <menu_item_call label="Mover a artículos del Mercado" name="Marketplace Move"/> <menu_item_call label="--sin opciones--" name="--no options--"/> diff --git a/indra/newview/skins/default/xui/es/menu_login.xml b/indra/newview/skins/default/xui/es/menu_login.xml index d9f8f23576..4ab6bc84a3 100644 --- a/indra/newview/skins/default/xui/es/menu_login.xml +++ b/indra/newview/skins/default/xui/es/menu_login.xml @@ -2,6 +2,7 @@ <menu_bar name="Login Menu"> <menu label="Yo" name="File"> <menu_item_call label="Preferencias..." name="Preferences..."/> + <menu_item_check label="Mostrar selector del Grid" name="Show Grid Picker"/> <menu_item_call label="Salir de [APP_NAME]" name="Quit"/> </menu> <menu label="Ayuda" name="Help"> @@ -32,7 +33,6 @@ <menu_item_check label="Error" name="Error"/> <menu_item_check label="Ninguno" name="None"/> </menu> - <menu_item_check label="Mostrar el selector de Grid" name="Show Grid Picker"/> <menu_item_call label="Mostrar la consola de notificaciones" name="Show Notifications Console"/> </menu> </menu_bar> 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 986389a4fe..98b0798011 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 @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_blocked_gear"> <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 los sonidos de objeto" name="BlockObjectSounds"/> <menu_item_call label="Perfil..." name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml index c4986821f1..99aab42db8 100644 --- a/indra/newview/skins/default/xui/es/menu_viewer.xml +++ b/indra/newview/skins/default/xui/es/menu_viewer.xml @@ -44,6 +44,7 @@ <menu_item_check label="Sin transformación de voz" name="NoVoiceMorphing"/> <menu_item_check label="Probar..." name="Preview"/> <menu_item_call label="Suscribir..." name="Subscribe"/> + <menu_item_call label="Ventaja Premium..." name="PremiumPerk"/> </menu> <menu_item_check label="Gestos..." name="Gestures"/> <menu_item_check label="Amigos" name="My Friends"/> @@ -57,7 +58,8 @@ <menu_item_call label="Destinos..." name="Destinations"/> <menu_item_check label="Mapa del mundo" name="World Map"/> <menu_item_check label="Minimapa" name="Mini-Map"/> - <menu_item_check label="Buscar" name="Search"/> + <menu_item_call label="Eventos" name="Events"/> + <menu_item_check label="Buscar..." name="Search"/> <menu_item_call label="Teleportar a la Base" name="Teleport Home"/> <menu_item_call label="Fijar mi Base aquí" name="Set Home to Here"/> <menu_item_call label="Foto" name="Take Snapshot"/> @@ -128,8 +130,10 @@ <menu_item_call label="Coger una copia" name="Take Copy"/> <menu_item_call label="Guardar una copia del objeto en los contenidos de donde salió" name="Save Object Back to Object Contents"/> <menu_item_call label="Devolver objeto" name="Return Object back to Owner"/> + <menu_item_call label="Duplicar" name="DuplicateObject"/> </menu> <menu label="Scripts" name="Scripts"> + <menu_item_check label="Advertencias/errores de script..." name="Script debug"/> <menu_item_call label="Recompilar los scripts (Mono)" name="Mono"/> <menu_item_call label="Recompilar los scripts (LSL)" name="LSL"/> <menu_item_call label="Reiniciar los scripts" name="Reset Scripts"/> diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index d6e686df42..b57ba998b9 100644 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -144,8 +144,7 @@ La inicialización del mercado ha fallado por un error del sistema o de la red. <notification name="MerchantTransactionFailed"> La transacción con el Mercado ha fallado por el siguiente error: - Motivo: '[ERROR_REASON]' - [ERROR_DESCRIPTION] + [ERROR_REASON][ERROR_DESCRIPTION] <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="MerchantUnprocessableEntity"> @@ -761,6 +760,9 @@ Por favor, asegúrate de que no hay ninguno bloqueado, y de que eres el propieta <notification name="CannotLinkPermanent"> No se pueden vincular objetos a través de límites de región. </notification> + <notification name="CannotLinkAcrossRegions"> + No se pueden vincular objetos a través de límites de región. + </notification> <notification name="CannotLinkDifferentOwners"> Imposible enlazarlos, porque hay objetos de distintos propietarios. @@ -1689,7 +1691,7 @@ Se está descargando en segundo plano y, en cuanto esté lista, te pediremos que <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="UpdateCheckError"> - Ha ocurrido un error al comprobar si hay actualizaciones. + Ha ocurrido un error al buscar actualizaciones. Repite la operación más adelante. <usetemplate name="okbutton" yestext="OK"/> </notification> @@ -1790,10 +1792,9 @@ Si estás impaciente por probar las nuevas funciones y correcciones, lee la pág <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="DoNotDisturbModeSet"> - Está activado No molestar. No obtendrás un aviso cuando recibas comunicaciones. + Está activado No molestar. No obtendrás un aviso cuando recibas comunicaciones. - Los otros residentes recibirán tu respuesta de No molestar (se configura en Preferencias > General). -- Se rehusarán los ofrecimientos de teleporte. - Se rechazarán las llamadas de voz. <usetemplate ignoretext="Cambio mi estado al modo No molestar" name="okignore" yestext="OK"/> </notification> @@ -2563,9 +2564,6 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p <notification name="Cancelled"> Cancelado </notification> - <notification name="CancelledSit"> - Cancelado el sentarte - </notification> <notification name="CancelledAttach"> Cancelado el anexar </notification> @@ -3883,32 +3881,32 @@ Prueba otra vez dentro de un minuto. <notification name="AvatarEjectFailed"> Error al expulsar: no tienes permiso de administrador en esa parcela. </notification> - <notification name="CantMoveObjectParcelFull"> - No se puede mover el objeto '[OBJECT_NAME]' a -[OBJ_POSITION] en la región [REGION_NAME] porque la parcela está llena. + <notification name="CMOParcelFull"> + No se puede mover el objeto '[O]' a +[P] de la región [R] porque la parcela está llena. </notification> - <notification name="CantMoveObjectParcelPerms"> - No se puede mover el objeto '[OBJECT_NAME]' a -[OBJ_POSITION] de la región [REGION_NAME] porque tus objetos no están permitidos en esta parcela. + <notification name="CMOParcelPerms"> + No se puede mover el objeto '[O]' a +[P] de la región [R] porque tus objetos no están permitidos en esta parcela. </notification> - <notification name="CantMoveObjectParcelResources"> - No se puede mover el objeto '[OBJECT_NAME]' a -[OBJ_POSITION] de la región [REGION_NAME] porque no hay suficientes recursos para este objeto en esta parcela. + <notification name="CMOParcelResources"> + No se puede mover el objeto '[O]' a +[P] de la región [R] porque no hay suficientes recursos para este objeto en esta parcela. </notification> <notification name="NoParcelPermsNoObject"> Error al copiar: no tienes acceso a esa parcela. </notification> - <notification name="CantMoveObjectRegionVersion"> - No se puede mover el objeto '[OBJECT_NAME]' a -[OBJ_POSITION] de la región [REGION_NAME] porque la otra región ejecuta una versión más antigua que no admite la recepción de este objeto atravesando regiones. + <notification name="CMORegionVersion"> + No se puede mover el objeto '[O]' a +[P] de la región [R] porque la otra región ejecuta una versión más antigua que no admite la recepción de este objeto atravesando regiones. </notification> - <notification name="CantMoveObjectNavMesh"> - No se puede mover el objeto '[OBJECT_NAME]' a -[OBJ_POSITION] en la región [REGION_NAME] porque no puedes modificar el navmesh a través de límites de región. + <notification name="CMONavMesh"> + No se puede mover el objeto '[O]' a +[P] de la región [R] porque no puedes modificar el navmesh a través de límites de región. </notification> - <notification name="CantMoveObjectWTF"> - No se puede mover el objeto '[OBJECT_NAME]' a -[OBJ_POSITION] en la región [REGION_NAME] por un motivo desconocido. ([FAILURE_TYPE]) + <notification name="CMOWTF"> + No se puede mover el objeto '[O]' a +[P] de la región [R] por un motivo desconocido. ([F]) </notification> <notification name="NoPermModifyObject"> No tienes permiso para modificar ese objeto diff --git a/indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml index a3de14ae67..73f80bfa90 100644 --- a/indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml @@ -7,5 +7,8 @@ <menu_button name="plus_btn" tool_tip="Elige un residente o un objeto para ignorarlo"/> <button name="unblock_btn" tool_tip="Quita al Residente o al objeto de la lista de ignorados"/> </panel> + <text name="block_limit"> + [COUNT] entradas en tu lista de bloqueados, y el límite es [LIMIT]. + </text> <block_list name="blocked" tool_tip="Lista de los residentes ignorados actualmente"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_flickr_photo.xml b/indra/newview/skins/default/xui/es/panel_flickr_photo.xml index fe80199355..f8cc8c1de7 100644 --- a/indra/newview/skins/default/xui/es/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/es/panel_flickr_photo.xml @@ -30,6 +30,6 @@ Usa "" para las etiquetas con varias palabras <combo_box.item label="Calificación moderada de Flickr" name="ModerateRating"/> <combo_box.item label="Calificación restringida de Flickr" name="RestrictedRating"/> </combo_box> - <button label="Subir" name="post_photo_btn"/> + <button label="Compartir" name="post_photo_btn"/> <button label="Cancelar" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_notify_textbox.xml b/indra/newview/skins/default/xui/es/panel_notify_textbox.xml index dc7c873303..bc8586f53e 100644 --- a/indra/newview/skins/default/xui/es/panel_notify_textbox.xml +++ b/indra/newview/skins/default/xui/es/panel_notify_textbox.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="instant_message" name="panel_notify_textbox"> - <string name="message_max_lines_count" value="7"/> - <panel label="info_panel" name="info_panel"> + <string name="message_max_lines_count" value="14"/> + <panel label="info_panel" name="info_panel"/> + <panel label="info_panel" name="textbox_panel"> <text_editor name="message" value="message"/> </panel> <panel label="control_panel" name="control_panel"> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml index 2db4274e44..816c698548 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml @@ -24,12 +24,14 @@ <text name="BetterText"> Más calidad </text> + <check_box initial_value="true" label="Shaders de la atmósfera" name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="Modelo de iluminación avanzado" name="UseLightShaders"/> <slider label="Complejidad máxima de avatar:" name="IndirectMaxComplexity" tool_tip="Controla en qué momento un avatar visualmente complejo se dibuja como un "JellyDoll""/> <text name="IndirectMaxComplexityText"> 0 </text> - <check_box initial_value="true" label="Shaders de la atmósfera" name="WindLightUseAtmosShaders"/> - <check_box initial_value="true" label="Modelo de iluminación avanzado" name="UseLightShaders"/> + <check_box initial_value="true" label="Renderizar siempre los amigos" name="AlwaysRenderFriends"/> + <button label="Excepciones..." name="RenderExceptionsButton"/> <button label="Guardar configuración como valor predefinido..." name="PrefSaveButton"/> <button label="Cargar predefinido..." name="PrefLoadButton"/> min_val="0.125" diff --git a/indra/newview/skins/default/xui/es/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/es/panel_preferences_uploads.xml new file mode 100644 index 0000000000..b095ed6c67 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_preferences_uploads.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="Subidas" name="uploads"> + <text name="title"> + Carpetas de destino actuales para las subidas + </text> + <text name="title_models"> + Imágenes + </text> + <text name="title_sounds"> + Sonidos + </text> + <text name="title_animation"> + Animaciones + </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" + </text> +</panel> diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_options.xml b/indra/newview/skins/default/xui/es/panel_snapshot_options.xml index c1955f1fde..4eb9ecf28f 100644 --- a/indra/newview/skins/default/xui/es/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/es/panel_snapshot_options.xml @@ -2,9 +2,9 @@ <panel name="panel_snapshot_options"> <button label="Guardar en disco" name="save_to_computer_btn"/> <button label="Guardar en inventario (L$[AMOUNT])" name="save_to_inventory_btn"/> - <button label="Subir al perfil" name="save_to_profile_btn"/> - <button label="Subir a Facebook" name="send_to_facebook_btn"/> - <button label="Subir a Twitter" name="send_to_twitter_btn"/> - <button label="Subir a Flickr" name="send_to_flickr_btn"/> + <button label="Compartir en los comentarios de Mi perfil" name="save_to_profile_btn"/> + <button label="Compartir en Facebook" name="send_to_facebook_btn"/> + <button label="Compartir en Twitter" name="send_to_twitter_btn"/> + <button label="Compartir en Flickr" name="send_to_flickr_btn"/> <button label="Enviar por correo electrónico" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index 765226e6bd..67e45076e1 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -1473,7 +1473,8 @@ Intenta iniciar sesión de nuevo en unos instantes. La [[MARKETPLACE_CREATE_STORE_URL] tienda del Mercado] devuelve errores. </string> <string name="InventoryMarketplaceError"> - Esta función está actualmente en versión beta. Si quieres participar, añade tu nombre a este [http://goo.gl/forms/FCQ7UXkakz Formulario de Google]. + Se ha producido un error al abrir Artículos del Mercado. +Si sigues recibiendo el mismo mensaje, solicita ayuda al personal de asistencia de Second Life en http://support.secondlife.com </string> <string name="InventoryMarketplaceListingsNoItemsTitle"> Tu carpeta Artículos del mercado está vacía. @@ -4354,7 +4355,10 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE]. Conferencia con [AGENT_NAME] </string> <string name="inventory_item_offered-im"> - Ofrecido el item del inventario + Ítem del inventario '[ITEM_NAME]' ofrecido + </string> + <string name="inventory_folder_offered-im"> + Carpeta del inventario '[ITEM_NAME]' ofrecida </string> <string name="share_alert"> Arrastra los ítems desde el invenbtario hasta aquí @@ -4441,7 +4445,10 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE]. Posición inicial establecida. </string> <string name="voice_morphing_url"> - http://secondlife.com/landing/voicemorphing + https://secondlife.com/destination/voice-island + </string> + <string name="premium_voice_morphing_url"> + https://secondlife.com/destination/voice-morphing-premium </string> <string name="paid_you_ldollars"> [NAME] te ha pagado [AMOUNT] L$ [REASON]. @@ -4650,7 +4657,7 @@ Denuncia de infracción Varón - Encogimiento de hombros </string> <string name="Male - Stick tougue out"> - Varón - Sacando la lengua + Hombre - Sacando la lengua </string> <string name="Male - Wow"> Varón - Admiración @@ -4812,7 +4819,7 @@ Denuncia de infracción <string name="server_is_down"> Parece que hay algún problema que ha escapado a nuestros controles. - Visita status.secondlifegrid.net para ver si hay alguna incidencia conocida que esté afectando al servicio. +Visita http://status.secondlifegrid.net para ver si hay alguna incidencia conocida que esté afectando al servicio. Si sigues teniendo problemas, comprueba la configuración de la red y del servidor de seguridad. </string> <string name="dateTimeWeekdaysNames"> @@ -5273,6 +5280,9 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas <string name="Command_Gestures_Label"> Gestos </string> + <string name="Command_Grid_Status_Label"> + Estado del Grid + </string> <string name="Command_HowTo_Label"> Cómo </string> @@ -5366,6 +5376,9 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas <string name="Command_Gestures_Tooltip"> Gestos para tu avatar </string> + <string name="Command_Grid_Status_Tooltip"> + Mostrar el estado actual del Grid + </string> <string name="Command_HowTo_Tooltip"> Cómo hacer las tareas habituales </string> @@ -5588,6 +5601,9 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas <string name="loading_chat_logs"> Cargando... </string> + <string name="na"> + n/c + </string> <string name="preset_combo_label"> -Lista vacía- </string> diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml index 6aea44e650..2e57cd1612 100644 --- a/indra/newview/skins/default/xui/fr/floater_about_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml @@ -456,7 +456,7 @@ musique : <spinner label="Durée en heures :" name="HoursSpin"/> <panel name="Allowed_layout_panel"> <text label="Toujours autoriser" name="AllowedText"> - Résidents autorisés ([COUNT]) + Résidents autorisés ([COUNT], max. [MAX]) </text> <name_list name="AccessList" tool_tip="([LISTED] dans la liste, [MAX] max.)"/> <button label="Ajouter" name="add_allowed"/> @@ -464,7 +464,7 @@ musique : </panel> <panel name="Banned_layout_panel"> <text label="Bannir" name="BanCheck"> - Résidents bannis ([COUNT]) + Résidents bannis ([COUNT], max. [MAX]) </text> <name_list name="BannedList" tool_tip="([LISTED] dans la liste, [MAX] max.)"/> <button label="Ajouter" name="add_banned"/> diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_render_settings.xml b/indra/newview/skins/default/xui/fr/floater_avatar_render_settings.xml new file mode 100644 index 0000000000..5d178bf2dc --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_avatar_render_settings.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_avatar_render_settings" title="PARAMÈTRES DE RENDU DE L’AVATAR"> + <string name="av_never_render" value="Jamais"/> + <string name="av_always_render" value="Toujours"/> + <filter_editor label="Filtrer les personnes" name="people_filter_input"/> + <menu_button name="plus_btn" tool_tip="Actions sur la personne sélectionnée"/> + <name_list name="render_settings_list"> + <name_list.columns label="Nom" name="name"/> + <name_list.columns label="Paramètre de rendu" name="setting"/> + </name_list> +</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_flickr.xml b/indra/newview/skins/default/xui/fr/floater_flickr.xml index 0432ae9459..721d6aa6bf 100644 --- a/indra/newview/skins/default/xui/fr/floater_flickr.xml +++ b/indra/newview/skins/default/xui/fr/floater_flickr.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_flickr" title="CHARGER DANS FLICKR"> +<floater name="floater_flickr" title="PARTAGER SUR FLICKR"> <panel name="background"> <tab_container name="tabs"> <panel label="PHOTO" name="panel_flickr_photo"/> diff --git a/indra/newview/skins/default/xui/fr/floater_preferences.xml b/indra/newview/skins/default/xui/fr/floater_preferences.xml index 0f9fb1334b..25887bb5f7 100644 --- a/indra/newview/skins/default/xui/fr/floater_preferences.xml +++ b/indra/newview/skins/default/xui/fr/floater_preferences.xml @@ -13,5 +13,6 @@ <panel label="Confidentialité" name="im"/> <panel label="Configuration" name="input"/> <panel label="Avancées" name="advanced1"/> + <panel label="Chargements" name="uploads"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_tos.xml b/indra/newview/skins/default/xui/fr/floater_tos.xml index c43139ce0f..9d2f034399 100644 --- a/indra/newview/skins/default/xui/fr/floater_tos.xml +++ b/indra/newview/skins/default/xui/fr/floater_tos.xml @@ -13,6 +13,6 @@ Veuillez lire attentivement les Conditions d'utilisation et le Règlement sur le respect de la vie privée suivants. Vous devez les accepter pour pouvoir vous connecter à [SECOND_LIFE]. </text> <text name="external_tos_required"> - Vous devez vous rendre sur my.secondlife.com et vous connecter pour accepter les Conditions d’utilisation avant de pouvoir continuer. Merci ! + Vous devez vous rendre sur https://my.secondlife.com et vous connecter pour accepter les Conditions d’utilisation avant de pouvoir continuer. Merci ! </text> </floater> diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_other.xml b/indra/newview/skins/default/xui/fr/menu_attachment_other.xml index ae19e78d54..23416421bc 100644 --- a/indra/newview/skins/default/xui/fr/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/fr/menu_attachment_other.xml @@ -17,8 +17,10 @@ <menu_item_call label="Zoomer en avant" name="Zoom In"/> <menu_item_call label="Payer" name="Pay..."/> <menu_item_call label="Profil de l'objet" name="Object Inspect"/> - <menu_item_check label="Effectuer le rendu normalement" name="RenderNormally"/> - <menu_item_check label="Ne pas effectuer le rendu" name="DoNotRender"/> - <menu_item_check label="Effectuer le rendu total" name="AlwaysRenderFully"/> + <context_menu label="Effectuer le rendu de l’avatar" name="Render Avatar"> + <menu_item_check label="Valeur par défaut" name="RenderNormally"/> + <menu_item_check label="Toujours" name="AlwaysRenderFully"/> + <menu_item_check label="Jamais" name="DoNotRender"/> + </context_menu> <menu_item_call label="Ignorer le propriétaire des particules" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_other.xml b/indra/newview/skins/default/xui/fr/menu_avatar_other.xml index 2a0ae38605..fb675b3877 100644 --- a/indra/newview/skins/default/xui/fr/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/fr/menu_avatar_other.xml @@ -16,8 +16,10 @@ <menu_item_call label="Dump XML" name="Dump XML"/> <menu_item_call label="Zoomer en avant" name="Zoom In"/> <menu_item_call label="Payer" name="Pay..."/> - <menu_item_check label="Effectuer le rendu normalement" name="RenderNormally"/> - <menu_item_check label="Ne pas effectuer le rendu" name="DoNotRender"/> - <menu_item_check label="Effectuer le rendu total" name="AlwaysRenderFully"/> + <context_menu label="Effectuer le rendu de l’avatar" name="Render Avatar"> + <menu_item_check label="Valeur par défaut" name="RenderNormally"/> + <menu_item_check label="Toujours" name="AlwaysRenderFully"/> + <menu_item_check label="Jamais" name="DoNotRender"/> + </context_menu> <menu_item_call label="Ignorer le propriétaire des particules" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_rendering_settings.xml b/indra/newview/skins/default/xui/fr/menu_avatar_rendering_settings.xml new file mode 100644 index 0000000000..59dad01a11 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_avatar_rendering_settings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Settings"> + <menu_item_check label="Valeur par défaut" name="default"/> + <menu_item_check label="Toujours effectuer le rendu" name="always_render"/> + <menu_item_check label="Ne jamais effectuer le rendu" name="never_render"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_rendering_settings_add.xml b/indra/newview/skins/default/xui/fr/menu_avatar_rendering_settings_add.xml new file mode 100644 index 0000000000..44f3961f1a --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_avatar_rendering_settings_add.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="menu_settings_add.xml"> + <menu_item_call label="Toujours effectuer le rendu d’un résident" name="add_avatar_always_render"/> + <menu_item_call label="Ne jamais effectuer le rendu d’un résident" name="add_avatar_never_render"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_gesture_gear.xml b/indra/newview/skins/default/xui/fr/menu_gesture_gear.xml index 062dd0f005..d48b273ee6 100644 --- a/indra/newview/skins/default/xui/fr/menu_gesture_gear.xml +++ b/indra/newview/skins/default/xui/fr/menu_gesture_gear.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_gesture_gear"> - <menu_item_call label="Ajouter/Supprimer des favoris" name="activate"/> + <menu_item_call label="Activer/désactiver le geste sélectionné" name="activate"/> <menu_item_call label="Copier" name="copy_gesture"/> <menu_item_call label="Coller" name="paste"/> <menu_item_call label="Copier l'UUID" name="copy_uuid"/> diff --git a/indra/newview/skins/default/xui/fr/menu_inventory.xml b/indra/newview/skins/default/xui/fr/menu_inventory.xml index c0808f1139..ba4e8db61a 100644 --- a/indra/newview/skins/default/xui/fr/menu_inventory.xml +++ b/indra/newview/skins/default/xui/fr/menu_inventory.xml @@ -42,6 +42,12 @@ <menu_item_call label="Nouveaux cheveux" name="New Hair"/> <menu_item_call label="Nouveaux yeux" name="New Eyes"/> </menu> + <menu label="Utiliser comme défaut pour" name="upload_def"> + <menu_item_call label="Chargements d’images" name="Image uploads"/> + <menu_item_call label="Chargements de sons" name="Sound uploads"/> + <menu_item_call label="Chargements d’animations" name="Animation uploads"/> + <menu_item_call label="Chargements de modèles" name="Model uploads"/> + </menu> <menu label="Changer de type" name="Change Type"> <menu_item_call label="Défaut" name="Default"/> <menu_item_call label="Gants" name="Gloves"/> @@ -60,6 +66,7 @@ <menu_item_call label="Remplacer la tenue actuelle" name="Replace Outfit"/> <menu_item_call label="Ajouter à la tenue actuelle" name="Add To Outfit"/> <menu_item_call label="Enlever de la tenue actuelle" name="Remove From Outfit"/> + <menu_item_call label="Copier la liste de la tenue dans le presse-papiers" name="Copy outfit list to clipboard"/> <menu_item_call label="Trouver l'original" name="Find Original"/> <menu_item_call label="Purger l'objet" name="Purge Item"/> <menu_item_call label="Restaurer l'objet" name="Restore Item"/> @@ -72,7 +79,6 @@ <menu_item_call label="Copier" name="Copy"/> <menu_item_call label="Coller" name="Paste"/> <menu_item_call label="Coller comme lien" name="Paste As Link"/> - <menu_item_call label="Supprimer" name="Remove Link"/> <menu_item_call label="Supprimer" name="Delete"/> <menu_item_call label="Supprimer le dossier système" name="Delete System Folder"/> <menu_item_call label="Démarrer le chat conférence" name="Conference Chat Folder"/> @@ -95,7 +101,6 @@ <menu_item_call label="Modifier" name="Wearable Edit"/> <menu_item_call label="Ajouter" name="Wearable Add"/> <menu_item_call label="Enlever" name="Take Off"/> - <menu_item_call label="Copier vers la boîte d'envoi vendeur" name="Merchant Copy"/> <menu_item_call label="Copier dans les annonces Place du marché" name="Marketplace Copy"/> <menu_item_call label="Déplacer dans les annonces Place du marché" name="Marketplace Move"/> <menu_item_call label="--aucune option--" name="--no options--"/> diff --git a/indra/newview/skins/default/xui/fr/menu_login.xml b/indra/newview/skins/default/xui/fr/menu_login.xml index 7fd68baf67..cbfdcdaf22 100644 --- a/indra/newview/skins/default/xui/fr/menu_login.xml +++ b/indra/newview/skins/default/xui/fr/menu_login.xml @@ -2,6 +2,7 @@ <menu_bar name="Login Menu"> <menu label="Moi" name="File"> <menu_item_call label="Préférences..." name="Preferences..."/> + <menu_item_check label="Afficher le sélecteur de grille" name="Show Grid Picker"/> <menu_item_call label="Quitter [APP_NAME]" name="Quit"/> </menu> <menu label="Aide" name="Help"> @@ -33,7 +34,6 @@ <menu_item_check label="Erreur" name="Error"/> <menu_item_check label="Aucun" name="None"/> </menu> - <menu_item_check label="Afficher le sélecteur de grille" name="Show Grid Picker"/> <menu_item_call label="Afficher la console des notifications" name="Show Notifications Console"/> </menu> </menu_bar> 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 47589572c2..adce6f5682 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 @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_blocked_gear"> <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="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/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml index d40e979d08..98a69aa043 100644 --- a/indra/newview/skins/default/xui/fr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml @@ -44,6 +44,7 @@ <menu_item_check label="Aucun effet de voix" name="NoVoiceMorphing"/> <menu_item_check label="Aperçu..." name="Preview"/> <menu_item_call label="S'abonner..." name="Subscribe"/> + <menu_item_call label="Avantage Premium..." name="PremiumPerk"/> </menu> <menu_item_check label="Gestes..." name="Gestures"/> <menu_item_check label="Amis" name="My Friends"/> @@ -57,7 +58,8 @@ <menu_item_call label="Destinations..." name="Destinations"/> <menu_item_check label="Carte du monde" name="World Map"/> <menu_item_check label="Mini-carte" name="Mini-Map"/> - <menu_item_check label="Rechercher" name="Search"/> + <menu_item_call label="Événements" name="Events"/> + <menu_item_check label="Recherche..." name="Search"/> <menu_item_call label="Me téléporter chez moi" name="Teleport Home"/> <menu_item_call label="Définir le domicile ici" name="Set Home to Here"/> <menu_item_call label="Photo" name="Take Snapshot"/> @@ -128,8 +130,10 @@ <menu_item_call label="Prendre une copie" name="Take Copy"/> <menu_item_call label="Enregistrer dans le contenu des objets" name="Save Object Back to Object Contents"/> <menu_item_call label="Renvoi de l'objet" name="Return Object back to Owner"/> + <menu_item_call label="Dupliquer" name="DuplicateObject"/> </menu> <menu label="Scripts" name="Scripts"> + <menu_item_check label="Avertissements/Erreurs de scripts..." name="Script debug"/> <menu_item_call label="Recompiler les scripts (Mono)" name="Mono"/> <menu_item_call label="Recompiler les scripts (LSL)" name="LSL"/> <menu_item_call label="Réinitialiser les scripts" name="Reset Scripts"/> diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index b7efaad376..490996a4de 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -142,10 +142,9 @@ L'initialisation de la Place du marché a échoué en raison d'une err <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="MerchantTransactionFailed"> - La transaction avec la Place du marché a échoué en raison de l'erreur suivante : + La transaction avec la Place du marché a échoué en renvoyant l’erreur suivante : - Motif : '[ERROR_REASON]' - [ERROR_DESCRIPTION] + [ERROR_REASON][ERROR_DESCRIPTION] <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="MerchantUnprocessableEntity"> @@ -761,6 +760,9 @@ Assurez-vous que vous êtes le propriétaire de tous les objets et qu'aucun <notification name="CannotLinkPermanent"> Impossible de lier des objets d'une région à une autre. </notification> + <notification name="CannotLinkAcrossRegions"> + Impossible de lier des objets d’une région à une autre. + </notification> <notification name="CannotLinkDifferentOwners"> Impossible de lier car les objets n'ont pas tous le même propriétaire. @@ -1783,7 +1785,6 @@ Quitter le groupe ? Ne pas déranger est activé. Vous ne recevrez pas les notifications de communications entrantes. - Les autres résidents recevront votre réponse Ne pas déranger (définie dans Préférences > Général). -- Toutes les offres de téléportation seront refusées. - Les appels vocaux seront refusés. <usetemplate ignoretext="J'ai changé mon statut et suis désormais en mode Ne pas déranger." name="okignore" yestext="OK"/> </notification> @@ -2554,9 +2555,6 @@ Liez-la à partir d'une page web pour permettre aux autres résidents d&apo <notification name="Cancelled"> Annulé </notification> - <notification name="CancelledSit"> - Action annulée - </notification> <notification name="CancelledAttach"> Attachement annulé </notification> @@ -3884,32 +3882,32 @@ Veuillez réessayer dans une minute. <notification name="AvatarEjectFailed"> Vous n'avez pas pu réaliser l'exclusion car vous ne disposez pas des droits d'admin pour cette parcelle. </notification> - <notification name="CantMoveObjectParcelFull"> - Impossible de déplacer [OBJECT_NAME] jusqu'à -[OBJ_POSITION] dans la région [REGION_NAME] car la parcelle est pleine. + <notification name="CMOParcelFull"> + Impossible de déplacer l’objet [O] jusqu’à +[P] dans la région [R] car la parcelle est pleine. </notification> - <notification name="CantMoveObjectParcelPerms"> - Impossible de déplacer [OBJECT_NAME] jusqu'à -[OBJ_POSITION] dans la région [REGION_NAME] car vos objets ne sont pas autorisés sur cette parcelle. + <notification name="CMOParcelPerms"> + Impossible de déplacer l’objet [O] jusqu’à +[P] dans la région [R] car vos objets ne sont pas autorisés sur cette parcelle. </notification> - <notification name="CantMoveObjectParcelResources"> - Impossible de déplacer [OBJECT_NAME] jusqu'à -[OBJ_POSITION] dans la région [REGION_NAME] car il n'y a pas suffisamment de ressources pour cet objet sur cette parcelle. + <notification name="CMOParcelResources"> + Impossible de déplacer l’objet [O] jusqu’à +[P] dans la région [R] car il n’y a pas suffisamment de ressources pour cet objet sur cette parcelle. </notification> <notification name="NoParcelPermsNoObject"> La copie a échoué car vous n’avez pas accès à cette parcelle. </notification> - <notification name="CantMoveObjectRegionVersion"> - Impossible de déplacer [OBJECT_NAME] jusqu'à -[OBJ_POSITION] dans la région [REGION_NAME] car l'autre région exécute une version plus ancienne qui ne prend pas en charge la réception de cet objet via le passage à une autre région. + <notification name="CMORegionVersion"> + Impossible de déplacer l’objet [O] jusqu’à +[P] dans la région [R] car l’autre région exécute une version plus ancienne qui ne prend pas en charge la réception de cet objet via le passage à une autre région. </notification> - <notification name="CantMoveObjectNavMesh"> - Impossible de déplacer [OBJECT_NAME] jusqu'à -[OBJ_POSITION] dans la région [REGION_NAME] car vous ne pouvez pas modifier le maillage de navigation d'une région à une autre. + <notification name="CMONavMesh"> + Impossible de déplacer l’objet [O] jusqu’à +[P] dans la région [R] car vous ne pouvez pas modifier le maillage de navigtion d’une région à une autre. </notification> - <notification name="CantMoveObjectWTF"> - Impossible de déplacer [OBJECT_NAME] jusqu'à -[OBJ_POSITION] dans la région [REGION_NAME] pour une raison inconnue. ([FAILURE_TYPE]) + <notification name="CMOWTF"> + Impossible de déplacer l’objet [O] jusqu’à +[P] dans la région [R] pour une raison inconnue. ([F]) </notification> <notification name="NoPermModifyObject"> Vous n'êtes pas autorisé à modifier cet objet. diff --git a/indra/newview/skins/default/xui/fr/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/fr/panel_block_list_sidetray.xml index 0e2b5a9c93..e2970d1485 100644 --- a/indra/newview/skins/default/xui/fr/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/fr/panel_block_list_sidetray.xml @@ -7,5 +7,8 @@ <menu_button name="plus_btn" tool_tip="Choisir un résident ou un objet à ignorer"/> <button name="unblock_btn" tool_tip="Enlever le résident ou l’objet de la liste des ignorés"/> </panel> + <text name="block_limit"> + [COUNT] entrées dans votre liste des ignorés, la limite est de [LIMIT]. + </text> <block_list name="blocked" tool_tip="Liste des résidents actuellement ignorés"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_flickr_photo.xml b/indra/newview/skins/default/xui/fr/panel_flickr_photo.xml index 7b3a176703..9dac26b165 100644 --- a/indra/newview/skins/default/xui/fr/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/fr/panel_flickr_photo.xml @@ -30,6 +30,6 @@ Utiliser "" pour les balises contenant plusieurs mots <combo_box.item label="Catégorie de contenu Flickr modéré" name="ModerateRating"/> <combo_box.item label="Catégorie de contenu Flickr réservé aux adultes" name="RestrictedRating"/> </combo_box> - <button label="Charger" name="post_photo_btn"/> + <button label="Partager" name="post_photo_btn"/> <button label="Annuler" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_notify_textbox.xml b/indra/newview/skins/default/xui/fr/panel_notify_textbox.xml index 6ce09cde4b..fc4c005a25 100644 --- a/indra/newview/skins/default/xui/fr/panel_notify_textbox.xml +++ b/indra/newview/skins/default/xui/fr/panel_notify_textbox.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="instant_message" name="panel_notify_textbox"> - <string name="message_max_lines_count" value="7"/> - <panel label="info_panel" name="info_panel"> + <string name="message_max_lines_count" value="14"/> + <panel label="info_panel" name="info_panel"/> + <panel label="info_panel" name="textbox_panel"> <text_editor name="message" value="message"/> </panel> <panel label="control_panel" name="control_panel"> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml index 60cdd5df41..7117ace7e1 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml @@ -24,12 +24,14 @@ <text name="BetterText"> Meilleure </text> + <check_box initial_value="true" label="Effets atmosphériques" name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="Modèle d’éclairage avancé" name="UseLightShaders"/> <slider label="Complexité max. de l'avatar :" name="IndirectMaxComplexity" tool_tip="Contrôle à quel moment un avatar complexe est représenté comme un « JellyDoll »"/> <text name="IndirectMaxComplexityText"> 0 </text> - <check_box initial_value="true" label="Effets atmosphériques" name="WindLightUseAtmosShaders"/> - <check_box initial_value="true" label="Modèle d’éclairage avancé" name="UseLightShaders"/> + <check_box initial_value="true" label="Toujours effectuer le rendu des amis" name="AlwaysRenderFriends"/> + <button label="Exceptions..." name="RenderExceptionsButton"/> <button label="Enregistrer les paramètres comme préréglage..." name="PrefSaveButton"/> <button label="Charger un préréglage..." name="PrefLoadButton"/> min_val="0,125" diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/fr/panel_preferences_uploads.xml new file mode 100644 index 0000000000..c1d9d15a93 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_preferences_uploads.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="Chargements" name="uploads"> + <text name="title"> + Dossiers de destination actuels pour les chargements + </text> + <text name="title_models"> + Images + </text> + <text name="title_sounds"> + Sons + </text> + <text name="title_animation"> + Animations + </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" + </text> +</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml index eb724f4bd1..bdedb9162f 100644 --- a/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml @@ -2,9 +2,9 @@ <panel name="panel_snapshot_options"> <button label="Enreg. sur le disque" name="save_to_computer_btn"/> <button label="Enreg. dans l'inventaire ([AMOUNT] L$)" name="save_to_inventory_btn"/> - <button label="Charger dans le profil" name="save_to_profile_btn"/> - <button label="Charger sur Facebook" name="send_to_facebook_btn"/> - <button label="Charger sur Twitter" name="send_to_twitter_btn"/> - <button label="Charger sur Flickr" name="send_to_flickr_btn"/> + <button label="Partager sur le flux de profil" name="save_to_profile_btn"/> + <button label="Partager sur Facebook" name="send_to_facebook_btn"/> + <button label="Partager sur Twitter" name="send_to_twitter_btn"/> + <button label="Partager sur Flickr" name="send_to_flickr_btn"/> <button label="Envoyer par e-mail" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 7c1d05bb83..c0cb0f9f69 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -1491,7 +1491,8 @@ Veuillez réessayer de vous connecter dans une minute. La [[MARKETPLACE_CREATE_STORE_URL] boutique de la Place du marché] renvoie des erreurs. </string> <string name="InventoryMarketplaceError"> - Cette fonctionnalité est en version bêta. Veuillez ajouter votre nom à ce [http://goo.gl/forms/FCQ7UXkakz formulaire Google] si vous souhaitez participer. + Une erreur est survenue lors de l’ouverture des annonces de la Place du marché. +Si vous continuez de recevoir ce message, contactez l’assistance Second Life à http://support.secondlife.com pour obtenir de l’aide. </string> <string name="InventoryMarketplaceListingsNoItemsTitle"> Votre dossier Annonces de la Place du marché est vide. @@ -4444,7 +4445,10 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE]. Conférence avec [AGENT_NAME] </string> <string name="inventory_item_offered-im"> - Objet de l'inventaire offert + Objet de l’inventaire [ITEM_NAME] offert + </string> + <string name="inventory_folder_offered-im"> + Dossier de l’inventaire [ITEM_NAME] offert </string> <string name="share_alert"> Faire glisser les objets de l'inventaire ici @@ -4531,7 +4535,10 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE]. Emplacement du domicile défini. </string> <string name="voice_morphing_url"> - http://secondlife.com/landing/voicemorphing + https://secondlife.com/destination/voice-island + </string> + <string name="premium_voice_morphing_url"> + https://secondlife.com/destination/voice-morphing-premium </string> <string name="paid_you_ldollars"> [NAME] vous a payé [AMOUNT] L$ [REASON]. @@ -4900,9 +4907,9 @@ du rapport d'infraction </string> <string name="words_separator" value=","/> <string name="server_is_down"> - Malgré nos efforts, une erreur inattendue s'est produite. + Malgré nos efforts, une erreur inattendue s’est produite. - Veuillez vous reporter à status.secondlifegrid.net afin de déterminer si un problème connu existe avec ce service. +Veuillez vous reporter à http://status.secondlifegrid.net afin de déterminer si un problème connu existe avec ce service. Si le problème persiste, vérifiez la configuration de votre réseau et de votre pare-feu. </string> <string name="dateTimeWeekdaysNames"> @@ -5363,6 +5370,9 @@ Essayez avec le chemin d'accès à l'éditeur entre guillemets doubles <string name="Command_Gestures_Label"> Gestes </string> + <string name="Command_Grid_Status_Label"> + État de la grille + </string> <string name="Command_HowTo_Label"> Aide rapide </string> @@ -5456,6 +5466,9 @@ Essayez avec le chemin d'accès à l'éditeur entre guillemets doubles <string name="Command_Gestures_Tooltip"> Gestes de votre avatar </string> + <string name="Command_Grid_Status_Tooltip"> + Afficher l’état actuel de la grille + </string> <string name="Command_HowTo_Tooltip"> Comment effectuer les opérations courantes </string> @@ -5678,6 +5691,9 @@ Essayez avec le chemin d'accès à l'éditeur entre guillemets doubles <string name="loading_chat_logs"> Chargement... </string> + <string name="na"> + s.o. + </string> <string name="preset_combo_label"> -Liste vide- </string> diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml index 62960d8755..8311321a96 100644 --- a/indra/newview/skins/default/xui/it/floater_about_land.xml +++ b/indra/newview/skins/default/xui/it/floater_about_land.xml @@ -456,7 +456,7 @@ Media: <spinner label="Ore di accesso:" name="HoursSpin"/> <panel name="Allowed_layout_panel"> <text label="Consenti sempre" name="AllowedText"> - Residenti consentiti ([COUNT]) + Residenti consentiti ([COUNT], max [MAX]) </text> <name_list name="AccessList" tool_tip="([LISTED] in lista, [MAX] max)"/> <button label="Aggiungi" name="add_allowed"/> @@ -464,7 +464,7 @@ Media: </panel> <panel name="Banned_layout_panel"> <text label="Espelli" name="BanCheck"> - Residenti espulsi ([COUNT]) + Residenti espulsi ([COUNT], max [MAX]) </text> <name_list name="BannedList" tool_tip="([LISTED] in lista, [MAX] max)"/> <button label="Aggiungi" name="add_banned"/> diff --git a/indra/newview/skins/default/xui/it/floater_avatar_render_settings.xml b/indra/newview/skins/default/xui/it/floater_avatar_render_settings.xml new file mode 100644 index 0000000000..4c992dceb4 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_avatar_render_settings.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_avatar_render_settings" title="IMPOSTAZIONI DI RENDERING AVATAR"> + <string name="av_never_render" value="Mai"/> + <string name="av_always_render" value="Sempre"/> + <filter_editor label="Filtro persone" name="people_filter_input"/> + <menu_button name="plus_btn" tool_tip="Azioni per la persona selezionata"/> + <name_list name="render_settings_list"> + <name_list.columns label="Nome" name="name"/> + <name_list.columns label="Impostazione di rendering" name="setting"/> + </name_list> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_flickr.xml b/indra/newview/skins/default/xui/it/floater_flickr.xml index c19eb337af..85482a44a4 100644 --- a/indra/newview/skins/default/xui/it/floater_flickr.xml +++ b/indra/newview/skins/default/xui/it/floater_flickr.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_flickr" title="CARICA SU FLICKR"> +<floater name="floater_flickr" title="CONDIVIDI SU FLICKR"> <panel name="background"> <tab_container name="tabs"> <panel label="FOTO" name="panel_flickr_photo"/> diff --git a/indra/newview/skins/default/xui/it/floater_preferences.xml b/indra/newview/skins/default/xui/it/floater_preferences.xml index 7a1d2966ed..189ba195c5 100644 --- a/indra/newview/skins/default/xui/it/floater_preferences.xml +++ b/indra/newview/skins/default/xui/it/floater_preferences.xml @@ -13,5 +13,6 @@ <panel label="Riservatezza" name="im"/> <panel label="Impostazione" name="input"/> <panel label="Avanzate" name="advanced1"/> + <panel label="Caricamenti" name="uploads"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_tos.xml b/indra/newview/skins/default/xui/it/floater_tos.xml index 0dd116d613..0382312462 100644 --- a/indra/newview/skins/default/xui/it/floater_tos.xml +++ b/indra/newview/skins/default/xui/it/floater_tos.xml @@ -13,6 +13,6 @@ Sei pregato di leggere attentamente i Termini del servizio e le Regole sulla privacy di seguito. Per continuare l'accesso a [SECOND_LIFE], devi accettare le condizioni. </text> <text name="external_tos_required"> - Per continuare, visita my.secondlife.com e accedi per accettare i Termini del servizio. Grazie. + Per continuare, visita https://my.secondlife.com e accedi per accettare i Termini del servizio. Grazie. </text> </floater> diff --git a/indra/newview/skins/default/xui/it/menu_attachment_other.xml b/indra/newview/skins/default/xui/it/menu_attachment_other.xml index 1832400298..b7faee0e85 100644 --- a/indra/newview/skins/default/xui/it/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/it/menu_attachment_other.xml @@ -17,8 +17,10 @@ <menu_item_call label="Zoom avanti" name="Zoom In"/> <menu_item_call label="Paga" name="Pay..."/> <menu_item_call label="Profilo dell'oggetto" name="Object Inspect"/> - <menu_item_check label="Esegui il rendering normalmente" name="RenderNormally"/> - <menu_item_check label="Non eseguire il rendering" name="DoNotRender"/> - <menu_item_check label="Esegui il rendering completamente" name="AlwaysRenderFully"/> + <context_menu label="Rendering avatar" name="Render Avatar"> + <menu_item_check label="Impostazione predefinita" name="RenderNormally"/> + <menu_item_check label="Sempre" name="AlwaysRenderFully"/> + <menu_item_check label="Mai" name="DoNotRender"/> + </context_menu> <menu_item_call label="Blocca proprietario particella" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_avatar_other.xml b/indra/newview/skins/default/xui/it/menu_avatar_other.xml index f3b4075a29..5e8002f247 100644 --- a/indra/newview/skins/default/xui/it/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/it/menu_avatar_other.xml @@ -16,8 +16,10 @@ <menu_item_call label="Dump XML" name="Dump XML"/> <menu_item_call label="Zoom avanti" name="Zoom In"/> <menu_item_call label="Paga" name="Pay..."/> - <menu_item_check label="Esegui il rendering normalmente" name="RenderNormally"/> - <menu_item_check label="Non eseguire il rendering" name="DoNotRender"/> - <menu_item_check label="Esegui il rendering completamente" name="AlwaysRenderFully"/> + <context_menu label="Rendering avatar" name="Render Avatar"> + <menu_item_check label="Impostazione predefinita" name="RenderNormally"/> + <menu_item_check label="Sempre" name="AlwaysRenderFully"/> + <menu_item_check label="Mai" name="DoNotRender"/> + </context_menu> <menu_item_call label="Blocca proprietario particella" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_avatar_rendering_settings.xml b/indra/newview/skins/default/xui/it/menu_avatar_rendering_settings.xml new file mode 100644 index 0000000000..f29b3166fe --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_avatar_rendering_settings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Settings"> + <menu_item_check label="Impostazione predefinita" name="default"/> + <menu_item_check label="Esegui sempre il rendering" name="always_render"/> + <menu_item_check label="Non eseguire mai il rendering" name="never_render"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_avatar_rendering_settings_add.xml b/indra/newview/skins/default/xui/it/menu_avatar_rendering_settings_add.xml new file mode 100644 index 0000000000..d8918d07d0 --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_avatar_rendering_settings_add.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="menu_settings_add.xml"> + <menu_item_call label="Esegui sempre il rendering di un residente..." name="add_avatar_always_render"/> + <menu_item_call label="Non eseguire mai il rendering di un residente..." name="add_avatar_never_render"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/it/menu_gesture_gear.xml b/indra/newview/skins/default/xui/it/menu_gesture_gear.xml index 7cfcc6287e..b54dec75ee 100644 --- a/indra/newview/skins/default/xui/it/menu_gesture_gear.xml +++ b/indra/newview/skins/default/xui/it/menu_gesture_gear.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_gesture_gear"> - <menu_item_call label="Aggiungi/Rimuovi dai preferiti" name="activate"/> + <menu_item_call label="Attiva/disattiva gesture selezionata" name="activate"/> <menu_item_call label="Copia" name="copy_gesture"/> <menu_item_call label="Incolla" name="paste"/> <menu_item_call label="Copia UUID" name="copy_uuid"/> diff --git a/indra/newview/skins/default/xui/it/menu_inventory.xml b/indra/newview/skins/default/xui/it/menu_inventory.xml index 2cd0d2c078..a6dbc722b8 100644 --- a/indra/newview/skins/default/xui/it/menu_inventory.xml +++ b/indra/newview/skins/default/xui/it/menu_inventory.xml @@ -42,6 +42,12 @@ <menu_item_call label="Nuovi capelli" name="New Hair"/> <menu_item_call label="Nuovi occhi" name="New Eyes"/> </menu> + <menu label="Usa come impostazione predefinita per" name="upload_def"> + <menu_item_call label="Caricamenti immagini" name="Image uploads"/> + <menu_item_call label="Caricamenti suoni" name="Sound uploads"/> + <menu_item_call label="Caricamenti animazioni" name="Animation uploads"/> + <menu_item_call label="Caricamenti modelli" name="Model uploads"/> + </menu> <menu label="Cambia tipo" name="Change Type"> <menu_item_call label="Predefinito" name="Default"/> <menu_item_call label="Guanti" name="Gloves"/> @@ -60,6 +66,7 @@ <menu_item_call label="Sostituisci vestiti" name="Replace Outfit"/> <menu_item_call label="Aggiungi al vestiario" name="Add To Outfit"/> <menu_item_call label="Rimuovi dal vestiario attuale" name="Remove From Outfit"/> + <menu_item_call label="Copia gruppo vestiti negli Appunti" name="Copy outfit list to clipboard"/> <menu_item_call label="Trova originale" name="Find Original"/> <menu_item_call label="Elimina oggetto" name="Purge Item"/> <menu_item_call label="Ripristina oggetto" name="Restore Item"/> @@ -72,7 +79,6 @@ <menu_item_call label="Copia" name="Copy"/> <menu_item_call label="Incolla" name="Paste"/> <menu_item_call label="Incolla come link" name="Paste As Link"/> - <menu_item_call label="Elimina" name="Remove Link"/> <menu_item_call label="Cancella" name="Delete"/> <menu_item_call label="Elimina la cartella di sistema" name="Delete System Folder"/> <menu_item_call label="Inizia la conferenza chat" name="Conference Chat Folder"/> @@ -95,7 +101,6 @@ <menu_item_call label="Modifica" name="Wearable Edit"/> <menu_item_call label="Aggiungi" name="Wearable Add"/> <menu_item_call label="Togli" name="Take Off"/> - <menu_item_call label="Copia nella casella venditore in uscita" name="Merchant Copy"/> <menu_item_call label="Copia negli annunci Marketplace" name="Marketplace Copy"/> <menu_item_call label="Sposta negli annunci Marketplace" name="Marketplace Move"/> <menu_item_call label="--nessuna opzione--" name="--no options--"/> diff --git a/indra/newview/skins/default/xui/it/menu_login.xml b/indra/newview/skins/default/xui/it/menu_login.xml index 3d2a556fe2..6dafc68f7c 100644 --- a/indra/newview/skins/default/xui/it/menu_login.xml +++ b/indra/newview/skins/default/xui/it/menu_login.xml @@ -2,6 +2,7 @@ <menu_bar name="Login Menu"> <menu label="Io" name="File"> <menu_item_call label="Preferenze..." name="Preferences..."/> + <menu_item_check label="Mostra selettore griglia" name="Show Grid Picker"/> <menu_item_call label="Esci da [APP_NAME]" name="Quit"/> </menu> <menu label="Aiuto" name="Help"> @@ -32,7 +33,6 @@ <menu_item_check label="Errore" name="Error"/> <menu_item_check label="Nessuno" name="None"/> </menu> - <menu_item_check label="Mostra selettore griglia" name="Show Grid Picker"/> <menu_item_call label="Mostra Console notifiche" name="Show Notifications Console"/> </menu> </menu_bar> 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 e9955923b2..172d712a1e 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 @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_blocked_gear"> <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 suoni oggetto" name="BlockObjectSounds"/> <menu_item_call label="Profilo..." name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml index 96f06d5f98..216af0e458 100644 --- a/indra/newview/skins/default/xui/it/menu_viewer.xml +++ b/indra/newview/skins/default/xui/it/menu_viewer.xml @@ -44,6 +44,7 @@ <menu_item_check label="Nessuna manipolazione voce" name="NoVoiceMorphing"/> <menu_item_check label="Anteprima..." name="Preview"/> <menu_item_call label="Abbonati..." name="Subscribe"/> + <menu_item_call label="Vantaggio Premium..." name="PremiumPerk"/> </menu> <menu_item_check label="Gesture..." name="Gestures"/> <menu_item_check label="Amici" name="My Friends"/> @@ -57,7 +58,8 @@ <menu_item_call label="Destinazioni..." name="Destinations"/> <menu_item_check label="Mappamondo" name="World Map"/> <menu_item_check label="Mini mappa" name="Mini-Map"/> - <menu_item_check label="Cerca" name="Search"/> + <menu_item_call label="Eventi" name="Events"/> + <menu_item_check label="Cerca..." name="Search"/> <menu_item_call label="Teleport a Casa" name="Teleport Home"/> <menu_item_call label="Imposta come Casa mia" name="Set Home to Here"/> <menu_item_call label="Istantanea" name="Take Snapshot"/> @@ -128,8 +130,10 @@ <menu_item_call label="Prendi copia" name="Take Copy"/> <menu_item_call label="Salva nei contenuti oggetto" name="Save Object Back to Object Contents"/> <menu_item_call label="Restituisci oggetto" name="Return Object back to Owner"/> + <menu_item_call label="Duplica" name="DuplicateObject"/> </menu> <menu label="Script" name="Scripts"> + <menu_item_check label="Avvertenze/errori dello script..." name="Script debug"/> <menu_item_call label="Ricompila script (Mono)" name="Mono"/> <menu_item_call label="Ricompila gli script (LSL)" name="LSL"/> <menu_item_call label="Reimposta script" name="Reset Scripts"/> diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml index 3621b3bc62..cd521b6b93 100644 --- a/indra/newview/skins/default/xui/it/notifications.xml +++ b/indra/newview/skins/default/xui/it/notifications.xml @@ -144,8 +144,7 @@ L'inizializzazione con il Marketplace non ha avuto successo a causa di un e <notification name="MerchantTransactionFailed"> La transazione in Marketplace non è riuscita a causa dell'errore seguente: - Motivo: '[ERROR_REASON]' - [ERROR_DESCRIPTION] + [ERROR_REASON][ERROR_DESCRIPTION] <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="MerchantUnprocessableEntity"> @@ -760,6 +759,9 @@ Accertati che nessuno sia bloccato e che li possiedi tutti. <notification name="CannotLinkPermanent"> Gli oggetti non possono essere collegati attraverso i confini. </notification> + <notification name="CannotLinkAcrossRegions"> + Gli oggetti non possono essere collegati attraverso i confini. + </notification> <notification name="CannotLinkDifferentOwners"> Impossibile unire perche non tutti gli oggetti hanno lo stesso proprietario. @@ -1785,11 +1787,10 @@ Vuoi cancellare quell'elemento? <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="DoNotDisturbModeSet"> - Non disturbare è attivo. Non riceverai la notifica delle comunicazioni in arrivo. + La funzione Non disturbare è attiva. Non riceverai nessuna comunicazione. -- Gli altri residenti riceveranno la tua risposta Non disturbare (impostata in Preferenze > Generali). -- Le offerte di teleport verranno rifiutate. -- Le chiamate voce verranno rifiutate. +- Gli altri residenti riceveranno la risposta che hai impostato per la funzione "Non disturbare" in Preferenze > Generali. +- Le chiamate vocali verranno rifiutate. <usetemplate ignoretext="Io cambio il mio stato alla modalità Non disturbare." name="okignore" yestext="OK"/> </notification> <notification name="JoinedTooManyGroupsMember"> @@ -2559,9 +2560,6 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica <notification name="Cancelled"> Annullato </notification> - <notification name="CancelledSit"> - Seduta annullata - </notification> <notification name="CancelledAttach"> Attaccamento annullato </notification> @@ -3889,32 +3887,27 @@ Riprova tra un minuto. <notification name="AvatarEjectFailed"> L'espulsione non ha avuto successo perché non hai l'autorizzazione dell'amministratore del lotto. </notification> - <notification name="CantMoveObjectParcelFull"> - Impossibile muovere l'oggetto '[OBJECT_NAME]' a -[OBJ_POSITION] nella regione [REGION_NAME] perché il lotto è pieno. + <notification name="CMOParcelFull"> + Impossibile spostare l'oggetto "[O]" su [P] nella regione [R] perché il lotto è pieno. </notification> - <notification name="CantMoveObjectParcelPerms"> - Impossibile muovere l'oggetto '[OBJECT_NAME]' a -[OBJ_POSITION] nella regione [REGION_NAME] perché i tuoi oggetti non sono ammessi su questo lotto. + <notification name="CMOParcelPerms"> + Impossibile spostare l'oggetto "[O]" su [P] nella regione [R] perché i tuoi oggetti non sono permessi in questo lotto. </notification> - <notification name="CantMoveObjectParcelResources"> - Impossibile muovere l'oggetto '[OBJECT_NAME]' a -[OBJ_POSITION] nella regione [REGION_NAME] perché non ci sono risorse sufficienti per l'oggetto su questo lotto. + <notification name="CMOParcelResources"> + Impossibile spostare l'oggetto "[O]" su [P] nella regione [R] perché non esistono risorse sufficienti per questo oggetto nel lotto. </notification> <notification name="NoParcelPermsNoObject"> Copia non riuscita perché non hai accesso a quel lotto. </notification> - <notification name="CantMoveObjectRegionVersion"> - Impossibile muovere l'oggetto '[OBJECT_NAME]' a -[OBJ_POSITION] nella regione [REGION_NAME] perché nell'altra regione è in esecuzione una versione precedente che non consente la ricezione di questo oggetto attraverso i confini tra regioni. + <notification name="CMORegionVersion"> + Impossibile spostare l'oggetto "[O]" su [P] nella regione [R] perché l'altra regione esegue una versione più vecchia, che non supporta il ricevimento di questo oggetto mediante attraversamento di regioni. </notification> - <notification name="CantMoveObjectNavMesh"> - Impossibile muovere l'oggetto '[OBJECT_NAME]' a -[OBJ_POSITION] nella regione [REGION_NAME] perché non puoi modificare il navmesh attraverso il confine tra regioni. + <notification name="CMONavMesh"> + Impossibile spostare l'oggetto "[O]" su [P] nella regione [R] perché non puoi modificare il navmesh attraverso i confini delle regioni. </notification> - <notification name="CantMoveObjectWTF"> - Impossibile muovere l'oggetto '[OBJECT_NAME]' a -[OBJ_POSITION] nella regione [REGION_NAME] per un motivo sconosciuto. ([FAILURE_TYPE]) + <notification name="CMOWTF"> + Impossibile spostare l'oggetto "[O]" su [P] nella regione [R] a causa di un motivo sconosciuto. + ([F]) </notification> <notification name="NoPermModifyObject"> Non hai l'autorizzazione necessaria per modificare questa immagine diff --git a/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml index 7ca2d3b57b..af6ae5bd45 100644 --- a/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml @@ -7,5 +7,8 @@ <menu_button name="plus_btn" tool_tip="Seleziona un residente o un oggetto da bloccare"/> <button name="unblock_btn" tool_tip="Rimuovi un residente o un oggetto dalla lista bloccati"/> </panel> + <text name="block_limit"> + [COUNT] voci nella lista dei bloccati, ma il limite è [LIMIT]. + </text> <block_list name="blocked" tool_tip="Lista degli attuali residenti bloccati"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_flickr_photo.xml b/indra/newview/skins/default/xui/it/panel_flickr_photo.xml index e989fb2081..f6700b6150 100644 --- a/indra/newview/skins/default/xui/it/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/it/panel_flickr_photo.xml @@ -30,6 +30,6 @@ Usa "" per tag con più di una parola <combo_box.item label="Categoria Flickr Moderato" name="ModerateRating"/> <combo_box.item label="Categoria Flickr Censurato" name="RestrictedRating"/> </combo_box> - <button label="Carica" name="post_photo_btn"/> + <button label="Condividi" name="post_photo_btn"/> <button label="Annulla" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_notify_textbox.xml b/indra/newview/skins/default/xui/it/panel_notify_textbox.xml index ef27262010..de3deaafa2 100644 --- a/indra/newview/skins/default/xui/it/panel_notify_textbox.xml +++ b/indra/newview/skins/default/xui/it/panel_notify_textbox.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="instant_message" name="panel_notify_textbox"> - <string name="message_max_lines_count" value="7"/> - <panel label="info_panel" name="info_panel"> + <string name="message_max_lines_count" value="14"/> + <panel label="info_panel" name="info_panel"/> + <panel label="info_panel" name="textbox_panel"> <text_editor name="message" value="messaggio"/> </panel> <panel label="control_panel" name="control_panel"> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml index 4fa1835b0e..f3ca9fafb3 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml @@ -24,12 +24,14 @@ <text name="BetterText"> Migliore </text> + <check_box initial_value="true" label="Shader atmosfera..." name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="Modello illuminazione avanzato" name="UseLightShaders"/> <slider label="Massima conplessità dell'avatar:" name="IndirectMaxComplexity" tool_tip="Definisce il punto in cui un avatar dall'aspetto complesso viene visualizzato come JellyDoll"/> <text name="IndirectMaxComplexityText"> 0 </text> - <check_box initial_value="true" label="Shader atmosfera..." name="WindLightUseAtmosShaders"/> - <check_box initial_value="true" label="Modello illuminazione avanzato" name="UseLightShaders"/> + <check_box initial_value="true" label="Esegui sempre il rendering degli amici" name="AlwaysRenderFriends"/> + <button label="Eccezioni..." name="RenderExceptionsButton"/> <button label="Salva impostazioni come valori predefiniti..." name="PrefSaveButton"/> <button label="Carica valore predefinito..." name="PrefLoadButton"/> min_val="0.125" diff --git a/indra/newview/skins/default/xui/it/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/it/panel_preferences_uploads.xml new file mode 100644 index 0000000000..5083ceb552 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_preferences_uploads.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="Caricamenti" name="uploads"> + <text name="title"> + Cartelle correnti di destinazione dei caricamenti + </text> + <text name="title_models"> + Immagini + </text> + <text name="title_sounds"> + Suoni + </text> + <text name="title_animation"> + Animazioni + </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" + </text> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_options.xml b/indra/newview/skins/default/xui/it/panel_snapshot_options.xml index ba56499987..50fb3d39fa 100644 --- a/indra/newview/skins/default/xui/it/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/it/panel_snapshot_options.xml @@ -2,9 +2,9 @@ <panel name="panel_snapshot_options"> <button label="Salva sul disco" name="save_to_computer_btn"/> <button label="Salva nell'inventario (L$[AMOUNT])" name="save_to_inventory_btn"/> - <button label="Carica sul profilo" name="save_to_profile_btn"/> - <button label="Carica su Facebook" name="send_to_facebook_btn"/> - <button label="Carica su Twitter" name="send_to_twitter_btn"/> - <button label="Carica su Flickr" name="send_to_flickr_btn"/> + <button label="Condividi sul feed del profilo" name="save_to_profile_btn"/> + <button label="Condividi su Facebook" name="send_to_facebook_btn"/> + <button label="Condividi su Twitter" name="send_to_twitter_btn"/> + <button label="Condividi su Flickr" name="send_to_flickr_btn"/> <button label="Invia tramite e-mail" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index e6edfb6de4..85dfd96173 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -1482,7 +1482,8 @@ Prova ad accedere nuovamente tra un minuto. Il [[MARKETPLACE_CREATE_STORE_URL] negozio nel Marketplace] ha riportato errori. </string> <string name="InventoryMarketplaceError"> - Questa funzione è al momento in versione beta. Per partecipare, aggiungi il tuo nome a questo [http://goo.gl/forms/FCQ7UXkakz modulo Google]. + Errore nell'apertura degli annunci di Marketplace. +Se continui a ricevere questo messaggio, contatta l'assistenza Second Life su http://support.secondlife.com. </string> <string name="InventoryMarketplaceListingsNoItemsTitle"> La cartella degli annunci di Marketplace è vuota. @@ -4362,6 +4363,12 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="conference-title-incoming"> Chiamata in conferenza con [AGENT_NAME] </string> + <string name="inventory_item_offered-im"> + Offerto oggetto di inventario "[ITEM_NAME]" + </string> + <string name="inventory_folder_offered-im"> + Offerta cartella di inventario "[ITEM_NAME]" + </string> <string name="flickr_post_success"> Hai pubblicato su Flickr. </string> @@ -4444,7 +4451,10 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Posizione di base impostata. </string> <string name="voice_morphing_url"> - http://secondlife.com/landing/voicemorphing + https://secondlife.com/destination/voice-island + </string> + <string name="premium_voice_morphing_url"> + https://secondlife.com/destination/voice-morphing-premium </string> <string name="paid_you_ldollars"> [NAME] ti ha inviato un pagamento di L$[AMOUNT] [REASON]. @@ -4815,8 +4825,8 @@ Segnala abuso <string name="server_is_down"> Nonostante i nostri tentativi, si è verificato un errore imprevisto. - Consulta la pagina status.secondlifegrid.net per determinare se si sia verificato un problema noto con il servizio. - Se il problema continua, ti consigliamo di controllare le tue impostazioni di rete e della firewall. +Consulta la pagina http://status.secondlifegrid.net per determinare se il problema del servizio è già stato riscontrato. + Se il problema continua, ti consigliamo di controllare le tue impostazioni di rete e del firewall. </string> <string name="dateTimeWeekdaysNames"> lunedì:martedì:mercoledì:giovedì:venerdì:sabato:domenica @@ -5276,6 +5286,9 @@ Prova a racchiudere il percorso dell'editor in doppie virgolette. <string name="Command_Gestures_Label"> Gesture </string> + <string name="Command_Grid_Status_Label"> + Stato della griglia + </string> <string name="Command_HowTo_Label"> Istruzioni </string> @@ -5369,6 +5382,9 @@ Prova a racchiudere il percorso dell'editor in doppie virgolette. <string name="Command_Gestures_Tooltip"> Gesti per il tuo avatar </string> + <string name="Command_Grid_Status_Tooltip"> + Mostra stato griglia corrente + </string> <string name="Command_HowTo_Tooltip"> Come eseguire le attività più comuni </string> @@ -5591,6 +5607,9 @@ Prova a racchiudere il percorso dell'editor in doppie virgolette. <string name="loading_chat_logs"> Caricamento in corso... </string> + <string name="na"> + n/d + </string> <string name="preset_combo_label"> -Lista vuota- </string> diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml index 8614335690..3fbad3e7a7 100644 --- a/indra/newview/skins/default/xui/ja/floater_about_land.xml +++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml @@ -450,7 +450,7 @@ <spinner label="アクセス時間:" name="HoursSpin"/> <panel name="Allowed_layout_panel"> <text label="常に許可" name="AllowedText"> - 立入を許可された住人 ([COUNT]) + 許可された住人 ([COUNT]、最大 [MAX]) </text> <name_list name="AccessList" tool_tip="(合計[LISTED] 人、最大 [MAX] 人)"/> <button label="追加" name="add_allowed"/> @@ -458,7 +458,7 @@ </panel> <panel name="Banned_layout_panel"> <text label="禁止" name="BanCheck"> - 立入を禁止された住人 ([COUNT]) + 立入禁止された住人 ([COUNT]、最大 [MAX]) </text> <name_list name="BannedList" tool_tip="(合計 [LISTED] 人、最大 [MAX] 人)"/> <button label="追加" name="add_banned"/> diff --git a/indra/newview/skins/default/xui/ja/floater_avatar_render_settings.xml b/indra/newview/skins/default/xui/ja/floater_avatar_render_settings.xml new file mode 100644 index 0000000000..c0a644e3ae --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_avatar_render_settings.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_avatar_render_settings" title="アバターの描画設定"> + <string name="av_never_render" value="使用しない"/> + <string name="av_always_render" value="常に使用する"/> + <filter_editor label="人をフィルター" name="people_filter_input"/> + <menu_button name="plus_btn" tool_tip="選択した人に対するアクション:"/> + <name_list name="render_settings_list"> + <name_list.columns label="名前" name="name"/> + <name_list.columns label="描画設定" name="setting"/> + </name_list> +</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_flickr.xml b/indra/newview/skins/default/xui/ja/floater_flickr.xml index e406d17d37..77df22c9a0 100644 --- a/indra/newview/skins/default/xui/ja/floater_flickr.xml +++ b/indra/newview/skins/default/xui/ja/floater_flickr.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_flickr" title="FLICKR にアップロード"> +<floater name="floater_flickr" title="FLICKR で共有する"> <panel name="background"> <tab_container name="tabs"> <panel label="写真" name="panel_flickr_photo"/> diff --git a/indra/newview/skins/default/xui/ja/floater_preferences.xml b/indra/newview/skins/default/xui/ja/floater_preferences.xml index d48a8241ec..fa337defe7 100644 --- a/indra/newview/skins/default/xui/ja/floater_preferences.xml +++ b/indra/newview/skins/default/xui/ja/floater_preferences.xml @@ -13,5 +13,6 @@ <panel label="プライバシー" name="im"/> <panel label="セットアップ" name="input"/> <panel label="詳細" name="advanced1"/> + <panel label="アップロード" name="uploads"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_tos.xml b/indra/newview/skins/default/xui/ja/floater_tos.xml index dc7165b1ed..5e9a0a5ddd 100644 --- a/indra/newview/skins/default/xui/ja/floater_tos.xml +++ b/indra/newview/skins/default/xui/ja/floater_tos.xml @@ -13,6 +13,6 @@ 次の利用規約とプライバシーポリシーをよくお読みください。 [SECOND_LIFE] へのログインを続けるには、規約に同意する必要があります。 </text> <text name="external_tos_required"> - 操作を続けるには、my.secondlife.com に移動して、ログインし、利用規約を承諾する必要があります。ありがとうございました。 + 操作を続けるに、https://my.secondlife.com に移動し、利用規約に同意する必要があります。 </text> </floater> diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml index 23357ebbc2..24cb642323 100644 --- a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml @@ -17,8 +17,10 @@ <menu_item_call label="ズームイン" name="Zoom In"/> <menu_item_call label="支払う" name="Pay..."/> <menu_item_call label="オブジェクトのプロフィール" name="Object Inspect"/> - <menu_item_check label="通常表示" name="RenderNormally"/> - <menu_item_check label="表示しない" name="DoNotRender"/> - <menu_item_check label="完全表示" name="AlwaysRenderFully"/> + <context_menu label="アバターを描画" name="Render Avatar"> + <menu_item_check label="デフォルト" name="RenderNormally"/> + <menu_item_check label="常に使用する" name="AlwaysRenderFully"/> + <menu_item_check label="使用しない" name="DoNotRender"/> + </context_menu> <menu_item_call label="パーティクル所有者をブロック" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml index 1902c9b359..44a71f1f37 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml @@ -16,8 +16,10 @@ <menu_item_call label="ダンプ XML" name="Dump XML"/> <menu_item_call label="ズームイン" name="Zoom In"/> <menu_item_call label="支払う" name="Pay..."/> - <menu_item_check label="通常表示" name="RenderNormally"/> - <menu_item_check label="表示しない" name="DoNotRender"/> - <menu_item_check label="完全表示" name="AlwaysRenderFully"/> + <context_menu label="アバターを描画" name="Render Avatar"> + <menu_item_check label="デフォルト" name="RenderNormally"/> + <menu_item_check label="常に使用する" name="AlwaysRenderFully"/> + <menu_item_check label="使用しない" name="DoNotRender"/> + </context_menu> <menu_item_call label="パーティクル所有者をブロック" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings.xml b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings.xml new file mode 100644 index 0000000000..59c80bdb0e --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Settings"> + <menu_item_check label="デフォルト" name="default"/> + <menu_item_check label="常に描画" name="always_render"/> + <menu_item_check label="描画しない" name="never_render"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings_add.xml b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings_add.xml new file mode 100644 index 0000000000..e4f78cad31 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings_add.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="menu_settings_add.xml"> + <menu_item_call label="常に住人を描画する..." name="add_avatar_always_render"/> + <menu_item_call label="住人を描画しない..." name="add_avatar_never_render"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml b/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml index abf490a247..3eacfb3507 100644 --- a/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_gesture_gear"> - <menu_item_call label="お気に入りからの追加・削除" name="activate"/> + <menu_item_call label="選択したジェスチャーのアクティベートの有無" name="activate"/> <menu_item_call label="コピー" name="copy_gesture"/> <menu_item_call label="貼り付け" name="paste"/> <menu_item_call label="UUID をコピー" name="copy_uuid"/> diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml index 9a68ed8a6b..d53f9657b0 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml @@ -42,6 +42,12 @@ <menu_item_call label="新しい髪" name="New Hair"/> <menu_item_call label="新しい眼" name="New Eyes"/> </menu> + <menu label="次のデフォルトとして使用" name="upload_def"> + <menu_item_call label="画像のアップロード" name="Image uploads"/> + <menu_item_call label="サウンドのアップロード" name="Sound uploads"/> + <menu_item_call label="アニメーションのアップロード" name="Animation uploads"/> + <menu_item_call label="モデルのアップロード" name="Model uploads"/> + </menu> <menu label="種類を変更" name="Change Type"> <menu_item_call label="デフォルト" name="Default"/> <menu_item_call label="手袋" name="Gloves"/> @@ -60,6 +66,7 @@ <menu_item_call label="着用中のアウトフィットを入れ替える" name="Replace Outfit"/> <menu_item_call label="着用中のアウトフィットに追加する" name="Add To Outfit"/> <menu_item_call label="着用中のアウトフィットから取り除く" name="Remove From Outfit"/> + <menu_item_call label="アウトフィットのリストをクリップボードにコピー" name="Copy outfit list to clipboard"/> <menu_item_call label="オリジナルを探す" name="Find Original"/> <menu_item_call label="アイテムを除外する" name="Purge Item"/> <menu_item_call label="アイテムを復元する" name="Restore Item"/> @@ -72,7 +79,6 @@ <menu_item_call label="コピー" name="Copy"/> <menu_item_call label="貼り付け" name="Paste"/> <menu_item_call label="リンクを貼り付ける" name="Paste As Link"/> - <menu_item_call label="削除" name="Remove Link"/> <menu_item_call label="削除" name="Delete"/> <menu_item_call label="システムフォルダを削除する" name="Delete System Folder"/> <menu_item_call label="コンファレンスチャットを開始する" name="Conference Chat Folder"/> @@ -95,7 +101,6 @@ <menu_item_call label="編集" name="Wearable Edit"/> <menu_item_call label="追加" name="Wearable Add"/> <menu_item_call label="取り外す" name="Take Off"/> - <menu_item_call label="マーチャントのアウトボックスにコピー" name="Merchant Copy"/> <menu_item_call label="マーケットプレイスのリストにコピー" name="Marketplace Copy"/> <menu_item_call label="マーケットプレイスのリストに移動" name="Marketplace Move"/> <menu_item_call label="--オプションなし--" name="--no options--"/> diff --git a/indra/newview/skins/default/xui/ja/menu_login.xml b/indra/newview/skins/default/xui/ja/menu_login.xml index 71f36b17be..1f31971078 100644 --- a/indra/newview/skins/default/xui/ja/menu_login.xml +++ b/indra/newview/skins/default/xui/ja/menu_login.xml @@ -2,6 +2,7 @@ <menu_bar name="Login Menu"> <menu label="ミー" name="File"> <menu_item_call label="環境設定..." name="Preferences..."/> + <menu_item_check label="グリッドピッカーを表示する" name="Show Grid Picker"/> <menu_item_call label="[APP_NAME] を終了" name="Quit"/> </menu> <menu label="ヘルプ" name="Help"> @@ -33,7 +34,6 @@ <menu_item_check label="エラー" name="Error"/> <menu_item_check label="なし" name="None"/> </menu> - <menu_item_check label="グリッドピッカーを表示する" name="Show Grid Picker"/> <menu_item_call label="通知コンソールを表示する" name="Show Notifications Console"/> </menu> </menu_bar> 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 b5c9d11e02..fcc67f8d89 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 @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_blocked_gear"> <menu_item_call label="ブロック解除" name="unblock"/> + <menu_item_check label="ボイスをブロック" name="BlockVoice"/> + <menu_item_check label="文字をブロック" name="MuteText"/> + <menu_item_check label="オブジェクトのサウンドをブロック" name="BlockObjectSounds"/> <menu_item_call label="プロフィール..." name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index e0834eb12d..a8be8e7616 100644 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -44,6 +44,7 @@ <menu_item_check label="ボイスモーフィングなし" name="NoVoiceMorphing"/> <menu_item_check label="プレビュー..." name="Preview"/> <menu_item_call label="申し込む..." name="Subscribe"/> + <menu_item_call label="プレミアム会員特典..." name="PremiumPerk"/> </menu> <menu_item_check label="ジェスチャー..." name="Gestures"/> <menu_item_check label="フレンド" name="My Friends"/> @@ -57,7 +58,8 @@ <menu_item_call label="行き先..." name="Destinations"/> <menu_item_check label="世界地図" name="World Map"/> <menu_item_check label="ミニマップ" name="Mini-Map"/> - <menu_item_check label="検索" name="Search"/> + <menu_item_call label="イベント" name="Events"/> + <menu_item_check label="検索..." name="Search"/> <menu_item_call label="ホームにテレポート" name="Teleport Home"/> <menu_item_call label="現在地をホームに設定" name="Set Home to Here"/> <menu_item_call label="スナップショット" name="Take Snapshot"/> @@ -128,8 +130,10 @@ <menu_item_call label="コピーを取る" name="Take Copy"/> <menu_item_call label="オブジェクトの中身に保存" name="Save Object Back to Object Contents"/> <menu_item_call label="オブジェクトを返却する" name="Return Object back to Owner"/> + <menu_item_call label="複製" name="DuplicateObject"/> </menu> <menu label="スクリプト" name="Scripts"> + <menu_item_check label="スクリプトの警告/エラー..." name="Script debug"/> <menu_item_call label="スクリプトのリコンパイル(Mono)" name="Mono"/> <menu_item_call label="スクリプトのリコンパイル(LSL)" name="LSL"/> <menu_item_call label="スクリプトのリセット" name="Reset Scripts"/> diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index 00d9b3ca5c..7eaed8315b 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -143,8 +143,7 @@ <notification name="MerchantTransactionFailed"> マーケットプレイスによる取引が次のエラーにより失敗しました: -理由:'[ERROR_REASON]' -[ERROR_DESCRIPTION] +[ERROR_REASON][ERROR_DESCRIPTION] <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="MerchantUnprocessableEntity"> @@ -781,6 +780,9 @@ L$ が不足しているのでこのグループに参加することができ <notification name="CannotLinkPermanent"> 地域(リージョン)の境界を越えてオブジェクトをリンクできません。 </notification> + <notification name="CannotLinkAcrossRegions"> + 地域(リージョン)の境界を越えてオブジェクトをリンクできません。 + </notification> <notification name="CannotLinkDifferentOwners"> 所有者が異なるため、オブジェクトをリンクできません。 @@ -1815,11 +1817,10 @@ http://secondlife.com/download から最新バージョンをダウンロード <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="DoNotDisturbModeSet"> - 「通知を受けない」がオンになります。着信通信はあなたには通知されません。 + 着信拒否がオンになっています。着信する通信が通知されません。 -- 他の住民は「通知を受けない」の応答(「設定」>「一般」で設定)を受け取ることになります。 -- テレポートのオファーはすべて受け取り拒否となります。 -- ボイスコールは拒否されます。 +- 他の住人は「着信拒否」応答を受け取ります (「環境設定」 > 「一般」で設定)。 +- 音声通話は拒否されます。 <usetemplate ignoretext="マイ ログイン状態を「通知を受けない」モードに変更しました。" name="okignore" yestext="OK"/> </notification> <notification name="JoinedTooManyGroupsMember"> @@ -2597,9 +2598,6 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ <notification name="Cancelled"> 取り消されました。 </notification> - <notification name="CancelledSit"> - 座るのをやめました。 - </notification> <notification name="CancelledAttach"> 添付が取り消されました。 </notification> @@ -3925,27 +3923,26 @@ M キーを押して変更します。 <notification name="AvatarEjectFailed"> その区画の管理権限がないため、追放できませんでした。 </notification> - <notification name="CantMoveObjectParcelFull"> - 区画が埋まっているため、オブジェクト '[OBJECT_NAME]' を、リージョン [REGION_NAME] 内の [OBJ_POSITION] に移動できません。 + <notification name="CMOParcelFull"> + 区画がいっぱいなので、オブジェクト '[O]' を地域(リージョン) [R] の [P] に移動できません。 </notification> - <notification name="CantMoveObjectParcelPerms"> - オブジェクト '[OBJECT_NAME]' は、この区画で許可されていないため、リージョン [REGION_NAME] 内の [OBJ_POSITION] に移動できません。 + <notification name="CMOParcelPerms"> + ご使用のオブジェクトはこの区画で使用が許可されていないため、オブジェクト '[O]' を地域(リージョン) [R] の [P] に移動できません。 </notification> - <notification name="CantMoveObjectParcelResources"> - この区画でこのオブジェクトのリソースが不足しているため、オブジェクト '[OBJECT_NAME]' をリージョン [REGION_NAME] 内の [OBJ_POSITION] に移動できません。 + <notification name="CMOParcelResources"> + この区画にこのオブジェクトのリソースが不足しているため、オブジェクト '[O]' を地域(リージョン) [R] の [P] に移動できません。 </notification> <notification name="NoParcelPermsNoObject"> その区画へのアクセス権がないため、コピーが失敗しました。 </notification> - <notification name="CantMoveObjectRegionVersion"> - オブジェクト '[OBJECT_NAME]' をリージョン [REGION_NAME] 内の [OBJ_POSITION] に移動することはできません。他のリージョンでは、リージョンの境界をまたいだこのオブジェクトを受信することができない古いバージョンを実行しているためです。 + <notification name="CMORegionVersion"> + 他の地域(リージョン)でこのオブジェクトの地域(リージョン)をまたがる受け取りに対応していない旧バージョンを実行しているため、オブジェクト '[O]' を地域(リージョン) [R] の [P] に移動できません。 </notification> - <notification name="CantMoveObjectNavMesh"> - リージョン境界をまたぐナビメッシュを変更できないため、オブジェクト '[OBJECT_NAME]' をリージョン [REGION_NAME] 内の [OBJ_POSITION] に移動できません。 + <notification name="CMONavMesh"> + リージョンの境界にわたってナビメッシュを変更できないため、オブジェクト '[O]' を地域(リージョン) [R] の [P] に移動できません。 </notification> - <notification name="CantMoveObjectWTF"> - 不明な理由により、オブジェクト '[OBJECT_NAME]' を、リージョン [REGION_NAME] 内の [OBJ_POSITION] に移動できません。 -([FAILURE_TYPE]) + <notification name="CMOWTF"> + 不明な理由により、オブジェクト '[O]' を地域(リージョン) [R] の [P] に移動できません。 ([F]) </notification> <notification name="NoPermModifyObject"> そのオブジェクトを変更する権限がありません diff --git a/indra/newview/skins/default/xui/ja/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/ja/panel_block_list_sidetray.xml index 9263e5f347..2fb3206c7d 100644 --- a/indra/newview/skins/default/xui/ja/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/ja/panel_block_list_sidetray.xml @@ -7,5 +7,8 @@ <menu_button name="plus_btn" tool_tip="ブロックする住人・オブジェクトを選択"/> <button name="unblock_btn" tool_tip="ブロックリストから住人・オブジェクトを削除"/> </panel> + <text name="block_limit"> + [COUNT] 件のエントリーがブロック リストにあり、制限は [LIMIT] です。 + </text> <block_list name="blocked" tool_tip="現在ブロックされている住人一覧"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_flickr_photo.xml b/indra/newview/skins/default/xui/ja/panel_flickr_photo.xml index 16d873a8b1..6a484b8e59 100644 --- a/indra/newview/skins/default/xui/ja/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/ja/panel_flickr_photo.xml @@ -30,6 +30,6 @@ <combo_box.item label="Flickr レーティング区分「Moderate」" name="ModerateRating"/> <combo_box.item label="Flickr レーティング区分「Restricted」" name="RestrictedRating"/> </combo_box> - <button label="アップロード" name="post_photo_btn"/> + <button label="共有" name="post_photo_btn"/> <button label="取り消し" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_notify_textbox.xml b/indra/newview/skins/default/xui/ja/panel_notify_textbox.xml index 8e0cf4bc9d..5a8ff858df 100644 --- a/indra/newview/skins/default/xui/ja/panel_notify_textbox.xml +++ b/indra/newview/skins/default/xui/ja/panel_notify_textbox.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="instant_message" name="panel_notify_textbox"> - <string name="message_max_lines_count" value="7"/> - <panel label="info_panel" name="info_panel"> + <string name="message_max_lines_count" value="14"/> + <panel label="info_panel" name="info_panel"/> + <panel label="info_panel" name="textbox_panel"> <text_editor name="message" value="メッセージ"/> </panel> <panel label="control_panel" name="control_panel"> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml index 61d914135d..fc966dc08a 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml @@ -24,12 +24,14 @@ <text name="BetterText"> 遅い </text> + <check_box initial_value="true" label="周囲 (大気) シェーダー" name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="高度なライティングモデル" name="UseLightShaders"/> <slider label="アバターの最大複雑度:" name="IndirectMaxComplexity" tool_tip="どの点で視覚的に複雑なアバターを JellyDoll として描くかを制御します"/> <text name="IndirectMaxComplexityText"> 0 </text> - <check_box initial_value="true" label="周囲 (大気) シェーダー" name="WindLightUseAtmosShaders"/> - <check_box initial_value="true" label="高度なライティングモデル" name="UseLightShaders"/> + <check_box initial_value="true" label="常に友人を描画" name="AlwaysRenderFriends"/> + <button label="例外..." name="RenderExceptionsButton"/> <button label="設定をプリセットとして保存..." name="PrefSaveButton"/> <button label="プリセットをロード..." name="PrefLoadButton"/> min_val="0.125" diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/ja/panel_preferences_uploads.xml new file mode 100644 index 0000000000..b8524aa60f --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_preferences_uploads.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="アップロード" name="uploads"> + <text name="title"> + アップロード用の最新の宛先フォルダ + </text> + <text name="title_models"> + 画像 + </text> + <text name="title_sounds"> + サウンド + </text> + <text name="title_animation"> + アニメーション + </text> + <text name="upload_help"> + 宛先フォルダを変更するには、持ち物でそのフォルダを右クリックして、"デフォルトとして使用" を選択します + </text> +</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml index 492115bec0..ebaab7c122 100644 --- a/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml @@ -2,9 +2,9 @@ <panel name="panel_snapshot_options"> <button label="ディスクに保存" name="save_to_computer_btn"/> <button label="持ち物に保存(L$[Amount])" name="save_to_inventory_btn"/> - <button label="プロフィールにアップロード" name="save_to_profile_btn"/> - <button label="Facebook にアップロード" name="send_to_facebook_btn"/> - <button label="Twitter にアップロード" name="send_to_twitter_btn"/> - <button label="Flickr にアップロード" name="send_to_flickr_btn"/> + <button label="プロフィールフィードで共有する" name="save_to_profile_btn"/> + <button label="Facebook で共有する" name="send_to_facebook_btn"/> + <button label="Twitter で共有する" name="send_to_twitter_btn"/> + <button label="Flickr で共有する" name="send_to_flickr_btn"/> <button label="メールにより送信" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index 92b62c9c2f..0e08c4fafa 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -1491,7 +1491,7 @@ support@secondlife.com にお問い合わせください。 [[MARKETPLACE_CREATE_STORE_URL] マーケットプレイス ストア] がエラーを返しています。 </string> <string name="InventoryMarketplaceError"> - この機能は、現在、ベータ版の機能です。参加するには、この [http://goo.gl/forms/FCQ7UXkakz Google form] に名前を追加してください。 + マーケットプレイスのリストを開くときにエラーが発生しました。引き続きこのメッセージを受信するには、Second Life のサポート (http://support.secondlife.com) にお問い合わせください </string> <string name="InventoryMarketplaceListingsNoItemsTitle"> マーケットプレイスのリストフォルダが空です。 @@ -4444,7 +4444,10 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ [AGENT_NAME] とコンファレンスする </string> <string name="inventory_item_offered-im"> - インベントリアイテムを送りました + 持ち物アイテム '[ITEM_NAME]' が送られてきました + </string> + <string name="inventory_folder_offered-im"> + 持ち物フォルダ '[ITEM_NAME]' が送られてきました </string> <string name="share_alert"> インベントリからここにアイテムをドラッグします @@ -4531,7 +4534,10 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ 家の配置の設定。 </string> <string name="voice_morphing_url"> - http://secondlife.com/landing/voicemorphing + https://secondlife.com/destination/voice-island + </string> + <string name="premium_voice_morphing_url"> + https://secondlife.com/destination/voice-morphing-premium </string> <string name="paid_you_ldollars"> [NAME] は [REASON] のために L$[AMOUNT] を支払いました。 @@ -4902,7 +4908,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="server_is_down"> 大変申し訳ございませんが、予期しない問題が発生しました。 - サービスに関する既知の問題については、status.secondlifegrid.net をご覧ください。 +サービスに関する既知の問題については、http://status.secondlifegrid.net をご覧ください。 問題が引き続き発生する場合は、お使いのネットワークやファイアウォールの設定を調べてください。 </string> <string name="dateTimeWeekdaysNames"> @@ -5363,6 +5369,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="Command_Gestures_Label"> ジェスチャー </string> + <string name="Command_Grid_Status_Label"> + グリッドステータス + </string> <string name="Command_HowTo_Label"> ハウツー </string> @@ -5456,6 +5465,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="Command_Gestures_Tooltip"> アバターのジェスチャー </string> + <string name="Command_Grid_Status_Tooltip"> + 現在のグリッドステータスを表示 + </string> <string name="Command_HowTo_Tooltip"> 一般的タスクの実行方法 </string> @@ -5678,6 +5690,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="loading_chat_logs"> ロード中... </string> + <string name="na"> + 該当なし + </string> <string name="preset_combo_label"> -空リスト- </string> diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml index ca8cf83e62..861523523e 100644 --- a/indra/newview/skins/default/xui/pt/floater_about_land.xml +++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml @@ -451,7 +451,7 @@ Mídia: <spinner label="Horas de acesso:" name="HoursSpin"/> <panel name="Allowed_layout_panel"> <text label="Always Allow" name="AllowedText"> - Residentes permitidos ([COUNT]) + Residentes permitidos ([COUNT], máx: [MAX]) </text> <name_list name="AccessList" tool_tip="(Total [LISTED], máx de [MAX])"/> <button label="Adicionar" name="add_allowed"/> @@ -459,7 +459,7 @@ Mídia: </panel> <panel name="Banned_layout_panel"> <text label="Ban" name="BanCheck"> - Residentes banidos ([COUNT]) + Residentes banidos ([COUNT], máx: [MAX]) </text> <name_list name="BannedList" tool_tip="(Total [LISTED], máx de [MAX])"/> <button label="Adicionar" name="add_banned"/> diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_render_settings.xml b/indra/newview/skins/default/xui/pt/floater_avatar_render_settings.xml new file mode 100644 index 0000000000..b512126f98 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_avatar_render_settings.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_avatar_render_settings" title="CONFIGURAÇÕES DE RENDERIZAÇÃO DO AVATAR"> + <string name="av_never_render" value="Nunca"/> + <string name="av_always_render" value="Sempre"/> + <filter_editor label="Filtrar pessoas" name="people_filter_input"/> + <menu_button name="plus_btn" tool_tip="Ações nas pessoas selecionadas"/> + <name_list name="render_settings_list"> + <name_list.columns label="Nome" name="name"/> + <name_list.columns label="Configuração de renderização" name="setting"/> + </name_list> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_flickr.xml b/indra/newview/skins/default/xui/pt/floater_flickr.xml index 67d2295e41..d048dbb658 100644 --- a/indra/newview/skins/default/xui/pt/floater_flickr.xml +++ b/indra/newview/skins/default/xui/pt/floater_flickr.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_flickr" title="CARREGAR NO FLICKR"> +<floater name="floater_flickr" title="COMPARTILHAR NO FLICKR"> <panel name="background"> <tab_container name="tabs"> <panel label="FOTO" name="panel_flickr_photo"/> diff --git a/indra/newview/skins/default/xui/pt/floater_preferences.xml b/indra/newview/skins/default/xui/pt/floater_preferences.xml index c89a61d9b1..b3cd20b0e9 100644 --- a/indra/newview/skins/default/xui/pt/floater_preferences.xml +++ b/indra/newview/skins/default/xui/pt/floater_preferences.xml @@ -13,5 +13,6 @@ <panel label="Privacidade" name="im"/> <panel label="Configurações" name="input"/> <panel label="Avançado" name="advanced1"/> + <panel label="Envios" name="uploads"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_tos.xml b/indra/newview/skins/default/xui/pt/floater_tos.xml index a86e12fd59..6666f0f9ca 100644 --- a/indra/newview/skins/default/xui/pt/floater_tos.xml +++ b/indra/newview/skins/default/xui/pt/floater_tos.xml @@ -13,6 +13,6 @@ Leia com atenção os Termos do Serviço e a Política de Privacidade. Para continuar a entrar no [SECOND_LIFE], é preciso aceitar esses termos. </text> <text name="external_tos_required"> - Antes de continuar, você precisará visitar my.secondlife.com e fazer login para aceitar os Termos de Serviço. Obrigado! + Antes de continuar, você precisará visitar https://my.secondlife.com e fazer login para aceitar os Termos de Serviço. Obrigado! </text> </floater> diff --git a/indra/newview/skins/default/xui/pt/menu_attachment_other.xml b/indra/newview/skins/default/xui/pt/menu_attachment_other.xml index d991c89f61..f15bb0444e 100644 --- a/indra/newview/skins/default/xui/pt/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/pt/menu_attachment_other.xml @@ -17,8 +17,10 @@ <menu_item_call label="Mais zoom" name="Zoom In"/> <menu_item_call label="Pagar" name="Pay..."/> <menu_item_call label="Perfil do objeto" name="Object Inspect"/> - <menu_item_check label="Renderizar normalmente" name="RenderNormally"/> - <menu_item_check label="Não renderizar" name="DoNotRender"/> - <menu_item_check label="Renderizar completamente" name="AlwaysRenderFully"/> + <context_menu label="Renderizar avatar" name="Render Avatar"> + <menu_item_check label="Padrão" name="RenderNormally"/> + <menu_item_check label="Sempre" name="AlwaysRenderFully"/> + <menu_item_check label="Nunca" name="DoNotRender"/> + </context_menu> <menu_item_call label="Bloquear proprietário da partícula" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_other.xml b/indra/newview/skins/default/xui/pt/menu_avatar_other.xml index cba849cd05..d6021c09c9 100644 --- a/indra/newview/skins/default/xui/pt/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/pt/menu_avatar_other.xml @@ -16,8 +16,10 @@ <menu_item_call label="Descartar XML" name="Dump XML"/> <menu_item_call label="Mais zoom" name="Zoom In"/> <menu_item_call label="Pagar" name="Pay..."/> - <menu_item_check label="Renderizar normalmente" name="RenderNormally"/> - <menu_item_check label="Não renderizar" name="DoNotRender"/> - <menu_item_check label="Renderizar completamente" name="AlwaysRenderFully"/> + <context_menu label="Renderizar avatar" name="Render Avatar"> + <menu_item_check label="Padrão" name="RenderNormally"/> + <menu_item_check label="Sempre" name="AlwaysRenderFully"/> + <menu_item_check label="Nunca" name="DoNotRender"/> + </context_menu> <menu_item_call label="Bloquear proprietário da partícula" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_rendering_settings.xml b/indra/newview/skins/default/xui/pt/menu_avatar_rendering_settings.xml new file mode 100644 index 0000000000..e38bfe5802 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_avatar_rendering_settings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Settings"> + <menu_item_check label="Padrão" name="default"/> + <menu_item_check label="Sempre renderizar" name="always_render"/> + <menu_item_check label="Nunca renderizar" name="never_render"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_rendering_settings_add.xml b/indra/newview/skins/default/xui/pt/menu_avatar_rendering_settings_add.xml new file mode 100644 index 0000000000..c6b405645d --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_avatar_rendering_settings_add.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="menu_settings_add.xml"> + <menu_item_call label="Sempre renderizar um residente..." name="add_avatar_always_render"/> + <menu_item_call label="Nunca renderizar um residente..." name="add_avatar_never_render"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/pt/menu_gesture_gear.xml b/indra/newview/skins/default/xui/pt/menu_gesture_gear.xml index 70d8ae7a8e..85334d0475 100644 --- a/indra/newview/skins/default/xui/pt/menu_gesture_gear.xml +++ b/indra/newview/skins/default/xui/pt/menu_gesture_gear.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_gesture_gear"> - <menu_item_call label="Adicionar/remover de favoritos" name="activate"/> + <menu_item_call label="Ativar/desativar gesto selecionado" name="activate"/> <menu_item_call label="Copiar" name="copy_gesture"/> <menu_item_call label="Colar" name="paste"/> <menu_item_call label="Copiar UUID" name="copy_uuid"/> diff --git a/indra/newview/skins/default/xui/pt/menu_inventory.xml b/indra/newview/skins/default/xui/pt/menu_inventory.xml index 79261ceb1f..af8cfde6af 100644 --- a/indra/newview/skins/default/xui/pt/menu_inventory.xml +++ b/indra/newview/skins/default/xui/pt/menu_inventory.xml @@ -42,6 +42,12 @@ <menu_item_call label="Novo cabelo" name="New Hair"/> <menu_item_call label="Novos olhos" name="New Eyes"/> </menu> + <menu label="Usar como padrão para" name="upload_def"> + <menu_item_call label="Envios de imagem" name="Image uploads"/> + <menu_item_call label="Envios de som" name="Sound uploads"/> + <menu_item_call label="Envios de animação" name="Animation uploads"/> + <menu_item_call label="Envios de modelos" name="Model uploads"/> + </menu> <menu label="Alterar fonte" name="Change Type"> <menu_item_call label="Padrão" name="Default"/> <menu_item_call label="Luvas" name="Gloves"/> @@ -60,6 +66,7 @@ <menu_item_call label="Substituir look" name="Replace Outfit"/> <menu_item_call label="Adicionar a look" name="Add To Outfit"/> <menu_item_call label="Tirar do look atual" name="Remove From Outfit"/> + <menu_item_call label="Copiar lista de looks para a área de transferência" name="Copy outfit list to clipboard"/> <menu_item_call label="Encontrar original" name="Find Original"/> <menu_item_call label="Remover item" name="Purge Item"/> <menu_item_call label="Restaurar item" name="Restore Item"/> @@ -72,7 +79,6 @@ <menu_item_call label="Copiar" name="Copy"/> <menu_item_call label="Colar" name="Paste"/> <menu_item_call label="Colar como link" name="Paste As Link"/> - <menu_item_call label="Excluir" name="Remove Link"/> <menu_item_call label="Apagar" name="Delete"/> <menu_item_call label="Excluir pasta do sistema" name="Delete System Folder"/> <menu_item_call label="Pasta conversa em conferência" name="Conference Chat Folder"/> @@ -95,7 +101,6 @@ <menu_item_call label="Editar" name="Wearable Edit"/> <menu_item_call label="Adicionar" name="Wearable Add"/> <menu_item_call label="Tirar" name="Take Off"/> - <menu_item_call label="Copiar para Caixa de saída do lojista" name="Merchant Copy"/> <menu_item_call label="Copiar para Listagens do Marketplace" name="Marketplace Copy"/> <menu_item_call label="Mover para Listagens do Marketplace" name="Marketplace Move"/> <menu_item_call label="--Sem opções--" name="--no options--"/> diff --git a/indra/newview/skins/default/xui/pt/menu_login.xml b/indra/newview/skins/default/xui/pt/menu_login.xml index 44cfae236b..7b45eb1ad3 100644 --- a/indra/newview/skins/default/xui/pt/menu_login.xml +++ b/indra/newview/skins/default/xui/pt/menu_login.xml @@ -2,6 +2,7 @@ <menu_bar name="Login Menu"> <menu label="Eu" name="File"> <menu_item_call label="Preferências..." name="Preferences..."/> + <menu_item_check label="Exibir seletor da grade" name="Show Grid Picker"/> <menu_item_call label="Sair do [APP_NAME]" name="Quit"/> </menu> <menu label="Ajuda" name="Help"> @@ -32,7 +33,6 @@ <menu_item_check label="Erro" name="Error"/> <menu_item_check label="Nenhum" name="None"/> </menu> - <menu_item_check label="Exibir seletor da grade" name="Show Grid Picker"/> <menu_item_call label="Exibir painel de notificações" name="Show Notifications Console"/> </menu> </menu_bar> 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 8bbde9b38c..da824589c8 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 @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_blocked_gear"> <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 sons de objeto" name="BlockObjectSounds"/> <menu_item_call label="Perfil..." name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml index 6964941f0a..542734eb22 100644 --- a/indra/newview/skins/default/xui/pt/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml @@ -44,6 +44,7 @@ <menu_item_check label="Não distorcer voz" name="NoVoiceMorphing"/> <menu_item_check label="Visualizar..." name="Preview"/> <menu_item_call label="Assinar..." name="Subscribe"/> + <menu_item_call label="Benefício Premium..." name="PremiumPerk"/> </menu> <menu_item_check label="Gestos..." name="Gestures"/> <menu_item_check label="Amigos" name="My Friends"/> @@ -57,7 +58,8 @@ <menu_item_call label="Destinos..." name="Destinations"/> <menu_item_check label="Mapa-múndi" name="World Map"/> <menu_item_check label="Mini Mapa" name="Mini-Map"/> - <menu_item_check label="Busca" name="Search"/> + <menu_item_call label="Eventos" name="Events"/> + <menu_item_check label="Buscar..." name="Search"/> <menu_item_call label="Teletransportar para início" name="Teleport Home"/> <menu_item_call label="Definir como casa" name="Set Home to Here"/> <menu_item_call label="Foto" name="Take Snapshot"/> @@ -128,8 +130,10 @@ <menu_item_call label="Pegar uma cópia" name="Take Copy"/> <menu_item_call label="Salvar objeto de volta aos conteúdos do objeto" name="Save Object Back to Object Contents"/> <menu_item_call label="Devolver objeto" name="Return Object back to Owner"/> + <menu_item_call label="Duplicar" name="DuplicateObject"/> </menu> <menu label="Scripts" name="Scripts"> + <menu_item_check label="Avisos/erros de script..." name="Script debug"/> <menu_item_call label="Recompilar scripts (Mono)" name="Mono"/> <menu_item_call label="Recompilar scripts (LSL)" name="LSL"/> <menu_item_call label="Resetar scripts" name="Reset Scripts"/> diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml index 53a418a1d8..c8a5f66b4d 100644 --- a/indra/newview/skins/default/xui/pt/notifications.xml +++ b/indra/newview/skins/default/xui/pt/notifications.xml @@ -141,10 +141,9 @@ Ocorreu uma falha na inicialização do Marketplace devido a um erro do sistema <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="MerchantTransactionFailed"> - Ocorreu uma falha na transação com o Marketplace com o seguinte erro: + Falha na transação com o Marketplace com o seguinte erro: - Motivo: '[ERROR_REASON]' - [ERROR_DESCRIPTION] + [ERROR_REASON][ERROR_DESCRIPTION] <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="MerchantUnprocessableEntity"> @@ -756,6 +755,9 @@ Por favor, certifique-se de que nenhum deles está travado e que você é dono d <notification name="CannotLinkPermanent"> Os objetos não podem ser vinculados através de demarcações de região. </notification> + <notification name="CannotLinkAcrossRegions"> + Os objetos não podem ser vinculados através de demarcações de região. + </notification> <notification name="CannotLinkDifferentOwners"> Impossibilitado de unir porque nem todos os objetos são do mesmo dono. @@ -1774,10 +1776,9 @@ Se você estiver muito ansioso para experimentar os novos recursos e correções <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="DoNotDisturbModeSet"> - Não perturbe está ativado. Você não será notificado de comunicações recebidas. + “Não perturbe” está ativado. Você não será notificado de comunicações recebidas. - Outros residentes receberão a sua resposta de Não perturbe (definida em Preferências > Geral). -- As ofertas de teletransporte serão recusadas. - Chamadas de voz serão recusadas. <usetemplate ignoretext="Altero meu status para o modo Não perturbe" name="okignore" yestext="OK"/> </notification> @@ -2547,9 +2548,6 @@ Inclua um link para facilitar o acesso para visitantes. Teste o link na barra de <notification name="Cancelled"> Cancelado </notification> - <notification name="CancelledSit"> - Cancelada a ação de sentar - </notification> <notification name="CancelledAttach"> Cancelado Anexar </notification> @@ -3872,32 +3870,32 @@ Tente novamente em instantes. <notification name="AvatarEjectFailed"> A expulsão falhou porque você não tem permissão de administrador para esse lote. </notification> - <notification name="CantMoveObjectParcelFull"> - Não é possível mover '[OBJECT_NAME]' para -[OBJ_POSITION] na região [REGION_NAME] porque o lote está cheio. + <notification name="CMOParcelFull"> + Não foi possível mover o objeto '[O]' para +[P] na região [R] porque o lote está cheio. </notification> - <notification name="CantMoveObjectParcelPerms"> - Não é possível mover '[OBJECT_NAME]' para -[OBJ_POSITION] na região [REGION_NAME] porque seus objetos não são permitidos neste lote. + <notification name="CMOParcelPerms"> + Não foi possível mover o objeto '[O]' para +[P] na região [R] porque seus objetos não são permitidos neste lote. </notification> - <notification name="CantMoveObjectParcelResources"> - Não é possível mover '[OBJECT_NAME]' para -[OBJ_POSITION] na região [REGION_NAME] porque não há recursos suficientes para este objeto neste lote. + <notification name="CMOParcelResources"> + Não foi possível mover o objeto '[O]' para +[P] na região [R] porque não há recursos suficientes para este objeto neste lote. </notification> <notification name="NoParcelPermsNoObject"> A cópia falhou porque você não tem acesso a esse lote. </notification> - <notification name="CantMoveObjectRegionVersion"> - Não é possível mover '[OBJECT_NAME]' para -[OBJ_POSITION] na região [REGION_NAME] porque outra região está executando uma versão mais antiga, que não dá suporte o recebimento deste objeto por meio de passagem de regiões. + <notification name="CMORegionVersion"> + Não foi possível mover o objeto '[O]' para +[P] na região [R] porque outra região está executando uma versão mais antiga, que não dá suporte ao recebimento deste objeto por meio de passagem de regiões. </notification> - <notification name="CantMoveObjectNavMesh"> - Não é possível mover '[OBJECT_NAME]' para -[OBJ_POSITION] na região [REGION_NAME] porque você não está autorizado a modificar o navmesh além dos limites da região. + <notification name="CMONavMesh"> + Não foi possível mover o objeto '[O]' para +[P] na região [R] porque você não pode modificar o navmesh pelas demarcações da região. </notification> - <notification name="CantMoveObjectWTF"> - Não é possível mover '[OBJECT_NAME]' para -[OBJ_POSITION] na região [REGION_NAME] por uma razão desconhecida. ([FAILURE_TYPE]) + <notification name="CMOWTF"> + Não foi possível mover o objeto '[O]' para +[P] na região [R] por motivos desconhecido. ([F]) </notification> <notification name="NoPermModifyObject"> Você não está autorizado a modificar este objeto diff --git a/indra/newview/skins/default/xui/pt/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/pt/panel_block_list_sidetray.xml index 2fcf6b9932..3404f032ce 100644 --- a/indra/newview/skins/default/xui/pt/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/pt/panel_block_list_sidetray.xml @@ -7,5 +7,8 @@ <menu_button name="plus_btn" tool_tip="Escolher um residente ou um objeto a ser bloqueado"/> <button name="unblock_btn" tool_tip="Remover residente ou objeto da lista dos bloqueados"/> </panel> + <text name="block_limit"> + [COUNT] registros na sua lista de bloqueados. O limite é [LIMIT]. + </text> <block_list name="blocked" tool_tip="Lista atual dos residentes bloqueados"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_flickr_photo.xml b/indra/newview/skins/default/xui/pt/panel_flickr_photo.xml index cbb3e362fe..66a4f3ee3e 100644 --- a/indra/newview/skins/default/xui/pt/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/pt/panel_flickr_photo.xml @@ -30,6 +30,6 @@ Use "" para tags com várias palavras <combo_box.item label="Classificação moderada do Flickr" name="ModerateRating"/> <combo_box.item label="Classificação restrita do Flickr" name="RestrictedRating"/> </combo_box> - <button label="Enviar" name="post_photo_btn"/> + <button label="Compartilhar" name="post_photo_btn"/> <button label="Cancelar" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_notify_textbox.xml b/indra/newview/skins/default/xui/pt/panel_notify_textbox.xml index dcd9ba1815..a111188b9e 100644 --- a/indra/newview/skins/default/xui/pt/panel_notify_textbox.xml +++ b/indra/newview/skins/default/xui/pt/panel_notify_textbox.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="instant_message" name="panel_notify_textbox"> - <string name="message_max_lines_count" value="7"/> - <panel label="info_panel" name="info_panel"> + <string name="message_max_lines_count" value="14"/> + <panel label="info_panel" name="info_panel"/> + <panel label="info_panel" name="textbox_panel"> <text_editor name="message" value="mensagem"/> </panel> <panel label="control_panel" name="control_panel"> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml index fa17a4ff11..a0f4ea4ed5 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml @@ -25,12 +25,14 @@ rápido <text name="BetterText"> Melhor </text> + <check_box initial_value="true" label="Tonalidades atmosféricas" name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="Modelo avançado de luzes" name="UseLightShaders"/> <slider label="Complexidade máxima do avatar:" name="IndirectMaxComplexity" tool_tip="Controla o ponto no qual um avatar visualmente complexo é desenhado como uma JellyDoll"/> <text name="IndirectMaxComplexityText"> 0 </text> - <check_box initial_value="true" label="Tonalidades atmosféricas" name="WindLightUseAtmosShaders"/> - <check_box initial_value="true" label="Modelo avançado de luzes" name="UseLightShaders"/> + <check_box initial_value="true" label="Sempre renderizar amigos" name="AlwaysRenderFriends"/> + <button label="Exceções..." name="RenderExceptionsButton"/> <button label="Salvar configurações como predefinição..." name="PrefSaveButton"/> <button label="Carregar predefinição..." name="PrefLoadButton"/> min_val="0.125" diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/pt/panel_preferences_uploads.xml new file mode 100644 index 0000000000..8050b56f0a --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_preferences_uploads.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="Envios" name="uploads"> + <text name="title"> + Pastas de destino atuais para envios + </text> + <text name="title_models"> + Imagens + </text> + <text name="title_sounds"> + Sons + </text> + <text name="title_animation"> + Animações + </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" + </text> +</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml index d588e59f6d..067e5dbd76 100644 --- a/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml @@ -2,9 +2,9 @@ <panel name="panel_snapshot_options"> <button label="Salvar no disco" name="save_to_computer_btn"/> <button label="Salvar em inventário (L$[AMOUNT])" name="save_to_inventory_btn"/> - <button label="Carregar no perfil" name="save_to_profile_btn"/> - <button label="Carregar no Facebook" name="send_to_facebook_btn"/> - <button label="Carregar no Twitter" name="send_to_twitter_btn"/> - <button label="Carregar no Flickr" name="send_to_flickr_btn"/> + <button label="Compartilhar no feed do perfil" name="save_to_profile_btn"/> + <button label="Compartilhar no Facebook" name="send_to_facebook_btn"/> + <button label="Compartilhar no Twitter" name="send_to_twitter_btn"/> + <button label="Compartilhar no Flickr" name="send_to_flickr_btn"/> <button label="Enviar por email" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index 94b69634d4..6cae93e2ea 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -1437,7 +1437,8 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para A loja [[MARKETPLACE_CREATE_STORE_URL] no Marketplace] está retornando erros. </string> <string name="InventoryMarketplaceError"> - Esse recurso está em beta. Inscreva-se neste [http://goo.gl/forms/FCQ7UXkakz formulário do Google] se você deseja participar. + Erro ao abrir as listagens do Marketplace. +Se você continuar a receber essa mensagem, entre em contato com o suporte do Second Life para obter ajuda em http://support.secondlife.com </string> <string name="InventoryMarketplaceListingsNoItemsTitle"> Sua pasta Listagens do Marketplace está vazia. @@ -4317,7 +4318,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Conversa com [AGENT_NAME] </string> <string name="inventory_item_offered-im"> - Oferta de item de inventário + Item do inventário '[ITEM_NAME]' oferecido + </string> + <string name="inventory_folder_offered-im"> + Pasta do inventário '[ITEM_NAME]' oferecida </string> <string name="flickr_post_success"> Você publicou no Flickr. @@ -4401,7 +4405,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Posição inicial definida. </string> <string name="voice_morphing_url"> - http://secondlife.com/landing/voicemorphing + https://secondlife.com/destination/voice-island + </string> + <string name="premium_voice_morphing_url"> + https://secondlife.com/destination/voice-morphing-premium </string> <string name="paid_you_ldollars"> [NAME] lhe pagou L$ [AMOUNT] [REASON]. @@ -4772,7 +4779,7 @@ Denunciar abuso <string name="server_is_down"> Aconteceu algo inesperado, apesar de termos tentado impedir isso. - Cheque secondlifegrid.net para saber se foi detectado um problema com o serviço. +Visite http://status.secondlifegrid.net para saber se foi detectado um problema com o serviço. Se o problema persistir, cheque a configuração da sua rede e firewall. </string> <string name="dateTimeWeekdaysNames"> @@ -5233,6 +5240,9 @@ Tente colocar o caminho do editor entre aspas. <string name="Command_Gestures_Label"> Gestos </string> + <string name="Command_Grid_Status_Label"> + Status da grade + </string> <string name="Command_HowTo_Label"> Como </string> @@ -5326,6 +5336,9 @@ Tente colocar o caminho do editor entre aspas. <string name="Command_Gestures_Tooltip"> Gestos para seu avatar </string> + <string name="Command_Grid_Status_Tooltip"> + Mostrar status da grade atual + </string> <string name="Command_HowTo_Tooltip"> Como executar tarefas comuns </string> @@ -5548,6 +5561,9 @@ Tente colocar o caminho do editor entre aspas. <string name="loading_chat_logs"> Carregando... </string> + <string name="na"> + n/d + </string> <string name="preset_combo_label"> -Lista vazia- </string> diff --git a/indra/newview/skins/default/xui/ru/floater_about_land.xml b/indra/newview/skins/default/xui/ru/floater_about_land.xml index 28d5ff6ab9..7c8faa8ede 100644 --- a/indra/newview/skins/default/xui/ru/floater_about_land.xml +++ b/indra/newview/skins/default/xui/ru/floater_about_land.xml @@ -446,7 +446,7 @@ <spinner label="Часы доступа:" name="HoursSpin"/> <panel name="Allowed_layout_panel"> <text label="Всегда разрешено" name="AllowedText"> - Допущенные жители ([COUNT]) + Допущенные жители ([COUNT], макс. [MAX]) </text> <name_list name="AccessList" tool_tip="([LISTED] в списке, [MAX] максимум)"/> <button label="Добавить" name="add_allowed"/> @@ -454,7 +454,7 @@ </panel> <panel name="Banned_layout_panel"> <text label="Бан" name="BanCheck"> - Забаненные жители ([COUNT]) + Забаненные жители ([COUNT], макс. [MAX]) </text> <name_list name="BannedList" tool_tip="([LISTED] в списке, [MAX] максимум)"/> <button label="Добавить" name="add_banned"/> diff --git a/indra/newview/skins/default/xui/ru/floater_avatar_render_settings.xml b/indra/newview/skins/default/xui/ru/floater_avatar_render_settings.xml new file mode 100644 index 0000000000..9c0c3196aa --- /dev/null +++ b/indra/newview/skins/default/xui/ru/floater_avatar_render_settings.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_avatar_render_settings" title="НАСТРОЙКИ ОТРИСОВКИ АВАТАРА"> + <string name="av_never_render" value="Никогда"/> + <string name="av_always_render" value="Всегда"/> + <filter_editor label="Фильтр для людей" name="people_filter_input"/> + <menu_button name="plus_btn" tool_tip="Действия с выбранным жителем"/> + <name_list name="render_settings_list"> + <name_list.columns label="Имя" name="name"/> + <name_list.columns label="Настройка отрисовки" name="setting"/> + </name_list> +</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_flickr.xml b/indra/newview/skins/default/xui/ru/floater_flickr.xml index 4f020399fb..67a3bedc6b 100644 --- a/indra/newview/skins/default/xui/ru/floater_flickr.xml +++ b/indra/newview/skins/default/xui/ru/floater_flickr.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_flickr" title="ЗАГРУЗИТЬ НА FLICKR"> +<floater name="floater_flickr" title="ПОДЕЛИТЬСЯ В FLICKR"> <panel name="background"> <tab_container name="tabs"> <panel label="ФОТО" name="panel_flickr_photo"/> diff --git a/indra/newview/skins/default/xui/ru/floater_preferences.xml b/indra/newview/skins/default/xui/ru/floater_preferences.xml index fc244b9d8b..fa78eedd3a 100644 --- a/indra/newview/skins/default/xui/ru/floater_preferences.xml +++ b/indra/newview/skins/default/xui/ru/floater_preferences.xml @@ -13,5 +13,6 @@ <panel label="Приватность" name="im"/> <panel label="Конфигурация" name="input"/> <panel label="Дополнительно" name="advanced1"/> + <panel label="Переданное" name="uploads"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/ru/floater_tos.xml b/indra/newview/skins/default/xui/ru/floater_tos.xml index adadcc88f3..690affb491 100644 --- a/indra/newview/skins/default/xui/ru/floater_tos.xml +++ b/indra/newview/skins/default/xui/ru/floater_tos.xml @@ -13,6 +13,6 @@ Внимательно прочитайте Пользовательское соглашение и Политику конфиденциальности. Для входа в [SECOND_LIFE] вы должны согласиться с условиями соглашения. </text> <text name="external_tos_required"> - Для продолжения перейдите на сайт my.secondlife.com, войдите и примите Условия обслуживания. Спасибо! + Для продолжения перейдите на сайт https://my.secondlife.com, войдите и примите Условия обслуживания. Спасибо! </text> </floater> diff --git a/indra/newview/skins/default/xui/ru/menu_attachment_other.xml b/indra/newview/skins/default/xui/ru/menu_attachment_other.xml index 63b0698c6b..2d62e38da2 100644 --- a/indra/newview/skins/default/xui/ru/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/ru/menu_attachment_other.xml @@ -17,8 +17,10 @@ <menu_item_call label="Приблизить" name="Zoom In"/> <menu_item_call label="Заплатить" name="Pay..."/> <menu_item_call label="Профиль объекта" name="Object Inspect"/> - <menu_item_check label="Обычная прорисовка" name="RenderNormally"/> - <menu_item_check label="Не рисовать" name="DoNotRender"/> - <menu_item_check label="Полная прорисовка" name="AlwaysRenderFully"/> + <context_menu label="Рисовать аватар" name="Render Avatar"> + <menu_item_check label="По умолчанию" name="RenderNormally"/> + <menu_item_check label="Всегда" name="AlwaysRenderFully"/> + <menu_item_check label="Никогда" name="DoNotRender"/> + </context_menu> <menu_item_call label="Блокировать владельца участка" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/ru/menu_avatar_other.xml b/indra/newview/skins/default/xui/ru/menu_avatar_other.xml index de35264055..af59b2742c 100644 --- a/indra/newview/skins/default/xui/ru/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/ru/menu_avatar_other.xml @@ -16,8 +16,10 @@ <menu_item_call label="Вывод XML" name="Dump XML"/> <menu_item_call label="Приблизить" name="Zoom In"/> <menu_item_call label="Заплатить" name="Pay..."/> - <menu_item_check label="Обычная прорисовка" name="RenderNormally"/> - <menu_item_check label="Не рисовать" name="DoNotRender"/> - <menu_item_check label="Полная прорисовка" name="AlwaysRenderFully"/> + <context_menu label="Прорисовать аватар" name="Render Avatar"> + <menu_item_check label="По умолчанию" name="RenderNormally"/> + <menu_item_check label="Всегда" name="AlwaysRenderFully"/> + <menu_item_check label="Никогда" name="DoNotRender"/> + </context_menu> <menu_item_call label="Блокировать владельца участка" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/ru/menu_avatar_rendering_settings.xml b/indra/newview/skins/default/xui/ru/menu_avatar_rendering_settings.xml new file mode 100644 index 0000000000..c1ec8d67b1 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/menu_avatar_rendering_settings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Settings"> + <menu_item_check label="По умолчанию" name="default"/> + <menu_item_check label="Всегда рисовать" name="always_render"/> + <menu_item_check label="Никогда не рисовать" name="never_render"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/ru/menu_avatar_rendering_settings_add.xml b/indra/newview/skins/default/xui/ru/menu_avatar_rendering_settings_add.xml new file mode 100644 index 0000000000..3807458cd3 --- /dev/null +++ b/indra/newview/skins/default/xui/ru/menu_avatar_rendering_settings_add.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="menu_settings_add.xml"> + <menu_item_call label="Всегда рисовать жителя..." name="add_avatar_always_render"/> + <menu_item_call label="Никогда не рисовать жителя..." name="add_avatar_never_render"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/ru/menu_gesture_gear.xml b/indra/newview/skins/default/xui/ru/menu_gesture_gear.xml index d0b68cefbd..74ec79a9dc 100644 --- a/indra/newview/skins/default/xui/ru/menu_gesture_gear.xml +++ b/indra/newview/skins/default/xui/ru/menu_gesture_gear.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_gesture_gear"> - <menu_item_call label="Добавить в избранное/удалить" name="activate"/> + <menu_item_call label="Активировать/деактивировать выбранный жест" name="activate"/> <menu_item_call label="Копировать" name="copy_gesture"/> <menu_item_call label="Вставить" name="paste"/> <menu_item_call label="Копировать UUID" name="copy_uuid"/> diff --git a/indra/newview/skins/default/xui/ru/menu_inventory.xml b/indra/newview/skins/default/xui/ru/menu_inventory.xml index b8cbef8246..0097d7e301 100644 --- a/indra/newview/skins/default/xui/ru/menu_inventory.xml +++ b/indra/newview/skins/default/xui/ru/menu_inventory.xml @@ -42,6 +42,12 @@ <menu_item_call label="Новые волосы" name="New Hair"/> <menu_item_call label="Новые глаза" name="New Eyes"/> </menu> + <menu label="Использовать по умолчанию для" name="upload_def"> + <menu_item_call label="Переданные изображения" name="Image uploads"/> + <menu_item_call label="Переданные звуки" name="Sound uploads"/> + <menu_item_call label="Переданные анимации" name="Animation uploads"/> + <menu_item_call label="Переданные модели" name="Model uploads"/> + </menu> <menu label="Сменить тип" name="Change Type"> <menu_item_call label="По умолчанию" name="Default"/> <menu_item_call label="Перчатки" name="Gloves"/> @@ -60,6 +66,7 @@ <menu_item_call label="Сменить текущий костюм" name="Replace Outfit"/> <menu_item_call label="Добавить к текущему костюму" name="Add To Outfit"/> <menu_item_call label="Убрать из текущего костюма" name="Remove From Outfit"/> + <menu_item_call label="Копировать список костюмов в буфер обмена" name="Copy outfit list to clipboard"/> <menu_item_call label="Найти оригинал" name="Find Original"/> <menu_item_call label="Удалить навсегда" name="Purge Item"/> <menu_item_call label="Восстановить вещь" name="Restore Item"/> @@ -72,7 +79,6 @@ <menu_item_call label="Копировать" name="Copy"/> <menu_item_call label="Вставить" name="Paste"/> <menu_item_call label="Вставить как ссылку" name="Paste As Link"/> - <menu_item_call label="Удалить" name="Remove Link"/> <menu_item_call label="Удалить" name="Delete"/> <menu_item_call label="Удалить системную папку" name="Delete System Folder"/> <menu_item_call label="Начать конференцию" name="Conference Chat Folder"/> @@ -95,7 +101,6 @@ <menu_item_call label="Изменить" name="Wearable Edit"/> <menu_item_call label="Добавить" name="Wearable Add"/> <menu_item_call label="Снять" name="Take Off"/> - <menu_item_call label="Копировать в «Торговые исходящие»" name="Merchant Copy"/> <menu_item_call label="Копировать в списки товаров торгового центра" name="Marketplace Copy"/> <menu_item_call label="Переместить в списки товаров торгового центра" name="Marketplace Move"/> <menu_item_call label="- нет действий -" name="--no options--"/> diff --git a/indra/newview/skins/default/xui/ru/menu_login.xml b/indra/newview/skins/default/xui/ru/menu_login.xml index 2d1fe28242..754803904a 100644 --- a/indra/newview/skins/default/xui/ru/menu_login.xml +++ b/indra/newview/skins/default/xui/ru/menu_login.xml @@ -2,6 +2,7 @@ <menu_bar name="Login Menu"> <menu label="Я" name="File"> <menu_item_call label="Настройки..." name="Preferences..."/> + <menu_item_check label="Выбор сетки" name="Show Grid Picker"/> <menu_item_call label="Выход из [APP_NAME]" name="Quit"/> </menu> <menu label="Справка" name="Help"> @@ -33,7 +34,6 @@ <menu_item_check label="Ошибка" name="Error"/> <menu_item_check label="Нет" name="None"/> </menu> - <menu_item_check label="Выбор сетки" name="Show Grid Picker"/> <menu_item_call label="Консоль уведомлений" name="Show Notifications Console"/> </menu> </menu_bar> 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 157f2ad5e2..c06776d5f9 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 @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_blocked_gear"> <menu_item_call label="Разблокировать" name="unblock"/> + <menu_item_check label="Блокировать голос" name="BlockVoice"/> + <menu_item_check label="Блокировать текст" name="MuteText"/> + <menu_item_check label="Блокировать звуки объекта" name="BlockObjectSounds"/> <menu_item_call label="Профиль…" name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml index e5e484173d..e0d8861225 100644 --- a/indra/newview/skins/default/xui/ru/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml @@ -42,6 +42,7 @@ <menu_item_check label="Без изменения голоса" name="NoVoiceMorphing"/> <menu_item_check label="Просмотр..." name="Preview"/> <menu_item_call label="Подписаться..." name="Subscribe"/> + <menu_item_call label="Премиум-бонус..." name="PremiumPerk"/> </menu> <menu_item_check label="Жесты..." name="Gestures"/> <menu_item_check label="Друзья" name="My Friends"/> @@ -55,7 +56,8 @@ <menu_item_call label="Пункты..." name="Destinations"/> <menu_item_check label="Карта мира" name="World Map"/> <menu_item_check label="Миникарта" name="Mini-Map"/> - <menu_item_check label="Поиск" name="Search"/> + <menu_item_call label="События" name="Events"/> + <menu_item_check label="Поиск..." name="Search"/> <menu_item_call label="Телепортация домой" name="Teleport Home"/> <menu_item_call label="Установить дом здесь" name="Set Home to Here"/> <menu_item_call label="Снимок" name="Take Snapshot"/> @@ -126,8 +128,10 @@ <menu_item_call label="Взять копию" name="Take Copy"/> <menu_item_call label="Сохранить в контенте объектов" name="Save Object Back to Object Contents"/> <menu_item_call label="Вернуть объект" name="Return Object back to Owner"/> + <menu_item_call label="Дублировать" name="DuplicateObject"/> </menu> <menu label="Скрипты" name="Scripts"> + <menu_item_check label="Предупреждения/ошибки скриптов..." name="Script debug"/> <menu_item_call label="Перекомпилировать скрипты (Mono)" name="Mono"/> <menu_item_call label="Перекомпилировать скрипты (LSL)" name="LSL"/> <menu_item_call label="Сброс скриптов" name="Reset Scripts"/> diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml index 50931fc9b8..6d49d4e06e 100644 --- a/indra/newview/skins/default/xui/ru/notifications.xml +++ b/indra/newview/skins/default/xui/ru/notifications.xml @@ -144,8 +144,7 @@ <notification name="MerchantTransactionFailed"> Не удалось выполнить транзакцию с торговым центром, ошибка: - Причина: '[ERROR_REASON]' - [ERROR_DESCRIPTION] + [ERROR_REASON][ERROR_DESCRIPTION] <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="MerchantUnprocessableEntity"> @@ -762,6 +761,9 @@ <notification name="CannotLinkPermanent"> Объекты нельзя связывать через границу региона. </notification> + <notification name="CannotLinkAcrossRegions"> + Объекты нельзя связывать через границу региона. + </notification> <notification name="CannotLinkDifferentOwners"> Невозможно объединить объекты: не у всех объектов один владелец. @@ -1786,7 +1788,6 @@ http://secondlife.com/download. Режим «Не беспокоить» включен. Вы не будете получать уведомлений о входящих вызовах. - Другие жители будут получать ваш ответ, установленный для режима «Не беспокоить» (Настройки > Общие). -- Предложения телепортации будут отклоняться. - Голосовые вызовы будут отклоняться. <usetemplate ignoretext="Смена моего статуса на режим «Не беспокоить»" name="okignore" yestext="OK"/> </notification> @@ -2554,9 +2555,6 @@ http://secondlife.com/download. <notification name="Cancelled"> Отменено </notification> - <notification name="CancelledSit"> - Отмененная посадка - </notification> <notification name="CancelledAttach"> Отмененное присоединение </notification> @@ -3885,31 +3883,32 @@ http://secondlife.com/download. <notification name="AvatarEjectFailed"> Не удалось выбросить: у вас нет прав администратора на этом участке. </notification> - <notification name="CantMoveObjectParcelFull"> - Нельзя переместить объект «[OBJECT_NAME]» в позицию «[OBJ_POSITION]» региона [REGION_NAME]: участок уже заполнен. + <notification name="CMOParcelFull"> + Нельзя переместить объект «[O]» в позицию +«[P]» региона [R]: участок уже заполнен. </notification> - <notification name="CantMoveObjectParcelPerms"> - Нельзя переместить объект «[OBJECT_NAME]» в позицию -«[OBJ_POSITION]» региона [REGION_NAME]: вашим объектам не разрешено присутствовать на этом участке. + <notification name="CMOParcelPerms"> + Нельзя переместить объект «[O]» в позицию +«[P]» региона [R]: вашим объектам не разрешено присутствовать на этом участке. </notification> - <notification name="CantMoveObjectParcelResources"> - Нельзя переместить объект «[OBJECT_NAME]» в позицию -«[OBJ_POSITION]» региона [REGION_NAME]: на этом участке недостаточно ресурсов для данного объекта. + <notification name="CMOParcelResources"> + Нельзя переместить объект «[O]» в позицию +«[P]» региона [R]: на этом участке недостаточно ресурсов для данного объекта. </notification> <notification name="NoParcelPermsNoObject"> Не удалось скопировать: у вас нет доступа к этому участку. </notification> - <notification name="CantMoveObjectRegionVersion"> - Нельзя переместить объект «[OBJECT_NAME]» в позицию -[OBJ_POSITION] региона [REGION_NAME]: в другом регионе работает старая версия симулятора, которая не поддерживает прием этого объекта через границу регионов. + <notification name="CMORegionVersion"> + Нельзя переместить объект «[O]» в позицию + [P] региона [R]: в другом регионе работает старая версия симулятора, которая не поддерживает прием этого объекта через границу регионов. </notification> - <notification name="CantMoveObjectNavMesh"> - Нельзя переместить объект «[OBJECT_NAME]» в позицию -«[OBJ_POSITION]» региона [REGION_NAME]: вам не разрешено изменять навигационную сетку за пределами региона. + <notification name="CMONavMesh"> + Нельзя переместить объект «[O]» в позицию +«[P]» региона [R]: вам не разрешено изменять навигационную сетку за пределами региона. </notification> - <notification name="CantMoveObjectWTF"> - Нельзя переместить объект «[OBJECT_NAME]» в позицию -[OBJ_POSITION] региона [REGION_NAME] по неизвестной причине. ([FAILURE_TYPE]) + <notification name="CMOWTF"> + Нельзя переместить объект «[O]» в позицию +[P] региона [R] по неизвестной причине. ([F]) </notification> <notification name="NoPermModifyObject"> У вас нет прав на изменение этого объекта diff --git a/indra/newview/skins/default/xui/ru/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/ru/panel_block_list_sidetray.xml index 70a1b25996..13a02fac2f 100644 --- a/indra/newview/skins/default/xui/ru/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/ru/panel_block_list_sidetray.xml @@ -7,5 +7,8 @@ <menu_button name="plus_btn" tool_tip="Выберите жителя или объект для блокировки"/> <button name="unblock_btn" tool_tip="Удалить объект или жителя из списка заблокированных"/> </panel> + <text name="block_limit"> + [COUNT] пунктов в вашем черном списке, разрешено не больше [LIMIT]. + </text> <block_list name="blocked" tool_tip="Список заблокированных жителей"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_flickr_photo.xml b/indra/newview/skins/default/xui/ru/panel_flickr_photo.xml index 9dd68699ca..f4cff55db2 100644 --- a/indra/newview/skins/default/xui/ru/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/ru/panel_flickr_photo.xml @@ -29,6 +29,6 @@ <combo_box.item label="Умеренный рейтинг Flickr" name="ModerateRating"/> <combo_box.item label="Ограниченный рейтинг Flickr" name="RestrictedRating"/> </combo_box> - <button label="Передать" name="post_photo_btn"/> + <button label="Поделиться" name="post_photo_btn"/> <button label="Отмена" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/panel_notify_textbox.xml b/indra/newview/skins/default/xui/ru/panel_notify_textbox.xml index 1ac88a01b3..eb8296904d 100644 --- a/indra/newview/skins/default/xui/ru/panel_notify_textbox.xml +++ b/indra/newview/skins/default/xui/ru/panel_notify_textbox.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="instant_message" name="panel_notify_textbox"> - <string name="message_max_lines_count" value="7"/> - <panel label="info_panel" name="info_panel"> + <string name="message_max_lines_count" value="14"/> + <panel label="info_panel" name="info_panel"/> + <panel label="info_panel" name="textbox_panel"> <text_editor name="message" value="сообщение"/> </panel> <panel label="control_panel" name="control_panel"> diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml index 200241bd4d..4524fb4d43 100644 --- a/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml @@ -24,12 +24,14 @@ <text name="BetterText"> Качественней </text> + <check_box initial_value="true" label="Атмосферные шейдеры" name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="Расширенная модель освещения" name="UseLightShaders"/> <slider label="Максимальная сложность аватара:" name="IndirectMaxComplexity" tool_tip="Указывает расстояние, начиная с которого визуально сложный аватар рисуется как мармеладный мишка"/> <text name="IndirectMaxComplexityText"> 0 </text> - <check_box initial_value="true" label="Атмосферные шейдеры" name="WindLightUseAtmosShaders"/> - <check_box initial_value="true" label="Расширенная модель освещения" name="UseLightShaders"/> + <check_box initial_value="true" label="Всегда рисовать друзей" name="AlwaysRenderFriends"/> + <button label="Исключения..." name="RenderExceptionsButton"/> <button label="Сохранить настройки как пресет..." name="PrefSaveButton"/> <button label="Загрузить пресет..." name="PrefLoadButton"/> min_val="0,125" diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/ru/panel_preferences_uploads.xml new file mode 100644 index 0000000000..487c92bd2a --- /dev/null +++ b/indra/newview/skins/default/xui/ru/panel_preferences_uploads.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="Загрузки" name="uploads"> + <text name="title"> + Текущие папки назначения для передачи + </text> + <text name="title_models"> + Изображения + </text> + <text name="title_sounds"> + Звуки + </text> + <text name="title_animation"> + Анимация + </text> + <text name="upload_help"> + Чтобы сменить папку назначения, щелкните ее в инвентаре правой кнопкой мыши и выберите + "Использовать по умолчанию для" + </text> +</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml index 9a5bbf3bac..7ba03ee0c9 100644 --- a/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml @@ -2,9 +2,9 @@ <panel name="panel_snapshot_options"> <button label="Сохранить на диске" name="save_to_computer_btn"/> <button label="Сохранить в инвентаре (L$[AMOUNT])" name="save_to_inventory_btn"/> - <button label="Загрузить в профиль" name="save_to_profile_btn"/> - <button label="Загрузить в Facebook" name="send_to_facebook_btn"/> - <button label="Загрузить в Twitter" name="send_to_twitter_btn"/> - <button label="Загрузить на Flickr" name="send_to_flickr_btn"/> + <button label="Поделиться в профиле" name="save_to_profile_btn"/> + <button label="Поделиться в Facebook" name="send_to_facebook_btn"/> + <button label="Поделиться в Twitter" name="send_to_twitter_btn"/> + <button label="Поделиться в Flickr" name="send_to_flickr_btn"/> <button label="Отправить по почте" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml index 7a003b536a..c8ab07bd43 100644 --- a/indra/newview/skins/default/xui/ru/strings.xml +++ b/indra/newview/skins/default/xui/ru/strings.xml @@ -1488,7 +1488,8 @@ support@secondlife.com. [[MARKETPLACE_CREATE_STORE_URL] Магазин] возвращает ошибки. </string> <string name="InventoryMarketplaceError"> - Это бета-версия функции. Если вы хотите участвовать в ее тестировании, заполните эту [http://goo.gl/forms/FCQ7UXkakz форму Google]. + Ошибка при открытии списков товаров торгового центра. +Если данное сообщение повторится, обратитесь за помощью в службу поддержки Second Life на странице http://support.secondlife.com </string> <string name="InventoryMarketplaceListingsNoItemsTitle"> Папка списков товаров торгового центра пуста. @@ -4438,7 +4439,10 @@ support@secondlife.com. Конференция с жителем [AGENT_NAME] </string> <string name="inventory_item_offered-im"> - Предложено пополнить инвентарь + Предложен предмет инвентаря «[ITEM_NAME]» + </string> + <string name="inventory_folder_offered-im"> + Предложена папка инвентаря «[ITEM_NAME]» </string> <string name="share_alert"> Перетаскивайте вещи из инвентаря сюда @@ -4525,7 +4529,10 @@ support@secondlife.com. Задано положение дома. </string> <string name="voice_morphing_url"> - http://secondlife.com/landing/voicemorphing + https://secondlife.com/destination/voice-island + </string> + <string name="premium_voice_morphing_url"> + https://secondlife.com/destination/voice-morphing-premium </string> <string name="paid_you_ldollars"> Житель [NAME] заплатил вам L$[AMOUNT] за [REASON]. @@ -4896,7 +4903,7 @@ support@secondlife.com. <string name="server_is_down"> Несмотря на наши усилия, что-то неожиданно пошло не так. - Ознакомьтесь с описанием известных проблем в работе этой службы на сайте status.secondlifegrid.net. +Ознакомьтесь с описанием известных проблем в работе этой службы на сайте http://status.secondlifegrid.net. Если проблемы продолжаются, то проверьте подключение к сети и настройки брандмауэра. </string> <string name="dateTimeWeekdaysNames"> @@ -5369,6 +5376,9 @@ support@secondlife.com. <string name="Command_Gestures_Label"> Жесты </string> + <string name="Command_Grid_Status_Label"> + Состояние сетки + </string> <string name="Command_HowTo_Label"> Инструкции </string> @@ -5462,6 +5472,9 @@ support@secondlife.com. <string name="Command_Gestures_Tooltip"> Жесты для аватара </string> + <string name="Command_Grid_Status_Tooltip"> + Показать текущее состояние сетки + </string> <string name="Command_HowTo_Tooltip"> Выполнение типичных задач </string> @@ -5684,6 +5697,9 @@ support@secondlife.com. <string name="loading_chat_logs"> Загрузка... </string> + <string name="na"> + н/д + </string> <string name="preset_combo_label"> -Пустой список- </string> diff --git a/indra/newview/skins/default/xui/tr/floater_about_land.xml b/indra/newview/skins/default/xui/tr/floater_about_land.xml index e4d38361ca..842fc3a6d8 100644 --- a/indra/newview/skins/default/xui/tr/floater_about_land.xml +++ b/indra/newview/skins/default/xui/tr/floater_about_land.xml @@ -446,7 +446,7 @@ Sadece büyük parseller aramada görünür. <spinner label="Erişim saatleri:" name="HoursSpin"/> <panel name="Allowed_layout_panel"> <text label="Her Zaman İzin Ver" name="AllowedText"> - İzin Verilen Sakinler ([COUNT]) + İzin Verilen Sakinler ([COUNT], maks. [MAX]) </text> <name_list name="AccessList" tool_tip="([LISTED] listeli, [MAX] maksimum)"/> <button label="Ekle" name="add_allowed"/> @@ -454,7 +454,7 @@ Sadece büyük parseller aramada görünür. </panel> <panel name="Banned_layout_panel"> <text label="Yasakla" name="BanCheck"> - Yasaklı Sakinler ([COUNT]) + Engellenmiş Sakinler ([COUNT], maks. [MAX]) </text> <name_list name="BannedList" tool_tip="([LISTED] listeli, [MAX] maksimum)"/> <button label="Ekle" name="add_banned"/> diff --git a/indra/newview/skins/default/xui/tr/floater_avatar_render_settings.xml b/indra/newview/skins/default/xui/tr/floater_avatar_render_settings.xml new file mode 100644 index 0000000000..3f16d73c23 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/floater_avatar_render_settings.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_avatar_render_settings" title="AVATAR İŞLEME AYARLARI"> + <string name="av_never_render" value="Asla"/> + <string name="av_always_render" value="Her Zaman"/> + <filter_editor label="Kişileri Filtrele" name="people_filter_input"/> + <menu_button name="plus_btn" tool_tip="Seçilen kişi üzerinde eylemler"/> + <name_list name="render_settings_list"> + <name_list.columns label="Ad" name="name"/> + <name_list.columns label="İşleme ayarı" name="setting"/> + </name_list> +</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_flickr.xml b/indra/newview/skins/default/xui/tr/floater_flickr.xml index 4fa6770673..f559808f44 100644 --- a/indra/newview/skins/default/xui/tr/floater_flickr.xml +++ b/indra/newview/skins/default/xui/tr/floater_flickr.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_flickr" title="FLICKR'A YÜKLE"> +<floater name="floater_flickr" title="FLICKR'DA PAYLAŞ"> <panel name="background"> <tab_container name="tabs"> <panel label="FOTOĞRAF" name="panel_flickr_photo"/> diff --git a/indra/newview/skins/default/xui/tr/floater_preferences.xml b/indra/newview/skins/default/xui/tr/floater_preferences.xml index edb3c19b81..679b018247 100644 --- a/indra/newview/skins/default/xui/tr/floater_preferences.xml +++ b/indra/newview/skins/default/xui/tr/floater_preferences.xml @@ -13,5 +13,6 @@ <panel label="Gizlilik" name="im"/> <panel label="Ayarlar" name="input"/> <panel label="Gelişmiş" name="advanced1"/> + <panel label="Karşıya Yüklemeler" name="uploads"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/tr/floater_tos.xml b/indra/newview/skins/default/xui/tr/floater_tos.xml index 87beb5476f..04096ba35f 100644 --- a/indra/newview/skins/default/xui/tr/floater_tos.xml +++ b/indra/newview/skins/default/xui/tr/floater_tos.xml @@ -13,6 +13,6 @@ Aşağıdaki Hizmet Koşullarını ve Gizlilik Politikasını dikkatle okuyun. [SECOND_LIFE]'ta oturum açmaya devam etmek için anlaşmayı kabul etmelisiniz. </text> <text name="external_tos_required"> - Devam etmeden önce my.secondlife.com adresine gitmeniz ve oturum açarak Hizmet Şartlarını kabul etmeniz gerekiyor. Teşekkürler! + Devam edebilmeniz için https://my.secondlife.com adresine gidip oturum açarak Hizmet Sözleşmesi'ni kabul etmeniz gerekir. Teşekkürler! </text> </floater> diff --git a/indra/newview/skins/default/xui/tr/menu_attachment_other.xml b/indra/newview/skins/default/xui/tr/menu_attachment_other.xml index cef661dbf4..a68abf53c8 100644 --- a/indra/newview/skins/default/xui/tr/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/tr/menu_attachment_other.xml @@ -17,8 +17,10 @@ <menu_item_call label="Yakınlaştır" name="Zoom In"/> <menu_item_call label="Öde" name="Pay..."/> <menu_item_call label="Nesne Profili" name="Object Inspect"/> - <menu_item_check label="Normal Olarak İşle" name="RenderNormally"/> - <menu_item_check label="İşleme" name="DoNotRender"/> - <menu_item_check label="Tam Olarak İşle" name="AlwaysRenderFully"/> + <context_menu label="Avatarı İşle" name="Render Avatar"> + <menu_item_check label="Varsayılan" name="RenderNormally"/> + <menu_item_check label="Her Zaman" name="AlwaysRenderFully"/> + <menu_item_check label="Asla" name="DoNotRender"/> + </context_menu> <menu_item_call label="Parçacık Sahibini Engelle" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/tr/menu_avatar_other.xml b/indra/newview/skins/default/xui/tr/menu_avatar_other.xml index 87b0d3b7eb..a616dc1dea 100644 --- a/indra/newview/skins/default/xui/tr/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/tr/menu_avatar_other.xml @@ -16,8 +16,10 @@ <menu_item_call label="XML Dökümünü Al" name="Dump XML"/> <menu_item_call label="Yakınlaştır" name="Zoom In"/> <menu_item_call label="Öde" name="Pay..."/> - <menu_item_check label="Normal Olarak İşle" name="RenderNormally"/> - <menu_item_check label="İşleme" name="DoNotRender"/> - <menu_item_check label="Tam Olarak İşle" name="AlwaysRenderFully"/> + <context_menu label="Avatarı İşle" name="Render Avatar"> + <menu_item_check label="Varsayılan" name="RenderNormally"/> + <menu_item_check label="Her Zaman" name="AlwaysRenderFully"/> + <menu_item_check label="Asla" name="DoNotRender"/> + </context_menu> <menu_item_call label="Parçacık Sahibini Engelle" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/tr/menu_avatar_rendering_settings.xml b/indra/newview/skins/default/xui/tr/menu_avatar_rendering_settings.xml new file mode 100644 index 0000000000..3a27fec53a --- /dev/null +++ b/indra/newview/skins/default/xui/tr/menu_avatar_rendering_settings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Settings"> + <menu_item_check label="Varsayılan" name="default"/> + <menu_item_check label="Her zaman işle" name="always_render"/> + <menu_item_check label="Asla işleme" name="never_render"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/tr/menu_avatar_rendering_settings_add.xml b/indra/newview/skins/default/xui/tr/menu_avatar_rendering_settings_add.xml new file mode 100644 index 0000000000..8379f22a68 --- /dev/null +++ b/indra/newview/skins/default/xui/tr/menu_avatar_rendering_settings_add.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="menu_settings_add.xml"> + <menu_item_call label="Her Zaman Bir Sakin Olarak İşle..." name="add_avatar_always_render"/> + <menu_item_call label="Asla Bir Sakin Olarak İşleme..." name="add_avatar_never_render"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/tr/menu_gesture_gear.xml b/indra/newview/skins/default/xui/tr/menu_gesture_gear.xml index cb9b678fdd..a0eab25829 100644 --- a/indra/newview/skins/default/xui/tr/menu_gesture_gear.xml +++ b/indra/newview/skins/default/xui/tr/menu_gesture_gear.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_gesture_gear"> - <menu_item_call label="Favorilere Ekle/Çıkar" name="activate"/> + <menu_item_call label="Seçilen jesti etkinleştir/devre dışı bırak" name="activate"/> <menu_item_call label="Kopyala" name="copy_gesture"/> <menu_item_call label="Yapıştır" name="paste"/> <menu_item_call label="UUID'yi Kopyala" name="copy_uuid"/> diff --git a/indra/newview/skins/default/xui/tr/menu_inventory.xml b/indra/newview/skins/default/xui/tr/menu_inventory.xml index 784e4d18a4..96dd4e1d1f 100644 --- a/indra/newview/skins/default/xui/tr/menu_inventory.xml +++ b/indra/newview/skins/default/xui/tr/menu_inventory.xml @@ -42,6 +42,12 @@ <menu_item_call label="Yeni Saç" name="New Hair"/> <menu_item_call label="Yeni Gözler" name="New Eyes"/> </menu> + <menu label="Şunun için varsayılan olarak kullan" name="upload_def"> + <menu_item_call label="Karşıya yüklenen görüntüler" name="Image uploads"/> + <menu_item_call label="Karşıya yüklenen sesler" name="Sound uploads"/> + <menu_item_call label="Karşıya yüklenen animasyonlar" name="Animation uploads"/> + <menu_item_call label="Karşıya yüklenen modeller" name="Model uploads"/> + </menu> <menu label="Türü Değiştir" name="Change Type"> <menu_item_call label="Varsayılan" name="Default"/> <menu_item_call label="Eldivenler" name="Gloves"/> @@ -60,6 +66,7 @@ <menu_item_call label="Mevcut Dış Görünümü Değiştir" name="Replace Outfit"/> <menu_item_call label="Mevcut Dış Görünüme Ekle" name="Add To Outfit"/> <menu_item_call label="Mevcut Dış Görünümden Kaldır" name="Remove From Outfit"/> + <menu_item_call label="Dış görünüm listesini panoya kopyala" name="Copy outfit list to clipboard"/> <menu_item_call label="Orijinali Bul" name="Find Original"/> <menu_item_call label="Öğeyi Temizle" name="Purge Item"/> <menu_item_call label="Öğeyi Geri Yükle" name="Restore Item"/> @@ -72,7 +79,6 @@ <menu_item_call label="Kopyala" name="Copy"/> <menu_item_call label="Yapıştır" name="Paste"/> <menu_item_call label="Bağlantı Olarak Yapıştır" name="Paste As Link"/> - <menu_item_call label="Sil" name="Remove Link"/> <menu_item_call label="Sil" name="Delete"/> <menu_item_call label="Sistem Klasörünü Sil" name="Delete System Folder"/> <menu_item_call label="Konferans Sohbeti Başlat" name="Conference Chat Folder"/> @@ -95,7 +101,6 @@ <menu_item_call label="Düzenle" name="Wearable Edit"/> <menu_item_call label="Ekle" name="Wearable Add"/> <menu_item_call label="Çıkar" name="Take Off"/> - <menu_item_call label="Satıcı Giden Kutusuna Kopyala" name="Merchant Copy"/> <menu_item_call label="Pazaryeri İlanlarına Kopyala" name="Marketplace Copy"/> <menu_item_call label="Pazaryeri İlanlarına Taşı" name="Marketplace Move"/> <menu_item_call label="--seçenek yok--" name="--no options--"/> diff --git a/indra/newview/skins/default/xui/tr/menu_login.xml b/indra/newview/skins/default/xui/tr/menu_login.xml index 60f81c3237..145fc74508 100644 --- a/indra/newview/skins/default/xui/tr/menu_login.xml +++ b/indra/newview/skins/default/xui/tr/menu_login.xml @@ -2,6 +2,7 @@ <menu_bar name="Login Menu"> <menu label="Ben" name="File"> <menu_item_call label="Tercihler..." name="Preferences..."/> + <menu_item_check label="Izgara Seçiciyi Göster" name="Show Grid Picker"/> <menu_item_call label="[APP_NAME]'den Çık" name="Quit"/> </menu> <menu label="Yardım" name="Help"> @@ -33,7 +34,6 @@ <menu_item_check label="Hata" name="Error"/> <menu_item_check label="Hiçbiri" name="None"/> </menu> - <menu_item_check label="Izgara Seçiciyi Göster" name="Show Grid Picker"/> <menu_item_call label="Bildirimler Konsolunu Göster" name="Show Notifications Console"/> </menu> </menu_bar> 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 2bf1101b48..e9770a72b8 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 @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_blocked_gear"> <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="Nesne Seslerini Engelle" name="BlockObjectSounds"/> <menu_item_call label="Profil..." name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml index f55bb3fbad..ef001a8687 100644 --- a/indra/newview/skins/default/xui/tr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml @@ -42,6 +42,7 @@ <menu_item_check label="Ses şekillendirme yok" name="NoVoiceMorphing"/> <menu_item_check label="Önizleme..." name="Preview"/> <menu_item_call label="Abone ol..." name="Subscribe"/> + <menu_item_call label="Özel üye avantajı..." name="PremiumPerk"/> </menu> <menu_item_check label="Mimikler..." name="Gestures"/> <menu_item_check label="Arkadaşlar" name="My Friends"/> @@ -55,7 +56,8 @@ <menu_item_call label="Hedef Konumlar..." name="Destinations"/> <menu_item_check label="Dünya haritası" name="World Map"/> <menu_item_check label="Mini-harita" name="Mini-Map"/> - <menu_item_check label="Ara" name="Search"/> + <menu_item_call label="Etkinlikler" name="Events"/> + <menu_item_check label="Ara..." name="Search"/> <menu_item_call label="Ana konuma ışınlan" name="Teleport Home"/> <menu_item_call label="Ana konumu burası olarak seç" name="Set Home to Here"/> <menu_item_call label="Anlık Görüntü" name="Take Snapshot"/> @@ -126,8 +128,10 @@ <menu_item_call label="Kopya Al" name="Take Copy"/> <menu_item_call label="Nesne İçeriklerine Geri Kaydet" name="Save Object Back to Object Contents"/> <menu_item_call label="Nesneyi İade Et" name="Return Object back to Owner"/> + <menu_item_call label="Çoğalt" name="DuplicateObject"/> </menu> <menu label="Komut Dosyaları" name="Scripts"> + <menu_item_check label="Komut dosyası uyarıları/hataları..." name="Script debug"/> <menu_item_call label="Komut Dosyalarını Tekrar Derle (Mono)" name="Mono"/> <menu_item_call label="Komut Dosyalarını Tekrar Derle (LSL)" name="LSL"/> <menu_item_call label="Komut Dosyalarını Sıfırla" name="Reset Scripts"/> diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml index 0f222d49cc..5da8fa495b 100644 --- a/indra/newview/skins/default/xui/tr/notifications.xml +++ b/indra/newview/skins/default/xui/tr/notifications.xml @@ -144,8 +144,7 @@ Bir sistem veya ağ hatası nedeniyle Pazaryeri başlatılamadı. Daha sonra te <notification name="MerchantTransactionFailed"> Pazaryerinde yapılan işlem başarısız oldu. Hata kodu: - Neden: "[ERROR_REASON]" - [ERROR_DESCRIPTION] + [ERROR_REASON][ERROR_DESCRIPTION] <usetemplate name="okbutton" yestext="Tamam"/> </notification> <notification name="MerchantUnprocessableEntity"> @@ -762,6 +761,9 @@ Lütfen hiçbirinin kilitli olmadığından ve hepsine sahip olduğunuzdan emin <notification name="CannotLinkPermanent"> Nesneler bölge sınırları üzerinden bağlantılandırılamaz. </notification> + <notification name="CannotLinkAcrossRegions"> + Nesneler bölge sınırları üzerinden bağlantılandırılamaz. + </notification> <notification name="CannotLinkDifferentOwners"> Nesnelerin hepsinin sahibi aynı olmadığı için nesneler birbirine bağlanamıyor. @@ -1783,11 +1785,10 @@ Gruptan ayrılmak istiyor musunuz? <usetemplate name="okbutton" yestext="Tamam"/> </notification> <notification name="DoNotDisturbModeSet"> - Rahatsız Etme açık. Gelen iletişimlerle ilgili size bilgi verilmeyecek. + Rahatsız Etme işlevi etkin. Gelen mesajlar için bildirim almazsınız. -- Diğer sakinlere sizin Rahatsız Etmeyin yanıtı iletilecektir (Tercihler > Genel içerisinde ayarlanır). -- Işınlanma teklifleri reddedilecektir. -- Sesli aramalar reddedilecektir. +- Diğer sakinler sizin Rahatsız Etme yanıtınızı alır (Tercihler > Genel altında ayarlanır). +- Sesli aramalar reddedilir. <usetemplate ignoretext="Durumumu Rahatsız Etme moduna değiştiriyorum" name="okignore" yestext="Tamam"/> </notification> <notification name="JoinedTooManyGroupsMember"> @@ -2553,9 +2554,6 @@ Diğer kişilerin bu konuma kolayca erişmesini sağlamak için bu adrese bir we <notification name="Cancelled"> İptal Edildi </notification> - <notification name="CancelledSit"> - Oturma İptal Edildi - </notification> <notification name="CancelledAttach"> Takma İptal Edildi </notification> @@ -3883,26 +3881,26 @@ Lütfen bir dakika sonra tekrar deneyin. <notification name="AvatarEjectFailed"> Çıkarma başarılamadı çünkü bu parsel için yönetici iznine sahip değilsiniz. </notification> - <notification name="CantMoveObjectParcelFull"> - [REGION_NAME] bölgesinde '[OBJECT_NAME]' nesnesi [OBJ_POSITION] konumuna hareket ettirilemiyor çünkü parsel dolu. + <notification name="CMOParcelFull"> + "[O]" nesnesi [R] bölgesindeki [P] parseline taşınamıyor çünkü parsel dolu. </notification> - <notification name="CantMoveObjectParcelPerms"> - [REGION_NAME] bölgesinde '[OBJECT_NAME]' nesnesi [OBJ_POSITION] konumuna hareket ettirilemiyor çünkü bu parselde nesnelerinize izin verilmiyor. + <notification name="CMOParcelPerms"> + "[O]" nesnesi [R] bölgesindeki [P] parseline taşınamıyor çünkü bu parselde nesnelerinize izin verilmiyor. </notification> - <notification name="CantMoveObjectParcelResources"> - [REGION_NAME] bölgesinde '[OBJECT_NAME]' nesnesi [OBJ_POSITION] konumuna hareket ettirilemiyor, çünkü bu parselde bu nesne için yeterli kaynak yok. + <notification name="CMOParcelResources"> + "[O]" nesnesi [R] bölgesindeki [P] parseline taşınamıyor çünkü parselde bu nesne için yeterli kaynak yok. </notification> <notification name="NoParcelPermsNoObject"> Bu parsele erişiminiz olmadığı için kopyalama işlemi yapılamadı. </notification> - <notification name="CantMoveObjectRegionVersion"> - [REGION_NAME] bölgesinde '[OBJECT_NAME]' nesnesi [OBJ_POSITION] konumuna hareket ettirilemiyor çünkü bölgede çalıştırılan eski versiyon, bölge değiştirme üzerinden bu nesnenin alınmasını desteklemiyor. + <notification name="CMORegionVersion"> + "[O]" nesnesi [R] bölgesindeki [P] parseline taşınamıyor çünkü diğer bölge, bu nesnenin bölgeler arası geçişle alınmasını desteklemeyen daha eski bir sürüm çalıştırıyor. </notification> - <notification name="CantMoveObjectNavMesh"> - [REGION_NAME] bölgesinde '[OBJECT_NAME]' nesnesi [OBJ_POSITION] konumuna hareket ettirilemiyor çünkü navmesh'i bölge sınırları ötesinde değiştiremezsiniz. + <notification name="CMONavMesh"> + "[O]" nesnesi [R] bölgesindeki [P] parseline taşınamıyor çünkü bölge sınırları ötesindeki navigasyon örgüsünde değişiklik yapamazsınız. </notification> - <notification name="CantMoveObjectWTF"> - Bilinmeyen bir nedenden ötürü [REGION_NAME] bölgesinde '[OBJECT_NAME]' nesnesi [OBJ_POSITION] konumuna hareket ettirilemiyor. ([FAILURE_TYPE]) + <notification name="CMOWTF"> + Bilinmeyen bir nedenle, "[O]" nesnesi [R] bölgesindeki [P] parseline taşınamıyor. ([F]) </notification> <notification name="NoPermModifyObject"> Bu nesneyi değiştirme izniniz yok diff --git a/indra/newview/skins/default/xui/tr/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/tr/panel_block_list_sidetray.xml index 87b67e249e..0e98ae03d5 100644 --- a/indra/newview/skins/default/xui/tr/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/tr/panel_block_list_sidetray.xml @@ -7,5 +7,8 @@ <menu_button name="plus_btn" tool_tip="Engellenecek bir Sakin veya nesne seç"/> <button name="unblock_btn" tool_tip="Engelleme listesinden Sakini veya nesneyi kaldır"/> </panel> + <text name="block_limit"> + Engelleme listenizde [COUNT] giriş var ve limit [LIMIT]. + </text> <block_list name="blocked" tool_tip="Şu anda engellenmiş olan Sakinler listesi"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_flickr_photo.xml b/indra/newview/skins/default/xui/tr/panel_flickr_photo.xml index cab1b24621..c34f608e3c 100644 --- a/indra/newview/skins/default/xui/tr/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/tr/panel_flickr_photo.xml @@ -30,6 +30,6 @@ Birden çok kelime içeren etiketler için "" kullan <combo_box.item label="Orta Flickr seviyesi" name="ModerateRating"/> <combo_box.item label="Kısıtlı Flickr seviyesi" name="RestrictedRating"/> </combo_box> - <button label="Karşıya Yükle" name="post_photo_btn"/> + <button label="Paylaş" name="post_photo_btn"/> <button label="İptal" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_notify_textbox.xml b/indra/newview/skins/default/xui/tr/panel_notify_textbox.xml index b893da2a71..d499300de2 100644 --- a/indra/newview/skins/default/xui/tr/panel_notify_textbox.xml +++ b/indra/newview/skins/default/xui/tr/panel_notify_textbox.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="instant_message" name="panel_notify_textbox"> - <string name="message_max_lines_count" value="7"/> - <panel label="info_panel" name="info_panel"> + <string name="message_max_lines_count" value="14"/> + <panel label="info_panel" name="info_panel"/> + <panel label="info_panel" name="textbox_panel"> <text_editor name="message" value="ileti"/> </panel> <panel label="control_panel" name="control_panel"> diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml index 235a90a245..a5046a7699 100644 --- a/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml @@ -24,12 +24,14 @@ <text name="BetterText"> Daha iyi </text> + <check_box initial_value="true" label="Atmosferik gölgeleyiciler" name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="Gelişmiş Aydınlatma Modeli" name="UseLightShaders"/> <slider label="Avatarın Maksimum Karmaşıklığı:" name="IndirectMaxComplexity" tool_tip="Görsel olarak karmaşık bir avatarın ne zaman JellyDoll olarak çizileceğini belirler"/> <text name="IndirectMaxComplexityText"> 0 </text> - <check_box initial_value="true" label="Atmosferik gölgeleyiciler" name="WindLightUseAtmosShaders"/> - <check_box initial_value="true" label="Gelişmiş Aydınlatma Modeli" name="UseLightShaders"/> + <check_box initial_value="true" label="Arkadaşları Her Zaman İşle" name="AlwaysRenderFriends"/> + <button label="İstisnalar..." name="RenderExceptionsButton"/> <button label="Ayarları ön ayar olarak kaydet..." name="PrefSaveButton"/> <button label="Ön ayarı yükle..." name="PrefLoadButton"/> min_val="0,125" diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/tr/panel_preferences_uploads.xml new file mode 100644 index 0000000000..d60a11159d --- /dev/null +++ b/indra/newview/skins/default/xui/tr/panel_preferences_uploads.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="Karşıya Yüklemeler" name="uploads"> + <text name="title"> + Karşıya yüklemeler için mevcut hedef klasörler + </text> + <text name="title_models"> + Görüntüler + </text> + <text name="title_sounds"> + Sesler + </text> + <text name="title_animation"> + Animasyonlar + </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:" + </text> +</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml index db29e6908c..1b48bbeec2 100644 --- a/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml @@ -2,9 +2,9 @@ <panel name="panel_snapshot_options"> <button label="Diske Kaydet" name="save_to_computer_btn"/> <button label="Envantere Kaydet (L$[AMOUNT])" name="save_to_inventory_btn"/> - <button label="Profile Yükle" name="save_to_profile_btn"/> - <button label="Facebook'a Yükle" name="send_to_facebook_btn"/> - <button label="Twitter'a Yükle" name="send_to_twitter_btn"/> - <button label="Flickr'a Yükle" name="send_to_flickr_btn"/> + <button label="Profil Akışında Paylaş" name="save_to_profile_btn"/> + <button label="Facebook'ta Paylaş" name="send_to_facebook_btn"/> + <button label="Twitter'da Paylaş" name="send_to_twitter_btn"/> + <button label="Flickr'da Paylaş" name="send_to_flickr_btn"/> <button label="E-postayla Gönder" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml index 53b95d69dd..3064520b10 100644 --- a/indra/newview/skins/default/xui/tr/strings.xml +++ b/indra/newview/skins/default/xui/tr/strings.xml @@ -1488,7 +1488,8 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin. [[MARKETPLACE_CREATE_STORE_URL] Mağazası] hata döndürüyor. </string> <string name="InventoryMarketplaceError"> - Bu özellik şu anda Beta aşamasında. Katılmak istiyorsanız lütfen adınızı bu [http://goo.gl/forms/FCQ7UXkakz Google formuna] ekleyin. + Pazaryeri İlanları açılırken bir hata meydana geldi. +Bu mesaj size gelmeye devam ederse lütfen http://support.secondlife.com adresinden Second Life destek ekibine başvurun. </string> <string name="InventoryMarketplaceListingsNoItemsTitle"> Pazaryeri İlanları klasörünüz boş. @@ -4441,7 +4442,10 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun. [AGENT_NAME] ile konferans </string> <string name="inventory_item_offered-im"> - Teklif edilen envanter öğesi: + "[ITEM_NAME]" envanter öğesi sunuldu + </string> + <string name="inventory_folder_offered-im"> + "[ITEM_NAME]" envanter klasörü sunuldu </string> <string name="share_alert"> Envanterinizden buraya öğeler sürükleyin @@ -4528,7 +4532,10 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun. Ana konum ayarlandı. </string> <string name="voice_morphing_url"> - http://secondlife.com/landing/voicemorphing + https://secondlife.com/destination/voice-island + </string> + <string name="premium_voice_morphing_url"> + https://secondlife.com/destination/voice-morphing-premium </string> <string name="paid_you_ldollars"> [NAME] size [REASON] L$[AMOUNT] ödedi. @@ -4897,7 +4904,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun. <string name="server_is_down"> Tüm çabalarımıza rağmen beklenmeyen bir hata meydana geldi. - Hizmetle ilişkili bilinen bir sorun olup olmadığını görmek için lütfen status.secondlifegrid.net adresine bakın. +Hizmetle ilişkili bilinen bir sorun olup olmadığını görmek için lütfen http://status.secondlifegrid.net adresine bakın. Sorun yaşamaya devam ederseniz lütfen ağınızın ve güvenlik duvarınızın ayarlarına bakın. </string> <string name="dateTimeWeekdaysNames"> @@ -5370,6 +5377,9 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin. <string name="Command_Gestures_Label"> Mimikler </string> + <string name="Command_Grid_Status_Label"> + Ağ durumu + </string> <string name="Command_HowTo_Label"> Nasıl yapılır </string> @@ -5463,6 +5473,9 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin. <string name="Command_Gestures_Tooltip"> Avatarınız için mimikler </string> + <string name="Command_Grid_Status_Tooltip"> + Ağın mevcut durumunu göster + </string> <string name="Command_HowTo_Tooltip"> Genel görevleri nasıl yapacağınız </string> @@ -5685,6 +5698,9 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin. <string name="loading_chat_logs"> Yükleniyor... </string> + <string name="na"> + yok + </string> <string name="preset_combo_label"> -Boş liste- </string> diff --git a/indra/newview/skins/default/xui/zh/floater_about_land.xml b/indra/newview/skins/default/xui/zh/floater_about_land.xml index 489ea61c72..6c03f5304f 100644 --- a/indra/newview/skins/default/xui/zh/floater_about_land.xml +++ b/indra/newview/skins/default/xui/zh/floater_about_land.xml @@ -446,7 +446,7 @@ <spinner label="出入時間:" name="HoursSpin"/> <panel name="Allowed_layout_panel"> <text label="永遠允許" name="AllowedText"> - 允許的居民 ([COUNT]) + 允許的居民([COUNT],最多[MAX]) </text> <name_list name="AccessList" tool_tip="(已列入 [LISTED],最多可列 [MAX])"/> <button label="添加" name="add_allowed"/> @@ -454,7 +454,7 @@ </panel> <panel name="Banned_layout_panel"> <text label="禁止" name="BanCheck"> - 被封鎖的居民 ([COUNT]) + 封鎖的居民([COUNT],最多[MAX]) </text> <name_list name="BannedList" tool_tip="(已列入 [LISTED],最多可列 [MAX])"/> <button label="添加" name="add_banned"/> diff --git a/indra/newview/skins/default/xui/zh/floater_avatar_render_settings.xml b/indra/newview/skins/default/xui/zh/floater_avatar_render_settings.xml new file mode 100644 index 0000000000..2de8c5bc89 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/floater_avatar_render_settings.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_avatar_render_settings" title="化身呈像設定"> + <string name="av_never_render" value="絕不"/> + <string name="av_always_render" value="永遠"/> + <filter_editor label="過濾人員" name="people_filter_input"/> + <menu_button name="plus_btn" tool_tip="對選取的人採取的動作"/> + <name_list name="render_settings_list"> + <name_list.columns label="名稱" name="name"/> + <name_list.columns label="呈像設定" name="setting"/> + </name_list> +</floater> diff --git a/indra/newview/skins/default/xui/zh/floater_flickr.xml b/indra/newview/skins/default/xui/zh/floater_flickr.xml index b02d02c7bb..c4576baea5 100644 --- a/indra/newview/skins/default/xui/zh/floater_flickr.xml +++ b/indra/newview/skins/default/xui/zh/floater_flickr.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_flickr" title="上傳到 FLICKR"> +<floater name="floater_flickr" title="分享到FLICKR"> <panel name="background"> <tab_container name="tabs"> <panel label="相片" name="panel_flickr_photo"/> diff --git a/indra/newview/skins/default/xui/zh/floater_preferences.xml b/indra/newview/skins/default/xui/zh/floater_preferences.xml index b0a27e8c1f..c5b078f3c7 100644 --- a/indra/newview/skins/default/xui/zh/floater_preferences.xml +++ b/indra/newview/skins/default/xui/zh/floater_preferences.xml @@ -13,5 +13,6 @@ <panel label="隱私" name="im"/> <panel label="設定" name="input"/> <panel label="進階" name="advanced1"/> + <panel label="上傳內容" name="uploads"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/zh/floater_tos.xml b/indra/newview/skins/default/xui/zh/floater_tos.xml index c86cc3057d..92e48e72b8 100644 --- a/indra/newview/skins/default/xui/zh/floater_tos.xml +++ b/indra/newview/skins/default/xui/zh/floater_tos.xml @@ -13,6 +13,6 @@ 請仔細閱讀以下服務條款及隱私政策。 繼續登入 [SECOND_LIFE] 前,你必須同意條款。 </text> <text name="external_tos_required"> - 你需先登入 my.secondlife.com 同意服務條款,才可繼續。 謝謝你! + 你需先登入 https://my.secondlife.com 同意服務條款,才可繼續。 謝謝你! </text> </floater> diff --git a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml index f104caeeaf..02bf12f37d 100644 --- a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml @@ -17,8 +17,10 @@ <menu_item_call label="放大" name="Zoom In"/> <menu_item_call label="支付" name="Pay..."/> <menu_item_call label="物件檔案" name="Object Inspect"/> - <menu_item_check label="正常呈像" name="RenderNormally"/> - <menu_item_check label="不要呈像" name="DoNotRender"/> - <menu_item_check label="完全呈像" name="AlwaysRenderFully"/> + <context_menu label="呈現化身" name="Render Avatar"> + <menu_item_check label="預設" name="RenderNormally"/> + <menu_item_check label="永遠" name="AlwaysRenderFully"/> + <menu_item_check label="絕不" name="DoNotRender"/> + </context_menu> <menu_item_call label="封鎖粒子所有人" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml index 2e9ef8bcf1..bc2a8c311b 100644 --- a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml @@ -16,8 +16,10 @@ <menu_item_call label="傾印 XML" name="Dump XML"/> <menu_item_call label="放大" name="Zoom In"/> <menu_item_call label="支付" name="Pay..."/> - <menu_item_check label="正常呈像" name="RenderNormally"/> - <menu_item_check label="不要呈像" name="DoNotRender"/> - <menu_item_check label="完全呈像" name="AlwaysRenderFully"/> + <context_menu label="呈現化身" name="Render Avatar"> + <menu_item_check label="預設" name="RenderNormally"/> + <menu_item_check label="永遠" name="AlwaysRenderFully"/> + <menu_item_check label="絕不" name="DoNotRender"/> + </context_menu> <menu_item_call label="封鎖粒子所有人" name="Mute Particle"/> </context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_rendering_settings.xml b/indra/newview/skins/default/xui/zh/menu_avatar_rendering_settings.xml new file mode 100644 index 0000000000..18c33e1c39 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/menu_avatar_rendering_settings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Settings"> + <menu_item_check label="預設" name="default"/> + <menu_item_check label="總是呈現" name="always_render"/> + <menu_item_check label="絕不呈現" name="never_render"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_rendering_settings_add.xml b/indra/newview/skins/default/xui/zh/menu_avatar_rendering_settings_add.xml new file mode 100644 index 0000000000..98c3f27abb --- /dev/null +++ b/indra/newview/skins/default/xui/zh/menu_avatar_rendering_settings_add.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<toggleable_menu name="menu_settings_add.xml"> + <menu_item_call label="永遠呈現居民…" name="add_avatar_always_render"/> + <menu_item_call label="永不呈現居民…" name="add_avatar_never_render"/> +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml b/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml index 5a38197e4c..21263842b8 100644 --- a/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml +++ b/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_gesture_gear"> - <menu_item_call label="由我的最愛中 添加/移除" name="activate"/> + <menu_item_call label="啟動/停止所選姿勢" name="activate"/> <menu_item_call label="恚庨" name="copy_gesture"/> <menu_item_call label="貼上" name="paste"/> <menu_item_call label="覆製 UUID" name="copy_uuid"/> diff --git a/indra/newview/skins/default/xui/zh/menu_inventory.xml b/indra/newview/skins/default/xui/zh/menu_inventory.xml index b346e82b77..f17761fdfc 100644 --- a/indra/newview/skins/default/xui/zh/menu_inventory.xml +++ b/indra/newview/skins/default/xui/zh/menu_inventory.xml @@ -42,6 +42,12 @@ <menu_item_call label="新頭髮" name="New Hair"/> <menu_item_call label="新眼睛" name="New Eyes"/> </menu> + <menu label="作這一用途的預設值:" name="upload_def"> + <menu_item_call label="圖像上傳" name="Image uploads"/> + <menu_item_call label="聲音上傳" name="Sound uploads"/> + <menu_item_call label="動作上傳" name="Animation uploads"/> + <menu_item_call label="模型上傳" name="Model uploads"/> + </menu> <menu label="變更類型" name="Change Type"> <menu_item_call label="預設" name="Default"/> <menu_item_call label="手套" name="Gloves"/> @@ -60,6 +66,7 @@ <menu_item_call label="取代目前的裝扮" name="Replace Outfit"/> <menu_item_call label="添加到目前裝扮" name="Add To Outfit"/> <menu_item_call label="由目前的裝扮移除" name="Remove From Outfit"/> + <menu_item_call label="複製裝扮清單到剪貼簿" name="Copy outfit list to clipboard"/> <menu_item_call label="尋找原件" name="Find Original"/> <menu_item_call label="清空物品" name="Purge Item"/> <menu_item_call label="還原物品" name="Restore Item"/> @@ -72,7 +79,6 @@ <menu_item_call label="恚庨" name="Copy"/> <menu_item_call label="貼上" name="Paste"/> <menu_item_call label="以連結格式貼上" name="Paste As Link"/> - <menu_item_call label="刪除" name="Remove Link"/> <menu_item_call label="刪除" name="Delete"/> <menu_item_call label="刪除系統資料夾" name="Delete System Folder"/> <menu_item_call label="發起多方通話" name="Conference Chat Folder"/> @@ -95,7 +101,6 @@ <menu_item_call label="編輯" name="Wearable Edit"/> <menu_item_call label="添加" name="Wearable Add"/> <menu_item_call label="脫下" name="Take Off"/> - <menu_item_call label="複製到商家發件匣" name="Merchant Copy"/> <menu_item_call label="複製到 Marketplace 刊登" name="Marketplace Copy"/> <menu_item_call label="移到 Marketplace 刊登" name="Marketplace Move"/> <menu_item_call label="-- 無選項 --" name="--no options--"/> diff --git a/indra/newview/skins/default/xui/zh/menu_login.xml b/indra/newview/skins/default/xui/zh/menu_login.xml index 8dd89db7ba..e3f6ca2690 100644 --- a/indra/newview/skins/default/xui/zh/menu_login.xml +++ b/indra/newview/skins/default/xui/zh/menu_login.xml @@ -2,6 +2,7 @@ <menu_bar name="Login Menu"> <menu label="我自己" name="File"> <menu_item_call label="偏好設定…" name="Preferences..."/> + <menu_item_check label="顯示格線挑選器" name="Show Grid Picker"/> <menu_item_call label="退出 [APP_NAME]" name="Quit"/> </menu> <menu label="幫助" name="Help"> @@ -33,7 +34,6 @@ <menu_item_check label="錯誤" name="Error"/> <menu_item_check label="無" name="None"/> </menu> - <menu_item_check label="顯示網格挑選器" name="Show Grid Picker"/> <menu_item_call label="顯示通知控制台" name="Show Notifications Console"/> </menu> </menu_bar> 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 9a2a3c403d..8af35457af 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 @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="menu_blocked_gear"> <menu_item_call label="解除封鎖" name="unblock"/> + <menu_item_check label="禁止語音" name="BlockVoice"/> + <menu_item_check label="禁止文字" name="MuteText"/> + <menu_item_check label="禁止物件聲音" name="BlockObjectSounds"/> <menu_item_call label="檔案..." name="profile"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml index 3868646050..a58e1bb0fa 100644 --- a/indra/newview/skins/default/xui/zh/menu_viewer.xml +++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml @@ -42,6 +42,7 @@ <menu_item_check label="沒有變聲效果" name="NoVoiceMorphing"/> <menu_item_check label="預覽……" name="Preview"/> <menu_item_call label="訂閱……" name="Subscribe"/> + <menu_item_call label="付費會員獨享…" name="PremiumPerk"/> </menu> <menu_item_check label="姿勢…" name="Gestures"/> <menu_item_check label="朋友" name="My Friends"/> @@ -55,7 +56,8 @@ <menu_item_call label="目的地…" name="Destinations"/> <menu_item_check label="世界地圖" name="World Map"/> <menu_item_check label="迷你地圖" name="Mini-Map"/> - <menu_item_check label="搜尋" name="Search"/> + <menu_item_call label="活動" name="Events"/> + <menu_item_check label="搜尋…" name="Search"/> <menu_item_call label="瞬間傳送回家" name="Teleport Home"/> <menu_item_call label="把這裡設為我的家" name="Set Home to Here"/> <menu_item_call label="快照" name="Take Snapshot"/> @@ -126,8 +128,10 @@ <menu_item_call label="取得副本" name="Take Copy"/> <menu_item_call label="回存到物件內容" name="Save Object Back to Object Contents"/> <menu_item_call label="退回物件" name="Return Object back to Owner"/> + <menu_item_call label="複製" name="DuplicateObject"/> </menu> <menu label="腳本" name="Scripts"> + <menu_item_check label="腳本警告/錯誤…" name="Script debug"/> <menu_item_call label="重新編譯腳本(Mono)" name="Mono"/> <menu_item_call label="重新編譯腳本(LSL)" name="LSL"/> <menu_item_call label="重設腳本" name="Reset Scripts"/> diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml index 5c794afd65..74fdfe6ca0 100644 --- a/indra/newview/skins/default/xui/zh/notifications.xml +++ b/indra/newview/skins/default/xui/zh/notifications.xml @@ -142,10 +142,9 @@ <usetemplate name="okbutton" yestext="確定"/> </notification> <notification name="MerchantTransactionFailed"> - 和 Marketplace 進行的交易發生如下錯誤: + 和Marketplace進行交易發生如下錯誤: - 原因:'[ERROR_REASON]' - [ERROR_DESCRIPTION] + [ERROR_REASON][ERROR_DESCRIPTION] <usetemplate name="okbutton" yestext="確定"/> </notification> <notification name="MerchantUnprocessableEntity"> @@ -762,6 +761,9 @@ <notification name="CannotLinkPermanent"> 物件無法跨越地區界限進行聯結。 </notification> + <notification name="CannotLinkAcrossRegions"> + 物件無法跨越地區界限進行聯結。 + </notification> <notification name="CannotLinkDifferentOwners"> 無法聯結;有些物件的所有人不同。 @@ -1776,7 +1778,6 @@ SHA1 指紋:[MD5_DIGEST] 「請勿打擾」模式目前是開啟狀態。 你將不會收到任何發給你的訊息通知。 - 其他居民將收到你的「請勿打擾」回應(回應內容設於「偏好設定 > 一般設定」)。 -- 所有瞬間傳送的邀請都將被婉拒。 - 所有語音來電都將拒絕接聽。 <usetemplate ignoretext="我變更我的狀態為「請勿打擾」模式" name="okignore" yestext="確定"/> </notification> @@ -2544,9 +2545,6 @@ SHA1 指紋:[MD5_DIGEST] <notification name="Cancelled"> 已取消 </notification> - <notification name="CancelledSit"> - 取消坐下 - </notification> <notification name="CancelledAttach"> 取消貼上 </notification> @@ -3874,32 +3872,26 @@ SHA1 指紋:[MD5_DIGEST] <notification name="AvatarEjectFailed"> 踢出失敗,因為你在該地段沒有管理員權限。 </notification> - <notification name="CantMoveObjectParcelFull"> - 無法移動 '[OBJECT_NAME]' 物件到 -地區 [REGION_NAME] 的 [OBJ_POSITION],因為該目標地段已滿載。 + <notification name="CMOParcelFull"> + 無法在[R]區域將'[O]'物件移到[P],因為此地段容量已滿。 </notification> - <notification name="CantMoveObjectParcelPerms"> - 無法移動 '[OBJECT_NAME]' 物件到 -地區 [REGION_NAME] 的 [OBJ_POSITION],因為此地段不允許你的物件。 + <notification name="CMOParcelPerms"> + 無法在[R]區域將'[O]'物件移到[P],因為此地段裡不允許有你的物件。 </notification> - <notification name="CantMoveObjectParcelResources"> - 無法移動 '[OBJECT_NAME]' 物件到 - [REGION_NAME] 地區的 [OBJ_POSITION],因為此地段資源不足容納此物件。 + <notification name="CMOParcelResources"> + 無法在[R]區域將'[O]'物件移到[P],因為此地段裡這一物件的資源不足。 </notification> <notification name="NoParcelPermsNoObject"> 複製失敗,因爲你無權出入該地段。 </notification> - <notification name="CantMoveObjectRegionVersion"> - 無法移動 '[OBJECT_NAME]' 物件到 - [REGION_NAME] 地區的 [OBJ_POSITION],因為該地區所執行的軟體版本過舊,不支援跨地區接受這個物件。 + <notification name="CMORegionVersion"> + 無法在[R]區域將'[O]'物件移到[P],因為該地區所執行的軟體版本過舊,不支援跨地區接受這個物件。 </notification> - <notification name="CantMoveObjectNavMesh"> - 無法移動 '[OBJECT_NAME]' 物件到 -地區 [REGION_NAME] 的 [OBJ_POSITION],因為你不得修改跨越地區界限的導航網面。 + <notification name="CMONavMesh"> + 無法在[R]區域將'[O]'物件移到[P],因為你不得修改位在不同區域範圍的導航網面。 </notification> - <notification name="CantMoveObjectWTF"> - 無法移動 '[OBJECT_NAME]' 物件到 -地區 [REGION_NAME] 的 [OBJ_POSITION],原因不明。 ([FAILURE_TYPE]) + <notification name="CMOWTF"> + 無法在[R]區域將'[O]'物件移到[P],問題原因不明。 ([F]) </notification> <notification name="NoPermModifyObject"> 你無權變更該物件 diff --git a/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml index 9f59bb32f8..ed475a91f4 100644 --- a/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml @@ -7,5 +7,8 @@ <menu_button name="plus_btn" tool_tip="挑選一位居民或物件,加以封鎖"/> <button name="unblock_btn" tool_tip="將居民或物件由封鎖清單中移除"/> </panel> + <text name="block_limit"> + 封鎖名單目前有[COUNT]名,上限為[LIMIT]。 + </text> <block_list name="blocked" tool_tip="目前封鎖的居民清單"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_flickr_photo.xml b/indra/newview/skins/default/xui/zh/panel_flickr_photo.xml index ece239a29f..928fd4c640 100644 --- a/indra/newview/skins/default/xui/zh/panel_flickr_photo.xml +++ b/indra/newview/skins/default/xui/zh/panel_flickr_photo.xml @@ -30,6 +30,6 @@ <combo_box.item label="適中級 Flickr 內容" name="ModerateRating"/> <combo_box.item label="限制級 Flickr 內容" name="RestrictedRating"/> </combo_box> - <button label="上傳" name="post_photo_btn"/> + <button label="分享" name="post_photo_btn"/> <button label="取消" name="cancel_photo_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_notify_textbox.xml b/indra/newview/skins/default/xui/zh/panel_notify_textbox.xml index 01a8210338..2ec2a05c8c 100644 --- a/indra/newview/skins/default/xui/zh/panel_notify_textbox.xml +++ b/indra/newview/skins/default/xui/zh/panel_notify_textbox.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="即時訊息" name="panel_notify_textbox"> - <string name="message_max_lines_count" value="7"/> - <panel label="info_panel" name="info_panel"> + <string name="message_max_lines_count" value="14"/> + <panel label="info_panel" name="info_panel"/> + <panel label="info_panel" name="textbox_panel"> <text_editor name="message" value="訊息"/> </panel> <panel label="control_panel" name="control_panel"> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml index 4eef624910..21e958b13a 100644 --- a/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml @@ -24,12 +24,14 @@ <text name="BetterText"> 最佳 </text> + <check_box initial_value="true" label="大氣著色" name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="進階照明模型" name="UseLightShaders"/> <slider label="化身最大複雜度:" name="IndirectMaxComplexity" tool_tip="控制在何時機下讓複雜化身呈像為「JellyDoll」"/> <text name="IndirectMaxComplexityText"> 0 </text> - <check_box initial_value="true" label="大氣著色" name="WindLightUseAtmosShaders"/> - <check_box initial_value="true" label="進階照明模型" name="UseLightShaders"/> + <check_box initial_value="true" label="永遠呈現朋友" name="AlwaysRenderFriends"/> + <button label="例外…" name="RenderExceptionsButton"/> <button label="將設定存為預設值 …" name="PrefSaveButton"/> <button label="載入預設..." name="PrefLoadButton"/> min_val="0.125" diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/zh/panel_preferences_uploads.xml new file mode 100644 index 0000000000..b34b4109d8 --- /dev/null +++ b/indra/newview/skins/default/xui/zh/panel_preferences_uploads.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<panel label="上傳內容" name="uploads"> + <text name="title"> + 目前的上傳目的資料夾 + </text> + <text name="title_models"> + 圖像 + </text> + <text name="title_sounds"> + 聲音 + </text> + <text name="title_animation"> + 動作 + </text> + <text name="upload_help"> + 要變更目的資料夾,請在收納區用滑鼠右鍵按一下新的資料夾並選擇 + 「用作預設值」 + </text> +</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml b/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml index a5a1cbfb51..d7c65bb25e 100644 --- a/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml @@ -2,9 +2,9 @@ <panel name="panel_snapshot_options"> <button label="儲存到硬碟" name="save_to_computer_btn"/> <button label="儲存到收納區(L$[AMOUNT])" name="save_to_inventory_btn"/> - <button label="上傳到簡覽" name="save_to_profile_btn"/> - <button label="上傳到臉書" name="send_to_facebook_btn"/> - <button label="上傳到推特" name="send_to_twitter_btn"/> - <button label="上傳到 Flickr" name="send_to_flickr_btn"/> + <button label="分享至檔案訊息發佈" name="save_to_profile_btn"/> + <button label="分享到臉書" name="send_to_facebook_btn"/> + <button label="分享到推特" name="send_to_twitter_btn"/> + <button label="分享到Flickr" name="send_to_flickr_btn"/> <button label="用電郵傳送" name="save_to_email_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml index 51a108126b..7490c01cc1 100644 --- a/indra/newview/skins/default/xui/zh/strings.xml +++ b/indra/newview/skins/default/xui/zh/strings.xml @@ -1483,7 +1483,8 @@ http://secondlife.com/viewer-access-faq [[MARKETPLACE_CREATE_STORE_URL] 購物市集商店]正傳回錯誤。 </string> <string name="InventoryMarketplaceError"> - 這功能尚在 Beta 測試階段。 如你想參與,請到這個[http://goo.gl/forms/FCQ7UXkakz Google 表單]填寫姓名。 + 開啟Marketplace刊登內容時發生錯誤。 +如果你繼續收到這個訊息,請到 http://support.secondlife.com 聯絡 Second Life 支援人員。 </string> <string name="InventoryMarketplaceListingsNoItemsTitle"> 你的 Marketplace 刊登資料夾是空的。 @@ -4436,7 +4437,10 @@ http://secondlife.com/viewer-access-faq 和 [AGENT_NAME] 多方通話 </string> <string name="inventory_item_offered-im"> - 收納區物品已發送 + 收納區物品'[ITEM_NAME]'已向人提供 + </string> + <string name="inventory_folder_offered-im"> + 收納區資料夾'[ITEM_NAME]'已向人提供 </string> <string name="share_alert"> 將收納區物品拖曳到這裡 @@ -4523,7 +4527,10 @@ http://secondlife.com/viewer-access-faq 我的家位置已定。 </string> <string name="voice_morphing_url"> - http://secondlife.com/landing/voicemorphing + https://secondlife.com/destination/voice-island + </string> + <string name="premium_voice_morphing_url"> + https://secondlife.com/destination/voice-morphing-premium </string> <string name="paid_you_ldollars"> [NAME] 支付你 L$[AMOUNT]([REASON])。 @@ -4894,8 +4901,8 @@ http://secondlife.com/viewer-access-faq <string name="server_is_down"> 儘管我們努力避免,還是發生意料外的錯誤。 - 請察訪 status.secondlifegrid.net 看是否發生了已知狀況。 - 如果文體繼續發生,請檢查你的網路和防火牆設定。 +請察訪 http://status.secondlifegrid.net 看是否發生了已知狀況。 + 如果問題繼續發生,請檢查你的網路和防火牆設定。 </string> <string name="dateTimeWeekdaysNames"> 星期日:星期一:星期二:星期三:星期四:星期五:星期六 @@ -5367,6 +5374,9 @@ http://secondlife.com/viewer-access-faq <string name="Command_Gestures_Label"> 姿勢 </string> + <string name="Command_Grid_Status_Label"> + 網格狀態 + </string> <string name="Command_HowTo_Label"> 簡易教學 </string> @@ -5460,6 +5470,9 @@ http://secondlife.com/viewer-access-faq <string name="Command_Gestures_Tooltip"> 你化身可用的姿勢 </string> + <string name="Command_Grid_Status_Tooltip"> + 顯示當前網格狀態 + </string> <string name="Command_HowTo_Tooltip"> 如何完成常用的動作 </string> @@ -5682,6 +5695,9 @@ http://secondlife.com/viewer-access-faq <string name="loading_chat_logs"> 載入中… </string> + <string name="na"> + 不適用 + </string> <string name="preset_combo_label"> -空白清單- </string> diff --git a/scripts/messages/message_template.msg b/scripts/messages/message_template.msg index fbbc385e5b..c56eaae6fe 100755 --- a/scripts/messages/message_template.msg +++ b/scripts/messages/message_template.msg @@ -4499,6 +4499,10 @@ version 2.0 AgeVerificationBlock Single { RegionDenyAgeUnverified BOOL } } + { + RegionAllowAccessBlock Single + { RegionAllowAccessOverride BOOL } + } } // ParcelPropertiesUpdate diff --git a/scripts/messages/message_template.msg.sha1 b/scripts/messages/message_template.msg.sha1 index 2c6489906c..5bc06ec042 100755 --- a/scripts/messages/message_template.msg.sha1 +++ b/scripts/messages/message_template.msg.sha1 @@ -1 +1 @@ -845459c1bb7fe8174fb493528fe2a214015f996d
\ No newline at end of file +337f351910b0c8821cb3d447bc6578516a043c80
\ No newline at end of file |