diff options
Diffstat (limited to 'indra')
686 files changed, 11878 insertions, 9416 deletions
diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp index 290206ee22..fc2190707a 100644 --- a/indra/llaudio/llaudiodecodemgr.cpp +++ b/indra/llaudio/llaudiodecodemgr.cpp @@ -230,19 +230,29 @@ BOOL LLVorbisDecodeState::initDecode() bool abort_decode = false; - if( vi->channels < 1 || vi->channels > LLVORBIS_CLIP_MAX_CHANNELS ) + if (vi) + { + if( vi->channels < 1 || vi->channels > LLVORBIS_CLIP_MAX_CHANNELS ) + { + abort_decode = true; + llwarns << "Bad channel count: " << vi->channels << llendl; + } + } + else // !vi { abort_decode = true; - llwarns << "Bad channel count: " << vi->channels << llendl; + llwarns << "No default bitstream found" << llendl; } - if( (size_t)sample_count > LLVORBIS_CLIP_REJECT_SAMPLES ) + if( (size_t)sample_count > LLVORBIS_CLIP_REJECT_SAMPLES || + (size_t)sample_count <= 0) { abort_decode = true; llwarns << "Illegal sample count: " << sample_count << llendl; } - if( size_guess > LLVORBIS_CLIP_REJECT_SIZE ) + if( size_guess > LLVORBIS_CLIP_REJECT_SIZE || + size_guess < 0) { abort_decode = true; llwarns << "Illegal sample size: " << size_guess << llendl; @@ -251,7 +261,11 @@ BOOL LLVorbisDecodeState::initDecode() if( abort_decode ) { llwarns << "Canceling initDecode. Bad asset: " << mUUID << llendl; - llwarns << "Bad asset encoded by: " << ov_comment(&mVF,-1)->vendor << llendl; + vorbis_comment* comment = ov_comment(&mVF,-1); + if (comment && comment->vendor) + { + llwarns << "Bad asset encoded by: " << comment->vendor << llendl; + } delete mInFilep; mInFilep = NULL; return FALSE; diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp index bce272082e..c3059b751c 100644 --- a/indra/llcharacter/llkeyframemotion.cpp +++ b/indra/llcharacter/llkeyframemotion.cpp @@ -1213,7 +1213,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) if (!dp.unpackS32(temp_priority, "base_priority")) { - llwarns << "can't read priority" << llendl; + llwarns << "can't read animation base_priority" << llendl; return FALSE; } mJointMotionList->mBasePriority = (LLJoint::JointPriority) temp_priority; @@ -1223,6 +1223,11 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) mJointMotionList->mBasePriority = (LLJoint::JointPriority)((int)LLJoint::ADDITIVE_PRIORITY-1); mJointMotionList->mMaxPriority = mJointMotionList->mBasePriority; } + else if (mJointMotionList->mBasePriority < LLJoint::USE_MOTION_PRIORITY) + { + llwarns << "bad animation base_priority " << mJointMotionList->mBasePriority << llendl; + return FALSE; + } //------------------------------------------------------------------------- // get duration @@ -1233,7 +1238,8 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) return FALSE; } - if (mJointMotionList->mDuration > MAX_ANIM_DURATION ) + if (mJointMotionList->mDuration > MAX_ANIM_DURATION || + !llfinite(mJointMotionList->mDuration)) { llwarns << "invalid animation duration" << llendl; return FALSE; @@ -1257,13 +1263,15 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) //------------------------------------------------------------------------- // get loop //------------------------------------------------------------------------- - if (!dp.unpackF32(mJointMotionList->mLoopInPoint, "loop_in_point")) + if (!dp.unpackF32(mJointMotionList->mLoopInPoint, "loop_in_point") || + !llfinite(mJointMotionList->mLoopInPoint)) { llwarns << "can't read loop point" << llendl; return FALSE; } - if (!dp.unpackF32(mJointMotionList->mLoopOutPoint, "loop_out_point")) + if (!dp.unpackF32(mJointMotionList->mLoopOutPoint, "loop_out_point") || + !llfinite(mJointMotionList->mLoopOutPoint)) { llwarns << "can't read loop point" << llendl; return FALSE; @@ -1278,13 +1286,15 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) //------------------------------------------------------------------------- // get easeIn and easeOut //------------------------------------------------------------------------- - if (!dp.unpackF32(mJointMotionList->mEaseInDuration, "ease_in_duration")) + if (!dp.unpackF32(mJointMotionList->mEaseInDuration, "ease_in_duration") || + !llfinite(mJointMotionList->mEaseInDuration)) { llwarns << "can't read easeIn" << llendl; return FALSE; } - if (!dp.unpackF32(mJointMotionList->mEaseOutDuration, "ease_out_duration")) + if (!dp.unpackF32(mJointMotionList->mEaseOutDuration, "ease_out_duration") || + !llfinite(mJointMotionList->mEaseOutDuration)) { llwarns << "can't read easeOut" << llendl; return FALSE; @@ -1374,7 +1384,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) LLPointer<LLJointState> joint_state = new LLJointState; mJointStates.push_back(joint_state); - joint_state->setJoint( joint ); + joint_state->setJoint( joint ); // note: can accept NULL joint_state->setUsage( 0 ); //--------------------------------------------------------------------- @@ -1386,10 +1396,16 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) llwarns << "can't read joint priority." << llendl; return FALSE; } + + if (joint_priority < LLJoint::USE_MOTION_PRIORITY) + { + llwarns << "joint priority unknown - too low." << llendl; + return FALSE; + } joint_motion->mPriority = (LLJoint::JointPriority)joint_priority; if (joint_priority != LLJoint::USE_MOTION_PRIORITY && - joint_priority > mJointMotionList->mMaxPriority) + joint_priority > mJointMotionList->mMaxPriority) { mJointMotionList->mMaxPriority = (LLJoint::JointPriority)joint_priority; } @@ -1399,7 +1415,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) //--------------------------------------------------------------------- // scan rotation curve header //--------------------------------------------------------------------- - if (!dp.unpackS32(joint_motion->mRotationCurve.mNumKeys, "num_rot_keys")) + if (!dp.unpackS32(joint_motion->mRotationCurve.mNumKeys, "num_rot_keys") || joint_motion->mRotationCurve.mNumKeys < 0) { llwarns << "can't read number of rotation keys" << llendl; return FALSE; @@ -1423,7 +1439,8 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) if (old_version) { - if (!dp.unpackF32(time, "time")) + if (!dp.unpackF32(time, "time") || + !llfinite(time)) { llwarns << "can't read rotation key (" << k << ")" << llendl; return FALSE; @@ -1456,7 +1473,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) if (old_version) { - success = dp.unpackVector3(rot_angles, "rot_angles"); + success = dp.unpackVector3(rot_angles, "rot_angles") && rot_angles.isFinite(); LLQuaternion::Order ro = StringToOrder("ZYX"); rot_key.mRotation = mayaQ(rot_angles.mV[VX], rot_angles.mV[VY], rot_angles.mV[VZ], ro); @@ -1492,7 +1509,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) //--------------------------------------------------------------------- // scan position curve header //--------------------------------------------------------------------- - if (!dp.unpackS32(joint_motion->mPositionCurve.mNumKeys, "num_pos_keys")) + if (!dp.unpackS32(joint_motion->mPositionCurve.mNumKeys, "num_pos_keys") || joint_motion->mPositionCurve.mNumKeys < 0) { llwarns << "can't read number of position keys" << llendl; return FALSE; @@ -1516,7 +1533,8 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) if (old_version) { - if (!dp.unpackF32(pos_key.mTime, "time")) + if (!dp.unpackF32(pos_key.mTime, "time") || + !llfinite(pos_key.mTime)) { llwarns << "can't read position key (" << k << ")" << llendl; return FALSE; @@ -1585,9 +1603,9 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) return FALSE; } - if (num_constraints > MAX_CONSTRAINTS) + if (num_constraints > MAX_CONSTRAINTS || num_constraints < 0) { - llwarns << "Too many constraints... ignoring" << llendl; + llwarns << "Bad number of constraints... ignoring: " << num_constraints << llendl; } else { @@ -1632,7 +1650,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) constraintp->mConstraintType = (EConstraintType)byte; const S32 BIN_DATA_LENGTH = 16; - U8 bin_data[BIN_DATA_LENGTH]; + U8 bin_data[BIN_DATA_LENGTH+1]; if (!dp.unpackBinaryDataFixed(bin_data, BIN_DATA_LENGTH, "source_volume")) { llwarns << "can't read source volume name" << llendl; @@ -1640,7 +1658,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) return FALSE; } - bin_data[BIN_DATA_LENGTH-1] = 0; // Ensure null termination + bin_data[BIN_DATA_LENGTH] = 0; // Ensure null termination str = (char*)bin_data; constraintp->mSourceConstraintVolume = mCharacter->getCollisionVolumeID(str); @@ -1665,7 +1683,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) return FALSE; } - bin_data[BIN_DATA_LENGTH-1] = 0; // Ensure null termination + bin_data[BIN_DATA_LENGTH] = 0; // Ensure null termination str = (char*)bin_data; if (str == "GROUND") { @@ -1712,28 +1730,28 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) // constraintp->mTargetConstraintDir *= constraintp->mSourceConstraintOffset.magVec(); } - if (!dp.unpackF32(constraintp->mEaseInStartTime, "ease_in_start")) + if (!dp.unpackF32(constraintp->mEaseInStartTime, "ease_in_start") || !llfinite(constraintp->mEaseInStartTime)) { llwarns << "can't read constraint ease in start time" << llendl; delete constraintp; return FALSE; } - if (!dp.unpackF32(constraintp->mEaseInStopTime, "ease_in_stop")) + if (!dp.unpackF32(constraintp->mEaseInStopTime, "ease_in_stop") || !llfinite(constraintp->mEaseInStopTime)) { llwarns << "can't read constraint ease in stop time" << llendl; delete constraintp; return FALSE; } - if (!dp.unpackF32(constraintp->mEaseOutStartTime, "ease_out_start")) + if (!dp.unpackF32(constraintp->mEaseOutStartTime, "ease_out_start") || !llfinite(constraintp->mEaseOutStartTime)) { llwarns << "can't read constraint ease out start time" << llendl; delete constraintp; return FALSE; } - if (!dp.unpackF32(constraintp->mEaseOutStopTime, "ease_out_stop")) + if (!dp.unpackF32(constraintp->mEaseOutStopTime, "ease_out_stop") || !llfinite(constraintp->mEaseOutStopTime)) { llwarns << "can't read constraint ease out stop time" << llendl; delete constraintp; @@ -1742,7 +1760,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp) mJointMotionList->mConstraints.push_front(constraintp); - constraintp->mJointStateIndices = new S32[constraintp->mChainLength + 1]; + constraintp->mJointStateIndices = new S32[constraintp->mChainLength + 1]; // note: mChainLength is size-limited - comes from a byte LLJoint* joint = mCharacter->findCollisionVolume(constraintp->mSourceConstraintVolume); // get joint to which this collision volume is attached diff --git a/indra/llcharacter/llmultigesture.cpp b/indra/llcharacter/llmultigesture.cpp index ee60430d97..70a35cba8f 100644 --- a/indra/llcharacter/llmultigesture.cpp +++ b/indra/llcharacter/llmultigesture.cpp @@ -293,7 +293,7 @@ BOOL LLGestureStepAnimation::deserialize(LLDataPacker& dp) dp.unpackU32(mFlags, "flags"); return TRUE; } -// *TODO: Translate +// *NOTE: result is translated in LLPreviewGesture::getLabel() std::vector<std::string> LLGestureStepAnimation::getLabel() const { std::vector<std::string> strings; @@ -367,7 +367,7 @@ BOOL LLGestureStepSound::deserialize(LLDataPacker& dp) dp.unpackU32(mFlags, "flags"); return TRUE; } -// *TODO: Translate +// *NOTE: result is translated in LLPreviewGesture::getLabel() std::vector<std::string> LLGestureStepSound::getLabel() const { std::vector<std::string> strings; @@ -425,7 +425,7 @@ BOOL LLGestureStepChat::deserialize(LLDataPacker& dp) dp.unpackU32(mFlags, "flags"); return TRUE; } -// *TODO: Translate +// *NOTE: result is translated in LLPreviewGesture::getLabel() std::vector<std::string> LLGestureStepChat::getLabel() const { std::vector<std::string> strings; @@ -479,7 +479,7 @@ BOOL LLGestureStepWait::deserialize(LLDataPacker& dp) dp.unpackU32(mFlags, "flags"); return TRUE; } -// *TODO: Translate +// *NOTE: result is translated in LLPreviewGesture::getLabel() std::vector<std::string> LLGestureStepWait::getLabel() const { std::vector<std::string> strings; diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp index 7330b00bcf..dca4cf7c3f 100644 --- a/indra/llcommon/llapr.cpp +++ b/indra/llcommon/llapr.cpp @@ -417,7 +417,11 @@ apr_pool_t* LLAPRFile::getAPRFilePool(apr_pool_t* pool) // File I/O S32 LLAPRFile::read(void *buf, S32 nbytes) { - llassert_always(mFile) ; + if(!mFile) + { + llwarns << "apr mFile is removed by somebody else. Can not read." << llendl ; + return 0; + } apr_size_t sz = nbytes; apr_status_t s = apr_file_read(mFile, buf, &sz); @@ -435,7 +439,11 @@ S32 LLAPRFile::read(void *buf, S32 nbytes) S32 LLAPRFile::write(const void *buf, S32 nbytes) { - llassert_always(mFile) ; + if(!mFile) + { + llwarns << "apr mFile is removed by somebody else. Can not write." << llendl ; + return 0; + } apr_size_t sz = nbytes; apr_status_t s = apr_file_write(mFile, buf, &sz); diff --git a/indra/llcommon/lldate.cpp b/indra/llcommon/lldate.cpp index a7ef28b431..04583cdd4a 100644 --- a/indra/llcommon/lldate.cpp +++ b/indra/llcommon/lldate.cpp @@ -121,7 +121,12 @@ std::string LLDate::toHTTPDateString (tm * gmt, std::string fmt) // use strftime() as it appears to be faster than std::time_put char buffer[128]; strftime(buffer, 128, fmt.c_str(), gmt); - return std::string(buffer); + std::string res(buffer); +#if LL_WINDOWS + // Convert from locale-dependant charset to UTF-8 (EXT-8524). + res = ll_convert_string_to_utf8_string(res); +#endif + return res; } void LLDate::toStream(std::ostream& s) const diff --git a/indra/llcommon/llformat.cpp b/indra/llcommon/llformat.cpp index cf509bee14..689f649d0a 100644 --- a/indra/llcommon/llformat.cpp +++ b/indra/llcommon/llformat.cpp @@ -37,16 +37,40 @@ #include <cstdarg> -std::string llformat(const char *fmt, ...) +// common used function with va_list argument +// wrapper for vsnprintf to be called from llformatXXX functions. +static void va_format(std::string& out, const char *fmt, va_list va) { char tstr[1024]; /* Flawfinder: ignore */ - va_list va; - va_start(va, fmt); #if LL_WINDOWS _vsnprintf(tstr, 1024, fmt, va); #else vsnprintf(tstr, 1024, fmt, va); /* Flawfinder: ignore */ #endif + out.assign(tstr); +} + +std::string llformat(const char *fmt, ...) +{ + std::string res; + va_list va; + va_start(va, fmt); + va_format(res, fmt, va); va_end(va); - return std::string(tstr); + return res; +} + +std::string llformat_to_utf8(const char *fmt, ...) +{ + std::string res; + va_list va; + va_start(va, fmt); + va_format(res, fmt, va); + va_end(va); + +#if LL_WINDOWS + // made converting to utf8. See EXT-8318. + res = ll_convert_string_to_utf8_string(res); +#endif + return res; } diff --git a/indra/llcommon/llformat.h b/indra/llcommon/llformat.h index dc64edb26d..17d8b4a8ad 100644 --- a/indra/llcommon/llformat.h +++ b/indra/llcommon/llformat.h @@ -42,4 +42,8 @@ std::string LL_COMMON_API llformat(const char *fmt, ...); +// the same version as above but ensures that returned string is in utf8 on windows +// to enable correct converting utf8_to_wstring. +std::string LL_COMMON_API llformat_to_utf8(const char *fmt, ...); + #endif // LL_LLFORMAT_H diff --git a/indra/llcommon/llmd5.cpp b/indra/llcommon/llmd5.cpp index da9cb94e13..cc73c3e45c 100644 --- a/indra/llcommon/llmd5.cpp +++ b/indra/llcommon/llmd5.cpp @@ -171,11 +171,6 @@ void LLMD5::update(FILE* file){ } - - - - - // MD5 update for istreams. // Like update for files; see above. @@ -192,9 +187,10 @@ void LLMD5::update(std::istream& stream){ } - - - +void LLMD5::update(const std::string& s) +{ + update((unsigned char *)s.c_str(),s.length()); +} // MD5 finalization. Ends an MD5 message-digest operation, writing the // the message digest and zeroizing the context. @@ -277,7 +273,7 @@ LLMD5::LLMD5(const unsigned char *s) finalize(); } -void LLMD5::raw_digest(unsigned char *s) +void LLMD5::raw_digest(unsigned char *s) const { if (!finalized) { @@ -293,7 +289,7 @@ void LLMD5::raw_digest(unsigned char *s) -void LLMD5::hex_digest(char *s) +void LLMD5::hex_digest(char *s) const { int i; @@ -319,6 +315,7 @@ void LLMD5::hex_digest(char *s) + std::ostream& operator<<(std::ostream &stream, LLMD5 context) { char s[33]; /* Flawfinder: ignore */ @@ -327,13 +324,25 @@ std::ostream& operator<<(std::ostream &stream, LLMD5 context) return stream; } +bool operator==(const LLMD5& a, const LLMD5& b) +{ + unsigned char a_guts[16]; + unsigned char b_guts[16]; + a.raw_digest(a_guts); + b.raw_digest(b_guts); + if (memcmp(a_guts,b_guts,16)==0) + return true; + else + return false; +} - +bool operator!=(const LLMD5& a, const LLMD5& b) +{ + return !(a==b); +} // PRIVATE METHODS: - - void LLMD5::init(){ finalized=0; // we just started! @@ -531,3 +540,5 @@ void LLMD5::decode (uint4 *output, const uint1 *input, const uint4 len){ output[i] = ((uint4)input[j]) | (((uint4)input[j+1]) << 8) | (((uint4)input[j+2]) << 16) | (((uint4)input[j+3]) << 24); } + + diff --git a/indra/llcommon/llmd5.h b/indra/llcommon/llmd5.h index df9d7324ab..4e68ba0d5e 100644 --- a/indra/llcommon/llmd5.h +++ b/indra/llcommon/llmd5.h @@ -95,6 +95,7 @@ public: void update (const uint1 *input, const uint4 input_length); void update (std::istream& stream); void update (FILE *file); + void update (const std::string& str); void finalize (); // constructors for special circumstances. All these constructors finalize @@ -105,11 +106,10 @@ public: LLMD5 (const unsigned char *string, const unsigned int number); // methods to acquire finalized result - void raw_digest(unsigned char *array); // provide 16-byte array for binary data - void hex_digest(char *string); // provide 33-byte array for ascii-hex string - friend std::ostream& operator<< (std::ostream&, LLMD5 context); - + void raw_digest(unsigned char *array) const; // provide 16-byte array for binary data + void hex_digest(char *string) const; // provide 33-byte array for ascii-hex string + friend std::ostream& operator<< (std::ostream&, LLMD5 context); private: @@ -131,4 +131,7 @@ private: }; +LL_COMMON_API bool operator==(const LLMD5& a, const LLMD5& b); +LL_COMMON_API bool operator!=(const LLMD5& a, const LLMD5& b); + #endif // LL_LLMD5_H diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp index 1561bda201..faf7aa51f1 100644 --- a/indra/llcommon/llstring.cpp +++ b/indra/llcommon/llstring.cpp @@ -633,14 +633,14 @@ namespace snprintf_hack } } -std::string ll_convert_wide_to_string(const wchar_t* in) +std::string ll_convert_wide_to_string(const wchar_t* in, unsigned int code_page) { std::string out; if(in) { int len_in = wcslen(in); int len_out = WideCharToMultiByte( - CP_ACP, + code_page, 0, in, len_in, @@ -655,7 +655,7 @@ std::string ll_convert_wide_to_string(const wchar_t* in) if(pout) { WideCharToMultiByte( - CP_ACP, + code_page, 0, in, len_in, @@ -669,6 +669,38 @@ std::string ll_convert_wide_to_string(const wchar_t* in) } return out; } + +wchar_t* ll_convert_string_to_wide(const std::string& in, unsigned int code_page) +{ + // From review: + // We can preallocate a wide char buffer that is the same length (in wchar_t elements) as the utf8 input, + // plus one for a null terminator, and be guaranteed to not overflow. + + // Normally, I'd call that sort of thing premature optimization, + // but we *are* seeing string operations taking a bunch of time, especially when constructing widgets. +// int output_str_len = MultiByteToWideChar(code_page, 0, in.c_str(), in.length(), NULL, 0); + + // reserve place to NULL terminator + int output_str_len = in.length(); + wchar_t* w_out = new wchar_t[output_str_len + 1]; + + memset(w_out, 0, output_str_len + 1); + int real_output_str_len = MultiByteToWideChar (code_page, 0, in.c_str(), in.length(), w_out, output_str_len); + + //looks like MultiByteToWideChar didn't add null terminator to converted string, see EXT-4858. + w_out[real_output_str_len] = 0; + + return w_out; +} + +std::string ll_convert_string_to_utf8_string(const std::string& in) +{ + wchar_t* w_mesg = ll_convert_string_to_wide(in, CP_ACP); + std::string out_utf8(ll_convert_wide_to_string(w_mesg, CP_UTF8)); + delete[] w_mesg; + + return out_utf8; +} #endif // LL_WINDOWS long LLStringOps::sPacificTimeOffset = 0; @@ -726,6 +758,7 @@ void LLStringOps::setupDatetimeInfo (bool daylight) datetimeToCodes["month"] = "%B"; // August datetimeToCodes["mthnum"] = "%m"; // 08 datetimeToCodes["day"] = "%d"; // 31 + datetimeToCodes["sday"] = "%-d"; // 9 datetimeToCodes["hour24"] = "%H"; // 14 datetimeToCodes["hour"] = "%H"; // 14 datetimeToCodes["hour12"] = "%I"; // 02 @@ -1095,6 +1128,11 @@ bool LLStringUtil::formatDatetime(std::string& replacement, std::string token, replacement = LLStringOps::sDayFormat; LLStringUtil::format(replacement, args); } + else if (code == "%-d") + { + struct tm * gmt = gmtime (&loc_seconds); + replacement = llformat ("%d", gmt->tm_mday); // day of the month without leading zero + } else if( !LLStringOps::sAM.empty() && !LLStringOps::sPM.empty() && code == "%p" ) { struct tm * gmt = gmtime (&loc_seconds); diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h index 8071c8aa2d..41fac0f8cc 100644 --- a/indra/llcommon/llstring.h +++ b/indra/llcommon/llstring.h @@ -564,7 +564,20 @@ using snprintf_hack::snprintf; * * This replaces the unsafe W2A macro from ATL. */ -LL_COMMON_API std::string ll_convert_wide_to_string(const wchar_t* in); +LL_COMMON_API std::string ll_convert_wide_to_string(const wchar_t* in, unsigned int code_page); + +/** + * Converts a string to wide string. + * + * It will allocate memory for result string with "new []". Don't forget to release it with "delete []". + */ +LL_COMMON_API wchar_t* ll_convert_string_to_wide(const std::string& in, unsigned int code_page); + +/** + * Converts incoming string into urf8 string + * + */ +LL_COMMON_API std::string ll_convert_string_to_utf8_string(const std::string& in); //@} #endif // LL_WINDOWS diff --git a/indra/llcommon/llversionserver.h b/indra/llcommon/llversionserver.h index 87fe7001e0..ddda9fb6af 100644 --- a/indra/llcommon/llversionserver.h +++ b/indra/llcommon/llversionserver.h @@ -36,7 +36,7 @@ const S32 LL_VERSION_MAJOR = 2; const S32 LL_VERSION_MINOR = 1; const S32 LL_VERSION_PATCH = 0; -const S32 LL_VERSION_BUILD = 0; +const S32 LL_VERSION_BUILD = 13828; const char * const LL_CHANNEL = "Second Life Server"; diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 6e341b83a1..c430a60ff0 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -35,7 +35,7 @@ const S32 LL_VERSION_MAJOR = 2; const S32 LL_VERSION_MINOR = 1; -const S32 LL_VERSION_PATCH = 0; +const S32 LL_VERSION_PATCH = 1; const S32 LL_VERSION_BUILD = 0; const char * const LL_CHANNEL = "Second Life Developer"; diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index 0fc5ca1ad6..1566389e30 100644 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -1553,6 +1553,7 @@ void LLImageFormatted::appendData(U8 *data, S32 size) S32 newsize = cursize + size; reallocateData(newsize); memcpy(getData() + cursize, data, size); + delete[] data; } } } diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index b08cb28218..d741cc855b 100644 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -58,7 +58,6 @@ static const std::string PARCEL_OWNERSHIP_STATUS_STRING[LLParcel::OS_COUNT+1] = }; // NOTE: Adding parcel categories also requires updating: -// * floater_directory.xml category combobox // * floater_about_land.xml category combobox // * Web site "create event" tools // DO NOT DELETE ITEMS FROM THIS LIST WITHOUT DEEPLY UNDERSTANDING WHAT YOU'RE DOING. diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index 16af7ea4fa..b0ebc7ea11 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -427,13 +427,6 @@ U32 LLCurl::Easy::report(CURLcode code) responseReason = strerror(code) + " : " + mErrorBuffer; setopt(CURLOPT_FRESH_CONNECT, TRUE); } - - if(responseCode >= 300 && responseCode < 400) //redirect - { - char new_url[512] ; - curl_easy_getinfo(mCurlEasyHandle, CURLINFO_REDIRECT_URL, new_url); - responseReason = new_url ; //get the new URL. - } if (mResponder) { @@ -532,6 +525,13 @@ void LLCurl::Easy::prepRequest(const std::string& url, setopt(CURLOPT_HEADERFUNCTION, (void*)&curlHeaderCallback); setopt(CURLOPT_HEADERDATA, (void*)this); + // Allow up to five redirects + if(responder && responder->followRedir()) + { + setopt(CURLOPT_FOLLOWLOCATION, 1); + setopt(CURLOPT_MAXREDIRS, MAX_REDIRECTS); + } + setErrorBuffer(); setCA(); @@ -1181,3 +1181,4 @@ void LLCurl::cleanupClass() } } +const unsigned int LLCurl::MAX_REDIRECTS = 5; diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h index 882d036705..ba51823fd3 100644 --- a/indra/llmessage/llcurl.h +++ b/indra/llmessage/llcurl.h @@ -123,6 +123,11 @@ public: // Used internally to set the url for debugging later. void setURL(const std::string& url); + virtual bool followRedir() + { + return false; + } + public: /* but not really -- don't touch this */ U32 mReferenceCount; @@ -182,6 +187,7 @@ public: private: static std::string sCAPath; static std::string sCAFile; + static const unsigned int MAX_REDIRECTS; }; namespace boost diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp index a86bbbffff..0a16b5120a 100644 --- a/indra/llrender/llfontfreetype.cpp +++ b/indra/llrender/llfontfreetype.cpp @@ -259,10 +259,10 @@ F32 LLFontFreetype::getXAdvance(llwchar wch) const } else { - gi = get_if_there(mCharGlyphInfoMap, (llwchar)0, (LLFontGlyphInfo*)NULL); - if (gi) + char_glyph_info_map_t::iterator found_it = mCharGlyphInfoMap.find((llwchar)0); + if (found_it != mCharGlyphInfoMap.end()) { - return gi->mXAdvance; + return found_it->second->mXAdvance; } } diff --git a/indra/llrender/llfontfreetype.h b/indra/llrender/llfontfreetype.h index f60d09316d..4b4a0bb189 100644 --- a/indra/llrender/llfontfreetype.h +++ b/indra/llrender/llfontfreetype.h @@ -33,7 +33,7 @@ #ifndef LL_LLFONTFREETYPE_H #define LL_LLFONTFREETYPE_H -#include <map> +#include <boost/unordered_map.hpp> #include "llpointer.h" #include "llstl.h" @@ -170,7 +170,7 @@ private: BOOL mValid; - typedef std::map<llwchar, LLFontGlyphInfo*> char_glyph_info_map_t; + typedef boost::unordered_map<llwchar, LLFontGlyphInfo*> char_glyph_info_map_t; mutable char_glyph_info_map_t mCharGlyphInfoMap; // Information about glyph location in bitmap mutable LLPointer<LLFontBitmapCache> mFontBitmapCachep; diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index f1f25a9bac..7facfbaf4e 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -147,6 +147,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, const LLRect& rect S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, const LLColor4 &color, HAlign halign, VAlign valign, U8 style, ShadowType shadow, S32 max_chars, S32 max_pixels, F32* right_x, BOOL use_ellipses) const { + LLFastTimer _(FTM_RENDER_FONTS); + if(!sDisplayFont) //do not display texts { return wstr.length() ; @@ -181,16 +183,18 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons gGL.loadUIIdentity(); - gGL.translateUI(floorf(sCurOrigin.mX*sScaleX), floorf(sCurOrigin.mY*sScaleY), sCurOrigin.mZ); + //gGL.translateUI(floorf(sCurOrigin.mX*sScaleX), floorf(sCurOrigin.mY*sScaleY), sCurOrigin.mZ); // this code snaps the text origin to a pixel grid to start with - F32 pixel_offset_x = llround((F32)sCurOrigin.mX) - (sCurOrigin.mX); - F32 pixel_offset_y = llround((F32)sCurOrigin.mY) - (sCurOrigin.mY); - gGL.translateUI(-pixel_offset_x, -pixel_offset_y, 0.f); + //F32 pixel_offset_x = llround((F32)sCurOrigin.mX) - (sCurOrigin.mX); + //F32 pixel_offset_y = llround((F32)sCurOrigin.mY) - (sCurOrigin.mY); + //gGL.translateUI(-pixel_offset_x, -pixel_offset_y, 0.f); - LLFastTimer t(FTM_RENDER_FONTS); + LLVector2 origin(floorf(sCurOrigin.mX*sScaleX), floorf(sCurOrigin.mY*sScaleY)); + // snap the text origin to a pixel grid to start with + origin.mV[VX] -= llround((F32)sCurOrigin.mX) - (sCurOrigin.mX); + origin.mV[VY] -= llround((F32)sCurOrigin.mY) - (sCurOrigin.mY); - gGL.color4fv( color.mV ); S32 chars_drawn = 0; S32 i; @@ -210,8 +214,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons // Not guaranteed to be set correctly gGL.setSceneBlendType(LLRender::BT_ALPHA); - cur_x = ((F32)x * sScaleX); - cur_y = ((F32)y * sScaleY); + cur_x = ((F32)x * sScaleX) + origin.mV[VX]; + cur_y = ((F32)y * sScaleY) + origin.mV[VY]; // Offset y by vertical alignment. switch (valign) @@ -275,6 +279,15 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons const LLFontGlyphInfo* next_glyph = NULL; + const S32 GLYPH_BATCH_SIZE = 30; + LLVector3 vertices[GLYPH_BATCH_SIZE * 4]; + LLVector2 uvs[GLYPH_BATCH_SIZE * 4]; + LLColor4U colors[GLYPH_BATCH_SIZE * 4]; + + LLColor4U text_color(color); + + S32 bitmap_num = -1; + S32 glyph_count = 0; for (i = begin_offset; i < begin_offset + length; i++) { llwchar wch = wstr[i]; @@ -291,8 +304,13 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons break; } // Per-glyph bitmap texture. - LLImageGL *image_gl = mFontFreetype->getFontBitmapCache()->getImageGL(fgi->mBitmapNum); - gGL.getTexUnit(0)->bind(image_gl); + S32 next_bitmap_num = fgi->mBitmapNum; + if (next_bitmap_num != bitmap_num) + { + bitmap_num = next_bitmap_num; + LLImageGL *font_image = font_bitmap_cache->getImageGL(bitmap_num); + gGL.getTexUnit(0)->bind(font_image); + } if ((start_x + scaled_max_pixels) < (cur_x + fgi->mXBearing + fgi->mWidth)) { @@ -312,7 +330,18 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons llround(cur_render_x + (F32)fgi->mXBearing) + (F32)fgi->mWidth, llround(cur_render_y + (F32)fgi->mYBearing) - (F32)fgi->mHeight); - drawGlyph(screen_rect, uv_rect, color, style_to_add, shadow, drop_shadow_strength); + if (glyph_count >= GLYPH_BATCH_SIZE) + { + gGL.begin(LLRender::QUADS); + { + gGL.vertexBatchPreTransformed(vertices, uvs, colors, glyph_count * 4); + } + gGL.end(); + + glyph_count = 0; + } + + drawGlyph(glyph_count, vertices, uvs, colors, screen_rect, uv_rect, text_color, style_to_add, shadow, drop_shadow_strength); chars_drawn++; cur_x += fgi->mXAdvance; @@ -337,11 +366,19 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons cur_render_y = cur_y; } + gGL.begin(LLRender::QUADS); + { + gGL.vertexBatchPreTransformed(vertices, uvs, colors, glyph_count * 4); + } + gGL.end(); + + if (right_x) { - *right_x = cur_x / sScaleX; + *right_x = (cur_x - origin.mV[VX]) / sScaleX; } + //FIXME: add underline as glyph? if (style_to_add & UNDERLINE) { F32 descender = mFontFreetype->getDescenderHeight(); @@ -361,7 +398,7 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons gGL.pushUIMatrix(); renderUTF8(std::string("..."), 0, - cur_x / sScaleX, (F32)y, + (cur_x - origin.mV[VX]) / sScaleX, (F32)y, color, LEFT, valign, style_to_add, @@ -1090,95 +1127,95 @@ LLFontGL &LLFontGL::operator=(const LLFontGL &source) return *this; } -void LLFontGL::renderQuad(const LLRectf& screen_rect, const LLRectf& uv_rect, F32 slant_amt) const +void LLFontGL::renderQuad(LLVector3* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, F32 slant_amt) const { - gGL.texCoord2f(uv_rect.mRight, uv_rect.mTop); - gGL.vertex2f(llfont_round_x(screen_rect.mRight), - llfont_round_y(screen_rect.mTop)); - - gGL.texCoord2f(uv_rect.mLeft, uv_rect.mTop); - gGL.vertex2f(llfont_round_x(screen_rect.mLeft), - llfont_round_y(screen_rect.mTop)); - - gGL.texCoord2f(uv_rect.mLeft, uv_rect.mBottom); - gGL.vertex2f(llfont_round_x(screen_rect.mLeft + slant_amt), - llfont_round_y(screen_rect.mBottom)); - - gGL.texCoord2f(uv_rect.mRight, uv_rect.mBottom); - gGL.vertex2f(llfont_round_x(screen_rect.mRight + slant_amt), - llfont_round_y(screen_rect.mBottom)); + S32 index = 0; + + vertex_out[index] = LLVector3(llfont_round_x(screen_rect.mRight), llfont_round_y(screen_rect.mTop), 0.f); + uv_out[index] = LLVector2(uv_rect.mRight, uv_rect.mTop); + colors_out[index] = color; + index++; + + vertex_out[index] = LLVector3(llfont_round_x(screen_rect.mLeft), llfont_round_y(screen_rect.mTop), 0.f); + uv_out[index] = LLVector2(uv_rect.mLeft, uv_rect.mTop); + colors_out[index] = color; + index++; + + vertex_out[index] = LLVector3(llfont_round_x(screen_rect.mLeft), llfont_round_y(screen_rect.mBottom), 0.f); + uv_out[index] = LLVector2(uv_rect.mLeft, uv_rect.mBottom); + colors_out[index] = color; + index++; + + vertex_out[index] = LLVector3(llfont_round_x(screen_rect.mRight), llfont_round_y(screen_rect.mBottom), 0.f); + uv_out[index] = LLVector2(uv_rect.mRight, uv_rect.mBottom); + colors_out[index] = color; } -void LLFontGL::drawGlyph(const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4& color, U8 style, ShadowType shadow, F32 drop_shadow_strength) const +void LLFontGL::drawGlyph(S32& glyph_count, LLVector3* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, U8 style, ShadowType shadow, F32 drop_shadow_strength) const { F32 slant_offset; slant_offset = ((style & ITALIC) ? ( -mFontFreetype->getAscenderHeight() * 0.2f) : 0.f); - gGL.begin(LLRender::QUADS); + //FIXME: bold and drop shadow are mutually exclusive only for convenience + //Allow both when we need them. + if (style & BOLD) { - //FIXME: bold and drop shadow are mutually exclusive only for convenience - //Allow both when we need them. - if (style & BOLD) + for (S32 pass = 0; pass < 2; pass++) { - gGL.color4fv(color.mV); - for (S32 pass = 0; pass < 2; pass++) - { - LLRectf screen_rect_offset = screen_rect; + LLRectf screen_rect_offset = screen_rect; - screen_rect_offset.translate((F32)(pass * BOLD_OFFSET), 0.f); - renderQuad(screen_rect_offset, uv_rect, slant_offset); - } + screen_rect_offset.translate((F32)(pass * BOLD_OFFSET), 0.f); + renderQuad(&vertex_out[glyph_count * 4], &uv_out[glyph_count * 4], &colors_out[glyph_count * 4], screen_rect_offset, uv_rect, color, slant_offset); + glyph_count++; } - else if (shadow == DROP_SHADOW_SOFT) + } + else if (shadow == DROP_SHADOW_SOFT) + { + LLColor4U shadow_color = LLFontGL::sShadowColor; + shadow_color.mV[VALPHA] = U8(color.mV[VALPHA] * drop_shadow_strength * DROP_SHADOW_SOFT_STRENGTH); + for (S32 pass = 0; pass < 5; pass++) { - LLColor4 shadow_color = LLFontGL::sShadowColor; - shadow_color.mV[VALPHA] = color.mV[VALPHA] * drop_shadow_strength * DROP_SHADOW_SOFT_STRENGTH; - gGL.color4fv(shadow_color.mV); - for (S32 pass = 0; pass < 5; pass++) - { - LLRectf screen_rect_offset = screen_rect; + LLRectf screen_rect_offset = screen_rect; - switch(pass) - { - case 0: - screen_rect_offset.translate(-1.f, -1.f); - break; - case 1: - screen_rect_offset.translate(1.f, -1.f); - break; - case 2: - screen_rect_offset.translate(1.f, 1.f); - break; - case 3: - screen_rect_offset.translate(-1.f, 1.f); - break; - case 4: - screen_rect_offset.translate(0, -2.f); - break; - } - - renderQuad(screen_rect_offset, uv_rect, slant_offset); + switch(pass) + { + case 0: + screen_rect_offset.translate(-1.f, -1.f); + break; + case 1: + screen_rect_offset.translate(1.f, -1.f); + break; + case 2: + screen_rect_offset.translate(1.f, 1.f); + break; + case 3: + screen_rect_offset.translate(-1.f, 1.f); + break; + case 4: + screen_rect_offset.translate(0, -2.f); + break; } - gGL.color4fv(color.mV); - renderQuad(screen_rect, uv_rect, slant_offset); - } - else if (shadow == DROP_SHADOW) - { - LLColor4 shadow_color = LLFontGL::sShadowColor; - shadow_color.mV[VALPHA] = color.mV[VALPHA] * drop_shadow_strength; - gGL.color4fv(shadow_color.mV); - LLRectf screen_rect_shadow = screen_rect; - screen_rect_shadow.translate(1.f, -1.f); - renderQuad(screen_rect_shadow, uv_rect, slant_offset); - gGL.color4fv(color.mV); - renderQuad(screen_rect, uv_rect, slant_offset); - } - else // normal rendering - { - gGL.color4fv(color.mV); - renderQuad(screen_rect, uv_rect, slant_offset); + + renderQuad(&vertex_out[glyph_count * 4], &uv_out[glyph_count * 4], &colors_out[glyph_count * 4], screen_rect_offset, uv_rect, shadow_color, slant_offset); + glyph_count++; } - + renderQuad(&vertex_out[glyph_count * 4], &uv_out[glyph_count * 4], &colors_out[glyph_count * 4], screen_rect, uv_rect, color, slant_offset); + glyph_count++; + } + else if (shadow == DROP_SHADOW) + { + LLColor4U shadow_color = LLFontGL::sShadowColor; + shadow_color.mV[VALPHA] = U8(color.mV[VALPHA] * drop_shadow_strength); + LLRectf screen_rect_shadow = screen_rect; + screen_rect_shadow.translate(1.f, -1.f); + renderQuad(&vertex_out[glyph_count * 4], &uv_out[glyph_count * 4], &colors_out[glyph_count * 4], screen_rect_shadow, uv_rect, shadow_color, slant_offset); + glyph_count++; + renderQuad(&vertex_out[glyph_count * 4], &uv_out[glyph_count * 4], &colors_out[glyph_count * 4], screen_rect, uv_rect, color, slant_offset); + glyph_count++; + } + else // normal rendering + { + renderQuad(&vertex_out[glyph_count * 4], &uv_out[glyph_count * 4], &colors_out[glyph_count * 4], screen_rect, uv_rect, color, slant_offset); + glyph_count++; } - gGL.end(); } diff --git a/indra/llrender/llfontgl.h b/indra/llrender/llfontgl.h index f29ac5165c..8bc45fbf74 100644 --- a/indra/llrender/llfontgl.h +++ b/indra/llrender/llfontgl.h @@ -217,8 +217,8 @@ private: LLFontDescriptor mFontDescriptor; LLPointer<LLFontFreetype> mFontFreetype; - void renderQuad(const LLRectf& screen_rect, const LLRectf& uv_rect, F32 slant_amt) const; - void drawGlyph(const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4& color, U8 style, ShadowType shadow, F32 drop_shadow_fade) const; + void renderQuad(LLVector3* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, F32 slant_amt) const; + void drawGlyph(S32& glyph_count, LLVector3* vertex_out, LLVector2* uv_out, LLColor4U* colors_out, const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4U& color, U8 style, ShadowType shadow, F32 drop_shadow_fade) const; // Registry holds all instantiated fonts. static LLFontRegistry* sFontRegistry; diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 7ff68fe34b..98ed34d6fc 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -356,6 +356,8 @@ LLGLManager::LLGLManager() : mHasSeparateSpecularColor(FALSE), + mDebugGPU(FALSE), + mDriverVersionMajor(1), mDriverVersionMinor(0), mDriverVersionRelease(0), @@ -523,11 +525,23 @@ bool LLGLManager::initGL() return false; } + setToDebugGPU(); initGLStates(); return true; } +void LLGLManager::setToDebugGPU() +{ + //"MOBILE INTEL(R) 965 EXPRESS CHIP", + if (mGLRenderer.find("INTEL") != std::string::npos && mGLRenderer.find("965") != std::string::npos) + { + mDebugGPU = TRUE ; + } + + return ; +} + void LLGLManager::getGLInfo(LLSD& info) { info["GLInfo"]["GLVendor"] = std::string((const char *)glGetString(GL_VENDOR)); @@ -1122,7 +1136,7 @@ void clear_glerror() // // Static members -std::map<LLGLenum, LLGLboolean> LLGLState::sStateMap; +boost::unordered_map<LLGLenum, LLGLboolean> LLGLState::sStateMap; GLboolean LLGLDepthTest::sDepthEnabled = GL_FALSE; // OpenGL default GLenum LLGLDepthTest::sDepthFunc = GL_LESS; // OpenGL default @@ -1170,7 +1184,7 @@ void LLGLState::resetTextureStates() void LLGLState::dumpStates() { LL_INFOS("RenderState") << "GL States:" << LL_ENDL; - for (std::map<LLGLenum, LLGLboolean>::iterator iter = sStateMap.begin(); + for (boost::unordered_map<LLGLenum, LLGLboolean>::iterator iter = sStateMap.begin(); iter != sStateMap.end(); ++iter) { LL_INFOS("RenderState") << llformat(" 0x%04x : %s",(S32)iter->first,iter->second?"TRUE":"FALSE") << LL_ENDL; @@ -1206,7 +1220,7 @@ void LLGLState::checkStates(const std::string& msg) } } - for (std::map<LLGLenum, LLGLboolean>::iterator iter = sStateMap.begin(); + for (boost::unordered_map<LLGLenum, LLGLboolean>::iterator iter = sStateMap.begin(); iter != sStateMap.end(); ++iter) { LLGLenum state = iter->first; diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index 0c2da7dd08..937bf63849 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -36,7 +36,7 @@ // This file contains various stuff for handling gl extensions and other gl related stuff. #include <string> -#include <map> +#include <boost/unordered_map.hpp> #include <list> #include "llerror.h" @@ -120,6 +120,9 @@ public: // Misc extensions BOOL mHasSeparateSpecularColor; + + //whether this GPU is in the debug list. + BOOL mDebugGPU; S32 mDriverVersionMajor; S32 mDriverVersionMinor; @@ -148,6 +151,7 @@ private: void initExtensions(); void initGLStates(); void initGLImages(); + void setToDebugGPU(); }; extern LLGLManager gGLManager; @@ -241,7 +245,7 @@ public: static void checkClientArrays(const std::string& msg = "", U32 data_mask = 0x0001); protected: - static std::map<LLGLenum, LLGLboolean> sStateMap; + static boost::unordered_map<LLGLenum, LLGLboolean> sStateMap; public: enum { CURRENT_STATE = -2 }; diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index db5835b73a..5e69e9e045 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -109,11 +109,20 @@ void LLImageGL::checkTexSize(bool forced) const { if ((forced || gDebugGL) && mTarget == GL_TEXTURE_2D) { + { + //check viewport + GLint vp[4] ; + glGetIntegerv(GL_VIEWPORT, vp) ; + llcallstacks << "viewport: " << vp[0] << " : " << vp[1] << " : " << vp[2] << " : " << vp[3] << llcallstacksendl ; + } + GLint texname; glGetIntegerv(GL_TEXTURE_BINDING_2D, &texname); BOOL error = FALSE; if (texname != mTexName) { + llinfos << "Bound: " << texname << " Should bind: " << mTexName << " Default: " << LLImageGL::sDefaultGLTexture->getTexName() << llendl; + error = TRUE; if (gDebugSession) { @@ -141,12 +150,12 @@ void LLImageGL::checkTexSize(bool forced) const if (gDebugSession) { gFailLog << "wrong texture size and discard level!" << - mWidth << " Height: " << mHeight << " Current Level: " << mCurrentDiscardLevel << std::endl; + mWidth << " Height: " << mHeight << " Current Level: " << (S32)mCurrentDiscardLevel << std::endl; } else { llerrs << "wrong texture size and discard level: width: " << - mWidth << " Height: " << mHeight << " Current Level: " << mCurrentDiscardLevel << llendl ; + mWidth << " Height: " << mHeight << " Current Level: " << (S32)mCurrentDiscardLevel << llendl ; } } @@ -1048,8 +1057,12 @@ BOOL LLImageGL::setSubImageFromFrameBuffer(S32 fb_x, S32 fb_y, S32 x_pos, S32 y_ { if (gGL.getTexUnit(0)->bind(this, false, true)) { - checkTexSize(true) ; - llcallstacks << fb_x << " : " << fb_y << " : " << x_pos << " : " << y_pos << " : " << width << " : " << height << llcallstacksendl ; + if(gGLManager.mDebugGPU) + { + llinfos << "Calling glCopyTexSubImage2D(...)" << llendl ; + checkTexSize(true) ; + llcallstacks << fb_x << " : " << fb_y << " : " << x_pos << " : " << y_pos << " : " << width << " : " << height << llcallstacksendl ; + } glCopyTexSubImage2D(GL_TEXTURE_2D, 0, fb_x, fb_y, x_pos, y_pos, width, height); mGLTextureCreated = true; diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 2b1a9bbf94..64238b2008 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -39,7 +39,6 @@ #include "llimagegl.h" #include "llrendertarget.h" #include "lltexture.h" -#include "llvector4a.h" LLRender gGL; @@ -54,7 +53,6 @@ U32 LLRender::sUICalls = 0; U32 LLRender::sUIVerts = 0; static const U32 LL_NUM_TEXTURE_LAYERS = 16; -static const U32 LL_MAX_UI_STACK_DEPTH = 32; static GLenum sGLTextureType[] = { @@ -167,7 +165,6 @@ void LLTexUnit::enable(eTextureType type) if ( (mCurrTexType != type || gGL.mDirty) && (type != TT_NONE) ) { activate(); - if (mCurrTexType != TT_NONE && !gGL.mDirty) { disable(); // Force a disable of a previous texture type if it's enabled. @@ -759,27 +756,14 @@ LLRender::LLRender() mCount(0), mMode(LLRender::TRIANGLES), mCurrTextureUnitIndex(0), - mMaxAnisotropy(0.f), - mUIStackDepth(0) + mMaxAnisotropy(0.f) { mBuffer = new LLVertexBuffer(immediate_mask, 0); mBuffer->allocateBuffer(4096, 0, TRUE); - - LLStrider<LLVector3> vert; - LLStrider<LLVector2> tc; - LLStrider<LLColor4U> color; - - mBuffer->getVertexStrider(vert); - mBuffer->getTexCoord0Strider(tc); - mBuffer->getColorStrider(color); - - mVerticesp = (LLVector4a*) vert.get(); - mTexcoordsp = tc.get(); - mColorsp = color.get(); - - mUIOffset = (LLVector4a*) ll_aligned_malloc_16(LL_MAX_UI_STACK_DEPTH*sizeof(LLVector4a)); - mUIScale = (LLVector4a*) ll_aligned_malloc_16(LL_MAX_UI_STACK_DEPTH*sizeof(LLVector4a)); - + mBuffer->getVertexStrider(mVerticesp); + mBuffer->getTexCoord0Strider(mTexcoordsp); + mBuffer->getColorStrider(mColorsp); + mTexUnits.reserve(LL_NUM_TEXTURE_LAYERS); for (U32 i = 0; i < LL_NUM_TEXTURE_LAYERS; i++) { @@ -794,7 +778,6 @@ LLRender::LLRender() mCurrAlphaFunc = CF_DEFAULT; mCurrAlphaFuncVal = 0.01f; - mCurrBlendColorSFactor = BF_UNDEF; mCurrBlendAlphaSFactor = BF_UNDEF; mCurrBlendColorDFactor = BF_UNDEF; @@ -815,11 +798,6 @@ void LLRender::shutdown() mTexUnits.clear(); delete mDummyTexUnit; mDummyTexUnit = NULL; - - ll_aligned_free_16(mUIOffset); - mUIOffset = NULL; - ll_aligned_free_16(mUIScale); - mUIScale = NULL; } void LLRender::refreshState(void) @@ -868,83 +846,84 @@ void LLRender::popMatrix() void LLRender::translateUI(F32 x, F32 y, F32 z) { - if (mUIStackDepth == 0) + if (mUIOffset.empty()) { llerrs << "Need to push a UI translation frame before offsetting" << llendl; } - LLVector4a trans(x,y,z); - mUIOffset[mUIStackDepth-1].add(trans); + mUIOffset.back().mV[0] += x; + mUIOffset.back().mV[1] += y; + mUIOffset.back().mV[2] += z; } void LLRender::scaleUI(F32 x, F32 y, F32 z) { - if (mUIStackDepth == 0) + if (mUIScale.empty()) { llerrs << "Need to push a UI transformation frame before scaling." << llendl; } - LLVector4a scale(x,y,z); - mUIScale[mUIStackDepth-1].mul(scale); + mUIScale.back().scaleVec(LLVector3(x,y,z)); } void LLRender::pushUIMatrix() { - if (mUIStackDepth == 0) + if (mUIOffset.empty()) + { + mUIOffset.push_back(LLVector3(0,0,0)); + } + else { - mUIOffset[0].clear(); - mUIScale[0].splat(1.f); + mUIOffset.push_back(mUIOffset.back()); } - else if (mUIStackDepth < LL_MAX_UI_STACK_DEPTH) + + if (mUIScale.empty()) { - mUIOffset[mUIStackDepth] = mUIOffset[mUIStackDepth-1]; - mUIScale[mUIStackDepth] = mUIScale[mUIStackDepth-1]; + mUIScale.push_back(LLVector3(1,1,1)); } else { - llerrs << "Blown UI matrix stack." << llendl; + mUIScale.push_back(mUIScale.back()); } - - ++mUIStackDepth; - } void LLRender::popUIMatrix() { - if (mUIStackDepth == 0) + if (mUIOffset.empty()) { llerrs << "UI offset stack blown." << llendl; } - --mUIStackDepth; + mUIOffset.pop_back(); + mUIScale.pop_back(); } LLVector3 LLRender::getUITranslation() { - if (mUIStackDepth == 0) + if (mUIOffset.empty()) { llerrs << "UI offset stack empty." << llendl; } - return LLVector3(mUIOffset[mUIStackDepth-1].getF32ptr()); + return mUIOffset.back(); } LLVector3 LLRender::getUIScale() { - if (mUIStackDepth == 0) + if (mUIScale.empty()) { llerrs << "UI scale stack empty." << llendl; } - return LLVector3(mUIScale[mUIStackDepth-1].getF32ptr()); + return mUIScale.back(); } void LLRender::loadUIIdentity() { - if (mUIStackDepth == 0) + if (mUIOffset.empty()) { llerrs << "Need to push UI translation frame before clearing offset." << llendl; } - mUIOffset[mUIStackDepth-1].clear(); - mUIScale[mUIStackDepth-1].splat(1.f); + mUIOffset.back().setVec(0,0,0); + mUIScale.back().setVec(1,1,1); } void LLRender::setColorMask(bool writeColor, bool writeAlpha) @@ -1173,7 +1152,7 @@ void LLRender::flush() } #endif - if (mUIStackDepth > 0) + if (!mUIOffset.empty()) { sUICalls++; sUIVerts += mCount; @@ -1225,20 +1204,83 @@ void LLRender::vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z) return; } - LLVector3& v = reinterpret_cast<LLVector3&>(mVerticesp[mCount]); - v.set(x,y,z); - if (mUIStackDepth != 0) + if (mUIOffset.empty()) { - v += reinterpret_cast<LLVector3&>(mUIOffset[mUIStackDepth-1]); - v.scaleVec(reinterpret_cast<LLVector3&>(mUIScale[mUIStackDepth-1])); + mVerticesp[mCount] = LLVector3(x,y,z); + } + else + { + LLVector3 vert = (LLVector3(x,y,z)+mUIOffset.back()).scaledVec(mUIScale.back()); + mVerticesp[mCount] = vert; } mCount++; - if (mCount < 4096) + mVerticesp[mCount] = mVerticesp[mCount-1]; + mColorsp[mCount] = mColorsp[mCount-1]; + mTexcoordsp[mCount] = mTexcoordsp[mCount-1]; +} + +void LLRender::vertexBatchPreTransformed(LLVector3* verts, S32 vert_count) +{ + if (mCount + vert_count > 4094) { - mColorsp[mCount] = mColorsp[mCount-1]; + // llwarns << "GL immediate mode overflow. Some geometry not drawn." << llendl; + return; + } + + for (S32 i = 0; i < vert_count; i++) + { + mVerticesp[mCount] = verts[i]; + + mCount++; mTexcoordsp[mCount] = mTexcoordsp[mCount-1]; + mColorsp[mCount] = mColorsp[mCount-1]; + } + + mVerticesp[mCount] = mVerticesp[mCount-1]; +} + +void LLRender::vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, S32 vert_count) +{ + if (mCount + vert_count > 4094) + { + // llwarns << "GL immediate mode overflow. Some geometry not drawn." << llendl; + return; + } + + for (S32 i = 0; i < vert_count; i++) + { + mVerticesp[mCount] = verts[i]; + mTexcoordsp[mCount] = uvs[i]; + + mCount++; + mColorsp[mCount] = mColorsp[mCount-1]; } + + mVerticesp[mCount] = mVerticesp[mCount-1]; + mTexcoordsp[mCount] = mTexcoordsp[mCount-1]; +} + +void LLRender::vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, LLColor4U* colors, S32 vert_count) +{ + if (mCount + vert_count > 4094) + { + // llwarns << "GL immediate mode overflow. Some geometry not drawn." << llendl; + return; + } + + for (S32 i = 0; i < vert_count; i++) + { + mVerticesp[mCount] = verts[i]; + mTexcoordsp[mCount] = uvs[i]; + mColorsp[mCount] = colors[i]; + + mCount++; + } + + mVerticesp[mCount] = mVerticesp[mCount-1]; + mTexcoordsp[mCount] = mTexcoordsp[mCount-1]; + mColorsp[mCount] = mColorsp[mCount-1]; } void LLRender::vertex2i(const GLint& x, const GLint& y) diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h index 11cd95646f..0fa503182e 100644 --- a/indra/llrender/llrender.h +++ b/indra/llrender/llrender.h @@ -45,7 +45,6 @@ #include "v4coloru.h" #include "llstrider.h" #include "llpointer.h" -#include "llmemory.h" #include "llglheaders.h" class LLVertexBuffer; @@ -53,7 +52,6 @@ class LLCubeMap; class LLImageGL; class LLRenderTarget; class LLTexture ; -class LLVector4a; class LLTexUnit { @@ -319,6 +317,10 @@ public: void color3fv(const GLfloat* c); void color4ubv(const GLubyte* c); + void vertexBatchPreTransformed(LLVector3* verts, S32 vert_count); + void vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, S32 vert_count); + void vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, LLColor4U*, S32 vert_count); + void setColorMask(bool writeColor, bool writeAlpha); void setColorMask(bool writeColorR, bool writeColorG, bool writeColorB, bool writeAlpha); void setSceneBlendType(eBlendType type); @@ -362,10 +364,9 @@ private: F32 mCurrAlphaFuncVal; LLPointer<LLVertexBuffer> mBuffer; - LLVector4a* mVerticesp; - LLVector2* mTexcoordsp; - LLColor4U* mColorsp; - + LLStrider<LLVector3> mVerticesp; + LLStrider<LLVector2> mTexcoordsp; + LLStrider<LLColor4U> mColorsp; std::vector<LLTexUnit*> mTexUnits; LLTexUnit* mDummyTexUnit; @@ -373,12 +374,12 @@ private: eBlendFactor mCurrBlendColorDFactor; eBlendFactor mCurrBlendAlphaSFactor; eBlendFactor mCurrBlendAlphaDFactor; + F32 mMaxAnisotropy; - LLVector4a* mUIOffset; - LLVector4a* mUIScale; + std::vector<LLVector3> mUIOffset; + std::vector<LLVector3> mUIScale; - U32 mUIStackDepth; }; extern F64 gGLModelView[16]; diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h index bcd4b9f828..a6173636bf 100644 --- a/indra/llrender/llvertexbuffer.h +++ b/indra/llrender/llvertexbuffer.h @@ -94,7 +94,7 @@ public: static LLVBOPool sDynamicVBOPool; static LLVBOPool sStreamIBOPool; static LLVBOPool sDynamicIBOPool; - + static S32 sWeight4Loc; static BOOL sUseStreamDraw; diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp index 673631f99a..c3ef734823 100644 --- a/indra/llui/llaccordionctrl.cpp +++ b/indra/llui/llaccordionctrl.cpp @@ -765,6 +765,17 @@ S32 LLAccordionCtrl::notifyParent(const LLSD& info) } return 0; } + else if(str_action == "deselect_current") + { + // Reset selection to the currently selected tab. + if (mSelectedTab) + { + mSelectedTab->setSelected(false); + mSelectedTab = NULL; + return 1; + } + return 0; + } } else if (info.has("scrollToShowRect")) { @@ -811,6 +822,31 @@ void LLAccordionCtrl::reset () mScrollbar->setDocPos(0); } +void LLAccordionCtrl::expandDefaultTab() +{ + if (mAccordionTabs.size() > 0) + { + LLAccordionCtrlTab* tab = mAccordionTabs.front(); + + if (!tab->getDisplayChildren()) + { + tab->setDisplayChildren(true); + } + + for (size_t i = 1; i < mAccordionTabs.size(); ++i) + { + tab = mAccordionTabs[i]; + + if (tab->getDisplayChildren()) + { + tab->setDisplayChildren(false); + } + } + + arrange(); + } +} + void LLAccordionCtrl::sort() { if (!mTabComparator) diff --git a/indra/llui/llaccordionctrl.h b/indra/llui/llaccordionctrl.h index b5fdf796cd..6fc9ca86a3 100644 --- a/indra/llui/llaccordionctrl.h +++ b/indra/llui/llaccordionctrl.h @@ -122,6 +122,7 @@ public: S32 notifyParent(const LLSD& info); void reset (); + void expandDefaultTab(); void setComparator(const LLTabComparator* comp) { mTabComparator = comp; } void sort(); @@ -138,7 +139,9 @@ public: */ const LLAccordionCtrlTab* getExpandedTab() const; - const LLAccordionCtrlTab* getSelectedTab() const { return mSelectedTab; } + LLAccordionCtrlTab* getSelectedTab() const { return mSelectedTab; } + + bool getFitParent() const {return mFitParent;} private: void initNoTabsWidget(const LLTextBox::Params& tb_params); diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp index 37fc571bbd..84716394e6 100644 --- a/indra/llui/llaccordionctrltab.cpp +++ b/indra/llui/llaccordionctrltab.cpp @@ -33,6 +33,7 @@ #include "linden_common.h" #include "llaccordionctrltab.h" +#include "llaccordionctrl.h" #include "lllocalcliprect.h" #include "llscrollbar.h" @@ -358,6 +359,7 @@ LLAccordionCtrlTab::LLAccordionCtrlTab(const LLAccordionCtrlTab::Params&p) ,mPaddingBottom(p.padding_bottom) ,mCanOpenClose(true) ,mFitPanel(p.fit_panel) + ,mSelectionEnabled(p.selection_enabled) ,mContainerPanel(NULL) ,mScrollbar(NULL) { @@ -371,9 +373,11 @@ LLAccordionCtrlTab::LLAccordionCtrlTab(const LLAccordionCtrlTab::Params&p) mHeader = LLUICtrlFactory::create<LLAccordionCtrlTabHeader>(headerParams); addChild(mHeader, 1); - if (p.selection_enabled) + LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLAccordionCtrlTab::selectOnFocusReceived, this)); + + if (!p.selection_enabled) { - LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLAccordionCtrlTab::selectOnFocusReceived, this)); + LLFocusableElement::setFocusLostCallback(boost::bind(&LLAccordionCtrlTab::deselectOnFocusLost, this)); } reshape(100, 200,FALSE); @@ -598,6 +602,15 @@ void LLAccordionCtrlTab::selectOnFocusReceived() getParent()->notifyParent(LLSD().with("action", "select_current")); } +void LLAccordionCtrlTab::deselectOnFocusLost() +{ + if(getParent()) // A parent may not be set if tabs are added dynamically. + { + getParent()->notifyParent(LLSD().with("action", "deselect_current")); + } + +} + S32 LLAccordionCtrlTab::getHeaderHeight() { return mHeaderVisible?HEADER_HEIGHT:0; @@ -698,7 +711,7 @@ S32 LLAccordionCtrlTab::notifyParent(const LLSD& info) setRect(panel_rect); } - //LLAccordionCtrl should rearrange accodion tab if one of accordion change its size + //LLAccordionCtrl should rearrange accordion tab if one of accordion change its size if (getParent()) // A parent may not be set if tabs are added dynamically. getParent()->notifyParent(info); return 1; @@ -709,6 +722,27 @@ S32 LLAccordionCtrlTab::notifyParent(const LLSD& info) return 1; } } + else if (info.has("scrollToShowRect")) + { + LLAccordionCtrl* parent = dynamic_cast<LLAccordionCtrl*>(getParent()); + if (parent && parent->getFitParent()) + { + // EXT-8285 ('No attachments worn' text appears at the bottom of blank 'Attachments' accordion) + // The problem was in passing message "scrollToShowRect" IN LLAccordionCtrlTab::notifyParent + // FROM child LLScrollContainer TO parent LLAccordionCtrl with "it_parent" set to true. + + // It is wrong notification for parent accordion which leads to recursive call of adjustContainerPanel + // As the result of recursive call of adjustContainerPanel we got LLAccordionCtrlTab + // that reshaped and re-sized with different rectangles. + + // LLAccordionCtrl has own scrollContainer and LLAccordionCtrlTab has own scrollContainer + // both should handle own scroll container's event. + // So, if parent accordion "fit_parent" accordion tab should handle its scroll container events itself. + + return 1; + } + } + return LLUICtrl::notifyParent(info); } @@ -797,7 +831,7 @@ void LLAccordionCtrlTab::showAndFocusHeader() { LLAccordionCtrlTabHeader* header = getChild<LLAccordionCtrlTabHeader>(DD_HEADER_NAME); header->setFocus(true); - header->setSelected(true); + header->setSelected(mSelectionEnabled); LLRect screen_rc; LLRect selected_rc = header->getRect(); diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h index 5646a355d0..00fb276f19 100644 --- a/indra/llui/llaccordionctrltab.h +++ b/indra/llui/llaccordionctrltab.h @@ -220,6 +220,7 @@ protected: LLView* findContainerView (); void selectOnFocusReceived(); + void deselectOnFocusLost(); private: @@ -241,6 +242,8 @@ private: bool mStoredOpenCloseState; bool mWasStateStored; + bool mSelectionEnabled; + LLScrollbar* mScrollbar; LLView* mContainerPanel; diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index aeedf62379..5a4f0515fc 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -120,6 +120,7 @@ LLButton::LLButton(const LLButton::Params& p) mFlashing( FALSE ), mCurGlowStrength(0.f), mNeedsHighlight(FALSE), + mMouseOver(false), mUnselectedLabel(p.label()), mSelectedLabel(p.label_selected()), mGLFont(p.font), @@ -504,7 +505,11 @@ void LLButton::onMouseEnter(S32 x, S32 y, MASK mask) LLUICtrl::onMouseEnter(x, y, mask); if (isInEnabledChain()) + { mNeedsHighlight = TRUE; + } + + mMouseOver = true; } void LLButton::onMouseLeave(S32 x, S32 y, MASK mask) @@ -512,6 +517,7 @@ void LLButton::onMouseLeave(S32 x, S32 y, MASK mask) LLUICtrl::onMouseLeave(x, y, mask); mNeedsHighlight = FALSE; + mMouseOver = true; } void LLButton::setHighlight(bool b) @@ -565,14 +571,10 @@ void LLButton::draw() } // Unselected image assignments - S32 local_mouse_x; - S32 local_mouse_y; - LLUI::getMousePositionLocal(this, &local_mouse_x, &local_mouse_y); - bool enabled = isInEnabledChain(); bool pressed = pressed_by_keyboard - || (hasMouseCapture() && pointInView(local_mouse_x, local_mouse_y)) + || (hasMouseCapture() && mMouseOver) || mForcePressedState; bool selected = getToggleState(); diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h index f4af19b696..5f25084b35 100644 --- a/indra/llui/llbutton.h +++ b/indra/llui/llbutton.h @@ -356,6 +356,7 @@ private: BOOL mCommitOnReturn; BOOL mFadeWhenDisabled; bool mForcePressedState; + bool mMouseOver; LLFrameTimer mFlashingTimer; }; diff --git a/indra/llui/llcallbackmap.h b/indra/llui/llcallbackmap.h index 97b1e2fc50..60c4fc6b6d 100644 --- a/indra/llui/llcallbackmap.h +++ b/indra/llui/llcallbackmap.h @@ -35,12 +35,13 @@ #include <map> #include <string> +#include <boost/function.hpp> class LLCallbackMap { public: // callback definition. - typedef void* (*callback_t)(void* data); + typedef boost::function<void* (void* data)> callback_t; typedef std::map<std::string, LLCallbackMap> map_t; typedef map_t::iterator map_iter_t; diff --git a/indra/llui/llcheckboxctrl.cpp b/indra/llui/llcheckboxctrl.cpp index 3d32157406..0c524cd470 100644 --- a/indra/llui/llcheckboxctrl.cpp +++ b/indra/llui/llcheckboxctrl.cpp @@ -81,17 +81,6 @@ LLCheckBoxCtrl::LLCheckBoxCtrl(const LLCheckBoxCtrl::Params& p) // must be big enough to hold all children setUseBoundingRect(TRUE); - // Label (add a little space to make sure text actually renders) - const S32 FUDGE = 10; - S32 text_width = mFont->getWidth( p.label ) + FUDGE; - S32 text_height = llround(mFont->getLineHeight()); - LLRect label_rect; - label_rect.setOriginAndSize( - llcheckboxctrl_hpad + llcheckboxctrl_btn_size + llcheckboxctrl_spacing, - llcheckboxctrl_vpad + 1, // padding to get better alignment - text_width + llcheckboxctrl_hpad, - text_height ); - // *HACK Get rid of this with SL-55508... // this allows blank check boxes and radio boxes for now std::string local_label = p.label; @@ -101,7 +90,6 @@ LLCheckBoxCtrl::LLCheckBoxCtrl(const LLCheckBoxCtrl::Params& p) } LLTextBox::Params tbparams = p.label_text; - tbparams.rect(label_rect); tbparams.initial_value(local_label); if (p.font.isProvided()) { @@ -111,6 +99,17 @@ LLCheckBoxCtrl::LLCheckBoxCtrl(const LLCheckBoxCtrl::Params& p) mLabel = LLUICtrlFactory::create<LLTextBox> (tbparams); addChild(mLabel); + S32 text_width = mLabel->getTextBoundingRect().getWidth(); + S32 text_height = llround(mFont->getLineHeight()); + LLRect label_rect; + label_rect.setOriginAndSize( + llcheckboxctrl_hpad + llcheckboxctrl_btn_size + llcheckboxctrl_spacing, + llcheckboxctrl_vpad + 1, // padding to get better alignment + text_width + llcheckboxctrl_hpad, + text_height ); + mLabel->setShape(label_rect); + + // Button // Note: button cover the label by extending all the way to the right. LLRect btn_rect; @@ -190,8 +189,7 @@ void LLCheckBoxCtrl::reshape(S32 width, S32 height, BOOL called_from_parent) static LLUICachedControl<S32> llcheckboxctrl_vpad ("UICheckboxctrlVPad", 0); static LLUICachedControl<S32> llcheckboxctrl_btn_size ("UICheckboxctrlBtnSize", 0); - const S32 FUDGE = 10; - S32 text_width = mFont->getWidth( mLabel->getText() ) + FUDGE; + S32 text_width = mLabel->getTextBoundingRect().getWidth(); S32 text_height = llround(mFont->getLineHeight()); LLRect label_rect; label_rect.setOriginAndSize( @@ -199,7 +197,7 @@ void LLCheckBoxCtrl::reshape(S32 width, S32 height, BOOL called_from_parent) llcheckboxctrl_vpad, text_width, text_height ); - mLabel->setRect(label_rect); + mLabel->setShape(label_rect); LLRect btn_rect; btn_rect.setOriginAndSize( @@ -207,7 +205,7 @@ void LLCheckBoxCtrl::reshape(S32 width, S32 height, BOOL called_from_parent) llcheckboxctrl_vpad, llcheckboxctrl_btn_size + llcheckboxctrl_spacing + text_width, llmax( text_height, llcheckboxctrl_btn_size() ) ); - mButton->setRect( btn_rect ); + mButton->setShape( btn_rect ); LLUICtrl::reshape(width, height, called_from_parent); } diff --git a/indra/llui/lldockablefloater.cpp b/indra/llui/lldockablefloater.cpp index 3d8670fef2..f9983278d1 100644 --- a/indra/llui/lldockablefloater.cpp +++ b/indra/llui/lldockablefloater.cpp @@ -49,12 +49,13 @@ void LLDockableFloater::init(LLDockableFloater* thiz) thiz->setCanClose(TRUE); thiz->setCanDock(true); thiz->setCanMinimize(TRUE); + thiz->setOverlapsScreenChannel(false); + thiz->mForceDocking = false; } LLDockableFloater::LLDockableFloater(LLDockControl* dockControl, const LLSD& key, const Params& params) : LLFloater(key, params), mDockControl(dockControl), mUniqueDocking(true) - , mOverlapsScreenChannel(false) { init(this); mUseTongue = true; @@ -81,6 +82,12 @@ LLDockableFloater::~LLDockableFloater() BOOL LLDockableFloater::postBuild() { + // Remember we should force docking when the floater is opened for the first time + if (mIsDockedStateForcedCallback != NULL && mIsDockedStateForcedCallback()) + { + mForceDocking = true; + } + mDockTongue = LLUI::getUIImage("windows/Flyout_Pointer.png"); LLFloater::setDocked(true); return LLView::postBuild(); @@ -134,6 +141,14 @@ void LLDockableFloater::resetInstance() void LLDockableFloater::setVisible(BOOL visible) { + // Force docking if requested + if (visible && mForceDocking) + { + setCanDock(true); + setDocked(true); + mForceDocking = false; + } + if(visible && isDocked()) { resetInstance(); diff --git a/indra/llui/lldockablefloater.h b/indra/llui/lldockablefloater.h index 2b1ce99ae2..054d59b984 100644 --- a/indra/llui/lldockablefloater.h +++ b/indra/llui/lldockablefloater.h @@ -130,6 +130,10 @@ protected: void setDockControl(LLDockControl* dockControl); const LLUIImagePtr& getDockTongue(); + // Checks if docking should be forced. + // It may be useful e.g. if floater created in mouselook mode (see EXT-5609) + boost::function<BOOL ()> mIsDockedStateForcedCallback; + private: std::auto_ptr<LLDockControl> mDockControl; LLUIImagePtr mDockTongue; @@ -143,6 +147,9 @@ private: bool mUseTongue; bool mOverlapsScreenChannel; + + // Force docking when the floater is being shown for the first time. + bool mForceDocking; }; #endif /* LL_DOCKABLEFLOATER_H */ diff --git a/indra/llui/lldraghandle.cpp b/indra/llui/lldraghandle.cpp index 9f83fcca35..b52cb2b751 100644 --- a/indra/llui/lldraghandle.cpp +++ b/indra/llui/lldraghandle.cpp @@ -113,7 +113,7 @@ void LLDragHandleTop::setTitle(const std::string& title) params.follows.flags(FOLLOWS_TOP | FOLLOWS_LEFT | FOLLOWS_RIGHT); params.font_shadow(LLFontGL::DROP_SHADOW_SOFT); params.use_ellipses = true; - params.allow_html = false; //cancel URL replacement in floater title + params.parse_urls = false; //cancel URL replacement in floater title mTitleBox = LLUICtrlFactory::create<LLTextBox> (params); addChild( mTitleBox ); } diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp index 3c79da64f9..8de44455de 100644 --- a/indra/llui/llflatlistview.cpp +++ b/indra/llui/llflatlistview.cpp @@ -610,8 +610,14 @@ void LLFlatListView::onItemMouseClick(item_pair_t* item_pair, MASK mask) return; } - if (!(mask & MASK_CONTROL) || !mMultipleSelection) resetSelection(); + //no need to do additional commit on selection reset + if (!(mask & MASK_CONTROL) || !mMultipleSelection) resetSelection(true); + + //only CTRL usage allows to deselect an item, usual clicking on an item cannot deselect it + if (mask & MASK_CONTROL) selectItemPair(item_pair, select_item); + else + selectItemPair(item_pair, true); } void LLFlatListView::onItemRightMouseClick(item_pair_t* item_pair, MASK mask) @@ -663,6 +669,14 @@ BOOL LLFlatListView::handleKeyHere(KEY key, MASK mask) } break; } + case KEY_ESCAPE: + { + if (mask == MASK_NONE) + { + setFocus(FALSE); // pass focus to the game area (EXT-8357) + } + break; + } default: break; } @@ -778,6 +792,18 @@ bool LLFlatListView::selectItemPair(item_pair_t* item_pair, bool select) return true; } +void LLFlatListView::scrollToShowFirstSelectedItem() +{ + if (!mSelectedItemPairs.size()) return; + + LLRect selected_rc = mSelectedItemPairs.front()->first->getRect(); + + if (selected_rc.isValid()) + { + scrollToShowRect(selected_rc); + } +} + LLRect LLFlatListView::getLastSelectedItemRect() { if (!mSelectedItemPairs.size()) @@ -1060,26 +1086,7 @@ void LLFlatListView::setNoItemsCommentVisible(bool visible) const { if (mNoItemsCommentTextbox) { - if (visible) - { -/* -// *NOTE: MA 2010-02-04 -// Deprecated after params of the comment text box were moved into widget (flat_list_view.xml) -// can be removed later if nothing happened. - // We have to update child rect here because of issues with rect after reshaping while creating LLTextbox - // It is possible to have invalid LLRect if Flat List is in LLAccordionTab - LLRect comment_rect = getLocalRect(); - - // To see comment correctly (EXT - 3244) in mNoItemsCommentTextbox we must get border width - // of LLFlatListView (@see getBorderWidth()) and stretch mNoItemsCommentTextbox to this width - // But getBorderWidth() returns 0 if LLFlatListView not visible. So we have to get border width - // from 'scroll_border' - LLViewBorder* scroll_border = getChild<LLViewBorder>("scroll border"); - comment_rect.stretch(-scroll_border->getBorderWidth()); - mNoItemsCommentTextbox->setRect(comment_rect); -*/ - } - mSelectedItemsBorder->setVisible(FALSE); + mSelectedItemsBorder->setVisible(!visible); mNoItemsCommentTextbox->setVisible(visible); } } diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h index 50d06fbc94..2c391fdf91 100644 --- a/indra/llui/llflatlistview.h +++ b/indra/llui/llflatlistview.h @@ -297,6 +297,7 @@ public: bool updateValue(const LLSD& old_value, const LLSD& new_value); + void scrollToShowFirstSelectedItem(); void selectFirstItem (); void selectLastItem (); diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 39a6855273..838f93d3f9 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -451,6 +451,14 @@ void LLFloater::enableResizeCtrls(bool enable) } } +void LLFloater::destroy() +{ + // LLFloaterReg should be synchronized with "dead" floater to avoid returning dead instance before + // it was deleted via LLMortician::updateClass(). See EXT-8458. + LLFloaterReg::removeInstance(mInstanceName, mKey); + die(); +} + // virtual LLFloater::~LLFloater() { @@ -2277,6 +2285,7 @@ void LLFloaterView::getMinimizePosition(S32 *left, S32 *bottom) S32 floater_header_size = default_params.header_height; static LLUICachedControl<S32> minimized_width ("UIMinimizedWidth", 0); LLRect snap_rect_local = getLocalSnapRect(); + snap_rect_local.mTop += mMinimizePositionVOffset; for(S32 col = snap_rect_local.mLeft; col < snap_rect_local.getWidth() - minimized_width; col += minimized_width) @@ -2374,6 +2383,19 @@ BOOL LLFloaterView::allChildrenClosed() return true; } +void LLFloaterView::shiftFloaters(S32 x_offset, S32 y_offset) +{ + for (child_list_const_iter_t it = getChildList()->begin(); it != getChildList()->end(); ++it) + { + LLFloater* floaterp = dynamic_cast<LLFloater*>(*it); + + if (floaterp && floaterp->isMinimized()) + { + floaterp->translate(x_offset, y_offset); + } + } +} + void LLFloaterView::refresh() { // Constrain children to be entirely on the screen diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 3ea035777c..e7d365238b 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -308,7 +308,7 @@ protected: BOOL getAutoFocus() const { return mAutoFocus; } LLDragHandle* getDragHandle() const { return mDragHandle; } - void destroy() { die(); } // Don't call this directly. You probably want to call closeFloater() + void destroy(); // Don't call this directly. You probably want to call closeFloater() virtual void onClickCloseBtn(); @@ -455,6 +455,7 @@ public: // Given a child of gFloaterView, make sure this view can fit entirely onscreen. void adjustToFitScreen(LLFloater* floater, BOOL allow_partial_outside); + void setMinimizePositionVerticalOffset(S32 offset) { mMinimizePositionVOffset = offset; } void getMinimizePosition( S32 *left, S32 *bottom); void restoreAll(); // un-minimize all floaters typedef std::set<LLView*> skip_list_t; @@ -471,6 +472,7 @@ public: // attempt to close all floaters void closeAllChildren(bool app_quitting); BOOL allChildrenClosed(); + void shiftFloaters(S32 x_offset, S32 y_offset); LLFloater* getFrontmost() const; LLFloater* getBackmost() const; @@ -490,6 +492,7 @@ private: BOOL mFocusCycleMode; S32 mSnapOffsetBottom; S32 mSnapOffsetRight; + S32 mMinimizePositionVOffset; }; // diff --git a/indra/llui/lllocalcliprect.cpp b/indra/llui/lllocalcliprect.cpp index 43c21e250c..805d5879f7 100644 --- a/indra/llui/lllocalcliprect.cpp +++ b/indra/llui/lllocalcliprect.cpp @@ -33,33 +33,8 @@ #include "lllocalcliprect.h" #include "llfontgl.h" -#include "llgl.h" #include "llui.h" -#include <stack> - -//--------------------------------------------------------------------------- -// LLScreenClipRect -// implementation class in screen space -//--------------------------------------------------------------------------- -class LLScreenClipRect -{ -public: - LLScreenClipRect(const LLRect& rect, BOOL enabled = TRUE); - virtual ~LLScreenClipRect(); - -private: - static void pushClipRect(const LLRect& rect); - static void popClipRect(); - static void updateScissorRegion(); - -private: - LLGLState mScissorState; - BOOL mEnabled; - - static std::stack<LLRect> sClipRectStack; -}; - /*static*/ std::stack<LLRect> LLScreenClipRect::sClipRectStack; @@ -70,9 +45,9 @@ LLScreenClipRect::LLScreenClipRect(const LLRect& rect, BOOL enabled) if (mEnabled) { pushClipRect(rect); + mScissorState.setEnabled(!sClipRectStack.empty()); + updateScissorRegion(); } - mScissorState.setEnabled(!sClipRectStack.empty()); - updateScissorRegion(); } LLScreenClipRect::~LLScreenClipRect() @@ -80,8 +55,8 @@ LLScreenClipRect::~LLScreenClipRect() if (mEnabled) { popClipRect(); + updateScissorRegion(); } - updateScissorRegion(); } //static @@ -131,16 +106,11 @@ void LLScreenClipRect::updateScissorRegion() // LLLocalClipRect //--------------------------------------------------------------------------- LLLocalClipRect::LLLocalClipRect(const LLRect& rect, BOOL enabled /* = TRUE */) -{ - LLRect screen(rect.mLeft + LLFontGL::sCurOrigin.mX, - rect.mTop + LLFontGL::sCurOrigin.mY, - rect.mRight + LLFontGL::sCurOrigin.mX, - rect.mBottom + LLFontGL::sCurOrigin.mY); - mScreenClipRect = new LLScreenClipRect(screen, enabled); -} +: LLScreenClipRect(LLRect(rect.mLeft + LLFontGL::sCurOrigin.mX, + rect.mTop + LLFontGL::sCurOrigin.mY, + rect.mRight + LLFontGL::sCurOrigin.mX, + rect.mBottom + LLFontGL::sCurOrigin.mY), enabled) +{} LLLocalClipRect::~LLLocalClipRect() -{ - delete mScreenClipRect; - mScreenClipRect = NULL; -} +{} diff --git a/indra/llui/lllocalcliprect.h b/indra/llui/lllocalcliprect.h index cd0c55ca72..36413f1496 100644 --- a/indra/llui/lllocalcliprect.h +++ b/indra/llui/lllocalcliprect.h @@ -31,7 +31,9 @@ #ifndef LLLOCALCLIPRECT_H #define LLLOCALCLIPRECT_H +#include "llgl.h" #include "llrect.h" // can't forward declare, it's templated +#include <stack> // Clip rendering to a specific rectangle using GL scissor // Just create one of these on the stack: @@ -39,15 +41,29 @@ // LLLocalClipRect(rect); // draw(); // } -class LLLocalClipRect +class LLScreenClipRect { public: - LLLocalClipRect(const LLRect& rect, BOOL enabled = TRUE); - ~LLLocalClipRect(); + LLScreenClipRect(const LLRect& rect, BOOL enabled = TRUE); + virtual ~LLScreenClipRect(); + +private: + static void pushClipRect(const LLRect& rect); + static void popClipRect(); + static void updateScissorRegion(); private: - // implementation class - class LLScreenClipRect* mScreenClipRect; + LLGLState mScissorState; + BOOL mEnabled; + + static std::stack<LLRect> sClipRectStack; +}; + +class LLLocalClipRect : public LLScreenClipRect +{ +public: + LLLocalClipRect(const LLRect& rect, BOOL enabled = TRUE); + ~LLLocalClipRect(); }; #endif diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index b4a1bcb7c5..46a7215707 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -58,6 +58,7 @@ #include "llbutton.h" #include "llfontgl.h" #include "llresmgr.h" +#include "lltrans.h" #include "llui.h" #include "llstl.h" @@ -218,6 +219,12 @@ void LLMenuItemGL::setValue(const LLSD& value) } //virtual +LLSD LLMenuItemGL::getValue() const +{ + return getLabel(); +} + +//virtual BOOL LLMenuItemGL::handleAcceleratorKey(KEY key, MASK mask) { if( getEnabled() && (!gKeyboard->getKeyRepeated(key) || mAllowKeyRepeat) && (key == mAcceleratorKey) && (mask == (mAcceleratorMask & MASK_NORMALKEYS)) ) @@ -922,6 +929,15 @@ void LLMenuItemCheckGL::setValue(const LLSD& value) } } +//virtual +LLSD LLMenuItemCheckGL::getValue() const +{ + // Get our boolean value from the view model. + // If we don't override this method then the implementation from + // LLMenuItemGL will return a string. (EXT-8501) + return LLUICtrl::getValue(); +} + // called to rebuild the draw label void LLMenuItemCheckGL::buildDrawLabel( void ) { @@ -2257,8 +2273,9 @@ void LLMenuGL::createSpilloverBranch() // technically, you can't tear off spillover menus, but we're passing the handle // along just to be safe LLMenuGL::Params p; + std::string label = LLTrans::getString("More"); p.name("More"); - p.label("More"); // *TODO: Translate + p.label(label); p.bg_color(mBackgroundColor); p.bg_visible(true); p.can_tear_off(false); @@ -2267,7 +2284,7 @@ void LLMenuGL::createSpilloverBranch() LLMenuItemBranchGL::Params branch_params; branch_params.name = "More"; - branch_params.label = "More"; // *TODO: Translate + branch_params.label = label; branch_params.branch = mSpilloverMenu; branch_params.font.style = "italic"; diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h index 7668f301ea..bf40163dac 100644 --- a/indra/llui/llmenugl.h +++ b/indra/llui/llmenugl.h @@ -95,6 +95,7 @@ public: // LLUICtrl overrides /*virtual*/ void setValue(const LLSD& value); + /*virtual*/ LLSD getValue() const; virtual BOOL handleAcceleratorKey(KEY key, MASK mask); @@ -321,6 +322,7 @@ public: virtual void onCommit( void ); virtual void setValue(const LLSD& value); + virtual LLSD getValue() const; // called to rebuild the draw label virtual void buildDrawLabel( void ); diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index 9e272a0949..7fa3c2cf65 100644 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -375,6 +375,7 @@ LLNotification::LLNotification(const LLSD& sd) : LLSD LLNotification::asLLSD() { LLSD output; + output["id"] = mId; output["name"] = mTemplatep->mName; output["form"] = getForm()->asLLSD(); output["substitutions"] = mSubstitutions; diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h index 8bfada0e71..1cdd744a68 100644 --- a/indra/llui/llnotifications.h +++ b/indra/llui/llnotifications.h @@ -353,6 +353,8 @@ public: } }; + LLNotificationResponderPtr getResponderPtr() { return mResponder; } + private: LLUUID mId; diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 9ebdcb87c6..0f769bd6dc 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -661,7 +661,7 @@ void LLPanel::childSetEnabled(const std::string& id, bool enabled) void LLPanel::childSetTentative(const std::string& id, bool tentative) { - LLView* child = findChild<LLView>(id); + LLUICtrl* child = findChild<LLUICtrl>(id); if (child) { child->setTentative(tentative); @@ -860,13 +860,16 @@ LLPanel *LLPanel::childGetVisibleTab(const std::string& id) const return NULL; } -static LLPanel *childGetVisibleTabWithHelp(LLView *parent) +LLPanel* LLPanel::childGetVisibleTabWithHelp() { LLView *child; - // look through immediate children first for an active tab with help - for (child = parent->getFirstChild(); child; child = parent->findNextSibling(child)) + bfs_tree_iterator_t it = beginTreeBFS(); + // skip ourselves + ++it; + for (; it != endTreeBFS(); ++it) { + child = *it; LLPanel *curTabPanel = NULL; // do we have a tab container? @@ -890,36 +893,21 @@ static LLPanel *childGetVisibleTabWithHelp(LLView *parent) } } - // then try a bit harder and recurse through all children - for (child = parent->getFirstChild(); child; child = parent->findNextSibling(child)) - { - if (child->getVisible()) - { - LLPanel* tab = ::childGetVisibleTabWithHelp(child); - if (tab) - { - return tab; - } - } - } - // couldn't find any active tabs with a help topic string return NULL; } -LLPanel *LLPanel::childGetVisibleTabWithHelp() -{ - // find a visible tab with a help topic (to determine help context) - return ::childGetVisibleTabWithHelp(this); -} -static LLPanel *childGetVisiblePanelWithHelp(LLView *parent) +LLPanel *LLPanel::childGetVisiblePanelWithHelp() { LLView *child; - // look through immediate children first for an active panel with help - for (child = parent->getFirstChild(); child; child = parent->findNextSibling(child)) + bfs_tree_iterator_t it = beginTreeBFS(); + // skip ourselves + ++it; + for (; it != endTreeBFS(); ++it) { + child = *it; // do we have a panel with a help topic? LLPanel *panel = dynamic_cast<LLPanel *>(child); if (panel && panel->getVisible() && !panel->getHelpTopic().empty()) @@ -928,39 +916,19 @@ static LLPanel *childGetVisiblePanelWithHelp(LLView *parent) } } - // then try a bit harder and recurse through all children - for (child = parent->getFirstChild(); child; child = parent->findNextSibling(child)) - { - if (child->getVisible()) - { - LLPanel* panel = ::childGetVisiblePanelWithHelp(child); - if (panel) - { - return panel; - } - } - } - // couldn't find any active panels with a help topic string return NULL; } -LLPanel *LLPanel::childGetVisiblePanelWithHelp() +void LLPanel::childSetAction(const std::string& id, const commit_signal_t::slot_type& function) { - // find a visible tab with a help topic (to determine help context) - return ::childGetVisiblePanelWithHelp(this); -} - -void LLPanel::childSetPrevalidate(const std::string& id, bool (*func)(const LLWString &) ) -{ - LLLineEditor* child = findChild<LLLineEditor>(id); - if (child) + LLButton* button = findChild<LLButton>(id); + if (button) { - child->setPrevalidate(func); + button->setClickedCallback(function); } } - void LLPanel::childSetAction(const std::string& id, boost::function<void(void*)> function, void* value) { LLButton* button = findChild<LLButton>(id); diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h index 03e3dc0c0e..784054cd86 100644 --- a/indra/llui/llpanel.h +++ b/indra/llui/llpanel.h @@ -170,6 +170,7 @@ public: std::string getString(const std::string& name) const; // ** Wrappers for setting child properties by name ** -TomY + // WARNING: These are deprecated, please use getChild<T>("name")->doStuff() idiom instead // LLView void childSetVisible(const std::string& name, bool visible); @@ -233,7 +234,8 @@ public: void childSetPrevalidate(const std::string& id, bool (*func)(const LLWString &) ); // LLButton - void childSetAction(const std::string& id, boost::function<void(void*)> function, void* value = NULL); + void childSetAction(const std::string& id, boost::function<void(void*)> function, void* value); + void childSetAction(const std::string& id, const commit_signal_t::slot_type& function); // LLTextBox void childSetActionTextbox(const std::string& id, boost::function<void(void*)> function, void* value = NULL); diff --git a/indra/llui/llresmgr.cpp b/indra/llui/llresmgr.cpp index ed870d46d5..9158bc70f5 100644 --- a/indra/llui/llresmgr.cpp +++ b/indra/llui/llresmgr.cpp @@ -298,11 +298,11 @@ void LLResMgr::getIntegerString( std::string& output, S32 input ) const { if (fraction == remaining_count) { - fraction_string = llformat("%d%c", fraction, getThousandsSeparator()); + fraction_string = llformat_to_utf8("%d%c", fraction, getThousandsSeparator()); } else { - fraction_string = llformat("%3.3d%c", fraction, getThousandsSeparator()); + fraction_string = llformat_to_utf8("%3.3d%c", fraction, getThousandsSeparator()); } output = fraction_string + output; } diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index d4d161f2c9..bb43c19c2c 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -135,6 +135,7 @@ LLScrollListCtrl::Params::Params() search_column("search_column", 0), sort_column("sort_column", -1), sort_ascending("sort_ascending", true), + mouse_wheel_opaque("mouse_wheel_opaque", false), commit_on_keyboard_movement("commit_on_keyboard_movement", true), heading_height("heading_height"), page_lines("page_lines", 0), @@ -163,6 +164,7 @@ LLScrollListCtrl::LLScrollListCtrl(const LLScrollListCtrl::Params& p) : LLUICtrl(p), mLineHeight(0), mScrollLines(0), + mMouseWheelOpaque(p.mouse_wheel_opaque), mPageLines(p.page_lines), mMaxSelectable(0), mAllowKeyboardMovement(TRUE), @@ -1536,6 +1538,12 @@ BOOL LLScrollListCtrl::handleScrollWheel(S32 x, S32 y, S32 clicks) BOOL handled = FALSE; // Pretend the mouse is over the scrollbar handled = mScrollbar->handleScrollWheel( 0, 0, clicks ); + + if (mMouseWheelOpaque) + { + return TRUE; + } + return handled; } diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h index 1f0ef585db..19cb7e2bfe 100644 --- a/indra/llui/llscrolllistctrl.h +++ b/indra/llui/llscrolllistctrl.h @@ -102,7 +102,8 @@ public: { // behavioral flags Optional<bool> multi_select, - commit_on_keyboard_movement; + commit_on_keyboard_movement, + mouse_wheel_opaque; // display flags Optional<bool> has_border, @@ -449,6 +450,7 @@ private: BOOL mCommitOnSelectionChange; BOOL mSelectionChanged; BOOL mNeedsScroll; + BOOL mMouseWheelOpaque; BOOL mCanSelect; const BOOL mDisplayColumnHeaders; BOOL mColumnsDirty; diff --git a/indra/llui/llsliderctrl.cpp b/indra/llui/llsliderctrl.cpp index 04958075db..1c410cc1aa 100644 --- a/indra/llui/llsliderctrl.cpp +++ b/indra/llui/llsliderctrl.cpp @@ -235,6 +235,10 @@ void LLSliderCtrl::updateText() std::string text = llformat(format.c_str(), displayed_value); if( mEditor ) { + // Setting editor text here to "" before using actual text is here because if text which + // is set is the same as the one which is actually typed into lineeditor, LLLineEditor::setText() + // will exit at it's beginning, so text for revert on escape won't be saved. (EXT-8536) + mEditor->setText( LLStringUtil::null ); mEditor->setText( text ); } else diff --git a/indra/llui/llstyle.cpp b/indra/llui/llstyle.cpp index b8f93b6a0e..d63f67b4c1 100644 --- a/indra/llui/llstyle.cpp +++ b/indra/llui/llstyle.cpp @@ -42,6 +42,8 @@ LLStyle::Params::Params() : visible("visible", true), drop_shadow("drop_shadow", LLFontGL::NO_SHADOW), color("color", LLColor4::black), + readonly_color("readonly_color", LLColor4::black), + selected_color("selected_color", LLColor4::black), font("font", LLFontGL::getFontMonospace()), image("image"), link_href("href") @@ -49,12 +51,10 @@ LLStyle::Params::Params() LLStyle::LLStyle(const LLStyle::Params& p) -: mItalic(FALSE), - mBold(FALSE), - mUnderline(FALSE), - mVisible(p.visible), - mColor(p.color()), - mReadOnlyColor(p.readonly_color()), +: mVisible(p.visible), + mColor(p.color), + mReadOnlyColor(p.readonly_color), + mSelectedColor(p.selected_color), mFont(p.font()), mLink(p.link_href), mDropShadow(p.drop_shadow), diff --git a/indra/llui/llstyle.h b/indra/llui/llstyle.h index 2067e8e8be..44d9da7a1e 100644 --- a/indra/llui/llstyle.h +++ b/indra/llui/llstyle.h @@ -47,7 +47,8 @@ public: Optional<bool> visible; Optional<LLFontGL::ShadowType> drop_shadow; Optional<LLUIColor> color, - readonly_color; + readonly_color, + selected_color; Optional<const LLFontGL*> font; Optional<LLUIImage*> image; Optional<std::string> link_href; @@ -55,11 +56,14 @@ public: }; LLStyle(const Params& p = Params()); public: - const LLColor4& getColor() const { return mColor; } - void setColor(const LLColor4 &color) { mColor = color; } + const LLUIColor& getColor() const { return mColor; } + void setColor(const LLUIColor &color) { mColor = color; } - const LLColor4& getReadOnlyColor() const { return mReadOnlyColor; } - void setReadOnlyColor(const LLColor4& color) { mReadOnlyColor = color; } + const LLUIColor& getReadOnlyColor() const { return mReadOnlyColor; } + void setReadOnlyColor(const LLUIColor& color) { mReadOnlyColor = color; } + + const LLUIColor& getSelectedColor() const { return mSelectedColor; } + void setSelectedColor(const LLUIColor& color) { mSelectedColor = color; } BOOL isVisible() const; void setVisible(BOOL is_visible); @@ -79,41 +83,36 @@ public: BOOL isImage() const { return mImagep.notNull(); } - // inlined here to make it easier to compare to member data below. -MG bool operator==(const LLStyle &rhs) const { return mVisible == rhs.mVisible && mColor == rhs.mColor && mReadOnlyColor == rhs.mReadOnlyColor + && mSelectedColor == rhs.mSelectedColor && mFont == rhs.mFont && mLink == rhs.mLink && mImagep == rhs.mImagep - && mItalic == rhs.mItalic - && mBold == rhs.mBold - && mUnderline == rhs.mUnderline && mDropShadow == rhs.mDropShadow; } bool operator!=(const LLStyle& rhs) const { return !(*this == rhs); } public: - BOOL mItalic; - BOOL mBold; - BOOL mUnderline; LLFontGL::ShadowType mDropShadow; protected: ~LLStyle() { } private: - BOOL mVisible; - LLUIColor mColor; - LLUIColor mReadOnlyColor; - std::string mFontName; - const LLFontGL* mFont; // cached for performance - std::string mLink; - LLUIImagePtr mImagep; + BOOL mVisible; + LLUIColor mColor; + LLUIColor mReadOnlyColor; + LLUIColor mSelectedColor; + std::string mFontName; + const LLFontGL* mFont; + std::string mLink; + LLUIImagePtr mImagep; }; typedef LLPointer<LLStyle> LLStyleSP; diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index ed03645944..3792f18c97 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -155,6 +155,8 @@ LLTextBase::Params::Params() bg_readonly_color("bg_readonly_color"), bg_writeable_color("bg_writeable_color"), bg_focus_color("bg_focus_color"), + text_selected_color("text_selected_color"), + bg_selected_color("bg_selected_color"), allow_scroll("allow_scroll", true), plain_text("plain_text",false), track_end("track_end", false), @@ -167,11 +169,12 @@ LLTextBase::Params::Params() font_shadow("font_shadow"), wrap("wrap"), use_ellipses("use_ellipses", false), - allow_html("allow_html", false), + parse_urls("parse_urls", false), parse_highlights("parse_highlights", false) { addSynonym(track_end, "track_bottom"); addSynonym(wrap, "word_wrap"); + addSynonym(parse_urls, "allow_html"); } @@ -190,6 +193,8 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p) mWriteableBgColor(p.bg_writeable_color), mReadOnlyBgColor(p.bg_readonly_color), mFocusBgColor(p.bg_focus_color), + mTextSelectedColor(p.text_selected_color), + mSelectedBGColor(p.bg_selected_color), mReflowIndex(S32_MAX), mCursorPos( 0 ), mScrollNeeded(FALSE), @@ -209,7 +214,7 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p) mPlainText ( p.plain_text ), mWordWrap(p.wrap), mUseEllipses( p.use_ellipses ), - mParseHTML(p.allow_html), + mParseHTML(p.parse_urls), mParseHighlights(p.parse_highlights), mBGVisible(p.bg_visible), mScroller(NULL), @@ -269,9 +274,6 @@ void LLTextBase::initFromParams(const LLTextBase::Params& p) { mReadOnly = p.read_only; } - - // HACK: text editors always need to be enabled so that we can scroll - LLView::setEnabled(true); } bool LLTextBase::truncate() @@ -301,11 +303,14 @@ bool LLTextBase::truncate() const LLStyle::Params& LLTextBase::getDefaultStyleParams() { + //FIXME: convert mDefaultStyle to a flyweight http://www.boost.org/doc/libs/1_40_0/libs/flyweight/doc/index.html + //and eliminate color member values if (mStyleDirty) { mDefaultStyle - .color(LLUIColor(&mFgColor)) + .color(LLUIColor(&mFgColor)) // pass linked color instead of copy of mFGColor .readonly_color(LLUIColor(&mReadOnlyFgColor)) + .selected_color(LLUIColor(&mTextSelectedColor)) .font(mDefaultFont) .drop_shadow(mFontShadow); mStyleDirty = false; @@ -403,7 +408,7 @@ void LLTextBase::drawSelectionBackground() // Draw the selection box (we're using a box instead of reversing the colors on the selected text). gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - const LLColor4& color = mReadOnly ? mReadOnlyFgColor.get() : mFgColor.get(); + const LLColor4& color = mSelectedBGColor; F32 alpha = hasFocus() ? 0.7f : 0.3f; alpha *= getDrawContext().mAlpha; LLColor4 selection_color(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], alpha); @@ -443,7 +448,6 @@ void LLTextBase::drawCursor() } else { - //segmentp = mSegments.back(); return; } @@ -477,21 +481,8 @@ void LLTextBase::drawCursor() { LLColor4 text_color; const LLFontGL* fontp; - if (segmentp) - { text_color = segmentp->getColor(); fontp = segmentp->getStyle()->getFont(); - } - else if (mReadOnly) - { - text_color = mReadOnlyFgColor.get(); - fontp = mDefaultFont; - } - else - { - text_color = mFgColor.get(); - fontp = mDefaultFont; - } fontp->render(text, mCursorPos, cursor_rect, LLColor4(1.f - text_color.mV[VRED], 1.f - text_color.mV[VGREEN], 1.f - text_color.mV[VBLUE], alpha), LLFontGL::LEFT, mVAlign, @@ -1021,21 +1012,26 @@ void LLTextBase::draw() if (mBGVisible) { // clip background rect against extents, if we support scrolling - LLLocalClipRect clip(doc_rect, mScroller != NULL); - + LLRect bg_rect = mVisibleTextRect; + if (mScroller) + { + bg_rect.intersectWith(doc_rect); + } LLColor4 bg_color = mReadOnly ? mReadOnlyBgColor.get() : hasFocus() ? mFocusBgColor.get() : mWriteableBgColor.get(); - gl_rect_2d(mVisibleTextRect, bg_color, TRUE); + gl_rect_2d(doc_rect, bg_color, TRUE); } // draw document view LLUICtrl::draw(); { - // only clip if we support scrolling (mScroller != NULL) + // only clip if we support scrolling... + // since convention is that text boxes never vertically truncate their contents + // regardless of rect bounds LLLocalClipRect clip(doc_rect, mScroller != NULL); drawSelectionBackground(); drawText(); @@ -1499,23 +1495,32 @@ void LLTextBase::getSegmentAndOffset( S32 startpos, segment_set_t::iterator* seg LLTextBase::segment_set_t::iterator LLTextBase::getSegIterContaining(S32 index) { + static LLPointer<LLIndexSegment> index_segment = new LLIndexSegment(); + if (index > getLength()) { return mSegments.end(); } // when there are no segments, we return the end iterator, which must be checked by caller if (mSegments.size() <= 1) { return mSegments.begin(); } - segment_set_t::iterator it = mSegments.upper_bound(new LLIndexSegment(index)); + //FIXME: avoid operator new somehow (without running into refcount problems) + index_segment->setStart(index); + index_segment->setEnd(index); + segment_set_t::iterator it = mSegments.upper_bound(index_segment); return it; } LLTextBase::segment_set_t::const_iterator LLTextBase::getSegIterContaining(S32 index) const { + static LLPointer<LLIndexSegment> index_segment = new LLIndexSegment(); + if (index > getLength()) { return mSegments.end(); } // when there are no segments, we return the end iterator, which must be checked by caller if (mSegments.size() <= 1) { return mSegments.begin(); } - LLTextBase::segment_set_t::const_iterator it = mSegments.upper_bound(new LLIndexSegment(index)); + index_segment->setStart(index); + index_segment->setEnd(index); + LLTextBase::segment_set_t::const_iterator it = mSegments.upper_bound(index_segment); return it; } @@ -1651,7 +1656,7 @@ void LLTextBase::appendTextImpl(const std::string &new_text, const LLStyle::Para } else { - appendAndHighlightText(match.getLabel(), part, link_params); + appendAndHighlightText(match.getLabel(), part, link_params, match.underlineOnHoverOnly()); // set the tooltip for the Url label if (! match.getTooltip().empty()) @@ -1734,7 +1739,7 @@ void LLTextBase::appendWidget(const LLInlineViewSegment::Params& params, const s insertStringNoUndo(getLength(), widget_wide_text, &segments); } -void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params) +void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params, bool underline_on_hover_only) { // Save old state S32 selection_start = mSelectionStart; @@ -1765,7 +1770,17 @@ void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 hig S32 cur_length = getLength(); LLStyleConstSP sp(new LLStyle(highlight_params)); - LLTextSegmentPtr segmentp = new LLNormalTextSegment(sp, cur_length, cur_length + wide_text.size(), *this); + LLTextSegmentPtr segmentp; + if(underline_on_hover_only) + { + highlight_params.font.style("NORMAL"); + LLStyleConstSP normal_sp(new LLStyle(highlight_params)); + segmentp = new LLOnHoverChangeableTextSegment(sp, normal_sp, cur_length, cur_length + wide_text.size(), *this); + } + else + { + segmentp = new LLNormalTextSegment(sp, cur_length, cur_length + wide_text.size(), *this); + } segment_vec_t segments; segments.push_back(segmentp); insertStringNoUndo(cur_length, wide_text, &segments); @@ -1780,7 +1795,17 @@ void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 hig S32 segment_start = old_length; S32 segment_end = old_length + wide_text.size(); LLStyleConstSP sp(new LLStyle(style_params)); + if (underline_on_hover_only) + { + LLStyle::Params normal_style_params(style_params); + normal_style_params.font.style("NORMAL"); + LLStyleConstSP normal_sp(new LLStyle(normal_style_params)); + segments.push_back(new LLOnHoverChangeableTextSegment(sp, normal_sp, segment_start, segment_end, *this )); + } + else + { segments.push_back(new LLNormalTextSegment(sp, segment_start, segment_end, *this )); + } insertStringNoUndo(getLength(), wide_text, &segments); } @@ -1804,7 +1829,7 @@ void LLTextBase::appendAndHighlightTextImpl(const std::string &new_text, S32 hig } } -void LLTextBase::appendAndHighlightText(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params) +void LLTextBase::appendAndHighlightText(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params, bool underline_on_hover_only) { if (new_text.empty()) return; @@ -1816,7 +1841,7 @@ void LLTextBase::appendAndHighlightText(const std::string &new_text, S32 highlig if(pos!=start) { std::string str = std::string(new_text,start,pos-start); - appendAndHighlightTextImpl(str,highlight_part, style_params); + appendAndHighlightTextImpl(str,highlight_part, style_params, underline_on_hover_only); } appendLineBreakSegment(style_params); start = pos+1; @@ -1824,7 +1849,7 @@ void LLTextBase::appendAndHighlightText(const std::string &new_text, S32 highlig } std::string str = std::string(new_text,start,new_text.length()-start); - appendAndHighlightTextImpl(str,highlight_part, style_params); + appendAndHighlightTextImpl(str,highlight_part, style_params, underline_on_hover_only); } @@ -2278,10 +2303,17 @@ void LLTextBase::updateRects() // allow horizontal scrolling? // if so, use entire width of text contents // otherwise, stop at width of mVisibleTextRect + //FIXME: consider use of getWordWrap() instead doc_rect.mRight = mScroller ? llmax(mVisibleTextRect.getWidth(), mTextBoundingRect.mRight) : mVisibleTextRect.getWidth(); + if (!mScroller) + { + // push doc rect to top of text widget + doc_rect.translate(0, mVisibleTextRect.getHeight() - doc_rect.mTop); + } + mDocumentView->setShape(doc_rect); //update mVisibleTextRect *after* mDocumentView has been resized @@ -2481,7 +2513,7 @@ F32 LLNormalTextSegment::drawClippedSegment(S32 seg_start, S32 seg_end, S32 sele font->render(text, start, rect, - LLColor4( 1.f - color.mV[0], 1.f - color.mV[1], 1.f - color.mV[2], 1.f ), + mStyle->getSelectedColor().get(), LLFontGL::LEFT, mEditor.mVAlign, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, @@ -2678,6 +2710,33 @@ void LLNormalTextSegment::dump() const llendl; } +// +// LLOnHoverChangeableTextSegment +// + +LLOnHoverChangeableTextSegment::LLOnHoverChangeableTextSegment( LLStyleConstSP style, LLStyleConstSP normal_style, S32 start, S32 end, LLTextBase& editor ): + LLNormalTextSegment(normal_style, start, end, editor), + mHoveredStyle(style), + mNormalStyle(normal_style){} + +/*virtual*/ +F32 LLOnHoverChangeableTextSegment::draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect) +{ + F32 result = LLNormalTextSegment::draw(start, end, selection_start, selection_end, draw_rect); + if (end == mEnd - mStart) + { + mStyle = mNormalStyle; + } + return result; +} + +/*virtual*/ +BOOL LLOnHoverChangeableTextSegment::handleHover(S32 x, S32 y, MASK mask) +{ + mStyle = mHoveredStyle; + return LLNormalTextSegment::handleHover(x, y, mask); +} + // // LLInlineViewSegment @@ -2786,9 +2845,9 @@ F32 LLLineBreakTextSegment::draw(S32 start, S32 end, S32 selection_start, S32 se } LLImageTextSegment::LLImageTextSegment(LLStyleConstSP style,S32 pos,class LLTextBase& editor) - :LLTextSegment(pos,pos+1) - ,mStyle( style ) - ,mEditor(editor) +: LLTextSegment(pos,pos+1), + mStyle( style ), + mEditor(editor) { } diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 4b0eeeb7d6..db010d1cf6 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -145,10 +145,25 @@ protected: boost::signals2::connection mImageLoadedConnection; }; +// Text segment that changes it's style depending of mouse pointer position ( is it inside or outside segment) +class LLOnHoverChangeableTextSegment : public LLNormalTextSegment +{ +public: + LLOnHoverChangeableTextSegment( LLStyleConstSP style, LLStyleConstSP normal_style, S32 start, S32 end, LLTextBase& editor ); + /*virtual*/ F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRect& draw_rect); + /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); +protected: + // Style used for text when mouse pointer is over segment + LLStyleConstSP mHoveredStyle; + // Style used for text when mouse pointer is outside segment + LLStyleConstSP mNormalStyle; + +}; + class LLIndexSegment : public LLTextSegment { public: - LLIndexSegment(S32 pos) : LLTextSegment(pos, pos) {} + LLIndexSegment() : LLTextSegment(0, 0) {} }; class LLInlineViewSegment : public LLTextSegment @@ -241,7 +256,9 @@ public: text_readonly_color, bg_readonly_color, bg_writeable_color, - bg_focus_color; + bg_focus_color, + text_selected_color, + bg_selected_color; Optional<bool> bg_visible, border_visible, @@ -251,7 +268,7 @@ public: plain_text, wrap, use_ellipses, - allow_html, + parse_urls, parse_highlights, clip_partial; @@ -441,7 +458,7 @@ protected: S32 insertStringNoUndo(S32 pos, const LLWString &wstr, segment_vec_t* segments = NULL); // returns num of chars actually inserted S32 removeStringNoUndo(S32 pos, S32 length); S32 overwriteCharNoUndo(S32 pos, llwchar wc); - void appendAndHighlightText(const std::string &new_text, S32 highlight_part, const LLStyle::Params& stylep); + void appendAndHighlightText(const std::string &new_text, S32 highlight_part, const LLStyle::Params& stylep, bool underline_on_hover_only = false); // manage segments @@ -484,7 +501,7 @@ protected: void replaceUrlLabel(const std::string &url, const std::string &label); void appendTextImpl(const std::string &new_text, const LLStyle::Params& input_params = LLStyle::Params()); - void appendAndHighlightTextImpl(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params); + void appendAndHighlightTextImpl(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params, bool underline_on_hover_only = false); protected: @@ -507,6 +524,8 @@ protected: LLUIColor mWriteableBgColor; LLUIColor mReadOnlyBgColor; LLUIColor mFocusBgColor; + LLUIColor mTextSelectedColor; + LLUIColor mSelectedBGColor; // cursor S32 mCursorPos; // I-beam is just after the mCursorPos-th character. diff --git a/indra/llui/lltextbox.cpp b/indra/llui/lltextbox.cpp index a1f5b5726b..686179b94e 100644 --- a/indra/llui/lltextbox.cpp +++ b/indra/llui/lltextbox.cpp @@ -119,6 +119,17 @@ BOOL LLTextBox::handleHover(S32 x, S32 y, MASK mask) return handled; } +void LLTextBox::setEnabled(BOOL enabled) +{ + // just treat enabled as read-only flag + bool read_only = !enabled; + if (read_only != mReadOnly) + { + LLTextBase::setReadOnly(read_only); + updateSegments(); + } +} + void LLTextBox::setText(const LLStringExplicit& text , const LLStyle::Params& input_params ) { // does string argument insertion diff --git a/indra/llui/lltextbox.h b/indra/llui/lltextbox.h index 3a045534d3..b2ccde94c6 100644 --- a/indra/llui/lltextbox.h +++ b/indra/llui/lltextbox.h @@ -58,6 +58,8 @@ public: /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask); + /*virtual*/ void setEnabled(BOOL enabled); + /*virtual*/ void setText( const LLStringExplicit& text, const LLStyle::Params& input_params = LLStyle::Params() ); void setRightAlign() { mHAlign = LLFontGL::RIGHT; } diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 130cda3784..482a53e4af 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -289,6 +289,9 @@ void LLTextEditor::initFromParams( const LLTextEditor::Params& p) { LLTextBase::initFromParams(p); + // HACK: text editors always need to be enabled so that we can scroll + LLView::setEnabled(true); + if (p.commit_on_focus_lost.isProvided()) { mCommitOnFocusLost = p.commit_on_focus_lost; @@ -458,8 +461,13 @@ S32 LLTextEditor::nextWordPos(S32 cursorPos) const const LLTextSegmentPtr LLTextEditor::getPreviousSegment() const { + static LLPointer<LLIndexSegment> index_segment = new LLIndexSegment; + + index_segment->setStart(mCursorPos); + index_segment->setEnd(mCursorPos); + // find segment index at character to left of cursor (or rightmost edge of selection) - segment_set_t::const_iterator it = mSegments.lower_bound(new LLIndexSegment(mCursorPos)); + segment_set_t::const_iterator it = mSegments.lower_bound(index_segment); if (it != mSegments.end()) { diff --git a/indra/llui/lltextvalidate.cpp b/indra/llui/lltextvalidate.cpp index 8b6bc5bd7d..53c4d21151 100644 --- a/indra/llui/lltextvalidate.cpp +++ b/indra/llui/lltextvalidate.cpp @@ -50,6 +50,7 @@ namespace LLTextValidate declare("alpha_num_space", validateAlphaNumSpace); declare("ascii_printable_no_pipe", validateASCIIPrintableNoPipe); declare("ascii_printable_no_space", validateASCIIPrintableNoSpace); + declare("ascii_with_newline", validateASCIIWithNewLine); } // Limits what characters can be used to [1234567890.-] with [-] only valid in the first position. @@ -299,4 +300,21 @@ namespace LLTextValidate } return rv; } + + // Used for multiline text stored on the server. + // Example is landmark description in Places SP. + bool validateASCIIWithNewLine(const LLWString &str) + { + bool rv = TRUE; + S32 len = str.length(); + while(len--) + { + if (str[len] < 0x20 && str[len] != 0xA || str[len] > 0x7f) + { + rv = FALSE; + break; + } + } + return rv; + } } diff --git a/indra/llui/lltextvalidate.h b/indra/llui/lltextvalidate.h index ffb4e85e7c..c033f5045b 100644 --- a/indra/llui/lltextvalidate.h +++ b/indra/llui/lltextvalidate.h @@ -57,6 +57,7 @@ namespace LLTextValidate bool validateASCIIPrintableNoPipe(const LLWString &str); bool validateASCIIPrintableNoSpace(const LLWString &str); bool validateASCII(const LLWString &str); + bool validateASCIIWithNewLine(const LLWString &str); } diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp index ed7fd02e14..025725476e 100644 --- a/indra/llui/lltooltip.cpp +++ b/indra/llui/lltooltip.cpp @@ -186,7 +186,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p) params.font = p.font; params.use_ellipses = true; params.wrap = p.wrap; - params.allow_html = false; // disallow hyperlinks in tooltips, as they want to spawn their own explanatory tooltips + params.parse_urls = false; // disallow hyperlinks in tooltips, as they want to spawn their own explanatory tooltips mTextBox = LLUICtrlFactory::create<LLTextBox> (params); addChild(mTextBox); diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 7f9dca08d2..5d8b628776 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -466,7 +466,7 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 border_width, S32 border gl_draw_scaled_image_with_border(x, y, width, height, image, color, solid_color, uv_rect, scale_rect); } -void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTexture* image, const LLColor4& color, BOOL solid_color, const LLRectf& uv_rect, const LLRectf& scale_rect) +void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTexture* image, const LLColor4& color, BOOL solid_color, const LLRectf& uv_outer_rect, const LLRectf& center_rect) { stop_glerror(); @@ -476,36 +476,53 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex return; } + // add in offset of current image to current ui translation + const LLVector3 ui_scale = gGL.getUIScale(); + const LLVector3 ui_translation = (gGL.getUITranslation() + LLVector3(x, y, 0.f)).scaledVec(ui_scale); + + F32 uv_width = uv_outer_rect.getWidth(); + F32 uv_height = uv_outer_rect.getHeight(); + // shrink scaling region to be proportional to clipped image region - LLRectf scale_rect_uv( - uv_rect.mLeft + (scale_rect.mLeft * uv_rect.getWidth()), - uv_rect.mBottom + (scale_rect.mTop * uv_rect.getHeight()), - uv_rect.mLeft + (scale_rect.mRight * uv_rect.getWidth()), - uv_rect.mBottom + (scale_rect.mBottom * uv_rect.getHeight())); - - S32 image_natural_width = llround((F32)image->getWidth(0) * uv_rect.getWidth()); - S32 image_natural_height = llround((F32)image->getHeight(0) * uv_rect.getHeight()); - - LLRect draw_rect(0, height, width, 0); - LLRect draw_scale_rect(llround(scale_rect_uv.mLeft * (F32)image->getWidth(0)), - llround(scale_rect_uv.mTop * (F32)image->getHeight(0)), - llround(scale_rect_uv.mRight * (F32)image->getWidth(0)), - llround(scale_rect_uv.mBottom * (F32)image->getHeight(0))); - // scale fixed region of image to drawn region - draw_scale_rect.mRight += width - image_natural_width; - draw_scale_rect.mTop += height - image_natural_height; - - S32 border_shrink_width = llmax(0, draw_scale_rect.mLeft - draw_scale_rect.mRight); - S32 border_shrink_height = llmax(0, draw_scale_rect.mBottom - draw_scale_rect.mTop); - - F32 shrink_width_ratio = scale_rect.getWidth() == 1.f ? 0.f : border_shrink_width / ((F32)image_natural_width * (1.f - scale_rect.getWidth())); - F32 shrink_height_ratio = scale_rect.getHeight() == 1.f ? 0.f : border_shrink_height / ((F32)image_natural_height * (1.f - scale_rect.getHeight())); - - F32 shrink_scale = 1.f - llmax(shrink_width_ratio, shrink_height_ratio); - draw_scale_rect.mLeft = llround((F32)draw_scale_rect.mLeft * shrink_scale); - draw_scale_rect.mTop = llround(lerp((F32)height, (F32)draw_scale_rect.mTop, shrink_scale)); - draw_scale_rect.mRight = llround(lerp((F32)width, (F32)draw_scale_rect.mRight, shrink_scale)); - draw_scale_rect.mBottom = llround((F32)draw_scale_rect.mBottom * shrink_scale); + LLRectf uv_center_rect( + uv_outer_rect.mLeft + (center_rect.mLeft * uv_width), + uv_outer_rect.mBottom + (center_rect.mTop * uv_height), + uv_outer_rect.mLeft + (center_rect.mRight * uv_width), + uv_outer_rect.mBottom + (center_rect.mBottom * uv_height)); + + F32 image_width = image->getWidth(0); + F32 image_height = image->getHeight(0); + + S32 image_natural_width = llround(image_width * uv_width); + S32 image_natural_height = llround(image_height * uv_height); + + LLRectf draw_center_rect( uv_center_rect.mLeft * image_width, + uv_center_rect.mTop * image_height, + uv_center_rect.mRight * image_width, + uv_center_rect.mBottom * image_height); + + { // scale fixed region of image to drawn region + draw_center_rect.mRight += width - image_natural_width; + draw_center_rect.mTop += height - image_natural_height; + + F32 border_shrink_width = llmax(0.f, draw_center_rect.mLeft - draw_center_rect.mRight); + F32 border_shrink_height = llmax(0.f, draw_center_rect.mBottom - draw_center_rect.mTop); + + F32 shrink_width_ratio = center_rect.getWidth() == 1.f ? 0.f : border_shrink_width / ((F32)image_natural_width * (1.f - center_rect.getWidth())); + F32 shrink_height_ratio = center_rect.getHeight() == 1.f ? 0.f : border_shrink_height / ((F32)image_natural_height * (1.f - center_rect.getHeight())); + + F32 shrink_scale = 1.f - llmax(shrink_width_ratio, shrink_height_ratio); + + draw_center_rect.mLeft = llround(ui_translation.mV[VX] + (F32)draw_center_rect.mLeft * shrink_scale * ui_scale.mV[VX]); + draw_center_rect.mTop = llround(ui_translation.mV[VY] + lerp((F32)height, (F32)draw_center_rect.mTop, shrink_scale) * ui_scale.mV[VY]); + draw_center_rect.mRight = llround(ui_translation.mV[VX] + lerp((F32)width, (F32)draw_center_rect.mRight, shrink_scale) * ui_scale.mV[VX]); + draw_center_rect.mBottom = llround(ui_translation.mV[VY] + (F32)draw_center_rect.mBottom * shrink_scale * ui_scale.mV[VY]); + } + + LLRectf draw_outer_rect(ui_translation.mV[VX], + ui_translation.mV[VY] + height * ui_scale.mV[VY], + ui_translation.mV[VX] + width * ui_scale.mV[VX], + ui_translation.mV[VY]); LLGLSUIDefault gls_ui; @@ -515,136 +532,174 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA); } - gGL.pushUIMatrix(); - { - gGL.translateUI((F32)x, (F32)y, 0.f); + gGL.getTexUnit(0)->bind(image); - gGL.getTexUnit(0)->bind(image); + gGL.color4fv(color.mV); + + const S32 NUM_VERTICES = 9 * 4; // 9 quads + LLVector2 uv[NUM_VERTICES]; + LLVector3 pos[NUM_VERTICES]; - gGL.color4fv(color.mV); - - gGL.begin(LLRender::QUADS); - { - // draw bottom left - gGL.texCoord2f(uv_rect.mLeft, uv_rect.mBottom); - gGL.vertex2i(0, 0); + S32 index = 0; - gGL.texCoord2f(scale_rect_uv.mLeft, uv_rect.mBottom); - gGL.vertex2i(draw_scale_rect.mLeft, 0); + gGL.begin(LLRender::QUADS); + { + // draw bottom left + uv[index] = LLVector2(uv_outer_rect.mLeft, uv_outer_rect.mBottom); + pos[index] = LLVector3(draw_outer_rect.mLeft, draw_outer_rect.mBottom, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mBottom); - gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom); + uv[index] = LLVector2(uv_center_rect.mLeft, uv_outer_rect.mBottom); + pos[index] = LLVector3(draw_center_rect.mLeft, draw_outer_rect.mBottom, 0.f); + index++; - gGL.texCoord2f(uv_rect.mLeft, scale_rect_uv.mBottom); - gGL.vertex2i(0, draw_scale_rect.mBottom); + uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mBottom); + pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f); + index++; - // draw bottom middle - gGL.texCoord2f(scale_rect_uv.mLeft, uv_rect.mBottom); - gGL.vertex2i(draw_scale_rect.mLeft, 0); + uv[index] = LLVector2(uv_outer_rect.mLeft, uv_center_rect.mBottom); + pos[index] = LLVector3(draw_outer_rect.mLeft, draw_center_rect.mBottom, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mRight, uv_rect.mBottom); - gGL.vertex2i(draw_scale_rect.mRight, 0); + // draw bottom middle + uv[index] = LLVector2(uv_center_rect.mLeft, uv_outer_rect.mBottom); + pos[index] = LLVector3(draw_center_rect.mLeft, draw_outer_rect.mBottom, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mBottom); - gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom); + uv[index] = LLVector2(uv_center_rect.mRight, uv_outer_rect.mBottom); + pos[index] = LLVector3(draw_center_rect.mRight, draw_outer_rect.mBottom, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mBottom); - gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom); + uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mBottom); + pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f); + index++; - // draw bottom right - gGL.texCoord2f(scale_rect_uv.mRight, uv_rect.mBottom); - gGL.vertex2i(draw_scale_rect.mRight, 0); + uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mBottom); + pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f); + index++; - gGL.texCoord2f(uv_rect.mRight, uv_rect.mBottom); - gGL.vertex2i(width, 0); + // draw bottom right + uv[index] = LLVector2(uv_center_rect.mRight, uv_outer_rect.mBottom); + pos[index] = LLVector3(draw_center_rect.mRight, draw_outer_rect.mBottom, 0.f); + index++; - gGL.texCoord2f(uv_rect.mRight, scale_rect_uv.mBottom); - gGL.vertex2i(width, draw_scale_rect.mBottom); + uv[index] = LLVector2(uv_outer_rect.mRight, uv_outer_rect.mBottom); + pos[index] = LLVector3(draw_outer_rect.mRight, draw_outer_rect.mBottom, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mBottom); - gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom); + uv[index] = LLVector2(uv_outer_rect.mRight, uv_center_rect.mBottom); + pos[index] = LLVector3(draw_outer_rect.mRight, draw_center_rect.mBottom, 0.f); + index++; - // draw left - gGL.texCoord2f(uv_rect.mLeft, scale_rect_uv.mBottom); - gGL.vertex2i(0, draw_scale_rect.mBottom); + uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mBottom); + pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mBottom); - gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom); + // draw left + uv[index] = LLVector2(uv_outer_rect.mLeft, uv_center_rect.mBottom); + pos[index] = LLVector3(draw_outer_rect.mLeft, draw_center_rect.mBottom, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mTop); - gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop); + uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mBottom); + pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f); + index++; - gGL.texCoord2f(uv_rect.mLeft, scale_rect_uv.mTop); - gGL.vertex2i(0, draw_scale_rect.mTop); + uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mTop); + pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f); + index++; - // draw middle - gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mBottom); - gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mBottom); + uv[index] = LLVector2(uv_outer_rect.mLeft, uv_center_rect.mTop); + pos[index] = LLVector3(draw_outer_rect.mLeft, draw_center_rect.mTop, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mBottom); - gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom); + // draw middle + uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mBottom); + pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mBottom, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mTop); - gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop); + uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mBottom); + pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mTop); - gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop); + uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mTop); + pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mTop, 0.f); + index++; - // draw right - gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mBottom); - gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mBottom); + uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mTop); + pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f); + index++; - gGL.texCoord2f(uv_rect.mRight, scale_rect_uv.mBottom); - gGL.vertex2i(width, draw_scale_rect.mBottom); + // draw right + uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mBottom); + pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mBottom, 0.f); + index++; - gGL.texCoord2f(uv_rect.mRight, scale_rect_uv.mTop); - gGL.vertex2i(width, draw_scale_rect.mTop); + uv[index] = LLVector2(uv_outer_rect.mRight, uv_center_rect.mBottom); + pos[index] = LLVector3(draw_outer_rect.mRight, draw_center_rect.mBottom, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mTop); - gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop); + uv[index] = LLVector2(uv_outer_rect.mRight, uv_center_rect.mTop); + pos[index] = LLVector3(draw_outer_rect.mRight, draw_center_rect.mTop, 0.f); + index++; - // draw top left - gGL.texCoord2f(uv_rect.mLeft, scale_rect_uv.mTop); - gGL.vertex2i(0, draw_scale_rect.mTop); + uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mTop); + pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mTop, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mTop); - gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop); + // draw top left + uv[index] = LLVector2(uv_outer_rect.mLeft, uv_center_rect.mTop); + pos[index] = LLVector3(draw_outer_rect.mLeft, draw_center_rect.mTop, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mLeft, uv_rect.mTop); - gGL.vertex2i(draw_scale_rect.mLeft, height); + uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mTop); + pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f); + index++; - gGL.texCoord2f(uv_rect.mLeft, uv_rect.mTop); - gGL.vertex2i(0, height); + uv[index] = LLVector2(uv_center_rect.mLeft, uv_outer_rect.mTop); + pos[index] = LLVector3(draw_center_rect.mLeft, draw_outer_rect.mTop, 0.f); + index++; - // draw top middle - gGL.texCoord2f(scale_rect_uv.mLeft, scale_rect_uv.mTop); - gGL.vertex2i(draw_scale_rect.mLeft, draw_scale_rect.mTop); + uv[index] = LLVector2(uv_outer_rect.mLeft, uv_outer_rect.mTop); + pos[index] = LLVector3(draw_outer_rect.mLeft, draw_outer_rect.mTop, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mTop); - gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop); + // draw top middle + uv[index] = LLVector2(uv_center_rect.mLeft, uv_center_rect.mTop); + pos[index] = LLVector3(draw_center_rect.mLeft, draw_center_rect.mTop, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mRight, uv_rect.mTop); - gGL.vertex2i(draw_scale_rect.mRight, height); + uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mTop); + pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mTop, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mLeft, uv_rect.mTop); - gGL.vertex2i(draw_scale_rect.mLeft, height); + uv[index] = LLVector2(uv_center_rect.mRight, uv_outer_rect.mTop); + pos[index] = LLVector3(draw_center_rect.mRight, draw_outer_rect.mTop, 0.f); + index++; - // draw top right - gGL.texCoord2f(scale_rect_uv.mRight, scale_rect_uv.mTop); - gGL.vertex2i(draw_scale_rect.mRight, draw_scale_rect.mTop); + uv[index] = LLVector2(uv_center_rect.mLeft, uv_outer_rect.mTop); + pos[index] = LLVector3(draw_center_rect.mLeft, draw_outer_rect.mTop, 0.f); + index++; - gGL.texCoord2f(uv_rect.mRight, scale_rect_uv.mTop); - gGL.vertex2i(width, draw_scale_rect.mTop); + // draw top right + uv[index] = LLVector2(uv_center_rect.mRight, uv_center_rect.mTop); + pos[index] = LLVector3(draw_center_rect.mRight, draw_center_rect.mTop, 0.f); + index++; - gGL.texCoord2f(uv_rect.mRight, uv_rect.mTop); - gGL.vertex2i(width, height); + uv[index] = LLVector2(uv_outer_rect.mRight, uv_center_rect.mTop); + pos[index] = LLVector3(draw_outer_rect.mRight, draw_center_rect.mTop, 0.f); + index++; - gGL.texCoord2f(scale_rect_uv.mRight, uv_rect.mTop); - gGL.vertex2i(draw_scale_rect.mRight, height); - } - gGL.end(); + uv[index] = LLVector2(uv_outer_rect.mRight, uv_outer_rect.mTop); + pos[index] = LLVector3(draw_outer_rect.mRight, draw_outer_rect.mTop, 0.f); + index++; + + uv[index] = LLVector2(uv_center_rect.mRight, uv_outer_rect.mTop); + pos[index] = LLVector3(draw_center_rect.mRight, draw_outer_rect.mTop, 0.f); + index++; + + gGL.vertexBatchPreTransformed(pos, uv, NUM_VERTICES); } - gGL.popUIMatrix(); + gGL.end(); if (solid_color) { @@ -674,25 +729,40 @@ void gl_draw_scaled_rotated_image(S32 x, S32 y, S32 width, S32 height, F32 degre if (degrees == 0.f) { - gGL.pushUIMatrix(); - gGL.translateUI((F32)x, (F32)y, 0.f); - + const S32 NUM_VERTICES = 4; // 9 quads + LLVector2 uv[NUM_VERTICES]; + LLVector3 pos[NUM_VERTICES]; + gGL.begin(LLRender::QUADS); { - gGL.texCoord2f(uv_rect.mRight, uv_rect.mTop); - gGL.vertex2i(width, height ); - - gGL.texCoord2f(uv_rect.mLeft, uv_rect.mTop); - gGL.vertex2i(0, height ); - - gGL.texCoord2f(uv_rect.mLeft, uv_rect.mBottom); - gGL.vertex2i(0, 0); - - gGL.texCoord2f(uv_rect.mRight, uv_rect.mBottom); - gGL.vertex2i(width, 0); + LLVector3 ui_scale = gGL.getUIScale(); + LLVector3 ui_translation = gGL.getUITranslation(); + ui_translation.mV[VX] += x; + ui_translation.mV[VY] += y; + ui_translation.scaleVec(ui_scale); + S32 index = 0; + S32 scaled_width = llround(width * ui_scale.mV[VX]); + S32 scaled_height = llround(height * ui_scale.mV[VY]); + + uv[index] = LLVector2(uv_rect.mRight, uv_rect.mTop); + pos[index] = LLVector3(ui_translation.mV[VX] + scaled_width, ui_translation.mV[VY] + scaled_height, 0.f); + index++; + + uv[index] = LLVector2(uv_rect.mLeft, uv_rect.mTop); + pos[index] = LLVector3(ui_translation.mV[VX], ui_translation.mV[VY] + scaled_height, 0.f); + index++; + + uv[index] = LLVector2(uv_rect.mLeft, uv_rect.mBottom); + pos[index] = LLVector3(ui_translation.mV[VX], ui_translation.mV[VY], 0.f); + index++; + + uv[index] = LLVector2(uv_rect.mRight, uv_rect.mBottom); + pos[index] = LLVector3(ui_translation.mV[VX] + scaled_width, ui_translation.mV[VY], 0.f); + index++; + + gGL.vertexBatchPreTransformed(pos, uv, NUM_VERTICES); } gGL.end(); - gGL.popUIMatrix(); } else { @@ -761,25 +831,6 @@ void gl_stippled_line_3d( const LLVector3& start, const LLVector3& end, const LL LLUI::setLineWidth(1.f); } - -void gl_rect_2d_xor(S32 left, S32 top, S32 right, S32 bottom) -{ - gGL.color4fv( LLColor4::white.mV ); - glLogicOp( GL_XOR ); - stop_glerror(); - - gGL.begin(LLRender::QUADS); - gGL.vertex2i(left, top); - gGL.vertex2i(left, bottom); - gGL.vertex2i(right, bottom); - gGL.vertex2i(right, top); - gGL.end(); - - glLogicOp( GL_COPY ); - stop_glerror(); -} - - void gl_arc_2d(F32 center_x, F32 center_y, F32 radius, S32 steps, BOOL filled, F32 start_angle, F32 end_angle) { if (end_angle < start_angle) @@ -1013,42 +1064,6 @@ void gl_washer_segment_2d(F32 outer_radius, F32 inner_radius, F32 start_radians, gGL.end(); } -// Draws spokes around a circle. -void gl_washer_spokes_2d(F32 outer_radius, F32 inner_radius, S32 count, const LLColor4& inner_color, const LLColor4& outer_color) -{ - const F32 DELTA = F_TWO_PI / count; - const F32 HALF_DELTA = DELTA * 0.5f; - const F32 SIN_DELTA = sin( DELTA ); - const F32 COS_DELTA = cos( DELTA ); - - F32 x1 = outer_radius * cos( HALF_DELTA ); - F32 y1 = outer_radius * sin( HALF_DELTA ); - F32 x2 = inner_radius * cos( HALF_DELTA ); - F32 y2 = inner_radius * sin( HALF_DELTA ); - - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - - gGL.begin( LLRender::LINES ); - { - while( count-- ) - { - gGL.color4fv(outer_color.mV); - gGL.vertex2f( x1, y1 ); - gGL.color4fv(inner_color.mV); - gGL.vertex2f( x2, y2 ); - - F32 x1_new = x1 * COS_DELTA - y1 * SIN_DELTA; - y1 = x1 * SIN_DELTA + y1 * COS_DELTA; - x1 = x1_new; - - F32 x2_new = x2 * COS_DELTA - y2 * SIN_DELTA; - y2 = x2 * SIN_DELTA + y2 * COS_DELTA; - x2 = x2_new; - } - } - gGL.end(); -} - void gl_rect_2d_simple_tex( S32 width, S32 height ) { gGL.begin( LLRender::QUADS ); @@ -1236,6 +1251,7 @@ void gl_segmented_rect_2d_tex(const S32 left, gGL.popUIMatrix(); } +//FIXME: rewrite to use scissor? void gl_segmented_rect_2d_fragment_tex(const S32 left, const S32 top, const S32 right, diff --git a/indra/llui/llui.h b/indra/llui/llui.h index c18262ef76..745d0ff662 100644 --- a/indra/llui/llui.h +++ b/indra/llui/llui.h @@ -96,7 +96,6 @@ void gl_ring( F32 radius, F32 width, const LLColor4& center_color, const LLColor void gl_corners_2d(S32 left, S32 top, S32 right, S32 bottom, S32 length, F32 max_frac); void gl_washer_2d(F32 outer_radius, F32 inner_radius, S32 steps, const LLColor4& inner_color, const LLColor4& outer_color); void gl_washer_segment_2d(F32 outer_radius, F32 inner_radius, F32 start_radians, F32 end_radians, S32 steps, const LLColor4& inner_color, const LLColor4& outer_color); -void gl_washer_spokes_2d(F32 outer_radius, F32 inner_radius, S32 count, const LLColor4& inner_color, const LLColor4& outer_color); void gl_draw_image(S32 x, S32 y, LLTexture* image, const LLColor4& color = UI_VERTEX_COLOR, const LLRectf& uv_rect = LLRectf(0.f, 1.f, 1.f, 0.f)); void gl_draw_scaled_image(S32 x, S32 y, S32 width, S32 height, LLTexture* image, const LLColor4& color = UI_VERTEX_COLOR, const LLRectf& uv_rect = LLRectf(0.f, 1.f, 1.f, 0.f)); @@ -105,7 +104,6 @@ void gl_draw_scaled_rotated_image(S32 x, S32 y, S32 width, S32 height, F32 degre void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 border_width, S32 border_height, S32 width, S32 height, LLTexture* image, const LLColor4 &color, BOOL solid_color = FALSE, const LLRectf& uv_rect = LLRectf(0.f, 1.f, 1.f, 0.f)); void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTexture* image, const LLColor4 &color, BOOL solid_color = FALSE, const LLRectf& uv_rect = LLRectf(0.f, 1.f, 1.f, 0.f), const LLRectf& scale_rect = LLRectf(0.f, 1.f, 1.f, 0.f)); -void gl_rect_2d_xor(S32 left, S32 top, S32 right, S32 bottom); void gl_stippled_line_3d( const LLVector3& start, const LLVector3& end, const LLColor4& color, F32 phase = 0.f ); void gl_rect_2d_simple_tex( S32 width, S32 height ); diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp index ff330f863a..c91e225fd2 100644 --- a/indra/llui/lluictrl.cpp +++ b/indra/llui/lluictrl.cpp @@ -101,6 +101,7 @@ LLUICtrl::LLUICtrl(const LLUICtrl::Params& p, const LLViewModelPtr& viewmodel) : LLView(p), mTentative(FALSE), mIsChrome(FALSE), + mTabStop(FALSE), mViewModel(viewmodel), mControlVariable(NULL), mEnabledControlVariable(NULL), diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h index 1f9d2c9049..259104f72c 100644 --- a/indra/llui/lluictrl.h +++ b/indra/llui/lluictrl.h @@ -147,8 +147,6 @@ public: // LLView interface /*virtual*/ BOOL setLabelArg( const std::string& key, const LLStringExplicit& text ); /*virtual*/ BOOL isCtrl() const; - /*virtual*/ void setTentative(BOOL b); - /*virtual*/ BOOL getTentative() const; /*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask); /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask); /*virtual*/ BOOL canFocusChildren() const; @@ -180,6 +178,8 @@ public: void setMakeVisibleControlVariable(LLControlVariable* control); void setMakeInvisibleControlVariable(LLControlVariable* control); + virtual void setTentative(BOOL b); + virtual BOOL getTentative() const; virtual void setValue(const LLSD& value); virtual LLSD getValue() const; /// When two widgets are displaying the same data (e.g. during a skin diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index e075699a6e..bf7b25910f 100644 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -363,6 +363,12 @@ std::string LLUrlEntryAgent::getTooltip(const std::string &string) const return LLTrans::getString("TooltipAgentUrl"); } +bool LLUrlEntryAgent::underlineOnHoverOnly(const std::string &string) const +{ + std::string url = getUrl(string); + return LLStringUtil::endsWith(url, "/about") || LLStringUtil::endsWith(url, "/inspect"); +} + std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCallback &cb) { if (!gCacheName) @@ -730,6 +736,19 @@ std::string LLUrlEntrySLLabel::getTooltip(const std::string &string) const return LLUrlEntryBase::getTooltip(string); } +bool LLUrlEntrySLLabel::underlineOnHoverOnly(const std::string &string) const +{ + std::string url = getUrl(string); + LLUrlMatch match; + if (LLUrlRegistry::instance().findUrl(url, match)) + { + return match.underlineOnHoverOnly(); + } + + // unrecognized URL? should not happen + return LLUrlEntryBase::underlineOnHoverOnly(string); +} + // // LLUrlEntryWorldMap Describes secondlife:///<location> URLs // diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h index 7d718b67a9..f8588dd760 100644 --- a/indra/llui/llurlentry.h +++ b/indra/llui/llurlentry.h @@ -94,6 +94,9 @@ public: /// is this a match for a URL that should not be hyperlinked? bool isLinkDisabled() const { return mDisabledLink; } + /// Should this link text be underlined only when mouse is hovered over it? + virtual bool underlineOnHoverOnly(const std::string &string) const { return false; } + virtual LLUUID getID(const std::string &string) const { return LLUUID::null; } protected: @@ -173,6 +176,7 @@ public: /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb); /*virtual*/ std::string getTooltip(const std::string &string) const; /*virtual*/ LLUUID getID(const std::string &string) const; + /*virtual*/ bool underlineOnHoverOnly(const std::string &string) const; private: void onAgentNameReceived(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group); @@ -275,6 +279,7 @@ public: /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb); /*virtual*/ std::string getUrl(const std::string &string) const; /*virtual*/ std::string getTooltip(const std::string &string) const; + /*virtual*/ bool underlineOnHoverOnly(const std::string &string) const; }; /// diff --git a/indra/llui/llurlmatch.cpp b/indra/llui/llurlmatch.cpp index 7c96665ce4..a6d3dcb40f 100644 --- a/indra/llui/llurlmatch.cpp +++ b/indra/llui/llurlmatch.cpp @@ -43,7 +43,8 @@ LLUrlMatch::LLUrlMatch() : mIcon(""), mMenuName(""), mLocation(""), - mDisabledLink(false) + mDisabledLink(false), + mUnderlineOnHoverOnly(false) { } @@ -51,7 +52,7 @@ void LLUrlMatch::setValues(U32 start, U32 end, const std::string &url, const std::string &label, const std::string &tooltip, const std::string &icon, const LLUIColor& color, const std::string &menu, const std::string &location, - bool disabled_link, const LLUUID& id) + bool disabled_link, const LLUUID& id, bool underline_on_hover_only) { mStart = start; mEnd = end; @@ -64,4 +65,5 @@ void LLUrlMatch::setValues(U32 start, U32 end, const std::string &url, mLocation = location; mDisabledLink = disabled_link; mID = id; + mUnderlineOnHoverOnly = underline_on_hover_only; } diff --git a/indra/llui/llurlmatch.h b/indra/llui/llurlmatch.h index 78dd2c528f..7090dd3f93 100644 --- a/indra/llui/llurlmatch.h +++ b/indra/llui/llurlmatch.h @@ -86,12 +86,15 @@ public: /// is this a match for a URL that should not be hyperlinked? bool isLinkDisabled() const { return mDisabledLink; } + /// Should this link text be underlined only when mouse is hovered over it? + bool underlineOnHoverOnly() const { return mUnderlineOnHoverOnly; } + /// Change the contents of this match object (used by LLUrlRegistry) void setValues(U32 start, U32 end, const std::string &url, const std::string &label, const std::string &tooltip, const std::string &icon, const LLUIColor& color, const std::string &menu, const std::string &location, bool disabled_link - , const LLUUID& id ); + , const LLUUID& id, bool underline_on_hover_only = false ); const LLUUID& getID() const { return mID;} @@ -108,6 +111,7 @@ private: LLUUID mID; LLUIColor mColor; bool mDisabledLink; + bool mUnderlineOnHoverOnly; }; #endif diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp index 1f86f72faa..b37a52cad2 100644 --- a/indra/llui/llurlregistry.cpp +++ b/indra/llui/llurlregistry.cpp @@ -184,7 +184,8 @@ bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LL match_entry->getMenuName(), match_entry->getLocation(url), match_entry->isLinkDisabled(), - match_entry->getID(url)); + match_entry->getID(url), + match_entry->underlineOnHoverOnly(url)); return true; } @@ -219,7 +220,8 @@ bool LLUrlRegistry::findUrl(const LLWString &text, LLUrlMatch &match, const LLUr match.getMenuName(), match.getLocation(), match.isLinkDisabled(), - match.getID()); + match.getID(), + match.underlineOnHoverOnly()); return true; } return false; diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index ca554db6d3..323a600b5b 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -403,28 +403,40 @@ bool LLCompareByTabOrder::operator() (const LLView* const a, const LLView* const return (a_score == b_score) ? a < b : a_score < b_score; } -bool LLView::trueToRoot(const boost::function<bool (const LLView*)>& predicate) const +BOOL LLView::isInVisibleChain() const { - const LLView* cur_view = this; - while(cur_view) + BOOL visible = TRUE; + + const LLView* viewp = this; + while(viewp) { - if(!predicate(cur_view)) + if (!viewp->getVisible()) { - return false; + visible = FALSE; + break; } - cur_view = cur_view->getParent(); + viewp = viewp->getParent(); } - return true; -} - -BOOL LLView::isInVisibleChain() const -{ - return trueToRoot(&LLView::getVisible); + + return visible; } BOOL LLView::isInEnabledChain() const { - return trueToRoot(&LLView::getEnabled); + BOOL enabled = TRUE; + + const LLView* viewp = this; + while(viewp) + { + if (!viewp->getEnabled()) + { + enabled = FALSE; + break; + } + viewp = viewp->getParent(); + } + + return enabled; } // virtual @@ -434,17 +446,6 @@ BOOL LLView::canFocusChildren() const } //virtual -void LLView::setTentative(BOOL b) -{ -} - -//virtual -BOOL LLView::getTentative() const -{ - return FALSE; -} - -//virtual void LLView::setEnabled(BOOL enabled) { mEnabled = enabled; @@ -2790,6 +2791,19 @@ LLView::tree_post_iterator_t LLView::endTreeDFSPost() return tree_post_iterator_t(); } +LLView::bfs_tree_iterator_t LLView::beginTreeBFS() +{ + return bfs_tree_iterator_t(this, + boost::bind(boost::mem_fn(&LLView::beginChild), _1), + boost::bind(boost::mem_fn(&LLView::endChild), _1)); +} + +LLView::bfs_tree_iterator_t LLView::endTreeBFS() +{ + // an empty iterator is an "end" iterator + return bfs_tree_iterator_t(); +} + LLView::root_to_view_iterator_t LLView::beginRootToView() { diff --git a/indra/llui/llview.h b/indra/llui/llview.h index 7e05468590..483d22b28f 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -273,7 +273,6 @@ public: S32 getDefaultTabGroup() const { return mDefaultTabGroup; } S32 getLastTabGroup() { return mLastTabGroup; } - bool trueToRoot(const boost::function<bool (const LLView*)>& predicate) const; BOOL isInVisibleChain() const; BOOL isInEnabledChain() const; @@ -289,8 +288,6 @@ public: // children, etc. virtual void deleteAllChildren(); - virtual void setTentative(BOOL b); - virtual BOOL getTentative() const; void setAllChildrenEnabled(BOOL b); virtual void setVisible(BOOL visible); @@ -357,6 +354,10 @@ public: tree_post_iterator_t beginTreeDFSPost(); tree_post_iterator_t endTreeDFSPost(); + typedef LLTreeBFSIter<LLView, child_list_const_iter_t> bfs_tree_iterator_t; + bfs_tree_iterator_t beginTreeBFS(); + bfs_tree_iterator_t endTreeBFS(); + typedef LLTreeDownIter<LLView> root_to_view_iterator_t; root_to_view_iterator_t beginRootToView(); diff --git a/indra/llwindow/llkeyboard.cpp b/indra/llwindow/llkeyboard.cpp index 16cbf815e0..8f26f980d1 100644 --- a/indra/llwindow/llkeyboard.cpp +++ b/indra/llwindow/llkeyboard.cpp @@ -343,6 +343,13 @@ std::string LLKeyboard::stringFromKey(KEY key) buffer[1] = '\0'; res = std::string(buffer); } + + LLKeyStringTranslatorFunc *trans = gKeyboard->mStringTranslator; + if (trans != NULL) + { + res = trans(res.c_str()); + } + return res; } diff --git a/indra/llxuixml/lltrans.h b/indra/llxuixml/lltrans.h index 856b9e04fc..84eeef0ace 100644 --- a/indra/llxuixml/lltrans.h +++ b/indra/llxuixml/lltrans.h @@ -103,11 +103,12 @@ public: return findString(result, xml_desc, empty); } - static std::string getKeyboardString(const char* keystring) - { - // These map directly - no need to specialize - return getString( ll_safe_string(keystring) ); - } + static std::string getKeyboardString(const char* keystring) + { + std::string key_str(keystring); + std::string trans_str; + return findString(trans_str, key_str) ? trans_str : key_str; + } // get the default args static const LLStringUtil::format_map_t& getDefaultArgs() diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index fc5e192d74..592c068137 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -198,7 +198,6 @@ set(viewer_SOURCE_FILES llfloaternamedesc.cpp llfloaternotificationsconsole.cpp llfloateropenobject.cpp - llfloaterparcel.cpp llfloaterpay.cpp llfloaterperms.cpp llfloaterpostcard.cpp @@ -220,7 +219,6 @@ set(viewer_SOURCE_FILES llfloatertopobjects.cpp llfloatertos.cpp llfloateruipreview.cpp - llfloaterurldisplay.cpp llfloaterurlentry.cpp llfloatervoicedevicesettings.cpp llfloatervoiceeffect.cpp @@ -359,7 +357,6 @@ set(viewer_SOURCE_FILES llpanelpermissions.cpp llpanelpick.cpp llpanelpicks.cpp - llpanelplace.cpp llpanelplaceinfo.cpp llpanelplaceprofile.cpp llpanelplaces.cpp @@ -729,7 +726,6 @@ set(viewer_HEADER_FILES llfloaternamedesc.h llfloaternotificationsconsole.h llfloateropenobject.h - llfloaterparcel.h llfloaterpay.h llfloaterperms.h llfloaterpostcard.h @@ -751,7 +747,6 @@ set(viewer_HEADER_FILES llfloatertopobjects.h llfloatertos.h llfloateruipreview.h - llfloaterurldisplay.h llfloaterurlentry.h llfloatervoicedevicesettings.h llfloatervoiceeffect.h @@ -886,7 +881,6 @@ set(viewer_HEADER_FILES llpanelpermissions.h llpanelpick.h llpanelpicks.h - llpanelplace.h llpanelplaceinfo.h llpanelplaceprofile.h llpanelplaces.h diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings index fc531f93d4..5c7cacedec 100644 --- a/indra/newview/English.lproj/InfoPlist.strings +++ b/indra/newview/English.lproj/InfoPlist.strings @@ -2,6 +2,6 @@ CFBundleName = "Second Life"; -CFBundleShortVersionString = "Second Life version 2.1.0.0"; -CFBundleGetInfoString = "Second Life version 2.1.0.0, Copyright 2004-2009 Linden Research, Inc."; +CFBundleShortVersionString = "Second Life version 2.1.0.13828"; +CFBundleGetInfoString = "Second Life version 2.1.0.13828, Copyright 2004-2009 Linden Research, Inc."; diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist index 9bc95f9b95..f7b11b217c 100644 --- a/indra/newview/Info-SecondLife.plist +++ b/indra/newview/Info-SecondLife.plist @@ -60,7 +60,7 @@ </dict> </array> <key>CFBundleVersion</key> - <string>2.1.0.0</string> + <string>2.1.0.13828</string> <key>CSResourcesFileMapped</key> <true/> </dict> diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 05197f70cd..37d80bab59 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -585,7 +585,7 @@ <key>Value</key> <integer>2</integer> </map> - <key>AvatarBakedTextureTimeout</key> + <key>AvatarBakedTextureUploadTimeout</key> <map> <key>Comment</key> <string>Specifes the maximum time in seconds to wait before sending your baked textures for avatar appearance. Set to 0 to disable and wait until all baked textures are at highest resolution.</string> @@ -594,8 +594,20 @@ <key>Type</key> <string>U32</string> <key>Value</key> - <integer>120</integer> + <integer>60</integer> </map> + <key>AvatarBakedLocalTextureUpdateTimeout</key> + <map> + <key>Comment</key> + <string>Specifes the maximum time in seconds to wait before updating your appearance during appearance mode.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <integer>10</integer> + </map> + <key>AvatarSex</key> <map> <key>Comment</key> @@ -1729,6 +1741,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>DebugAvatarLocalTexLoadedTime</key> + <map> + <key>Comment</key> + <string>Display time for loading avatar local textures.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>DebugBeaconLineWidth</key> <map> <key>Comment</key> @@ -5383,17 +5406,6 @@ <key>Value</key> <integer>0</integer> </map> - <key>MultipleAttachments</key> - <map> - <key>Comment</key> - <string>Allow multiple objects to be attached to a single attachment point.</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>0</integer> - </map> <key>MuteAmbient</key> <map> <key>Comment</key> @@ -7458,7 +7470,7 @@ <key>Value</key> <integer>0</integer> </map> - + <key>RenderDeferredGI</key> <map> <key>Comment</key> @@ -8151,7 +8163,7 @@ <integer>2</integer> </map> - <key>RenderReflectionRes</key> + <key>RenderReflectionRes</key> <map> <key>Comment</key> <string>Reflection map resolution.</string> @@ -8470,17 +8482,6 @@ <key>Value</key> <real>1.0</real> </map> - <key>RunMultipleThreads</key> - <map> - <key>Comment</key> - <string>If TRUE keep background threads active during render</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>0</integer> - </map> <key>MeshThreadCount</key> <map> <key>Comment</key> diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index a481a6d395..da888bc64d 100644 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -191,9 +191,9 @@ NVIDIA G102M .*NVIDIA.*GeForce G *102M.* 0 1 NVIDIA G103M .*NVIDIA.*GeForce G *103M.* 0 1 NVIDIA G105M .*NVIDIA.*GeForce G *105M.* 0 1 NVIDIA G210M .*NVIDIA.*GeForce G210M.* 0 1 -NVIDIA GT 120 .*NVIDIA.*GeForce GT 12.* 0 1 +NVIDIA GT 120 .*NVIDIA.*GeForce GT 12.* 1 1 NVIDIA GT 130 .*NVIDIA.*GeForce GT 13.* 1 1 -NVIDIA GT 220 .*NVIDIA.*GeForce GT 22.* 0 1 +NVIDIA GT 220 .*NVIDIA.*GeForce GT 22.* 1 1 NVIDIA GT 230 .*NVIDIA.*GeForce GT 23.* 1 1 NVIDIA GT 240 .*NVIDIA.*GeForce GT 24.* 1 1 NVIDIA GT 320 .*NVIDIA.*GeForce GT 32.* 0 1 diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 5fae5b893f..b0d2ca4f89 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -1785,6 +1785,8 @@ void LLAgent::endAnimationUpdateUI() } gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR); + + LLFloaterCamera::onAvatarEditingAppearance(false); } //--------------------------------------------------------------------- @@ -1891,6 +1893,8 @@ void LLAgent::endAnimationUpdateUI() { mPauseRequest = gAgentAvatarp->requestPause(); } + + LLFloaterCamera::onAvatarEditingAppearance(true); } if (isAgentAvatarValid()) @@ -3075,7 +3079,7 @@ void LLAgent::processAgentCachedTextureResponse(LLMessageSystem *mesgsys, void * return; } - if (gAgentCamera.cameraCustomizeAvatar()) + if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures()) { // ignore baked textures when in customize mode return; @@ -3544,7 +3548,7 @@ void LLAgent::sendAgentSetAppearance() { if (!isAgentAvatarValid()) return; - if (gAgentQueryManager.mNumPendingQueries > 0 && !gAgentCamera.cameraCustomizeAvatar()) + if (gAgentQueryManager.mNumPendingQueries > 0 && (isAgentAvatarValid() && gAgentAvatarp->isUsingBakedTextures())) { return; } diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 95dafb4aa2..02e4dab6ef 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -943,7 +943,7 @@ void LLAgentCamera::cameraZoomIn(const F32 fraction) */ } - if( cameraCustomizeAvatar() ) + if(cameraCustomizeAvatar()) { new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM ); } @@ -1151,10 +1151,9 @@ void LLAgentCamera::updateCamera() static LLFastTimer::DeclareTimer ftm("Camera"); LLFastTimer t(ftm); - //Ventrella - changed camera_skyward to the new global "mCameraUpVector" + // - changed camera_skyward to the new global "mCameraUpVector" mCameraUpVector = LLVector3::z_axis; //LLVector3 camera_skyward(0.f, 0.f, 1.f); - //end Ventrella U32 camera_mode = mCameraAnimating ? mLastCameraMode : mCameraMode; @@ -1164,10 +1163,8 @@ void LLAgentCamera::updateCamera() gAgentAvatarp->isSitting() && camera_mode == CAMERA_MODE_MOUSELOOK) { - //Ventrella //changed camera_skyward to the new global "mCameraUpVector" mCameraUpVector = mCameraUpVector * gAgentAvatarp->getRenderRotation(); - //end Ventrella } if (cameraThirdPerson() && mFocusOnAvatar && LLFollowCamMgr::getActiveFollowCamParams()) @@ -1175,13 +1172,11 @@ void LLAgentCamera::updateCamera() changeCameraToFollow(); } - //Ventrella //NOTE - this needs to be integrated into a general upVector system here within llAgent. if ( camera_mode == CAMERA_MODE_FOLLOW && mFocusOnAvatar ) { mCameraUpVector = mFollowCam.getUpVector(); } - //end Ventrella if (mSitCameraEnabled) { @@ -1258,7 +1253,6 @@ void LLAgentCamera::updateCamera() // lerp camera focus offset mCameraFocusOffset = lerp(mCameraFocusOffset, mCameraFocusOffsetTarget, LLCriticalDamp::getInterpolant(CAMERA_FOCUS_HALF_LIFE)); - //Ventrella if ( mCameraMode == CAMERA_MODE_FOLLOW ) { if (isAgentAvatarValid()) @@ -1285,7 +1279,6 @@ void LLAgentCamera::updateCamera() } } } - // end Ventrella BOOL hit_limit; LLVector3d camera_pos_global; @@ -1416,10 +1409,8 @@ void LLAgentCamera::updateCamera() // Move the camera - //Ventrella LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, mCameraUpVector, focus_agent); //LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, camera_skyward, focus_agent); - //end Ventrella // Change FOV LLViewerCamera::getInstance()->setView(LLViewerCamera::getInstance()->getDefaultFOV() / (1.f + mCameraCurrentFOVZoomFactor)); @@ -1534,12 +1525,11 @@ LLVector3d LLAgentCamera::calcFocusPositionTargetGlobal() clearFocusObject(); } - // Ventrella if (mCameraMode == CAMERA_MODE_FOLLOW && mFocusOnAvatar) { mFocusTargetGlobal = gAgent.getPosGlobalFromAgent(mFollowCam.getSimulatedFocus()); return mFocusTargetGlobal; - }// End Ventrella + } else if (mCameraMode == CAMERA_MODE_MOUSELOOK) { LLVector3d at_axis(1.0, 0.0, 0.0); @@ -1708,11 +1698,10 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit) LLVector3d camera_position_global; - // Ventrella if (mCameraMode == CAMERA_MODE_FOLLOW && mFocusOnAvatar) { camera_position_global = gAgent.getPosGlobalFromAgent(mFollowCam.getSimulatedPosition()); - }// End Ventrella + } else if (mCameraMode == CAMERA_MODE_MOUSELOOK) { if (!isAgentAvatarValid() || gAgentAvatarp->mDrawable.isNull()) @@ -2132,7 +2121,6 @@ void LLAgentCamera::changeCameraToDefault() } -// Ventrella //----------------------------------------------------------------------------- // changeCameraToFollow() //----------------------------------------------------------------------------- diff --git a/indra/newview/llagentlanguage.cpp b/indra/newview/llagentlanguage.cpp index e97f136489..3d4e34a549 100644 --- a/indra/newview/llagentlanguage.cpp +++ b/indra/newview/llagentlanguage.cpp @@ -39,21 +39,35 @@ // library includes #include "llui.h" // getLanguage() -LLAgentLanguage::LLAgentLanguage() +// static +void LLAgentLanguage::init() { - gSavedSettings.getControl("Language")->getSignal()->connect(boost::bind(&update)); - gSavedSettings.getControl("InstallLanguage")->getSignal()->connect(boost::bind(&update)); - gSavedSettings.getControl("SystemLanguage")->getSignal()->connect(boost::bind(&update)); - gSavedSettings.getControl("LanguageIsPublic")->getSignal()->connect(boost::bind(&update)); + gSavedSettings.getControl("Language")->getSignal()->connect(boost::bind(&onChange)); + gSavedSettings.getControl("InstallLanguage")->getSignal()->connect(boost::bind(&onChange)); + gSavedSettings.getControl("SystemLanguage")->getSignal()->connect(boost::bind(&onChange)); + gSavedSettings.getControl("LanguageIsPublic")->getSignal()->connect(boost::bind(&onChange)); } +// static +void LLAgentLanguage::onChange() +{ + // Clear inventory cache so that default names of inventory items + // appear retranslated (EXT-8308). + gSavedSettings.setBOOL("PurgeCacheOnNextStartup", TRUE); +} // send language settings to the sim // static bool LLAgentLanguage::update() { LLSD body; - std::string url = gAgent.getRegion()->getCapability("UpdateAgentLanguage"); + std::string url; + + if (gAgent.getRegion()) + { + url = gAgent.getRegion()->getCapability("UpdateAgentLanguage"); + } + if (!url.empty()) { std::string language = LLUI::getLanguage(); diff --git a/indra/newview/llagentlanguage.h b/indra/newview/llagentlanguage.h index 45348a1e50..d7e6f3c6c7 100644 --- a/indra/newview/llagentlanguage.h +++ b/indra/newview/llagentlanguage.h @@ -33,14 +33,14 @@ #ifndef LL_LLAGENTLANGUAGE_H #define LL_LLAGENTLANGUAGE_H -#include "llsingleton.h" // LLSingleton<> -#include "llevent.h" - -class LLAgentLanguage: public LLSingleton<LLAgentLanguage>, public LLOldEvents::LLSimpleListener +class LLAgentLanguage { public: - LLAgentLanguage(); + static void init(); static bool update(); + + private: + static void onChange(); }; #endif // LL_LLAGENTLANGUAGE_H diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index efa5eca217..5db16d9250 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -384,10 +384,13 @@ void LLAgentWearables::sendAgentWearablesUpdate() gAgent.sendReliableMessage(); } -void LLAgentWearables::saveWearable(const LLWearableType::EType type, const U32 index, BOOL send_update) +void LLAgentWearables::saveWearable(const LLWearableType::EType type, const U32 index, BOOL send_update, + const std::string new_name) { LLWearable* old_wearable = getWearable(type, index); - if (old_wearable && (old_wearable->isDirty() || old_wearable->isOldVersion())) + if(!old_wearable) return; + bool name_changed = !new_name.empty() && (new_name != old_wearable->getName()); + if (name_changed || old_wearable->isDirty() || old_wearable->isOldVersion()) { LLUUID old_item_id = old_wearable->getItemID(); LLWearable* new_wearable = LLWearableList::instance().createCopy(old_wearable); @@ -402,6 +405,12 @@ void LLAgentWearables::saveWearable(const LLWearableType::EType type, const U32 LLInventoryItem* item = gInventory.getItem(old_item_id); if (item) { + std::string item_name = item->getName(); + if (name_changed) + { + llinfos << "saveWearable changing name from " << item->getName() << " to " << new_name << llendl; + item_name = new_name; + } // Update existing inventory item LLPointer<LLViewerInventoryItem> template_item = new LLViewerInventoryItem(item->getUUID(), @@ -410,7 +419,7 @@ void LLAgentWearables::saveWearable(const LLWearableType::EType type, const U32 new_wearable->getAssetID(), new_wearable->getAssetType(), item->getInventoryType(), - item->getName(), + item_name, item->getDescription(), item->getSaleInfo(), item->getFlags(), @@ -418,6 +427,10 @@ void LLAgentWearables::saveWearable(const LLWearableType::EType type, const U32 template_item->setTransactionID(new_wearable->getTransactionID()); template_item->updateServer(FALSE); gInventory.updateItem(template_item); + if (name_changed) + { + gInventory.notifyObservers(); + } } else { @@ -1743,7 +1756,7 @@ void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj LLViewerObject *objectp = (*attachment_iter); if (objectp) { - LLUUID object_item_id = objectp->getItemID(); + LLUUID object_item_id = objectp->getAttachmentItemID(); if (requested_item_ids.find(object_item_id) != requested_item_ids.end()) { // Object currently worn, was requested. @@ -1872,10 +1885,7 @@ void LLAgentWearables::userAttachMultipleAttachments(LLInventoryModel::item_arra msg->nextBlockFast(_PREHASH_ObjectData ); msg->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID()); msg->addUUIDFast(_PREHASH_OwnerID, item->getPermissions().getOwner()); - if (gSavedSettings.getBOOL("MultipleAttachments")) - msg->addU8Fast(_PREHASH_AttachmentPt, 0 | ATTACHMENT_ADD ); - else - msg->addU8Fast(_PREHASH_AttachmentPt, 0 ); // Wear at the previous or default attachment point + msg->addU8Fast(_PREHASH_AttachmentPt, 0 ); // Wear at the previous or default attachment point pack_permissions_slam(msg, item->getFlags(), item->getPermissions()); msg->addStringFast(_PREHASH_Name, item->getName()); msg->addStringFast(_PREHASH_Description, item->getDescription()); diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h index 8122971db6..f3457363a0 100644 --- a/indra/newview/llagentwearables.h +++ b/indra/newview/llagentwearables.h @@ -206,7 +206,8 @@ private: //-------------------------------------------------------------------- public: void saveWearableAs(const LLWearableType::EType type, const U32 index, const std::string& new_name, BOOL save_in_lost_and_found); - void saveWearable(const LLWearableType::EType type, const U32 index, BOOL send_update = TRUE); + void saveWearable(const LLWearableType::EType type, const U32 index, BOOL send_update = TRUE, + const std::string new_name = ""); void saveAllWearables(); void revertWearable(const LLWearableType::EType type, const U32 index); diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp index d911d123f4..f6bb1b9bc9 100644 --- a/indra/newview/llagentwearablesfetch.cpp +++ b/indra/newview/llagentwearablesfetch.cpp @@ -215,7 +215,7 @@ void LLInitialWearablesFetch::processWearablesMessage() { LLViewerObject* attached_object = (*attachment_iter); if (!attached_object) continue; - const LLUUID& item_id = attached_object->getItemID(); + const LLUUID& item_id = attached_object->getAttachmentItemID(); if (item_id.isNull()) continue; ids.push_back(item_id); } diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index a7d90ab8d3..d0fa327cca 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -983,6 +983,10 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up LLNotificationsUtil::add("CannotWearTrash"); return false; } + else if (gInventory.isObjectDescendentOf(item_to_wear->getUUID(), LLAppearanceMgr::instance().getCOF())) // EXT-84911 + { + return false; + } switch (item_to_wear->getType()) { @@ -1008,7 +1012,7 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up addCOFItemLink(item_to_wear, do_update, cb); break; case LLAssetType::AT_OBJECT: - rez_attachment(item_to_wear, NULL); + rez_attachment(item_to_wear, NULL, replace); break; default: return false;; } @@ -1271,6 +1275,11 @@ bool LLAppearanceMgr::getCanRemoveFromCOF(const LLUUID& outfit_cat_id) // static bool LLAppearanceMgr::getCanAddToCOF(const LLUUID& outfit_cat_id) { + if (gAgentWearables.isCOFChangeInProgress()) + { + return false; + } + LLInventoryModel::cat_array_t cats; LLInventoryModel::item_array_t items; LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false); @@ -1282,6 +1291,24 @@ bool LLAppearanceMgr::getCanAddToCOF(const LLUUID& outfit_cat_id) return items.size() > 0; } +bool LLAppearanceMgr::getCanReplaceCOF(const LLUUID& outfit_cat_id) +{ + // Don't allow wearing anything while we're changing appearance. + if (gAgentWearables.isCOFChangeInProgress()) + { + return false; + } + + // Check whether it's the base outfit. + if (outfit_cat_id.isNull() || outfit_cat_id == getBaseOutfitUUID()) + { + return false; + } + + // Check whether the outfit contains the full set of body parts (shape+skin+hair+eyes). + return getCanMakeFolderIntoOutfit(outfit_cat_id); +} + void LLAppearanceMgr::purgeBaseOutfitLink(const LLUUID& category) { LLInventoryModel::cat_array_t cats; @@ -1573,46 +1600,56 @@ void item_array_diff(LLInventoryModel::item_array_t& full_list, } } -void LLAppearanceMgr::enforceItemCountLimits() +S32 LLAppearanceMgr::findExcessOrDuplicateItems(const LLUUID& cat_id, + LLAssetType::EType type, + S32 max_items, + LLInventoryModel::item_array_t& items_to_kill) { - S32 purge_count = 0; - - LLInventoryModel::item_array_t body_items; - getDescendentsOfAssetType(getCOF(), body_items, LLAssetType::AT_BODYPART, false); - LLInventoryModel::item_array_t curr_body_items = body_items; - removeDuplicateItems(body_items); - filterWearableItems(body_items, 1); - LLInventoryModel::item_array_t kill_body_items; - item_array_diff(curr_body_items,body_items,kill_body_items); - for (LLInventoryModel::item_array_t::iterator it = kill_body_items.begin(); - it != kill_body_items.end(); - ++it) + S32 to_kill_count = 0; + + LLInventoryModel::item_array_t items; + getDescendentsOfAssetType(cat_id, items, type, false); + LLInventoryModel::item_array_t curr_items = items; + removeDuplicateItems(items); + if (max_items > 0) { - LLViewerInventoryItem *item = *it; - llinfos << "purging dup body part " << item->getName() << llendl; - gInventory.purgeObject(item->getUUID()); - purge_count++; + filterWearableItems(items, max_items); } - - LLInventoryModel::item_array_t wear_items; - getDescendentsOfAssetType(getCOF(), wear_items, LLAssetType::AT_CLOTHING, false); - LLInventoryModel::item_array_t curr_wear_items = wear_items; - removeDuplicateItems(wear_items); - filterWearableItems(wear_items, LLAgentWearables::MAX_CLOTHING_PER_TYPE); - LLInventoryModel::item_array_t kill_wear_items; - item_array_diff(curr_wear_items,wear_items,kill_wear_items); - for (LLInventoryModel::item_array_t::iterator it = kill_wear_items.begin(); - it != kill_wear_items.end(); + LLInventoryModel::item_array_t kill_items; + item_array_diff(curr_items,items,kill_items); + for (LLInventoryModel::item_array_t::iterator it = kill_items.begin(); + it != kill_items.end(); ++it) { - LLViewerInventoryItem *item = *it; - llinfos << "purging excess clothing item " << item->getName() << llendl; - gInventory.purgeObject(item->getUUID()); - purge_count++; + items_to_kill.push_back(*it); + to_kill_count++; } + return to_kill_count; +} + + +void LLAppearanceMgr::enforceItemRestrictions() +{ + S32 purge_count = 0; + LLInventoryModel::item_array_t items_to_kill; + + purge_count += findExcessOrDuplicateItems(getCOF(),LLAssetType::AT_BODYPART, + 1, items_to_kill); + purge_count += findExcessOrDuplicateItems(getCOF(),LLAssetType::AT_CLOTHING, + LLAgentWearables::MAX_CLOTHING_PER_TYPE, items_to_kill); + purge_count += findExcessOrDuplicateItems(getCOF(),LLAssetType::AT_OBJECT, + -1, items_to_kill); - if (purge_count>0) + if (items_to_kill.size()>0) { + for (LLInventoryModel::item_array_t::iterator it = items_to_kill.begin(); + it != items_to_kill.end(); + ++it) + { + LLViewerInventoryItem *item = *it; + llinfos << "purging duplicate or excess item " << item->getName() << llendl; + gInventory.purgeObject(item->getUUID()); + } gInventory.notifyObservers(); } } @@ -1635,7 +1672,7 @@ void LLAppearanceMgr::updateAppearanceFromCOF(bool update_base_outfit_ordering) // Remove duplicate or excess wearables. Should normally be enforced at the UI level, but // this should catch anything that gets through. - enforceItemCountLimits(); + enforceItemRestrictions(); // update dirty flag to see if the state of the COF matches // the saved outfit stored as a folder link @@ -2209,6 +2246,7 @@ void LLAppearanceMgr::updateIsDirty() LLViewerInventoryItem *item2 = outfit_items.get(i); if (item1->getLinkedUUID() != item2->getLinkedUUID() || + item1->getName() != item2->getName() || item1->LLInventoryItem::getDescription() != item2->LLInventoryItem::getDescription()) { mOutfitIsDirty = true; @@ -2468,29 +2506,17 @@ void LLAppearanceMgr::removeItemFromAvatar(const LLUUID& id_to_remove) switch (item_to_remove->getType()) { - case LLAssetType::AT_CLOTHING: - if (get_is_item_worn(id_to_remove)) - { - //*TODO move here the exact removing code from LLWearableBridge::removeItemFromAvatar in the future - LLWearableBridge::removeItemFromAvatar(item_to_remove); - } - break; - case LLAssetType::AT_OBJECT: - gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - gMessageSystem->addUUIDFast(_PREHASH_ItemID, item_to_remove->getLinkedUUID()); - gMessageSystem->sendReliable( gAgent.getRegion()->getHost()); - - { - // this object might have been selected, so let the selection manager know it's gone now - LLViewerObject *found_obj = gObjectList.findObject(item_to_remove->getLinkedUUID()); - if (found_obj) + case LLAssetType::AT_CLOTHING: + if (get_is_item_worn(id_to_remove)) { - LLSelectMgr::getInstance()->remove(found_obj); - }; - } - default: break; + //*TODO move here the exact removing code from LLWearableBridge::removeItemFromAvatar in the future + LLWearableBridge::removeItemFromAvatar(item_to_remove); + } + break; + case LLAssetType::AT_OBJECT: + LLVOAvatarSelf::detachAttachmentIntoInventory(item_to_remove->getLinkedUUID()); + default: + break; } // *HACK: Force to remove garbage from COF. @@ -2630,7 +2656,6 @@ void LLAppearanceMgr::setAttachmentInvLinkEnable(bool val) mAttachmentInvLinkEnabled = val; } -// BAP TODO - mRegisteredAttachments is currently maintained but not used for anything. Consider yanking. void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg) { llinfos << msg << llendl; @@ -2650,7 +2675,6 @@ void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg) void LLAppearanceMgr::registerAttachment(const LLUUID& item_id) { - mRegisteredAttachments.insert(item_id); gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); if (mAttachmentInvLinkEnabled) @@ -2668,7 +2692,6 @@ void LLAppearanceMgr::registerAttachment(const LLUUID& item_id) void LLAppearanceMgr::unregisterAttachment(const LLUUID& item_id) { - mRegisteredAttachments.erase(item_id); gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); if (mAttachmentInvLinkEnabled) @@ -2681,21 +2704,24 @@ void LLAppearanceMgr::unregisterAttachment(const LLUUID& item_id) } } -void LLAppearanceMgr::linkRegisteredAttachments() +BOOL LLAppearanceMgr::getIsInCOF(const LLUUID& obj_id) const { - for (std::set<LLUUID>::iterator it = mRegisteredAttachments.begin(); - it != mRegisteredAttachments.end(); - ++it) - { - LLUUID item_id = *it; - addCOFItemLink(item_id, false); - } - mRegisteredAttachments.clear(); + return gInventory.isObjectDescendentOf(obj_id, getCOF()); } -BOOL LLAppearanceMgr::getIsInCOF(const LLUUID& obj_id) const +// static +bool LLAppearanceMgr::isLinkInCOF(const LLUUID& obj_id) { - return gInventory.isObjectDescendentOf(obj_id, getCOF()); + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + LLLinkedItemIDMatches find_links(gInventory.getLinkedItemID(obj_id)); + gInventory.collectDescendentsIf(LLAppearanceMgr::instance().getCOF(), + cats, + items, + LLInventoryModel::EXCLUDE_TRASH, + find_links); + + return !items.empty(); } BOOL LLAppearanceMgr::getIsProtectedCOFItem(const LLUUID& obj_id) const @@ -2725,3 +2751,192 @@ BOOL LLAppearanceMgr::getIsProtectedCOFItem(const LLUUID& obj_id) const return FALSE; */ } + +// Shim class to allow arbitrary boost::bind +// expressions to be run as one-time idle callbacks. +// +// TODO: rework idle function spec to take a boost::function in the first place. +class OnIdleCallbackOneTime +{ +public: + OnIdleCallbackOneTime(nullary_func_t callable): + mCallable(callable) + { + } + static void onIdle(void *data) + { + gIdleCallbacks.deleteFunction(onIdle, data); + OnIdleCallbackOneTime* self = reinterpret_cast<OnIdleCallbackOneTime*>(data); + self->call(); + delete self; + } + void call() + { + mCallable(); + } +private: + nullary_func_t mCallable; +}; + +void doOnIdleOneTime(nullary_func_t callable) +{ + OnIdleCallbackOneTime* cb_functor = new OnIdleCallbackOneTime(callable); + gIdleCallbacks.addFunction(&OnIdleCallbackOneTime::onIdle,cb_functor); +} + +// Shim class to allow generic boost functions to be run as +// recurring idle callbacks. Callable should return true when done, +// false to continue getting called. +// +// TODO: rework idle function spec to take a boost::function in the first place. +class OnIdleCallbackRepeating +{ +public: + OnIdleCallbackRepeating(bool_func_t callable): + mCallable(callable) + { + } + // Will keep getting called until the callable returns true. + static void onIdle(void *data) + { + OnIdleCallbackRepeating* self = reinterpret_cast<OnIdleCallbackRepeating*>(data); + bool done = self->call(); + if (done) + { + gIdleCallbacks.deleteFunction(onIdle, data); + delete self; + } + } + bool call() + { + return mCallable(); + } +private: + bool_func_t mCallable; +}; + +void doOnIdleRepeating(bool_func_t callable) +{ + OnIdleCallbackRepeating* cb_functor = new OnIdleCallbackRepeating(callable); + gIdleCallbacks.addFunction(&OnIdleCallbackRepeating::onIdle,cb_functor); +} + +class CallAfterCategoryFetchStage2: public LLInventoryFetchItemsObserver +{ +public: + CallAfterCategoryFetchStage2(const uuid_vec_t& ids, + nullary_func_t callable) : + LLInventoryFetchItemsObserver(ids), + mCallable(callable) + { + } + ~CallAfterCategoryFetchStage2() + { + } + virtual void done() + { + llinfos << this << " done with incomplete " << mIncomplete.size() + << " complete " << mComplete.size() << " calling callable" << llendl; + + gInventory.removeObserver(this); + doOnIdleOneTime(mCallable); + delete this; + } +protected: + nullary_func_t mCallable; +}; + +class CallAfterCategoryFetchStage1: public LLInventoryFetchDescendentsObserver +{ +public: + CallAfterCategoryFetchStage1(const LLUUID& cat_id, nullary_func_t callable) : + LLInventoryFetchDescendentsObserver(cat_id), + mCallable(callable) + { + } + ~CallAfterCategoryFetchStage1() + { + } + virtual void done() + { + // What we do here is get the complete information on the items in + // the library, and set up an observer that will wait for that to + // happen. + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t item_array; + gInventory.collectDescendents(mComplete.front(), + cat_array, + item_array, + LLInventoryModel::EXCLUDE_TRASH); + S32 count = item_array.count(); + if(!count) + { + llwarns << "Nothing fetched in category " << mComplete.front() + << llendl; + //dec_busy_count(); + gInventory.removeObserver(this); + + // lets notify observers that loading is finished. + gAgentWearables.notifyLoadingFinished(); + delete this; + return; + } + + llinfos << "stage1 got " << item_array.count() << " items, passing to stage2 " << llendl; + uuid_vec_t ids; + for(S32 i = 0; i < count; ++i) + { + ids.push_back(item_array.get(i)->getUUID()); + } + + gInventory.removeObserver(this); + + // do the fetch + CallAfterCategoryFetchStage2 *stage2 = new CallAfterCategoryFetchStage2(ids, mCallable); + stage2->startFetch(); + if(stage2->isFinished()) + { + // everything is already here - call done. + stage2->done(); + } + else + { + // it's all on it's way - add an observer, and the inventory + // will call done for us when everything is here. + gInventory.addObserver(stage2); + } + delete this; + } +protected: + nullary_func_t mCallable; +}; + +void callAfterCategoryFetch(const LLUUID& cat_id, nullary_func_t cb) +{ + CallAfterCategoryFetchStage1 *stage1 = new CallAfterCategoryFetchStage1(cat_id, cb); + stage1->startFetch(); + if (stage1->isFinished()) + { + stage1->done(); + } + else + { + gInventory.addObserver(stage1); + } +} + +void wear_multiple(const uuid_vec_t& ids, bool replace) +{ + LLPointer<LLInventoryCallback> cb = new LLUpdateAppearanceOnDestroy; + + bool first = true; + uuid_vec_t::const_iterator it; + for (it = ids.begin(); it != ids.end(); ++it) + { + // if replace is requested, the first item worn will replace the current top + // item, and others will be added. + LLAppearanceMgr::instance().wearItemOnAvatar(*it,false,first && replace,cb); + first = false; + } +} + diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 84c911c038..67c74e0343 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -66,7 +66,11 @@ public: void renameOutfit(const LLUUID& outfit_id); void takeOffOutfit(const LLUUID& cat_id); void addCategoryToCurrentOutfit(const LLUUID& cat_id); - void enforceItemCountLimits(); + S32 findExcessOrDuplicateItems(const LLUUID& cat_id, + LLAssetType::EType type, + S32 max_items, + LLInventoryModel::item_array_t& items_to_kill); + void enforceItemRestrictions(); // Copy all items and the src category itself. void shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id, @@ -84,6 +88,9 @@ public: // Determine whether we can add anything (but body parts) from the outfit contents to COF. static bool getCanAddToCOF(const LLUUID& outfit_cat_id); + // Determine whether we can replace current outfit with the given one. + bool getCanReplaceCOF(const LLUUID& outfit_cat_id); + // Copy all items in a category. void shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id, LLPointer<LLInventoryCallback> cb); @@ -116,7 +123,6 @@ public: void unregisterAttachment(const LLUUID& item_id); void registerAttachment(const LLUUID& item_id); void setAttachmentInvLinkEnable(bool val); - void linkRegisteredAttachments(); // utility function for bulk linking. void linkAll(const LLUUID& category, @@ -203,7 +209,6 @@ private: void setOutfitLocked(bool locked); - std::set<LLUUID> mRegisteredAttachments; bool mAttachmentInvLinkEnabled; bool mOutfitIsDirty; bool mIsInUpdateAppearanceFromCOF; // to detect recursive calls. @@ -223,6 +228,11 @@ public: BOOL getIsInCOF(const LLUUID& obj_id) const; // Is this in the COF and can the user delete it from the COF? BOOL getIsProtectedCOFItem(const LLUUID& obj_id) const; + + /** + * Checks if COF contains link to specified object. + */ + static bool isLinkInCOF(const LLUUID& obj_id); }; class LLUpdateAppearanceOnDestroy: public LLInventoryCallback @@ -242,180 +252,19 @@ private: LLUUID findDescendentCategoryIDByName(const LLUUID& parent_id,const std::string& name); -// Shim class and template function to allow arbitrary boost::bind -// expressions to be run as one-time idle callbacks. -template <typename T> -class OnIdleCallbackOneTime -{ -public: - OnIdleCallbackOneTime(T callable): - mCallable(callable) - { - } - static void onIdle(void *data) - { - gIdleCallbacks.deleteFunction(onIdle, data); - OnIdleCallbackOneTime<T>* self = reinterpret_cast<OnIdleCallbackOneTime<T>*>(data); - self->call(); - delete self; - } - void call() - { - mCallable(); - } -private: - T mCallable; -}; - -template <typename T> -void doOnIdleOneTime(T callable) -{ - OnIdleCallbackOneTime<T>* cb_functor = new OnIdleCallbackOneTime<T>(callable); - gIdleCallbacks.addFunction(&OnIdleCallbackOneTime<T>::onIdle,cb_functor); -} - -// Shim class and template function to allow arbitrary boost::bind -// expressions to be run as recurring idle callbacks. -// Callable should return true when done, false to continue getting called. -template <typename T> -class OnIdleCallbackRepeating -{ -public: - OnIdleCallbackRepeating(T callable): - mCallable(callable) - { - } - // Will keep getting called until the callable returns true. - static void onIdle(void *data) - { - OnIdleCallbackRepeating<T>* self = reinterpret_cast<OnIdleCallbackRepeating<T>*>(data); - bool done = self->call(); - if (done) - { - gIdleCallbacks.deleteFunction(onIdle, data); - delete self; - } - } - bool call() - { - return mCallable(); - } -private: - T mCallable; -}; +typedef boost::function<void ()> nullary_func_t; +typedef boost::function<bool ()> bool_func_t; -template <typename T> -void doOnIdleRepeating(T callable) -{ - OnIdleCallbackRepeating<T>* cb_functor = new OnIdleCallbackRepeating<T>(callable); - gIdleCallbacks.addFunction(&OnIdleCallbackRepeating<T>::onIdle,cb_functor); -} +// Call a given callable once in idle loop. +void doOnIdleOneTime(nullary_func_t callable); -template <class T> -class CallAfterCategoryFetchStage2: public LLInventoryFetchItemsObserver -{ -public: - CallAfterCategoryFetchStage2(const uuid_vec_t& ids, - T callable) : - LLInventoryFetchItemsObserver(ids), - mCallable(callable) - { - } - ~CallAfterCategoryFetchStage2() - { - } - virtual void done() - { - llinfos << this << " done with incomplete " << mIncomplete.size() - << " complete " << mComplete.size() << " calling callable" << llendl; - - gInventory.removeObserver(this); - doOnIdleOneTime(mCallable); - delete this; - } -protected: - T mCallable; -}; +// Repeatedly call a callable in idle loop until it returns true. +void doOnIdleRepeating(bool_func_t callable); -template <class T> -class CallAfterCategoryFetchStage1: public LLInventoryFetchDescendentsObserver -{ -public: - CallAfterCategoryFetchStage1(const LLUUID& cat_id, T callable) : - LLInventoryFetchDescendentsObserver(cat_id), - mCallable(callable) - { - } - ~CallAfterCategoryFetchStage1() - { - } - virtual void done() - { - // What we do here is get the complete information on the items in - // the library, and set up an observer that will wait for that to - // happen. - LLInventoryModel::cat_array_t cat_array; - LLInventoryModel::item_array_t item_array; - gInventory.collectDescendents(mComplete.front(), - cat_array, - item_array, - LLInventoryModel::EXCLUDE_TRASH); - S32 count = item_array.count(); - if(!count) - { - llwarns << "Nothing fetched in category " << mComplete.front() - << llendl; - //dec_busy_count(); - gInventory.removeObserver(this); - - // lets notify observers that loading is finished. - gAgentWearables.notifyLoadingFinished(); - delete this; - return; - } - - llinfos << "stage1 got " << item_array.count() << " items, passing to stage2 " << llendl; - uuid_vec_t ids; - for(S32 i = 0; i < count; ++i) - { - ids.push_back(item_array.get(i)->getUUID()); - } - - gInventory.removeObserver(this); - - // do the fetch - CallAfterCategoryFetchStage2<T> *stage2 = new CallAfterCategoryFetchStage2<T>(ids, mCallable); - stage2->startFetch(); - if(stage2->isFinished()) - { - // everything is already here - call done. - stage2->done(); - } - else - { - // it's all on it's way - add an observer, and the inventory - // will call done for us when everything is here. - gInventory.addObserver(stage2); - } - delete this; - } -protected: - T mCallable; -}; +// Invoke a given callable after category contents are fully fetched. +void callAfterCategoryFetch(const LLUUID& cat_id, nullary_func_t cb); -template <class T> -void callAfterCategoryFetch(const LLUUID& cat_id, T callable) -{ - CallAfterCategoryFetchStage1<T> *stage1 = new CallAfterCategoryFetchStage1<T>(cat_id, callable); - stage1->startFetch(); - if (stage1->isFinished()) - { - stage1->done(); - } - else - { - gInventory.addObserver(stage1); - } -} +// Wear all items in a uuid vector. +void wear_multiple(const uuid_vec_t& ids, bool replace); #endif diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 8ffdd30d04..d4621db329 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -45,6 +45,7 @@ #include "llgroupmgr.h" #include "llagent.h" #include "llagentcamera.h" +#include "llagentlanguage.h" #include "llagentwearables.h" #include "llwindow.h" #include "llviewerstats.h" @@ -359,7 +360,7 @@ static void ui_audio_callback(const LLUUID& uuid) bool create_text_segment_icon_from_url_match(LLUrlMatch* match,LLTextBase* base) { - if(!match || !base) + if(!match || !base || base->getPlainText()) return false; LLUUID match_id = match->getID(); @@ -388,7 +389,7 @@ bool create_text_segment_icon_from_url_match(LLUrlMatch* match,LLTextBase* base) params.view = icon; params.left_pad = 4; params.right_pad = 4; - params.top_pad = 2; + params.top_pad = -2; params.bottom_pad = 2; base->appendWidget(params," ",false); @@ -952,6 +953,8 @@ bool LLAppViewer::init() LLStringOps::sPM = LLTrans::getString("dateTimePM"); } + LLAgentLanguage::init(); + return true; } @@ -1126,8 +1129,7 @@ bool LLAppViewer::mainLoop() { LLMemType mt_sleep(LLMemType::MTYPE_SLEEP); LLFastTimer t2(FTM_SLEEP); - bool run_multiple_threads = gSavedSettings.getBOOL("RunMultipleThreads"); - + // yield some time to the os based on command line option if(mYieldTime >= 0) { @@ -1165,9 +1167,7 @@ bool LLAppViewer::mainLoop() } static const F64 FRAME_SLOW_THRESHOLD = 0.5; //2 frames per seconds - const F64 min_frame_time = 0.0; //(.0333 - .0010); // max video frame rate = 30 fps - const F64 min_idle_time = 0.0; //(.0010); // min idle time = 1 ms - const F64 max_idle_time = run_multiple_threads ? min_idle_time : llmin(.005*10.0*gFrameTimeSeconds, 0.005); // 5 ms a second + const F64 max_idle_time = llmin(.005*10.0*gFrameTimeSeconds, 0.005); // 5 ms a second idleTimer.reset(); bool is_slow = (frameTimer.getElapsedTimeF64() > FRAME_SLOW_THRESHOLD) ; S32 total_work_pending = 0; @@ -1205,34 +1205,24 @@ bool LLAppViewer::mainLoop() total_work_pending += work_pending ; total_io_pending += io_pending ; - F64 frame_time = frameTimer.getElapsedTimeF64(); - F64 idle_time = idleTimer.getElapsedTimeF64(); - if (frame_time >= min_frame_time && - idle_time >= min_idle_time && - (!work_pending || idle_time >= max_idle_time)) + + if (!work_pending || idleTimer.getElapsedTimeF64() >= max_idle_time) { break; } } - // Prevent the worker threads from running while rendering. - // if (LLThread::processorCount()==1) //pause() should only be required when on a single processor client... - if (run_multiple_threads == FALSE) + if(!total_work_pending) //pause texture fetching threads if nothing to process. { - //LLFastTimer ftm(FTM_PAUSE_THREADS); //not necessary. - - if(!total_work_pending) //pause texture fetching threads if nothing to process. - { - LLAppViewer::getTextureCache()->pause(); - LLAppViewer::getImageDecodeThread()->pause(); - LLAppViewer::getTextureFetch()->pause(); - } - if(!total_io_pending) //pause file threads if nothing to process. - { - LLVFSThread::sLocal->pause(); - LLLFSThread::sLocal->pause(); - } - } + LLAppViewer::getTextureCache()->pause(); + LLAppViewer::getImageDecodeThread()->pause(); + LLAppViewer::getTextureFetch()->pause(); + } + if(!total_io_pending) //pause file threads if nothing to process. + { + LLVFSThread::sLocal->pause(); + LLLFSThread::sLocal->pause(); + } if ((LLStartUp::getStartupState() >= STATE_CLEANUP) && (frameTimer.getElapsedTimeF64() > FRAME_STALL_THRESHOLD)) diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 752a2e7504..1e59e5b805 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -550,9 +550,10 @@ namespace action_give_inventory } LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE); - if (NULL == active_panel) + if (!active_panel) { - return; + active_panel = get_outfit_editor_inventory_panel(); + if (!active_panel) return; } const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList(); diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index 99156b9d9d..57e186b6a8 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -384,7 +384,7 @@ void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is item->setShowProfileBtn(mShowProfileBtn); item->showSpeakingIndicator(mShowSpeakingIndicator); - item->setDoubleClickCallback(boost::bind(&LLAvatarList::onItemDoucleClicked, this, _1, _2, _3, _4)); + item->setDoubleClickCallback(boost::bind(&LLAvatarList::onItemDoubleClicked, this, _1, _2, _3, _4)); addItem(item, id, pos); } @@ -447,7 +447,7 @@ void LLAvatarList::updateLastInteractionTimes() } } -void LLAvatarList::onItemDoucleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask) +void LLAvatarList::onItemDoubleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask) { mItemDoubleClickSignal(ctrl, x, y, mask); } diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index fffc6e6e73..5b010c9cfe 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -110,7 +110,7 @@ protected: uuid_vec_t& vadded, uuid_vec_t& vremoved); void updateLastInteractionTimes(); - void onItemDoucleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask); + void onItemDoubleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask); private: diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index c74075d67f..eead0c9b3e 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -127,7 +127,7 @@ S32 LLAvatarListItem::notifyParent(const LLSD& info) void LLAvatarListItem::onMouseEnter(S32 x, S32 y, MASK mask) { - childSetVisible("hovered_icon", true); + getChildView("hovered_icon")->setVisible( true); mInfoBtn->setVisible(mShowInfoBtn); mProfileBtn->setVisible(mShowProfileBtn); @@ -138,7 +138,7 @@ void LLAvatarListItem::onMouseEnter(S32 x, S32 y, MASK mask) void LLAvatarListItem::onMouseLeave(S32 x, S32 y, MASK mask) { - childSetVisible("hovered_icon", false); + getChildView("hovered_icon")->setVisible( false); mInfoBtn->setVisible(false); mProfileBtn->setVisible(false); @@ -315,7 +315,7 @@ void LLAvatarListItem::setValue( const LLSD& value ) { if (!value.isMap()) return;; if (!value.has("selected")) return; - childSetVisible("selected_icon", value["selected"]); + getChildView("selected_icon")->setVisible( value["selected"]); } const LLUUID& LLAvatarListItem::getAvatarId() const diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 41f5fe64a1..0e5e8d0fe7 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -59,7 +59,7 @@ static void update_build_button_enable_state() { bool can_edit = LLToolMgr::getInstance()->canEdit(); - LLBottomTray::getInstance()->childSetEnabled("build_btn", can_edit); + LLBottomTray::getInstance()->getChildView("build_btn")->setEnabled(can_edit); } // Build time optimization, generate extern template once in .cpp file diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index b494470cbc..a03fe79512 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -296,7 +296,7 @@ void LLCallFloater::updateSession() // Hide "Leave Call" button for nearby chat bool is_local_chat = mVoiceType == VC_LOCAL_CHAT; - childSetVisible("leave_call_btn_panel", !is_local_chat); + getChildView("leave_call_btn_panel")->setVisible( !is_local_chat); refreshParticipantList(); updateAgentModeratorState(); @@ -419,11 +419,11 @@ void LLCallFloater::initAgentData() if ( mAgentPanel ) { - mAgentPanel->childSetValue("user_icon", gAgentID); + mAgentPanel->getChild<LLUICtrl>("user_icon")->setValue(gAgentID); std::string name; gCacheName->getFullName(gAgentID, name); - mAgentPanel->childSetValue("user_text", name); + mAgentPanel->getChild<LLUICtrl>("user_text")->setValue(name); mSpeakingIndicator = mAgentPanel->getChild<LLOutputMonitorCtrl>("speaking_indicator"); mSpeakingIndicator->setSpeakerId(gAgentID); @@ -461,7 +461,7 @@ void LLCallFloater::updateAgentModeratorState() } } } - mAgentPanel->childSetValue("user_text", name); + mAgentPanel->getChild<LLUICtrl>("user_text")->setValue(name); } static void get_voice_participants_uuids(uuid_vec_t& speakers_uuids) @@ -766,7 +766,7 @@ void LLCallFloater::reset(const LLVoiceChannel::EState& new_state) { // hides "Leave Call" when call is ended in parcel with disabled voice- hiding usually happens in // updateSession() which won't be called here because connect to nearby voice never happens - childSetVisible("leave_call_btn_panel", false); + getChildView("leave_call_btn_panel")->setVisible( false); // setting title to nearby chat an "no one near..." text- because in region with disabled // voice we won't have chance to really connect to nearby, so VCP is changed here manually setTitle(getString("title_nearby")); diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp index cd279fa10a..73fbe78298 100644 --- a/indra/newview/llchatbar.cpp +++ b/indra/newview/llchatbar.cpp @@ -191,7 +191,7 @@ void LLChatBar::refresh() gAgent.stopTyping(); } - childSetEnabled("Say", mInputEditor->getText().size() > 0); + getChildView("Say")->setEnabled(mInputEditor->getText().size() > 0); } @@ -393,7 +393,7 @@ void LLChatBar::sendChat( EChatType type ) } } - childSetValue("Chat Editor", LLStringUtil::null); + getChild<LLUICtrl>("Chat Editor")->setValue(LLStringUtil::null); gAgent.stopTyping(); diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index c0fa910f86..7204e6c39c 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -111,6 +111,12 @@ public: return pInstance; } + ~LLChatHistoryHeader() + { + // Detach the info button so that it doesn't get destroyed (EXT-8463). + hideInfoCtrl(); + } + BOOL handleMouseUp(S32 x, S32 y, MASK mask) { return LLPanel::handleMouseUp(x,y,mask); @@ -382,8 +388,18 @@ protected: if (!sInfoCtrl) { + // *TODO: Delete the button at exit. sInfoCtrl = LLUICtrlFactory::createFromFile<LLUICtrl>("inspector_info_ctrl.xml", NULL, LLPanel::child_registry_t::instance()); - sInfoCtrl->setCommitCallback(boost::bind(&LLChatHistoryHeader::onClickInfoCtrl, sInfoCtrl)); + if (sInfoCtrl) + { + sInfoCtrl->setCommitCallback(boost::bind(&LLChatHistoryHeader::onClickInfoCtrl, sInfoCtrl)); + } + } + + if (!sInfoCtrl) + { + llassert(sInfoCtrl != NULL); + return; } LLTextBase* name = getChild<LLTextBase>("user_name"); @@ -683,8 +699,9 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL { LLStyle::Params link_params(style_params); link_params.overwriteFrom(LLStyleMap::instance().lookupAgent(chat.mFromID)); - // Convert the name to a hotlink and add to message. - mEditor->appendText(chat.mFromName + delimiter, false, link_params); + // Add link to avatar's inspector and delimiter to message. + mEditor->appendText(link_params.link_href, false, style_params); + mEditor->appendText(delimiter, false, style_params); } else { diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index 86d9121213..29ead762d7 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -163,7 +163,7 @@ public: } protected: - static void replaceWearable() + static void replaceWearable(const LLUUID& item_id) { // *TODO: Most probable that accessing to LLPanelOutfitEdit instance should be: // LLSideTray::getInstance()->getSidepanelAppearance()->getPanelOutfitEdit() @@ -175,7 +175,7 @@ protected: "panel_outfit_edit")); if (panel_outfit_edit != NULL) { - panel_outfit_edit->showAddWearablesPanel(true); + panel_outfit_edit->onReplaceMenuItemClicked(item_id); } } @@ -187,7 +187,7 @@ protected: functor_t take_off = boost::bind(&LLAppearanceMgr::removeItemFromAvatar, LLAppearanceMgr::getInstance(), _1); registrar.add("Clothing.TakeOff", boost::bind(handleMultiple, take_off, mUUIDs)); - registrar.add("Clothing.Replace", boost::bind(replaceWearable)); + registrar.add("Clothing.Replace", boost::bind(replaceWearable, selected_id)); registrar.add("Clothing.Edit", boost::bind(LLAgentWearables::editWearable, selected_id)); registrar.add("Clothing.Create", boost::bind(&CofClothingContextMenu::createNew, this, selected_id)); @@ -244,7 +244,7 @@ protected: // *HACK* need to pass pointer to LLPanelOutfitEdit instead of LLSideTray::getInstance()->getPanel(). // LLSideTray::getInstance()->getPanel() is rather slow variant LLPanelOutfitEdit* panel_oe = dynamic_cast<LLPanelOutfitEdit*>(LLSideTray::getInstance()->getPanel("panel_outfit_edit")); - registrar.add("BodyPart.Replace", boost::bind(&LLPanelOutfitEdit::onReplaceBodyPartMenuItemClicked, panel_oe, selected_id)); + registrar.add("BodyPart.Replace", boost::bind(&LLPanelOutfitEdit::onReplaceMenuItemClicked, panel_oe, selected_id)); registrar.add("BodyPart.Edit", boost::bind(LLAgentWearables::editWearable, selected_id)); registrar.add("BodyPart.Create", boost::bind(&CofBodyPartContextMenu::createNew, this, selected_id)); @@ -284,6 +284,7 @@ LLCOFWearables::LLCOFWearables() : LLPanel(), mAttachmentsTab(NULL), mBodyPartsTab(NULL), mLastSelectedTab(NULL), + mAccordionCtrl(NULL), mCOFVersion(-1) { mClothingMenu = new CofClothingContextMenu(this); @@ -336,6 +337,8 @@ BOOL LLCOFWearables::postBuild() mTab2AssetType[mAttachmentsTab] = LLAssetType::AT_OBJECT; mTab2AssetType[mBodyPartsTab] = LLAssetType::AT_BODYPART; + mAccordionCtrl = getChild<LLAccordionCtrl>("cof_wearables_accordion"); + return LLPanel::postBuild(); } @@ -393,7 +396,11 @@ void LLCOFWearables::refresh() return; } - if (mCOFVersion == catp->getVersion()) return; + // BAP - this check has to be removed because an item name change does not + // change cat version - ie, checking version is not a complete way + // of finding out whether anything has changed in this category. + //if (mCOFVersion == catp->getVersion()) return; + mCOFVersion = catp->getVersion(); typedef std::vector<LLSD> values_vector_t; @@ -513,10 +520,10 @@ LLPanelClothingListItem* LLCOFWearables::buildClothingListItem(LLViewerInventory //setting callbacks //*TODO move that item panel's inner structure disclosing stuff into the panels - item_panel->childSetAction("btn_delete", mCOFCallbacks.mDeleteWearable); - item_panel->childSetAction("btn_move_up", mCOFCallbacks.mMoveWearableFurther); - item_panel->childSetAction("btn_move_down", mCOFCallbacks.mMoveWearableCloser); - item_panel->childSetAction("btn_edit", mCOFCallbacks.mEditWearable); + item_panel->childSetAction("btn_delete", boost::bind(mCOFCallbacks.mDeleteWearable)); + item_panel->childSetAction("btn_move_up", boost::bind(mCOFCallbacks.mMoveWearableFurther)); + item_panel->childSetAction("btn_move_down", boost::bind(mCOFCallbacks.mMoveWearableCloser)); + item_panel->childSetAction("btn_edit", boost::bind(mCOFCallbacks.mEditWearable)); //turning on gray separator line for the last item in the items group of the same wearable type item_panel->setSeparatorVisible(last); @@ -542,8 +549,8 @@ LLPanelBodyPartsListItem* LLCOFWearables::buildBodypartListItem(LLViewerInventor //setting callbacks //*TODO move that item panel's inner structure disclosing stuff into the panels - item_panel->childSetAction("btn_delete", mCOFCallbacks.mDeleteWearable); - item_panel->childSetAction("btn_edit", mCOFCallbacks.mEditWearable); + item_panel->childSetAction("btn_delete", boost::bind(mCOFCallbacks.mDeleteWearable)); + item_panel->childSetAction("btn_edit", boost::bind(mCOFCallbacks.mEditWearable)); return item_panel; } @@ -558,7 +565,7 @@ LLPanelDeletableWearableListItem* LLCOFWearables::buildAttachemntListItem(LLView //setting callbacks //*TODO move that item panel's inner structure disclosing stuff into the panels - item_panel->childSetAction("btn_delete", mCOFCallbacks.mDeleteWearable); + item_panel->childSetAction("btn_delete", boost::bind(mCOFCallbacks.mDeleteWearable)); return item_panel; } @@ -604,7 +611,7 @@ void LLCOFWearables::addClothingTypesDummies(const LLAppearanceMgr::wearables_by LLWearableType::EType w_type = static_cast<LLWearableType::EType>(type); LLPanelInventoryListItemBase* item_panel = LLPanelDummyClothingListItem::create(w_type); if(!item_panel) continue; - item_panel->childSetAction("btn_add", mCOFCallbacks.mAddWearable); + item_panel->childSetAction("btn_add", boost::bind(mCOFCallbacks.mAddWearable)); mClothing->addItem(item_panel, LLUUID::null, ADD_BOTTOM, false); } } @@ -651,20 +658,37 @@ LLAssetType::EType LLCOFWearables::getExpandedAccordionAssetType() typedef std::map<std::string, LLAssetType::EType> type_map_t; static type_map_t type_map; - static LLAccordionCtrl* accordion_ctrl = getChild<LLAccordionCtrl>("cof_wearables_accordion"); - const LLAccordionCtrlTab* expanded_tab = accordion_ctrl->getExpandedTab(); + + if (mAccordionCtrl != NULL) + { + const LLAccordionCtrlTab* expanded_tab = mAccordionCtrl->getExpandedTab(); return get_if_there(mTab2AssetType, expanded_tab, LLAssetType::AT_NONE); } + return LLAssetType::AT_NONE; +} + LLAssetType::EType LLCOFWearables::getSelectedAccordionAssetType() { - static LLAccordionCtrl* accordion_ctrl = getChild<LLAccordionCtrl>("cof_wearables_accordion"); - const LLAccordionCtrlTab* selected_tab = accordion_ctrl->getSelectedTab(); + if (mAccordionCtrl != NULL) + { + const LLAccordionCtrlTab* selected_tab = mAccordionCtrl->getSelectedTab(); return get_if_there(mTab2AssetType, selected_tab, LLAssetType::AT_NONE); } + return LLAssetType::AT_NONE; +} + +void LLCOFWearables::expandDefaultAccordionTab() +{ + if (mAccordionCtrl != NULL) + { + mAccordionCtrl->expandDefaultTab(); + } +} + void LLCOFWearables::onListRightClick(LLUICtrl* ctrl, S32 x, S32 y, LLListContextMenu* menu) { if(menu) diff --git a/indra/newview/llcofwearables.h b/indra/newview/llcofwearables.h index d005b75eaa..b23c097b21 100644 --- a/indra/newview/llcofwearables.h +++ b/indra/newview/llcofwearables.h @@ -40,6 +40,7 @@ #include "llappearancemgr.h" #include "llinventorymodel.h" +class LLAccordionCtrl; class LLAccordionCtrlTab; class LLListContextMenu; class LLPanelClothingListItem; @@ -59,7 +60,7 @@ public: LLCOFCallbacks() {}; virtual ~LLCOFCallbacks() {}; - typedef boost::function<void (void*)> cof_callback_t; + typedef boost::function<void ()> cof_callback_t; cof_callback_t mAddWearable; cof_callback_t mMoveWearableCloser; @@ -87,6 +88,7 @@ public: LLAssetType::EType getExpandedAccordionAssetType(); LLAssetType::EType getSelectedAccordionAssetType(); + void expandDefaultAccordionTab(); LLCOFCallbacks& getCOFCallbacks() { return mCOFCallbacks; } @@ -125,6 +127,8 @@ protected: LLListContextMenu* mAttachmentMenu; LLListContextMenu* mBodyPartMenu; + LLAccordionCtrl* mAccordionCtrl; + /* COF category version since last refresh */ S32 mCOFVersion; }; diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp index feb8c540ef..e91bf33502 100644 --- a/indra/newview/llcompilequeue.cpp +++ b/indra/newview/llcompilequeue.cpp @@ -106,7 +106,7 @@ LLFloaterScriptQueue::~LLFloaterScriptQueue() BOOL LLFloaterScriptQueue::postBuild() { childSetAction("close",onCloseBtn,this); - childSetEnabled("close",FALSE); + getChildView("close")->setEnabled(FALSE); return TRUE; } @@ -219,7 +219,7 @@ BOOL LLFloaterScriptQueue::nextObject() { mDone = true; getChild<LLScrollListCtrl>("queue output")->setCommentText(getString("Done")); - childSetEnabled("close",TRUE); + getChildView("close")->setEnabled(TRUE); } return successful_start; } diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp index fd3df359bd..3d40358ce5 100644 --- a/indra/newview/llcurrencyuimanager.cpp +++ b/indra/newview/llcurrencyuimanager.cpp @@ -35,6 +35,8 @@ #include "lluictrlfactory.h" #include "lltextbox.h" #include "lllineeditor.h" +#include "llresmgr.h" // for LLLocale +#include "lltrans.h" #include "llviewercontrol.h" #include "llversioninfo.h" @@ -323,7 +325,12 @@ std::string LLCurrencyUIManager::Impl::getLocalEstimate() const if (mUSDCurrencyEstimated) { // we have the old-style USD-specific value - return "US$ " + llformat("%#.2f", mUSDCurrencyEstimatedCost / 100.0); + LLStringUtil::format_map_t args; + { + LLLocale locale_override(LLStringUtil::getLocale()); + args["[AMOUNT]"] = llformat("%#.2f", mUSDCurrencyEstimatedCost / 100.0); + } + return LLTrans::getString("LocalEstimateUSD", args); } return ""; } @@ -405,8 +412,8 @@ void LLCurrencyUIManager::Impl::currencyKey(S32 value) //cannot just simply refresh the whole UI, as the edit field will // get reset and the cursor will change... - mPanel.childHide("currency_est"); - mPanel.childSetVisible("getting_data",TRUE); + mPanel.getChildView("currency_est")->setVisible(FALSE); + mPanel.getChildView("getting_data")->setVisible(TRUE); } mCurrencyChanged = true; @@ -435,13 +442,13 @@ void LLCurrencyUIManager::Impl::updateUI() { if (mHidden) { - mPanel.childHide("currency_action"); - mPanel.childHide("currency_amt"); - mPanel.childHide("currency_est"); + mPanel.getChildView("currency_action")->setVisible(FALSE); + mPanel.getChildView("currency_amt")->setVisible(FALSE); + mPanel.getChildView("currency_est")->setVisible(FALSE); return; } - mPanel.childShow("currency_action"); + mPanel.getChildView("currency_action")->setVisible(TRUE); LLLineEditor* lindenAmount = mPanel.getChild<LLLineEditor>("currency_amt"); if (lindenAmount) @@ -464,17 +471,17 @@ void LLCurrencyUIManager::Impl::updateUI() } } - mPanel.childSetTextArg("currency_est", "[LOCALAMOUNT]", getLocalEstimate()); - mPanel.childSetVisible("currency_est", hasEstimate() && mUserCurrencyBuy > 0); + mPanel.getChild<LLUICtrl>("currency_est")->setTextArg("[LOCALAMOUNT]", getLocalEstimate()); + mPanel.getChildView("currency_est")->setVisible( hasEstimate() && mUserCurrencyBuy > 0); - mPanel.childSetVisible("currency_links", mSupportsInternationalBilling); - mPanel.childSetVisible("exchange_rate_note", mSupportsInternationalBilling); + mPanel.getChildView("currency_links")->setVisible( mSupportsInternationalBilling); + mPanel.getChildView("exchange_rate_note")->setVisible( mSupportsInternationalBilling); - if (mPanel.childIsEnabled("buy_btn") - ||mPanel.childIsVisible("currency_est") - || mPanel.childIsVisible("error_web")) + if (mPanel.getChildView("buy_btn")->getEnabled() + ||mPanel.getChildView("currency_est")->getVisible() + || mPanel.getChildView("error_web")->getVisible()) { - mPanel.childSetVisible("getting_data",FALSE); + mPanel.getChildView("getting_data")->setVisible(FALSE); } } diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 0b0297d2b8..7292efc24a 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -158,7 +158,7 @@ void LLStandardBumpmap::addstandard() 0, 0); gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setBoostLevel(LLViewerTexture::BOOST_BUMP) ; - gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setLoadedCallback(LLBumpImageList::onSourceStandardLoaded, 0, TRUE, FALSE, NULL, NULL, NULL ); + gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setLoadedCallback(LLBumpImageList::onSourceStandardLoaded, 0, TRUE, FALSE, NULL, NULL ); LLStandardBumpmap::sStandardBumpmapCount++; } @@ -1025,7 +1025,7 @@ LLViewerTexture* LLBumpImageList::getBrightnessDarknessImage(LLViewerFetchedText // Note: this may create an LLImageGL immediately src_image->setBoostLevel(LLViewerTexture::BOOST_BUMP) ; - src_image->setLoadedCallback( callback_func, 0, TRUE, FALSE, new LLUUID(src_image->getID()), NULL, NULL ); + src_image->setLoadedCallback( callback_func, 0, TRUE, FALSE, new LLUUID(src_image->getID()), NULL ); bump = (*entries_list)[src_image->getID()]; // In case callback was called immediately and replaced the image // bump_total++; diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp index c423473740..a460a4f618 100644 --- a/indra/newview/lldynamictexture.cpp +++ b/indra/newview/lldynamictexture.cpp @@ -167,8 +167,19 @@ void LLViewerDynamicTexture::postRender(BOOL success) { generateGLTexture() ; } - llcallstacks << "class type: " << (S32)getType() << llcallstacksendl ; + else if(!mGLTexturep->getHasGLTexture()) + { + generateGLTexture() ; + } + else if(mGLTexturep->getDiscardLevel() != 0)//do not know how it happens, but regenerate one if it does. + { + generateGLTexture() ; + } + if(gGLManager.mDebugGPU) + { + LLGLState::dumpStates() ; + } success = mGLTexturep->setSubImageFromFrameBuffer(0, 0, mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight); } } @@ -207,11 +218,16 @@ BOOL LLViewerDynamicTexture::updateAllInstances() { LLViewerDynamicTexture *dynamicTexture = *iter; if (dynamicTexture->needsRender()) - { + { + if(gGLManager.mDebugGPU) + { + llinfos << "class type: " << (S32)dynamicTexture->getType() << llendl; + LLGLState::dumpStates() ; + } + glClear(GL_DEPTH_BUFFER_BIT); gDepthDirty = TRUE; - - + gGL.color4f(1,1,1,1); dynamicTexture->preRender(); // Must be called outside of startRender() result = FALSE; diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index 92fda31cc2..8c6265fbc2 100644 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -34,6 +34,7 @@ #include "llexpandabletextbox.h" #include "llscrollcontainer.h" +#include "lltrans.h" #include "llwindow.h" #include "llviewerwindow.h" @@ -117,7 +118,7 @@ LLExpandableTextBox::LLTextBoxEx::Params::Params() LLExpandableTextBox::LLTextBoxEx::LLTextBoxEx(const Params& p) : LLTextEditor(p), - mExpanderLabel(p.label), + mExpanderLabel(p.label.isProvided() ? p.label : LLTrans::getString("More")), mExpanderVisible(false) { setIsChrome(TRUE); @@ -140,13 +141,7 @@ void LLExpandableTextBox::LLTextBoxEx::setText(const LLStringExplicit& text,cons // LLTextBox::setText will obliterate the expander segment, so make sure // we generate it again by clearing mExpanderVisible mExpanderVisible = false; - - // Workaround for EXT-8259: trim text before rendering it. - { - std::string trimmed_text(text); - LLStringUtil::trim(trimmed_text); - LLTextEditor::setText(trimmed_text, input_params); - } + LLTextEditor::setText(text, input_params); // text contents have changed, segments are cleared out // so hide the expander and determine if we need it diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 5d7d3387a4..7c25d14783 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -1641,7 +1641,7 @@ F32 LLFace::getTextureVirtualSize() F32 cos_angle_to_view_dir; BOOL in_frustum = calcPixelArea(cos_angle_to_view_dir, radius); - if (mPixelArea < 0.0001f || !in_frustum) + if (mPixelArea < F_ALMOST_ZERO || !in_frustum) { setVirtualSize(0.f) ; return 0.f; @@ -1669,24 +1669,13 @@ F32 LLFace::getTextureVirtualSize() face_area = mPixelArea / llclamp(texel_area, 0.015625f, 128.f); } - if(face_area > LLViewerTexture::sMaxSmallImageSize) + face_area = LLFace::adjustPixelArea(mImportanceToCamera, face_area) ; + if(face_area > LLViewerTexture::sMinLargeImageSize) //if is large image, shrink face_area by considering the partial overlapping. { - if(mImportanceToCamera < LEAST_IMPORTANCE) //if the face is not important, do not load hi-res. - { - static const F32 MAX_LEAST_IMPORTANCE_IMAGE_SIZE = 128.0f * 128.0f ; - face_area = llmin(face_area * 0.5f, MAX_LEAST_IMPORTANCE_IMAGE_SIZE) ; - } - else if(face_area > LLViewerTexture::sMinLargeImageSize) //if is large image, shrink face_area by considering the partial overlapping. - { - if(mImportanceToCamera < LEAST_IMPORTANCE_FOR_LARGE_IMAGE)//if the face is not important, do not load hi-res. - { - face_area = LLViewerTexture::sMinLargeImageSize ; - } - else if(mTexture.notNull() && mTexture->isLargeImage()) - { - face_area *= adjustPartialOverlapPixelArea(cos_angle_to_view_dir, radius ); - } - } + if(mImportanceToCamera > LEAST_IMPORTANCE_FOR_LARGE_IMAGE && mTexture.notNull() && mTexture->isLargeImage()) + { + face_area *= adjustPartialOverlapPixelArea(cos_angle_to_view_dir, radius ); + } } setVirtualSize(face_area) ; @@ -1827,6 +1816,28 @@ F32 LLFace::calcImportanceToCamera(F32 cos_angle_to_view_dir, F32 dist) return importance ; } +//static +F32 LLFace::adjustPixelArea(F32 importance, F32 pixel_area) +{ + if(pixel_area > LLViewerTexture::sMaxSmallImageSize) + { + if(importance < LEAST_IMPORTANCE) //if the face is not important, do not load hi-res. + { + static const F32 MAX_LEAST_IMPORTANCE_IMAGE_SIZE = 128.0f * 128.0f ; + pixel_area = llmin(pixel_area * 0.5f, MAX_LEAST_IMPORTANCE_IMAGE_SIZE) ; + } + else if(pixel_area > LLViewerTexture::sMinLargeImageSize) //if is large image, shrink face_area by considering the partial overlapping. + { + if(importance < LEAST_IMPORTANCE_FOR_LARGE_IMAGE)//if the face is not important, do not load hi-res. + { + pixel_area = LLViewerTexture::sMinLargeImageSize ; + } + } + } + + return pixel_area ; +} + BOOL LLFace::verify(const U32* indices_array) const { BOOL ok = TRUE; diff --git a/indra/newview/llface.h b/indra/newview/llface.h index a7d7889350..6a0955d4dc 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -226,7 +226,8 @@ private: F32 adjustPartialOverlapPixelArea(F32 cos_angle_to_view_dir, F32 radius ); BOOL calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) ; public: - static F32 calcImportanceToCamera(F32 to_view_dir, F32 dist); + static F32 calcImportanceToCamera(F32 to_view_dir, F32 dist); + static F32 adjustPixelArea(F32 importance, F32 pixel_area) ; public: diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp index b78e219504..310eb144fa 100644 --- a/indra/newview/llfloateranimpreview.cpp +++ b/indra/newview/llfloateranimpreview.cpp @@ -161,27 +161,27 @@ LLFloaterAnimPreview::LLFloaterAnimPreview(const std::string& filename) : //----------------------------------------------------------------------------- void LLFloaterAnimPreview::setAnimCallbacks() { - childSetCommitCallback("playback_slider", onSliderMove, this); + getChild<LLUICtrl>("playback_slider")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onSliderMove, this)); - childSetCommitCallback("preview_base_anim", onCommitBaseAnim, this); - childSetValue("preview_base_anim", "Standing"); + getChild<LLUICtrl>("preview_base_anim")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitBaseAnim, this)); + getChild<LLUICtrl>("preview_base_anim")->setValue("Standing"); - childSetCommitCallback("priority", onCommitPriority, this); - childSetCommitCallback("loop_check", onCommitLoop, this); - childSetCommitCallback("loop_in_point", onCommitLoopIn, this); - childSetValidate("loop_in_point", boost::bind(&LLFloaterAnimPreview::validateLoopIn, this, _1)); - childSetCommitCallback("loop_out_point", onCommitLoopOut, this); - childSetValidate("loop_out_point", boost::bind(&LLFloaterAnimPreview::validateLoopOut, this, _1)); + getChild<LLUICtrl>("priority")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitPriority, this)); + getChild<LLUICtrl>("loop_check")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitLoop, this)); + getChild<LLUICtrl>("loop_in_point")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitLoopIn, this)); + getChild<LLUICtrl>("loop_in_point")->setValidateBeforeCommit( boost::bind(&LLFloaterAnimPreview::validateLoopIn, this, _1)); + getChild<LLUICtrl>("loop_out_point")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitLoopOut, this)); + getChild<LLUICtrl>("loop_out_point")->setValidateBeforeCommit( boost::bind(&LLFloaterAnimPreview::validateLoopOut, this, _1)); - childSetCommitCallback("hand_pose_combo", onCommitHandPose, this); + getChild<LLUICtrl>("hand_pose_combo")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitHandPose, this)); - childSetCommitCallback("emote_combo", onCommitEmote, this); - childSetValue("emote_combo", "[None]"); + getChild<LLUICtrl>("emote_combo")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitEmote, this)); + getChild<LLUICtrl>("emote_combo")->setValue("[None]"); - childSetCommitCallback("ease_in_time", onCommitEaseIn, this); - childSetValidate("ease_in_time", boost::bind(&LLFloaterAnimPreview::validateEaseIn, this, _1)); - childSetCommitCallback("ease_out_time", onCommitEaseOut, this); - childSetValidate("ease_out_time", boost::bind(&LLFloaterAnimPreview::validateEaseOut, this, _1)); + getChild<LLUICtrl>("ease_in_time")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitEaseIn, this)); + getChild<LLUICtrl>("ease_in_time")->setValidateBeforeCommit( boost::bind(&LLFloaterAnimPreview::validateEaseIn, this, _1)); + getChild<LLUICtrl>("ease_out_time")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitEaseOut, this)); + getChild<LLUICtrl>("ease_out_time")->setValidateBeforeCommit( boost::bind(&LLFloaterAnimPreview::validateEaseOut, this, _1)); } //----------------------------------------------------------------------------- @@ -197,7 +197,7 @@ BOOL LLFloaterAnimPreview::postBuild() return FALSE; } - childSetCommitCallback("name_form", onCommitName, this); + getChild<LLUICtrl>("name_form")->setCommitCallback(boost::bind(&LLFloaterAnimPreview::onCommitName, this)); childSetAction("ok_btn", onBtnOK, this); setDefaultBtn(); @@ -209,17 +209,17 @@ BOOL LLFloaterAnimPreview::postBuild() mPreviewImageRect.set(0.f, 1.f, 1.f, 0.f); mPlayButton = getChild<LLButton>( "play_btn"); - mPlayButton->setClickedCallback(onBtnPlay, this); + mPlayButton->setClickedCallback(boost::bind(&LLFloaterAnimPreview::onBtnPlay, this)); mPlayButton->setVisible(true); mPauseButton = getChild<LLButton>( "pause_btn"); - mPauseButton->setClickedCallback(onBtnPause, this); + mPauseButton->setClickedCallback(boost::bind(&LLFloaterAnimPreview::onBtnPause, this)); mPauseButton->setVisible(false); mStopButton = getChild<LLButton>( "stop_btn"); - mStopButton->setClickedCallback(onBtnStop, this); + mStopButton->setClickedCallback(boost::bind(&LLFloaterAnimPreview::onBtnStop, this)); - childHide("bad_animation_text"); + getChildView("bad_animation_text")->setVisible(FALSE); std::string exten = gDirUtilp->getExtension(mFilename); if (exten == "bvh") @@ -311,19 +311,19 @@ BOOL LLFloaterAnimPreview::postBuild() mAnimPreview->setZoom(camera_zoom); - motionp->setName(childGetValue("name_form").asString()); + motionp->setName(getChild<LLUICtrl>("name_form")->getValue().asString()); mAnimPreview->getDummyAvatar()->startMotion(mMotionID); getChild<LLSlider>("playback_slider")->setMinValue(0.0); getChild<LLSlider>("playback_slider")->setMaxValue(1.0); - childSetValue("loop_check", LLSD(motionp->getLoop())); - childSetValue("loop_in_point", LLSD(motionp->getLoopIn() / motionp->getDuration() * 100.f)); - childSetValue("loop_out_point", LLSD(motionp->getLoopOut() / motionp->getDuration() * 100.f)); - childSetValue("priority", LLSD((F32)motionp->getPriority())); - childSetValue("hand_pose_combo", LLHandMotion::getHandPoseName(motionp->getHandPose())); - childSetValue("ease_in_time", LLSD(motionp->getEaseInDuration())); - childSetValue("ease_out_time", LLSD(motionp->getEaseOutDuration())); + getChild<LLUICtrl>("loop_check")->setValue(LLSD(motionp->getLoop())); + getChild<LLUICtrl>("loop_in_point")->setValue(LLSD(motionp->getLoopIn() / motionp->getDuration() * 100.f)); + getChild<LLUICtrl>("loop_out_point")->setValue(LLSD(motionp->getLoopOut() / motionp->getDuration() * 100.f)); + getChild<LLUICtrl>("priority")->setValue(LLSD((F32)motionp->getPriority())); + getChild<LLUICtrl>("hand_pose_combo")->setValue(LLHandMotion::getHandPoseName(motionp->getHandPose())); + getChild<LLUICtrl>("ease_in_time")->setValue(LLSD(motionp->getEaseInDuration())); + getChild<LLUICtrl>("ease_out_time")->setValue(LLSD(motionp->getEaseOutDuration())); setEnabled(TRUE); std::string seconds_string; seconds_string = llformat(" - %.2f seconds", motionp->getDuration()); @@ -334,7 +334,7 @@ BOOL LLFloaterAnimPreview::postBuild() { mAnimPreview = NULL; mMotionID.setNull(); - childSetValue("bad_animation_text", getString("failed_to_initialize")); + getChild<LLUICtrl>("bad_animation_text")->setValue(getString("failed_to_initialize")); } } else @@ -346,13 +346,13 @@ BOOL LLFloaterAnimPreview::postBuild() LLUIString out_str = getString("anim_too_long"); out_str.setArg("[LENGTH]", llformat("%.1f", loaderp->getDuration())); out_str.setArg("[MAX_LENGTH]", llformat("%.1f", MAX_ANIM_DURATION)); - childSetValue("bad_animation_text", out_str.getString()); + getChild<LLUICtrl>("bad_animation_text")->setValue(out_str.getString()); } else { LLUIString out_str = getString("failed_file_read"); out_str.setArg("[STATUS]", getString(STATUS[loaderp->getStatus()])); - childSetValue("bad_animation_text", out_str.getString()); + getChild<LLUICtrl>("bad_animation_text")->setValue(out_str.getString()); } } @@ -429,17 +429,17 @@ void LLFloaterAnimPreview::resetMotion() LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID); // Set emotion - std::string emote = childGetValue("emote_combo").asString(); + std::string emote = getChild<LLUICtrl>("emote_combo")->getValue().asString(); motionp->setEmote(mIDList[emote]); - LLUUID base_id = mIDList[childGetValue("preview_base_anim").asString()]; + LLUUID base_id = mIDList[getChild<LLUICtrl>("preview_base_anim")->getValue().asString()]; avatarp->deactivateAllMotions(); avatarp->startMotion(mMotionID, 0.0f); avatarp->startMotion(base_id, BASE_ANIM_TIME_OFFSET); - childSetValue("playback_slider", 0.0f); + getChild<LLUICtrl>("playback_slider")->setValue(0.0f); // Set pose - std::string handpose = childGetValue("hand_pose_combo").asString(); + std::string handpose = getChild<LLUICtrl>("hand_pose_combo")->getValue().asString(); avatarp->startMotion( ANIM_AGENT_HAND_MOTION, 0.0f ); motionp->setHandPose(LLHandMotion::getHandPose(handpose)); @@ -558,24 +558,23 @@ void LLFloaterAnimPreview::onMouseCaptureLost() //----------------------------------------------------------------------------- // onBtnPlay() //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onBtnPlay(void* user_data) +void LLFloaterAnimPreview::onBtnPlay() { - LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)user_data; - if (!previewp->getEnabled()) + if (!getEnabled()) return; - if (previewp->mMotionID.notNull() && previewp->mAnimPreview) + if (mMotionID.notNull() && mAnimPreview) { - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar(); - if (!avatarp->isMotionActive(previewp->mMotionID)) + if (!avatarp->isMotionActive(mMotionID)) { - previewp->resetMotion(); - previewp->mPauseRequest = NULL; + resetMotion(); + mPauseRequest = NULL; } else if (avatarp->areAnimationsPaused()) { - previewp->mPauseRequest = NULL; + mPauseRequest = NULL; } } } @@ -583,21 +582,20 @@ void LLFloaterAnimPreview::onBtnPlay(void* user_data) //----------------------------------------------------------------------------- // onBtnPause() //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onBtnPause(void* user_data) +void LLFloaterAnimPreview::onBtnPause() { - LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)user_data; - if (!previewp->getEnabled()) + if (!getEnabled()) return; - if (previewp->mMotionID.notNull() && previewp->mAnimPreview) + if (mMotionID.notNull() && mAnimPreview) { - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar(); - if (avatarp->isMotionActive(previewp->mMotionID)) + if (avatarp->isMotionActive(mMotionID)) { if (!avatarp->areAnimationsPaused()) { - previewp->mPauseRequest = avatarp->requestPause(); + mPauseRequest = avatarp->requestPause(); } } } @@ -606,42 +604,40 @@ void LLFloaterAnimPreview::onBtnPause(void* user_data) //----------------------------------------------------------------------------- // onBtnStop() //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onBtnStop(void* user_data) +void LLFloaterAnimPreview::onBtnStop() { - LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)user_data; - if (!previewp->getEnabled()) + if (!getEnabled()) return; - if (previewp->mMotionID.notNull() && previewp->mAnimPreview) + if (mMotionID.notNull() && mAnimPreview) { - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); - previewp->resetMotion(); - previewp->mPauseRequest = avatarp->requestPause(); + LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar(); + resetMotion(); + mPauseRequest = avatarp->requestPause(); } } //----------------------------------------------------------------------------- // onSliderMove() //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onSliderMove(LLUICtrl* ctrl, void*user_data) +void LLFloaterAnimPreview::onSliderMove() { - LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)user_data; - if (!previewp->getEnabled()) + if (!getEnabled()) return; - if (previewp->mAnimPreview) + if (mAnimPreview) { - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); - F32 slider_value = (F32)previewp->childGetValue("playback_slider").asReal(); - LLUUID base_id = previewp->mIDList[previewp->childGetValue("preview_base_anim").asString()]; - LLMotion* motionp = avatarp->findMotion(previewp->mMotionID); + LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar(); + F32 slider_value = (F32)getChild<LLUICtrl>("playback_slider")->getValue().asReal(); + LLUUID base_id = mIDList[getChild<LLUICtrl>("preview_base_anim")->getValue().asString()]; + LLMotion* motionp = avatarp->findMotion(mMotionID); F32 duration = motionp->getDuration();// + motionp->getEaseOutDuration(); F32 delta_time = duration * slider_value; avatarp->deactivateAllMotions(); avatarp->startMotion(base_id, delta_time + BASE_ANIM_TIME_OFFSET); - avatarp->startMotion(previewp->mMotionID, delta_time); - previewp->mPauseRequest = avatarp->requestPause(); - previewp->refresh(); + avatarp->startMotion(mMotionID, delta_time); + mPauseRequest = avatarp->requestPause(); + refresh(); } } @@ -649,29 +645,28 @@ void LLFloaterAnimPreview::onSliderMove(LLUICtrl* ctrl, void*user_data) //----------------------------------------------------------------------------- // onCommitBaseAnim() //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitBaseAnim(LLUICtrl* ctrl, void* data) +void LLFloaterAnimPreview::onCommitBaseAnim() { - LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data; - if (!previewp->getEnabled()) + if (!getEnabled()) return; - if (previewp->mAnimPreview) + if (mAnimPreview) { - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar(); BOOL paused = avatarp->areAnimationsPaused(); // stop all other possible base motions - avatarp->stopMotion(previewp->mIDList["Standing"], TRUE); - avatarp->stopMotion(previewp->mIDList["Walking"], TRUE); - avatarp->stopMotion(previewp->mIDList["Sitting"], TRUE); - avatarp->stopMotion(previewp->mIDList["Flying"], TRUE); + avatarp->stopMotion(mIDList["Standing"], TRUE); + avatarp->stopMotion(mIDList["Walking"], TRUE); + avatarp->stopMotion(mIDList["Sitting"], TRUE); + avatarp->stopMotion(mIDList["Flying"], TRUE); - previewp->resetMotion(); + resetMotion(); if (!paused) { - previewp->mPauseRequest = NULL; + mPauseRequest = NULL; } } } @@ -679,154 +674,145 @@ void LLFloaterAnimPreview::onCommitBaseAnim(LLUICtrl* ctrl, void* data) //----------------------------------------------------------------------------- // onCommitLoop() //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitLoop(LLUICtrl* ctrl, void* data) +void LLFloaterAnimPreview::onCommitLoop() { - LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data; - if (!previewp->getEnabled()) + if (!getEnabled()) return; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); - LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); + LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar(); + LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID); if (motionp) { - motionp->setLoop(previewp->childGetValue("loop_check").asBoolean()); - motionp->setLoopIn((F32)previewp->childGetValue("loop_in_point").asReal() * 0.01f * motionp->getDuration()); - motionp->setLoopOut((F32)previewp->childGetValue("loop_out_point").asReal() * 0.01f * motionp->getDuration()); + motionp->setLoop(getChild<LLUICtrl>("loop_check")->getValue().asBoolean()); + motionp->setLoopIn((F32)getChild<LLUICtrl>("loop_in_point")->getValue().asReal() * 0.01f * motionp->getDuration()); + motionp->setLoopOut((F32)getChild<LLUICtrl>("loop_out_point")->getValue().asReal() * 0.01f * motionp->getDuration()); } } //----------------------------------------------------------------------------- // onCommitLoopIn() //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitLoopIn(LLUICtrl* ctrl, void* data) +void LLFloaterAnimPreview::onCommitLoopIn() { - LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data; - if (!previewp->getEnabled()) + if (!getEnabled()) return; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); - LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); + LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar(); + LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID); if (motionp) { - motionp->setLoopIn((F32)previewp->childGetValue("loop_in_point").asReal() / 100.f); - previewp->resetMotion(); - previewp->childSetValue("loop_check", LLSD(TRUE)); - onCommitLoop(ctrl, data); + motionp->setLoopIn((F32)getChild<LLUICtrl>("loop_in_point")->getValue().asReal() / 100.f); + resetMotion(); + getChild<LLUICtrl>("loop_check")->setValue(LLSD(TRUE)); + onCommitLoop(); } } //----------------------------------------------------------------------------- // onCommitLoopOut() //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitLoopOut(LLUICtrl* ctrl, void* data) +void LLFloaterAnimPreview::onCommitLoopOut() { - LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data; - if (!previewp->getEnabled()) + if (!getEnabled()) return; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); - LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); + LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar(); + LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID); if (motionp) { - motionp->setLoopOut((F32)previewp->childGetValue("loop_out_point").asReal() * 0.01f * motionp->getDuration()); - previewp->resetMotion(); - previewp->childSetValue("loop_check", LLSD(TRUE)); - onCommitLoop(ctrl, data); + motionp->setLoopOut((F32)getChild<LLUICtrl>("loop_out_point")->getValue().asReal() * 0.01f * motionp->getDuration()); + resetMotion(); + getChild<LLUICtrl>("loop_check")->setValue(LLSD(TRUE)); + onCommitLoop(); } } //----------------------------------------------------------------------------- // onCommitName() //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitName(LLUICtrl* ctrl, void* data) +void LLFloaterAnimPreview::onCommitName() { - LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data; - if (!previewp->getEnabled()) + if (!getEnabled()) return; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); - LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); + LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar(); + LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID); if (motionp) { - motionp->setName(previewp->childGetValue("name_form").asString()); + motionp->setName(getChild<LLUICtrl>("name_form")->getValue().asString()); } - previewp->doCommit(); + doCommit(); } //----------------------------------------------------------------------------- // onCommitHandPose() //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitHandPose(LLUICtrl* ctrl, void* data) +void LLFloaterAnimPreview::onCommitHandPose() { - LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data; - if (!previewp->getEnabled()) + if (!getEnabled()) return; - previewp->resetMotion(); // sets hand pose + resetMotion(); // sets hand pose } //----------------------------------------------------------------------------- // onCommitEmote() //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitEmote(LLUICtrl* ctrl, void* data) +void LLFloaterAnimPreview::onCommitEmote() { - LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data; - if (!previewp->getEnabled()) + if (!getEnabled()) return; - previewp->resetMotion(); // ssts emote + resetMotion(); // ssts emote } //----------------------------------------------------------------------------- // onCommitPriority() //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitPriority(LLUICtrl* ctrl, void* data) +void LLFloaterAnimPreview::onCommitPriority() { - LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data; - if (!previewp->getEnabled()) + if (!getEnabled()) return; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); - LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); + LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar(); + LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID); - motionp->setPriority(llfloor((F32)previewp->childGetValue("priority").asReal())); + motionp->setPriority(llfloor((F32)getChild<LLUICtrl>("priority")->getValue().asReal())); } //----------------------------------------------------------------------------- // onCommitEaseIn() //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitEaseIn(LLUICtrl* ctrl, void* data) +void LLFloaterAnimPreview::onCommitEaseIn() { - LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data; - if (!previewp->getEnabled()) + if (!getEnabled()) return; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); - LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); + LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar(); + LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID); - motionp->setEaseIn((F32)previewp->childGetValue("ease_in_time").asReal()); - previewp->resetMotion(); + motionp->setEaseIn((F32)getChild<LLUICtrl>("ease_in_time")->getValue().asReal()); + resetMotion(); } //----------------------------------------------------------------------------- // onCommitEaseOut() //----------------------------------------------------------------------------- -void LLFloaterAnimPreview::onCommitEaseOut(LLUICtrl* ctrl, void* data) +void LLFloaterAnimPreview::onCommitEaseOut() { - LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)data; - if (!previewp->getEnabled()) + if (!getEnabled()) return; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); - LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); + LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar(); + LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID); - motionp->setEaseOut((F32)previewp->childGetValue("ease_out_time").asReal()); - previewp->resetMotion(); + motionp->setEaseOut((F32)getChild<LLUICtrl>("ease_out_time")->getValue().asReal()); + resetMotion(); } //----------------------------------------------------------------------------- @@ -842,8 +828,8 @@ bool LLFloaterAnimPreview::validateEaseIn(const LLSD& data) if (!motionp->getLoop()) { - F32 new_ease_in = llclamp((F32)childGetValue("ease_in_time").asReal(), 0.f, motionp->getDuration() - motionp->getEaseOutDuration()); - childSetValue("ease_in_time", LLSD(new_ease_in)); + F32 new_ease_in = llclamp((F32)getChild<LLUICtrl>("ease_in_time")->getValue().asReal(), 0.f, motionp->getDuration() - motionp->getEaseOutDuration()); + getChild<LLUICtrl>("ease_in_time")->setValue(LLSD(new_ease_in)); } return true; @@ -862,8 +848,8 @@ bool LLFloaterAnimPreview::validateEaseOut(const LLSD& data) if (!motionp->getLoop()) { - F32 new_ease_out = llclamp((F32)childGetValue("ease_out_time").asReal(), 0.f, motionp->getDuration() - motionp->getEaseInDuration()); - childSetValue("ease_out_time", LLSD(new_ease_out)); + F32 new_ease_out = llclamp((F32)getChild<LLUICtrl>("ease_out_time")->getValue().asReal(), 0.f, motionp->getDuration() - motionp->getEaseInDuration()); + getChild<LLUICtrl>("ease_out_time")->setValue(LLSD(new_ease_out)); } return true; @@ -877,8 +863,8 @@ bool LLFloaterAnimPreview::validateLoopIn(const LLSD& data) if (!getEnabled()) return false; - F32 loop_in_value = (F32)childGetValue("loop_in_point").asReal(); - F32 loop_out_value = (F32)childGetValue("loop_out_point").asReal(); + F32 loop_in_value = (F32)getChild<LLUICtrl>("loop_in_point")->getValue().asReal(); + F32 loop_out_value = (F32)getChild<LLUICtrl>("loop_out_point")->getValue().asReal(); if (loop_in_value < 0.f) { @@ -893,7 +879,7 @@ bool LLFloaterAnimPreview::validateLoopIn(const LLSD& data) loop_in_value = loop_out_value; } - childSetValue("loop_in_point", LLSD(loop_in_value)); + getChild<LLUICtrl>("loop_in_point")->setValue(LLSD(loop_in_value)); return true; } @@ -905,8 +891,8 @@ bool LLFloaterAnimPreview::validateLoopOut(const LLSD& data) if (!getEnabled()) return false; - F32 loop_out_value = (F32)childGetValue("loop_out_point").asReal(); - F32 loop_in_value = (F32)childGetValue("loop_in_point").asReal(); + F32 loop_out_value = (F32)getChild<LLUICtrl>("loop_out_point")->getValue().asReal(); + F32 loop_in_value = (F32)getChild<LLUICtrl>("loop_in_point")->getValue().asReal(); if (loop_out_value < 0.f) { @@ -921,7 +907,7 @@ bool LLFloaterAnimPreview::validateLoopOut(const LLSD& data) loop_out_value = loop_in_value; } - childSetValue("loop_out_point", LLSD(loop_out_value)); + getChild<LLUICtrl>("loop_out_point")->setValue(LLSD(loop_out_value)); return true; } @@ -935,15 +921,15 @@ void LLFloaterAnimPreview::refresh() bool show_play = true; if (!mAnimPreview) { - childShow("bad_animation_text"); + getChildView("bad_animation_text")->setVisible(TRUE); // play button visible but disabled mPlayButton->setEnabled(FALSE); mStopButton->setEnabled(FALSE); - childDisable("ok_btn"); + getChildView("ok_btn")->setEnabled(FALSE); } else { - childHide("bad_animation_text"); + getChildView("bad_animation_text")->setVisible(FALSE); // re-enabled in case previous animation was bad mPlayButton->setEnabled(TRUE); mStopButton->setEnabled(TRUE); @@ -958,7 +944,7 @@ void LLFloaterAnimPreview::refresh() if (motionp) { F32 fraction_complete = motionp->getLastUpdateTime() / motionp->getDuration(); - childSetValue("playback_slider", fraction_complete); + getChild<LLUICtrl>("playback_slider")->setValue(fraction_complete); } show_play = false; } @@ -968,7 +954,7 @@ void LLFloaterAnimPreview::refresh() // Motion just finished playing mPauseRequest = avatarp->requestPause(); } - childEnable("ok_btn"); + getChildView("ok_btn")->setEnabled(TRUE); mAnimPreview->requestUpdate(); } mPlayButton->setVisible(show_play); @@ -999,8 +985,8 @@ void LLFloaterAnimPreview::onBtnOK(void* userdata) file.setMaxSize(size); if (file.write((U8*)buffer, size)) { - std::string name = floaterp->childGetValue("name_form").asString(); - std::string desc = floaterp->childGetValue("description_form").asString(); + std::string name = floaterp->getChild<LLUICtrl>("name_form")->getValue().asString(); + std::string desc = floaterp->getChild<LLUICtrl>("description_form")->getValue().asString(); LLAssetStorage::LLStoreAssetCallback callback = NULL; S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); void *userdata = NULL; diff --git a/indra/newview/llfloateranimpreview.h b/indra/newview/llfloateranimpreview.h index 84f131a322..24d7a93a17 100644 --- a/indra/newview/llfloateranimpreview.h +++ b/indra/newview/llfloateranimpreview.h @@ -89,22 +89,22 @@ public: void refresh(); - static void onBtnPlay(void*); - static void onBtnPause(void*); - static void onBtnStop(void*); - static void onSliderMove(LLUICtrl*, void*); - static void onCommitBaseAnim(LLUICtrl*, void*); - static void onCommitLoop(LLUICtrl*, void*); - static void onCommitLoopIn(LLUICtrl*, void*); - static void onCommitLoopOut(LLUICtrl*, void*); + void onBtnPlay(); + void onBtnPause(); + void onBtnStop(); + void onSliderMove(); + void onCommitBaseAnim(); + void onCommitLoop(); + void onCommitLoopIn(); + void onCommitLoopOut(); bool validateLoopIn(const LLSD& data); bool validateLoopOut(const LLSD& data); - static void onCommitName(LLUICtrl*, void*); - static void onCommitHandPose(LLUICtrl*, void*); - static void onCommitEmote(LLUICtrl*, void*); - static void onCommitPriority(LLUICtrl*, void*); - static void onCommitEaseIn(LLUICtrl*, void*); - static void onCommitEaseOut(LLUICtrl*, void*); + void onCommitName(); + void onCommitHandPose(); + void onCommitEmote(); + void onCommitPriority(); + void onCommitEaseIn(); + void onCommitEaseOut(); bool validateEaseIn(const LLSD& data); bool validateEaseOut(const LLSD& data); static void onBtnOK(void*); diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp index 679ab4c713..b0265e6cd2 100644 --- a/indra/newview/llfloaterauction.cpp +++ b/indra/newview/llfloaterauction.cpp @@ -115,20 +115,20 @@ void LLFloaterAuction::initialize() mParcelID = parcelp->getLocalID(); mParcelUpdateCapUrl = region->getCapability("ParcelPropertiesUpdate"); - childSetText("parcel_text", parcelp->getName()); - childEnable("snapshot_btn"); - childEnable("reset_parcel_btn"); - childEnable("start_auction_btn"); + getChild<LLUICtrl>("parcel_text")->setValue(parcelp->getName()); + getChildView("snapshot_btn")->setEnabled(TRUE); + getChildView("reset_parcel_btn")->setEnabled(TRUE); + getChildView("start_auction_btn")->setEnabled(TRUE); LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); if (panel) { // Only enable "Sell to Anyone" on Teen grid or if we don't know the ID yet U32 estate_id = panel->getEstateID(); - childSetEnabled("sell_to_anyone_btn", (estate_id == ESTATE_TEEN || estate_id == 0)); + getChildView("sell_to_anyone_btn")->setEnabled((estate_id == ESTATE_TEEN || estate_id == 0)); } else { // Don't have the panel up, so don't know if we're on the teen grid or not. Default to enabling it - childEnable("sell_to_anyone_btn"); + getChildView("sell_to_anyone_btn")->setEnabled(TRUE); } } else @@ -136,17 +136,17 @@ void LLFloaterAuction::initialize() mParcelHost.invalidate(); if(parcelp && parcelp->getForSale()) { - childSetText("parcel_text", getString("already for sale")); + getChild<LLUICtrl>("parcel_text")->setValue(getString("already for sale")); } else { - childSetText("parcel_text", LLStringUtil::null); + getChild<LLUICtrl>("parcel_text")->setValue(LLStringUtil::null); } mParcelID = -1; - childSetEnabled("snapshot_btn", false); - childSetEnabled("reset_parcel_btn", false); - childSetEnabled("sell_to_anyone_btn", false); - childSetEnabled("start_auction_btn", false); + getChildView("snapshot_btn")->setEnabled(false); + getChildView("reset_parcel_btn")->setEnabled(false); + getChildView("sell_to_anyone_btn")->setEnabled(false); + getChildView("start_auction_btn")->setEnabled(false); } mImageID.setNull(); @@ -159,9 +159,10 @@ void LLFloaterAuction::draw() if(!isMinimized() && mImage.notNull()) { - LLRect rect; - if (childGetRect("snapshot_icon", rect)) + LLView* snapshot_icon = findChildView("snapshot_icon"); + if (snapshot_icon) { + LLRect rect = snapshot_icon->getRect(); { gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); gl_rect_2d(rect, LLColor4(0.f, 0.f, 0.f, 1.f)); @@ -188,7 +189,7 @@ void LLFloaterAuction::onClickSnapshot(void* data) LLPointer<LLImageRaw> raw = new LLImageRaw; - gForceRenderLandFence = self->childGetValue("fence_check").asBoolean(); + gForceRenderLandFence = self->getChild<LLUICtrl>("fence_check")->getValue().asBoolean(); BOOL success = gViewerWindow->rawSnapshot(raw, gViewerWindow->getWindowWidthScaled(), gViewerWindow->getWindowHeightScaled(), @@ -236,7 +237,7 @@ void LLFloaterAuction::onClickStartAuction(void* data) if(self->mImageID.notNull()) { - LLSD parcel_name = self->childGetValue("parcel_text"); + LLSD parcel_name = self->getChild<LLUICtrl>("parcel_text")->getValue(); // create the asset std::string* name = new std::string(parcel_name.asString()); @@ -345,7 +346,7 @@ void LLFloaterAuction::doResetParcel() std::string new_name(parcel_name.str().c_str()); body["name"] = new_name; - childSetText("parcel_text", new_name); // Set name in dialog as well, since it won't get updated otherwise + getChild<LLUICtrl>("parcel_text")->setValue(new_name); // Set name in dialog as well, since it won't get updated otherwise body["sale_price"] = (S32) 0; body["description"] = empty; diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp index 8f6816b845..7dbf6ebd5b 100644 --- a/indra/newview/llfloateravatarpicker.cpp +++ b/indra/newview/llfloateravatarpicker.cpp @@ -94,14 +94,14 @@ BOOL LLFloaterAvatarPicker::postBuild() getChild<LLLineEditor>("Edit")->setKeystrokeCallback( boost::bind(&LLFloaterAvatarPicker::editKeystroke, this, _1, _2),NULL); childSetAction("Find", boost::bind(&LLFloaterAvatarPicker::onBtnFind, this)); - childDisable("Find"); + getChildView("Find")->setEnabled(FALSE); childSetAction("Refresh", boost::bind(&LLFloaterAvatarPicker::onBtnRefresh, this)); getChild<LLUICtrl>("near_me_range")->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onRangeAdjust, this)); LLScrollListCtrl* searchresults = getChild<LLScrollListCtrl>("SearchResults"); searchresults->setDoubleClickCallback( boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this)); searchresults->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onList, this)); - childDisable("SearchResults"); + getChildView("SearchResults")->setEnabled(FALSE); LLScrollListCtrl* nearme = getChild<LLScrollListCtrl>("NearMe"); nearme->setDoubleClickCallback(boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this)); @@ -112,10 +112,10 @@ BOOL LLFloaterAvatarPicker::postBuild() getChild<LLUICtrl>("Friends")->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onList, this)); childSetAction("ok_btn", boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this)); - childDisable("ok_btn"); + getChildView("ok_btn")->setEnabled(FALSE); childSetAction("cancel_btn", boost::bind(&LLFloaterAvatarPicker::onBtnClose, this)); - childSetFocus("Edit"); + getChild<LLUICtrl>("Edit")->setFocus(TRUE); LLPanel* search_panel = getChild<LLPanel>("SearchPanel"); if (search_panel) @@ -145,7 +145,7 @@ void LLFloaterAvatarPicker::setOkBtnEnableCb(validate_callback_t cb) void LLFloaterAvatarPicker::onTabChanged() { - childSetEnabled("ok_btn", isSelectBtnEnabled()); + getChildView("ok_btn")->setEnabled(isSelectBtnEnabled()); } // Destroys the object @@ -184,7 +184,7 @@ void LLFloaterAvatarPicker::onBtnSelect() { std::string acvtive_panel_name; LLScrollListCtrl* list = NULL; - LLPanel* active_panel = childGetVisibleTab("ResidentChooserTabs"); + LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel(); if(active_panel) { acvtive_panel_name = active_panel->getName(); @@ -239,7 +239,7 @@ void LLFloaterAvatarPicker::onRangeAdjust() void LLFloaterAvatarPicker::onList() { - childSetEnabled("ok_btn", isSelectBtnEnabled()); + getChildView("ok_btn")->setEnabled(isSelectBtnEnabled()); } void LLFloaterAvatarPicker::populateNearMe() @@ -273,14 +273,14 @@ void LLFloaterAvatarPicker::populateNearMe() if (empty) { - childDisable("NearMe"); - childDisable("ok_btn"); + getChildView("NearMe")->setEnabled(FALSE); + getChildView("ok_btn")->setEnabled(FALSE); near_me_scroller->setCommentText(getString("no_one_near")); } else { - childEnable("NearMe"); - childEnable("ok_btn"); + getChildView("NearMe")->setEnabled(TRUE); + getChildView("ok_btn")->setEnabled(TRUE); near_me_scroller->selectFirstItem(); onList(); near_me_scroller->setFocus(TRUE); @@ -327,7 +327,7 @@ void LLFloaterAvatarPicker::draw() } LLFloater::draw(); - if (!mNearMeListComplete && childGetVisibleTab("ResidentChooserTabs") == getChild<LLPanel>("NearMePanel")) + if (!mNearMeListComplete && getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel() == getChild<LLPanel>("NearMePanel")) { populateNearMe(); } @@ -335,7 +335,7 @@ void LLFloaterAvatarPicker::draw() BOOL LLFloaterAvatarPicker::visibleItemsSelected() const { - LLPanel* active_panel = childGetVisibleTab("ResidentChooserTabs"); + LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel(); if(active_panel == getChild<LLPanel>("SearchPanel")) { @@ -354,7 +354,7 @@ BOOL LLFloaterAvatarPicker::visibleItemsSelected() const void LLFloaterAvatarPicker::find() { - std::string text = childGetValue("Edit").asString(); + std::string text = getChild<LLUICtrl>("Edit")->getValue().asString(); mQueryID.generate(); @@ -373,7 +373,7 @@ void LLFloaterAvatarPicker::find() getChild<LLScrollListCtrl>("SearchResults")->deleteAllItems(); getChild<LLScrollListCtrl>("SearchResults")->setCommentText(getString("searching")); - childSetEnabled("ok_btn", FALSE); + getChildView("ok_btn")->setEnabled(FALSE); mNumResultsReturned = 0; } @@ -388,7 +388,7 @@ LLScrollListCtrl* LLFloaterAvatarPicker::getActiveList() { std::string acvtive_panel_name; LLScrollListCtrl* list = NULL; - LLPanel* active_panel = childGetVisibleTab("ResidentChooserTabs"); + LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel(); if(active_panel) { acvtive_panel_name = active_panel->getName(); @@ -502,10 +502,10 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void* if (avatar_id.isNull()) { LLStringUtil::format_map_t map; - map["[TEXT]"] = floater->childGetText("Edit"); + map["[TEXT]"] = floater->getChild<LLUICtrl>("Edit")->getValue().asString(); avatar_name = floater->getString("not_found", map); search_results->setEnabled(FALSE); - floater->childDisable("ok_btn"); + floater->getChildView("ok_btn")->setEnabled(FALSE); } else { @@ -521,7 +521,7 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void* if (found_one) { - floater->childEnable("ok_btn"); + floater->getChildView("ok_btn")->setEnabled(TRUE); search_results->selectFirstItem(); floater->onList(); search_results->setFocus(TRUE); @@ -531,7 +531,7 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void* //static void LLFloaterAvatarPicker::editKeystroke(LLLineEditor* caller, void* user_data) { - childSetEnabled("Find", caller->getText().size() >= 3); + getChildView("Find")->setEnabled(caller->getText().size() >= 3); } // virtual @@ -539,7 +539,7 @@ BOOL LLFloaterAvatarPicker::handleKeyHere(KEY key, MASK mask) { if (key == KEY_RETURN && mask == MASK_NONE) { - if (childHasFocus("Edit")) + if (getChild<LLUICtrl>("Edit")->hasFocus()) { onBtnFind(); } @@ -566,7 +566,7 @@ bool LLFloaterAvatarPicker::isSelectBtnEnabled() { std::string acvtive_panel_name; LLScrollListCtrl* list = NULL; - LLPanel* active_panel = childGetVisibleTab("ResidentChooserTabs"); + LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel(); if(active_panel) { diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp index d359856443..eee4310ec7 100644 --- a/indra/newview/llfloaterbuy.cpp +++ b/indra/newview/llfloaterbuy.cpp @@ -62,8 +62,8 @@ LLFloaterBuy::LLFloaterBuy(const LLSD& key) BOOL LLFloaterBuy::postBuild() { - childDisable("object_list"); - childDisable("item_list"); + getChildView("object_list")->setEnabled(FALSE); + getChildView("item_list")->setEnabled(FALSE); getChild<LLUICtrl>("cancel_btn")->setCommitCallback( boost::bind(&LLFloaterBuy::onClickCancel, this)); getChild<LLUICtrl>("buy_btn")->setCommitCallback( boost::bind(&LLFloaterBuy::onClickBuy, this)); @@ -183,8 +183,8 @@ void LLFloaterBuy::show(const LLSaleInfo& sale_info) // Add after columns added so appropriate heights are correct. object_list->addElement(row); - floater->childSetTextArg("buy_text", "[AMOUNT]", llformat("%d", sale_info.getSalePrice())); - floater->childSetTextArg("buy_text", "[NAME]", owner_name); + floater->getChild<LLUICtrl>("buy_text")->setTextArg("[AMOUNT]", llformat("%d", sale_info.getSalePrice())); + floater->getChild<LLUICtrl>("buy_text")->setTextArg("[NAME]", owner_name); // Must do this after the floater is created, because // sometimes the inventory is already there and diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp index 9bde3b1dac..76ec5da303 100644 --- a/indra/newview/llfloaterbuycontents.cpp +++ b/indra/newview/llfloaterbuycontents.cpp @@ -69,9 +69,9 @@ BOOL LLFloaterBuyContents::postBuild() getChild<LLUICtrl>("cancel_btn")->setCommitCallback( boost::bind(&LLFloaterBuyContents::onClickCancel, this)); getChild<LLUICtrl>("buy_btn")->setCommitCallback( boost::bind(&LLFloaterBuyContents::onClickBuy, this)); - childDisable("item_list"); - childDisable("buy_btn"); - childDisable("wear_check"); + getChildView("item_list")->setEnabled(FALSE); + getChildView("buy_btn")->setEnabled(FALSE); + getChildView("wear_check")->setEnabled(FALSE); setDefaultBtn("cancel_btn"); // to avoid accidental buy (SL-43130) @@ -129,9 +129,9 @@ void LLFloaterBuyContents::show(const LLSaleInfo& sale_info) gCacheName->getGroupName(owner_id, owner_name); } - floater->childSetTextArg("contains_text", "[NAME]", node->mName); - floater->childSetTextArg("buy_text", "[AMOUNT]", llformat("%d", sale_info.getSalePrice())); - floater->childSetTextArg("buy_text", "[NAME]", owner_name); + floater->getChild<LLUICtrl>("contains_text")->setTextArg("[NAME]", node->mName); + floater->getChild<LLUICtrl>("buy_text")->setTextArg("[AMOUNT]", llformat("%d", sale_info.getSalePrice())); + floater->getChild<LLUICtrl>("buy_text")->setTextArg("[NAME]", owner_name); // Must do this after the floater is created, because // sometimes the inventory is already there and @@ -169,7 +169,7 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj, } // default to turning off the buy button. - childDisable("buy_btn"); + getChildView("buy_btn")->setEnabled(FALSE); LLUUID owner_id; BOOL is_group_owned; @@ -210,7 +210,7 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj, // There will be at least one item shown in the display, so go // ahead and enable the buy button. - childEnable("buy_btn"); + getChildView("buy_btn")->setEnabled(TRUE); // Create the line in the list LLSD row; @@ -256,8 +256,8 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj, if (wearable_count > 0) { - childEnable("wear_check"); - childSetValue("wear_check", LLSD(false) ); + getChildView("wear_check")->setEnabled(TRUE); + getChild<LLUICtrl>("wear_check")->setValue(LLSD(false) ); } removeVOInventoryListener(); @@ -268,7 +268,7 @@ void LLFloaterBuyContents::onClickBuy() { // Make sure this wasn't selected through other mechanisms // (ie, being the default button and pressing enter. - if(!childIsEnabled("buy_btn")) + if(!getChildView("buy_btn")->getEnabled()) { // We shouldn't be enabled. Just close. closeFloater(); @@ -276,7 +276,7 @@ void LLFloaterBuyContents::onClickBuy() } // We may want to wear this item - if (childGetValue("wear_check")) + if (getChild<LLUICtrl>("wear_check")->getValue()) { LLInventoryState::sWearNewClothing = TRUE; } diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp index 7fddd1fc5f..e8e0503f48 100644 --- a/indra/newview/llfloaterbuycurrency.cpp +++ b/indra/newview/llfloaterbuycurrency.cpp @@ -162,7 +162,7 @@ void LLFloaterBuyCurrencyUI::draw() } // disable the Buy button when we are not able to buy - childSetEnabled("buy_btn", mManager.canBuy()); + getChildView("buy_btn")->setEnabled(mManager.canBuy()); LLFloater::draw(); } @@ -178,27 +178,27 @@ void LLFloaterBuyCurrencyUI::updateUI() mManager.updateUI(!hasError && !mManager.buying()); // hide most widgets - we'll turn them on as needed next - childHide("info_buying"); - childHide("info_cannot_buy"); - childHide("info_need_more"); - childHide("purchase_warning_repurchase"); - childHide("purchase_warning_notenough"); - childHide("contacting"); - childHide("buy_action"); + getChildView("info_buying")->setVisible(FALSE); + getChildView("info_cannot_buy")->setVisible(FALSE); + getChildView("info_need_more")->setVisible(FALSE); + getChildView("purchase_warning_repurchase")->setVisible(FALSE); + getChildView("purchase_warning_notenough")->setVisible(FALSE); + getChildView("contacting")->setVisible(FALSE); + getChildView("buy_action")->setVisible(FALSE); if (hasError) { // display an error from the server - childHide("normal_background"); - childShow("error_background"); - childShow("info_cannot_buy"); - childShow("cannot_buy_message"); - childHide("balance_label"); - childHide("balance_amount"); - childHide("buying_label"); - childHide("buying_amount"); - childHide("total_label"); - childHide("total_amount"); + getChildView("normal_background")->setVisible(FALSE); + getChildView("error_background")->setVisible(TRUE); + getChildView("info_cannot_buy")->setVisible(TRUE); + getChildView("cannot_buy_message")->setVisible(TRUE); + getChildView("balance_label")->setVisible(FALSE); + getChildView("balance_amount")->setVisible(FALSE); + getChildView("buying_label")->setVisible(FALSE); + getChildView("buying_amount")->setVisible(FALSE); + getChildView("total_label")->setVisible(FALSE); + getChildView("total_amount")->setVisible(FALSE); LLTextBox* message = getChild<LLTextBox>("cannot_buy_message"); if (message) @@ -206,67 +206,67 @@ void LLFloaterBuyCurrencyUI::updateUI() message->setText(mManager.errorMessage()); } - childSetVisible("error_web", !mManager.errorURI().empty()); + getChildView("error_web")->setVisible( !mManager.errorURI().empty()); } else { // display the main Buy L$ interface - childShow("normal_background"); - childHide("error_background"); - childHide("cannot_buy_message"); - childHide("error_web"); + getChildView("normal_background")->setVisible(TRUE); + getChildView("error_background")->setVisible(FALSE); + getChildView("cannot_buy_message")->setVisible(FALSE); + getChildView("error_web")->setVisible(FALSE); if (mHasTarget) { - childShow("info_need_more"); + getChildView("info_need_more")->setVisible(TRUE); } else { - childShow("info_buying"); + getChildView("info_buying")->setVisible(TRUE); } if (mManager.buying()) { - childSetVisible("contacting", true); + getChildView("contacting")->setVisible( true); } else { if (mHasTarget) { - childSetVisible("buy_action", true); - childSetTextArg("buy_action", "[ACTION]", mTargetName); + getChildView("buy_action")->setVisible( true); + getChild<LLUICtrl>("buy_action")->setTextArg("[ACTION]", mTargetName); } } S32 balance = gStatusBar->getBalance(); - childShow("balance_label"); - childShow("balance_amount"); - childSetTextArg("balance_amount", "[AMT]", llformat("%d", balance)); + getChildView("balance_label")->setVisible(TRUE); + getChildView("balance_amount")->setVisible(TRUE); + getChild<LLUICtrl>("balance_amount")->setTextArg("[AMT]", llformat("%d", balance)); S32 buying = mManager.getAmount(); - childShow("buying_label"); - childShow("buying_amount"); - childSetTextArg("buying_amount", "[AMT]", llformat("%d", buying)); + getChildView("buying_label")->setVisible(TRUE); + getChildView("buying_amount")->setVisible(TRUE); + getChild<LLUICtrl>("buying_amount")->setTextArg("[AMT]", llformat("%d", buying)); S32 total = balance + buying; - childShow("total_label"); - childShow("total_amount"); - childSetTextArg("total_amount", "[AMT]", llformat("%d", total)); + getChildView("total_label")->setVisible(TRUE); + getChildView("total_amount")->setVisible(TRUE); + getChild<LLUICtrl>("total_amount")->setTextArg("[AMT]", llformat("%d", total)); if (mHasTarget) { if (total >= mTargetPrice) { - childSetVisible("purchase_warning_repurchase", true); + getChildView("purchase_warning_repurchase")->setVisible( true); } else { - childSetVisible("purchase_warning_notenough", true); + getChildView("purchase_warning_notenough")->setVisible( true); } } } - childSetVisible("getting_data", !mManager.canBuy() && !hasError); + getChildView("getting_data")->setVisible( !mManager.canBuy() && !hasError); } void LLFloaterBuyCurrencyUI::onClickBuy() diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 9379b3f5a8..455cce5e56 100644 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -732,7 +732,7 @@ void LLFloaterBuyLandUI::runWebSitePrep(const std::string& password) return; } - BOOL remove_contribution = childGetValue("remove_contribution").asBoolean(); + BOOL remove_contribution = getChild<LLUICtrl>("remove_contribution")->getValue().asBoolean(); mParcelBuyInfo = LLViewerParcelMgr::getInstance()->setupParcelBuy(gAgent.getID(), gAgent.getSessionID(), gAgent.getGroupID(), mIsForGroup, mIsClaim, remove_contribution); @@ -1026,13 +1026,13 @@ void LLFloaterBuyLandUI::refreshUI() if (mParcelValid) { - childSetText("info_parcel", mParcelLocation); + getChild<LLUICtrl>("info_parcel")->setValue(mParcelLocation); LLStringUtil::format_map_t string_args; string_args["[AMOUNT]"] = llformat("%d", mParcelActualArea); string_args["[AMOUNT2]"] = llformat("%d", mParcelSupportedObjects); - childSetText("info_size", getString("meters_supports_object", string_args)); + getChild<LLUICtrl>("info_size")->setValue(getString("meters_supports_object", string_args)); F32 cost_per_sqm = 0.0f; if (mParcelActualArea > 0) @@ -1051,17 +1051,17 @@ void LLFloaterBuyLandUI::refreshUI() { info_price_args["[SOLD_WITH_OBJECTS]"] = getString("sold_without_objects"); } - childSetText("info_price", getString("info_price_string", info_price_args)); - childSetVisible("info_price", mParcelIsForSale); + getChild<LLUICtrl>("info_price")->setValue(getString("info_price_string", info_price_args)); + getChildView("info_price")->setVisible( mParcelIsForSale); } else { - childSetText("info_parcel", getString("no_parcel_selected")); - childSetText("info_size", LLStringUtil::null); - childSetText("info_price", LLStringUtil::null); + getChild<LLUICtrl>("info_parcel")->setValue(getString("no_parcel_selected")); + getChild<LLUICtrl>("info_size")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("info_price")->setValue(LLStringUtil::null); } - childSetText("info_action", + getChild<LLUICtrl>("info_action")->setValue( mCanBuy ? mIsForGroup @@ -1092,14 +1092,13 @@ void LLFloaterBuyLandUI::refreshUI() message->setValue(LLSD(!mCanBuy ? mCannotBuyReason : "(waiting for data)")); } - childSetVisible("error_web", - mCannotBuyIsError && !mCannotBuyURI.empty()); + getChildView("error_web")->setVisible(mCannotBuyIsError && !mCannotBuyURI.empty()); } else { - childHide("step_error"); - childHide("error_message"); - childHide("error_web"); + getChildView("step_error")->setVisible(FALSE); + getChildView("error_message")->setVisible(FALSE); + getChildView("error_web")->setVisible(FALSE); } @@ -1110,8 +1109,8 @@ void LLFloaterBuyLandUI::refreshUI() mSiteMembershipUpgrade ? LLViewChildren::BADGE_NOTE : LLViewChildren::BADGE_OK); - childSetText("account_action", mSiteMembershipAction); - childSetText("account_reason", + getChild<LLUICtrl>("account_action")->setValue(mSiteMembershipAction); + getChild<LLUICtrl>("account_reason")->setValue( mSiteMembershipUpgrade ? getString("must_upgrade") : getString("cant_own_land") @@ -1134,16 +1133,16 @@ void LLFloaterBuyLandUI::refreshUI() levels->setCurrentByIndex(mUserPlanChoice); } - childShow("step_1"); - childShow("account_action"); - childShow("account_reason"); + getChildView("step_1")->setVisible(TRUE); + getChildView("account_action")->setVisible(TRUE); + getChildView("account_reason")->setVisible(TRUE); } else { - childHide("step_1"); - childHide("account_action"); - childHide("account_reason"); - childHide("account_level"); + getChildView("step_1")->setVisible(FALSE); + getChildView("account_action")->setVisible(FALSE); + getChildView("account_reason")->setVisible(FALSE); + getChildView("account_level")->setVisible(FALSE); } // section two: land use fees @@ -1153,7 +1152,7 @@ void LLFloaterBuyLandUI::refreshUI() mSiteLandUseUpgrade ? LLViewChildren::BADGE_NOTE : LLViewChildren::BADGE_OK); - childSetText("land_use_action", mSiteLandUseAction); + getChild<LLUICtrl>("land_use_action")->setValue(mSiteLandUseAction); std::string message; @@ -1199,17 +1198,17 @@ void LLFloaterBuyLandUI::refreshUI() } } - childSetValue("land_use_reason", message); + getChild<LLUICtrl>("land_use_reason")->setValue(message); - childShow("step_2"); - childShow("land_use_action"); - childShow("land_use_reason"); + getChildView("step_2")->setVisible(TRUE); + getChildView("land_use_action")->setVisible(TRUE); + getChildView("land_use_reason")->setVisible(TRUE); } else { - childHide("step_2"); - childHide("land_use_action"); - childHide("land_use_reason"); + getChildView("step_2")->setVisible(FALSE); + getChildView("land_use_action")->setVisible(FALSE); + getChildView("land_use_reason")->setVisible(FALSE); } // section three: purchase & currency @@ -1233,8 +1232,8 @@ void LLFloaterBuyLandUI::refreshUI() LLStringUtil::format_map_t string_args; string_args["[AMOUNT]"] = llformat("%d", mParcelPrice); string_args["[SELLER]"] = mParcelSellerName; - childSetText("purchase_action", getString("pay_to_for_land", string_args)); - childSetVisible("purchase_action", mParcelValid); + getChild<LLUICtrl>("purchase_action")->setValue(getString("pay_to_for_land", string_args)); + getChildView("purchase_action")->setVisible( mParcelValid); std::string reasonString; @@ -1243,7 +1242,7 @@ void LLFloaterBuyLandUI::refreshUI() LLStringUtil::format_map_t string_args; string_args["[AMOUNT]"] = llformat("%d", mAgentCashBalance); - childSetText("currency_reason", getString("have_enough_lindens", string_args)); + getChild<LLUICtrl>("currency_reason")->setValue(getString("have_enough_lindens", string_args)); } else { @@ -1251,9 +1250,9 @@ void LLFloaterBuyLandUI::refreshUI() string_args["[AMOUNT]"] = llformat("%d", mAgentCashBalance); string_args["[AMOUNT2]"] = llformat("%d", mParcelPrice - mAgentCashBalance); - childSetText("currency_reason", getString("not_enough_lindens", string_args)); + getChild<LLUICtrl>("currency_reason")->setValue(getString("not_enough_lindens", string_args)); - childSetTextArg("currency_est", "[LOCAL_AMOUNT]", mCurrency.getLocalEstimate()); + getChild<LLUICtrl>("currency_est")->setTextArg("[LOCAL_AMOUNT]", mCurrency.getLocalEstimate()); } if (willHaveEnough) @@ -1261,7 +1260,7 @@ void LLFloaterBuyLandUI::refreshUI() LLStringUtil::format_map_t string_args; string_args["[AMOUNT]"] = llformat("%d", finalBalance); - childSetText("currency_balance", getString("balance_left", string_args)); + getChild<LLUICtrl>("currency_balance")->setValue(getString("balance_left", string_args)); } else @@ -1269,30 +1268,30 @@ void LLFloaterBuyLandUI::refreshUI() LLStringUtil::format_map_t string_args; string_args["[AMOUNT]"] = llformat("%d", mParcelPrice - mAgentCashBalance); - childSetText("currency_balance", getString("balance_needed", string_args)); + getChild<LLUICtrl>("currency_balance")->setValue(getString("balance_needed", string_args)); } - childSetValue("remove_contribution", LLSD(groupContributionEnough)); - childSetEnabled("remove_contribution", groupContributionEnough); + getChild<LLUICtrl>("remove_contribution")->setValue(LLSD(groupContributionEnough)); + getChildView("remove_contribution")->setEnabled(groupContributionEnough); bool showRemoveContribution = mParcelIsGroupLand && (mParcelGroupContribution > 0); - childSetLabelArg("remove_contribution", "[AMOUNT]", + getChildView("remove_contribution")->setLabelArg("[AMOUNT]", llformat("%d", minContribution)); - childSetVisible("remove_contribution", showRemoveContribution); + getChildView("remove_contribution")->setVisible( showRemoveContribution); - childShow("step_3"); - childShow("purchase_action"); - childShow("currency_reason"); - childShow("currency_balance"); + getChildView("step_3")->setVisible(TRUE); + getChildView("purchase_action")->setVisible(TRUE); + getChildView("currency_reason")->setVisible(TRUE); + getChildView("currency_balance")->setVisible(TRUE); } else { - childHide("step_3"); - childHide("purchase_action"); - childHide("currency_reason"); - childHide("currency_balance"); - childHide("remove_group_donation"); + getChildView("step_3")->setVisible(FALSE); + getChildView("purchase_action")->setVisible(FALSE); + getChildView("currency_reason")->setVisible(FALSE); + getChildView("currency_balance")->setVisible(FALSE); + getChildView("remove_group_donation")->setVisible(FALSE); } @@ -1303,8 +1302,7 @@ void LLFloaterBuyLandUI::refreshUI() agrees_to_covenant = check->get(); } - childSetEnabled("buy_btn", - mCanBuy && mSiteValid && willHaveEnough && !mTransaction && agrees_to_covenant); + getChildView("buy_btn")->setEnabled(mCanBuy && mSiteValid && willHaveEnough && !mTransaction && agrees_to_covenant); } void LLFloaterBuyLandUI::startBuyPreConfirm() diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index d6effb2b21..f181872faa 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -62,6 +62,7 @@ const F32 CAMERA_BUTTON_DELAY = 0.0f; #define CONTROLS "controls" bool LLFloaterCamera::sFreeCamera = false; +bool LLFloaterCamera::sAppearanceEditing = false; // Zoom the camera in and out class LLPanelCameraZoom @@ -125,10 +126,15 @@ LLPanelCameraItem::LLPanelCameraItem(const LLPanelCameraItem::Params& p) } } +void set_view_visible(LLView* parent, const std::string& name, bool visible) +{ + parent->getChildView(name)->setVisible(visible); +} + BOOL LLPanelCameraItem::postBuild() { - setMouseEnterCallback(boost::bind(&LLPanelCameraItem::childSetVisible, this, "hovered_icon", true)); - setMouseLeaveCallback(boost::bind(&LLPanelCameraItem::childSetVisible, this, "hovered_icon", false)); + setMouseEnterCallback(boost::bind(set_view_visible, this, "hovered_icon", true)); + setMouseLeaveCallback(boost::bind(set_view_visible, this, "hovered_icon", false)); setMouseDownCallback(boost::bind(&LLPanelCameraItem::onAnyMouseClick, this)); setRightMouseDownCallback(boost::bind(&LLPanelCameraItem::onAnyMouseClick, this)); return TRUE; @@ -143,9 +149,9 @@ void LLPanelCameraItem::setValue(const LLSD& value) { if (!value.isMap()) return;; if (!value.has("selected")) return; - childSetVisible("selected_icon", value["selected"]); - childSetVisible("picture", !value["selected"]); - childSetVisible("selected_picture", value["selected"]); + getChildView("selected_icon")->setVisible( value["selected"]); + getChildView("picture")->setVisible( !value["selected"]); + getChildView("selected_picture")->setVisible( value["selected"]); } static LLRegisterPanelClassWrapper<LLPanelCameraZoom> t_camera_zoom_panel("camera_zoom_panel"); @@ -243,6 +249,25 @@ void LLFloaterCamera::resetCameraMode() floater_camera->switchMode(CAMERA_CTRL_MODE_PAN); } +void LLFloaterCamera::onAvatarEditingAppearance(bool editing) +{ + sAppearanceEditing = editing; + LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance(); + if (!floater_camera) return; + floater_camera->handleAvatarEditingAppearance(editing); +} + +void LLFloaterCamera::handleAvatarEditingAppearance(bool editing) +{ + //camera presets (rear, front, etc.) + getChildView("preset_views_list")->setEnabled(!editing); + getChildView("presets_btn")->setEnabled(!editing); + + //camera modes (object view, mouselook view) + getChildView("camera_modes_list")->setEnabled(!editing); + getChildView("avatarview_btn")->setEnabled(!editing); +} + void LLFloaterCamera::update() { ECameraControlMode mode = determineMode(); @@ -335,6 +360,9 @@ BOOL LLFloaterCamera::postBuild() update(); + // ensure that appearance mode is handled while building. See EXT-7796. + handleAvatarEditingAppearance(sAppearanceEditing); + return LLDockableFloater::postBuild(); } @@ -357,6 +385,12 @@ void LLFloaterCamera::fillFlatlistFromPanel (LLFlatListView* list, LLPanel* pane ECameraControlMode LLFloaterCamera::determineMode() { + if (sAppearanceEditing) + { + // this is the only enabled camera mode while editing agent appearance. + return CAMERA_CTRL_MODE_PAN; + } + LLTool* curr_tool = LLToolMgr::getInstance()->getCurrentTool(); if (curr_tool == LLToolCamera::getInstance()) { @@ -470,15 +504,15 @@ void LLFloaterCamera::assignButton2Mode(ECameraControlMode mode, const std::stri void LLFloaterCamera::updateState() { - childSetVisible(ZOOM, CAMERA_CTRL_MODE_PAN == mCurrMode); + getChildView(ZOOM)->setVisible(CAMERA_CTRL_MODE_PAN == mCurrMode); bool show_presets = (CAMERA_CTRL_MODE_PRESETS == mCurrMode) || (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode && CAMERA_CTRL_MODE_PRESETS == mPrevMode); - childSetVisible(PRESETS, show_presets); + getChildView(PRESETS)->setVisible(show_presets); bool show_camera_modes = CAMERA_CTRL_MODE_MODES == mCurrMode || (CAMERA_CTRL_MODE_FREE_CAMERA == mCurrMode && CAMERA_CTRL_MODE_MODES == mPrevMode); - childSetVisible("camera_modes_list", show_camera_modes); + getChildView("camera_modes_list")->setVisible( show_camera_modes); updateItemsSelection(); diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h index 564e38d02d..737bd17e72 100644 --- a/indra/newview/llfloatercamera.h +++ b/indra/newview/llfloatercamera.h @@ -68,6 +68,9 @@ public: /** resets current camera mode to orbit mode */ static void resetCameraMode(); + /** Called when Avatar is entered/exited editing appearance mode */ + static void onAvatarEditingAppearance(bool editing); + /* determines actual mode and updates ui */ void update(); @@ -121,9 +124,12 @@ private: // fills flatlist with items from given panel void fillFlatlistFromPanel (LLFlatListView* list, LLPanel* panel); + void handleAvatarEditingAppearance(bool editing); + // set to true when free camera mode is selected in modes list // remains true until preset camera mode is chosen, or pan button is clicked, or escape pressed static bool sFreeCamera; + static bool sAppearanceEditing; BOOL mClosed; ECameraControlMode mPrevMode; ECameraControlMode mCurrMode; diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp index b65457c4eb..6922c515cd 100644 --- a/indra/newview/llfloatercolorpicker.cpp +++ b/indra/newview/llfloatercolorpicker.cpp @@ -692,12 +692,12 @@ void LLFloaterColorPicker::drawPalette () void LLFloaterColorPicker::updateTextEntry () { // set values in spinners - childSetValue("rspin", ( getCurR () * 255.0f ) ); - childSetValue("gspin", ( getCurG () * 255.0f ) ); - childSetValue("bspin", ( getCurB () * 255.0f ) ); - childSetValue("hspin", ( getCurH () * 360.0f ) ); - childSetValue("sspin", ( getCurS () * 100.0f ) ); - childSetValue("lspin", ( getCurL () * 100.0f ) ); + getChild<LLUICtrl>("rspin")->setValue(( getCurR () * 255.0f ) ); + getChild<LLUICtrl>("gspin")->setValue(( getCurG () * 255.0f ) ); + getChild<LLUICtrl>("bspin")->setValue(( getCurB () * 255.0f ) ); + getChild<LLUICtrl>("hspin")->setValue(( getCurH () * 360.0f ) ); + getChild<LLUICtrl>("sspin")->setValue(( getCurS () * 100.0f ) ); + getChild<LLUICtrl>("lspin")->setValue(( getCurL () * 100.0f ) ); } ////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llfloaterdaycycle.cpp b/indra/newview/llfloaterdaycycle.cpp index 48d552022f..50ea2765e7 100644 --- a/indra/newview/llfloaterdaycycle.cpp +++ b/indra/newview/llfloaterdaycycle.cpp @@ -158,11 +158,11 @@ void LLFloaterDayCycle::syncMenu() // turn off Use Estate Time button if it's already being used if( LLWLParamManager::instance()->mAnimator.mUseLindenTime == true) { - childDisable("WLUseLindenTime"); + getChildView("WLUseLindenTime")->setEnabled(FALSE); } else { - childEnable("WLUseLindenTime"); + getChildView("WLUseLindenTime")->setEnabled(TRUE); } } diff --git a/indra/newview/llfloaterenvsettings.cpp b/indra/newview/llfloaterenvsettings.cpp index 2fffa6eece..eb344b91d3 100644 --- a/indra/newview/llfloaterenvsettings.cpp +++ b/indra/newview/llfloaterenvsettings.cpp @@ -113,7 +113,7 @@ void LLFloaterEnvSettings::syncMenu() // sync cloud coverage bool err; - childSetValue("EnvCloudSlider", LLWLParamManager::instance()->mCurParams.getFloat("cloud_shadow", err)); + getChild<LLUICtrl>("EnvCloudSlider")->setValue(LLWLParamManager::instance()->mCurParams.getFloat("cloud_shadow", err)); LLWaterParamManager * param_mgr = LLWaterParamManager::instance(); // sync water params @@ -122,43 +122,43 @@ void LLFloaterEnvSettings::syncMenu() col.mV[3] = 1.0f; colCtrl->set(col); - childSetValue("EnvWaterFogSlider", param_mgr->mFogDensity.mExp); + getChild<LLUICtrl>("EnvWaterFogSlider")->setValue(param_mgr->mFogDensity.mExp); param_mgr->setDensitySliderValue(param_mgr->mFogDensity.mExp); // turn off Use Estate Time button if it's already being used if(LLWLParamManager::instance()->mAnimator.mUseLindenTime) { - childDisable("EnvUseEstateTimeButton"); + getChildView("EnvUseEstateTimeButton")->setEnabled(FALSE); } else { - childEnable("EnvUseEstateTimeButton"); + getChildView("EnvUseEstateTimeButton")->setEnabled(TRUE); } if(!gPipeline.canUseVertexShaders()) { - childDisable("EnvWaterColor"); - childDisable("EnvWaterColorText"); - //childDisable("EnvAdvancedWaterButton"); + getChildView("EnvWaterColor")->setEnabled(FALSE); + getChildView("EnvWaterColorText")->setEnabled(FALSE); + //getChildView("EnvAdvancedWaterButton")->setEnabled(FALSE); } else { - childEnable("EnvWaterColor"); - childEnable("EnvWaterColorText"); - //childEnable("EnvAdvancedWaterButton"); + getChildView("EnvWaterColor")->setEnabled(TRUE); + getChildView("EnvWaterColorText")->setEnabled(TRUE); + //getChildView("EnvAdvancedWaterButton")->setEnabled(TRUE); } // only allow access to these if they are using windlight if(!gPipeline.canUseWindLightShaders()) { - childDisable("EnvCloudSlider"); - childDisable("EnvCloudText"); - //childDisable("EnvAdvancedSkyButton"); + getChildView("EnvCloudSlider")->setEnabled(FALSE); + getChildView("EnvCloudText")->setEnabled(FALSE); + //getChildView("EnvAdvancedSkyButton")->setEnabled(FALSE); } else { - childEnable("EnvCloudSlider"); - childEnable("EnvCloudText"); - //childEnable("EnvAdvancedSkyButton"); + getChildView("EnvCloudSlider")->setEnabled(TRUE); + getChildView("EnvCloudText")->setEnabled(TRUE); + //getChildView("EnvAdvancedSkyButton")->setEnabled(TRUE); } } diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp index f6cffd4b14..5fe0297b07 100644 --- a/indra/newview/llfloaterevent.cpp +++ b/indra/newview/llfloaterevent.cpp @@ -215,10 +215,10 @@ void LLFloaterEvent::processEventInfoReply(LLMessageSystem *msg, void **) std::string desc = floater->mEventInfo.mSimName + llformat(" (%d, %d, %d)", region_x, region_y, region_z); floater->mTBLocation->setText(desc); - floater->childSetVisible("rating_icon_m", FALSE); - floater->childSetVisible("rating_icon_r", FALSE); - floater->childSetVisible("rating_icon_pg", FALSE); - floater->childSetValue("rating_value", floater->getString("unknown")); + floater->getChildView("rating_icon_m")->setVisible( FALSE); + floater->getChildView("rating_icon_r")->setVisible( FALSE); + floater->getChildView("rating_icon_pg")->setVisible( FALSE); + floater->getChild<LLUICtrl>("rating_value")->setValue(floater->getString("unknown")); //for some reason there's not adult flags for now, so see if region is adult and then //set flags @@ -259,25 +259,25 @@ void LLFloaterEvent::regionInfoCallback(U32 event_id, U64 region_handle) // update the event with the maturity info if (sim_info->isAdult()) { - floater->childSetVisible("rating_icon_m", FALSE); - floater->childSetVisible("rating_icon_r", TRUE); - floater->childSetVisible("rating_icon_pg", FALSE); - floater->childSetValue("rating_value", floater->getString("adult")); + floater->getChildView("rating_icon_m")->setVisible( FALSE); + floater->getChildView("rating_icon_r")->setVisible( TRUE); + floater->getChildView("rating_icon_pg")->setVisible( FALSE); + floater->getChild<LLUICtrl>("rating_value")->setValue(floater->getString("adult")); } else if (floater->mEventInfo.mEventFlags & EVENT_FLAG_MATURE) { - floater->childSetVisible("rating_icon_m", TRUE); - floater->childSetVisible("rating_icon_r", FALSE); - floater->childSetVisible("rating_icon_pg", FALSE); - floater->childSetValue("rating_value", floater->getString("moderate")); + floater->getChildView("rating_icon_m")->setVisible( TRUE); + floater->getChildView("rating_icon_r")->setVisible( FALSE); + floater->getChildView("rating_icon_pg")->setVisible( FALSE); + floater->getChild<LLUICtrl>("rating_value")->setValue(floater->getString("moderate")); } else { - floater->childSetVisible("rating_icon_m", FALSE); - floater->childSetVisible("rating_icon_r", FALSE); - floater->childSetVisible("rating_icon_pg", TRUE); - floater->childSetValue("rating_value", floater->getString("general")); + floater->getChildView("rating_icon_m")->setVisible( FALSE); + floater->getChildView("rating_icon_r")->setVisible( FALSE); + floater->getChildView("rating_icon_pg")->setVisible( TRUE); + floater->getChild<LLUICtrl>("rating_value")->setValue(floater->getString("general")); } } } diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp index eff7131145..6cb33ea41c 100644 --- a/indra/newview/llfloatergesture.cpp +++ b/indra/newview/llfloatergesture.cpp @@ -194,8 +194,8 @@ BOOL LLFloaterGesture::postBuild() getChild<LLUICtrl>("new_gesture_btn")->setCommitCallback(boost::bind(&LLFloaterGesture::onClickNew, this)); getChild<LLButton>("del_btn")->setClickedCallback(boost::bind(&LLFloaterGesture::onDeleteSelected, this)); - childSetVisible("play_btn", true); - childSetVisible("stop_btn", false); + getChildView("play_btn")->setVisible( true); + getChildView("stop_btn")->setVisible( false); setDefaultBtn("play_btn"); mGestureFolderID = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE, false); @@ -563,13 +563,13 @@ void LLFloaterGesture::onCommitList() mSelectedID = item_id; if (LLGestureMgr::instance().isGesturePlaying(item_id)) { - childSetVisible("play_btn", false); - childSetVisible("stop_btn", true); + getChildView("play_btn")->setVisible( false); + getChildView("stop_btn")->setVisible( true); } else { - childSetVisible("play_btn", true); - childSetVisible("stop_btn", false); + getChildView("play_btn")->setVisible( true); + getChildView("stop_btn")->setVisible( false); } } diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp index bd07cfdfbf..61f5098af1 100644 --- a/indra/newview/llfloatergodtools.cpp +++ b/indra/newview/llfloatergodtools.cpp @@ -88,7 +88,7 @@ void LLFloaterGodTools::onOpen(const LLSD& key) { center(); setFocus(TRUE); -// LLPanel *panel = childGetVisibleTab("GodTools Tabs"); +// LLPanel *panel = getChild<LLTabContainer>("GodTools Tabs")->getCurrentPanel(); // if (panel) // panel->setFocus(TRUE); if (mPanelObjectTools) @@ -134,7 +134,7 @@ LLFloaterGodTools::LLFloaterGodTools(const LLSD& key) BOOL LLFloaterGodTools::postBuild() { sendRegionInfoRequest(); - childShowTab("GodTools Tabs", "region"); + getChild<LLTabContainer>("GodTools Tabs")->selectTabByName("region"); return TRUE; } // static @@ -203,9 +203,9 @@ void LLFloaterGodTools::draw() void LLFloaterGodTools::showPanel(const std::string& panel_name) { - childShowTab("GodTools Tabs", panel_name); + getChild<LLTabContainer>("GodTools Tabs")->selectTabByName(panel_name); openFloater(); - LLPanel *panel = childGetVisibleTab("GodTools Tabs"); + LLPanel *panel = getChild<LLTabContainer>("GodTools Tabs")->getCurrentPanel(); if (panel) panel->setFocus(TRUE); } @@ -416,17 +416,17 @@ LLPanelRegionTools::LLPanelRegionTools() BOOL LLPanelRegionTools::postBuild() { getChild<LLLineEditor>("region name")->setKeystrokeCallback(onChangeSimName, this); - childSetPrevalidate("region name", &LLTextValidate::validateASCIIPrintableNoPipe); - childSetPrevalidate("estate", &LLTextValidate::validatePositiveS32); - childSetPrevalidate("parentestate", &LLTextValidate::validatePositiveS32); - childDisable("parentestate"); - childSetPrevalidate("gridposx", &LLTextValidate::validatePositiveS32); - childDisable("gridposx"); - childSetPrevalidate("gridposy", &LLTextValidate::validatePositiveS32); - childDisable("gridposy"); + getChild<LLLineEditor>("region name")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLLineEditor>("estate")->setPrevalidate(&LLTextValidate::validatePositiveS32); + getChild<LLLineEditor>("parentestate")->setPrevalidate(&LLTextValidate::validatePositiveS32); + getChildView("parentestate")->setEnabled(FALSE); + getChild<LLLineEditor>("gridposx")->setPrevalidate(&LLTextValidate::validatePositiveS32); + getChildView("gridposx")->setEnabled(FALSE); + getChild<LLLineEditor>("gridposy")->setPrevalidate(&LLTextValidate::validatePositiveS32); + getChildView("gridposy")->setEnabled(FALSE); - childSetPrevalidate("redirectx", &LLTextValidate::validatePositiveS32); - childSetPrevalidate("redirecty", &LLTextValidate::validatePositiveS32); + getChild<LLLineEditor>("redirectx")->setPrevalidate(&LLTextValidate::validatePositiveS32); + getChild<LLLineEditor>("redirecty")->setPrevalidate(&LLTextValidate::validatePositiveS32); return TRUE; } @@ -453,42 +453,42 @@ void LLPanelRegionTools::refresh() void LLPanelRegionTools::clearAllWidgets() { // clear all widgets - childSetValue("region name", "unknown"); - childSetFocus("region name", FALSE); + getChild<LLUICtrl>("region name")->setValue("unknown"); + getChild<LLUICtrl>("region name")->setFocus( FALSE); - childSetValue("check prelude", FALSE); - childDisable("check prelude"); + getChild<LLUICtrl>("check prelude")->setValue(FALSE); + getChildView("check prelude")->setEnabled(FALSE); - childSetValue("check fixed sun", FALSE); - childDisable("check fixed sun"); + getChild<LLUICtrl>("check fixed sun")->setValue(FALSE); + getChildView("check fixed sun")->setEnabled(FALSE); - childSetValue("check reset home", FALSE); - childDisable("check reset home"); + getChild<LLUICtrl>("check reset home")->setValue(FALSE); + getChildView("check reset home")->setEnabled(FALSE); - childSetValue("check damage", FALSE); - childDisable("check damage"); + getChild<LLUICtrl>("check damage")->setValue(FALSE); + getChildView("check damage")->setEnabled(FALSE); - childSetValue("check visible", FALSE); - childDisable("check visible"); + getChild<LLUICtrl>("check visible")->setValue(FALSE); + getChildView("check visible")->setEnabled(FALSE); - childSetValue("block terraform", FALSE); - childDisable("block terraform"); + getChild<LLUICtrl>("block terraform")->setValue(FALSE); + getChildView("block terraform")->setEnabled(FALSE); - childSetValue("block dwell", FALSE); - childDisable("block dwell"); + getChild<LLUICtrl>("block dwell")->setValue(FALSE); + getChildView("block dwell")->setEnabled(FALSE); - childSetValue("is sandbox", FALSE); - childDisable("is sandbox"); + getChild<LLUICtrl>("is sandbox")->setValue(FALSE); + getChildView("is sandbox")->setEnabled(FALSE); - childSetValue("billable factor", BILLABLE_FACTOR_DEFAULT); - childDisable("billable factor"); + getChild<LLUICtrl>("billable factor")->setValue(BILLABLE_FACTOR_DEFAULT); + getChildView("billable factor")->setEnabled(FALSE); - childSetValue("land cost", PRICE_PER_METER_DEFAULT); - childDisable("land cost"); + getChild<LLUICtrl>("land cost")->setValue(PRICE_PER_METER_DEFAULT); + getChildView("land cost")->setEnabled(FALSE); - childDisable("Apply"); - childDisable("Bake Terrain"); - childDisable("Autosave now"); + getChildView("Apply")->setEnabled(FALSE); + getChildView("Bake Terrain")->setEnabled(FALSE); + getChildView("Autosave now")->setEnabled(FALSE); } @@ -496,21 +496,21 @@ void LLPanelRegionTools::enableAllWidgets() { // enable all of the widgets - childEnable("check prelude"); - childEnable("check fixed sun"); - childEnable("check reset home"); - childEnable("check damage"); - childDisable("check visible"); // use estates to update... - childEnable("block terraform"); - childEnable("block dwell"); - childEnable("is sandbox"); + getChildView("check prelude")->setEnabled(TRUE); + getChildView("check fixed sun")->setEnabled(TRUE); + getChildView("check reset home")->setEnabled(TRUE); + getChildView("check damage")->setEnabled(TRUE); + getChildView("check visible")->setEnabled(FALSE); // use estates to update... + getChildView("block terraform")->setEnabled(TRUE); + getChildView("block dwell")->setEnabled(TRUE); + getChildView("is sandbox")->setEnabled(TRUE); - childEnable("billable factor"); - childEnable("land cost"); + getChildView("billable factor")->setEnabled(TRUE); + getChildView("land cost")->setEnabled(TRUE); - childDisable("Apply"); // don't enable this one - childEnable("Bake Terrain"); - childEnable("Autosave now"); + getChildView("Apply")->setEnabled(FALSE); // don't enable this one + getChildView("Bake Terrain")->setEnabled(TRUE); + getChildView("Autosave now")->setEnabled(TRUE); } void LLPanelRegionTools::onSaveState(void* userdata) @@ -530,74 +530,74 @@ void LLPanelRegionTools::onSaveState(void* userdata) const std::string LLPanelRegionTools::getSimName() const { - return childGetValue("region name"); + return getChild<LLUICtrl>("region name")->getValue(); } U32 LLPanelRegionTools::getEstateID() const { - U32 id = (U32)childGetValue("estate").asInteger(); + U32 id = (U32)getChild<LLUICtrl>("estate")->getValue().asInteger(); return id; } U32 LLPanelRegionTools::getParentEstateID() const { - U32 id = (U32)childGetValue("parentestate").asInteger(); + U32 id = (U32)getChild<LLUICtrl>("parentestate")->getValue().asInteger(); return id; } S32 LLPanelRegionTools::getRedirectGridX() const { - return childGetValue("redirectx").asInteger(); + return getChild<LLUICtrl>("redirectx")->getValue().asInteger(); } S32 LLPanelRegionTools::getRedirectGridY() const { - return childGetValue("redirecty").asInteger(); + return getChild<LLUICtrl>("redirecty")->getValue().asInteger(); } S32 LLPanelRegionTools::getGridPosX() const { - return childGetValue("gridposx").asInteger(); + return getChild<LLUICtrl>("gridposx")->getValue().asInteger(); } S32 LLPanelRegionTools::getGridPosY() const { - return childGetValue("gridposy").asInteger(); + return getChild<LLUICtrl>("gridposy")->getValue().asInteger(); } U32 LLPanelRegionTools::getRegionFlags() const { U32 flags = 0x0; - flags = childGetValue("check prelude").asBoolean() + flags = getChild<LLUICtrl>("check prelude")->getValue().asBoolean() ? set_prelude_flags(flags) : unset_prelude_flags(flags); // override prelude - if (childGetValue("check fixed sun").asBoolean()) + if (getChild<LLUICtrl>("check fixed sun")->getValue().asBoolean()) { flags |= REGION_FLAGS_SUN_FIXED; } - if (childGetValue("check reset home").asBoolean()) + if (getChild<LLUICtrl>("check reset home")->getValue().asBoolean()) { flags |= REGION_FLAGS_RESET_HOME_ON_TELEPORT; } - if (childGetValue("check visible").asBoolean()) + if (getChild<LLUICtrl>("check visible")->getValue().asBoolean()) { flags |= REGION_FLAGS_EXTERNALLY_VISIBLE; } - if (childGetValue("check damage").asBoolean()) + if (getChild<LLUICtrl>("check damage")->getValue().asBoolean()) { flags |= REGION_FLAGS_ALLOW_DAMAGE; } - if (childGetValue("block terraform").asBoolean()) + if (getChild<LLUICtrl>("block terraform")->getValue().asBoolean()) { flags |= REGION_FLAGS_BLOCK_TERRAFORM; } - if (childGetValue("block dwell").asBoolean()) + if (getChild<LLUICtrl>("block dwell")->getValue().asBoolean()) { flags |= REGION_FLAGS_BLOCK_DWELL; } - if (childGetValue("is sandbox").asBoolean()) + if (getChild<LLUICtrl>("is sandbox")->getValue().asBoolean()) { flags |= REGION_FLAGS_SANDBOX; } @@ -607,35 +607,35 @@ U32 LLPanelRegionTools::getRegionFlags() const U32 LLPanelRegionTools::getRegionFlagsMask() const { U32 flags = 0xffffffff; - flags = childGetValue("check prelude").asBoolean() + flags = getChild<LLUICtrl>("check prelude")->getValue().asBoolean() ? set_prelude_flags(flags) : unset_prelude_flags(flags); - if (!childGetValue("check fixed sun").asBoolean()) + if (!getChild<LLUICtrl>("check fixed sun")->getValue().asBoolean()) { flags &= ~REGION_FLAGS_SUN_FIXED; } - if (!childGetValue("check reset home").asBoolean()) + if (!getChild<LLUICtrl>("check reset home")->getValue().asBoolean()) { flags &= ~REGION_FLAGS_RESET_HOME_ON_TELEPORT; } - if (!childGetValue("check visible").asBoolean()) + if (!getChild<LLUICtrl>("check visible")->getValue().asBoolean()) { flags &= ~REGION_FLAGS_EXTERNALLY_VISIBLE; } - if (!childGetValue("check damage").asBoolean()) + if (!getChild<LLUICtrl>("check damage")->getValue().asBoolean()) { flags &= ~REGION_FLAGS_ALLOW_DAMAGE; } - if (!childGetValue("block terraform").asBoolean()) + if (!getChild<LLUICtrl>("block terraform")->getValue().asBoolean()) { flags &= ~REGION_FLAGS_BLOCK_TERRAFORM; } - if (!childGetValue("block dwell").asBoolean()) + if (!getChild<LLUICtrl>("block dwell")->getValue().asBoolean()) { flags &= ~REGION_FLAGS_BLOCK_DWELL; } - if (!childGetValue("is sandbox").asBoolean()) + if (!getChild<LLUICtrl>("is sandbox")->getValue().asBoolean()) { flags &= ~REGION_FLAGS_SANDBOX; } @@ -644,86 +644,86 @@ U32 LLPanelRegionTools::getRegionFlagsMask() const F32 LLPanelRegionTools::getBillableFactor() const { - return (F32)childGetValue("billable factor").asReal(); + return (F32)getChild<LLUICtrl>("billable factor")->getValue().asReal(); } S32 LLPanelRegionTools::getPricePerMeter() const { - return childGetValue("land cost"); + return getChild<LLUICtrl>("land cost")->getValue(); } void LLPanelRegionTools::setSimName(const std::string& name) { - childSetValue("region name", name); + getChild<LLUICtrl>("region name")->setValue(name); } void LLPanelRegionTools::setEstateID(U32 id) { - childSetValue("estate", (S32)id); + getChild<LLUICtrl>("estate")->setValue((S32)id); } void LLPanelRegionTools::setGridPosX(S32 pos) { - childSetValue("gridposx", pos); + getChild<LLUICtrl>("gridposx")->setValue(pos); } void LLPanelRegionTools::setGridPosY(S32 pos) { - childSetValue("gridposy", pos); + getChild<LLUICtrl>("gridposy")->setValue(pos); } void LLPanelRegionTools::setRedirectGridX(S32 pos) { - childSetValue("redirectx", pos); + getChild<LLUICtrl>("redirectx")->setValue(pos); } void LLPanelRegionTools::setRedirectGridY(S32 pos) { - childSetValue("redirecty", pos); + getChild<LLUICtrl>("redirecty")->setValue(pos); } void LLPanelRegionTools::setParentEstateID(U32 id) { - childSetValue("parentestate", (S32)id); + getChild<LLUICtrl>("parentestate")->setValue((S32)id); } void LLPanelRegionTools::setCheckFlags(U32 flags) { - childSetValue("check prelude", is_prelude(flags) ? TRUE : FALSE); - childSetValue("check fixed sun", flags & REGION_FLAGS_SUN_FIXED ? TRUE : FALSE); - childSetValue("check reset home", flags & REGION_FLAGS_RESET_HOME_ON_TELEPORT ? TRUE : FALSE); - childSetValue("check damage", flags & REGION_FLAGS_ALLOW_DAMAGE ? TRUE : FALSE); - childSetValue("check visible", flags & REGION_FLAGS_EXTERNALLY_VISIBLE ? TRUE : FALSE); - childSetValue("block terraform", flags & REGION_FLAGS_BLOCK_TERRAFORM ? TRUE : FALSE); - childSetValue("block dwell", flags & REGION_FLAGS_BLOCK_DWELL ? TRUE : FALSE); - childSetValue("is sandbox", flags & REGION_FLAGS_SANDBOX ? TRUE : FALSE ); + getChild<LLUICtrl>("check prelude")->setValue(is_prelude(flags) ? TRUE : FALSE); + getChild<LLUICtrl>("check fixed sun")->setValue(flags & REGION_FLAGS_SUN_FIXED ? TRUE : FALSE); + getChild<LLUICtrl>("check reset home")->setValue(flags & REGION_FLAGS_RESET_HOME_ON_TELEPORT ? TRUE : FALSE); + getChild<LLUICtrl>("check damage")->setValue(flags & REGION_FLAGS_ALLOW_DAMAGE ? TRUE : FALSE); + getChild<LLUICtrl>("check visible")->setValue(flags & REGION_FLAGS_EXTERNALLY_VISIBLE ? TRUE : FALSE); + getChild<LLUICtrl>("block terraform")->setValue(flags & REGION_FLAGS_BLOCK_TERRAFORM ? TRUE : FALSE); + getChild<LLUICtrl>("block dwell")->setValue(flags & REGION_FLAGS_BLOCK_DWELL ? TRUE : FALSE); + getChild<LLUICtrl>("is sandbox")->setValue(flags & REGION_FLAGS_SANDBOX ? TRUE : FALSE ); } void LLPanelRegionTools::setBillableFactor(F32 billable_factor) { - childSetValue("billable factor", billable_factor); + getChild<LLUICtrl>("billable factor")->setValue(billable_factor); } void LLPanelRegionTools::setPricePerMeter(S32 price) { - childSetValue("land cost", price); + getChild<LLUICtrl>("land cost")->setValue(price); } void LLPanelRegionTools::onChangeAnything() { if (gAgent.isGodlike()) { - childEnable("Apply"); + getChildView("Apply")->setEnabled(TRUE); } } void LLPanelRegionTools::onChangePrelude() { // checking prelude auto-checks fixed sun - if (childGetValue("check prelude").asBoolean()) + if (getChild<LLUICtrl>("check prelude")->getValue().asBoolean()) { - childSetValue("check fixed sun", TRUE); - childSetValue("check reset home", TRUE); + getChild<LLUICtrl>("check fixed sun")->setValue(TRUE); + getChild<LLUICtrl>("check reset home")->setValue(TRUE); onChangeAnything(); } // pass on to default onChange handler @@ -736,7 +736,7 @@ void LLPanelRegionTools::onChangeSimName(LLLineEditor* caller, void* userdata ) if (userdata && gAgent.isGodlike()) { LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata; - region_tools->childEnable("Apply"); + region_tools->getChildView("Apply")->setEnabled(TRUE); } } @@ -761,7 +761,7 @@ void LLPanelRegionTools::onApplyChanges() LLViewerRegion *region = gAgent.getRegion(); if (region && gAgent.isGodlike()) { - childDisable("Apply"); + getChildView("Apply")->setEnabled(FALSE); god_tools->sendGodUpdateRegionInfo(); //LLFloaterReg::getTypedInstance<LLFloaterGodTools>("god_tools")->sendGodUpdateRegionInfo(); } @@ -931,7 +931,7 @@ void LLPanelObjectTools::setTargetAvatar(const LLUUID &target_id) mTargetAvatar = target_id; if (target_id.isNull()) { - childSetValue("target_avatar_name", getString("no_target")); + getChild<LLUICtrl>("target_avatar_name")->setValue(getString("no_target")); } } @@ -941,14 +941,14 @@ void LLPanelObjectTools::refresh() LLViewerRegion *regionp = gAgent.getRegion(); if (regionp) { - childSetText("region name", regionp->getName()); + getChild<LLUICtrl>("region name")->setValue(regionp->getName()); } } U32 LLPanelObjectTools::computeRegionFlags(U32 flags) const { - if (childGetValue("disable scripts").asBoolean()) + if (getChild<LLUICtrl>("disable scripts")->getValue().asBoolean()) { flags |= REGION_FLAGS_SKIP_SCRIPTS; } @@ -956,7 +956,7 @@ U32 LLPanelObjectTools::computeRegionFlags(U32 flags) const { flags &= ~REGION_FLAGS_SKIP_SCRIPTS; } - if (childGetValue("disable collisions").asBoolean()) + if (getChild<LLUICtrl>("disable collisions")->getValue().asBoolean()) { flags |= REGION_FLAGS_SKIP_COLLISIONS; } @@ -964,7 +964,7 @@ U32 LLPanelObjectTools::computeRegionFlags(U32 flags) const { flags &= ~REGION_FLAGS_SKIP_COLLISIONS; } - if (childGetValue("disable physics").asBoolean()) + if (getChild<LLUICtrl>("disable physics")->getValue().asBoolean()) { flags |= REGION_FLAGS_SKIP_PHYSICS; } @@ -978,36 +978,36 @@ U32 LLPanelObjectTools::computeRegionFlags(U32 flags) const void LLPanelObjectTools::setCheckFlags(U32 flags) { - childSetValue("disable scripts", flags & REGION_FLAGS_SKIP_SCRIPTS ? TRUE : FALSE); - childSetValue("disable collisions", flags & REGION_FLAGS_SKIP_COLLISIONS ? TRUE : FALSE); - childSetValue("disable physics", flags & REGION_FLAGS_SKIP_PHYSICS ? TRUE : FALSE); + getChild<LLUICtrl>("disable scripts")->setValue(flags & REGION_FLAGS_SKIP_SCRIPTS ? TRUE : FALSE); + getChild<LLUICtrl>("disable collisions")->setValue(flags & REGION_FLAGS_SKIP_COLLISIONS ? TRUE : FALSE); + getChild<LLUICtrl>("disable physics")->setValue(flags & REGION_FLAGS_SKIP_PHYSICS ? TRUE : FALSE); } void LLPanelObjectTools::clearAllWidgets() { - childSetValue("disable scripts", FALSE); - childDisable("disable scripts"); + getChild<LLUICtrl>("disable scripts")->setValue(FALSE); + getChildView("disable scripts")->setEnabled(FALSE); - childDisable("Apply"); - childDisable("Set Target"); - childDisable("Delete Target's Scripted Objects On Others Land"); - childDisable("Delete Target's Scripted Objects On *Any* Land"); - childDisable("Delete *ALL* Of Target's Objects"); + getChildView("Apply")->setEnabled(FALSE); + getChildView("Set Target")->setEnabled(FALSE); + getChildView("Delete Target's Scripted Objects On Others Land")->setEnabled(FALSE); + getChildView("Delete Target's Scripted Objects On *Any* Land")->setEnabled(FALSE); + getChildView("Delete *ALL* Of Target's Objects")->setEnabled(FALSE); } void LLPanelObjectTools::enableAllWidgets() { - childEnable("disable scripts"); + getChildView("disable scripts")->setEnabled(TRUE); - childDisable("Apply"); // don't enable this one - childEnable("Set Target"); - childEnable("Delete Target's Scripted Objects On Others Land"); - childEnable("Delete Target's Scripted Objects On *Any* Land"); - childEnable("Delete *ALL* Of Target's Objects"); - childEnable("Get Top Colliders"); - childEnable("Get Top Scripts"); + getChildView("Apply")->setEnabled(FALSE); // don't enable this one + getChildView("Set Target")->setEnabled(TRUE); + getChildView("Delete Target's Scripted Objects On Others Land")->setEnabled(TRUE); + getChildView("Delete Target's Scripted Objects On *Any* Land")->setEnabled(TRUE); + getChildView("Delete *ALL* Of Target's Objects")->setEnabled(TRUE); + getChildView("Get Top Colliders")->setEnabled(TRUE); + getChildView("Get Top Scripts")->setEnabled(TRUE); } @@ -1057,7 +1057,7 @@ void LLPanelObjectTools::onClickDeletePublicOwnedBy() SWD_SCRIPTED_ONLY | SWD_OTHERS_LAND_ONLY; LLSD args; - args["AVATAR_NAME"] = childGetValue("target_avatar_name").asString(); + args["AVATAR_NAME"] = getChild<LLUICtrl>("target_avatar_name")->getValue().asString(); LLSD payload; payload["avatar_id"] = mTargetAvatar; payload["flags"] = (S32)mSimWideDeletesFlags; @@ -1077,7 +1077,7 @@ void LLPanelObjectTools::onClickDeleteAllScriptedOwnedBy() mSimWideDeletesFlags = SWD_SCRIPTED_ONLY; LLSD args; - args["AVATAR_NAME"] = childGetValue("target_avatar_name").asString(); + args["AVATAR_NAME"] = getChild<LLUICtrl>("target_avatar_name")->getValue().asString(); LLSD payload; payload["avatar_id"] = mTargetAvatar; payload["flags"] = (S32)mSimWideDeletesFlags; @@ -1097,7 +1097,7 @@ void LLPanelObjectTools::onClickDeleteAllOwnedBy() mSimWideDeletesFlags = 0; LLSD args; - args["AVATAR_NAME"] = childGetValue("target_avatar_name").asString(); + args["AVATAR_NAME"] = getChild<LLUICtrl>("target_avatar_name")->getValue().asString(); LLSD payload; payload["avatar_id"] = mTargetAvatar; payload["flags"] = (S32)mSimWideDeletesFlags; @@ -1148,14 +1148,14 @@ void LLPanelObjectTools::onClickSetBySelection(void* data) args["[OBJECT]"] = node->mName; args["[OWNER]"] = owner_name; std::string name = LLTrans::getString("GodToolsObjectOwnedBy", args); - panelp->childSetValue("target_avatar_name", name); + panelp->getChild<LLUICtrl>("target_avatar_name")->setValue(name); } void LLPanelObjectTools::callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids) { if (ids.empty() || names.empty()) return; mTargetAvatar = ids[0]; - childSetValue("target_avatar_name", names[0]); + getChild<LLUICtrl>("target_avatar_name")->setValue(names[0]); refresh(); } @@ -1163,7 +1163,7 @@ void LLPanelObjectTools::onChangeAnything() { if (gAgent.isGodlike()) { - childEnable("Apply"); + getChildView("Apply")->setEnabled(TRUE); } } @@ -1175,7 +1175,7 @@ void LLPanelObjectTools::onApplyChanges() if (region && gAgent.isGodlike()) { // TODO -- implement this - childDisable("Apply"); + getChildView("Apply")->setEnabled(FALSE); god_tools->sendGodUpdateRegionInfo(); //LLFloaterReg::getTypedInstance<LLFloaterGodTools>("god_tools")->sendGodUpdateRegionInfo(); } @@ -1208,7 +1208,7 @@ BOOL LLPanelRequestTools::postBuild() void LLPanelRequestTools::refresh() { - std::string buffer = childGetValue("destination"); + std::string buffer = getChild<LLUICtrl>("destination")->getValue(); LLCtrlListInterface *list = childGetListInterface("destination"); if (!list) return; @@ -1263,12 +1263,12 @@ void LLPanelRequestTools::sendRequest(const std::string& request, void LLPanelRequestTools::onClickRequest() { - const std::string dest = childGetValue("destination").asString(); + const std::string dest = getChild<LLUICtrl>("destination")->getValue().asString(); if(dest == SELECTION) { - std::string req =childGetValue("request"); + std::string req =getChild<LLUICtrl>("request")->getValue(); req = req.substr(0, req.find_first_of(" ")); - std::string param = childGetValue("parameter"); + std::string param = getChild<LLUICtrl>("parameter")->getValue(); LLSelectMgr::getInstance()->sendGodlikeRequest(req, param); } else if(dest == AGENT_REGION) @@ -1307,7 +1307,7 @@ void LLPanelRequestTools::sendRequest(const LLHost& host) { // intercept viewer local actions here - std::string req = childGetValue("request"); + std::string req = getChild<LLUICtrl>("request")->getValue(); if (req == "terrain download") { gXferManager->requestFile(std::string("terrain.raw"), std::string("terrain.raw"), LL_PATH_NONE, @@ -1319,7 +1319,7 @@ void LLPanelRequestTools::sendRequest(const LLHost& host) else { req = req.substr(0, req.find_first_of(" ")); - sendRequest(req, childGetValue("parameter").asString(), host); + sendRequest(req, getChild<LLUICtrl>("parameter")->getValue().asString(), host); } } diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp index c71764c2e5..43f158658a 100644 --- a/indra/newview/llfloatergroups.cpp +++ b/indra/newview/llfloatergroups.cpp @@ -89,14 +89,13 @@ BOOL LLFloaterGroupPicker::postBuild() list_ctrl->setContextMenu(LLScrollListCtrl::MENU_GROUP); } - childSetAction("OK", onBtnOK, this); childSetAction("Cancel", onBtnCancel, this); setDefaultBtn("OK"); - childEnable("OK"); + getChildView("OK")->setEnabled(TRUE); return TRUE; } @@ -177,8 +176,8 @@ void LLPanelGroups::reset() { group_list->operateOnAll(LLCtrlListInterface::OP_DELETE); } - childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count())); - childSetTextArg("groupcount", "[MAX]", llformat("%d",MAX_AGENT_GROUPS)); + getChild<LLUICtrl>("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.count())); + getChild<LLUICtrl>("groupcount")->setTextArg("[MAX]", llformat("%d",MAX_AGENT_GROUPS)); init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID()); enableButtons(); @@ -188,8 +187,8 @@ BOOL LLPanelGroups::postBuild() { childSetCommitCallback("group list", onGroupList, this); - childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count())); - childSetTextArg("groupcount", "[MAX]", llformat("%d",MAX_AGENT_GROUPS)); + getChild<LLUICtrl>("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.count())); + getChild<LLUICtrl>("groupcount")->setTextArg("[MAX]", llformat("%d",MAX_AGENT_GROUPS)); LLScrollListCtrl *list = getChild<LLScrollListCtrl>("group list"); if (list) @@ -229,25 +228,25 @@ void LLPanelGroups::enableButtons() if(group_id != gAgent.getGroupID()) { - childEnable("Activate"); + getChildView("Activate")->setEnabled(TRUE); } else { - childDisable("Activate"); + getChildView("Activate")->setEnabled(FALSE); } if (group_id.notNull()) { - childEnable("Info"); - childEnable("IM"); - childEnable("Leave"); + getChildView("Info")->setEnabled(TRUE); + getChildView("IM")->setEnabled(TRUE); + getChildView("Leave")->setEnabled(TRUE); } else { - childDisable("Info"); - childDisable("IM"); - childDisable("Leave"); + getChildView("Info")->setEnabled(FALSE); + getChildView("IM")->setEnabled(FALSE); + getChildView("Leave")->setEnabled(FALSE); } - childSetEnabled("Create", gAgent.canJoinGroups()); + getChildView("Create")->setEnabled(gAgent.canJoinGroups()); } diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp index 480e4ce3a4..a97e00122a 100644 --- a/indra/newview/llfloaterhardwaresettings.cpp +++ b/indra/newview/llfloaterhardwaresettings.cpp @@ -87,7 +87,7 @@ void LLFloaterHardwareSettings::refresh() mFogRatio = gSavedSettings.getF32("RenderFogRatio"); mProbeHardwareOnStartup = gSavedSettings.getBOOL("ProbeHardwareOnStartup"); - childSetValue("fsaa", (LLSD::Integer) mFSAASamples); + getChild<LLUICtrl>("fsaa")->setValue((LLSD::Integer) mFSAASamples); refreshEnabledState(); } @@ -101,13 +101,13 @@ void LLFloaterHardwareSettings::refreshEnabledState() if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderVBOEnable") || !gGLManager.mHasVertexBufferObject) { - childSetEnabled("vbo", FALSE); + getChildView("vbo")->setEnabled(FALSE); } // if no windlight shaders, turn off nighttime brightness, gamma, and fog distance - childSetEnabled("gamma", !gPipeline.canUseWindLightShaders()); - childSetEnabled("(brightness, lower is brighter)", !gPipeline.canUseWindLightShaders()); - childSetEnabled("fog", !gPipeline.canUseWindLightShaders()); + getChildView("gamma")->setEnabled(!gPipeline.canUseWindLightShaders()); + getChildView("(brightness, lower is brighter)")->setEnabled(!gPipeline.canUseWindLightShaders()); + getChildView("fog")->setEnabled(!gPipeline.canUseWindLightShaders()); } @@ -130,9 +130,9 @@ void LLFloaterHardwareSettings::apply() { // Anisotropic rendering BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic; - LLImageGL::sGlobalUseAnisotropic = childGetValue("ani"); + LLImageGL::sGlobalUseAnisotropic = getChild<LLUICtrl>("ani")->getValue(); - U32 fsaa = (U32) childGetValue("fsaa").asInteger(); + U32 fsaa = (U32) getChild<LLUICtrl>("fsaa")->getValue().asInteger(); U32 old_fsaa = gSavedSettings.getU32("RenderFSAASamples"); BOOL logged_in = (LLStartUp::getStartupState() >= STATE_STARTED); diff --git a/indra/newview/llfloaterhelpbrowser.cpp b/indra/newview/llfloaterhelpbrowser.cpp index f3c6b286ab..6aa1e92438 100644 --- a/indra/newview/llfloaterhelpbrowser.cpp +++ b/indra/newview/llfloaterhelpbrowser.cpp @@ -92,11 +92,11 @@ void LLFloaterHelpBrowser::handleMediaEvent(LLPluginClassMedia* self, EMediaEven break; case MEDIA_EVENT_NAVIGATE_BEGIN: - childSetText("status_text", getString("loading_text")); + getChild<LLUICtrl>("status_text")->setValue(getString("loading_text")); break; case MEDIA_EVENT_NAVIGATE_COMPLETE: - childSetText("status_text", getString("done_text")); + getChild<LLUICtrl>("status_text")->setValue(getString("done_text")); break; default: diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp index 28fe2a14b7..e97849ae8e 100644 --- a/indra/newview/llfloaterimagepreview.cpp +++ b/indra/newview/llfloaterimagepreview.cpp @@ -109,7 +109,7 @@ BOOL LLFloaterImagePreview::postBuild() PREVIEW_HPAD + PREF_BUTTON_HEIGHT + PREVIEW_HPAD); mPreviewImageRect.set(0.f, 1.f, 1.f, 0.f); - childHide("bad_image_text"); + getChildView("bad_image_text")->setVisible(FALSE); if (mRawImagep.notNull() && gAgent.getRegion() != NULL) { @@ -120,19 +120,19 @@ BOOL LLFloaterImagePreview::postBuild() mSculptedPreview->setPreviewTarget(mRawImagep, 2.0f); if (mRawImagep->getWidth() * mRawImagep->getHeight () <= LL_IMAGE_REZ_LOSSLESS_CUTOFF * LL_IMAGE_REZ_LOSSLESS_CUTOFF) - childEnable("lossless_check"); + getChildView("lossless_check")->setEnabled(TRUE); } else { mAvatarPreview = NULL; mSculptedPreview = NULL; - childShow("bad_image_text"); - childDisable("clothing_type_combo"); - childDisable("ok_btn"); + getChildView("bad_image_text")->setVisible(TRUE); + getChildView("clothing_type_combo")->setEnabled(FALSE); + getChildView("ok_btn")->setEnabled(FALSE); if(!mImageLoadError.empty()) { - childSetValue("bad_image_text",mImageLoadError.c_str()); + getChild<LLUICtrl>("bad_image_text")->setValue(mImageLoadError.c_str()); } } diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp index 13ca7638c5..4d4681a68d 100644 --- a/indra/newview/llfloaterinspect.cpp +++ b/indra/newview/llfloaterinspect.cpp @@ -154,8 +154,8 @@ void LLFloaterInspect::onSelectObject() { if(LLFloaterInspect::getSelectedUUID() != LLUUID::null) { - childSetEnabled("button owner", true); - childSetEnabled("button creator", true); + getChildView("button owner")->setEnabled(true); + getChildView("button creator")->setEnabled(true); } } @@ -178,8 +178,8 @@ void LLFloaterInspect::refresh() LLUUID creator_id; std::string creator_name; S32 pos = mObjectList->getScrollPos(); - childSetEnabled("button owner", false); - childSetEnabled("button creator", false); + getChildView("button owner")->setEnabled(false); + getChildView("button creator")->setEnabled(false); LLUUID selected_uuid; S32 selected_index = mObjectList->getFirstSelectedIndex(); if(selected_index > -1) diff --git a/indra/newview/llfloaterjoystick.cpp b/indra/newview/llfloaterjoystick.cpp index 78bc63ac8c..9c7957603e 100644 --- a/indra/newview/llfloaterjoystick.cpp +++ b/indra/newview/llfloaterjoystick.cpp @@ -58,11 +58,11 @@ LLFloaterJoystick::LLFloaterJoystick(const LLSD& data) void LLFloaterJoystick::draw() { bool joystick_inited = LLViewerJoystick::getInstance()->isJoystickInitialized(); - childSetEnabled("enable_joystick", joystick_inited); - childSetEnabled("joystick_type", joystick_inited); + getChildView("enable_joystick")->setEnabled(joystick_inited); + getChildView("joystick_type")->setEnabled(joystick_inited); std::string desc = LLViewerJoystick::getInstance()->getDescription(); if (desc.empty()) desc = getString("NoDevice"); - childSetText("joystick_type", desc); + getChild<LLUICtrl>("joystick_type")->setValue(desc); LLViewerJoystick* joystick(LLViewerJoystick::getInstance()); for (U32 i = 0; i < 6; i++) diff --git a/indra/newview/llfloaterlagmeter.cpp b/indra/newview/llfloaterlagmeter.cpp index 100cbdb217..9a2c34b40f 100644 --- a/indra/newview/llfloaterlagmeter.cpp +++ b/indra/newview/llfloaterlagmeter.cpp @@ -329,9 +329,9 @@ void LLFloaterLagMeter::updateControls(bool shrink) setRect(r); reshape(mMaxWidth, getRect().getHeight()); - childSetText("client", getString("client_text_msg", mStringArgs) + ":"); - childSetText("network", getString("network_text_msg",mStringArgs) + ":"); - childSetText("server", getString("server_text_msg", mStringArgs) + ":"); + getChild<LLUICtrl>("client")->setValue(getString("client_text_msg", mStringArgs) + ":"); + getChild<LLUICtrl>("network")->setValue(getString("network_text_msg",mStringArgs) + ":"); + getChild<LLUICtrl>("server")->setValue(getString("server_text_msg", mStringArgs) + ":"); // usually "<<" button->setLabel( getString("smaller_label", mStringArgs) ); @@ -344,9 +344,9 @@ void LLFloaterLagMeter::updateControls(bool shrink) setRect(r); reshape(mMinWidth, getRect().getHeight()); - childSetText("client", getString("client_text_msg", mStringArgs) ); - childSetText("network",getString("network_text_msg",mStringArgs) ); - childSetText("server", getString("server_text_msg", mStringArgs) ); + getChild<LLUICtrl>("client")->setValue(getString("client_text_msg", mStringArgs) ); + getChild<LLUICtrl>("network")->setValue(getString("network_text_msg",mStringArgs) ); + getChild<LLUICtrl>("server")->setValue(getString("server_text_msg", mStringArgs) ); // usually ">>" button->setLabel( getString("bigger_label", mStringArgs) ); @@ -356,15 +356,15 @@ void LLFloaterLagMeter::updateControls(bool shrink) // self->mClientText->setVisible(self->mShrunk); // self->mClientCause->setVisible(self->mShrunk); -// self->childSetVisible("client_help", self->mShrunk); +// self->getChildView("client_help")->setVisible( self->mShrunk); // self->mNetworkText->setVisible(self->mShrunk); // self->mNetworkCause->setVisible(self->mShrunk); -// self->childSetVisible("network_help", self->mShrunk); +// self->getChildView("network_help")->setVisible( self->mShrunk); // self->mServerText->setVisible(self->mShrunk); // self->mServerCause->setVisible(self->mShrunk); -// self->childSetVisible("server_help", self->mShrunk); +// self->getChildView("server_help")->setVisible( self->mShrunk); // self->mShrunk = !self->mShrunk; } diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 913bb676b0..625b443abc 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -371,7 +371,7 @@ BOOL LLPanelLandGeneral::postBuild() { mEditName = getChild<LLLineEditor>("Name"); mEditName->setCommitCallback(onCommitAny, this); - childSetPrevalidate("Name", LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLLineEditor>("Name")->setPrevalidate(LLTextValidate::validateASCIIPrintableNoPipe); mEditDesc = getChild<LLTextEditor>("Description"); mEditDesc->setCommitOnFocusLost(TRUE); @@ -388,7 +388,7 @@ BOOL LLPanelLandGeneral::postBuild() mLandType = getChild<LLTextBox>("LandTypeText"); mBtnProfile = getChild<LLButton>("Profile..."); - mBtnProfile->setClickedCallback(onClickProfile, this); + mBtnProfile->setClickedCallback(boost::bind(&LLPanelLandGeneral::onClickProfile, this)); mTextGroupLabel = getChild<LLTextBox>("Group:"); @@ -865,11 +865,9 @@ void LLPanelLandGeneral::onClickSetGroup() } } -// static -void LLPanelLandGeneral::onClickProfile(void* data) +void LLPanelLandGeneral::onClickProfile() { - LLPanelLandGeneral* panelp = (LLPanelLandGeneral*)data; - LLParcel* parcel = panelp->mParcel->getParcel(); + LLParcel* parcel = mParcel->getParcel(); if (!parcel) return; if (parcel->getIsGroupOwned()) @@ -920,13 +918,6 @@ void LLPanelLandGeneral::onClickScriptLimits(void* data) } } -BOOL LLPanelLandGeneral::enableDeedToGroup(void* data) -{ - LLPanelLandGeneral* panelp = (LLPanelLandGeneral*)data; - LLParcel* parcel = panelp->mParcel->getParcel(); - return (parcel != NULL) && (parcel->getParcelFlag(PF_ALLOW_DEED_TO_GROUP)); -} - // static void LLPanelLandGeneral::onClickDeed(void*) { @@ -1140,7 +1131,7 @@ BOOL LLPanelLandObjects::postBuild() mCleanOtherObjectsTime->setFocusLostCallback(boost::bind(onLostFocus, _1, this)); mCleanOtherObjectsTime->setCommitCallback(onCommitClean, this); - childSetPrevalidate("clean other time", LLTextValidate::validateNonNegativeS32); + getChild<LLLineEditor>("clean other time")->setPrevalidate(LLTextValidate::validateNonNegativeS32); mBtnRefresh = getChild<LLButton>("Refresh List"); mBtnRefresh->setClickedCallback(onClickRefresh, this); @@ -2088,7 +2079,8 @@ void LLPanelLandOptions::refresh() LLStyle::Params style; style.image(LLUI::getUIImage(gFloaterView->getParentFloater(this)->getString("maturity_icon_moderate"))); LLCheckBoxWithTBAcess* fullaccess_mature_ctrl = (LLCheckBoxWithTBAcess*)mMatureCtrl; - fullaccess_mature_ctrl->getTextBox()->setText(std::string("icon"),style); + fullaccess_mature_ctrl->getTextBox()->setText(LLStringExplicit("")); + fullaccess_mature_ctrl->getTextBox()->appendImageSegment(style); fullaccess_mature_ctrl->getTextBox()->appendText(getString("mature_check_mature"), false); fullaccess_mature_ctrl->setToolTip(getString("mature_check_mature_tooltip")); fullaccess_mature_ctrl->reshape(fullaccess_mature_ctrl->getRect().getWidth(), fullaccess_mature_ctrl->getRect().getHeight(), FALSE); @@ -2404,18 +2396,18 @@ void LLPanelLandAccess::refresh() BOOL use_group = parcel->getParcelFlag(PF_USE_ACCESS_GROUP); BOOL public_access = !use_access_list && !use_group; - childSetValue("public_access", public_access ); - childSetValue("GroupCheck", use_group ); + getChild<LLUICtrl>("public_access")->setValue(public_access ); + getChild<LLUICtrl>("GroupCheck")->setValue(use_group ); std::string group_name; gCacheName->getGroupName(parcel->getGroupID(), group_name); - childSetLabelArg("GroupCheck", "[GROUP]", group_name ); + getChild<LLUICtrl>("GroupCheck")->setLabelArg("[GROUP]", group_name ); // Allow list { S32 count = parcel->mAccessList.size(); - childSetToolTipArg("AccessList", "[LISTED]", llformat("%d",count)); - childSetToolTipArg("AccessList", "[MAX]", llformat("%d",PARCEL_MAX_ACCESS_LIST)); + getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count)); + getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST)); for (access_map_const_iterator cit = parcel->mAccessList.begin(); cit != parcel->mAccessList.end(); ++cit) @@ -2456,8 +2448,8 @@ void LLPanelLandAccess::refresh() { S32 count = parcel->mBanList.size(); - childSetToolTipArg("BannedList", "[LISTED]", llformat("%d",count)); - childSetToolTipArg("BannedList", "[MAX]", llformat("%d",PARCEL_MAX_ACCESS_LIST)); + getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count)); + getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST)); for (access_map_const_iterator cit = parcel->mBanList.begin(); cit != parcel->mBanList.end(); ++cit) @@ -2516,27 +2508,27 @@ void LLPanelLandAccess::refresh() if(parcel->getRegionDenyAnonymousOverride()) { - childSetValue("limit_payment", TRUE); - childSetLabelArg( "limit_payment", "[ESTATE_PAYMENT_LIMIT]", getString("access_estate_defined") ); + getChild<LLUICtrl>("limit_payment")->setValue(TRUE); + getChild<LLUICtrl>("limit_payment")->setLabelArg("[ESTATE_PAYMENT_LIMIT]", getString("access_estate_defined") ); } else { - childSetValue("limit_payment", (parcel->getParcelFlag(PF_DENY_ANONYMOUS))); - childSetLabelArg( "limit_payment", "[ESTATE_PAYMENT_LIMIT]", std::string() ); + getChild<LLUICtrl>("limit_payment")->setValue((parcel->getParcelFlag(PF_DENY_ANONYMOUS))); + getChild<LLUICtrl>("limit_payment")->setLabelArg("[ESTATE_PAYMENT_LIMIT]", std::string() ); } if(parcel->getRegionDenyAgeUnverifiedOverride()) { - childSetValue("limit_age_verified", TRUE); - childSetLabelArg( "limit_age_verified", "[ESTATE_AGE_LIMIT]", getString("access_estate_defined") ); + getChild<LLUICtrl>("limit_age_verified")->setValue(TRUE); + getChild<LLUICtrl>("limit_age_verified")->setLabelArg("[ESTATE_AGE_LIMIT]", getString("access_estate_defined") ); } else { - childSetValue("limit_age_verified", (parcel->getParcelFlag(PF_DENY_AGEUNVERIFIED))); - childSetLabelArg( "limit_age_verified", "[ESTATE_AGE_LIMIT]", std::string() ); + getChild<LLUICtrl>("limit_age_verified")->setValue((parcel->getParcelFlag(PF_DENY_AGEUNVERIFIED))); + getChild<LLUICtrl>("limit_age_verified")->setLabelArg("[ESTATE_AGE_LIMIT]", std::string() ); } BOOL use_pass = parcel->getParcelFlag(PF_USE_PASS_LIST); - childSetValue("PassCheck", use_pass ); + getChild<LLUICtrl>("PassCheck")->setValue(use_pass ); LLCtrlSelectionInterface* passcombo = childGetSelectionInterface("pass_combo"); if (passcombo) { @@ -2547,40 +2539,40 @@ void LLPanelLandAccess::refresh() } S32 pass_price = parcel->getPassPrice(); - childSetValue( "PriceSpin", (F32)pass_price ); + getChild<LLUICtrl>("PriceSpin")->setValue((F32)pass_price ); F32 pass_hours = parcel->getPassHours(); - childSetValue( "HoursSpin", pass_hours ); + getChild<LLUICtrl>("HoursSpin")->setValue(pass_hours ); } else { - childSetValue("public_access", FALSE); - childSetValue("limit_payment", FALSE); - childSetValue("limit_age_verified", FALSE); - childSetValue("GroupCheck", FALSE); - childSetLabelArg("GroupCheck", "[GROUP]", LLStringUtil::null ); - childSetValue("PassCheck", FALSE); - childSetValue("PriceSpin", (F32)PARCEL_PASS_PRICE_DEFAULT); - childSetValue( "HoursSpin", PARCEL_PASS_HOURS_DEFAULT ); - childSetToolTipArg("AccessList", "[LISTED]", llformat("%d",0)); - childSetToolTipArg("AccessList", "[MAX]", llformat("%d",0)); - childSetToolTipArg("BannedList", "[LISTED]", llformat("%d",0)); - childSetToolTipArg("BannedList", "[MAX]", llformat("%d",0)); + getChild<LLUICtrl>("public_access")->setValue(FALSE); + getChild<LLUICtrl>("limit_payment")->setValue(FALSE); + getChild<LLUICtrl>("limit_age_verified")->setValue(FALSE); + getChild<LLUICtrl>("GroupCheck")->setValue(FALSE); + getChild<LLUICtrl>("GroupCheck")->setLabelArg("[GROUP]", LLStringUtil::null ); + getChild<LLUICtrl>("PassCheck")->setValue(FALSE); + getChild<LLUICtrl>("PriceSpin")->setValue((F32)PARCEL_PASS_PRICE_DEFAULT); + getChild<LLUICtrl>("HoursSpin")->setValue(PARCEL_PASS_HOURS_DEFAULT ); + getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",0)); + getChild<LLUICtrl>("AccessList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",0)); + getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",0)); + getChild<LLUICtrl>("BannedList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",0)); } } void LLPanelLandAccess::refresh_ui() { - childSetEnabled("public_access", FALSE); - childSetEnabled("limit_payment", FALSE); - childSetEnabled("limit_age_verified", FALSE); - childSetEnabled("GroupCheck", FALSE); - childSetEnabled("PassCheck", FALSE); - childSetEnabled("pass_combo", FALSE); - childSetEnabled("PriceSpin", FALSE); - childSetEnabled("HoursSpin", FALSE); - childSetEnabled("AccessList", FALSE); - childSetEnabled("BannedList", FALSE); + getChildView("public_access")->setEnabled(FALSE); + getChildView("limit_payment")->setEnabled(FALSE); + getChildView("limit_age_verified")->setEnabled(FALSE); + getChildView("GroupCheck")->setEnabled(FALSE); + getChildView("PassCheck")->setEnabled(FALSE); + getChildView("pass_combo")->setEnabled(FALSE); + getChildView("PriceSpin")->setEnabled(FALSE); + getChildView("HoursSpin")->setEnabled(FALSE); + getChildView("AccessList")->setEnabled(FALSE); + getChildView("BannedList")->setEnabled(FALSE); LLParcel *parcel = mParcel->getParcel(); if (parcel) @@ -2588,73 +2580,73 @@ void LLPanelLandAccess::refresh_ui() BOOL can_manage_allowed = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_ALLOWED); BOOL can_manage_banned = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_BANNED); - childSetEnabled("public_access", can_manage_allowed); - BOOL public_access = childGetValue("public_access").asBoolean(); + getChildView("public_access")->setEnabled(can_manage_allowed); + BOOL public_access = getChild<LLUICtrl>("public_access")->getValue().asBoolean(); if (public_access) { bool override = false; if(parcel->getRegionDenyAnonymousOverride()) { override = true; - childSetEnabled("limit_payment", FALSE); + getChildView("limit_payment")->setEnabled(FALSE); } else { - childSetEnabled("limit_payment", can_manage_allowed); + getChildView("limit_payment")->setEnabled(can_manage_allowed); } if(parcel->getRegionDenyAgeUnverifiedOverride()) { override = true; - childSetEnabled("limit_age_verified", FALSE); + getChildView("limit_age_verified")->setEnabled(FALSE); } else { - childSetEnabled("limit_age_verified", can_manage_allowed); + getChildView("limit_age_verified")->setEnabled(can_manage_allowed); } if (override) { - childSetToolTip("Only Allow", getString("estate_override")); + getChildView("Only Allow")->setToolTip(getString("estate_override")); } else { - childSetToolTip("Only Allow", std::string()); + getChildView("Only Allow")->setToolTip(std::string()); } - childSetEnabled("GroupCheck", FALSE); - childSetEnabled("PassCheck", FALSE); - childSetEnabled("pass_combo", FALSE); - childSetEnabled("AccessList", FALSE); + getChildView("GroupCheck")->setEnabled(FALSE); + getChildView("PassCheck")->setEnabled(FALSE); + getChildView("pass_combo")->setEnabled(FALSE); + getChildView("AccessList")->setEnabled(FALSE); } else { - childSetEnabled("limit_payment", FALSE); - childSetEnabled("limit_age_verified", FALSE); + getChildView("limit_payment")->setEnabled(FALSE); + getChildView("limit_age_verified")->setEnabled(FALSE); std::string group_name; if (gCacheName->getGroupName(parcel->getGroupID(), group_name)) { - childSetEnabled("GroupCheck", can_manage_allowed); + getChildView("GroupCheck")->setEnabled(can_manage_allowed); } - BOOL group_access = childGetValue("GroupCheck").asBoolean(); - BOOL sell_passes = childGetValue("PassCheck").asBoolean(); - childSetEnabled("PassCheck", can_manage_allowed); + BOOL group_access = getChild<LLUICtrl>("GroupCheck")->getValue().asBoolean(); + BOOL sell_passes = getChild<LLUICtrl>("PassCheck")->getValue().asBoolean(); + getChildView("PassCheck")->setEnabled(can_manage_allowed); if (sell_passes) { - childSetEnabled("pass_combo", group_access && can_manage_allowed); - childSetEnabled("PriceSpin", can_manage_allowed); - childSetEnabled("HoursSpin", can_manage_allowed); + getChildView("pass_combo")->setEnabled(group_access && can_manage_allowed); + getChildView("PriceSpin")->setEnabled(can_manage_allowed); + getChildView("HoursSpin")->setEnabled(can_manage_allowed); } } - childSetEnabled("AccessList", can_manage_allowed); + getChildView("AccessList")->setEnabled(can_manage_allowed); S32 allowed_list_count = parcel->mAccessList.size(); - childSetEnabled("add_allowed", can_manage_allowed && allowed_list_count < PARCEL_MAX_ACCESS_LIST); + getChildView("add_allowed")->setEnabled(can_manage_allowed && allowed_list_count < PARCEL_MAX_ACCESS_LIST); BOOL has_selected = mListAccess->getSelectionInterface()->getFirstSelectedIndex() >= 0; - childSetEnabled("remove_allowed", can_manage_allowed && has_selected); + getChildView("remove_allowed")->setEnabled(can_manage_allowed && has_selected); - childSetEnabled("BannedList", can_manage_banned); + getChildView("BannedList")->setEnabled(can_manage_banned); S32 banned_list_count = parcel->mBanList.size(); - childSetEnabled("add_banned", can_manage_banned && banned_list_count < PARCEL_MAX_ACCESS_LIST); + getChildView("add_banned")->setEnabled(can_manage_banned && banned_list_count < PARCEL_MAX_ACCESS_LIST); has_selected = mListBanned->getSelectionInterface()->getFirstSelectedIndex() >= 0; - childSetEnabled("remove_banned", can_manage_banned && has_selected); + getChildView("remove_banned")->setEnabled(can_manage_banned && has_selected); } } @@ -2668,7 +2660,7 @@ void LLPanelLandAccess::refreshNames() { gCacheName->getGroupName(parcel->getGroupID(), group_name); } - childSetLabelArg("GroupCheck", "[GROUP]", group_name); + getChild<LLUICtrl>("GroupCheck")->setLabelArg("[GROUP]", group_name); } @@ -2691,13 +2683,13 @@ void LLPanelLandAccess::onCommitPublicAccess(LLUICtrl *ctrl, void *userdata) } // If we disabled public access, enable group access by default (if applicable) - BOOL public_access = self->childGetValue("public_access").asBoolean(); + BOOL public_access = self->getChild<LLUICtrl>("public_access")->getValue().asBoolean(); if (public_access == FALSE) { std::string group_name; if (gCacheName->getGroupName(parcel->getGroupID(), group_name)) { - self->childSetValue("GroupCheck", public_access ? FALSE : TRUE); + self->getChild<LLUICtrl>("GroupCheck")->setValue(public_access ? FALSE : TRUE); } } @@ -2716,8 +2708,8 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata) } // Extract data from UI - BOOL public_access = self->childGetValue("public_access").asBoolean(); - BOOL use_access_group = self->childGetValue("GroupCheck").asBoolean(); + BOOL public_access = self->getChild<LLUICtrl>("public_access")->getValue().asBoolean(); + BOOL use_access_group = self->getChild<LLUICtrl>("GroupCheck")->getValue().asBoolean(); if (use_access_group) { std::string group_name; @@ -2735,13 +2727,13 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata) { use_access_list = FALSE; use_access_group = FALSE; - limit_payment = self->childGetValue("limit_payment").asBoolean(); - limit_age_verified = self->childGetValue("limit_age_verified").asBoolean(); + limit_payment = self->getChild<LLUICtrl>("limit_payment")->getValue().asBoolean(); + limit_age_verified = self->getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean(); } else { use_access_list = TRUE; - use_pass_list = self->childGetValue("PassCheck").asBoolean(); + use_pass_list = self->getChild<LLUICtrl>("PassCheck")->getValue().asBoolean(); if (use_access_group && use_pass_list) { LLCtrlSelectionInterface* passcombo = self->childGetSelectionInterface("pass_combo"); @@ -2755,8 +2747,8 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata) } } - S32 pass_price = llfloor((F32)self->childGetValue("PriceSpin").asReal()); - F32 pass_hours = (F32)self->childGetValue("HoursSpin").asReal(); + S32 pass_price = llfloor((F32)self->getChild<LLUICtrl>("PriceSpin")->getValue().asReal()); + F32 pass_hours = (F32)self->getChild<LLUICtrl>("HoursSpin")->getValue().asReal(); // Push data into current parcel parcel->setParcelFlag(PF_USE_ACCESS_GROUP, use_access_group); diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h index 0a743e5215..130f52361a 100644 --- a/indra/newview/llfloaterland.h +++ b/indra/newview/llfloaterland.h @@ -144,9 +144,8 @@ public: virtual void draw(); void setGroup(const LLUUID& group_id); - static void onClickProfile(void*); - void onClickSetGroup(); - static BOOL enableDeedToGroup(void*); + void onClickProfile(); + void onClickSetGroup(); static void onClickDeed(void*); static void onClickBuyLand(void* data); static void onClickScriptLimits(void* data); diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp index 19552ca9c9..3c8ee6eb9e 100644 --- a/indra/newview/llfloaterlandholdings.cpp +++ b/indra/newview/llfloaterlandholdings.cpp @@ -145,8 +145,8 @@ void LLFloaterLandHoldings::refresh() enable_btns = TRUE; } - childSetEnabled("Teleport", enable_btns); - childSetEnabled("Show on Map", enable_btns); + getChildView("Teleport")->setEnabled(enable_btns); + getChildView("Show on Map")->setEnabled(enable_btns); refreshAggregates(); } @@ -334,7 +334,7 @@ void LLFloaterLandHoldings::refreshAggregates() S32 current_area = gStatusBar->getSquareMetersCommitted(); S32 available_area = gStatusBar->getSquareMetersLeft(); - childSetTextArg("allowed_text", "[AREA]", llformat("%d",allowed_area)); - childSetTextArg("current_text", "[AREA]", llformat("%d",current_area)); - childSetTextArg("available_text", "[AREA]", llformat("%d",available_area)); + getChild<LLUICtrl>("allowed_text")->setTextArg("[AREA]", llformat("%d",allowed_area)); + getChild<LLUICtrl>("current_text")->setTextArg("[AREA]", llformat("%d",current_area)); + getChild<LLUICtrl>("available_text")->setTextArg("[AREA]", llformat("%d",available_area)); } diff --git a/indra/newview/llfloatermediabrowser.cpp b/indra/newview/llfloatermediabrowser.cpp index 5673550fbe..5405de2f9a 100644 --- a/indra/newview/llfloatermediabrowser.cpp +++ b/indra/newview/llfloatermediabrowser.cpp @@ -65,12 +65,12 @@ LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& key) void LLFloaterMediaBrowser::draw() { - childSetEnabled("go", !mAddressCombo->getValue().asString().empty()); + getChildView("go")->setEnabled(!mAddressCombo->getValue().asString().empty()); LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); if(parcel) { - childSetVisible("parcel_owner_controls", LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_MEDIA)); - childSetEnabled("assign", !mAddressCombo->getValue().asString().empty()); + getChildView("parcel_owner_controls")->setVisible( LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_CHANGE_MEDIA)); + getChildView("assign")->setEnabled(!mAddressCombo->getValue().asString().empty()); } bool show_time_controls = false; bool media_playing = false; @@ -83,17 +83,17 @@ void LLFloaterMediaBrowser::draw() media_playing = media_plugin->getStatus() == LLPluginClassMediaOwner::MEDIA_PLAYING; } } - childSetVisible("rewind", show_time_controls); - childSetVisible("play", show_time_controls && ! media_playing); - childSetVisible("pause", show_time_controls && media_playing); - childSetVisible("stop", show_time_controls); - childSetVisible("seek", show_time_controls); + getChildView("rewind")->setVisible( show_time_controls); + getChildView("play")->setVisible( show_time_controls && ! media_playing); + getChildView("pause")->setVisible( show_time_controls && media_playing); + getChildView("stop")->setVisible( show_time_controls); + getChildView("seek")->setVisible( show_time_controls); - childSetEnabled("play", ! media_playing); - childSetEnabled("stop", media_playing); + getChildView("play")->setEnabled(! media_playing); + getChildView("stop")->setEnabled(media_playing); - childSetEnabled("back", mBrowser->canNavigateBack()); - childSetEnabled("forward", mBrowser->canNavigateForward()); + getChildView("back")->setEnabled(mBrowser->canNavigateBack()); + getChildView("forward")->setEnabled(mBrowser->canNavigateForward()); LLFloater::draw(); } @@ -173,8 +173,8 @@ void LLFloaterMediaBrowser::handleMediaEvent(LLPluginClassMedia* self, EMediaEve else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE) { // This is the event these flags are sent with. - childSetEnabled("back", self->getHistoryBackAvailable()); - childSetEnabled("forward", self->getHistoryForwardAvailable()); + getChildView("back")->setEnabled(self->getHistoryBackAvailable()); + getChildView("forward")->setEnabled(self->getHistoryForwardAvailable()); } } void LLFloaterMediaBrowser::setCurrentURL(const std::string& url) @@ -192,9 +192,9 @@ void LLFloaterMediaBrowser::setCurrentURL(const std::string& url) LLURLHistory::removeURL("browser", mCurrentURL); LLURLHistory::addURL("browser", mCurrentURL); } - childSetEnabled("back", mBrowser->canNavigateBack()); - childSetEnabled("forward", mBrowser->canNavigateForward()); - childSetEnabled("reload", TRUE); + getChildView("back")->setEnabled(mBrowser->canNavigateBack()); + getChildView("forward")->setEnabled(mBrowser->canNavigateForward()); + getChildView("reload")->setEnabled(TRUE); } void LLFloaterMediaBrowser::onOpen(const LLSD& media_url) diff --git a/indra/newview/llfloatermemleak.cpp b/indra/newview/llfloatermemleak.cpp index 529bd68e03..51843c6833 100644 --- a/indra/newview/llfloatermemleak.cpp +++ b/indra/newview/llfloatermemleak.cpp @@ -64,7 +64,7 @@ LLFloaterMemLeak::LLFloaterMemLeak(const LLSD& key) BOOL LLFloaterMemLeak::postBuild(void) { F32 a, b ; - a = childGetValue("leak_speed").asReal(); + a = getChild<LLUICtrl>("leak_speed")->getValue().asReal(); if(a > (F32)(0xFFFFFFFF)) { sMemLeakingSpeed = 0xFFFFFFFF ; @@ -73,7 +73,7 @@ BOOL LLFloaterMemLeak::postBuild(void) { sMemLeakingSpeed = (U32)a ; } - b = childGetValue("max_leak").asReal(); + b = getChild<LLUICtrl>("max_leak")->getValue().asReal(); if(b > (F32)0xFFF) { sMaxLeakedMem = 0xFFFFFFFF ; @@ -150,7 +150,7 @@ void LLFloaterMemLeak::idle() void LLFloaterMemLeak::onChangeLeakingSpeed() { F32 tmp ; - tmp =childGetValue("leak_speed").asReal(); + tmp =getChild<LLUICtrl>("leak_speed")->getValue().asReal(); if(tmp > (F32)0xFFFFFFFF) { @@ -167,7 +167,7 @@ void LLFloaterMemLeak::onChangeMaxMemLeaking() { F32 tmp ; - tmp =childGetValue("max_leak").asReal(); + tmp =getChild<LLUICtrl>("max_leak")->getValue().asReal(); if(tmp > (F32)0xFFF) { sMaxLeakedMem = 0xFFFFFFFF ; @@ -206,22 +206,22 @@ void LLFloaterMemLeak::draw() { std::string bytes_string; LLResMgr::getInstance()->getIntegerString(bytes_string, sTotalLeaked >> 10 ); - childSetTextArg("total_leaked_label", "[SIZE]", bytes_string); + getChild<LLUICtrl>("total_leaked_label")->setTextArg("[SIZE]", bytes_string); } else { - childSetTextArg("total_leaked_label", "[SIZE]", LLStringExplicit("0")); + getChild<LLUICtrl>("total_leaked_label")->setTextArg("[SIZE]", LLStringExplicit("0")); } if(sbAllocationFailed) { - childSetTextArg("note_label_1", "[NOTE1]", LLStringExplicit("Memory leaking simulation stops. Reduce leaking speed or")); - childSetTextArg("note_label_2", "[NOTE2]", LLStringExplicit("increase max leaked memory, then press Start to continue.")); + getChild<LLUICtrl>("note_label_1")->setTextArg("[NOTE1]", LLStringExplicit("Memory leaking simulation stops. Reduce leaking speed or")); + getChild<LLUICtrl>("note_label_2")->setTextArg("[NOTE2]", LLStringExplicit("increase max leaked memory, then press Start to continue.")); } else { - childSetTextArg("note_label_1", "[NOTE1]", LLStringExplicit("")); - childSetTextArg("note_label_2", "[NOTE2]", LLStringExplicit("")); + getChild<LLUICtrl>("note_label_1")->setTextArg("[NOTE1]", LLStringExplicit("")); + getChild<LLUICtrl>("note_label_2")->setTextArg("[NOTE2]", LLStringExplicit("")); } LLFloater::draw(); diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp index 159ce41b79..dc9b883fb2 100644 --- a/indra/newview/llfloaternamedesc.cpp +++ b/indra/newview/llfloaternamedesc.cpp @@ -105,7 +105,7 @@ BOOL LLFloaterNameDesc::postBuild() r.setLeftTopAndSize( PREVIEW_HPAD, y, line_width, PREVIEW_LINE_HEIGHT ); getChild<LLUICtrl>("name_form")->setCommitCallback(boost::bind(&LLFloaterNameDesc::doCommit, this)); - childSetValue("name_form", LLSD(asset_name)); + getChild<LLUICtrl>("name_form")->setValue(LLSD(asset_name)); LLLineEditor *NameEditor = getChild<LLLineEditor>("name_form"); if (NameEditor) @@ -131,7 +131,7 @@ BOOL LLFloaterNameDesc::postBuild() // Cancel button getChild<LLUICtrl>("cancel_btn")->setCommitCallback(boost::bind(&LLFloaterNameDesc::onBtnCancel, this)); - childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d", LLGlobalEconomy::Singleton::getInstance()->getPriceUpload() )); + getChild<LLUICtrl>("ok_btn")->setLabelArg("[AMOUNT]", llformat("%d", LLGlobalEconomy::Singleton::getInstance()->getPriceUpload() )); setDefaultBtn("ok_btn"); @@ -167,15 +167,15 @@ void LLFloaterNameDesc::doCommit() //----------------------------------------------------------------------------- void LLFloaterNameDesc::onBtnOK( ) { - childDisable("ok_btn"); // don't allow inadvertent extra uploads + getChildView("ok_btn")->setEnabled(FALSE); // don't allow inadvertent extra uploads LLAssetStorage::LLStoreAssetCallback callback = NULL; S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); // kinda hack - assumes that unsubclassed LLFloaterNameDesc is only used for uploading chargeable assets, which it is right now (it's only used unsubclassed for the sound upload dialog, and THAT should be a subclass). void *nruserdata = NULL; std::string display_name = LLStringUtil::null; upload_new_resource(mFilenameAndPath, // file - childGetValue("name_form").asString(), - childGetValue("description_form").asString(), + getChild<LLUICtrl>("name_form")->getValue().asString(), + getChild<LLUICtrl>("description_form")->getValue().asString(), 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(), display_name, callback, expected_upload_cost, nruserdata); diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp index d39ed77491..a2a3d300e7 100644 --- a/indra/newview/llfloateropenobject.cpp +++ b/indra/newview/llfloateropenobject.cpp @@ -75,7 +75,7 @@ LLFloaterOpenObject::~LLFloaterOpenObject() // virtual BOOL LLFloaterOpenObject::postBuild() { - childSetTextArg("object_name", "[DESC]", std::string("Object") ); // *Note: probably do not want to translate this + getChild<LLUICtrl>("object_name")->setTextArg("[DESC]", std::string("Object") ); // *Note: probably do not want to translate this mPanelInventoryObject = getChild<LLPanelObjectInventory>("object_contents"); refresh(); @@ -119,9 +119,9 @@ void LLFloaterOpenObject::refresh() enabled = FALSE; } - childSetTextArg("object_name", "[DESC]", name); - childSetEnabled("copy_to_inventory_button", enabled); - childSetEnabled("copy_and_wear_button", enabled); + getChild<LLUICtrl>("object_name")->setTextArg("[DESC]", name); + getChildView("copy_to_inventory_button")->setEnabled(enabled); + getChildView("copy_and_wear_button")->setEnabled(enabled); } diff --git a/indra/newview/llfloaterparcel.cpp b/indra/newview/llfloaterparcel.cpp deleted file mode 100644 index e2be784116..0000000000 --- a/indra/newview/llfloaterparcel.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/** - * @file llfloaterparcel.cpp - * @brief LLFloaterParcel class implementation - * Parcel information as shown in a floating window from secondlife:// command - * handler. - * - * $LicenseInfo:firstyear=2007&license=viewergpl$ - * - * Copyright (c) 2007-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ -#include "llviewerprecompiledheaders.h" - -#include "llfloaterparcel.h" - -#include "llfloaterreg.h" - -// viewer project includes -#include "llcommandhandler.h" -#include "llpanelplace.h" -#include "llsidetray.h" - -// linden library includes -#include "lluuid.h" -#include "lluictrlfactory.h" - -//----------------------------------------------------------------------------- -// Globals -//----------------------------------------------------------------------------- - -class LLParcelHandler : public LLCommandHandler -{ -public: - // requires trusted browser to trigger - LLParcelHandler() : LLCommandHandler("parcel", UNTRUSTED_THROTTLE) { } - bool handle(const LLSD& params, const LLSD& query_map, - LLMediaCtrl* web) - { - if (params.size() < 2) - { - return false; - } - LLUUID parcel_id; - if (!parcel_id.set(params[0], FALSE)) - { - return false; - } - if (params[1].asString() == "about") - { - if (parcel_id.notNull()) - { - LLSD key; - key["type"] = "remote_place"; - key["id"] = parcel_id; - LLSideTray::getInstance()->showPanel("panel_places", key); - return true; - } - } - return false; - } -}; -LLParcelHandler gParcelHandler; - -//----------------------------------------------------------------------------- -// Member functions -//----------------------------------------------------------------------------- - -//---------------------------------------------------------------------------- - -void* LLFloaterParcelInfo::createPanelPlace(void* data) -{ - LLFloaterParcelInfo* self = (LLFloaterParcelInfo*)data; - self->mPanelParcelp = new LLPanelPlace(); // allow edit self - LLUICtrlFactory::getInstance()->buildPanel(self->mPanelParcelp, "panel_place.xml"); - return self->mPanelParcelp; -} - -//---------------------------------------------------------------------------- - - -LLFloaterParcelInfo::LLFloaterParcelInfo(const LLSD& parcel_id) -: LLFloater(parcel_id), - mParcelID( parcel_id.asUUID() ), - mPanelParcelp(NULL) -{ - mFactoryMap["place_details_panel"] = LLCallbackMap(LLFloaterParcelInfo::createPanelPlace, this); -// LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_url.xml"); -} - -// virtual -LLFloaterParcelInfo::~LLFloaterParcelInfo() -{ - -} - -BOOL LLFloaterParcelInfo::postBuild() -{ - if (mPanelParcelp) - { - mPanelParcelp->setParcelID(mParcelID); - } - center(); - return LLFloater::postBuild(); -} - - diff --git a/indra/newview/llfloaterparcel.h b/indra/newview/llfloaterparcel.h deleted file mode 100644 index 386acb3fd5..0000000000 --- a/indra/newview/llfloaterparcel.h +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @file llfloaterparcel.h - * @brief Parcel information as shown in a floating window from a sl-url. - * Just a wrapper for LLPanelPlace, shared with the Find directory. - * - * $LicenseInfo:firstyear=2007&license=viewergpl$ - * - * Copyright (c) 2007-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ -#ifndef LL_FLOATERPARCELINFO_H -#define LL_FLOATERPARCELINFO_H - -#include "llfloater.h" - -class LLPanelPlace; - -class LLFloaterParcelInfo -: public LLFloater -{ -public: - static void* createPanelPlace(void* data); - - LLFloaterParcelInfo( const LLSD& parcel_id ); - /*virtual*/ ~LLFloaterParcelInfo(); - - /*virtual*/ BOOL postBuild(); - - void displayParcelInfo(const LLUUID& parcel_id); - -private: - LLUUID mParcelID; // for which parcel is this window? - LLPanelPlace* mPanelParcelp; -}; - - -#endif diff --git a/indra/newview/llfloaterpay.cpp b/indra/newview/llfloaterpay.cpp index ba7526ccd5..c1640e2609 100644 --- a/indra/newview/llfloaterpay.cpp +++ b/indra/newview/llfloaterpay.cpp @@ -158,7 +158,7 @@ BOOL LLFloaterPay::postBuild() mCallbackData.push_back(info); childSetAction("fastpay 1",&LLFloaterPay::onGive,info); - childSetVisible("fastpay 1", FALSE); + getChildView("fastpay 1")->setVisible( FALSE); mQuickPayButton[i] = getChild<LLButton>("fastpay 1"); mQuickPayInfo[i] = info; @@ -168,7 +168,7 @@ BOOL LLFloaterPay::postBuild() mCallbackData.push_back(info); childSetAction("fastpay 5",&LLFloaterPay::onGive,info); - childSetVisible("fastpay 5", FALSE); + getChildView("fastpay 5")->setVisible( FALSE); mQuickPayButton[i] = getChild<LLButton>("fastpay 5"); mQuickPayInfo[i] = info; @@ -178,7 +178,7 @@ BOOL LLFloaterPay::postBuild() mCallbackData.push_back(info); childSetAction("fastpay 10",&LLFloaterPay::onGive,info); - childSetVisible("fastpay 10", FALSE); + getChildView("fastpay 10")->setVisible( FALSE); mQuickPayButton[i] = getChild<LLButton>("fastpay 10"); mQuickPayInfo[i] = info; @@ -188,14 +188,14 @@ BOOL LLFloaterPay::postBuild() mCallbackData.push_back(info); childSetAction("fastpay 20",&LLFloaterPay::onGive,info); - childSetVisible("fastpay 20", FALSE); + getChildView("fastpay 20")->setVisible( FALSE); mQuickPayButton[i] = getChild<LLButton>("fastpay 20"); mQuickPayInfo[i] = info; ++i; - childSetVisible("amount text", FALSE); + getChildView("amount text")->setVisible( FALSE); std::string last_amount; if(sLastAmount > 0) @@ -203,19 +203,19 @@ BOOL LLFloaterPay::postBuild() last_amount = llformat("%d", sLastAmount); } - childSetVisible("amount", FALSE); + getChildView("amount")->setVisible( FALSE); getChild<LLLineEditor>("amount")->setKeystrokeCallback(&LLFloaterPay::onKeystroke, this); - childSetText("amount", last_amount); - childSetPrevalidate("amount", LLTextValidate::validateNonNegativeS32); + getChild<LLUICtrl>("amount")->setValue(last_amount); + getChild<LLLineEditor>("amount")->setPrevalidate(LLTextValidate::validateNonNegativeS32); info = new LLGiveMoneyInfo(this, 0); mCallbackData.push_back(info); childSetAction("pay btn",&LLFloaterPay::onGive,info); setDefaultBtn("pay btn"); - childSetVisible("pay btn", FALSE); - childSetEnabled("pay btn", (sLastAmount > 0)); + getChildView("pay btn")->setVisible( FALSE); + getChildView("pay btn")->setEnabled((sLastAmount > 0)); childSetAction("cancel btn",&LLFloaterPay::onCancel,this); @@ -249,27 +249,27 @@ void LLFloaterPay::processPayPriceReply(LLMessageSystem* msg, void **userdata) if (PAY_PRICE_HIDE == price) { - self->childSetVisible("amount", FALSE); - self->childSetVisible("pay btn", FALSE); - self->childSetVisible("amount text", FALSE); + self->getChildView("amount")->setVisible( FALSE); + self->getChildView("pay btn")->setVisible( FALSE); + self->getChildView("amount text")->setVisible( FALSE); } else if (PAY_PRICE_DEFAULT == price) { - self->childSetVisible("amount", TRUE); - self->childSetVisible("pay btn", TRUE); - self->childSetVisible("amount text", TRUE); + self->getChildView("amount")->setVisible( TRUE); + self->getChildView("pay btn")->setVisible( TRUE); + self->getChildView("amount text")->setVisible( TRUE); } else { // PAY_PRICE_HIDE and PAY_PRICE_DEFAULT are negative values // So we take the absolute value here after we have checked for those cases - self->childSetVisible("amount", TRUE); - self->childSetVisible("pay btn", TRUE); - self->childSetEnabled("pay btn", TRUE); - self->childSetVisible("amount text", TRUE); + self->getChildView("amount")->setVisible( TRUE); + self->getChildView("pay btn")->setVisible( TRUE); + self->getChildView("pay btn")->setEnabled(TRUE); + self->getChildView("amount text")->setVisible( TRUE); - self->childSetText("amount", llformat("%d", llabs(price))); + self->getChild<LLUICtrl>("amount")->setValue(llformat("%d", llabs(price))); } S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_ButtonData); @@ -292,7 +292,7 @@ void LLFloaterPay::processPayPriceReply(LLMessageSystem* msg, void **userdata) self->mQuickPayButton[i]->setLabelUnselected(button_str); self->mQuickPayButton[i]->setVisible(TRUE); self->mQuickPayInfo[i]->mAmount = pay_button; - self->childSetVisible("fastpay text",TRUE); + self->getChildView("fastpay text")->setVisible(TRUE); if ( pay_button > max_pay_amount ) { @@ -399,7 +399,7 @@ void LLFloaterPay::payViaObject(money_callback callback, LLSafeHandle<LLObjectSe BOOL is_group = FALSE; node->mPermissions->getOwnership(owner_id, is_group); - floater->childSetText("object_name_text",node->mName); + floater->getChild<LLUICtrl>("object_name_text")->setValue(node->mName); floater->finishPayUI(owner_id, is_group); } @@ -415,11 +415,11 @@ void LLFloaterPay::payDirectly(money_callback callback, floater->setCallback(callback); floater->mObjectSelection = NULL; - floater->childSetVisible("amount", TRUE); - floater->childSetVisible("pay btn", TRUE); - floater->childSetVisible("amount text", TRUE); + floater->getChildView("amount")->setVisible( TRUE); + floater->getChildView("pay btn")->setVisible( TRUE); + floater->getChildView("amount text")->setVisible( TRUE); - floater->childSetVisible("fastpay text",TRUE); + floater->getChildView("fastpay text")->setVisible(TRUE); for(S32 i=0;i<MAX_PAY_BUTTONS;++i) { floater->mQuickPayButton[i]->setVisible(TRUE); @@ -434,7 +434,7 @@ void LLFloaterPay::finishPayUI(const LLUUID& target_id, BOOL is_group) // Make sure the amount field has focus - childSetFocus("amount", TRUE); + getChild<LLUICtrl>("amount")->setFocus( TRUE); LLLineEditor* amount = getChild<LLLineEditor>("amount"); amount->selectAll(); @@ -455,8 +455,8 @@ void LLFloaterPay::onCacheOwnerName(const LLUUID& owner_id, setTitle(getString("payee_resident")); } - childSetTextArg("payee_name", "[FIRST]", firstname); - childSetTextArg("payee_name", "[LAST]", lastname); + getChild<LLUICtrl>("payee_name")->setTextArg("[FIRST]", firstname); + getChild<LLUICtrl>("payee_name")->setTextArg("[LAST]", lastname); } // static @@ -476,8 +476,8 @@ void LLFloaterPay::onKeystroke(LLLineEditor*, void* data) if(self) { // enable the Pay button when amount is non-empty and positive, disable otherwise - std::string amtstr = self->childGetText("amount"); - self->childSetEnabled("pay btn", !amtstr.empty() && atoi(amtstr.c_str()) > 0); + std::string amtstr = self->getChild<LLUICtrl>("amount")->getValue().asString(); + self->getChildView("pay btn")->setEnabled(!amtstr.empty() && atoi(amtstr.c_str()) > 0); } } @@ -500,7 +500,7 @@ void LLFloaterPay::give(S32 amount) // text field. if(amount == 0) { - amount = atoi(childGetText("amount").c_str()); + amount = atoi(getChild<LLUICtrl>("amount")->getValue().asString().c_str()); } sLastAmount = amount; diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp index 8da44e2035..dc4553ef96 100644 --- a/indra/newview/llfloaterpostcard.cpp +++ b/indra/newview/llfloaterpostcard.cpp @@ -99,16 +99,16 @@ BOOL LLFloaterPostcard::postBuild() childSetAction("cancel_btn", onClickCancel, this); childSetAction("send_btn", onClickSend, this); - childDisable("from_form"); + getChildView("from_form")->setEnabled(FALSE); std::string name_string; LLAgentUI::buildFullname(name_string); - childSetValue("name_form", LLSD(name_string)); + getChild<LLUICtrl>("name_form")->setValue(LLSD(name_string)); // For the first time a user focusess to .the msg box, all text will be selected. getChild<LLUICtrl>("msg_form")->setFocusChangedCallback(boost::bind(onMsgFormFocusRecieved, _1, this)); - childSetFocus("to_form", TRUE); + getChild<LLUICtrl>("to_form")->setFocus(TRUE); return TRUE; } @@ -215,8 +215,8 @@ void LLFloaterPostcard::onClickSend(void* data) { LLFloaterPostcard *self = (LLFloaterPostcard *)data; - std::string from(self->childGetValue("from_form").asString()); - std::string to(self->childGetValue("to_form").asString()); + std::string from(self->getChild<LLUICtrl>("from_form")->getValue().asString()); + std::string to(self->getChild<LLUICtrl>("to_form")->getValue().asString()); boost::regex emailFormat("[A-Za-z0-9.%+-_]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}(,[ \t]*[A-Za-z0-9.%+-_]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,})*"); @@ -232,7 +232,7 @@ void LLFloaterPostcard::onClickSend(void* data) return; } - std::string subject(self->childGetValue("subject_form").asString()); + std::string subject(self->getChild<LLUICtrl>("subject_form")->getValue().asString()); if(subject.empty() || !self->mHasFirstMsgFocus) { LLNotificationsUtil::add("PromptMissingSubjMsg", LLSD(), LLSD(), boost::bind(&LLFloaterPostcard::missingSubjMsgAlertCallback, self, _1, _2)); @@ -275,11 +275,11 @@ void LLFloaterPostcard::uploadCallback(const LLUUID& asset_id, void *user_data, msg->addUUID("SessionID", gAgent.getSessionID()); msg->addUUID("AssetID", self->mAssetID); msg->addVector3d("PosGlobal", self->mPosTakenGlobal); - msg->addString("To", self->childGetValue("to_form").asString()); - msg->addString("From", self->childGetValue("from_form").asString()); - msg->addString("Name", self->childGetValue("name_form").asString()); - msg->addString("Subject", self->childGetValue("subject_form").asString()); - msg->addString("Msg", self->childGetValue("msg_form").asString()); + msg->addString("To", self->getChild<LLUICtrl>("to_form")->getValue().asString()); + msg->addString("From", self->getChild<LLUICtrl>("from_form")->getValue().asString()); + msg->addString("Name", self->getChild<LLUICtrl>("name_form")->getValue().asString()); + msg->addString("Subject", self->getChild<LLUICtrl>("subject_form")->getValue().asString()); + msg->addString("Msg", self->getChild<LLUICtrl>("msg_form")->getValue().asString()); msg->addBOOL("AllowPublish", FALSE); msg->addBOOL("MaturePublish", FALSE); gAgent.sendReliableMessage(); @@ -296,11 +296,11 @@ void LLFloaterPostcard::updateUserInfo(const std::string& email) iter != inst_list.end(); ++iter) { LLFloater* instance = *iter; - const std::string& text = instance->childGetValue("from_form").asString(); + const std::string& text = instance->getChild<LLUICtrl>("from_form")->getValue().asString(); if (text.empty()) { // there's no text in this field yet, pre-populate - instance->childSetValue("from_form", LLSD(email)); + instance->getChild<LLUICtrl>("from_form")->setValue(LLSD(email)); } } } @@ -325,17 +325,17 @@ bool LLFloaterPostcard::missingSubjMsgAlertCallback(const LLSD& notification, co if(0 == option) { // User clicked OK - if((childGetValue("subject_form").asString()).empty()) + if((getChild<LLUICtrl>("subject_form")->getValue().asString()).empty()) { // Stuff the subject back into the form. - childSetValue("subject_form", getString("default_subject")); + getChild<LLUICtrl>("subject_form")->setValue(getString("default_subject")); } if(!mHasFirstMsgFocus) { // The user never switched focus to the messagee window. // Using the default string. - childSetValue("msg_form", getString("default_message")); + getChild<LLUICtrl>("msg_form")->setValue(getString("default_message")); } sendPostcard(); @@ -357,11 +357,11 @@ void LLFloaterPostcard::sendPostcard() LLSD body = LLSD::emptyMap(); // the capability already encodes: agent ID, region ID body["pos-global"] = mPosTakenGlobal.getValue(); - body["to"] = childGetValue("to_form").asString(); - body["from"] = childGetValue("from_form").asString(); - body["name"] = childGetValue("name_form").asString(); - body["subject"] = childGetValue("subject_form").asString(); - body["msg"] = childGetValue("msg_form").asString(); + body["to"] = getChild<LLUICtrl>("to_form")->getValue().asString(); + body["from"] = getChild<LLUICtrl>("from_form")->getValue().asString(); + body["name"] = getChild<LLUICtrl>("name_form")->getValue().asString(); + body["subject"] = getChild<LLUICtrl>("subject_form")->getValue().asString(); + body["msg"] = getChild<LLUICtrl>("msg_form")->getValue().asString(); LLHTTPClient::post(url, body, new LLSendPostcardResponder(body, mAssetID, LLAssetType::AT_IMAGE_JPEG)); } else diff --git a/indra/newview/llfloaterpostprocess.cpp b/indra/newview/llfloaterpostprocess.cpp index 87a12d3d66..06c0a94afa 100644 --- a/indra/newview/llfloaterpostprocess.cpp +++ b/indra/newview/llfloaterpostprocess.cpp @@ -212,25 +212,25 @@ void LLFloaterPostProcess::syncMenu() comboBox->selectByValue(gPostProcess->getSelectedEffect()); /// Sync Color Filter Menu - childSetValue("ColorFilterToggle", gPostProcess->tweaks.useColorFilter()); - //childSetValue("ColorFilterGamma", gPostProcess->tweaks.gamma()); - childSetValue("ColorFilterBrightness", gPostProcess->tweaks.brightness()); - childSetValue("ColorFilterSaturation", gPostProcess->tweaks.saturation()); - childSetValue("ColorFilterContrast", gPostProcess->tweaks.contrast()); - childSetValue("ColorFilterBaseR", gPostProcess->tweaks.contrastBaseR()); - childSetValue("ColorFilterBaseG", gPostProcess->tweaks.contrastBaseG()); - childSetValue("ColorFilterBaseB", gPostProcess->tweaks.contrastBaseB()); - childSetValue("ColorFilterBaseI", gPostProcess->tweaks.contrastBaseIntensity()); + getChild<LLUICtrl>("ColorFilterToggle")->setValue(gPostProcess->tweaks.useColorFilter()); + //getChild<LLUICtrl>("ColorFilterGamma")->setValue(gPostProcess->tweaks.gamma()); + getChild<LLUICtrl>("ColorFilterBrightness")->setValue(gPostProcess->tweaks.brightness()); + getChild<LLUICtrl>("ColorFilterSaturation")->setValue(gPostProcess->tweaks.saturation()); + getChild<LLUICtrl>("ColorFilterContrast")->setValue(gPostProcess->tweaks.contrast()); + getChild<LLUICtrl>("ColorFilterBaseR")->setValue(gPostProcess->tweaks.contrastBaseR()); + getChild<LLUICtrl>("ColorFilterBaseG")->setValue(gPostProcess->tweaks.contrastBaseG()); + getChild<LLUICtrl>("ColorFilterBaseB")->setValue(gPostProcess->tweaks.contrastBaseB()); + getChild<LLUICtrl>("ColorFilterBaseI")->setValue(gPostProcess->tweaks.contrastBaseIntensity()); /// Sync Night Vision Menu - childSetValue("NightVisionToggle", gPostProcess->tweaks.useNightVisionShader()); - childSetValue("NightVisionBrightMult", gPostProcess->tweaks.brightMult()); - childSetValue("NightVisionNoiseSize", gPostProcess->tweaks.noiseSize()); - childSetValue("NightVisionNoiseStrength", gPostProcess->tweaks.noiseStrength()); + getChild<LLUICtrl>("NightVisionToggle")->setValue(gPostProcess->tweaks.useNightVisionShader()); + getChild<LLUICtrl>("NightVisionBrightMult")->setValue(gPostProcess->tweaks.brightMult()); + getChild<LLUICtrl>("NightVisionNoiseSize")->setValue(gPostProcess->tweaks.noiseSize()); + getChild<LLUICtrl>("NightVisionNoiseStrength")->setValue(gPostProcess->tweaks.noiseStrength()); /// Sync Bloom Menu - childSetValue("BloomToggle", LLSD(gPostProcess->tweaks.useBloomShader())); - childSetValue("BloomExtract", gPostProcess->tweaks.extractLow()); - childSetValue("BloomSize", gPostProcess->tweaks.bloomWidth()); - childSetValue("BloomStrength", gPostProcess->tweaks.bloomStrength()); + getChild<LLUICtrl>("BloomToggle")->setValue(LLSD(gPostProcess->tweaks.useBloomShader())); + getChild<LLUICtrl>("BloomExtract")->setValue(gPostProcess->tweaks.extractLow()); + getChild<LLUICtrl>("BloomSize")->setValue(gPostProcess->tweaks.bloomWidth()); + getChild<LLUICtrl>("BloomStrength")->setValue(gPostProcess->tweaks.bloomStrength()); } diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index ab32c2f6bf..7791c037d3 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -144,7 +144,7 @@ LLVoiceSetKeyDialog::LLVoiceSetKeyDialog(const LLSD& key) BOOL LLVoiceSetKeyDialog::postBuild() { childSetAction("Cancel", onCancel, this); - childSetFocus("Cancel"); + getChild<LLUICtrl>("Cancel")->setFocus(TRUE); gFocusMgr.setKeystrokesOnly(TRUE); @@ -330,7 +330,7 @@ BOOL LLFloaterPreference::postBuild() tabcontainer->selectFirstTab(); std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, ""); - childSetText("cache_location", cache_location); + getChild<LLUICtrl>("cache_location")->setValue(cache_location); // if floater is opened before login set default localized busy message if (LLStartUp::getStartupState() < STATE_STARTED) @@ -426,28 +426,28 @@ void LLFloaterPreference::apply() fov_slider->setMaxValue(LLViewerCamera::getInstance()->getMaxView()); std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, ""); - childSetText("cache_location", cache_location); + getChild<LLUICtrl>("cache_location")->setValue(cache_location); - LLViewerMedia::setCookiesEnabled(childGetValue("cookies_enabled")); + LLViewerMedia::setCookiesEnabled(getChild<LLUICtrl>("cookies_enabled")->getValue()); if(hasChild("web_proxy_enabled") &&hasChild("web_proxy_editor") && hasChild("web_proxy_port")) { - bool proxy_enable = childGetValue("web_proxy_enabled"); - std::string proxy_address = childGetValue("web_proxy_editor"); - int proxy_port = childGetValue("web_proxy_port"); + bool proxy_enable = getChild<LLUICtrl>("web_proxy_enabled")->getValue(); + std::string proxy_address = getChild<LLUICtrl>("web_proxy_editor")->getValue(); + int proxy_port = getChild<LLUICtrl>("web_proxy_port")->getValue(); LLViewerMedia::setProxyConfig(proxy_enable, proxy_address, proxy_port); } // LLWString busy_response = utf8str_to_wstring(getChild<LLUICtrl>("busy_response")->getValue().asString()); // LLWStringUtil::replaceTabsWithSpaces(busy_response, 4); - gSavedSettings.setBOOL("PlainTextChatHistory", childGetValue("plain_text_chat_history").asBoolean()); + gSavedSettings.setBOOL("PlainTextChatHistory", getChild<LLUICtrl>("plain_text_chat_history")->getValue().asBoolean()); if(mGotPersonalInfo) { // gSavedSettings.setString("BusyModeResponse2", std::string(wstring_to_utf8str(busy_response))); - bool new_im_via_email = childGetValue("send_im_to_email").asBoolean(); - bool new_hide_online = childGetValue("online_visibility").asBoolean(); + bool new_im_via_email = getChild<LLUICtrl>("send_im_to_email")->getValue().asBoolean(); + bool new_hide_online = getChild<LLUICtrl>("online_visibility")->getValue().asBoolean(); if((new_im_via_email != mOriginalIMViaEmail) ||(new_hide_online != mOriginalHideOnlineStatus)) @@ -545,13 +545,13 @@ void LLFloaterPreference::onOpen(const LLSD& key) maturity_list->deleteItems(LLSD(SIM_ACCESS_ADULT)); } } - childSetVisible("maturity_desired_combobox", true); - childSetVisible("maturity_desired_textbox", false); + getChildView("maturity_desired_combobox")->setVisible( true); + getChildView("maturity_desired_textbox")->setVisible( false); } else { - childSetText("maturity_desired_textbox", maturity_combo->getSelectedItemLabel()); - childSetVisible("maturity_desired_combobox", false); + getChild<LLUICtrl>("maturity_desired_textbox")->setValue(maturity_combo->getSelectedItemLabel()); + getChildView("maturity_desired_combobox")->setVisible( false); } // Display selected maturity icons. @@ -930,7 +930,7 @@ void LLFloaterPreference::refreshEnabledState() // now turn off any features that are unavailable disableUnavailableSettings(); - childSetEnabled ("block_list", LLLoginInstance::getInstance()->authSuccess()); + getChildView("block_list")->setEnabled(LLLoginInstance::getInstance()->authSuccess()); } void LLFloaterPreference::disableUnavailableSettings() @@ -1101,7 +1101,7 @@ void LLFloaterPreference::onClickSetKey() void LLFloaterPreference::setKey(KEY key) { - childSetValue("modifier_combo", LLKeyboard::stringFromKey(key)); + getChild<LLUICtrl>("modifier_combo")->setValue(LLKeyboard::stringFromKey(key)); // update the control right away since we no longer wait for apply getChild<LLUICtrl>("modifier_combo")->onCommit(); } @@ -1214,46 +1214,46 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im if(visibility == VISIBILITY_DEFAULT) { mOriginalHideOnlineStatus = false; - childEnable("online_visibility"); + getChildView("online_visibility")->setEnabled(TRUE); } else if(visibility == VISIBILITY_HIDDEN) { mOriginalHideOnlineStatus = true; - childEnable("online_visibility"); + getChildView("online_visibility")->setEnabled(TRUE); } else { mOriginalHideOnlineStatus = true; } - childEnable("include_im_in_chat_history"); - childEnable("show_timestamps_check_im"); - childEnable("friends_online_notify_checkbox"); - - childSetValue("online_visibility", mOriginalHideOnlineStatus); - childSetLabelArg("online_visibility", "[DIR_VIS]", mDirectoryVisibility); - childEnable("send_im_to_email"); - childSetValue("send_im_to_email", im_via_email); - childEnable("plain_text_chat_history"); - childSetValue("plain_text_chat_history", gSavedSettings.getBOOL("PlainTextChatHistory")); - childEnable("log_instant_messages"); -// childEnable("log_chat"); -// childEnable("busy_response"); -// childEnable("log_instant_messages_timestamp"); -// childEnable("log_chat_timestamp"); - childEnable("log_chat_IM"); - childEnable("log_date_timestamp"); - -// childSetText("busy_response", gSavedSettings.getString("BusyModeResponse2")); - - childEnable("log_nearby_chat"); - childEnable("log_instant_messages"); - childEnable("show_timestamps_check_im"); - childDisable("log_path_string");// LineEditor becomes readonly in this case. - childEnable("log_path_button"); + getChildView("include_im_in_chat_history")->setEnabled(TRUE); + getChildView("show_timestamps_check_im")->setEnabled(TRUE); + getChildView("friends_online_notify_checkbox")->setEnabled(TRUE); + + getChild<LLUICtrl>("online_visibility")->setValue(mOriginalHideOnlineStatus); + getChild<LLUICtrl>("online_visibility")->setLabelArg("[DIR_VIS]", mDirectoryVisibility); + getChildView("send_im_to_email")->setEnabled(TRUE); + getChild<LLUICtrl>("send_im_to_email")->setValue(im_via_email); + getChildView("plain_text_chat_history")->setEnabled(TRUE); + getChild<LLUICtrl>("plain_text_chat_history")->setValue(gSavedSettings.getBOOL("PlainTextChatHistory")); + getChildView("log_instant_messages")->setEnabled(TRUE); +// getChildView("log_chat")->setEnabled(TRUE); +// getChildView("busy_response")->setEnabled(TRUE); +// getChildView("log_instant_messages_timestamp")->setEnabled(TRUE); +// getChildView("log_chat_timestamp")->setEnabled(TRUE); + getChildView("log_chat_IM")->setEnabled(TRUE); + getChildView("log_date_timestamp")->setEnabled(TRUE); + +// getChild<LLUICtrl>("busy_response")->setValue(gSavedSettings.getString("BusyModeResponse2")); + + getChildView("log_nearby_chat")->setEnabled(TRUE); + getChildView("log_instant_messages")->setEnabled(TRUE); + getChildView("show_timestamps_check_im")->setEnabled(TRUE); + getChildView("log_path_string")->setEnabled(FALSE);// LineEditor becomes readonly in this case. + getChildView("log_path_button")->setEnabled(TRUE); std::string display_email(email); - childSetText("email_address",display_email); + getChild<LLUICtrl>("email_address")->setValue(display_email); } @@ -1352,8 +1352,8 @@ BOOL LLPanelPreference::postBuild() if(hasChild("voice_unavailable")) { BOOL voice_disabled = gSavedSettings.getBOOL("CmdLineDisableVoice"); - childSetVisible("voice_unavailable", voice_disabled); - childSetVisible("enable_voice_check", !voice_disabled); + getChildView("voice_unavailable")->setVisible( voice_disabled); + getChildView("enable_voice_check")->setVisible( !voice_disabled); } //////////////////////PanelSkins /////////////////// @@ -1373,8 +1373,8 @@ BOOL LLPanelPreference::postBuild() if(hasChild("online_visibility") && hasChild("send_im_to_email")) { - childSetText("email_address",getString("log_in_to_change") ); -// childSetText("busy_response", getString("log_in_to_change")); + getChild<LLUICtrl>("email_address")->setValue(getString("log_in_to_change") ); +// getChild<LLUICtrl>("busy_response")->setValue(getString("log_in_to_change")); } //////////////////////PanelPrivacy /////////////////// @@ -1398,9 +1398,9 @@ BOOL LLPanelPreference::postBuild() if (hasChild("modifier_combo")) { //localizing if push2talk button is set to middle mouse - if (MIDDLE_MOUSE_CV == childGetValue("modifier_combo").asString()) + if (MIDDLE_MOUSE_CV == getChild<LLUICtrl>("modifier_combo")->getValue().asString()) { - childSetValue("modifier_combo", getString("middle_mouse")); + getChild<LLUICtrl>("modifier_combo")->setValue(getString("middle_mouse")); } } diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp index 30b654de24..b6a98bdada 100644 --- a/indra/newview/llfloaterproperties.cpp +++ b/indra/newview/llfloaterproperties.cpp @@ -130,9 +130,9 @@ BOOL LLFloaterProperties::postBuild() { // build the UI // item name & description - childSetPrevalidate("LabelItemName",&LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLLineEditor>("LabelItemName")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); getChild<LLUICtrl>("LabelItemName")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitName,this)); - childSetPrevalidate("LabelItemDesc",&LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLLineEditor>("LabelItemDesc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); getChild<LLUICtrl>("LabelItemDesc")->setCommitCallback(boost::bind(&LLFloaterProperties:: onCommitDescription, this)); // Creator information getChild<LLUICtrl>("BtnCreator")->setCommitCallback(boost::bind(&LLFloaterProperties::onClickCreator,this)); @@ -201,7 +201,7 @@ void LLFloaterProperties::refresh() }; for(size_t t=0; t<LL_ARRAY_SIZE(enableNames); ++t) { - childSetEnabled(enableNames[t],false); + getChildView(enableNames[t])->setEnabled(false); } const char* hideNames[]={ "BaseMaskDebug", @@ -212,7 +212,7 @@ void LLFloaterProperties::refresh() }; for(size_t t=0; t<LL_ARRAY_SIZE(hideNames); ++t) { - childSetVisible(hideNames[t],false); + getChildView(hideNames[t])->setVisible(false); } } } @@ -265,13 +265,13 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) GP_OBJECT_MANIPULATE) && is_obj_modify && is_complete; - childSetEnabled("LabelItemNameTitle",TRUE); - childSetEnabled("LabelItemName",is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards - childSetText("LabelItemName",item->getName()); - childSetEnabled("LabelItemDescTitle",TRUE); - childSetEnabled("LabelItemDesc",is_modifiable); - childSetVisible("IconLocked",!is_modifiable); - childSetText("LabelItemDesc",item->getDescription()); + getChildView("LabelItemNameTitle")->setEnabled(TRUE); + getChildView("LabelItemName")->setEnabled(is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards + getChild<LLUICtrl>("LabelItemName")->setValue(item->getName()); + getChildView("LabelItemDescTitle")->setEnabled(TRUE); + getChildView("LabelItemDesc")->setEnabled(is_modifiable); + getChildView("IconLocked")->setVisible(!is_modifiable); + getChild<LLUICtrl>("LabelItemDesc")->setValue(item->getDescription()); ////////////////// // CREATOR NAME // @@ -283,17 +283,17 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) { std::string name; gCacheName->getFullName(item->getCreatorUUID(), name); - childSetEnabled("BtnCreator",TRUE); - childSetEnabled("LabelCreatorTitle",TRUE); - childSetEnabled("LabelCreatorName",TRUE); - childSetText("LabelCreatorName",name); + getChildView("BtnCreator")->setEnabled(TRUE); + getChildView("LabelCreatorTitle")->setEnabled(TRUE); + getChildView("LabelCreatorName")->setEnabled(TRUE); + getChild<LLUICtrl>("LabelCreatorName")->setValue(name); } else { - childSetEnabled("BtnCreator",FALSE); - childSetEnabled("LabelCreatorTitle",FALSE); - childSetEnabled("LabelCreatorName",FALSE); - childSetText("LabelCreatorName",getString("unknown")); + getChildView("BtnCreator")->setEnabled(FALSE); + getChildView("LabelCreatorTitle")->setEnabled(FALSE); + getChildView("LabelCreatorName")->setEnabled(FALSE); + getChild<LLUICtrl>("LabelCreatorName")->setValue(getString("unknown")); } //////////////// @@ -310,17 +310,17 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) { gCacheName->getFullName(perm.getOwner(), name); } - childSetEnabled("BtnOwner",TRUE); - childSetEnabled("LabelOwnerTitle",TRUE); - childSetEnabled("LabelOwnerName",TRUE); - childSetText("LabelOwnerName",name); + getChildView("BtnOwner")->setEnabled(TRUE); + getChildView("LabelOwnerTitle")->setEnabled(TRUE); + getChildView("LabelOwnerName")->setEnabled(TRUE); + getChild<LLUICtrl>("LabelOwnerName")->setValue(name); } else { - childSetEnabled("BtnOwner",FALSE); - childSetEnabled("LabelOwnerTitle",FALSE); - childSetEnabled("LabelOwnerName",FALSE); - childSetText("LabelOwnerName",getString("public")); + getChildView("BtnOwner")->setEnabled(FALSE); + getChildView("LabelOwnerTitle")->setEnabled(FALSE); + getChildView("LabelOwnerName")->setEnabled(FALSE); + getChild<LLUICtrl>("LabelOwnerName")->setValue(getString("public")); } ////////////////// @@ -330,7 +330,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) time_t time_utc = item->getCreationDate(); if (0 == time_utc) { - childSetText("LabelAcquiredDate",getString("unknown")); + getChild<LLUICtrl>("LabelAcquiredDate")->setValue(getString("unknown")); } else { @@ -338,7 +338,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) LLSD substitution; substitution["datetime"] = (S32) time_utc; LLStringUtil::format (timeStr, substitution); - childSetText ("LabelAcquiredDate", timeStr); + getChild<LLUICtrl>("LabelAcquiredDate")->setValue(timeStr); } /////////////////////// @@ -346,11 +346,11 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) /////////////////////// if(can_agent_manipulate) { - childSetText("OwnerLabel",getString("you_can")); + getChild<LLUICtrl>("OwnerLabel")->setValue(getString("you_can")); } else { - childSetText("OwnerLabel",getString("owner_can")); + getChild<LLUICtrl>("OwnerLabel")->setValue(getString("owner_can")); } U32 base_mask = perm.getMaskBase(); @@ -359,13 +359,13 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) U32 everyone_mask = perm.getMaskEveryone(); U32 next_owner_mask = perm.getMaskNextOwner(); - childSetEnabled("OwnerLabel",TRUE); - childSetEnabled("CheckOwnerModify",FALSE); - childSetValue("CheckOwnerModify",LLSD((BOOL)(owner_mask & PERM_MODIFY))); - childSetEnabled("CheckOwnerCopy",FALSE); - childSetValue("CheckOwnerCopy",LLSD((BOOL)(owner_mask & PERM_COPY))); - childSetEnabled("CheckOwnerTransfer",FALSE); - childSetValue("CheckOwnerTransfer",LLSD((BOOL)(owner_mask & PERM_TRANSFER))); + getChildView("OwnerLabel")->setEnabled(TRUE); + getChildView("CheckOwnerModify")->setEnabled(FALSE); + getChild<LLUICtrl>("CheckOwnerModify")->setValue(LLSD((BOOL)(owner_mask & PERM_MODIFY))); + getChildView("CheckOwnerCopy")->setEnabled(FALSE); + getChild<LLUICtrl>("CheckOwnerCopy")->setValue(LLSD((BOOL)(owner_mask & PERM_COPY))); + getChildView("CheckOwnerTransfer")->setEnabled(FALSE); + getChild<LLUICtrl>("CheckOwnerTransfer")->setValue(LLSD((BOOL)(owner_mask & PERM_TRANSFER))); /////////////////////// // DEBUG PERMISSIONS // @@ -389,39 +389,39 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) perm_string = "B: "; perm_string += mask_to_string(base_mask); - childSetText("BaseMaskDebug",perm_string); - childSetVisible("BaseMaskDebug",TRUE); + getChild<LLUICtrl>("BaseMaskDebug")->setValue(perm_string); + getChildView("BaseMaskDebug")->setVisible(TRUE); perm_string = "O: "; perm_string += mask_to_string(owner_mask); - childSetText("OwnerMaskDebug",perm_string); - childSetVisible("OwnerMaskDebug",TRUE); + getChild<LLUICtrl>("OwnerMaskDebug")->setValue(perm_string); + getChildView("OwnerMaskDebug")->setVisible(TRUE); perm_string = "G"; perm_string += overwrite_group ? "*: " : ": "; perm_string += mask_to_string(group_mask); - childSetText("GroupMaskDebug",perm_string); - childSetVisible("GroupMaskDebug",TRUE); + getChild<LLUICtrl>("GroupMaskDebug")->setValue(perm_string); + getChildView("GroupMaskDebug")->setVisible(TRUE); perm_string = "E"; perm_string += overwrite_everyone ? "*: " : ": "; perm_string += mask_to_string(everyone_mask); - childSetText("EveryoneMaskDebug",perm_string); - childSetVisible("EveryoneMaskDebug",TRUE); + getChild<LLUICtrl>("EveryoneMaskDebug")->setValue(perm_string); + getChildView("EveryoneMaskDebug")->setVisible(TRUE); perm_string = "N"; perm_string += slam_perm ? "*: " : ": "; perm_string += mask_to_string(next_owner_mask); - childSetText("NextMaskDebug",perm_string); - childSetVisible("NextMaskDebug",TRUE); + getChild<LLUICtrl>("NextMaskDebug")->setValue(perm_string); + getChildView("NextMaskDebug")->setVisible(TRUE); } else { - childSetVisible("BaseMaskDebug",FALSE); - childSetVisible("OwnerMaskDebug",FALSE); - childSetVisible("GroupMaskDebug",FALSE); - childSetVisible("EveryoneMaskDebug",FALSE); - childSetVisible("NextMaskDebug",FALSE); + getChildView("BaseMaskDebug")->setVisible(FALSE); + getChildView("OwnerMaskDebug")->setVisible(FALSE); + getChildView("GroupMaskDebug")->setVisible(FALSE); + getChildView("EveryoneMaskDebug")->setVisible(FALSE); + getChildView("NextMaskDebug")->setVisible(FALSE); } ///////////// @@ -431,18 +431,18 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) // Check for ability to change values. if (is_link || cannot_restrict_permissions) { - childSetEnabled("CheckShareWithGroup",FALSE); - childSetEnabled("CheckEveryoneCopy",FALSE); + getChildView("CheckShareWithGroup")->setEnabled(FALSE); + getChildView("CheckEveryoneCopy")->setEnabled(FALSE); } else if (is_obj_modify && can_agent_manipulate) { - childSetEnabled("CheckShareWithGroup",TRUE); - childSetEnabled("CheckEveryoneCopy",(owner_mask & PERM_COPY) && (owner_mask & PERM_TRANSFER)); + getChildView("CheckShareWithGroup")->setEnabled(TRUE); + getChildView("CheckEveryoneCopy")->setEnabled((owner_mask & PERM_COPY) && (owner_mask & PERM_TRANSFER)); } else { - childSetEnabled("CheckShareWithGroup",FALSE); - childSetEnabled("CheckEveryoneCopy",FALSE); + getChildView("CheckShareWithGroup")->setEnabled(FALSE); + getChildView("CheckEveryoneCopy")->setEnabled(FALSE); } // Set values. @@ -452,7 +452,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) if (is_group_copy && is_group_modify && is_group_move) { - childSetValue("CheckShareWithGroup",LLSD((BOOL)TRUE)); + getChild<LLUICtrl>("CheckShareWithGroup")->setValue(LLSD((BOOL)TRUE)); LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup"); if(ctl) @@ -462,7 +462,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) } else if (!is_group_copy && !is_group_modify && !is_group_move) { - childSetValue("CheckShareWithGroup",LLSD((BOOL)FALSE)); + getChild<LLUICtrl>("CheckShareWithGroup")->setValue(LLSD((BOOL)FALSE)); LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup"); if(ctl) { @@ -479,7 +479,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) } } - childSetValue("CheckEveryoneCopy",LLSD((BOOL)(everyone_mask & PERM_COPY))); + getChild<LLUICtrl>("CheckEveryoneCopy")->setValue(LLSD((BOOL)(everyone_mask & PERM_COPY))); /////////////// // SALE INFO // @@ -491,40 +491,40 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) if (is_obj_modify && can_agent_sell && gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE)) { - childSetEnabled("SaleLabel",is_complete); - childSetEnabled("CheckPurchase",is_complete); + getChildView("SaleLabel")->setEnabled(is_complete); + getChildView("CheckPurchase")->setEnabled(is_complete); - childSetEnabled("NextOwnerLabel",TRUE); - childSetEnabled("CheckNextOwnerModify",(base_mask & PERM_MODIFY) && !cannot_restrict_permissions); - childSetEnabled("CheckNextOwnerCopy",(base_mask & PERM_COPY) && !cannot_restrict_permissions); - childSetEnabled("CheckNextOwnerTransfer",(next_owner_mask & PERM_COPY) && !cannot_restrict_permissions); + getChildView("NextOwnerLabel")->setEnabled(TRUE); + getChildView("CheckNextOwnerModify")->setEnabled((base_mask & PERM_MODIFY) && !cannot_restrict_permissions); + getChildView("CheckNextOwnerCopy")->setEnabled((base_mask & PERM_COPY) && !cannot_restrict_permissions); + getChildView("CheckNextOwnerTransfer")->setEnabled((next_owner_mask & PERM_COPY) && !cannot_restrict_permissions); - childSetEnabled("RadioSaleType",is_complete && is_for_sale); - childSetEnabled("TextPrice",is_complete && is_for_sale); - childSetEnabled("Edit Cost",is_complete && is_for_sale); + getChildView("RadioSaleType")->setEnabled(is_complete && is_for_sale); + getChildView("TextPrice")->setEnabled(is_complete && is_for_sale); + getChildView("Edit Cost")->setEnabled(is_complete && is_for_sale); } else { - childSetEnabled("SaleLabel",FALSE); - childSetEnabled("CheckPurchase",FALSE); + getChildView("SaleLabel")->setEnabled(FALSE); + getChildView("CheckPurchase")->setEnabled(FALSE); - childSetEnabled("NextOwnerLabel",FALSE); - childSetEnabled("CheckNextOwnerModify",FALSE); - childSetEnabled("CheckNextOwnerCopy",FALSE); - childSetEnabled("CheckNextOwnerTransfer",FALSE); + getChildView("NextOwnerLabel")->setEnabled(FALSE); + getChildView("CheckNextOwnerModify")->setEnabled(FALSE); + getChildView("CheckNextOwnerCopy")->setEnabled(FALSE); + getChildView("CheckNextOwnerTransfer")->setEnabled(FALSE); - childSetEnabled("RadioSaleType",FALSE); - childSetEnabled("TextPrice",FALSE); - childSetEnabled("Edit Cost",FALSE); + getChildView("RadioSaleType")->setEnabled(FALSE); + getChildView("TextPrice")->setEnabled(FALSE); + getChildView("Edit Cost")->setEnabled(FALSE); } // Set values. - childSetValue("CheckPurchase", is_for_sale); - childSetEnabled("combobox sale copy", is_for_sale); - childSetEnabled("Edit Cost", is_for_sale); - childSetValue("CheckNextOwnerModify",LLSD(BOOL(next_owner_mask & PERM_MODIFY))); - childSetValue("CheckNextOwnerCopy",LLSD(BOOL(next_owner_mask & PERM_COPY))); - childSetValue("CheckNextOwnerTransfer",LLSD(BOOL(next_owner_mask & PERM_TRANSFER))); + getChild<LLUICtrl>("CheckPurchase")->setValue(is_for_sale); + getChildView("combobox sale copy")->setEnabled(is_for_sale); + getChildView("Edit Cost")->setEnabled(is_for_sale); + getChild<LLUICtrl>("CheckNextOwnerModify")->setValue(LLSD(BOOL(next_owner_mask & PERM_MODIFY))); + getChild<LLUICtrl>("CheckNextOwnerCopy")->setValue(LLSD(BOOL(next_owner_mask & PERM_COPY))); + getChild<LLUICtrl>("CheckNextOwnerTransfer")->setValue(LLSD(BOOL(next_owner_mask & PERM_TRANSFER))); LLRadioGroup* radioSaleType = getChild<LLRadioGroup>("RadioSaleType"); if (is_for_sale) @@ -532,12 +532,12 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) radioSaleType->setSelectedIndex((S32)sale_info.getSaleType() - 1); S32 numerical_price; numerical_price = sale_info.getSalePrice(); - childSetText("Edit Cost",llformat("%d",numerical_price)); + getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",numerical_price)); } else { radioSaleType->setSelectedIndex(-1); - childSetText("Edit Cost",llformat("%d",0)); + getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",0)); } } @@ -758,10 +758,10 @@ void LLFloaterProperties::updateSaleInfo() LLSaleInfo sale_info(item->getSaleInfo()); if(!gAgent.allowOperation(PERM_TRANSFER, item->getPermissions(), GP_OBJECT_SET_SALE)) { - childSetValue("CheckPurchase",LLSD((BOOL)FALSE)); + getChild<LLUICtrl>("CheckPurchase")->setValue(LLSD((BOOL)FALSE)); } - if((BOOL)childGetValue("CheckPurchase")) + if((BOOL)getChild<LLUICtrl>("CheckPurchase")->getValue()) { // turn on sale info LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_COPY; diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 8c219cb3fd..8af4955f92 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -332,20 +332,20 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg) // GENERAL PANEL panel = tab->getChild<LLPanel>("General"); - panel->childSetValue("region_text", LLSD(sim_name)); - panel->childSetValue("region_type", LLSD(sim_type)); - panel->childSetValue("version_channel_text", gLastVersionChannel); - - panel->childSetValue("block_terraform_check", (region_flags & REGION_FLAGS_BLOCK_TERRAFORM) ? TRUE : FALSE ); - panel->childSetValue("block_fly_check", (region_flags & REGION_FLAGS_BLOCK_FLY) ? TRUE : FALSE ); - panel->childSetValue("allow_damage_check", (region_flags & REGION_FLAGS_ALLOW_DAMAGE) ? TRUE : FALSE ); - panel->childSetValue("restrict_pushobject", (region_flags & REGION_FLAGS_RESTRICT_PUSHOBJECT) ? TRUE : FALSE ); - panel->childSetValue("allow_land_resell_check", (region_flags & REGION_FLAGS_BLOCK_LAND_RESELL) ? FALSE : TRUE ); - panel->childSetValue("allow_parcel_changes_check", (region_flags & REGION_FLAGS_ALLOW_PARCEL_CHANGES) ? TRUE : FALSE ); - panel->childSetValue("block_parcel_search_check", (region_flags & REGION_FLAGS_BLOCK_PARCEL_SEARCH) ? TRUE : FALSE ); - panel->childSetValue("agent_limit_spin", LLSD((F32)agent_limit) ); - panel->childSetValue("object_bonus_spin", LLSD(object_bonus_factor) ); - panel->childSetValue("access_combo", LLSD(sim_access) ); + panel->getChild<LLUICtrl>("region_text")->setValue(LLSD(sim_name)); + panel->getChild<LLUICtrl>("region_type")->setValue(LLSD(sim_type)); + panel->getChild<LLUICtrl>("version_channel_text")->setValue(gLastVersionChannel); + + panel->getChild<LLUICtrl>("block_terraform_check")->setValue((region_flags & REGION_FLAGS_BLOCK_TERRAFORM) ? TRUE : FALSE ); + panel->getChild<LLUICtrl>("block_fly_check")->setValue((region_flags & REGION_FLAGS_BLOCK_FLY) ? TRUE : FALSE ); + panel->getChild<LLUICtrl>("allow_damage_check")->setValue((region_flags & REGION_FLAGS_ALLOW_DAMAGE) ? TRUE : FALSE ); + panel->getChild<LLUICtrl>("restrict_pushobject")->setValue((region_flags & REGION_FLAGS_RESTRICT_PUSHOBJECT) ? TRUE : FALSE ); + panel->getChild<LLUICtrl>("allow_land_resell_check")->setValue((region_flags & REGION_FLAGS_BLOCK_LAND_RESELL) ? FALSE : TRUE ); + panel->getChild<LLUICtrl>("allow_parcel_changes_check")->setValue((region_flags & REGION_FLAGS_ALLOW_PARCEL_CHANGES) ? TRUE : FALSE ); + panel->getChild<LLUICtrl>("block_parcel_search_check")->setValue((region_flags & REGION_FLAGS_BLOCK_PARCEL_SEARCH) ? TRUE : FALSE ); + panel->getChild<LLUICtrl>("agent_limit_spin")->setValue(LLSD((F32)agent_limit) ); + panel->getChild<LLUICtrl>("object_bonus_spin")->setValue(LLSD(object_bonus_factor) ); + panel->getChild<LLUICtrl>("access_combo")->setValue(LLSD(sim_access) ); // detect teen grid for maturity @@ -353,32 +353,32 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg) U32 parent_estate_id; msg->getU32("RegionInfo", "ParentEstateID", parent_estate_id); BOOL teen_grid = (parent_estate_id == 5); // *TODO add field to estate table and test that - panel->childSetEnabled("access_combo", gAgent.isGodlike() || (region && region->canManageEstate() && !teen_grid)); + panel->getChildView("access_combo")->setEnabled(gAgent.isGodlike() || (region && region->canManageEstate() && !teen_grid)); panel->setCtrlsEnabled(allow_modify); // DEBUG PANEL panel = tab->getChild<LLPanel>("Debug"); - panel->childSetValue("region_text", LLSD(sim_name) ); - panel->childSetValue("disable_scripts_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_SCRIPTS)) ); - panel->childSetValue("disable_collisions_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_COLLISIONS)) ); - panel->childSetValue("disable_physics_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_PHYSICS)) ); + panel->getChild<LLUICtrl>("region_text")->setValue(LLSD(sim_name) ); + panel->getChild<LLUICtrl>("disable_scripts_check")->setValue(LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_SCRIPTS)) ); + panel->getChild<LLUICtrl>("disable_collisions_check")->setValue(LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_COLLISIONS)) ); + panel->getChild<LLUICtrl>("disable_physics_check")->setValue(LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_PHYSICS)) ); panel->setCtrlsEnabled(allow_modify); // TERRAIN PANEL panel = tab->getChild<LLPanel>("Terrain"); - panel->childSetValue("region_text", LLSD(sim_name)); - panel->childSetValue("water_height_spin", LLSD(water_height)); - panel->childSetValue("terrain_raise_spin", LLSD(terrain_raise_limit)); - panel->childSetValue("terrain_lower_spin", LLSD(terrain_lower_limit)); - panel->childSetValue("use_estate_sun_check", LLSD(use_estate_sun)); + panel->getChild<LLUICtrl>("region_text")->setValue(LLSD(sim_name)); + panel->getChild<LLUICtrl>("water_height_spin")->setValue(LLSD(water_height)); + panel->getChild<LLUICtrl>("terrain_raise_spin")->setValue(LLSD(terrain_raise_limit)); + panel->getChild<LLUICtrl>("terrain_lower_spin")->setValue(LLSD(terrain_lower_limit)); + panel->getChild<LLUICtrl>("use_estate_sun_check")->setValue(LLSD(use_estate_sun)); - panel->childSetValue("fixed_sun_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SUN_FIXED))); - panel->childSetEnabled("fixed_sun_check", allow_modify && !use_estate_sun); - panel->childSetValue("sun_hour_slider", LLSD(sun_hour)); - panel->childSetEnabled("sun_hour_slider", allow_modify && !use_estate_sun); + panel->getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD((BOOL)(region_flags & REGION_FLAGS_SUN_FIXED))); + panel->getChildView("fixed_sun_check")->setEnabled(allow_modify && !use_estate_sun); + panel->getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(sun_hour)); + panel->getChildView("sun_hour_slider")->setEnabled(allow_modify && !use_estate_sun); panel->setCtrlsEnabled(allow_modify); floater->refreshFromRegion( gAgent.getRegion() ); @@ -485,7 +485,7 @@ void LLPanelRegionInfo::onChangeText(LLLineEditor* caller, void* user_data) BOOL LLPanelRegionInfo::postBuild() { getChild<LLUICtrl>("apply_btn")->setCommitCallback(boost::bind(&LLPanelRegionInfo::onBtnSet, this)); - childDisable("apply_btn"); + getChildView("apply_btn")->setEnabled(FALSE); refresh(); return TRUE; } @@ -537,12 +537,12 @@ void LLPanelRegionInfo::sendEstateOwnerMessage( void LLPanelRegionInfo::enableButton(const std::string& btn_name, BOOL enable) { - childSetEnabled(btn_name, enable); + getChildView(btn_name)->setEnabled(enable); } void LLPanelRegionInfo::disableButton(const std::string& btn_name) { - childDisable(btn_name); + getChildView(btn_name)->setEnabled(FALSE); } void LLPanelRegionInfo::initCtrl(const std::string& name) @@ -563,14 +563,14 @@ bool LLPanelRegionGeneralInfo::refreshFromRegion(LLViewerRegion* region) { BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate()); setCtrlsEnabled(allow_modify); - childDisable("apply_btn"); - childSetEnabled("access_text", allow_modify); - // childSetEnabled("access_combo", allow_modify); + getChildView("apply_btn")->setEnabled(FALSE); + getChildView("access_text")->setEnabled(allow_modify); + // getChildView("access_combo")->setEnabled(allow_modify); // now set in processRegionInfo for teen grid detection - childSetEnabled("kick_btn", allow_modify); - childSetEnabled("kick_all_btn", allow_modify); - childSetEnabled("im_btn", allow_modify); - childSetEnabled("manage_telehub_btn", allow_modify); + getChildView("kick_btn")->setEnabled(allow_modify); + getChildView("kick_all_btn")->setEnabled(allow_modify); + getChildView("im_btn")->setEnabled(allow_modify); + getChildView("manage_telehub_btn")->setEnabled(allow_modify); // Data gets filled in by processRegionInfo @@ -719,16 +719,16 @@ BOOL LLPanelRegionGeneralInfo::sendUpdate() std::string url = gAgent.getRegion()->getCapability("DispatchRegionInfo"); if (!url.empty()) { - body["block_terraform"] = childGetValue("block_terraform_check"); - body["block_fly"] = childGetValue("block_fly_check"); - body["allow_damage"] = childGetValue("allow_damage_check"); - body["allow_land_resell"] = childGetValue("allow_land_resell_check"); - body["agent_limit"] = childGetValue("agent_limit_spin"); - body["prim_bonus"] = childGetValue("object_bonus_spin"); - body["sim_access"] = childGetValue("access_combo"); - body["restrict_pushobject"] = childGetValue("restrict_pushobject"); - body["allow_parcel_changes"] = childGetValue("allow_parcel_changes_check"); - body["block_parcel_search"] = childGetValue("block_parcel_search_check"); + body["block_terraform"] = getChild<LLUICtrl>("block_terraform_check")->getValue(); + body["block_fly"] = getChild<LLUICtrl>("block_fly_check")->getValue(); + body["allow_damage"] = getChild<LLUICtrl>("allow_damage_check")->getValue(); + body["allow_land_resell"] = getChild<LLUICtrl>("allow_land_resell_check")->getValue(); + body["agent_limit"] = getChild<LLUICtrl>("agent_limit_spin")->getValue(); + body["prim_bonus"] = getChild<LLUICtrl>("object_bonus_spin")->getValue(); + body["sim_access"] = getChild<LLUICtrl>("access_combo")->getValue(); + body["restrict_pushobject"] = getChild<LLUICtrl>("restrict_pushobject")->getValue(); + body["allow_parcel_changes"] = getChild<LLUICtrl>("allow_parcel_changes_check")->getValue(); + body["block_parcel_search"] = getChild<LLUICtrl>("block_parcel_search_check")->getValue(); LLHTTPClient::post(url, body, new LLHTTPClient::Responder()); } @@ -737,33 +737,33 @@ BOOL LLPanelRegionGeneralInfo::sendUpdate() strings_t strings; std::string buffer; - buffer = llformat("%s", (childGetValue("block_terraform_check").asBoolean() ? "Y" : "N")); + buffer = llformat("%s", (getChild<LLUICtrl>("block_terraform_check")->getValue().asBoolean() ? "Y" : "N")); strings.push_back(strings_t::value_type(buffer)); - buffer = llformat("%s", (childGetValue("block_fly_check").asBoolean() ? "Y" : "N")); + buffer = llformat("%s", (getChild<LLUICtrl>("block_fly_check")->getValue().asBoolean() ? "Y" : "N")); strings.push_back(strings_t::value_type(buffer)); - buffer = llformat("%s", (childGetValue("allow_damage_check").asBoolean() ? "Y" : "N")); + buffer = llformat("%s", (getChild<LLUICtrl>("allow_damage_check")->getValue().asBoolean() ? "Y" : "N")); strings.push_back(strings_t::value_type(buffer)); - buffer = llformat("%s", (childGetValue("allow_land_resell_check").asBoolean() ? "Y" : "N")); + buffer = llformat("%s", (getChild<LLUICtrl>("allow_land_resell_check")->getValue().asBoolean() ? "Y" : "N")); strings.push_back(strings_t::value_type(buffer)); - F32 value = (F32)childGetValue("agent_limit_spin").asReal(); + F32 value = (F32)getChild<LLUICtrl>("agent_limit_spin")->getValue().asReal(); buffer = llformat("%f", value); strings.push_back(strings_t::value_type(buffer)); - value = (F32)childGetValue("object_bonus_spin").asReal(); + value = (F32)getChild<LLUICtrl>("object_bonus_spin")->getValue().asReal(); buffer = llformat("%f", value); strings.push_back(strings_t::value_type(buffer)); - buffer = llformat("%d", childGetValue("access_combo").asInteger()); + buffer = llformat("%d", getChild<LLUICtrl>("access_combo")->getValue().asInteger()); strings.push_back(strings_t::value_type(buffer)); - buffer = llformat("%s", (childGetValue("restrict_pushobject").asBoolean() ? "Y" : "N")); + buffer = llformat("%s", (getChild<LLUICtrl>("restrict_pushobject")->getValue().asBoolean() ? "Y" : "N")); strings.push_back(strings_t::value_type(buffer)); - buffer = llformat("%s", (childGetValue("allow_parcel_changes_check").asBoolean() ? "Y" : "N")); + buffer = llformat("%s", (getChild<LLUICtrl>("allow_parcel_changes_check")->getValue().asBoolean() ? "Y" : "N")); strings.push_back(strings_t::value_type(buffer)); LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); @@ -772,7 +772,7 @@ BOOL LLPanelRegionGeneralInfo::sendUpdate() // if we changed access levels, tell user about it LLViewerRegion* region = gAgent.getRegion(); - if (region && (childGetValue("access_combo").asInteger() != region->getSimAccess()) ) + if (region && (getChild<LLUICtrl>("access_combo")->getValue().asInteger() != region->getSimAccess()) ) { LLNotificationsUtil::add("RegionMaturityChange"); } @@ -805,18 +805,18 @@ bool LLPanelRegionDebugInfo::refreshFromRegion(LLViewerRegion* region) { BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate()); setCtrlsEnabled(allow_modify); - childDisable("apply_btn"); - childDisable("target_avatar_name"); + getChildView("apply_btn")->setEnabled(FALSE); + getChildView("target_avatar_name")->setEnabled(FALSE); - childSetEnabled("choose_avatar_btn", allow_modify); - childSetEnabled("return_scripts", allow_modify && !mTargetAvatar.isNull()); - childSetEnabled("return_other_land", allow_modify && !mTargetAvatar.isNull()); - childSetEnabled("return_estate_wide", allow_modify && !mTargetAvatar.isNull()); - childSetEnabled("return_btn", allow_modify && !mTargetAvatar.isNull()); - childSetEnabled("top_colliders_btn", allow_modify); - childSetEnabled("top_scripts_btn", allow_modify); - childSetEnabled("restart_btn", allow_modify); - childSetEnabled("cancel_restart_btn", allow_modify); + getChildView("choose_avatar_btn")->setEnabled(allow_modify); + getChildView("return_scripts")->setEnabled(allow_modify && !mTargetAvatar.isNull()); + getChildView("return_other_land")->setEnabled(allow_modify && !mTargetAvatar.isNull()); + getChildView("return_estate_wide")->setEnabled(allow_modify && !mTargetAvatar.isNull()); + getChildView("return_btn")->setEnabled(allow_modify && !mTargetAvatar.isNull()); + getChildView("top_colliders_btn")->setEnabled(allow_modify); + getChildView("top_scripts_btn")->setEnabled(allow_modify); + getChildView("restart_btn")->setEnabled(allow_modify); + getChildView("cancel_restart_btn")->setEnabled(allow_modify); return LLPanelRegionInfo::refreshFromRegion(region); } @@ -828,13 +828,13 @@ BOOL LLPanelRegionDebugInfo::sendUpdate() strings_t strings; std::string buffer; - buffer = llformat("%s", (childGetValue("disable_scripts_check").asBoolean() ? "Y" : "N")); + buffer = llformat("%s", (getChild<LLUICtrl>("disable_scripts_check")->getValue().asBoolean() ? "Y" : "N")); strings.push_back(buffer); - buffer = llformat("%s", (childGetValue("disable_collisions_check").asBoolean() ? "Y" : "N")); + buffer = llformat("%s", (getChild<LLUICtrl>("disable_collisions_check")->getValue().asBoolean() ? "Y" : "N")); strings.push_back(buffer); - buffer = llformat("%s", (childGetValue("disable_physics_check").asBoolean() ? "Y" : "N")); + buffer = llformat("%s", (getChild<LLUICtrl>("disable_physics_check")->getValue().asBoolean() ? "Y" : "N")); strings.push_back(buffer); LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); @@ -852,7 +852,7 @@ void LLPanelRegionDebugInfo::callbackAvatarID(const std::vector<std::string>& na { if (ids.empty() || names.empty()) return; mTargetAvatar = ids[0]; - childSetValue("target_avatar_name", LLSD(names[0])); + getChild<LLUICtrl>("target_avatar_name")->setValue(LLSD(names[0])); refreshFromRegion( gAgent.getRegion() ); } @@ -863,23 +863,23 @@ void LLPanelRegionDebugInfo::onClickReturn(void* data) if (panelp->mTargetAvatar.isNull()) return; LLSD args; - args["USER_NAME"] = panelp->childGetValue("target_avatar_name").asString(); + args["USER_NAME"] = panelp->getChild<LLUICtrl>("target_avatar_name")->getValue().asString(); LLSD payload; payload["avatar_id"] = panelp->mTargetAvatar; U32 flags = SWD_ALWAYS_RETURN_OBJECTS; - if (panelp->childGetValue("return_scripts").asBoolean()) + if (panelp->getChild<LLUICtrl>("return_scripts")->getValue().asBoolean()) { flags |= SWD_SCRIPTED_ONLY; } - if (panelp->childGetValue("return_other_land").asBoolean()) + if (panelp->getChild<LLUICtrl>("return_other_land")->getValue().asBoolean()) { flags |= SWD_OTHERS_LAND_ONLY; } payload["flags"] = int(flags); - payload["return_estate_wide"] = panelp->childGetValue("return_estate_wide").asBoolean(); + payload["return_estate_wide"] = panelp->getChild<LLUICtrl>("return_estate_wide")->getValue().asBoolean(); LLNotificationsUtil::add("EstateObjectReturn", args, payload, boost::bind(&LLPanelRegionDebugInfo::callbackReturn, panelp, _1, _2)); } @@ -985,15 +985,15 @@ bool LLPanelRegionTextureInfo::refreshFromRegion(LLViewerRegion* region) { BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate()); setCtrlsEnabled(allow_modify); - childDisable("apply_btn"); + getChildView("apply_btn")->setEnabled(FALSE); if (region) { - childSetValue("region_text", LLSD(region->getName())); + getChild<LLUICtrl>("region_text")->setValue(LLSD(region->getName())); } else { - childSetValue("region_text", LLSD("")); + getChild<LLUICtrl>("region_text")->setValue(LLSD("")); } if (!region) return LLPanelRegionInfo::refreshFromRegion(region); @@ -1017,9 +1017,9 @@ bool LLPanelRegionTextureInfo::refreshFromRegion(LLViewerRegion* region) for(S32 i = 0; i < CORNER_COUNT; ++i) { buffer = llformat("height_start_spin_%d", i); - childSetValue(buffer, LLSD(compp->getStartHeight(i))); + getChild<LLUICtrl>(buffer)->setValue(LLSD(compp->getStartHeight(i))); buffer = llformat("height_range_spin_%d", i); - childSetValue(buffer, LLSD(compp->getHeightRange(i))); + getChild<LLUICtrl>(buffer)->setValue(LLSD(compp->getHeightRange(i))); } // Call the parent for common book-keeping @@ -1088,7 +1088,7 @@ BOOL LLPanelRegionTextureInfo::sendUpdate() { buffer = llformat("height_start_spin_%d", i); std::string buffer2 = llformat("height_range_spin_%d", i); - std::string buffer3 = llformat("%d %f %f", i, (F32)childGetValue(buffer).asReal(), (F32)childGetValue(buffer2).asReal()); + std::string buffer3 = llformat("%d %f %f", i, (F32)getChild<LLUICtrl>(buffer)->getValue().asReal(), (F32)getChild<LLUICtrl>(buffer2)->getValue().asReal()); strings.push_back(buffer3); } sendEstateOwnerMessage(msg, "textureheights", invoice, strings); @@ -1181,11 +1181,11 @@ bool LLPanelRegionTerrainInfo::refreshFromRegion(LLViewerRegion* region) BOOL owner_or_god_or_manager = owner_or_god || (region && region->isEstateManager()); setCtrlsEnabled(owner_or_god_or_manager); - childDisable("apply_btn"); + getChildView("apply_btn")->setEnabled(FALSE); - childSetEnabled("download_raw_btn", owner_or_god); - childSetEnabled("upload_raw_btn", owner_or_god); - childSetEnabled("bake_terrain_btn", owner_or_god); + getChildView("download_raw_btn")->setEnabled(owner_or_god); + getChildView("upload_raw_btn")->setEnabled(owner_or_god); + getChildView("bake_terrain_btn")->setEnabled(owner_or_god); return LLPanelRegionInfo::refreshFromRegion(region); } @@ -1198,17 +1198,17 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate() strings_t strings; LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); - buffer = llformat("%f", (F32)childGetValue("water_height_spin").asReal()); + buffer = llformat("%f", (F32)getChild<LLUICtrl>("water_height_spin")->getValue().asReal()); strings.push_back(buffer); - buffer = llformat("%f", (F32)childGetValue("terrain_raise_spin").asReal()); + buffer = llformat("%f", (F32)getChild<LLUICtrl>("terrain_raise_spin")->getValue().asReal()); strings.push_back(buffer); - buffer = llformat("%f", (F32)childGetValue("terrain_lower_spin").asReal()); + buffer = llformat("%f", (F32)getChild<LLUICtrl>("terrain_lower_spin")->getValue().asReal()); strings.push_back(buffer); - buffer = llformat("%s", (childGetValue("use_estate_sun_check").asBoolean() ? "Y" : "N")); + buffer = llformat("%s", (getChild<LLUICtrl>("use_estate_sun_check")->getValue().asBoolean() ? "Y" : "N")); strings.push_back(buffer); - buffer = llformat("%s", (childGetValue("fixed_sun_check").asBoolean() ? "Y" : "N")); + buffer = llformat("%s", (getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean() ? "Y" : "N")); strings.push_back(buffer); - buffer = llformat("%f", (F32)childGetValue("sun_hour_slider").asReal() ); + buffer = llformat("%f", (F32)getChild<LLUICtrl>("sun_hour_slider")->getValue().asReal() ); strings.push_back(buffer); // Grab estate information in case the user decided to set the @@ -1247,27 +1247,27 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate() void LLPanelRegionTerrainInfo::onChangeUseEstateTime() { - BOOL use_estate_sun = childGetValue("use_estate_sun_check").asBoolean(); - childSetEnabled("fixed_sun_check", !use_estate_sun); - childSetEnabled("sun_hour_slider", !use_estate_sun); + BOOL use_estate_sun = getChild<LLUICtrl>("use_estate_sun_check")->getValue().asBoolean(); + getChildView("fixed_sun_check")->setEnabled(!use_estate_sun); + getChildView("sun_hour_slider")->setEnabled(!use_estate_sun); if (use_estate_sun) { - childSetValue("fixed_sun_check", LLSD(FALSE)); - childSetValue("sun_hour_slider", LLSD(0.f)); + getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD(FALSE)); + getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(0.f)); } - childEnable("apply_btn"); + getChildView("apply_btn")->setEnabled(TRUE); } void LLPanelRegionTerrainInfo::onChangeFixedSun() { // Just enable the apply button. We let the sun-hour slider be enabled // for both fixed-sun and non-fixed-sun. JC - childEnable("apply_btn"); + getChildView("apply_btn")->setEnabled(TRUE); } void LLPanelRegionTerrainInfo::onChangeSunHour() { - childEnable("apply_btn"); + getChildView("apply_btn")->setEnabled(TRUE); } // static @@ -1363,19 +1363,19 @@ void LLPanelEstateInfo::initDispatch(LLDispatcher& dispatch) // Disables the sun-hour slider and the use fixed time check if the use global time is check void LLPanelEstateInfo::onChangeUseGlobalTime() { - bool enabled = !childGetValue("use_global_time_check").asBoolean(); - childSetEnabled("sun_hour_slider", enabled); - childSetEnabled("fixed_sun_check", enabled); - childSetValue("fixed_sun_check", LLSD(FALSE)); + bool enabled = !getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean(); + getChildView("sun_hour_slider")->setEnabled(enabled); + getChildView("fixed_sun_check")->setEnabled(enabled); + getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD(FALSE)); enableButton("apply_btn"); } // Enables the sun-hour slider if the fixed-sun checkbox is set void LLPanelEstateInfo::onChangeFixedSun() { - bool enabled = !childGetValue("fixed_sun_check").asBoolean(); - childSetEnabled("use_global_time_check", enabled); - childSetValue("use_global_time_check", LLSD(FALSE)); + bool enabled = !getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean(); + getChildView("use_global_time_check")->setEnabled(enabled); + getChild<LLUICtrl>("use_global_time_check")->setValue(LLSD(FALSE)); enableButton("apply_btn"); } @@ -1385,21 +1385,19 @@ void LLPanelEstateInfo::onChangeFixedSun() //--------------------------------------------------------------------------- // Add/Remove estate access button callbacks //--------------------------------------------------------------------------- -void LLPanelEstateInfo::onClickEditSky(void* user_data) +void LLPanelEstateInfo::onClickEditSky() { LLFloaterReg::showInstance("env_windlight"); } -void LLPanelEstateInfo::onClickEditDayCycle(void* user_data) +void LLPanelEstateInfo::onClickEditDayCycle() { LLFloaterReg::showInstance("env_day_cycle"); } -// static -void LLPanelEstateInfo::onClickAddAllowedAgent(void* user_data) +void LLPanelEstateInfo::onClickAddAllowedAgent() { - LLPanelEstateInfo* self = (LLPanelEstateInfo*)user_data; - LLCtrlListInterface *list = self->childGetListInterface("allowed_avatar_name_list"); + LLCtrlListInterface *list = childGetListInterface("allowed_avatar_name_list"); if (!list) return; if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS) { @@ -1413,8 +1411,7 @@ void LLPanelEstateInfo::onClickAddAllowedAgent(void* user_data) accessAddCore(ESTATE_ACCESS_ALLOWED_AGENT_ADD, "EstateAllowedAgentAdd"); } -// static -void LLPanelEstateInfo::onClickRemoveAllowedAgent(void* user_data) +void LLPanelEstateInfo::onClickRemoveAllowedAgent() { accessRemoveCore(ESTATE_ACCESS_ALLOWED_AGENT_REMOVE, "EstateAllowedAgentRemove", "allowed_avatar_name_list"); } @@ -1466,17 +1463,14 @@ bool LLPanelEstateInfo::addAllowedGroup(const LLSD& notification, const LLSD& re return false; } -// static -void LLPanelEstateInfo::onClickRemoveAllowedGroup(void* user_data) +void LLPanelEstateInfo::onClickRemoveAllowedGroup() { accessRemoveCore(ESTATE_ACCESS_ALLOWED_GROUP_REMOVE, "EstateAllowedGroupRemove", "allowed_group_name_list"); } -// static -void LLPanelEstateInfo::onClickAddBannedAgent(void* user_data) +void LLPanelEstateInfo::onClickAddBannedAgent() { - LLPanelEstateInfo* self = (LLPanelEstateInfo*)user_data; - LLCtrlListInterface *list = self->childGetListInterface("banned_avatar_name_list"); + LLCtrlListInterface *list = childGetListInterface("banned_avatar_name_list"); if (!list) return; if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS) { @@ -1488,17 +1482,15 @@ void LLPanelEstateInfo::onClickAddBannedAgent(void* user_data) accessAddCore(ESTATE_ACCESS_BANNED_AGENT_ADD, "EstateBannedAgentAdd"); } -// static -void LLPanelEstateInfo::onClickRemoveBannedAgent(void* user_data) +void LLPanelEstateInfo::onClickRemoveBannedAgent() { accessRemoveCore(ESTATE_ACCESS_BANNED_AGENT_REMOVE, "EstateBannedAgentRemove", "banned_avatar_name_list"); } // static -void LLPanelEstateInfo::onClickAddEstateManager(void* user_data) +void LLPanelEstateInfo::onClickAddEstateManager() { - LLPanelEstateInfo* self = (LLPanelEstateInfo*)user_data; - LLCtrlListInterface *list = self->childGetListInterface("estate_manager_name_list"); + LLCtrlListInterface *list = childGetListInterface("estate_manager_name_list"); if (!list) return; if (list->getItemCount() >= ESTATE_MAX_MANAGERS) { // Tell user they can't add more managers @@ -1513,7 +1505,7 @@ void LLPanelEstateInfo::onClickAddEstateManager(void* user_data) } // static -void LLPanelEstateInfo::onClickRemoveEstateManager(void* user_data) +void LLPanelEstateInfo::onClickRemoveEstateManager() { accessRemoveCore(ESTATE_ACCESS_MANAGER_REMOVE, "EstateManagerRemove", "estate_manager_name_list"); } @@ -1966,20 +1958,20 @@ void LLPanelEstateInfo::updateControls(LLViewerRegion* region) BOOL manager = (region && region->isEstateManager()); setCtrlsEnabled(god || owner || manager); - childDisable("apply_btn"); - childSetEnabled("add_allowed_avatar_btn", god || owner || manager); - childSetEnabled("remove_allowed_avatar_btn", god || owner || manager); - childSetEnabled("add_allowed_group_btn", god || owner || manager); - childSetEnabled("remove_allowed_group_btn", god || owner || manager); - childSetEnabled("add_banned_avatar_btn", god || owner || manager); - childSetEnabled("remove_banned_avatar_btn", god || owner || manager); - childSetEnabled("message_estate_btn", god || owner || manager); - childSetEnabled("kick_user_from_estate_btn", god || owner || manager); + getChildView("apply_btn")->setEnabled(FALSE); + getChildView("add_allowed_avatar_btn")->setEnabled(god || owner || manager); + getChildView("remove_allowed_avatar_btn")->setEnabled(god || owner || manager); + getChildView("add_allowed_group_btn")->setEnabled(god || owner || manager); + getChildView("remove_allowed_group_btn")->setEnabled(god || owner || manager); + getChildView("add_banned_avatar_btn")->setEnabled(god || owner || manager); + getChildView("remove_banned_avatar_btn")->setEnabled(god || owner || manager); + getChildView("message_estate_btn")->setEnabled(god || owner || manager); + getChildView("kick_user_from_estate_btn")->setEnabled(god || owner || manager); // estate managers can't add estate managers - childSetEnabled("add_estate_manager_btn", god || owner); - childSetEnabled("remove_estate_manager_btn", god || owner); - childSetEnabled("estate_manager_name_list", god || owner); + getChildView("add_estate_manager_btn")->setEnabled(god || owner); + getChildView("remove_estate_manager_btn")->setEnabled(god || owner); + getChildView("estate_manager_name_list")->setEnabled(god || owner); } bool LLPanelEstateInfo::refreshFromRegion(LLViewerRegion* region) @@ -2054,8 +2046,8 @@ BOOL LLPanelEstateInfo::postBuild() avatar_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS); } - childSetAction("add_allowed_avatar_btn", onClickAddAllowedAgent, this); - childSetAction("remove_allowed_avatar_btn", onClickRemoveAllowedAgent, this); + childSetAction("add_allowed_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickAddAllowedAgent, this)); + childSetAction("remove_allowed_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveAllowedAgent, this)); getChild<LLUICtrl>("allowed_group_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1)); LLNameListCtrl* group_name_list = getChild<LLNameListCtrl>("allowed_group_name_list"); @@ -2066,7 +2058,7 @@ BOOL LLPanelEstateInfo::postBuild() } getChild<LLUICtrl>("add_allowed_group_btn")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onClickAddAllowedGroup, this)); - childSetAction("remove_allowed_group_btn", onClickRemoveAllowedGroup, this); + childSetAction("remove_allowed_group_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveAllowedGroup, this)); getChild<LLUICtrl>("banned_avatar_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1)); LLNameListCtrl* banned_name_list = getChild<LLNameListCtrl>("banned_avatar_name_list"); @@ -2076,8 +2068,8 @@ BOOL LLPanelEstateInfo::postBuild() banned_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS); } - childSetAction("add_banned_avatar_btn", onClickAddBannedAgent, this); - childSetAction("remove_banned_avatar_btn", onClickRemoveBannedAgent, this); + childSetAction("add_banned_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickAddBannedAgent, this)); + childSetAction("remove_banned_avatar_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveBannedAgent, this)); getChild<LLUICtrl>("estate_manager_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1)); LLNameListCtrl* manager_name_list = getChild<LLNameListCtrl>("estate_manager_name_list"); @@ -2087,28 +2079,28 @@ BOOL LLPanelEstateInfo::postBuild() manager_name_list->setMaxItemCount(ESTATE_MAX_MANAGERS * 4); // Allow extras for dupe issue } - childSetAction("add_estate_manager_btn", onClickAddEstateManager, this); - childSetAction("remove_estate_manager_btn", onClickRemoveEstateManager, this); - childSetAction("message_estate_btn", onClickMessageEstate, this); + childSetAction("add_estate_manager_btn", boost::bind(&LLPanelEstateInfo::onClickAddEstateManager, this)); + childSetAction("remove_estate_manager_btn", boost::bind(&LLPanelEstateInfo::onClickRemoveEstateManager, this)); + childSetAction("message_estate_btn", boost::bind(&LLPanelEstateInfo::onClickMessageEstate, this)); childSetAction("kick_user_from_estate_btn", boost::bind(&LLPanelEstateInfo::onClickKickUser, this)); - childSetAction("WLEditSky", onClickEditSky, this); - childSetAction("WLEditDayCycle", onClickEditDayCycle, this); + childSetAction("WLEditSky", boost::bind(&LLPanelEstateInfo::onClickEditSky, this)); + childSetAction("WLEditDayCycle", boost::bind(&LLPanelEstateInfo::onClickEditDayCycle, this)); return LLPanelRegionInfo::postBuild(); } void LLPanelEstateInfo::refresh() { - bool public_access = childGetValue("externally_visible_check").asBoolean(); - childSetEnabled("Only Allow", public_access); - childSetEnabled("limit_payment", public_access); - childSetEnabled("limit_age_verified", public_access); + bool public_access = getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean(); + getChildView("Only Allow")->setEnabled(public_access); + getChildView("limit_payment")->setEnabled(public_access); + getChildView("limit_age_verified")->setEnabled(public_access); // if this is set to false, then the limit fields are meaningless and should be turned off if (public_access == false) { - childSetValue("limit_payment", false); - childSetValue("limit_age_verified", false); + getChild<LLUICtrl>("limit_payment")->setValue(false); + getChild<LLUICtrl>("limit_age_verified")->setValue(false); } } @@ -2231,19 +2223,19 @@ bool LLPanelEstateInfo::commitEstateInfoCaps() LLSD body; body["estate_name"] = getEstateName(); - body["is_externally_visible"] = childGetValue("externally_visible_check").asBoolean(); - body["allow_direct_teleport"] = childGetValue("allow_direct_teleport").asBoolean(); - body["is_sun_fixed" ] = childGetValue("fixed_sun_check").asBoolean(); - body["deny_anonymous" ] = childGetValue("limit_payment").asBoolean(); - body["deny_age_unverified" ] = childGetValue("limit_age_verified").asBoolean(); - body["allow_voice_chat" ] = childGetValue("voice_chat_check").asBoolean(); + body["is_externally_visible"] = getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean(); + body["allow_direct_teleport"] = getChild<LLUICtrl>("allow_direct_teleport")->getValue().asBoolean(); + body["is_sun_fixed" ] = getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean(); + body["deny_anonymous" ] = getChild<LLUICtrl>("limit_payment")->getValue().asBoolean(); + body["deny_age_unverified" ] = getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean(); + body["allow_voice_chat" ] = getChild<LLUICtrl>("voice_chat_check")->getValue().asBoolean(); body["invoice" ] = LLFloaterRegionInfo::getLastInvoice(); // block fly is in estate database but not in estate UI, so we're not supporting it - //body["block_fly" ] = childGetValue("").asBoolean(); + //body["block_fly" ] = getChild<LLUICtrl>("")->getValue().asBoolean(); F32 sun_hour = getSunHour(); - if (childGetValue("use_global_time_check").asBoolean()) + if (getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean()) { sun_hour = 0.f; // 0 = global time } @@ -2283,7 +2275,7 @@ void LLPanelEstateInfo::commitEstateInfoDataserver() msg->addString("Parameter", buffer); F32 sun_hour = getSunHour(); - if (childGetValue("use_global_time_check").asBoolean()) + if (getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean()) { sun_hour = 0.f; // 0 = global time } @@ -2297,14 +2289,13 @@ void LLPanelEstateInfo::commitEstateInfoDataserver() void LLPanelEstateInfo::setEstateFlags(U32 flags) { - childSetValue("externally_visible_check", LLSD(flags & REGION_FLAGS_EXTERNALLY_VISIBLE ? TRUE : FALSE) ); - childSetValue("fixed_sun_check", LLSD(flags & REGION_FLAGS_SUN_FIXED ? TRUE : FALSE) ); - childSetValue( - "voice_chat_check", + getChild<LLUICtrl>("externally_visible_check")->setValue(LLSD(flags & REGION_FLAGS_EXTERNALLY_VISIBLE ? TRUE : FALSE) ); + getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD(flags & REGION_FLAGS_SUN_FIXED ? TRUE : FALSE) ); + getChild<LLUICtrl>("voice_chat_check")->setValue( LLSD(flags & REGION_FLAGS_ALLOW_VOICE ? TRUE : FALSE)); - childSetValue("allow_direct_teleport", LLSD(flags & REGION_FLAGS_ALLOW_DIRECT_TELEPORT ? TRUE : FALSE) ); - childSetValue("limit_payment", LLSD(flags & REGION_FLAGS_DENY_ANONYMOUS ? TRUE : FALSE) ); - childSetValue("limit_age_verified", LLSD(flags & REGION_FLAGS_DENY_AGEUNVERIFIED ? TRUE : FALSE) ); + getChild<LLUICtrl>("allow_direct_teleport")->setValue(LLSD(flags & REGION_FLAGS_ALLOW_DIRECT_TELEPORT ? TRUE : FALSE) ); + getChild<LLUICtrl>("limit_payment")->setValue(LLSD(flags & REGION_FLAGS_DENY_ANONYMOUS ? TRUE : FALSE) ); + getChild<LLUICtrl>("limit_age_verified")->setValue(LLSD(flags & REGION_FLAGS_DENY_AGEUNVERIFIED ? TRUE : FALSE) ); refresh(); } @@ -2313,32 +2304,32 @@ U32 LLPanelEstateInfo::computeEstateFlags() { U32 flags = 0; - if (childGetValue("externally_visible_check").asBoolean()) + if (getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean()) { flags |= REGION_FLAGS_EXTERNALLY_VISIBLE; } - if ( childGetValue("voice_chat_check").asBoolean() ) + if ( getChild<LLUICtrl>("voice_chat_check")->getValue().asBoolean() ) { flags |= REGION_FLAGS_ALLOW_VOICE; } - if (childGetValue("allow_direct_teleport").asBoolean()) + if (getChild<LLUICtrl>("allow_direct_teleport")->getValue().asBoolean()) { flags |= REGION_FLAGS_ALLOW_DIRECT_TELEPORT; } - if (childGetValue("fixed_sun_check").asBoolean()) + if (getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean()) { flags |= REGION_FLAGS_SUN_FIXED; } - if (childGetValue("limit_payment").asBoolean()) + if (getChild<LLUICtrl>("limit_payment")->getValue().asBoolean()) { flags |= REGION_FLAGS_DENY_ANONYMOUS; } - if (childGetValue("limit_age_verified").asBoolean()) + if (getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean()) { flags |= REGION_FLAGS_DENY_AGEUNVERIFIED; } @@ -2349,24 +2340,24 @@ U32 LLPanelEstateInfo::computeEstateFlags() BOOL LLPanelEstateInfo::getGlobalTime() { - return childGetValue("use_global_time_check").asBoolean(); + return getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean(); } void LLPanelEstateInfo::setGlobalTime(bool b) { - childSetValue("use_global_time_check", LLSD(b)); - childSetEnabled("fixed_sun_check", LLSD(!b)); - childSetEnabled("sun_hour_slider", LLSD(!b)); + getChild<LLUICtrl>("use_global_time_check")->setValue(LLSD(b)); + getChildView("fixed_sun_check")->setEnabled(LLSD(!b)); + getChildView("sun_hour_slider")->setEnabled(LLSD(!b)); if (b) { - childSetValue("sun_hour_slider", LLSD(0.f)); + getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(0.f)); } } BOOL LLPanelEstateInfo::getFixedSun() { - return childGetValue("fixed_sun_check").asBoolean(); + return getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean(); } void LLPanelEstateInfo::setSunHour(F32 sun_hour) @@ -2375,61 +2366,61 @@ void LLPanelEstateInfo::setSunHour(F32 sun_hour) { sun_hour = 24.0f + sun_hour; } - childSetValue("sun_hour_slider", LLSD(sun_hour)); + getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(sun_hour)); } F32 LLPanelEstateInfo::getSunHour() { - if (childIsEnabled("sun_hour_slider")) + if (getChildView("sun_hour_slider")->getEnabled()) { - return (F32)childGetValue("sun_hour_slider").asReal(); + return (F32)getChild<LLUICtrl>("sun_hour_slider")->getValue().asReal(); } return 0.f; } const std::string LLPanelEstateInfo::getEstateName() const { - return childGetValue("estate_name").asString(); + return getChild<LLUICtrl>("estate_name")->getValue().asString(); } void LLPanelEstateInfo::setEstateName(const std::string& name) { - childSetValue("estate_name", LLSD(name)); + getChild<LLUICtrl>("estate_name")->setValue(LLSD(name)); } const std::string LLPanelEstateInfo::getOwnerName() const { - return childGetValue("estate_owner").asString(); + return getChild<LLUICtrl>("estate_owner")->getValue().asString(); } void LLPanelEstateInfo::setOwnerName(const std::string& name) { - childSetValue("estate_owner", LLSD(name)); + getChild<LLUICtrl>("estate_owner")->setValue(LLSD(name)); } void LLPanelEstateInfo::setAccessAllowedEnabled(bool enable_agent, bool enable_group, bool enable_ban) { - childSetEnabled("allow_resident_label", enable_agent); - childSetEnabled("allowed_avatar_name_list", enable_agent); - childSetVisible("allowed_avatar_name_list", enable_agent); - childSetEnabled("add_allowed_avatar_btn", enable_agent); - childSetEnabled("remove_allowed_avatar_btn", enable_agent); + getChildView("allow_resident_label")->setEnabled(enable_agent); + getChildView("allowed_avatar_name_list")->setEnabled(enable_agent); + getChildView("allowed_avatar_name_list")->setVisible( enable_agent); + getChildView("add_allowed_avatar_btn")->setEnabled(enable_agent); + getChildView("remove_allowed_avatar_btn")->setEnabled(enable_agent); // Groups - childSetEnabled("allow_group_label", enable_group); - childSetEnabled("allowed_group_name_list", enable_group); - childSetVisible("allowed_group_name_list", enable_group); - childSetEnabled("add_allowed_group_btn", enable_group); - childSetEnabled("remove_allowed_group_btn", enable_group); + getChildView("allow_group_label")->setEnabled(enable_group); + getChildView("allowed_group_name_list")->setEnabled(enable_group); + getChildView("allowed_group_name_list")->setVisible( enable_group); + getChildView("add_allowed_group_btn")->setEnabled(enable_group); + getChildView("remove_allowed_group_btn")->setEnabled(enable_group); // Ban - childSetEnabled("ban_resident_label", enable_ban); - childSetEnabled("banned_avatar_name_list", enable_ban); - childSetVisible("banned_avatar_name_list", enable_ban); - childSetEnabled("add_banned_avatar_btn", enable_ban); - childSetEnabled("remove_banned_avatar_btn", enable_ban); + getChildView("ban_resident_label")->setEnabled(enable_ban); + getChildView("banned_avatar_name_list")->setEnabled(enable_ban); + getChildView("banned_avatar_name_list")->setVisible( enable_ban); + getChildView("add_banned_avatar_btn")->setEnabled(enable_ban); + getChildView("remove_banned_avatar_btn")->setEnabled(enable_ban); // Update removal buttons if needed if (enable_agent) @@ -2491,7 +2482,7 @@ BOOL LLPanelEstateInfo::checkRemovalButton(std::string name) // enable the remove button if something is selected LLNameListCtrl* name_list = getChild<LLNameListCtrl>(name); - childSetEnabled(btn_name, name_list && name_list->getFirstSelected() ? TRUE : FALSE); + getChildView(btn_name)->setEnabled(name_list && name_list->getFirstSelected() ? TRUE : FALSE); return (btn_name != ""); } @@ -3026,7 +3017,7 @@ bool LLDispatchSetEstateAccess::operator()( args["[ALLOWEDAGENTS]"] = llformat ("%d", totalAllowedAgents); args["[MAXACCESS]"] = llformat ("%d", ESTATE_MAX_ACCESS_IDS); std::string msg = LLTrans::getString("RegionInfoAllowedResidents", args); - panel->childSetValue("allow_resident_label", LLSD(msg)); + panel->getChild<LLUICtrl>("allow_resident_label")->setValue(LLSD(msg)); if (allowed_agent_name_list) { @@ -3037,7 +3028,7 @@ bool LLDispatchSetEstateAccess::operator()( memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */ allowed_agent_name_list->addNameItem(id); } - panel->childSetEnabled("remove_allowed_avatar_btn", allowed_agent_name_list->getFirstSelected() ? TRUE : FALSE); + panel->getChildView("remove_allowed_avatar_btn")->setEnabled(allowed_agent_name_list->getFirstSelected() ? TRUE : FALSE); allowed_agent_name_list->sortByColumnIndex(0, TRUE); } } @@ -3051,7 +3042,7 @@ bool LLDispatchSetEstateAccess::operator()( args["[ALLOWEDGROUPS]"] = llformat ("%d", num_allowed_groups); args["[MAXACCESS]"] = llformat ("%d", ESTATE_MAX_GROUP_IDS); std::string msg = LLTrans::getString("RegionInfoAllowedGroups", args); - panel->childSetValue("allow_group_label", LLSD(msg)); + panel->getChild<LLUICtrl>("allow_group_label")->setValue(LLSD(msg)); if (allowed_group_name_list) { @@ -3062,7 +3053,7 @@ bool LLDispatchSetEstateAccess::operator()( memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */ allowed_group_name_list->addGroupNameItem(id); } - panel->childSetEnabled("remove_allowed_group_btn", allowed_group_name_list->getFirstSelected() ? TRUE : FALSE); + panel->getChildView("remove_allowed_group_btn")->setEnabled(allowed_group_name_list->getFirstSelected() ? TRUE : FALSE); allowed_group_name_list->sortByColumnIndex(0, TRUE); } } @@ -3083,7 +3074,7 @@ bool LLDispatchSetEstateAccess::operator()( std::string msg = llformat("Banned residents: (%d, max %d)", totalBannedAgents, ESTATE_MAX_ACCESS_IDS); - panel->childSetValue("ban_resident_label", LLSD(msg)); + panel->getChild<LLUICtrl>("ban_resident_label")->setValue(LLSD(msg)); if (banned_agent_name_list) { @@ -3094,7 +3085,7 @@ bool LLDispatchSetEstateAccess::operator()( memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */ banned_agent_name_list->addNameItem(id); } - panel->childSetEnabled("remove_banned_avatar_btn", banned_agent_name_list->getFirstSelected() ? TRUE : FALSE); + panel->getChildView("remove_banned_avatar_btn")->setEnabled(banned_agent_name_list->getFirstSelected() ? TRUE : FALSE); banned_agent_name_list->sortByColumnIndex(0, TRUE); } } @@ -3104,7 +3095,7 @@ bool LLDispatchSetEstateAccess::operator()( std::string msg = llformat("Estate Managers: (%d, max %d)", num_estate_managers, ESTATE_MAX_MANAGERS); - panel->childSetValue("estate_manager_label", LLSD(msg)); + panel->getChild<LLUICtrl>("estate_manager_label")->setValue(LLSD(msg)); LLNameListCtrl* estate_manager_name_list = panel->getChild<LLNameListCtrl>("estate_manager_name_list"); @@ -3121,7 +3112,7 @@ bool LLDispatchSetEstateAccess::operator()( memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */ estate_manager_name_list->addNameItem(id); } - panel->childSetEnabled("remove_estate_manager_btn", estate_manager_name_list->getFirstSelected() ? TRUE : FALSE); + panel->getChildView("remove_estate_manager_btn")->setEnabled(estate_manager_name_list->getFirstSelected() ? TRUE : FALSE); estate_manager_name_list->sortByColumnIndex(0, TRUE); } } diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index 482ebb3303..135bf7102f 100644 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -262,19 +262,19 @@ public: void onChangeFixedSun(); void onChangeUseGlobalTime(); - static void onClickEditSky(void* userdata); - static void onClickEditSkyHelp(void* userdata); - static void onClickEditDayCycle(void* userdata); - static void onClickEditDayCycleHelp(void* userdata); - - static void onClickAddAllowedAgent(void* user_data); - static void onClickRemoveAllowedAgent(void* user_data); - void onClickAddAllowedGroup(); - static void onClickRemoveAllowedGroup(void* user_data); - static void onClickAddBannedAgent(void* user_data); - static void onClickRemoveBannedAgent(void* user_data); - static void onClickAddEstateManager(void* user_data); - static void onClickRemoveEstateManager(void* user_data); + void onClickEditSky(); + void onClickEditSkyHelp(); + void onClickEditDayCycle(); + void onClickEditDayCycleHelp(); + + void onClickAddAllowedAgent(); + void onClickRemoveAllowedAgent(); + void onClickAddAllowedGroup(); + void onClickRemoveAllowedGroup(); + void onClickAddBannedAgent(); + void onClickRemoveBannedAgent(); + void onClickAddEstateManager(); + void onClickRemoveEstateManager(); void onClickKickUser(); // Group picker callback is different, can't use core methods below diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp index f7c8855bf6..230d4be85b 100644 --- a/indra/newview/llfloaterreporter.cpp +++ b/indra/newview/llfloaterreporter.cpp @@ -128,7 +128,7 @@ BOOL LLFloaterReporter::postBuild() { LLSLURL slurl; LLAgentUI::buildSLURL(slurl); - childSetText("abuse_location_edit", slurl.getSLURLString()); + getChild<LLUICtrl>("abuse_location_edit")->setValue(slurl.getSLURLString()); enableControls(TRUE); @@ -137,7 +137,7 @@ BOOL LLFloaterReporter::postBuild() LLViewerRegion *regionp = gAgent.getRegion(); if (regionp) { - childSetText("sim_field", regionp->getName()); + getChild<LLUICtrl>("sim_field")->setValue(regionp->getName()); pos -= regionp->getOriginGlobal(); } setPosBox(pos); @@ -148,13 +148,13 @@ BOOL LLFloaterReporter::postBuild() setVisible(TRUE); // Default text to be blank - childSetText("object_name", LLStringUtil::null); - childSetText("owner_name", LLStringUtil::null); + getChild<LLUICtrl>("object_name")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("owner_name")->setValue(LLStringUtil::null); mOwnerName = LLStringUtil::null; - childSetFocus("summary_edit"); + getChild<LLUICtrl>("summary_edit")->setFocus(TRUE); - mDefaultSummary = childGetText("details_edit"); + mDefaultSummary = getChild<LLUICtrl>("details_edit")->getValue().asString(); // send a message and ask for information about this region - // result comes back in processRegionInfo(..) @@ -184,7 +184,7 @@ BOOL LLFloaterReporter::postBuild() // grab the user's name std::string fullname; LLAgentUI::buildFullname(fullname); - childSetText("reporter_field", fullname); + getChild<LLUICtrl>("reporter_field")->setValue(fullname); center(); @@ -212,22 +212,22 @@ LLFloaterReporter::~LLFloaterReporter() // virtual void LLFloaterReporter::draw() { - childSetEnabled("screen_check", TRUE ); + getChildView("screen_check")->setEnabled(TRUE ); LLFloater::draw(); } void LLFloaterReporter::enableControls(BOOL enable) { - childSetEnabled("category_combo", enable); - childSetEnabled("chat_check", enable); - childSetEnabled("screen_check", enable); - childDisable("screenshot"); - childSetEnabled("pick_btn", enable); - childSetEnabled("summary_edit", enable); - childSetEnabled("details_edit", enable); - childSetEnabled("send_btn", enable); - childSetEnabled("cancel_btn", enable); + getChildView("category_combo")->setEnabled(enable); + getChildView("chat_check")->setEnabled(enable); + getChildView("screen_check")->setEnabled(enable); + getChildView("screenshot")->setEnabled(FALSE); + getChildView("pick_btn")->setEnabled(enable); + getChildView("summary_edit")->setEnabled(enable); + getChildView("details_edit")->setEnabled(enable); + getChildView("send_btn")->setEnabled(enable); + getChildView("cancel_btn")->setEnabled(enable); } void LLFloaterReporter::getObjectInfo(const LLUUID& object_id) @@ -259,7 +259,7 @@ void LLFloaterReporter::getObjectInfo(const LLUUID& object_id) LLViewerRegion *regionp = objectp->getRegion(); if (regionp) { - childSetText("sim_field", regionp->getName()); + getChild<LLUICtrl>("sim_field")->setValue(regionp->getName()); LLVector3d global_pos; global_pos.setVec(objectp->getPositionRegion()); setPosBox(global_pos); @@ -313,7 +313,7 @@ void LLFloaterReporter::callbackAvatarID(const std::vector<std::string>& names, { if (ids.empty() || names.empty()) return; - childSetText("abuser_name_edit", names[0] ); + getChild<LLUICtrl>("abuser_name_edit")->setValue(names[0] ); mAbuserID = ids[0]; @@ -328,9 +328,9 @@ void LLFloaterReporter::setFromAvatar(const LLUUID& avatar_id, const std::string std::string avatar_link = LLSLURL("agent", mObjectID, "inspect").getSLURLString(); - childSetText("owner_name", avatar_link); - childSetText("object_name", avatar_name); - childSetText("abuser_name_edit", avatar_name); + getChild<LLUICtrl>("owner_name")->setValue(avatar_link); + getChild<LLUICtrl>("object_name")->setValue(avatar_name); + getChild<LLUICtrl>("abuser_name_edit")->setValue(avatar_name); } // static @@ -354,9 +354,9 @@ void LLFloaterReporter::onClickSend(void *userdata) if ( ! self->mCopyrightWarningSeen ) { - std::string details_lc = self->childGetText("details_edit"); + std::string details_lc = self->getChild<LLUICtrl>("details_edit")->getValue().asString(); LLStringUtil::toLower( details_lc ); - std::string summary_lc = self->childGetText("summary_edit"); + std::string summary_lc = self->getChild<LLUICtrl>("summary_edit")->getValue().asString(); LLStringUtil::toLower( summary_lc ); if ( details_lc.find( "copyright" ) != std::string::npos || summary_lc.find( "copyright" ) != std::string::npos || @@ -387,10 +387,10 @@ void LLFloaterReporter::onClickSend(void *userdata) } else { - if(self->childGetValue("screen_check")) + if(self->getChild<LLUICtrl>("screen_check")->getValue()) { - self->childDisable("send_btn"); - self->childDisable("cancel_btn"); + self->getChildView("send_btn")->setEnabled(FALSE); + self->getChildView("cancel_btn")->setEnabled(FALSE); // the callback from uploading the image calls sendReportViaLegacy() self->uploadImage(); } @@ -428,8 +428,8 @@ void LLFloaterReporter::onClickObjPicker(void *userdata) LLToolObjPicker::getInstance()->setExitCallback(LLFloaterReporter::closePickTool, self); LLToolMgr::getInstance()->setTransientTool(LLToolObjPicker::getInstance()); self->mPicking = TRUE; - self->childSetText("object_name", LLStringUtil::null); - self->childSetText("owner_name", LLStringUtil::null); + self->getChild<LLUICtrl>("object_name")->setValue(LLStringUtil::null); + self->getChild<LLUICtrl>("owner_name")->setValue(LLStringUtil::null); self->mOwnerName = LLStringUtil::null; LLButton* pick_btn = self->getChild<LLButton>("pick_btn"); if (pick_btn) pick_btn->setToggleState(TRUE); @@ -475,7 +475,7 @@ void LLFloaterReporter::show(const LLUUID& object_id, const std::string& avatar_ // grab the user's name std::string fullname; LLAgentUI::buildFullname(fullname); - f->childSetText("reporter_field", fullname); + f->getChild<LLUICtrl>("reporter_field")->setValue(fullname); if (avatar_name.empty()) // Request info for this object @@ -504,11 +504,11 @@ void LLFloaterReporter::showFromAvatar(const LLUUID& avatar_id, const std::strin void LLFloaterReporter::setPickedObjectProperties(const std::string& object_name, const std::string& owner_name, const LLUUID owner_id) { - childSetText("object_name", object_name); + getChild<LLUICtrl>("object_name")->setValue(object_name); std::string owner_link = LLSLURL("agent", owner_id, "inspect").getSLURLString(); - childSetText("owner_name", owner_link); - childSetText("abuser_name_edit", owner_name); + getChild<LLUICtrl>("owner_name")->setValue(owner_link); + getChild<LLUICtrl>("abuser_name_edit")->setValue(owner_name); mAbuserID = owner_id; mOwnerName = owner_name; } @@ -517,7 +517,7 @@ void LLFloaterReporter::setPickedObjectProperties(const std::string& object_name bool LLFloaterReporter::validateReport() { // Ensure user selected a category from the list - LLSD category_sd = childGetValue("category_combo"); + LLSD category_sd = getChild<LLUICtrl>("category_combo")->getValue(); U8 category = (U8)category_sd.asInteger(); if (category == 0) { @@ -526,32 +526,32 @@ bool LLFloaterReporter::validateReport() } - if ( childGetText("abuser_name_edit").empty() ) + if ( getChild<LLUICtrl>("abuser_name_edit")->getValue().asString().empty() ) { LLNotificationsUtil::add("HelpReportAbuseAbuserNameEmpty"); return false; }; - if ( childGetText("abuse_location_edit").empty() ) + if ( getChild<LLUICtrl>("abuse_location_edit")->getValue().asString().empty() ) { LLNotificationsUtil::add("HelpReportAbuseAbuserLocationEmpty"); return false; }; - if ( childGetText("abuse_location_edit").empty() ) + if ( getChild<LLUICtrl>("abuse_location_edit")->getValue().asString().empty() ) { LLNotificationsUtil::add("HelpReportAbuseAbuserLocationEmpty"); return false; }; - if ( childGetText("summary_edit").empty() ) + if ( getChild<LLUICtrl>("summary_edit")->getValue().asString().empty() ) { LLNotificationsUtil::add("HelpReportAbuseSummaryEmpty"); return false; }; - if ( childGetText("details_edit") == mDefaultSummary ) + if ( getChild<LLUICtrl>("details_edit")->getValue().asString() == mDefaultSummary ) { LLNotificationsUtil::add("HelpReportAbuseDetailsEmpty"); return false; @@ -597,17 +597,17 @@ LLSD LLFloaterReporter::gatherReport() summary << "" << " |" << regionp->getName() << "|" // region reporter is currently in. - << " (" << childGetText("abuse_location_edit") << ")" // region abuse occured in (freeform text - no LLRegionPicker tool) + << " (" << getChild<LLUICtrl>("abuse_location_edit")->getValue().asString() << ")" // region abuse occured in (freeform text - no LLRegionPicker tool) << " [" << category_name << "] " // updated category - << " {" << childGetText("abuser_name_edit") << "} " // name of abuse entered in report (chosen using LLAvatarPicker) - << " \"" << childGetValue("summary_edit").asString() << "\""; // summary as entered + << " {" << getChild<LLUICtrl>("abuser_name_edit")->getValue().asString() << "} " // name of abuse entered in report (chosen using LLAvatarPicker) + << " \"" << getChild<LLUICtrl>("summary_edit")->getValue().asString() << "\""; // summary as entered std::ostringstream details; details << "V" << LLVersionInfo::getVersion() << std::endl << std::endl; // client version moved to body of email for abuse reports - std::string object_name = childGetText("object_name"); + std::string object_name = getChild<LLUICtrl>("object_name")->getValue().asString(); if (!object_name.empty() && !mOwnerName.empty()) { details << "Object: " << object_name << "\n"; @@ -615,10 +615,10 @@ LLSD LLFloaterReporter::gatherReport() } - details << "Abuser name: " << childGetText("abuser_name_edit") << " \n"; - details << "Abuser location: " << childGetText("abuse_location_edit") << " \n"; + details << "Abuser name: " << getChild<LLUICtrl>("abuser_name_edit")->getValue().asString() << " \n"; + details << "Abuser location: " << getChild<LLUICtrl>("abuse_location_edit")->getValue().asString() << " \n"; - details << childGetValue("details_edit").asString(); + details << getChild<LLUICtrl>("details_edit")->getValue().asString(); std::string version_string; version_string = llformat( @@ -632,14 +632,14 @@ LLSD LLFloaterReporter::gatherReport() // only send a screenshot ID if we're asked to and the email is // going to LL - Estate Owners cannot see the screenshot asset LLUUID screenshot_id = LLUUID::null; - if (childGetValue("screen_check")) + if (getChild<LLUICtrl>("screen_check")->getValue()) { - screenshot_id = childGetValue("screenshot"); + screenshot_id = getChild<LLUICtrl>("screenshot")->getValue(); }; LLSD report = LLSD::emptyMap(); report["report-type"] = (U8) mReportType; - report["category"] = childGetValue("category_combo"); + report["category"] = getChild<LLUICtrl>("category_combo")->getValue(); report["position"] = mPosition.getValue(); report["check-flags"] = (U8)0; // this is not used report["screenshot-id"] = screenshot_id; @@ -721,7 +721,7 @@ public: void LLFloaterReporter::sendReportViaCaps(std::string url, std::string sshot_url, const LLSD& report) { - if(childGetValue("screen_check").asBoolean() && !sshot_url.empty()) + if(getChild<LLUICtrl>("screen_check")->getValue().asBoolean() && !sshot_url.empty()) { // try to upload screenshot LLHTTPClient::post(sshot_url, report, new LLUserReportScreenshotResponder(report, @@ -853,7 +853,7 @@ void LLFloaterReporter::setPosBox(const LLVector3d &pos) mPosition.mV[VX], mPosition.mV[VY], mPosition.mV[VZ]); - childSetText("pos_field", pos_string); + getChild<LLUICtrl>("pos_field")->setValue(pos_string); } // void LLFloaterReporter::setDescription(const std::string& description, LLMeanCollisionData *mcd) @@ -861,7 +861,7 @@ void LLFloaterReporter::setPosBox(const LLVector3d &pos) // LLFloaterReporter *self = LLFloaterReg::findTypedInstance<LLFloaterReporter>("reporter"); // if (self) // { -// self->childSetText("details_edit", description); +// self->getChild<LLUICtrl>("details_edit")->setValue(description); // for_each(self->mMCDList.begin(), self->mMCDList.end(), DeletePointer()); // self->mMCDList.clear(); diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp index 0a5499b166..e0f646349e 100644 --- a/indra/newview/llfloaterscriptlimits.cpp +++ b/indra/newview/llfloaterscriptlimits.cpp @@ -298,7 +298,7 @@ void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content_ref) LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); if(panel_memory) { - panel_memory->childSetValue("loading_text", LLSD(std::string(""))); + panel_memory->getChild<LLUICtrl>("loading_text")->setValue(LLSD(std::string(""))); LLButton* btn = panel_memory->getChild<LLButton>("refresh_list_btn"); if(btn) @@ -495,7 +495,7 @@ void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content_ref) LLPanelScriptLimitsAttachment* panel = (LLPanelScriptLimitsAttachment*)tab->getChild<LLPanel>("script_limits_my_avatar_panel"); if(panel) { - panel->childSetValue("loading_text", LLSD(std::string(""))); + panel->getChild<LLUICtrl>("loading_text")->setValue(LLSD(std::string(""))); LLButton* btn = panel->getChild<LLButton>("refresh_list_btn"); if(btn) @@ -560,12 +560,12 @@ void LLPanelScriptLimitsRegionMemory::processParcelInfo(const LLParcelData& parc if(!getLandScriptResources()) { std::string msg_error = LLTrans::getString("ScriptLimitsRequestError"); - childSetValue("loading_text", LLSD(msg_error)); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_error)); } else { std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting"); - childSetValue("loading_text", LLSD(msg_waiting)); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting)); } } @@ -585,7 +585,7 @@ void LLPanelScriptLimitsRegionMemory::setParcelID(const LLUUID& parcel_id) else { std::string msg_error = LLTrans::getString("ScriptLimitsRequestError"); - childSetValue("loading_text", LLSD(msg_error)); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_error)); } } @@ -641,7 +641,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content) LLStringUtil::format_map_t args_parcels; args_parcels["[PARCELS]"] = llformat ("%d", number_parcels); std::string msg_parcels = LLTrans::getString("ScriptLimitsParcelsOwned", args_parcels); - childSetValue("parcels_listed", LLSD(msg_parcels)); + getChild<LLUICtrl>("parcels_listed")->setValue(LLSD(msg_parcels)); uuid_vec_t names_requested; @@ -818,7 +818,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content) args_parcel_memory["[MAX]"] = llformat ("%d", mParcelMemoryMax); args_parcel_memory["[AVAILABLE]"] = llformat ("%d", parcel_memory_available); std::string msg_parcel_memory = LLTrans::getString("ScriptLimitsMemoryUsed", args_parcel_memory); - childSetValue("memory_used", LLSD(msg_parcel_memory)); + getChild<LLUICtrl>("memory_used")->setValue(LLSD(msg_parcel_memory)); } if((mParcelURLsUsed >= 0) && (mParcelURLsMax >= 0)) @@ -830,7 +830,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content) args_parcel_urls["[MAX]"] = llformat ("%d", mParcelURLsMax); args_parcel_urls["[AVAILABLE]"] = llformat ("%d", parcel_urls_available); std::string msg_parcel_urls = LLTrans::getString("ScriptLimitsURLsUsed", args_parcel_urls); - childSetValue("urls_used", LLSD(msg_parcel_urls)); + getChild<LLUICtrl>("urls_used")->setValue(LLSD(msg_parcel_urls)); } } @@ -841,7 +841,7 @@ BOOL LLPanelScriptLimitsRegionMemory::postBuild() childSetAction("return_btn", onClickReturn, this); std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting"); - childSetValue("loading_text", LLSD(msg_waiting)); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting)); LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list"); if(!list) @@ -866,7 +866,7 @@ BOOL LLPanelScriptLimitsRegionMemory::StartRequestChain() LLFloaterLand* instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land"); if(!instance) { - childSetValue("loading_text", LLSD(std::string(""))); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(std::string(""))); //might have to do parent post build here //if not logic below could use early outs return FALSE; @@ -885,7 +885,7 @@ BOOL LLPanelScriptLimitsRegionMemory::StartRequestChain() if(region_id != current_region_id) { std::string msg_wrong_region = LLTrans::getString("ScriptLimitsRequestWrongRegion"); - childSetValue("loading_text", LLSD(msg_wrong_region)); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_wrong_region)); return FALSE; } @@ -914,13 +914,13 @@ BOOL LLPanelScriptLimitsRegionMemory::StartRequestChain() << " does not support RemoteParcelRequest" << llendl; std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError"); - childSetValue("loading_text", LLSD(msg_waiting)); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting)); } } else { std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestNoParcelSelected"); - childSetValue("loading_text", LLSD(msg_waiting)); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting)); } return LLPanelScriptLimitsInfo::postBuild(); @@ -942,9 +942,9 @@ void LLPanelScriptLimitsRegionMemory::clearList() LLStringUtil::format_map_t args_parcel_memory; std::string msg_empty_string(""); - childSetValue("memory_used", LLSD(msg_empty_string)); - childSetValue("urls_used", LLSD(msg_empty_string)); - childSetValue("parcels_listed", LLSD(msg_empty_string)); + getChild<LLUICtrl>("memory_used")->setValue(LLSD(msg_empty_string)); + getChild<LLUICtrl>("urls_used")->setValue(LLSD(msg_empty_string)); + getChild<LLUICtrl>("parcels_listed")->setValue(LLSD(msg_empty_string)); mObjectListItems.clear(); } @@ -1213,7 +1213,7 @@ void LLPanelScriptLimitsAttachment::setAttachmentDetails(LLSD content) setAttachmentSummary(content); - childSetValue("loading_text", LLSD(std::string(""))); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(std::string(""))); LLButton* btn = getChild<LLButton>("refresh_list_btn"); if(btn) @@ -1227,7 +1227,7 @@ BOOL LLPanelScriptLimitsAttachment::postBuild() childSetAction("refresh_list_btn", onClickRefresh, this); std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting"); - childSetValue("loading_text", LLSD(msg_waiting)); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting)); return requestAttachmentDetails(); } @@ -1241,7 +1241,7 @@ void LLPanelScriptLimitsAttachment::clearList() } std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting"); - childSetValue("loading_text", LLSD(msg_waiting)); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting)); } void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content) @@ -1291,7 +1291,7 @@ void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content) args_attachment_memory["[MAX]"] = llformat ("%d", mAttachmentMemoryMax); args_attachment_memory["[AVAILABLE]"] = llformat ("%d", attachment_memory_available); std::string msg_attachment_memory = LLTrans::getString("ScriptLimitsMemoryUsed", args_attachment_memory); - childSetValue("memory_used", LLSD(msg_attachment_memory)); + getChild<LLUICtrl>("memory_used")->setValue(LLSD(msg_attachment_memory)); } if((mAttachmentURLsUsed >= 0) && (mAttachmentURLsMax >= 0)) @@ -1303,7 +1303,7 @@ void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content) args_attachment_urls["[MAX]"] = llformat ("%d", mAttachmentURLsMax); args_attachment_urls["[AVAILABLE]"] = llformat ("%d", attachment_urls_available); std::string msg_attachment_urls = LLTrans::getString("ScriptLimitsURLsUsed", args_attachment_urls); - childSetValue("urls_used", LLSD(msg_attachment_urls)); + getChild<LLUICtrl>("urls_used")->setValue(LLSD(msg_attachment_urls)); } } diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index 76caa0cf91..381b2dee33 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -128,11 +128,11 @@ void LLFloaterSearch::handleMediaEvent(LLPluginClassMedia *self, EMediaEvent eve switch (event) { case MEDIA_EVENT_NAVIGATE_BEGIN: - childSetText("status_text", getString("loading_text")); + getChild<LLUICtrl>("status_text")->setValue(getString("loading_text")); break; case MEDIA_EVENT_NAVIGATE_COMPLETE: - childSetText("status_text", getString("done_text")); + getChild<LLUICtrl>("status_text")->setValue(getString("done_text")); break; default: @@ -146,7 +146,7 @@ void LLFloaterSearch::godLevelChanged(U8 godlevel) // changes god level, then give them a warning (we don't refresh // the search as this might undo any page navigation or // AJAX-driven changes since the last search). - childSetVisible("refresh_search", (godlevel != mSearchGodLevel)); + getChildView("refresh_search")->setVisible( (godlevel != mSearchGodLevel)); } void LLFloaterSearch::search(const LLSD &key) @@ -157,7 +157,7 @@ void LLFloaterSearch::search(const LLSD &key) } // reset the god level warning as we're sending the latest state - childHide("refresh_search"); + getChildView("refresh_search")->setVisible(FALSE); mSearchGodLevel = gAgent.getGodLevel(); // work out the subdir to use based on the requested category diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp index 9dddbd998a..b10a297bb8 100644 --- a/indra/newview/llfloatersellland.cpp +++ b/indra/newview/llfloatersellland.cpp @@ -163,7 +163,7 @@ BOOL LLFloaterSellLandUI::postBuild() { childSetCommitCallback("sell_to", onChangeValue, this); childSetCommitCallback("price", onChangeValue, this); - childSetPrevalidate("price", LLTextValidate::validateNonNegativeS32); + getChild<LLLineEditor>("price")->setPrevalidate(LLTextValidate::validateNonNegativeS32); childSetCommitCallback("sell_objects", onChangeValue, this); childSetAction("sell_to_select_agent", boost::bind( &LLFloaterSellLandUI::doSelectAgent, this)); childSetAction("cancel_btn", doCancel, this); @@ -207,20 +207,20 @@ void LLFloaterSellLandUI::updateParcelInfo() mParcelSoldWithObjects = parcelp->getSellWithObjects(); if (mParcelIsForSale) { - childSetValue("price", mParcelPrice); + getChild<LLUICtrl>("price")->setValue(mParcelPrice); if (mParcelSoldWithObjects) { - childSetValue("sell_objects", "yes"); + getChild<LLUICtrl>("sell_objects")->setValue("yes"); } else { - childSetValue("sell_objects", "no"); + getChild<LLUICtrl>("sell_objects")->setValue("no"); } } else { - childSetValue("price", ""); - childSetValue("sell_objects", "none"); + getChild<LLUICtrl>("price")->setValue(""); + getChild<LLUICtrl>("sell_objects")->setValue("none"); } mParcelSnapshot = parcelp->getSnapshotID(); @@ -232,7 +232,7 @@ void LLFloaterSellLandUI::updateParcelInfo() { std::string name; gCacheName->getFullName(mAuthorizedBuyer, name); - childSetText("sell_to_agent", name); + getChild<LLUICtrl>("sell_to_agent")->setValue(name); } } @@ -253,7 +253,7 @@ void LLFloaterSellLandUI::setBadge(const char* id, Badge badge) case BADGE_ERROR: badgeName = badgeError; break; } - childSetValue(id, badgeName); + getChild<LLUICtrl>(id)->setValue(badgeName); } void LLFloaterSellLandUI::refreshUI() @@ -264,10 +264,10 @@ void LLFloaterSellLandUI::refreshUI() LLTextureCtrl* snapshot = getChild<LLTextureCtrl>("info_image"); snapshot->setImageAssetID(mParcelSnapshot); - childSetText("info_parcel", parcelp->getName()); - childSetTextArg("info_size", "[AREA]", llformat("%d", mParcelActualArea)); + getChild<LLUICtrl>("info_parcel")->setValue(parcelp->getName()); + getChild<LLUICtrl>("info_size")->setTextArg("[AREA]", llformat("%d", mParcelActualArea)); - std::string price_str = childGetValue("price").asString(); + std::string price_str = getChild<LLUICtrl>("price")->getValue().asString(); bool valid_price = false; valid_price = (price_str != "") && LLTextValidate::validateNonNegativeS32(utf8str_to_wstring(price_str)); @@ -275,14 +275,14 @@ void LLFloaterSellLandUI::refreshUI() { F32 per_meter_price = 0; per_meter_price = F32(mParcelPrice) / F32(mParcelActualArea); - childSetTextArg("price_per_m", "[PER_METER]", llformat("%0.2f", per_meter_price)); - childShow("price_per_m"); + getChild<LLUICtrl>("price_per_m")->setTextArg("[PER_METER]", llformat("%0.2f", per_meter_price)); + getChildView("price_per_m")->setVisible(TRUE); setBadge("step_price", BADGE_OK); } else { - childHide("price_per_m"); + getChildView("price_per_m")->setVisible(FALSE); if ("" == price_str) { @@ -296,26 +296,26 @@ void LLFloaterSellLandUI::refreshUI() if (mSellToBuyer) { - childSetValue("sell_to", "user"); - childShow("sell_to_agent"); - childShow("sell_to_select_agent"); + getChild<LLUICtrl>("sell_to")->setValue("user"); + getChildView("sell_to_agent")->setVisible(TRUE); + getChildView("sell_to_select_agent")->setVisible(TRUE); } else { if (mChoseSellTo) { - childSetValue("sell_to", "anyone"); + getChild<LLUICtrl>("sell_to")->setValue("anyone"); } else { - childSetValue("sell_to", "select"); + getChild<LLUICtrl>("sell_to")->setValue("select"); } - childHide("sell_to_agent"); - childHide("sell_to_select_agent"); + getChildView("sell_to_agent")->setVisible(FALSE); + getChildView("sell_to_select_agent")->setVisible(FALSE); } // Must select Sell To: Anybody, or User (with a specified username) - std::string sell_to = childGetValue("sell_to").asString(); + std::string sell_to = getChild<LLUICtrl>("sell_to")->getValue().asString(); bool valid_sell_to = "select" != sell_to && ("user" != sell_to || mAuthorizedBuyer.notNull()); @@ -328,7 +328,7 @@ void LLFloaterSellLandUI::refreshUI() setBadge("step_sell_to", BADGE_OK); } - bool valid_sell_objects = ("none" != childGetValue("sell_objects").asString()); + bool valid_sell_objects = ("none" != getChild<LLUICtrl>("sell_objects")->getValue().asString()); if (!valid_sell_objects) { @@ -341,11 +341,11 @@ void LLFloaterSellLandUI::refreshUI() if (valid_sell_to && valid_price && valid_sell_objects) { - childEnable("sell_btn"); + getChildView("sell_btn")->setEnabled(TRUE); } else { - childDisable("sell_btn"); + getChildView("sell_btn")->setEnabled(FALSE); } } @@ -354,7 +354,7 @@ void LLFloaterSellLandUI::onChangeValue(LLUICtrl *ctrl, void *userdata) { LLFloaterSellLandUI *self = (LLFloaterSellLandUI *)userdata; - std::string sell_to = self->childGetValue("sell_to").asString(); + std::string sell_to = self->getChild<LLUICtrl>("sell_to")->getValue().asString(); if (sell_to == "user") { @@ -371,9 +371,9 @@ void LLFloaterSellLandUI::onChangeValue(LLUICtrl *ctrl, void *userdata) self->mSellToBuyer = false; } - self->mParcelPrice = self->childGetValue("price"); + self->mParcelPrice = self->getChild<LLUICtrl>("price")->getValue(); - if ("yes" == self->childGetValue("sell_objects").asString()) + if ("yes" == self->getChild<LLUICtrl>("sell_objects")->getValue().asString()) { self->mParcelSoldWithObjects = true; } @@ -402,7 +402,7 @@ void LLFloaterSellLandUI::callbackAvatarPick(const std::vector<std::string>& nam mAuthorizedBuyer = ids[0]; - childSetText("sell_to_agent", names[0]); + getChild<LLUICtrl>("sell_to_agent")->setValue(names[0]); refreshUI(); } @@ -445,13 +445,13 @@ void LLFloaterSellLandUI::doSellLand(void *userdata) LLParcel* parcel = self->mParcelSelection->getParcel(); // Do a confirmation - S32 sale_price = self->childGetValue("price"); + S32 sale_price = self->getChild<LLUICtrl>("price")->getValue(); S32 area = parcel->getArea(); std::string authorizedBuyerName = "Anyone"; bool sell_to_anyone = true; - if ("user" == self->childGetValue("sell_to").asString()) + if ("user" == self->getChild<LLUICtrl>("sell_to")->getValue().asString()) { - authorizedBuyerName = self->childGetText("sell_to_agent"); + authorizedBuyerName = self->getChild<LLUICtrl>("sell_to_agent")->getValue().asString(); sell_to_anyone = false; } @@ -498,7 +498,7 @@ bool LLFloaterSellLandUI::onConfirmSale(const LLSD& notification, const LLSD& re { return false; } - S32 sale_price = childGetValue("price"); + S32 sale_price = getChild<LLUICtrl>("price")->getValue(); // Valid extracted data if (sale_price < 0) @@ -520,12 +520,12 @@ bool LLFloaterSellLandUI::onConfirmSale(const LLSD& notification, const LLSD& re parcel->setParcelFlag(PF_FOR_SALE, TRUE); parcel->setSalePrice(sale_price); bool sell_with_objects = false; - if ("yes" == childGetValue("sell_objects").asString()) + if ("yes" == getChild<LLUICtrl>("sell_objects")->getValue().asString()) { sell_with_objects = true; } parcel->setSellWithObjects(sell_with_objects); - if ("user" == childGetValue("sell_to").asString()) + if ("user" == getChild<LLUICtrl>("sell_to")->getValue().asString()) { parcel->setAuthorizedBuyerID(mAuthorizedBuyer); } diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp index a6ffa5ec09..77e0e4e677 100644 --- a/indra/newview/llfloatersettingsdebug.cpp +++ b/indra/newview/llfloatersettingsdebug.cpp @@ -127,49 +127,49 @@ void LLFloaterSettingsDebug::onCommitSettings() switch(controlp->type()) { case TYPE_U32: - controlp->set(childGetValue("val_spinner_1")); + controlp->set(getChild<LLUICtrl>("val_spinner_1")->getValue()); break; case TYPE_S32: - controlp->set(childGetValue("val_spinner_1")); + controlp->set(getChild<LLUICtrl>("val_spinner_1")->getValue()); break; case TYPE_F32: - controlp->set(LLSD(childGetValue("val_spinner_1").asReal())); + controlp->set(LLSD(getChild<LLUICtrl>("val_spinner_1")->getValue().asReal())); break; case TYPE_BOOLEAN: - controlp->set(childGetValue("boolean_combo")); + controlp->set(getChild<LLUICtrl>("boolean_combo")->getValue()); break; case TYPE_STRING: - controlp->set(LLSD(childGetValue("val_text").asString())); + controlp->set(LLSD(getChild<LLUICtrl>("val_text")->getValue().asString())); break; case TYPE_VEC3: - vector.mV[VX] = (F32)childGetValue("val_spinner_1").asReal(); - vector.mV[VY] = (F32)childGetValue("val_spinner_2").asReal(); - vector.mV[VZ] = (F32)childGetValue("val_spinner_3").asReal(); + vector.mV[VX] = (F32)getChild<LLUICtrl>("val_spinner_1")->getValue().asReal(); + vector.mV[VY] = (F32)getChild<LLUICtrl>("val_spinner_2")->getValue().asReal(); + vector.mV[VZ] = (F32)getChild<LLUICtrl>("val_spinner_3")->getValue().asReal(); controlp->set(vector.getValue()); break; case TYPE_VEC3D: - vectord.mdV[VX] = childGetValue("val_spinner_1").asReal(); - vectord.mdV[VY] = childGetValue("val_spinner_2").asReal(); - vectord.mdV[VZ] = childGetValue("val_spinner_3").asReal(); + vectord.mdV[VX] = getChild<LLUICtrl>("val_spinner_1")->getValue().asReal(); + vectord.mdV[VY] = getChild<LLUICtrl>("val_spinner_2")->getValue().asReal(); + vectord.mdV[VZ] = getChild<LLUICtrl>("val_spinner_3")->getValue().asReal(); controlp->set(vectord.getValue()); break; case TYPE_RECT: - rect.mLeft = childGetValue("val_spinner_1").asInteger(); - rect.mRight = childGetValue("val_spinner_2").asInteger(); - rect.mBottom = childGetValue("val_spinner_3").asInteger(); - rect.mTop = childGetValue("val_spinner_4").asInteger(); + rect.mLeft = getChild<LLUICtrl>("val_spinner_1")->getValue().asInteger(); + rect.mRight = getChild<LLUICtrl>("val_spinner_2")->getValue().asInteger(); + rect.mBottom = getChild<LLUICtrl>("val_spinner_3")->getValue().asInteger(); + rect.mTop = getChild<LLUICtrl>("val_spinner_4")->getValue().asInteger(); controlp->set(rect.getValue()); break; case TYPE_COL4: - col3.setValue(childGetValue("val_color_swatch")); - col4 = LLColor4(col3, (F32)childGetValue("val_spinner_4").asReal()); + col3.setValue(getChild<LLUICtrl>("val_color_swatch")->getValue()); + col4 = LLColor4(col3, (F32)getChild<LLUICtrl>("val_spinner_4")->getValue().asReal()); controlp->set(col4.getValue()); break; case TYPE_COL3: - controlp->set(childGetValue("val_color_swatch")); - //col3.mV[VRED] = (F32)floaterp->childGetValue("val_spinner_1").asC(); - //col3.mV[VGREEN] = (F32)floaterp->childGetValue("val_spinner_2").asReal(); - //col3.mV[VBLUE] = (F32)floaterp->childGetValue("val_spinner_3").asReal(); + controlp->set(getChild<LLUICtrl>("val_color_swatch")->getValue()); + //col3.mV[VRED] = (F32)floaterp->getChild<LLUICtrl>("val_spinner_1")->getValue().asC(); + //col3.mV[VGREEN] = (F32)floaterp->getChild<LLUICtrl>("val_spinner_2")->getValue().asReal(); + //col3.mV[VBLUE] = (F32)floaterp->getChild<LLUICtrl>("val_spinner_3")->getValue().asReal(); //controlp->set(col3.getValue()); break; default: @@ -211,7 +211,7 @@ void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp) spinner3->setVisible(FALSE); spinner4->setVisible(FALSE); color_swatch->setVisible(FALSE); - childSetVisible("val_text", FALSE); + getChildView("val_text")->setVisible( FALSE); mComment->setText(LLStringUtil::null); if (controlp) @@ -219,7 +219,7 @@ void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp) eControlType type = controlp->type(); //hide combo box only for non booleans, otherwise this will result in the combo box closing every frame - childSetVisible("boolean_combo", type == TYPE_BOOLEAN); + getChildView("boolean_combo")->setVisible( type == TYPE_BOOLEAN); mComment->setText(controlp->getComment()); @@ -285,23 +285,23 @@ void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp) } break; case TYPE_BOOLEAN: - if (!childHasFocus("boolean_combo")) + if (!getChild<LLUICtrl>("boolean_combo")->hasFocus()) { if (sd.asBoolean()) { - childSetValue("boolean_combo", LLSD("true")); + getChild<LLUICtrl>("boolean_combo")->setValue(LLSD("true")); } else { - childSetValue("boolean_combo", LLSD("")); + getChild<LLUICtrl>("boolean_combo")->setValue(LLSD("")); } } break; case TYPE_STRING: - childSetVisible("val_text", TRUE); - if (!childHasFocus("val_text")) + getChildView("val_text")->setVisible( TRUE); + if (!getChild<LLUICtrl>("val_text")->hasFocus()) { - childSetValue("val_text", sd); + getChild<LLUICtrl>("val_text")->setValue(sd); } break; case TYPE_VEC3: diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 43ea6143b1..e8a89bb705 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -1141,7 +1141,7 @@ LLSnapshotLivePreview* LLFloaterSnapshot::Impl::getPreviewView(LLFloaterSnapshot LLSnapshotLivePreview::ESnapshotType LLFloaterSnapshot::Impl::getTypeIndex(LLFloaterSnapshot* floater) { LLSnapshotLivePreview::ESnapshotType index = LLSnapshotLivePreview::SNAPSHOT_POSTCARD; - LLSD value = floater->childGetValue("snapshot_type_radio"); + LLSD value = floater->getChild<LLUICtrl>("snapshot_type_radio")->getValue(); const std::string id = value.asString(); if (id == "postcard") @@ -1211,7 +1211,7 @@ LLFloaterSnapshot::ESnapshotFormat LLFloaterSnapshot::Impl::getFormatIndex(LLFlo LLViewerWindow::ESnapshotType LLFloaterSnapshot::Impl::getLayerType(LLFloaterSnapshot* floater) { LLViewerWindow::ESnapshotType type = LLViewerWindow::SNAPSHOT_TYPE_COLOR; - LLSD value = floater->childGetValue("layer_types"); + LLSD value = floater->getChild<LLUICtrl>("layer_types")->getValue(); const std::string id = value.asString(); if (id == "colors") type = LLViewerWindow::SNAPSHOT_TYPE_COLOR; @@ -1254,7 +1254,7 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp) previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); } - bool use_freeze_frame = floaterp->childGetValue("freeze_frame_check").asBoolean(); + bool use_freeze_frame = floaterp->getChild<LLUICtrl>("freeze_frame_check")->getValue().asBoolean(); if (use_freeze_frame) { @@ -1328,11 +1328,11 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) ESnapshotFormat shot_format = (ESnapshotFormat)gSavedSettings.getS32("SnapshotFormat"); LLViewerWindow::ESnapshotType layer_type = getLayerType(floater); - floater->childSetVisible("share_to_web", gSavedSettings.getBOOL("SnapshotSharingEnabled")); + floater->getChildView("share_to_web")->setVisible( gSavedSettings.getBOOL("SnapshotSharingEnabled")); - floater->childSetVisible("postcard_size_combo", FALSE); - floater->childSetVisible("texture_size_combo", FALSE); - floater->childSetVisible("local_size_combo", FALSE); + floater->getChildView("postcard_size_combo")->setVisible( FALSE); + floater->getChildView("texture_size_combo")->setVisible( FALSE); + floater->getChildView("local_size_combo")->setVisible( FALSE); floater->getChild<LLComboBox>("postcard_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotPostcardLastResolution")); floater->getChild<LLComboBox>("texture_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotTextureLastResolution")); @@ -1340,12 +1340,12 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) floater->getChild<LLComboBox>("local_format_combo")->selectNthItem(gSavedSettings.getS32("SnapshotFormat")); // *TODO: Separate settings for Web images from postcards - floater->childSetVisible("send_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD || + floater->getChildView("send_btn")->setVisible( shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD || shot_type == LLSnapshotLivePreview::SNAPSHOT_WEB); - floater->childSetVisible("upload_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE); - floater->childSetVisible("save_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL); - floater->childSetEnabled("keep_aspect_check", shot_type != LLSnapshotLivePreview::SNAPSHOT_TEXTURE && !floater->impl.mAspectRatioCheckOff); - floater->childSetEnabled("layer_types", shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL); + floater->getChildView("upload_btn")->setVisible(shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE); + floater->getChildView("save_btn")->setVisible( shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL); + floater->getChildView("keep_aspect_check")->setEnabled(shot_type != LLSnapshotLivePreview::SNAPSHOT_TEXTURE && !floater->impl.mAspectRatioCheckOff); + floater->getChildView("layer_types")->setEnabled(shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL); BOOL is_advance = gSavedSettings.getBOOL("AdvanceSnapshot"); BOOL is_local = shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL; @@ -1353,33 +1353,33 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) shot_type == LLSnapshotLivePreview::SNAPSHOT_WEB || (is_local && shot_format == LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG)); - floater->childSetVisible("more_btn", !is_advance); // the only item hidden in advanced mode - floater->childSetVisible("less_btn", is_advance); - floater->childSetVisible("type_label2", is_advance); - floater->childSetVisible("format_label", is_advance && is_local); - floater->childSetVisible("local_format_combo", is_advance && is_local); - floater->childSetVisible("layer_types", is_advance); - floater->childSetVisible("layer_type_label", is_advance); - floater->childSetVisible("snapshot_width", is_advance); - floater->childSetVisible("snapshot_height", is_advance); - floater->childSetVisible("keep_aspect_check", is_advance); - floater->childSetVisible("ui_check", is_advance); - floater->childSetVisible("hud_check", is_advance); - floater->childSetVisible("keep_open_check", is_advance); - floater->childSetVisible("freeze_frame_check", is_advance); - floater->childSetVisible("auto_snapshot_check", is_advance); - floater->childSetVisible("image_quality_slider", is_advance && show_slider); + floater->getChildView("more_btn")->setVisible( !is_advance); // the only item hidden in advanced mode + floater->getChildView("less_btn")->setVisible( is_advance); + floater->getChildView("type_label2")->setVisible( is_advance); + floater->getChildView("format_label")->setVisible( is_advance && is_local); + floater->getChildView("local_format_combo")->setVisible( is_advance && is_local); + floater->getChildView("layer_types")->setVisible( is_advance); + floater->getChildView("layer_type_label")->setVisible( is_advance); + floater->getChildView("snapshot_width")->setVisible( is_advance); + floater->getChildView("snapshot_height")->setVisible( is_advance); + floater->getChildView("keep_aspect_check")->setVisible( is_advance); + floater->getChildView("ui_check")->setVisible( is_advance); + floater->getChildView("hud_check")->setVisible( is_advance); + floater->getChildView("keep_open_check")->setVisible( is_advance); + floater->getChildView("freeze_frame_check")->setVisible( is_advance); + floater->getChildView("auto_snapshot_check")->setVisible( is_advance); + floater->getChildView("image_quality_slider")->setVisible( is_advance && show_slider); LLSnapshotLivePreview* previewp = getPreviewView(floater); BOOL got_bytes = previewp && previewp->getDataSize() > 0; BOOL got_snap = previewp && previewp->getSnapshotUpToDate(); // *TODO: Separate maximum size for Web images from postcards - floater->childSetEnabled("send_btn", (shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD || + floater->getChildView("send_btn")->setEnabled((shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD || shot_type == LLSnapshotLivePreview::SNAPSHOT_WEB) && got_snap && previewp->getDataSize() <= MAX_POSTCARD_DATASIZE); - floater->childSetEnabled("upload_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE && got_snap); - floater->childSetEnabled("save_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL && got_snap); + floater->getChildView("upload_btn")->setEnabled(shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE && got_snap); + floater->getChildView("save_btn")->setEnabled(shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL && got_snap); LLLocale locale(LLLocale::USER_LOCALE); std::string bytes_string; @@ -1388,10 +1388,10 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) LLResMgr::getInstance()->getIntegerString(bytes_string, (previewp->getDataSize()) >> 10 ); } S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); - floater->childSetLabelArg("texture", "[AMOUNT]", llformat("%d",upload_cost)); - floater->childSetLabelArg("upload_btn", "[AMOUNT]", llformat("%d",upload_cost)); - floater->childSetTextArg("file_size_label", "[SIZE]", got_snap ? bytes_string : floater->getString("unknown")); - floater->childSetColor("file_size_label", + floater->getChild<LLUICtrl>("texture")->setLabelArg("[AMOUNT]", llformat("%d",upload_cost)); + floater->getChild<LLUICtrl>("upload_btn")->setLabelArg("[AMOUNT]", llformat("%d",upload_cost)); + floater->getChild<LLUICtrl>("file_size_label")->setTextArg("[SIZE]", got_snap ? bytes_string : floater->getString("unknown")); + floater->getChild<LLUICtrl>("file_size_label")->setColor( shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD && got_bytes && previewp->getDataSize() > MAX_POSTCARD_DATASIZE ? LLUIColor(LLColor4::red) : LLUIColorTable::instance().getColor( "LabelTextColor" )); @@ -1402,7 +1402,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) case LLSnapshotLivePreview::SNAPSHOT_WEB: case LLSnapshotLivePreview::SNAPSHOT_POSTCARD: layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR; - floater->childSetValue("layer_types", "colors"); + floater->getChild<LLUICtrl>("layer_types")->setValue("colors"); if(is_advance) { setResolution(floater, "postcard_size_combo"); @@ -1410,7 +1410,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) break; case LLSnapshotLivePreview::SNAPSHOT_TEXTURE: layer_type = LLViewerWindow::SNAPSHOT_TYPE_COLOR; - floater->childSetValue("layer_types", "colors"); + floater->getChild<LLUICtrl>("layer_types")->setValue("colors"); if(is_advance) { setResolution(floater, "texture_size_combo"); @@ -1710,7 +1710,7 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde if(0 == index) //current window size { view->impl.mAspectRatioCheckOff = true ; - view->childSetEnabled("keep_aspect_check", FALSE) ; + view->getChildView("keep_aspect_check")->setEnabled(FALSE) ; if(previewp) { @@ -1722,7 +1722,7 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde view->impl.mAspectRatioCheckOff = false ; //if(LLSnapshotLivePreview::SNAPSHOT_TEXTURE != gSavedSettings.getS32("LastSnapshotType")) { - view->childSetEnabled("keep_aspect_check", TRUE) ; + view->getChildView("keep_aspect_check")->setEnabled(TRUE) ; if(previewp) { @@ -1733,7 +1733,7 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde else { view->impl.mAspectRatioCheckOff = true ; - view->childSetEnabled("keep_aspect_check", FALSE) ; + view->getChildView("keep_aspect_check")->setEnabled(FALSE) ; if(previewp) { @@ -1822,10 +1822,10 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL resetSnapshotSizeOnUI(view, width, height) ; } - if(view->childGetValue("snapshot_width").asInteger() != width || view->childGetValue("snapshot_height").asInteger() != height) + if(view->getChild<LLUICtrl>("snapshot_width")->getValue().asInteger() != width || view->getChild<LLUICtrl>("snapshot_height")->getValue().asInteger() != height) { - view->childSetValue("snapshot_width", width); - view->childSetValue("snapshot_height", height); + view->getChild<LLUICtrl>("snapshot_width")->setValue(width); + view->getChild<LLUICtrl>("snapshot_height")->setValue(height); } if(original_width != width || original_height != height) @@ -2008,8 +2008,8 @@ void LLFloaterSnapshot::Impl::onCommitCustomResolution(LLUICtrl *ctrl, void* dat LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; if (view) { - S32 w = llfloor((F32)view->childGetValue("snapshot_width").asReal()); - S32 h = llfloor((F32)view->childGetValue("snapshot_height").asReal()); + S32 w = llfloor((F32)view->getChild<LLUICtrl>("snapshot_width")->getValue().asReal()); + S32 h = llfloor((F32)view->getChild<LLUICtrl>("snapshot_height")->getValue().asReal()); LLSnapshotLivePreview* previewp = getPreviewView(view); if (previewp) @@ -2118,34 +2118,34 @@ BOOL LLFloaterSnapshot::postBuild() childSetAction("discard_btn", Impl::onClickDiscard, this); childSetCommitCallback("image_quality_slider", Impl::onCommitQuality, this); - childSetValue("image_quality_slider", gSavedSettings.getS32("SnapshotQuality")); + getChild<LLUICtrl>("image_quality_slider")->setValue(gSavedSettings.getS32("SnapshotQuality")); childSetCommitCallback("snapshot_width", Impl::onCommitCustomResolution, this); childSetCommitCallback("snapshot_height", Impl::onCommitCustomResolution, this); childSetCommitCallback("ui_check", Impl::onClickUICheck, this); - childSetValue("ui_check", gSavedSettings.getBOOL("RenderUIInSnapshot")); + getChild<LLUICtrl>("ui_check")->setValue(gSavedSettings.getBOOL("RenderUIInSnapshot")); childSetCommitCallback("hud_check", Impl::onClickHUDCheck, this); - childSetValue("hud_check", gSavedSettings.getBOOL("RenderHUDInSnapshot")); + getChild<LLUICtrl>("hud_check")->setValue(gSavedSettings.getBOOL("RenderHUDInSnapshot")); childSetCommitCallback("keep_open_check", Impl::onClickKeepOpenCheck, this); - childSetValue("keep_open_check", !gSavedSettings.getBOOL("CloseSnapshotOnKeep")); + getChild<LLUICtrl>("keep_open_check")->setValue(!gSavedSettings.getBOOL("CloseSnapshotOnKeep")); childSetCommitCallback("keep_aspect_check", Impl::onClickKeepAspectCheck, this); - childSetValue("keep_aspect_check", gSavedSettings.getBOOL("KeepAspectForSnapshot")); + getChild<LLUICtrl>("keep_aspect_check")->setValue(gSavedSettings.getBOOL("KeepAspectForSnapshot")); childSetCommitCallback("layer_types", Impl::onCommitLayerTypes, this); - childSetValue("layer_types", "colors"); - childSetEnabled("layer_types", FALSE); + getChild<LLUICtrl>("layer_types")->setValue("colors"); + getChildView("layer_types")->setEnabled(FALSE); - childSetValue("snapshot_width", gSavedSettings.getS32(lastSnapshotWidthName())); - childSetValue("snapshot_height", gSavedSettings.getS32(lastSnapshotHeightName())); + getChild<LLUICtrl>("snapshot_width")->setValue(gSavedSettings.getS32(lastSnapshotWidthName())); + getChild<LLUICtrl>("snapshot_height")->setValue(gSavedSettings.getS32(lastSnapshotHeightName())); - childSetValue("freeze_frame_check", gSavedSettings.getBOOL("UseFreezeFrame")); + getChild<LLUICtrl>("freeze_frame_check")->setValue(gSavedSettings.getBOOL("UseFreezeFrame")); childSetCommitCallback("freeze_frame_check", Impl::onCommitFreezeFrame, this); - childSetValue("auto_snapshot_check", gSavedSettings.getBOOL("AutoSnapshot")); + getChild<LLUICtrl>("auto_snapshot_check")->setValue(gSavedSettings.getBOOL("AutoSnapshot")); childSetCommitCallback("auto_snapshot_check", Impl::onClickAutoSnap, this); childSetCommitCallback("postcard_size_combo", Impl::onCommitResolution, this); diff --git a/indra/newview/llfloatertelehub.cpp b/indra/newview/llfloatertelehub.cpp index 816181643f..6bd1e70f13 100644 --- a/indra/newview/llfloatertelehub.cpp +++ b/indra/newview/llfloatertelehub.cpp @@ -112,19 +112,19 @@ void LLFloaterTelehub::refresh() BOOL have_selection = (object != NULL); BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ); - childSetEnabled("connect_btn", have_selection && all_volume); + getChildView("connect_btn")->setEnabled(have_selection && all_volume); BOOL have_telehub = mTelehubObjectID.notNull(); - childSetEnabled("disconnect_btn", have_telehub); + getChildView("disconnect_btn")->setEnabled(have_telehub); BOOL space_avail = (mNumSpawn < MAX_SPAWNPOINTS_PER_TELEHUB); - childSetEnabled("add_spawn_point_btn", have_selection && all_volume && space_avail); + getChildView("add_spawn_point_btn")->setEnabled(have_selection && all_volume && space_avail); LLScrollListCtrl* list = getChild<LLScrollListCtrl>("spawn_points_list"); if (list) { BOOL enable_remove = (list->getFirstSelected() != NULL); - childSetEnabled("remove_spawn_point_btn", enable_remove); + getChildView("remove_spawn_point_btn")->setEnabled(enable_remove); } } @@ -255,18 +255,18 @@ void LLFloaterTelehub::unpackTelehubInfo(LLMessageSystem* msg) if (mTelehubObjectID.isNull()) { - childSetVisible("status_text_connected", false); - childSetVisible("status_text_not_connected", true); - childSetVisible("help_text_connected", false); - childSetVisible("help_text_not_connected", true); + getChildView("status_text_connected")->setVisible( false); + getChildView("status_text_not_connected")->setVisible( true); + getChildView("help_text_connected")->setVisible( false); + getChildView("help_text_not_connected")->setVisible( true); } else { - childSetTextArg("status_text_connected", "[OBJECT]", mTelehubObjectName); - childSetVisible("status_text_connected", true); - childSetVisible("status_text_not_connected", false); - childSetVisible("help_text_connected", true); - childSetVisible("help_text_not_connected", false); + getChild<LLUICtrl>("status_text_connected")->setTextArg("[OBJECT]", mTelehubObjectName); + getChildView("status_text_connected")->setVisible( true); + getChildView("status_text_not_connected")->setVisible( false); + getChildView("help_text_connected")->setVisible( true); + getChildView("help_text_not_connected")->setVisible( false); } LLScrollListCtrl* list = getChild<LLScrollListCtrl>("spawn_points_list"); diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index c84ce12f80..5472531fa7 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -228,13 +228,13 @@ BOOL LLFloaterTools::postBuild() mTitleMedia = getChild<LLMediaCtrl>("title_media"); mCheckSelectIndividual = getChild<LLCheckBoxCtrl>("checkbox edit linked parts"); - childSetValue("checkbox edit linked parts",(BOOL)gSavedSettings.getBOOL("EditLinkedParts")); + getChild<LLUICtrl>("checkbox edit linked parts")->setValue((BOOL)gSavedSettings.getBOOL("EditLinkedParts")); mCheckSnapToGrid = getChild<LLCheckBoxCtrl>("checkbox snap to grid"); - childSetValue("checkbox snap to grid",(BOOL)gSavedSettings.getBOOL("SnapEnabled")); + getChild<LLUICtrl>("checkbox snap to grid")->setValue((BOOL)gSavedSettings.getBOOL("SnapEnabled")); mCheckStretchUniform = getChild<LLCheckBoxCtrl>("checkbox uniform"); - childSetValue("checkbox uniform",(BOOL)gSavedSettings.getBOOL("ScaleUniform")); + getChild<LLUICtrl>("checkbox uniform")->setValue((BOOL)gSavedSettings.getBOOL("ScaleUniform")); mCheckStretchTexture = getChild<LLCheckBoxCtrl>("checkbox stretch textures"); - childSetValue("checkbox stretch textures",(BOOL)gSavedSettings.getBOOL("ScaleStretchTextures")); + getChild<LLUICtrl>("checkbox stretch textures")->setValue((BOOL)gSavedSettings.getBOOL("ScaleStretchTextures")); mComboGridMode = getChild<LLComboBox>("combobox grid mode"); mCheckStretchUniformLabel = getChild<LLTextBox>("checkbox uniform label"); @@ -254,21 +254,21 @@ BOOL LLFloaterTools::postBuild() } } mCheckCopySelection = getChild<LLCheckBoxCtrl>("checkbox copy selection"); - childSetValue("checkbox copy selection",(BOOL)gSavedSettings.getBOOL("CreateToolCopySelection")); + getChild<LLUICtrl>("checkbox copy selection")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolCopySelection")); mCheckSticky = getChild<LLCheckBoxCtrl>("checkbox sticky"); - childSetValue("checkbox sticky",(BOOL)gSavedSettings.getBOOL("CreateToolKeepSelected")); + getChild<LLUICtrl>("checkbox sticky")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolKeepSelected")); mCheckCopyCenters = getChild<LLCheckBoxCtrl>("checkbox copy centers"); - childSetValue("checkbox copy centers",(BOOL)gSavedSettings.getBOOL("CreateToolCopyCenters")); + getChild<LLUICtrl>("checkbox copy centers")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolCopyCenters")); mCheckCopyRotates = getChild<LLCheckBoxCtrl>("checkbox copy rotates"); - childSetValue("checkbox copy rotates",(BOOL)gSavedSettings.getBOOL("CreateToolCopyRotates")); + getChild<LLUICtrl>("checkbox copy rotates")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolCopyRotates")); mRadioGroupLand = getChild<LLRadioGroup>("land_radio_group"); mBtnApplyToSelection = getChild<LLButton>("button apply to selection"); mSliderDozerSize = getChild<LLSlider>("slider brush size"); - childSetValue( "slider brush size", gSavedSettings.getF32("LandBrushSize")); + getChild<LLUICtrl>("slider brush size")->setValue(gSavedSettings.getF32("LandBrushSize")); mSliderDozerForce = getChild<LLSlider>("slider force"); // the setting stores the actual force multiplier, but the slider is logarithmic, so we convert here - childSetValue( "slider force", log10(gSavedSettings.getF32("LandBrushForce"))); + getChild<LLUICtrl>("slider force")->setValue(log10(gSavedSettings.getF32("LandBrushForce"))); mTab = getChild<LLTabContainer>("Object Info Tabs"); if(mTab) @@ -455,7 +455,7 @@ void LLFloaterTools::refresh() { std::string prim_cost_string; LLResMgr::getInstance()->getIntegerString(prim_cost_string, calcRenderCost()); - childSetTextArg("RenderingCost", "[COUNT]", prim_cost_string); + getChild<LLUICtrl>("RenderingCost")->setTextArg("[COUNT]", prim_cost_string); } @@ -465,7 +465,6 @@ void LLFloaterTools::refresh() childSetEnabled("object_count", have_selection); childSetEnabled("linked_set_cost", have_selection); childSetEnabled("object_cost", have_selection); - childSetEnabled("RenderingCost", have_selection && sShowObjectCost); // Refresh child tabs mPanelPermissions->refresh(); @@ -533,8 +532,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) mBtnFocus ->setToggleState( focus_visible ); mRadioGroupFocus->setVisible( focus_visible ); - childSetVisible("slider zoom", focus_visible); - childSetEnabled("slider zoom", gCameraBtnZoom); + getChildView("slider zoom")->setVisible( focus_visible); + getChildView("slider zoom")->setEnabled(gCameraBtnZoom); if (!gCameraBtnOrbit && !gCameraBtnPan && @@ -559,7 +558,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) } // multiply by correction factor because volume sliders go [0, 0.5] - childSetValue( "slider zoom", gAgentCamera.getCameraZoomFraction() * 0.5f); + getChild<LLUICtrl>("slider zoom")->setValue(gAgentCamera.getCameraZoomFraction() * 0.5f); // Move buttons BOOL move_visible = (tool == LLToolGrab::getInstance()); @@ -597,7 +596,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) mBtnEdit ->setToggleState( edit_visible ); mRadioGroupEdit->setVisible( edit_visible ); bool linked_parts = gSavedSettings.getBOOL("EditLinkedParts"); - childSetVisible("RenderingCost", !linked_parts && (edit_visible || focus_visible || move_visible) && sShowObjectCost); + getChildView("RenderingCost")->setVisible( !linked_parts && (edit_visible || focus_visible || move_visible) && sShowObjectCost); if (mCheckSelectIndividual) { @@ -740,17 +739,17 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) if (mSliderDozerSize) { mSliderDozerSize ->setVisible( land_visible ); - childSetVisible("Bulldozer:", land_visible); - childSetVisible("Dozer Size:", land_visible); + getChildView("Bulldozer:")->setVisible( land_visible); + getChildView("Dozer Size:")->setVisible( land_visible); } if (mSliderDozerForce) { mSliderDozerForce ->setVisible( land_visible ); - childSetVisible("Strength:", land_visible); + getChildView("Strength:")->setVisible( land_visible); } - childSetVisible("obj_count", !land_visible); - childSetVisible("prim_count", !land_visible); + getChildView("obj_count")->setVisible( !land_visible); + getChildView("prim_count")->setVisible( !land_visible); mTab->setVisible(!land_visible); mPanelLandInfo->setVisible(land_visible); } @@ -1117,7 +1116,7 @@ void LLFloaterTools::getMediaState() &&first_object->permModify() )) { - childSetEnabled("Add_Media", FALSE); + getChildView("Add_Media")->setEnabled(FALSE); media_info->clear(); clearMediaSettings(); return; @@ -1128,7 +1127,7 @@ void LLFloaterTools::getMediaState() if(!has_media_capability) { - childSetEnabled("Add_Media", FALSE); + getChildView("Add_Media")->setEnabled(FALSE); LL_WARNS("LLFloaterTools: media") << "Media not enabled (no capability) in this region!" << LL_ENDL; clearMediaSettings(); return; @@ -1220,7 +1219,7 @@ void LLFloaterTools::getMediaState() // update UI depending on whether "object" (prim or face) has media // and whether or not you are allowed to edit it. - childSetEnabled("Add_Media", editable); + getChildView("Add_Media")->setEnabled(editable); // IF all the faces have media (or all dont have media) if ( LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo ) { @@ -1247,10 +1246,10 @@ void LLFloaterTools::getMediaState() mNeedMediaTitle = false; } - childSetEnabled("media_tex", bool_has_media && editable); - childSetEnabled( "edit_media", bool_has_media && LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo && editable ); - childSetEnabled( "delete_media", bool_has_media && editable ); - childSetEnabled( "add_media", ( ! bool_has_media ) && editable ); + getChildView("media_tex")->setEnabled(bool_has_media && editable); + getChildView("edit_media")->setEnabled(bool_has_media && LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo && editable ); + getChildView("delete_media")->setEnabled(bool_has_media && editable ); + getChildView("add_media")->setEnabled(( ! bool_has_media ) && editable ); // TODO: display a list of all media on the face - use 'identical' flag } else // not all face has media but at least one does. @@ -1277,10 +1276,10 @@ void LLFloaterTools::getMediaState() } } - childSetEnabled("media_tex", TRUE); - childSetEnabled( "edit_media", LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo); - childSetEnabled( "delete_media", TRUE); - childSetEnabled( "add_media", FALSE ); + getChildView("media_tex")->setEnabled(TRUE); + getChildView("edit_media")->setEnabled(LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo); + getChildView("delete_media")->setEnabled(TRUE); + getChildView("add_media")->setEnabled(FALSE ); } media_info->setText(media_title); diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp index 84ea353dab..d80f26657d 100644 --- a/indra/newview/llfloatertopobjects.cpp +++ b/indra/newview/llfloatertopobjects.cpp @@ -98,7 +98,7 @@ LLFloaterTopObjects::~LLFloaterTopObjects() BOOL LLFloaterTopObjects::postBuild() { LLScrollListCtrl *objects_list = getChild<LLScrollListCtrl>("objects_list"); - childSetFocus("objects_list"); + getChild<LLUICtrl>("objects_list")->setFocus(TRUE); objects_list->setDoubleClickCallback(onDoubleClickObjectsList, this); objects_list->setCommitOnSelectionChange(TRUE); @@ -253,7 +253,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data) LLUIString format = getString("top_scripts_text"); format.setArg("[COUNT]", llformat("%d", total_count)); format.setArg("[TIME]", llformat("%0.1f", mtotalScore)); - childSetValue("title_text", LLSD(format)); + getChild<LLUICtrl>("title_text")->setValue(LLSD(format)); } else { @@ -262,7 +262,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data) list->setColumnLabel("mono_time", ""); LLUIString format = getString("top_colliders_text"); format.setArg("[COUNT]", llformat("%d", total_count)); - childSetValue("title_text", LLSD(format)); + getChild<LLUICtrl>("title_text")->setValue(LLSD(format)); } } @@ -282,13 +282,13 @@ void LLFloaterTopObjects::updateSelectionInfo() std::string object_id_string = object_id.asString(); - childSetValue("id_editor", LLSD(object_id_string)); + getChild<LLUICtrl>("id_editor")->setValue(LLSD(object_id_string)); LLScrollListItem* sli = list->getFirstSelected(); llassert(sli); if (sli) { - childSetValue("object_name_editor", sli->getColumn(1)->getValue().asString()); - childSetValue("owner_name_editor", sli->getColumn(2)->getValue().asString()); + getChild<LLUICtrl>("object_name_editor")->setValue(sli->getColumn(1)->getValue().asString()); + getChild<LLUICtrl>("owner_name_editor")->setValue(sli->getColumn(2)->getValue().asString()); } } @@ -312,7 +312,7 @@ void LLFloaterTopObjects::doToObjects(int action, bool all) LLViewerRegion* region = gAgent.getRegion(); if (!region) return; - LLCtrlListInterface *list = childGetListInterface("objects_list"); + LLCtrlListInterface *list = getChild<LLUICtrl>("objects_list")->getListInterface(); if (!list || list->getItemCount() == 0) return; uuid_vec_t::iterator id_itor; @@ -457,14 +457,14 @@ void LLFloaterTopObjects::onRefresh() void LLFloaterTopObjects::onGetByObjectName() { mFlags = STAT_FILTER_BY_OBJECT; - mFilter = childGetText("object_name_editor"); + mFilter = getChild<LLUICtrl>("object_name_editor")->getValue().asString(); onRefresh(); } void LLFloaterTopObjects::onGetByOwnerName() { mFlags = STAT_FILTER_BY_OWNER; - mFilter = childGetText("owner_name_editor"); + mFilter = getChild<LLUICtrl>("owner_name_editor")->getValue().asString(); onRefresh(); } diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp index 104827f4a3..b4c6f7da9e 100644 --- a/indra/newview/llfloatertos.cpp +++ b/indra/newview/llfloatertos.cpp @@ -199,8 +199,8 @@ void LLFloaterTOS::draw() void LLFloaterTOS::updateAgree(LLUICtrl*, void* userdata ) { LLFloaterTOS* self = (LLFloaterTOS*) userdata; - bool agree = self->childGetValue("agree_chk").asBoolean(); - self->childSetEnabled("Continue", agree); + bool agree = self->getChild<LLUICtrl>("agree_chk")->getValue().asBoolean(); + self->getChildView("Continue")->setEnabled(agree); } // static diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index 1b6ef0e97a..41f4580495 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -475,7 +475,7 @@ BOOL LLFloaterUIPreview::postBuild() // Set up overlap panel mOverlapPanel = getChild<LLOverlapPanel>("overlap_panel"); - childSetVisible("overlap_scroll", mHighlightingOverlaps); + getChildView("overlap_scroll")->setVisible( mHighlightingOverlaps); mDelim = gDirUtilp->getDirDelimiter(); // initialize delimiter to dir sep slash @@ -1699,7 +1699,7 @@ void LLFloaterUIPreview::onClickToggleOverlapping() setRect(LLRect(getRect().mLeft,getRect().mTop,getRect().mRight + mOverlapPanel->getRect().getWidth(),getRect().mBottom)); setResizeLimits(width + mOverlapPanel->getRect().getWidth(), height); } - childSetVisible("overlap_scroll", mHighlightingOverlaps); + getChildView("overlap_scroll")->setVisible( mHighlightingOverlaps); } void LLFloaterUIPreview::findOverlapsInChildren(LLView* parent) diff --git a/indra/newview/llfloaterurldisplay.cpp b/indra/newview/llfloaterurldisplay.cpp deleted file mode 100644 index 4b67cbb308..0000000000 --- a/indra/newview/llfloaterurldisplay.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/** - * @file llfloaterurldisplay.h - * @brief Probably should be called LLFloaterTeleport, or LLFloaterLandmark - * as it gives you a preview of a potential teleport location. - * - * $LicenseInfo:firstyear=2007&license=viewergpl$ - * - * Copyright (c) 2007-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" - -#include "llregionhandle.h" -#include "v3dmath.h" - -#include "llfloaterurldisplay.h" - -#include "llpanelplace.h" -#include "lluictrlfactory.h" - -//////////////////////////////////////////////////////////////////////////// -// LLFloaterURLDisplay - - -LLFloaterURLDisplay::LLFloaterURLDisplay(const LLSD& sd) - : LLFloater(sd) -{ - mFactoryMap["place_details_panel"] = LLCallbackMap(LLFloaterURLDisplay::createPlaceDetail, this); -// LLUICtrlFactory::getInstance()->buildFloater(this, "floater_preview_url.xml"); - - // If positioned at 0,0 the teleport button is behind the toolbar. - LLRect r = getRect(); - if (r.mBottom == 0 && r.mLeft == 0) - { - // first use, center it - center(); - } - else - { - gFloaterView->adjustToFitScreen(this, FALSE); - } -} - -LLFloaterURLDisplay::~LLFloaterURLDisplay() -{ -} - -void LLFloaterURLDisplay::displayParcelInfo(U64 region_handle, const LLVector3& pos_local) -{ - mRegionHandle = region_handle; - mRegionPosition = pos_local; - LLVector3d pos_global = from_region_handle(region_handle); - pos_global += (LLVector3d)pos_local; - - LLUUID region_id; // don't know this - LLUUID landmark_asset_id; // don't know this either - mPlacePanel->displayParcelInfo(pos_local, landmark_asset_id, region_id, pos_global); - - this->setVisible(true); - this->setFrontmost(true); -} - -void LLFloaterURLDisplay::setSnapshotDisplay(const LLUUID& snapshot_id) -{ - mPlacePanel->setSnapshot(snapshot_id); -} - -void LLFloaterURLDisplay::setName(const std::string& name) -{ // Set the name and also clear description - mPlacePanel->resetName(name); -} - -void LLFloaterURLDisplay::setLocationString(const std::string& name) -{ - mPlacePanel->setLocationString(name); -} - -// static -void* LLFloaterURLDisplay::createPlaceDetail(void* userdata) -{ - LLFloaterURLDisplay *self = (LLFloaterURLDisplay*)userdata; - self->mPlacePanel = new LLPanelPlace(); - LLUICtrlFactory::getInstance()->buildPanel(self->mPlacePanel, "panel_place.xml"); - - return self->mPlacePanel; -} diff --git a/indra/newview/llfloaterurldisplay.h b/indra/newview/llfloaterurldisplay.h deleted file mode 100644 index 22f5a95ad0..0000000000 --- a/indra/newview/llfloaterurldisplay.h +++ /dev/null @@ -1,64 +0,0 @@ -/** - * @file llfloaterurldisplay.h - * @brief LLFloaterURLDisplay class implementation - * - * $LicenseInfo:firstyear=2006&license=viewergpl$ - * - * Copyright (c) 2006-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#ifndef LL_LLFLOATERURLDISPLAY_H -#define LL_LLFLOATERURLDISPLAY_H - -#include "llfloater.h" -#include "v3math.h" - -class LLPanelPlace; -class LLSD; -class LLUUID; - -class LLFloaterURLDisplay : public LLFloater -{ - friend class LLFloaterReg; -public: - - void displayParcelInfo(U64 region_handle, const LLVector3& pos); - void setSnapshotDisplay(const LLUUID& snapshot_id); - void setName(const std::string& name); - void setLocationString(const std::string& name); - - static void* createPlaceDetail(void* userdata); - -private: - LLFloaterURLDisplay(const LLSD& sd); - virtual ~LLFloaterURLDisplay(); - - LLVector3 mRegionPosition; - U64 mRegionHandle; - LLPanelPlace* mPlacePanel; -}; - -#endif // LL_LLFLOATERURLDISPLAY_H diff --git a/indra/newview/llfloaterurlentry.cpp b/indra/newview/llfloaterurlentry.cpp index 0e802e9736..fa871d84a6 100644 --- a/indra/newview/llfloaterurlentry.cpp +++ b/indra/newview/llfloaterurlentry.cpp @@ -111,7 +111,7 @@ BOOL LLFloaterURLEntry::postBuild() // clear media list button LLSD parcel_history = LLURLHistory::getURLHistory("parcel"); bool enable_clear_button = parcel_history.size() > 0 ? true : false; - childSetEnabled( "clear_btn", enable_clear_button ); + getChildView("clear_btn")->setEnabled(enable_clear_button ); // OK button childSetAction("ok_btn", onBtnOK, this); @@ -163,7 +163,7 @@ void LLFloaterURLEntry::headerFetchComplete(U32 status, const std::string& mime_ } // Decrement the cursor getWindow()->decBusyCount(); - childSetVisible("loading_label", false); + getChildView("loading_label")->setVisible( false); closeFloater(); } @@ -236,13 +236,13 @@ void LLFloaterURLEntry::onBtnOK( void* userdata ) } // Grey the buttons until we get the header response - self->childSetEnabled("ok_btn", false); - self->childSetEnabled("cancel_btn", false); - self->childSetEnabled("media_entry", false); + self->getChildView("ok_btn")->setEnabled(false); + self->getChildView("cancel_btn")->setEnabled(false); + self->getChildView("media_entry")->setEnabled(false); // show progress bar here? getWindow()->incBusyCount(); - self->childSetVisible("loading_label", true); + self->getChildView("loading_label")->setVisible( true); } // static @@ -284,7 +284,7 @@ bool LLFloaterURLEntry::callback_clear_url_list(const LLSD& notification, const LLURLHistory::clear("parcel"); // cleared the list so disable Clear button - childSetEnabled( "clear_btn", false ); + getChildView("clear_btn")->setEnabled(false ); } return false; } diff --git a/indra/newview/llfloatervoicedevicesettings.cpp b/indra/newview/llfloatervoicedevicesettings.cpp index 63365e3461..036ef32016 100644 --- a/indra/newview/llfloatervoicedevicesettings.cpp +++ b/indra/newview/llfloatervoicedevicesettings.cpp @@ -103,7 +103,7 @@ void LLPanelVoiceDeviceSettings::draw() // let user know that volume indicator is not yet available bool is_in_tuning_mode = LLVoiceClient::getInstance()->inTuningMode(); - childSetVisible("wait_text", !is_in_tuning_mode); + getChildView("wait_text")->setVisible( !is_in_tuning_mode); LLPanel::draw(); @@ -227,7 +227,23 @@ void LLPanelVoiceDeviceSettings::refresh() iter != LLVoiceClient::getInstance()->getCaptureDevices().end(); iter++) { - mCtrlInputDevices->add( *iter, ADD_BOTTOM ); + // Lets try to localize some system device names. EXT-8375 + std::string device_name = *iter; + LLStringUtil::toLower(device_name); //compare in low case + if ("default system device" == device_name) + { + device_name = getString(device_name); + } + else if ("no device" == device_name) + { + device_name = getString(device_name); + } + else + { + // restore original value + device_name = *iter; + } + mCtrlInputDevices->add(device_name, ADD_BOTTOM ); } if(!mCtrlInputDevices->setSimple(mInputDevice)) @@ -244,7 +260,23 @@ void LLPanelVoiceDeviceSettings::refresh() for(iter= LLVoiceClient::getInstance()->getRenderDevices().begin(); iter != LLVoiceClient::getInstance()->getRenderDevices().end(); iter++) { - mCtrlOutputDevices->add( *iter, ADD_BOTTOM ); + // Lets try to localize some system device names. EXT-8375 + std::string device_name = *iter; + LLStringUtil::toLower(device_name); //compare in low case + if ("default system device" == device_name) + { + device_name = getString(device_name); + } + else if ("no device" == device_name) + { + device_name = getString(device_name); + } + else + { + // restore original value + device_name = *iter; + } + mCtrlOutputDevices->add(device_name, ADD_BOTTOM ); } if(!mCtrlOutputDevices->setSimple(mOutputDevice)) diff --git a/indra/newview/llfloatervoiceeffect.cpp b/indra/newview/llfloatervoiceeffect.cpp index 61fe50e301..160c15bc34 100644 --- a/indra/newview/llfloatervoiceeffect.cpp +++ b/indra/newview/llfloatervoiceeffect.cpp @@ -66,7 +66,7 @@ BOOL LLFloaterVoiceEffect::postBuild() { setDefaultBtn("record_btn"); getChild<LLButton>("record_btn")->setFocus(true); - childSetTextArg("voice_morphing_link", "[URL]", LLTrans::getString("voice_morphing_url")); + getChild<LLUICtrl>("voice_morphing_link")->setTextArg("[URL]", LLTrans::getString("voice_morphing_url")); mVoiceEffectList = getChild<LLScrollListCtrl>("voice_effect_list"); if (mVoiceEffectList) diff --git a/indra/newview/llfloaterwater.cpp b/indra/newview/llfloaterwater.cpp index 1bbee2625c..0f0d85cacb 100644 --- a/indra/newview/llfloaterwater.cpp +++ b/indra/newview/llfloaterwater.cpp @@ -210,7 +210,7 @@ void LLFloaterWater::syncMenu() param_mgr->mFogColor = current_params.getVector4(param_mgr->mFogColor.mName, err); LLColor4 col = param_mgr->getFogColor(); - childSetValue("WaterGlow", col.mV[3]); + getChild<LLUICtrl>("WaterGlow")->setValue(col.mV[3]); col.mV[3] = 1.0f; LLColorSwatchCtrl* colCtrl = getChild<LLColorSwatchCtrl>("WaterFogColor"); @@ -221,41 +221,41 @@ void LLFloaterWater::syncMenu() log(current_params.getFloat(param_mgr->mFogDensity.mName, err)) / log(param_mgr->mFogDensity.mBase); param_mgr->setDensitySliderValue(param_mgr->mFogDensity.mExp); - childSetValue("WaterFogDensity", param_mgr->mFogDensity.mExp); + getChild<LLUICtrl>("WaterFogDensity")->setValue(param_mgr->mFogDensity.mExp); param_mgr->mUnderWaterFogMod.mX = current_params.getFloat(param_mgr->mUnderWaterFogMod.mName, err); - childSetValue("WaterUnderWaterFogMod", param_mgr->mUnderWaterFogMod.mX); + getChild<LLUICtrl>("WaterUnderWaterFogMod")->setValue(param_mgr->mUnderWaterFogMod.mX); param_mgr->mNormalScale = current_params.getVector3(param_mgr->mNormalScale.mName, err); - childSetValue("WaterNormalScaleX", param_mgr->mNormalScale.mX); - childSetValue("WaterNormalScaleY", param_mgr->mNormalScale.mY); - childSetValue("WaterNormalScaleZ", param_mgr->mNormalScale.mZ); + getChild<LLUICtrl>("WaterNormalScaleX")->setValue(param_mgr->mNormalScale.mX); + getChild<LLUICtrl>("WaterNormalScaleY")->setValue(param_mgr->mNormalScale.mY); + getChild<LLUICtrl>("WaterNormalScaleZ")->setValue(param_mgr->mNormalScale.mZ); // Fresnel param_mgr->mFresnelScale.mX = current_params.getFloat(param_mgr->mFresnelScale.mName, err); - childSetValue("WaterFresnelScale", param_mgr->mFresnelScale.mX); + getChild<LLUICtrl>("WaterFresnelScale")->setValue(param_mgr->mFresnelScale.mX); param_mgr->mFresnelOffset.mX = current_params.getFloat(param_mgr->mFresnelOffset.mName, err); - childSetValue("WaterFresnelOffset", param_mgr->mFresnelOffset.mX); + getChild<LLUICtrl>("WaterFresnelOffset")->setValue(param_mgr->mFresnelOffset.mX); // Scale Above/Below param_mgr->mScaleAbove.mX = current_params.getFloat(param_mgr->mScaleAbove.mName, err); - childSetValue("WaterScaleAbove", param_mgr->mScaleAbove.mX); + getChild<LLUICtrl>("WaterScaleAbove")->setValue(param_mgr->mScaleAbove.mX); param_mgr->mScaleBelow.mX = current_params.getFloat(param_mgr->mScaleBelow.mName, err); - childSetValue("WaterScaleBelow", param_mgr->mScaleBelow.mX); + getChild<LLUICtrl>("WaterScaleBelow")->setValue(param_mgr->mScaleBelow.mX); // blur mult param_mgr->mBlurMultiplier.mX = current_params.getFloat(param_mgr->mBlurMultiplier.mName, err); - childSetValue("WaterBlurMult", param_mgr->mBlurMultiplier.mX); + getChild<LLUICtrl>("WaterBlurMult")->setValue(param_mgr->mBlurMultiplier.mX); // wave directions param_mgr->mWave1Dir = current_params.getVector2(param_mgr->mWave1Dir.mName, err); - childSetValue("WaterWave1DirX", param_mgr->mWave1Dir.mX); - childSetValue("WaterWave1DirY", param_mgr->mWave1Dir.mY); + getChild<LLUICtrl>("WaterWave1DirX")->setValue(param_mgr->mWave1Dir.mX); + getChild<LLUICtrl>("WaterWave1DirY")->setValue(param_mgr->mWave1Dir.mY); param_mgr->mWave2Dir = current_params.getVector2(param_mgr->mWave2Dir.mName, err); - childSetValue("WaterWave2DirX", param_mgr->mWave2Dir.mX); - childSetValue("WaterWave2DirY", param_mgr->mWave2Dir.mY); + getChild<LLUICtrl>("WaterWave2DirX")->setValue(param_mgr->mWave2Dir.mX); + getChild<LLUICtrl>("WaterWave2DirY")->setValue(param_mgr->mWave2Dir.mY); LLTextureCtrl* textCtrl = getChild<LLTextureCtrl>("WaterNormalMap"); textCtrl->setImageAssetID(param_mgr->getNormalMapID()); @@ -339,7 +339,7 @@ void LLFloaterWater::onColorControlRMoved(LLUICtrl* ctrl, WaterColorControl* col std::string name = colorControl->mSliderName; name.append("I"); - childSetValue(name, colorControl->mR); + getChild<LLUICtrl>(name)->setValue(colorControl->mR); } colorControl->update(LLWaterParamManager::instance()->mCurParams); @@ -362,7 +362,7 @@ void LLFloaterWater::onColorControlGMoved(LLUICtrl* ctrl, WaterColorControl* col std::string name = colorControl->mSliderName; name.append("I"); - childSetValue(name, colorControl->mG); + getChild<LLUICtrl>(name)->setValue(colorControl->mG); } @@ -386,7 +386,7 @@ void LLFloaterWater::onColorControlBMoved(LLUICtrl* ctrl, WaterColorControl* col std::string name = colorControl->mSliderName; name.append("I"); - childSetValue(name, colorControl->mB); + getChild<LLUICtrl>(name)->setValue(colorControl->mB); } colorControl->update(LLWaterParamManager::instance()->mCurParams); @@ -455,9 +455,9 @@ void LLFloaterWater::onColorControlIMoved(LLUICtrl* ctrl, WaterColorControl* col } // set the sliders to the new vals - childSetValue(rName, colorControl->mR); - childSetValue(gName, colorControl->mG); - childSetValue(bName, colorControl->mB); + getChild<LLUICtrl>(rName)->setValue(colorControl->mR); + getChild<LLUICtrl>(gName)->setValue(colorControl->mG); + getChild<LLUICtrl>(bName)->setValue(colorControl->mB); } // now update the current parameters and send them to shaders diff --git a/indra/newview/llfloaterwindlight.cpp b/indra/newview/llfloaterwindlight.cpp index c1b15c578c..c8ea6e406b 100644 --- a/indra/newview/llfloaterwindlight.cpp +++ b/indra/newview/llfloaterwindlight.cpp @@ -278,31 +278,31 @@ void LLFloaterWindLight::syncMenu() // blue horizon param_mgr->mBlueHorizon = currentParams.getVector(param_mgr->mBlueHorizon.mName, err); - childSetValue("WLBlueHorizonR", param_mgr->mBlueHorizon.r / 2.0); - childSetValue("WLBlueHorizonG", param_mgr->mBlueHorizon.g / 2.0); - childSetValue("WLBlueHorizonB", param_mgr->mBlueHorizon.b / 2.0); - childSetValue("WLBlueHorizonI", + getChild<LLUICtrl>("WLBlueHorizonR")->setValue(param_mgr->mBlueHorizon.r / 2.0); + getChild<LLUICtrl>("WLBlueHorizonG")->setValue(param_mgr->mBlueHorizon.g / 2.0); + getChild<LLUICtrl>("WLBlueHorizonB")->setValue(param_mgr->mBlueHorizon.b / 2.0); + getChild<LLUICtrl>("WLBlueHorizonI")->setValue( std::max(param_mgr->mBlueHorizon.r / 2.0, std::max(param_mgr->mBlueHorizon.g / 2.0, param_mgr->mBlueHorizon.b / 2.0))); // haze density, horizon, mult, and altitude param_mgr->mHazeDensity = currentParams.getVector(param_mgr->mHazeDensity.mName, err); - childSetValue("WLHazeDensity", param_mgr->mHazeDensity.r); + getChild<LLUICtrl>("WLHazeDensity")->setValue(param_mgr->mHazeDensity.r); param_mgr->mHazeHorizon = currentParams.getVector(param_mgr->mHazeHorizon.mName, err); - childSetValue("WLHazeHorizon", param_mgr->mHazeHorizon.r); + getChild<LLUICtrl>("WLHazeHorizon")->setValue(param_mgr->mHazeHorizon.r); param_mgr->mDensityMult = currentParams.getVector(param_mgr->mDensityMult.mName, err); - childSetValue("WLDensityMult", param_mgr->mDensityMult.x * + getChild<LLUICtrl>("WLDensityMult")->setValue(param_mgr->mDensityMult.x * param_mgr->mDensityMult.mult); param_mgr->mMaxAlt = currentParams.getVector(param_mgr->mMaxAlt.mName, err); - childSetValue("WLMaxAltitude", param_mgr->mMaxAlt.x); + getChild<LLUICtrl>("WLMaxAltitude")->setValue(param_mgr->mMaxAlt.x); // blue density param_mgr->mBlueDensity = currentParams.getVector(param_mgr->mBlueDensity.mName, err); - childSetValue("WLBlueDensityR", param_mgr->mBlueDensity.r / 2.0); - childSetValue("WLBlueDensityG", param_mgr->mBlueDensity.g / 2.0); - childSetValue("WLBlueDensityB", param_mgr->mBlueDensity.b / 2.0); - childSetValue("WLBlueDensityI", + getChild<LLUICtrl>("WLBlueDensityR")->setValue(param_mgr->mBlueDensity.r / 2.0); + getChild<LLUICtrl>("WLBlueDensityG")->setValue(param_mgr->mBlueDensity.g / 2.0); + getChild<LLUICtrl>("WLBlueDensityB")->setValue(param_mgr->mBlueDensity.b / 2.0); + getChild<LLUICtrl>("WLBlueDensityI")->setValue( std::max(param_mgr->mBlueDensity.r / 2.0, std::max(param_mgr->mBlueDensity.g / 2.0, param_mgr->mBlueDensity.b / 2.0))); @@ -310,93 +310,93 @@ void LLFloaterWindLight::syncMenu() // sunlight param_mgr->mSunlight = currentParams.getVector(param_mgr->mSunlight.mName, err); - childSetValue("WLSunlightR", param_mgr->mSunlight.r / WL_SUN_AMBIENT_SLIDER_SCALE); - childSetValue("WLSunlightG", param_mgr->mSunlight.g / WL_SUN_AMBIENT_SLIDER_SCALE); - childSetValue("WLSunlightB", param_mgr->mSunlight.b / WL_SUN_AMBIENT_SLIDER_SCALE); - childSetValue("WLSunlightI", + getChild<LLUICtrl>("WLSunlightR")->setValue(param_mgr->mSunlight.r / WL_SUN_AMBIENT_SLIDER_SCALE); + getChild<LLUICtrl>("WLSunlightG")->setValue(param_mgr->mSunlight.g / WL_SUN_AMBIENT_SLIDER_SCALE); + getChild<LLUICtrl>("WLSunlightB")->setValue(param_mgr->mSunlight.b / WL_SUN_AMBIENT_SLIDER_SCALE); + getChild<LLUICtrl>("WLSunlightI")->setValue( std::max(param_mgr->mSunlight.r / WL_SUN_AMBIENT_SLIDER_SCALE, std::max(param_mgr->mSunlight.g / WL_SUN_AMBIENT_SLIDER_SCALE, param_mgr->mSunlight.b / WL_SUN_AMBIENT_SLIDER_SCALE))); // glow param_mgr->mGlow = currentParams.getVector(param_mgr->mGlow.mName, err); - childSetValue("WLGlowR", 2 - param_mgr->mGlow.r / 20.0f); - childSetValue("WLGlowB", -param_mgr->mGlow.b / 5.0f); + getChild<LLUICtrl>("WLGlowR")->setValue(2 - param_mgr->mGlow.r / 20.0f); + getChild<LLUICtrl>("WLGlowB")->setValue(-param_mgr->mGlow.b / 5.0f); // ambient param_mgr->mAmbient = currentParams.getVector(param_mgr->mAmbient.mName, err); - childSetValue("WLAmbientR", param_mgr->mAmbient.r / WL_SUN_AMBIENT_SLIDER_SCALE); - childSetValue("WLAmbientG", param_mgr->mAmbient.g / WL_SUN_AMBIENT_SLIDER_SCALE); - childSetValue("WLAmbientB", param_mgr->mAmbient.b / WL_SUN_AMBIENT_SLIDER_SCALE); - childSetValue("WLAmbientI", + getChild<LLUICtrl>("WLAmbientR")->setValue(param_mgr->mAmbient.r / WL_SUN_AMBIENT_SLIDER_SCALE); + getChild<LLUICtrl>("WLAmbientG")->setValue(param_mgr->mAmbient.g / WL_SUN_AMBIENT_SLIDER_SCALE); + getChild<LLUICtrl>("WLAmbientB")->setValue(param_mgr->mAmbient.b / WL_SUN_AMBIENT_SLIDER_SCALE); + getChild<LLUICtrl>("WLAmbientI")->setValue( std::max(param_mgr->mAmbient.r / WL_SUN_AMBIENT_SLIDER_SCALE, std::max(param_mgr->mAmbient.g / WL_SUN_AMBIENT_SLIDER_SCALE, param_mgr->mAmbient.b / WL_SUN_AMBIENT_SLIDER_SCALE))); - childSetValue("WLSunAngle", param_mgr->mCurParams.getFloat("sun_angle",err) / F_TWO_PI); - childSetValue("WLEastAngle", param_mgr->mCurParams.getFloat("east_angle",err) / F_TWO_PI); + getChild<LLUICtrl>("WLSunAngle")->setValue(param_mgr->mCurParams.getFloat("sun_angle",err) / F_TWO_PI); + getChild<LLUICtrl>("WLEastAngle")->setValue(param_mgr->mCurParams.getFloat("east_angle",err) / F_TWO_PI); // Clouds // Cloud Color param_mgr->mCloudColor = currentParams.getVector(param_mgr->mCloudColor.mName, err); - childSetValue("WLCloudColorR", param_mgr->mCloudColor.r); - childSetValue("WLCloudColorG", param_mgr->mCloudColor.g); - childSetValue("WLCloudColorB", param_mgr->mCloudColor.b); - childSetValue("WLCloudColorI", + getChild<LLUICtrl>("WLCloudColorR")->setValue(param_mgr->mCloudColor.r); + getChild<LLUICtrl>("WLCloudColorG")->setValue(param_mgr->mCloudColor.g); + getChild<LLUICtrl>("WLCloudColorB")->setValue(param_mgr->mCloudColor.b); + getChild<LLUICtrl>("WLCloudColorI")->setValue( std::max(param_mgr->mCloudColor.r, std::max(param_mgr->mCloudColor.g, param_mgr->mCloudColor.b))); // Cloud param_mgr->mCloudMain = currentParams.getVector(param_mgr->mCloudMain.mName, err); - childSetValue("WLCloudX", param_mgr->mCloudMain.r); - childSetValue("WLCloudY", param_mgr->mCloudMain.g); - childSetValue("WLCloudDensity", param_mgr->mCloudMain.b); + getChild<LLUICtrl>("WLCloudX")->setValue(param_mgr->mCloudMain.r); + getChild<LLUICtrl>("WLCloudY")->setValue(param_mgr->mCloudMain.g); + getChild<LLUICtrl>("WLCloudDensity")->setValue(param_mgr->mCloudMain.b); // Cloud Detail param_mgr->mCloudDetail = currentParams.getVector(param_mgr->mCloudDetail.mName, err); - childSetValue("WLCloudDetailX", param_mgr->mCloudDetail.r); - childSetValue("WLCloudDetailY", param_mgr->mCloudDetail.g); - childSetValue("WLCloudDetailDensity", param_mgr->mCloudDetail.b); + getChild<LLUICtrl>("WLCloudDetailX")->setValue(param_mgr->mCloudDetail.r); + getChild<LLUICtrl>("WLCloudDetailY")->setValue(param_mgr->mCloudDetail.g); + getChild<LLUICtrl>("WLCloudDetailDensity")->setValue(param_mgr->mCloudDetail.b); // Cloud extras param_mgr->mCloudCoverage = currentParams.getVector(param_mgr->mCloudCoverage.mName, err); param_mgr->mCloudScale = currentParams.getVector(param_mgr->mCloudScale.mName, err); - childSetValue("WLCloudCoverage", param_mgr->mCloudCoverage.x); - childSetValue("WLCloudScale", param_mgr->mCloudScale.x); + getChild<LLUICtrl>("WLCloudCoverage")->setValue(param_mgr->mCloudCoverage.x); + getChild<LLUICtrl>("WLCloudScale")->setValue(param_mgr->mCloudScale.x); // cloud scrolling bool lockX = !param_mgr->mCurParams.getEnableCloudScrollX(); bool lockY = !param_mgr->mCurParams.getEnableCloudScrollY(); - childSetValue("WLCloudLockX", lockX); - childSetValue("WLCloudLockY", lockY); - childSetValue("DrawClassicClouds", gSavedSettings.getBOOL("SkyUseClassicClouds")); + getChild<LLUICtrl>("WLCloudLockX")->setValue(lockX); + getChild<LLUICtrl>("WLCloudLockY")->setValue(lockY); + getChild<LLUICtrl>("DrawClassicClouds")->setValue(gSavedSettings.getBOOL("SkyUseClassicClouds")); // disable if locked, enable if not if(lockX) { - childDisable("WLCloudScrollX"); + getChildView("WLCloudScrollX")->setEnabled(FALSE); } else { - childEnable("WLCloudScrollX"); + getChildView("WLCloudScrollX")->setEnabled(TRUE); } if(lockY) { - childDisable("WLCloudScrollY"); + getChildView("WLCloudScrollY")->setEnabled(FALSE); } else { - childEnable("WLCloudScrollY"); + getChildView("WLCloudScrollY")->setEnabled(TRUE); } // *HACK cloud scrolling is off my an additive of 10 - childSetValue("WLCloudScrollX", param_mgr->mCurParams.getCloudScrollX() - 10.0f); - childSetValue("WLCloudScrollY", param_mgr->mCurParams.getCloudScrollY() - 10.0f); + getChild<LLUICtrl>("WLCloudScrollX")->setValue(param_mgr->mCurParams.getCloudScrollX() - 10.0f); + getChild<LLUICtrl>("WLCloudScrollY")->setValue(param_mgr->mCurParams.getCloudScrollY() - 10.0f); param_mgr->mDistanceMult = currentParams.getVector(param_mgr->mDistanceMult.mName, err); - childSetValue("WLDistanceMult", param_mgr->mDistanceMult.x); + getChild<LLUICtrl>("WLDistanceMult")->setValue(param_mgr->mDistanceMult.x); // Tweak extras param_mgr->mWLGamma = currentParams.getVector(param_mgr->mWLGamma.mName, err); - childSetValue("WLGamma", param_mgr->mWLGamma.x); + getChild<LLUICtrl>("WLGamma")->setValue(param_mgr->mWLGamma.x); - childSetValue("WLStarAlpha", param_mgr->mCurParams.getStarBrightness()); + getChild<LLUICtrl>("WLStarAlpha")->setValue(param_mgr->mCurParams.getStarBrightness()); LLTabContainer* tab = getChild<LLTabContainer>("WindLight Tabs"); LLPanel* panel = getChild<LLPanel>("Scattering"); @@ -428,11 +428,11 @@ void LLFloaterWindLight::onColorControlRMoved(LLUICtrl* ctrl, WLColorControl* co name.append("I"); if(colorControl->isSunOrAmbientColor) { - childSetValue(name, colorControl->r / 3); + getChild<LLUICtrl>(name)->setValue(colorControl->r / 3); } else if(colorControl->isBlueHorizonOrDensity) { - childSetValue(name, colorControl->r / 2); + getChild<LLUICtrl>(name)->setValue(colorControl->r / 2); } else { - childSetValue(name, colorControl->r); + getChild<LLUICtrl>(name)->setValue(colorControl->r); } } @@ -463,11 +463,11 @@ void LLFloaterWindLight::onColorControlGMoved(LLUICtrl* ctrl, WLColorControl* co name.append("I"); if(colorControl->isSunOrAmbientColor) { - childSetValue(name, colorControl->g / 3); + getChild<LLUICtrl>(name)->setValue(colorControl->g / 3); } else if(colorControl->isBlueHorizonOrDensity) { - childSetValue(name, colorControl->g / 2); + getChild<LLUICtrl>(name)->setValue(colorControl->g / 2); } else { - childSetValue(name, colorControl->g); + getChild<LLUICtrl>(name)->setValue(colorControl->g); } } @@ -498,11 +498,11 @@ void LLFloaterWindLight::onColorControlBMoved(LLUICtrl* ctrl, WLColorControl* co name.append("I"); if(colorControl->isSunOrAmbientColor) { - childSetValue(name, colorControl->b / 3); + getChild<LLUICtrl>(name)->setValue(colorControl->b / 3); } else if(colorControl->isBlueHorizonOrDensity) { - childSetValue(name, colorControl->b / 2); + getChild<LLUICtrl>(name)->setValue(colorControl->b / 2); } else { - childSetValue(name, colorControl->b); + getChild<LLUICtrl>(name)->setValue(colorControl->b); } } @@ -572,24 +572,24 @@ void LLFloaterWindLight::onColorControlIMoved(LLUICtrl* ctrl, WLColorControl* co // divide sun color vals by three if(colorControl->isSunOrAmbientColor) { - childSetValue(rName, colorControl->r/3); - childSetValue(gName, colorControl->g/3); - childSetValue(bName, colorControl->b/3); + getChild<LLUICtrl>(rName)->setValue(colorControl->r/3); + getChild<LLUICtrl>(gName)->setValue(colorControl->g/3); + getChild<LLUICtrl>(bName)->setValue(colorControl->b/3); } else if(colorControl->isBlueHorizonOrDensity) { - childSetValue(rName, colorControl->r/2); - childSetValue(gName, colorControl->g/2); - childSetValue(bName, colorControl->b/2); + getChild<LLUICtrl>(rName)->setValue(colorControl->r/2); + getChild<LLUICtrl>(gName)->setValue(colorControl->g/2); + getChild<LLUICtrl>(bName)->setValue(colorControl->b/2); } else { // set the sliders to the new vals - childSetValue(rName, colorControl->r); - childSetValue(gName, colorControl->g); - childSetValue(bName, colorControl->b); + getChild<LLUICtrl>(rName)->setValue(colorControl->r); + getChild<LLUICtrl>(gName)->setValue(colorControl->g); + getChild<LLUICtrl>(bName)->setValue(colorControl->b); } } diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index 983fd97b0b..7fd073ea67 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -206,6 +206,7 @@ LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key) mFactoryMap["objects_mapview"] = LLCallbackMap(createWorldMapView, NULL); //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_world_map.xml", FALSE); + mCommitCallbackRegistrar.add("WMap.Coordinates", boost::bind(&LLFloaterWorldMap::onCoordinatesCommit, this)); mCommitCallbackRegistrar.add("WMap.Location", boost::bind(&LLFloaterWorldMap::onLocationCommit, this)); mCommitCallbackRegistrar.add("WMap.AvatarCombo", boost::bind(&LLFloaterWorldMap::onAvatarComboCommit, this)); mCommitCallbackRegistrar.add("WMap.Landmark", boost::bind(&LLFloaterWorldMap::onLandmarkComboCommit, this)); @@ -247,7 +248,7 @@ BOOL LLFloaterWorldMap::postBuild() landmark_combo->setTextEntryCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) ); mCurZoomVal = log(LLWorldMapView::sMapScale)/log(2.f); - childSetValue("zoom slider", LLWorldMapView::sMapScale); + getChild<LLUICtrl>("zoom slider")->setValue(LLWorldMapView::sMapScale); setDefaultBtn(NULL); @@ -320,7 +321,7 @@ void LLFloaterWorldMap::onOpen(const LLSD& key) const LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); LLInventoryModelBackgroundFetch::instance().start(landmark_folder_id); - childSetFocus("location", TRUE); + getChild<LLUICtrl>("location")->setFocus( TRUE); gFocusMgr.triggerFocusFlash(); buildAvatarIDList(); @@ -336,8 +337,6 @@ void LLFloaterWorldMap::onOpen(const LLSD& key) } } - - // static void LLFloaterWorldMap::reloadIcons(void*) { @@ -358,9 +357,9 @@ BOOL LLFloaterWorldMap::handleScrollWheel(S32 x, S32 y, S32 clicks) { if(mPanel->pointInView(x, y)) { - F32 slider_value = (F32)childGetValue("zoom slider").asReal(); + F32 slider_value = (F32)getChild<LLUICtrl>("zoom slider")->getValue().asReal(); slider_value += ((F32)clicks * -0.3333f); - childSetValue("zoom slider", LLSD(slider_value)); + getChild<LLUICtrl>("zoom slider")->setValue(LLSD(slider_value)); return TRUE; } } @@ -388,32 +387,32 @@ void LLFloaterWorldMap::draw() LLViewerRegion* regionp = gAgent.getRegion(); bool agent_on_prelude = (regionp && regionp->isPrelude()); bool enable_go_home = gAgent.isGodlike() || !agent_on_prelude; - childSetEnabled("Go Home", enable_go_home); + getChildView("Go Home")->setEnabled(enable_go_home); updateLocation(); LLTracker::ETrackingStatus tracking_status = LLTracker::getTrackingStatus(); if (LLTracker::TRACKING_AVATAR == tracking_status) { - childSetColor("avatar_icon", map_track_color); + getChild<LLUICtrl>("avatar_icon")->setColor( map_track_color); } else { - childSetColor("avatar_icon", map_track_disabled_color); + getChild<LLUICtrl>("avatar_icon")->setColor( map_track_disabled_color); } if (LLTracker::TRACKING_LANDMARK == tracking_status) { - childSetColor("landmark_icon", map_track_color); + getChild<LLUICtrl>("landmark_icon")->setColor( map_track_color); } else { - childSetColor("landmark_icon", map_track_disabled_color); + getChild<LLUICtrl>("landmark_icon")->setColor( map_track_disabled_color); } if (LLTracker::TRACKING_LOCATION == tracking_status) { - childSetColor("location_icon", map_track_color); + getChild<LLUICtrl>("location_icon")->setColor( map_track_color); } else { @@ -423,11 +422,11 @@ void LLFloaterWorldMap::draw() double value = fmod(seconds, 2); value = 0.5 + 0.5*cos(value * F_PI); LLColor4 loading_color(0.0, F32(value/2), F32(value), 1.0); - childSetColor("location_icon", loading_color); + getChild<LLUICtrl>("location_icon")->setColor( loading_color); } else { - childSetColor("location_icon", map_track_disabled_color); + getChild<LLUICtrl>("location_icon")->setColor( map_track_disabled_color); } } @@ -437,16 +436,16 @@ void LLFloaterWorldMap::draw() centerOnTarget(TRUE); } - childSetEnabled("Teleport", (BOOL)tracking_status); -// childSetEnabled("Clear", (BOOL)tracking_status); - childSetEnabled("Show Destination", (BOOL)tracking_status || LLWorldMap::getInstance()->isTracking()); - childSetEnabled("copy_slurl", (mSLURL.isValid()) ); + getChildView("Teleport")->setEnabled((BOOL)tracking_status); +// getChildView("Clear")->setEnabled((BOOL)tracking_status); + getChildView("Show Destination")->setEnabled((BOOL)tracking_status || LLWorldMap::getInstance()->isTracking()); + getChildView("copy_slurl")->setEnabled((mSLURL.isValid()) ); setMouseOpaque(TRUE); getDragHandle()->setMouseOpaque(TRUE); //RN: snaps to zoom value because interpolation caused jitter in the text rendering - if (!mZoomTimer.getStarted() && mCurZoomVal != (F32)childGetValue("zoom slider").asReal()) + if (!mZoomTimer.getStarted() && mCurZoomVal != (F32)getChild<LLUICtrl>("zoom slider")->getValue().asReal()) { mZoomTimer.start(); } @@ -456,7 +455,7 @@ void LLFloaterWorldMap::draw() interp = 1.f; mZoomTimer.stop(); } - mCurZoomVal = lerp(mCurZoomVal, (F32)childGetValue("zoom slider").asReal(), interp); + mCurZoomVal = lerp(mCurZoomVal, (F32)getChild<LLUICtrl>("zoom slider")->getValue().asReal(), interp); F32 map_scale = 256.f*pow(2.f, mCurZoomVal); LLWorldMapView::setScale( map_scale ); @@ -464,13 +463,13 @@ void LLFloaterWorldMap::draw() // If above threshold level (i.e. low res) -> Disable all checkboxes // If under threshold level (i.e. high res) -> Enable all checkboxes bool enable = LLWorldMapView::showRegionInfo(); - childSetEnabled("people_chk", enable); - childSetEnabled("infohub_chk", enable); - childSetEnabled("telehub_chk", enable); - childSetEnabled("land_for_sale_chk", enable); - childSetEnabled("event_chk", enable); - childSetEnabled("events_mature_chk", enable); - childSetEnabled("events_adult_chk", enable); + getChildView("people_chk")->setEnabled(enable); + getChildView("infohub_chk")->setEnabled(enable); + getChildView("telehub_chk")->setEnabled(enable); + getChildView("land_for_sale_chk")->setEnabled(enable); + getChildView("event_chk")->setEnabled(enable); + getChildView("events_mature_chk")->setEnabled(enable); + getChildView("events_adult_chk")->setEnabled(enable); LLFloater::draw(); } @@ -494,7 +493,7 @@ void LLFloaterWorldMap::trackAvatar( const LLUUID& avatar_id, const std::string& // convenience. if(gAgent.isGodlike()) { - childSetValue("spin z", LLSD(200.f)); + getChild<LLUICtrl>("spin z")->setValue(LLSD(200.f)); } // Don't re-request info if we already have it or we won't have it in time to teleport if (mTrackedStatus != LLTracker::TRACKING_AVATAR || name != mTrackedAvatarName) @@ -582,6 +581,10 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global) S32 world_y = S32(pos_global.mdV[1] / 256); LLWorldMapMessage::getInstance()->sendMapBlockRequest(world_x, world_y, world_x, world_y, true); setDefaultBtn(""); + + // clicked on a non-region - turn off coord display + enableTeleportCoordsDisplay( false ); + return; } if (sim_info->isDown()) @@ -592,6 +595,10 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global) LLWorldMap::getInstance()->setTrackingInvalid(); LLTracker::stopTracking(NULL); setDefaultBtn(""); + + // clicked on a down region - turn off coord display + enableTeleportCoordsDisplay( false ); + return; } @@ -609,9 +616,40 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global) LLTracker::trackLocation(pos_global, full_name, tooltip); LLWorldMap::getInstance()->cancelTracking(); // The floater is taking over the tracking + LLVector3d coord_pos = LLTracker::getTrackedPositionGlobal(); + updateTeleportCoordsDisplay( coord_pos ); + + // we have a valid region - turn on coord display + enableTeleportCoordsDisplay( true ); + setDefaultBtn("Teleport"); } +// enable/disable teleport destination coordinates +void LLFloaterWorldMap::enableTeleportCoordsDisplay( bool enabled ) +{ + childSetEnabled("teleport_coordinate_x", enabled ); + childSetEnabled("teleport_coordinate_y", enabled ); + childSetEnabled("teleport_coordinate_z", enabled ); +} + +// update display of teleport destination coordinates - pos is in global coordinates +void LLFloaterWorldMap::updateTeleportCoordsDisplay( const LLVector3d& pos ) +{ + // if we're going to update their value, we should also enable them + enableTeleportCoordsDisplay( true ); + + // convert global specified position to a local one + F32 region_local_x = (F32)fmod( pos.mdV[VX], (F64)REGION_WIDTH_METERS ); + F32 region_local_y = (F32)fmod( pos.mdV[VY], (F64)REGION_WIDTH_METERS ); + F32 region_local_z = (F32)fmod( pos.mdV[VZ], (F64)REGION_WIDTH_METERS ); + + // write in the values + childSetValue("teleport_coordinate_x", region_local_x ); + childSetValue("teleport_coordinate_y", region_local_y ); + childSetValue("teleport_coordinate_z", region_local_z ); +} + void LLFloaterWorldMap::updateLocation() { bool gotSimName; @@ -636,7 +674,10 @@ void LLFloaterWorldMap::updateLocation() mSetToUserPosition = FALSE; // Fill out the location field - childSetValue("location", agent_sim_name); + getChild<LLUICtrl>("location")->setValue(agent_sim_name); + + // update the coordinate display with location of avatar in region + updateTeleportCoordsDisplay( agentPos ); // Figure out where user is // Set the current SLURL @@ -666,7 +707,11 @@ void LLFloaterWorldMap::updateLocation() } } - childSetValue("location", sim_name); + getChild<LLUICtrl>("location")->setValue(sim_name); + + // refresh coordinate display to reflect where user clicked. + LLVector3d coord_pos = LLTracker::getTrackedPositionGlobal(); + updateTeleportCoordsDisplay( coord_pos ); // simNameFromPosGlobal can fail, so don't give the user an invalid SLURL if ( gotSimName ) @@ -697,7 +742,7 @@ void LLFloaterWorldMap::trackURL(const std::string& region_name, S32 x_coord, S3 else { // fill in UI based on URL - gFloaterWorldMap->childSetValue("location", region_name); + gFloaterWorldMap->getChild<LLUICtrl>("location")->setValue(region_name); // Save local coords to highlight position after region global // position is returned. @@ -1094,7 +1139,7 @@ void LLFloaterWorldMap::onLocationFocusChanged( LLFocusableElement* focus ) void LLFloaterWorldMap::updateSearchEnabled() { if (childHasKeyboardFocus("location") && - childGetValue("location").asString().length() > 0) + getChild<LLUICtrl>("location")->getValue().asString().length() > 0) { setDefaultBtn("DoSearch"); } @@ -1115,14 +1160,14 @@ void LLFloaterWorldMap::onLocationCommit() mCompletingRegionName = ""; mLastRegionName = ""; - std::string str = childGetValue("location").asString(); + std::string str = getChild<LLUICtrl>("location")->getValue().asString(); // Trim any leading and trailing spaces in the search target std::string saved_str = str; LLStringUtil::trim( str ); if ( str != saved_str ) { // Set the value in the UI if any spaces were removed - childSetValue("location", str); + getChild<LLUICtrl>("location")->setValue(str); } LLStringUtil::toLower(str); @@ -1139,6 +1184,22 @@ void LLFloaterWorldMap::onLocationCommit() } } +void LLFloaterWorldMap::onCoordinatesCommit() +{ + if( mIsClosing ) + { + return; + } + + S32 x_coord = (S32)childGetValue("teleport_coordinate_x").asReal(); + S32 y_coord = (S32)childGetValue("teleport_coordinate_y").asReal(); + S32 z_coord = (S32)childGetValue("teleport_coordinate_z").asReal(); + + const std::string region_name = childGetValue("location").asString(); + + trackURL( region_name, x_coord, y_coord, z_coord ); +} + void LLFloaterWorldMap::onClearBtn() { mTrackedStatus = LLTracker::TRACKING_NOTHING; @@ -1199,6 +1260,9 @@ void LLFloaterWorldMap::centerOnTarget(BOOL animate) else if(LLWorldMap::getInstance()->isTracking()) { pos_global = LLWorldMap::getInstance()->getTrackedPositionGlobal() - gAgentCamera.getCameraPositionGlobal();; + + + } else { @@ -1243,7 +1307,7 @@ void LLFloaterWorldMap::teleport() && av_tracker.haveTrackingInfo() ) { pos_global = av_tracker.getGlobalPos(); - pos_global.mdV[VZ] = childGetValue("spin z"); + pos_global.mdV[VZ] = getChild<LLUICtrl>("spin z")->getValue(); } else if ( LLTracker::TRACKING_LANDMARK == tracking_status) { @@ -1412,7 +1476,7 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim) if (!match.isUndefined()) { list->selectByValue(match); - childSetFocus("search_results"); + getChild<LLUICtrl>("search_results")->setFocus(TRUE); onCommitSearchResult(); } @@ -1460,7 +1524,7 @@ void LLFloaterWorldMap::onCommitSearchResult() pos_global.mdV[VY] += (F64)pos_local.mV[VY]; pos_global.mdV[VZ] = (F64)pos_local.mV[VZ]; - childSetValue("location", sim_name); + getChild<LLUICtrl>("location")->setValue(sim_name); trackLocation(pos_global); setDefaultBtn("Teleport"); break; @@ -1475,13 +1539,13 @@ void LLFloaterWorldMap::onChangeMaturity() bool can_access_mature = gAgent.canAccessMature(); bool can_access_adult = gAgent.canAccessAdult(); - childSetVisible("events_mature_icon", can_access_mature); - childSetVisible("events_mature_label", can_access_mature); - childSetVisible("events_mature_chk", can_access_mature); + getChildView("events_mature_icon")->setVisible( can_access_mature); + getChildView("events_mature_label")->setVisible( can_access_mature); + getChildView("events_mature_chk")->setVisible( can_access_mature); - childSetVisible("events_adult_icon", can_access_adult); - childSetVisible("events_adult_label", can_access_adult); - childSetVisible("events_adult_chk", can_access_adult); + getChildView("events_adult_icon")->setVisible( can_access_adult); + getChildView("events_adult_label")->setVisible( can_access_adult); + getChildView("events_adult_chk")->setVisible( can_access_adult); // disable mature / adult events. if (!can_access_mature) diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h index 550b4ef689..e31bafaf9b 100644 --- a/indra/newview/llfloaterworldmap.h +++ b/indra/newview/llfloaterworldmap.h @@ -149,6 +149,7 @@ protected: void updateSearchEnabled(); void onLocationFocusChanged( LLFocusableElement* ctrl ); void onLocationCommit(); + void onCoordinatesCommit(); void onCommitSearchResult(); void cacheLandmarkPosition(); @@ -160,6 +161,12 @@ private: F32 mCurZoomVal; LLFrameTimer mZoomTimer; + // update display of teleport destination coordinates - pos is in global coordinates + void updateTeleportCoordsDisplay( const LLVector3d& pos ); + + // enable/disable teleport destination coordinates + void enableTeleportCoordsDisplay( bool enabled ); + LLDynamicArray<LLUUID> mLandmarkAssetIDList; LLDynamicArray<LLUUID> mLandmarkItemIDList; diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 87c5a830e9..d37886806b 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -62,6 +62,7 @@ #include "llviewerwindow.h" #include "llvoavatar.h" #include "llfloaterproperties.h" +#include "llnotificationsutil.h" // Linden library includes #include "lldbstrings.h" @@ -104,7 +105,6 @@ void copy_selected_item(void* user_data); void open_selected_items(void* user_data); void properties_selected_items(void* user_data); void paste_items(void* user_data); -void renamer_focus_lost( LLFocusableElement* handler, void* user_data ); //--------------------------------------------------------------------------- @@ -184,7 +184,6 @@ LLFolderView::LLFolderView(const Params& p) mSourceID(p.task_id), mRenameItem( NULL ), mNeedsScroll( FALSE ), - mEnableScroll( true ), mUseLabelSuffix(p.use_label_suffix), mPinningSelectedItem(FALSE), mNeedsAutoSelect( FALSE ), @@ -250,7 +249,7 @@ LLFolderView::LLFolderView(const Params& p) text_p.name(std::string(p.name)); text_p.font(font); text_p.visible(false); - text_p.allow_html(true); + text_p.parse_urls(true); text_p.wrap(true); // allow multiline text. See EXT-7564, EXT-7047 // set text padding the same as in People panel. EXT-7047, EXT-4837 text_p.h_pad(STATUS_TEXT_HPAD); @@ -275,6 +274,8 @@ LLFolderView::LLFolderView(const Params& p) // Destroys the object LLFolderView::~LLFolderView( void ) { + closeRenamer(); + // The release focus call can potentially call the // scrollcontainer, which can potentially be called with a partly // destroyed scollcontainer. Just null it out here, and no worries @@ -290,8 +291,6 @@ LLFolderView::~LLFolderView( void ) LLView::deleteViewByHandle(mPopupMenuHandle); - gViewerWindow->removePopup(mRenamer); - mAutoOpenItems.removeAllNodes(); clearSelection(); mItems.clear(); @@ -998,12 +997,7 @@ void LLFolderView::finishRenamingItem( void ) mRenameItem->rename( mRenamer->getText() ); } - gViewerWindow->removePopup(mRenamer); - - if( mRenameItem ) - { - setSelectionFromRoot( mRenameItem, TRUE ); - } + closeRenamer(); // List is re-sorted alphabeticly, so scroll to make sure the selected item is visible. scrollToShowSelection(); @@ -1011,20 +1005,26 @@ void LLFolderView::finishRenamingItem( void ) void LLFolderView::closeRenamer( void ) { - // will commit current name (which could be same as original name) - mRenamer->setFocus( FALSE ); - mRenamer->setVisible( FALSE ); - gViewerWindow->removePopup(mRenamer); - - if( mRenameItem ) + if (mRenamer && mRenamer->getVisible()) { - setSelectionFromRoot( mRenameItem, TRUE ); - mRenameItem = NULL; + // Triggers onRenamerLost() that actually closes the renamer. + gViewerWindow->removePopup(mRenamer); } } void LLFolderView::removeSelectedItems( void ) { + if (mSelectedItems.empty()) return; + LLSD args; + args["QUESTION"] = LLTrans::getString(mSelectedItems.size() > 1 ? "DeleteItems" : "DeleteItem"); + LLNotificationsUtil::add("DeleteItems", args, LLSD(), boost::bind(&LLFolderView::onItemsRemovalConfirmation, this, _1, _2)); +} + +void LLFolderView::onItemsRemovalConfirmation(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (option != 0) return; // canceled + if(getVisible() && getEnabled()) { // just in case we're removing the renaming item. @@ -1195,7 +1195,7 @@ void LLFolderView::propertiesSelectedItems( void ) void LLFolderView::changeType(LLInventoryModel *model, LLFolderType::EType new_folder_type) { - LLFolderBridge *folder_bridge = LLFolderBridge::sSelf; + LLFolderBridge *folder_bridge = LLFolderBridge::sSelf.get(); if (!folder_bridge) return; LLViewerInventoryCategory *cat = folder_bridge->getCategory(); @@ -1444,8 +1444,7 @@ void LLFolderView::startRenamingSelectedItem( void ) mRenamer->setVisible( TRUE ); // set focus will fail unless item is visible mRenamer->setFocus( TRUE ); - mRenamer->setTopLostCallback(boost::bind(&LLFolderView::onRenamerLost, this, _1)); - mRenamer->setFocusLostCallback(boost::bind(&LLFolderView::onRenamerLost, this, _1)); + mRenamer->setTopLostCallback(boost::bind(&LLFolderView::onRenamerLost, this)); gViewerWindow->addPopup(mRenamer); } } @@ -1874,13 +1873,18 @@ BOOL LLFolderView::handleRightMouseDown( S32 x, S32 y, MASK mask ) } // Successively filter out invalid options - selected_items_t::iterator item_itor; + U32 flags = FIRST_SELECTED_ITEM; - for (item_itor = mSelectedItems.begin(); item_itor != mSelectedItems.end(); ++item_itor) + for (selected_items_t::iterator item_itor = mSelectedItems.begin(); + item_itor != mSelectedItems.end(); + ++item_itor) { - (*item_itor)->buildContextMenu(*menu, flags); + LLFolderViewItem* selected_item = (*item_itor); + selected_item->buildContextMenu(*menu, flags); flags = 0x0; } + + addNoOptions(menu); menu->updateParent(LLMenuGL::sMenuContainer); LLMenuGL::showPopup(this, menu, x, y); @@ -1889,7 +1893,7 @@ BOOL LLFolderView::handleRightMouseDown( S32 x, S32 y, MASK mask ) } else { - if(menu && menu->getVisible()) + if (menu && menu->getVisible()) { menu->setVisible(FALSE); } @@ -1898,6 +1902,37 @@ BOOL LLFolderView::handleRightMouseDown( S32 x, S32 y, MASK mask ) return handled; } +// Add "--no options--" if the menu is completely blank. +BOOL LLFolderView::addNoOptions(LLMenuGL* menu) const +{ + const std::string nooptions_str = "--no options--"; + LLView *nooptions_item = NULL; + + const LLView::child_list_t *list = menu->getChildList(); + for (LLView::child_list_t::const_iterator itor = list->begin(); + itor != list->end(); + ++itor) + { + LLView *menu_item = (*itor); + if (menu_item->getVisible()) + { + return FALSE; + } + std::string name = menu_item->getName(); + if (menu_item->getName() == nooptions_str) + { + nooptions_item = menu_item; + } + } + if (nooptions_item) + { + nooptions_item->setVisible(TRUE); + nooptions_item->setEnabled(FALSE); + return TRUE; + } + return FALSE; +} + BOOL LLFolderView::handleHover( S32 x, S32 y, MASK mask ) { return LLView::handleHover( x, y, mask ); @@ -1930,10 +1965,7 @@ BOOL LLFolderView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, void LLFolderView::deleteAllChildren() { - if(mRenamer == gFocusMgr.getTopCtrl()) - { - gViewerWindow->removePopup(mRenamer); - } + closeRenamer(); LLView::deleteViewByHandle(mPopupMenuHandle); mPopupMenuHandle = LLHandle<LLView>(); mRenamer = NULL; @@ -1944,7 +1976,9 @@ void LLFolderView::deleteAllChildren() void LLFolderView::scrollToShowSelection() { - if (mEnableScroll && mSelectedItems.size()) + // If items are filtered while background fetch is in progress + // scrollbar resets to the first filtered item. See EXT-3981. + if (!LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() && mSelectedItems.size()) { mNeedsScroll = TRUE; } @@ -2416,13 +2450,20 @@ S32 LLFolderView::notify(const LLSD& info) /// Local function definitions ///---------------------------------------------------------------------------- -void LLFolderView::onRenamerLost( LLFocusableElement* renamer) +void LLFolderView::onRenamerLost() { - mRenameItem = NULL; - LLUICtrl* uictrl = dynamic_cast<LLUICtrl*>(renamer); - if (uictrl) + if (mRenamer && mRenamer->getVisible()) + { + mRenamer->setVisible(FALSE); + + // will commit current name (which could be same as original name) + mRenamer->setFocus(FALSE); + } + + if( mRenameItem ) { - uictrl->setVisible(FALSE); + setSelectionFromRoot( mRenameItem, TRUE ); + mRenameItem = NULL; } } diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index 3944fa53c9..21004fdb16 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -262,6 +262,7 @@ public: BOOL needsAutoSelect() { return mNeedsAutoSelect && !mAutoSelectOverride; } BOOL needsAutoRename() { return mNeedsAutoRename; } void setNeedsAutoRename(BOOL val) { mNeedsAutoRename = val; } + void setPinningSelectedItem(BOOL val) { mPinningSelectedItem = val; } void setAutoSelectOverride(BOOL val) { mAutoSelectOverride = val; } void setCallbackRegistrar(LLUICtrl::CommitCallbackRegistry::ScopedRegistrar* registrar) { mCallbackRegistrar = registrar; } @@ -273,7 +274,6 @@ public: void dumpSelectionInformation(); virtual S32 notify(const LLSD& info) ; - void setEnableScroll(bool enable_scroll) { mEnableScroll = enable_scroll; } bool useLabelSuffix() { return mUseLabelSuffix; } private: @@ -283,7 +283,7 @@ protected: LLScrollContainer* mScrollContainer; // NULL if this is not a child of a scroll container. void commitRename( const LLSD& data ); - void onRenamerLost( LLFocusableElement* renamer); + void onRenamerLost(); void finishRenamingItem( void ); void closeRenamer( void ); @@ -291,6 +291,10 @@ protected: bool selectFirstItem(); bool selectLastItem(); + BOOL addNoOptions(LLMenuGL* menu) const; + + void onItemsRemovalConfirmation(const LLSD& notification, const LLSD& response); + protected: LLHandle<LLView> mPopupMenuHandle; @@ -306,7 +310,6 @@ protected: LLLineEditor* mRenamer; BOOL mNeedsScroll; - bool mEnableScroll; BOOL mPinningSelectedItem; LLRect mScrollConstraintRect; BOOL mNeedsAutoSelect; diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp index 7f28e09933..2f4dae0af8 100644 --- a/indra/newview/llfriendcard.cpp +++ b/indra/newview/llfriendcard.cpp @@ -299,6 +299,17 @@ void LLFriendCardsManager::collectFriendsLists(folderid_buddies_map_t& folderBud { folderBuddiesMap.clear(); + static bool syncronize_friends_folders = true; + if (syncronize_friends_folders) + { + // Checks whether "Friends" and "Friends/All" folders exist in "Calling Cards" folder, + // fetches their contents if needed and synchronizes it with buddies list. + // If the folders are not found they are created. + LLFriendCardsManager::instance().syncFriendCardsFolders(); + syncronize_friends_folders = false; + } + + LLInventoryModel::cat_array_t* listFolders; LLInventoryModel::item_array_t* items; diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp index da5196df45..125936b9c7 100644 --- a/indra/newview/llgrouplist.cpp +++ b/indra/newview/llgrouplist.cpp @@ -212,8 +212,8 @@ void LLGroupList::addNewItem(const LLUUID& id, const std::string& name, const LL item->setName(name, mNameFilter); item->setGroupIconID(icon_id); - item->childSetVisible("info_btn", false); - item->childSetVisible("profile_btn", false); + item->getChildView("info_btn")->setVisible( false); + item->getChildView("profile_btn")->setVisible( false); item->setGroupIconVisible(mShowIcons); addItem(item, id, pos); @@ -323,16 +323,16 @@ void LLGroupListItem::setValue( const LLSD& value ) { if (!value.isMap()) return; if (!value.has("selected")) return; - childSetVisible("selected_icon", value["selected"]); + getChildView("selected_icon")->setVisible( value["selected"]); } void LLGroupListItem::onMouseEnter(S32 x, S32 y, MASK mask) { - childSetVisible("hovered_icon", true); + getChildView("hovered_icon")->setVisible( true); if (mGroupID.notNull()) // don't show the info button for the "none" group { mInfoBtn->setVisible(true); - childSetVisible("profile_btn", true); + getChildView("profile_btn")->setVisible( true); } LLPanel::onMouseEnter(x, y, mask); @@ -340,9 +340,9 @@ void LLGroupListItem::onMouseEnter(S32 x, S32 y, MASK mask) void LLGroupListItem::onMouseLeave(S32 x, S32 y, MASK mask) { - childSetVisible("hovered_icon", false); + getChildView("hovered_icon")->setVisible( false); mInfoBtn->setVisible(false); - childSetVisible("profile_btn", false); + getChildView("profile_btn")->setVisible( false); LLPanel::onMouseLeave(x, y, mask); } diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index 996553ccf7..d464b67105 100644 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -903,7 +903,15 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data) if (member_id.notNull()) { - formatDateString(online_status); // reformat for sorting, e.g. 12/25/2008 -> 2008/12/25 + if (online_status == "Online") + { + static std::string localized_online(LLTrans::getString("group_member_status_online")); + online_status = localized_online; + } + else + { + formatDateString(online_status); // reformat for sorting, e.g. 12/25/2008 -> 2008/12/25 + } //llinfos << "Member " << member_id << " has powers " << std::hex << agent_powers << std::dec << llendl; LLGroupMemberData* newdata = new LLGroupMemberData(member_id, diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 21313f9df7..41e505cc58 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -237,6 +237,25 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& new LLSessionTimeoutTimer(mSessionID, SESSION_INITIALIZATION_TIMEOUT); } + // *WORKAROUND: for server hard-coded string in indra\newsim\llsimchatterbox.cpp + if (isAdHocSessionType() && IM_SESSION_INVITE == type) + { + // For an ad-hoc incoming chat name is received from the server and is in a form of "<Avatar's name> Conference" + // Lets update it to localize the "Conference" word. See EXT-8429. + S32 separator_index = mName.rfind(" "); + std::string name = mName.substr(0, separator_index); + ++separator_index; + std::string conference_word = mName.substr(separator_index, mName.length()); + + // additional check that session name is what we expected + if ("Conference" == conference_word) + { + LLStringUtil::format_map_t args; + args["[AGENT_NAME]"] = name; + LLTrans::findString(mName, "conference-title-incoming", args); + } + } + if (IM_NOTHING_SPECIAL == type) { mCallBackEnabled = LLVoiceClient::getInstance()->isSessionCallBackPossible(mSessionID); @@ -1002,19 +1021,6 @@ void LLIMModel::sendMessage(const std::string& utf8_text, if (is_not_group_id) { - -#if 0 - //use this code to add only online members - LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(im_session_id); - LLSpeakerMgr::speaker_list_t speaker_list; - speaker_mgr->getSpeakerList(&speaker_list, true); - for(LLSpeakerMgr::speaker_list_t::iterator it = speaker_list.begin(); it != speaker_list.end(); it++) - { - const LLPointer<LLSpeaker>& speakerp = *it; - - LLRecentPeople::instance().add(speakerp->mID); - } -#else LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(im_session_id); if( session == 0)//??? shouldn't really happen { @@ -1029,16 +1035,20 @@ void LLIMModel::sendMessage(const std::string& utf8_text, // Concrete participants will be added into this list once they sent message in chat. if (IM_SESSION_INVITE == dialog) return; - // implemented adding of all participants of an outgoing to Recent People List. See EXT-5694. - for(uuid_vec_t::iterator it = session->mInitialTargetIDs.begin(); - it!=session->mInitialTargetIDs.end();++it) + // Add only online members to recent (EXT-8658) + LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(im_session_id); + LLSpeakerMgr::speaker_list_t speaker_list; + if(speaker_mgr != NULL) + { + speaker_mgr->getSpeakerList(&speaker_list, true); + } + for(LLSpeakerMgr::speaker_list_t::iterator it = speaker_list.begin(); it != speaker_list.end(); it++) { - const LLUUID id = *it; + const LLPointer<LLSpeaker>& speakerp = *it; - LLRecentPeople::instance().add(id); + LLRecentPeople::instance().add(speakerp->mID); } } -#endif } @@ -1709,12 +1719,12 @@ void LLOutgoingCallDialog::show(const LLSD& key) old_caller_name = LLTextUtil::formatPhoneNumber(old_caller_name); } - childSetTextArg("leaving", "[CURRENT_CHAT]", old_caller_name); + getChild<LLUICtrl>("leaving")->setTextArg("[CURRENT_CHAT]", old_caller_name); show_oldchannel = true; } else { - childSetTextArg("leaving", "[CURRENT_CHAT]", getString("localchat")); + getChild<LLUICtrl>("leaving")->setTextArg("[CURRENT_CHAT]", getString("localchat")); } if (!mPayload["disconnected_channel_name"].asString().empty()) @@ -1724,16 +1734,16 @@ void LLOutgoingCallDialog::show(const LLSD& key) { channel_name = LLTextUtil::formatPhoneNumber(channel_name); } - childSetTextArg("nearby", "[VOICE_CHANNEL_NAME]", channel_name); + getChild<LLUICtrl>("nearby")->setTextArg("[VOICE_CHANNEL_NAME]", channel_name); // skipping "You will now be reconnected to nearby" in notification when call is ended by disabling voice, // so no reconnection to nearby chat happens (EXT-4397) bool voice_works = LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking(); std::string reconnect_nearby = voice_works ? LLTrans::getString("reconnect_nearby") : std::string(); - childSetTextArg("nearby", "[RECONNECT_NEARBY]", reconnect_nearby); + getChild<LLUICtrl>("nearby")->setTextArg("[RECONNECT_NEARBY]", reconnect_nearby); const std::string& nearby_str = mPayload["ended_by_agent"] ? NEARBY_P2P_BY_AGENT : NEARBY_P2P_BY_OTHER; - childSetTextArg(nearby_str, "[RECONNECT_NEARBY]", reconnect_nearby); + getChild<LLUICtrl>(nearby_str)->setTextArg("[RECONNECT_NEARBY]", reconnect_nearby); } std::string callee_name = mPayload["session_name"].asString(); @@ -1753,8 +1763,8 @@ void LLOutgoingCallDialog::show(const LLSD& key) setTitle(callee_name); LLSD callee_id = mPayload["other_user_id"]; - childSetTextArg("calling", "[CALLEE_NAME]", callee_name); - childSetTextArg("connecting", "[CALLEE_NAME]", callee_name); + getChild<LLUICtrl>("calling")->setTextArg("[CALLEE_NAME]", callee_name); + getChild<LLUICtrl>("connecting")->setTextArg("[CALLEE_NAME]", callee_name); // for outgoing group calls callee_id == group id == session id setIcon(callee_id, callee_id); @@ -1939,7 +1949,7 @@ BOOL LLIncomingCallDialog::postBuild() //it's not possible to connect to existing Ad-Hoc/Group chat through incoming ad-hoc call //and no IM for avaline - childSetVisible("Start IM", is_avatar && notify_box_type != "VoiceInviteAdHoc" && notify_box_type != "VoiceInviteGroup"); + getChildView("Start IM")->setVisible( is_avatar && notify_box_type != "VoiceInviteAdHoc" && notify_box_type != "VoiceInviteGroup"); setCanDrag(FALSE); @@ -1963,12 +1973,12 @@ void LLIncomingCallDialog::onOpen(const LLSD& key) if (voice && !voice->getSessionName().empty()) { args["[CURRENT_CHAT]"] = voice->getSessionName(); - childSetText("question", getString(key["question_type"].asString(), args)); + getChild<LLUICtrl>("question")->setValue(getString(key["question_type"].asString(), args)); } else { args["[CURRENT_CHAT]"] = getString("localchat"); - childSetText("question", getString(key["question_type"].asString(), args)); + getChild<LLUICtrl>("question")->setValue(getString(key["question_type"].asString(), args)); } } diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index ffa8a16797..57d31795ca 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -233,7 +233,8 @@ public: * Get a session's name. * For a P2P chat - it's an avatar's name, * For a group chat - it's a group's name - * For an ad-hoc chat - is received from the server and is in a from of "<Avatar's name> conference" + * For an incoming ad-hoc chat - is received from the server and is in a from of "<Avatar's name> Conference" + * It is updated in LLIMModel::LLIMSession's constructor to localize the "Conference". */ const std::string& getName(const LLUUID& session_id) const; diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp index d9fdc876db..3c437907c4 100644 --- a/indra/newview/llinspectavatar.cpp +++ b/indra/newview/llinspectavatar.cpp @@ -371,7 +371,7 @@ void LLInspectAvatar::requestUpdate() //remove avatar id from cache to get fresh info LLAvatarIconIDCache::getInstance()->remove(mAvatarID); - childSetValue("avatar_icon", LLSD(mAvatarID) ); + getChild<LLUICtrl>("avatar_icon")->setValue(LLSD(mAvatarID) ); gCacheName->get(mAvatarID, FALSE, boost::bind(&LLInspectAvatar::nameUpdatedCallback, @@ -621,7 +621,7 @@ void LLInspectAvatar::nameUpdatedCallback( if (id == mAvatarID) { mAvatarName = first + " " + last; - childSetValue("user_name", LLSD(mAvatarName) ); + getChild<LLUICtrl>("user_name")->setValue(LLSD(mAvatarName) ); } } diff --git a/indra/newview/llinspectgroup.cpp b/indra/newview/llinspectgroup.cpp index 7fd7b69021..f054d61262 100644 --- a/indra/newview/llinspectgroup.cpp +++ b/indra/newview/llinspectgroup.cpp @@ -239,7 +239,7 @@ void LLInspectGroup::nameUpdatedCallback( if (id == mGroupID) { // group names are returned as a first name - childSetValue("group_name", LLSD(first) ); + getChild<LLUICtrl>("group_name")->setValue(LLSD(first) ); } // Otherwise possibly a request for an older inspector, ignore it diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 3319bdf9fd..b03947f54d 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -962,6 +962,8 @@ void LLInvFVBridge::purgeItem(LLInventoryModel *model, const LLUUID &uuid) BOOL LLInvFVBridge::canShare() const { + if (!isAgentInventory()) return FALSE; + const LLInventoryModel* model = getInventoryModel(); if (!model) return FALSE; @@ -973,9 +975,10 @@ BOOL LLInvFVBridge::canShare() const return (BOOL)LLGiveInventory::isInventoryGiveAcceptable(item); } - // All categories can be given. - const LLViewerInventoryCategory* cat = model->getCategory(mUUID); - return (cat != NULL); + // Categories can be given. + if (model->getCategory(mUUID)) return TRUE; + + return FALSE; } // +=================================================+ @@ -1277,6 +1280,12 @@ BOOL LLItemBridge::isItemRenameable() const { return FALSE; } + + if (!item->isFinished()) // EXT-8662 + { + return FALSE; + } + return (item->getPermissions().allowModifyBy(gAgent.getID())); } return FALSE; @@ -1454,7 +1463,7 @@ bool LLItemBridge::isRemoveAction(std::string action) const // | LLFolderBridge | // +=================================================+ -LLFolderBridge* LLFolderBridge::sSelf=NULL; +LLHandle<LLFolderBridge> LLFolderBridge::sSelf; // Can be moved to another folder BOOL LLFolderBridge::isItemMovable() const @@ -2401,8 +2410,11 @@ void LLFolderBridge::pasteLinkFromClipboard() void LLFolderBridge::staticFolderOptionsMenu() { - if (!sSelf) return; - sSelf->folderOptionsMenu(); + LLFolderBridge* selfp = sSelf.get(); + if (selfp) + { + selfp->folderOptionsMenu(); + } } void LLFolderBridge::folderOptionsMenu() @@ -2479,11 +2491,15 @@ void LLFolderBridge::folderOptionsMenu() } mItems.push_back(std::string("Outfit Separator")); } - hide_context_entries(*mMenu, mItems, disabled_items, TRUE); + LLMenuGL* menup = dynamic_cast<LLMenuGL*>(mMenu.get()); + if (menup) + { + hide_context_entries(*menup, mItems, disabled_items, TRUE); - // Reposition the menu, in case we're adding items to an existing menu. - mMenu->needsArrange(); - mMenu->arrangeAndClear(); + // Reposition the menu, in case we're adding items to an existing menu. + menup->needsArrange(); + menup->arrangeAndClear(); + } } BOOL LLFolderBridge::checkFolderForContentsOfType(LLInventoryModel* model, LLInventoryCollectFunctor& is_type) @@ -2525,6 +2541,10 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) mDisabledItems.push_back(std::string("New Body Parts")); } + // clear out old menu and folder pointers + mMenu.markDead(); + sSelf.markDead(); + if(trash_id == mUUID) { // This is the trash. @@ -2600,9 +2620,6 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { mWearables=TRUE; } - - mMenu = &menu; - sSelf = this; } // Preemptively disable system folder removal if more than one item selected. @@ -2617,12 +2634,6 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) mDisabledItems.push_back(std::string("Share")); } - if (mItems.empty()) - { - mItems.push_back(std::string("--no options--")); - mDisabledItems.push_back(std::string("--no options--")); - } - hide_context_entries(menu, mItems, mDisabledItems); // Add menu items that are dependent on the contents of the folder. @@ -2632,6 +2643,9 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { folders.push_back(category->getUUID()); } + + mMenu = menu.getHandle(); + sSelf = getHandle(); LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(folders, FALSE); fetch->startFetch(); inc_busy_count(); @@ -3947,7 +3961,7 @@ void LLObjectBridge::performAction(LLInventoryModel* model, std::string action) item = (LLViewerInventoryItem*)gInventory.getItem(object_id); if(item && gInventory.isObjectDescendentOf(object_id, gInventory.getRootFolderID())) { - rez_attachment(item, NULL); + rez_attachment(item, NULL, true); // Replace if "Wear"ing. } else if(item && item->isFinished()) { @@ -3963,23 +3977,16 @@ void LLObjectBridge::performAction(LLInventoryModel* model, std::string action) } gFocusMgr.setKeyboardFocus(NULL); } + else if ("wear_add" == action) + { + LLAppearanceMgr::instance().wearItemOnAvatar(mUUID, true, false); // Don't replace if adding. + } else if (isRemoveAction(action)) { LLInventoryItem* item = gInventory.getItem(mUUID); if(item) { - gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); - gMessageSystem->nextBlockFast(_PREHASH_ObjectData); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - gMessageSystem->addUUIDFast(_PREHASH_ItemID, item->getLinkedUUID()); - gMessageSystem->sendReliable( gAgent.getRegion()->getHost()); - - // this object might have been selected, so let the selection manager know it's gone now - LLViewerObject *found_obj = gObjectList.findObject(item->getLinkedUUID()); - if (found_obj) - { - LLSelectMgr::getInstance()->remove(found_obj); - } + LLVOAvatarSelf::detachAttachmentIntoInventory(item->getLinkedUUID()); } } else LLItemBridge::performAction(model, action); @@ -3996,6 +4003,11 @@ std::string LLObjectBridge::getLabelSuffix() const { if (get_is_item_worn(mUUID)) { + if (!isAgentAvatarValid()) + { + return LLItemBridge::getLabelSuffix() + LLTrans::getString("worn"); + } + std::string attachment_point_name = gAgentAvatarp->getAttachedPointName(mUUID); // e.g. "(worn on ...)" / "(attached to ...)" @@ -4009,10 +4021,19 @@ std::string LLObjectBridge::getLabelSuffix() const } } -void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment) +void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment, bool replace) { - LLSD payload; - payload["item_id"] = item->getLinkedUUID(); // Wear the base object in case this is a link. + const LLUUID& item_id = item->getLinkedUUID(); + + // Check for duplicate request. + if (isAgentAvatarValid() && + (gAgentAvatarp->attachmentWasRequested(item_id) || + gAgentAvatarp->isWearingAttachment(item_id))) + { + llwarns << "duplicate attachment request, ignoring" << llendl; + return; + } + gAgentAvatarp->addAttachmentRequest(item_id); S32 attach_pt = 0; if (isAgentAvatarValid() && attachment) @@ -4028,9 +4049,16 @@ void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attach } } + if (!replace) + { + attach_pt |= ATTACHMENT_ADD; + } + + LLSD payload; + payload["item_id"] = item_id; // Wear the base object in case this is a link. payload["attachment_point"] = attach_pt; - if (!gSavedSettings.getBOOL("MultipleAttachments") && + if (replace && (attachment && attachment->getNumObjects() > 0)) { LLNotificationsUtil::add("ReplaceAttachment", LLSD(), payload, confirm_replace_attachment_rez); @@ -4054,13 +4082,13 @@ bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& respon S32 option = LLNotificationsUtil::getSelectedOption(notification, response); if (option == 0/*YES*/) { - LLViewerInventoryItem* itemp = gInventory.getItem(notification["payload"]["item_id"].asUUID()); + LLUUID item_id = notification["payload"]["item_id"].asUUID(); + LLViewerInventoryItem* itemp = gInventory.getItem(item_id); if (itemp) { U8 attachment_pt = notification["payload"]["attachment_point"].asInteger(); - if (gSavedSettings.getBOOL("MultipleAttachments")) - attachment_pt |= ATTACHMENT_ADD; + LLMessageSystem* msg = gMessageSystem; msg->newMessageFast(_PREHASH_RezSingleAttachmentFromInv); @@ -4117,6 +4145,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { items.push_back(std::string("Wearable And Object Separator")); items.push_back(std::string("Wearable And Object Wear")); + items.push_back(std::string("Wearable Add")); items.push_back(std::string("Attach To")); items.push_back(std::string("Attach To HUD")); // commented out for DEV-32347 @@ -4125,6 +4154,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) if (!gAgentAvatarp->canAttachMoreObjects()) { disabled_items.push_back(std::string("Wearable And Object Wear")); + disabled_items.push_back(std::string("Wearable Add")); disabled_items.push_back(std::string("Attach To")); disabled_items.push_back(std::string("Attach To HUD")); } @@ -4153,7 +4183,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) } LLSD cbparams; cbparams["index"] = curiter->first; - cbparams["label"] = attachment->getName(); + cbparams["label"] = p.name; p.on_click.function_name = "Inventory.AttachObject"; p.on_click.parameter = LLSD(attachment->getName()); p.on_enable.function_name = "Attachment.Label"; @@ -4327,19 +4357,7 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_ LLViewerInventoryItem *obj_item = obj_item_array.get(i); if (get_is_item_worn(obj_item->getUUID())) { - gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); - gMessageSystem->nextBlockFast(_PREHASH_ObjectData ); - gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); - gMessageSystem->addUUIDFast(_PREHASH_ItemID, obj_item->getLinkedUUID() ); - - gMessageSystem->sendReliable( gAgent.getRegion()->getHost() ); - - // this object might have been selected, so let the selection manager know it's gone now - LLViewerObject *found_obj = gObjectList.findObject( obj_item->getLinkedUUID()); - if (found_obj) - { - LLSelectMgr::getInstance()->remove(found_obj); - } + LLVOAvatarSelf::detachAttachmentIntoInventory(obj_item->getLinkedUUID()); } } } diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 12c6a33214..4c6c3ab82f 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -232,8 +232,8 @@ public: const LLUUID& uuid) : LLInvFVBridge(inventory, root, uuid), mCallingCards(FALSE), - mWearables(FALSE), - mMenu(NULL) {} + mWearables(FALSE) + {} BOOL dragItemIntoFolder(LLInventoryItem* inv_item, BOOL drop); BOOL dragCategoryIntoFolder(LLInventoryCategory* inv_category, BOOL drop); @@ -274,6 +274,7 @@ public: static void createWearable(LLFolderBridge* bridge, LLWearableType::EType type); LLViewerInventoryCategory* getCategory() const; + LLHandle<LLFolderBridge> getHandle() { mHandle.bind(this); return mHandle; } protected: //-------------------------------------------------------------------- @@ -307,16 +308,17 @@ protected: // Messy hacks for handling folder options //-------------------------------------------------------------------- public: - static LLFolderBridge* sSelf; + static LLHandle<LLFolderBridge> sSelf; static void staticFolderOptionsMenu(); void folderOptionsMenu(); private: - BOOL mCallingCards; - BOOL mWearables; - LLMenuGL* mMenu; - menuentry_vec_t mItems; - menuentry_vec_t mDisabledItems; + BOOL mCallingCards; + BOOL mWearables; + LLHandle<LLView> mMenu; + menuentry_vec_t mItems; + menuentry_vec_t mDisabledItems; + LLRootHandle<LLFolderBridge> mHandle; }; class LLTextureBridge : public LLItemBridge @@ -625,7 +627,8 @@ public: }; void rez_attachment(LLViewerInventoryItem* item, - LLViewerJointAttachment* attachment); + LLViewerJointAttachment* attachment, + bool replace = false); // Move items from an in-world object's "Contents" folder to a specified // folder in agent inventory. diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 3bd722198d..a44a1fb0f0 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -221,7 +221,13 @@ BOOL get_is_item_worn(const LLUUID& id) const LLViewerInventoryItem* item = gInventory.getItem(id); if (!item) return FALSE; - + + // Consider the item as worn if it has links in COF. + if (LLAppearanceMgr::instance().isLinkInCOF(id)) + { + return TRUE; + } + switch(item->getType()) { case LLAssetType::AT_OBJECT: @@ -250,7 +256,29 @@ BOOL get_can_item_be_worn(const LLUUID& id) const LLViewerInventoryItem* item = gInventory.getItem(id); if (!item) return FALSE; + + if (LLAppearanceMgr::isLinkInCOF(item->getLinkedUUID())) + { + // an item having links in COF (i.e. a worn item) + return FALSE; + } + + if (gInventory.isObjectDescendentOf(id, LLAppearanceMgr::instance().getCOF())) + { + // a non-link object in COF (should not normally happen) + return FALSE; + } + const LLUUID trash_id = gInventory.findCategoryUUIDForType( + LLFolderType::FT_TRASH); + + // item can't be worn if base obj in trash, see EXT-7015 + if (gInventory.isObjectDescendentOf(item->getLinkedUUID(), + trash_id)) + { + return false; + } + switch(item->getType()) { case LLAssetType::AT_OBJECT: diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index 4a7721098d..833ff3bfcd 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -301,6 +301,7 @@ public: virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) { + //converting an inventory type to a bitmap filter mask if(item && (mFilterMask & (1LL << item->getInventoryType())) ) { return true; diff --git a/indra/newview/llinventoryicon.cpp b/indra/newview/llinventoryicon.cpp index 3090371a73..2201481df3 100644 --- a/indra/newview/llinventoryicon.cpp +++ b/indra/newview/llinventoryicon.cpp @@ -117,6 +117,7 @@ const std::string& LLInventoryIcon::getIconName(LLAssetType::EType asset_type, if (item_is_multi) { idx = ICONNAME_OBJECT_MULTI; + return getIconName(idx); } switch(asset_type) diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp index e01f05c0f2..a6d3d4e154 100644 --- a/indra/newview/llinventoryitemslist.cpp +++ b/indra/newview/llinventoryitemslist.cpp @@ -85,6 +85,37 @@ boost::signals2::connection LLInventoryItemsList::setRefreshCompleteCallback(con return mRefreshCompleteSignal.connect(cb); } +bool LLInventoryItemsList::selectItemByValue(const LLSD& value, bool select) +{ + if (!LLFlatListView::selectItemByValue(value, select) && !value.isUndefined()) + { + mSelectTheseIDs.push_back(value); + return false; + } + return true; +} + +void LLInventoryItemsList::updateSelection() +{ + if(mSelectTheseIDs.empty()) return; + + std::vector<LLSD> cur; + getValues(cur); + + for(std::vector<LLSD>::const_iterator cur_id_it = cur.begin(); cur_id_it != cur.end() && !mSelectTheseIDs.empty(); ++cur_id_it) + { + uuid_vec_t::iterator select_ids_it = std::find(mSelectTheseIDs.begin(), mSelectTheseIDs.end(), *cur_id_it); + if(select_ids_it != mSelectTheseIDs.end()) + { + selectItemByUUID(*select_ids_it); + mSelectTheseIDs.erase(select_ids_it); + } + } + + scrollToShowFirstSelectedItem(); + mSelectTheseIDs.clear(); +} + void LLInventoryItemsList::doIdle() { if (!mNeedsRefresh) return; @@ -153,6 +184,12 @@ void LLInventoryItemsList::refresh() bool needs_refresh = add_limit_exceeded; setNeedsRefresh(needs_refresh); setForceRefresh(needs_refresh); + + // After list building completed, select items that had been requested to select before list was build + if(!needs_refresh) + { + updateSelection(); + } } void LLInventoryItemsList::computeDifference( diff --git a/indra/newview/llinventoryitemslist.h b/indra/newview/llinventoryitemslist.h index 71c7b6a675..5800111f46 100644 --- a/indra/newview/llinventoryitemslist.h +++ b/indra/newview/llinventoryitemslist.h @@ -68,6 +68,10 @@ public: */ void setForceRefresh(bool force_refresh){ mForceRefresh = force_refresh; } + virtual bool selectItemByValue(const LLSD& value, bool select = true); + + void updateSelection(); + /** * Idle routine used to refresh the list regardless of the current list * visibility, unlike draw() which is called only for the visible list. @@ -104,6 +108,9 @@ protected: private: uuid_vec_t mIDs; // IDs of items that were added in refreshList(). // Will be used in refresh() to determine added and removed ids + + uuid_vec_t mSelectTheseIDs; // IDs that will be selected if list is not loaded till now + bool mNeedsRefresh; bool mForceRefresh; diff --git a/indra/newview/llinventorylistitem.cpp b/indra/newview/llinventorylistitem.cpp index e4a7a158a3..b1f5b3be2f 100644 --- a/indra/newview/llinventorylistitem.cpp +++ b/indra/newview/llinventorylistitem.cpp @@ -96,9 +96,12 @@ void LLPanelInventoryListItemBase::draw() if (mSeparatorVisible && mSeparatorImage) { - // stretch along bottom of listitem, using image height + // place under bottom of listitem, using image height + // item_pad in list using the item should be >= image height + // to avoid cropping of top of the next item. LLRect separator_rect = getLocalRect(); - separator_rect.mTop = mSeparatorImage->getHeight(); + separator_rect.mTop = separator_rect.mBottom; + separator_rect.mBottom -= mSeparatorImage->getHeight(); mSeparatorImage->draw(separator_rect); } @@ -234,6 +237,17 @@ const std::string& LLPanelInventoryListItemBase::getDescription() const return inv_item->getDescription(); } +time_t LLPanelInventoryListItemBase::getCreationDate() const +{ + LLViewerInventoryItem* inv_item = getItem(); + if (NULL == inv_item) + { + return 0; + } + + return inv_item->getCreationDate(); +} + LLViewerInventoryItem* LLPanelInventoryListItemBase::getItem() const { return gInventory.getItem(mInventoryItemUUID); diff --git a/indra/newview/llinventorylistitem.h b/indra/newview/llinventorylistitem.h index 575f6aec19..3915908a20 100644 --- a/indra/newview/llinventorylistitem.h +++ b/indra/newview/llinventorylistitem.h @@ -151,6 +151,9 @@ public: /** Get the description of a corresponding inventory item */ const std::string& getDescription() const; + /** Get the creation date of a corresponding inventory item */ + time_t getCreationDate() const; + /** Get the associated inventory item */ LLViewerInventoryItem* getItem() const; diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 236ed9bbd1..5a952bb6a8 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -294,6 +294,30 @@ void LLInventoryModel::getDirectDescendentsOf(const LLUUID& cat_id, items = get_ptr_in_map(mParentChildItemTree, cat_id); } +LLMD5 LLInventoryModel::hashDirectDescendentNames(const LLUUID& cat_id) const +{ + LLInventoryModel::cat_array_t* cat_array; + LLInventoryModel::item_array_t* item_array; + getDirectDescendentsOf(cat_id,cat_array,item_array); + LLMD5 item_name_hash; + if (!item_array) + { + item_name_hash.finalize(); + return item_name_hash; + } + for (LLInventoryModel::item_array_t::const_iterator iter = item_array->begin(); + iter != item_array->end(); + iter++) + { + const LLViewerInventoryItem *item = (*iter); + if (!item) + continue; + item_name_hash.update(item->getName()); + } + item_name_hash.finalize(); + return item_name_hash; +} + // SJB: Added version to lock the arrays to catch potential logic bugs void LLInventoryModel::lockDirectDescendentArrays(const LLUUID& cat_id, cat_array_t*& categories, @@ -1254,6 +1278,9 @@ void LLInventoryModel::addCategory(LLViewerInventoryCategory* category) //llinfos << "LLInventoryModel::addCategory()" << llendl; if(category) { + // try to localize default names first. See EXT-8319, EXT-7051. + category->localizeName(); + // Insert category uniquely into the map mCategoryMap[category->getUUID()] = category; // LLPointer will deref and delete the old one //mInventory[category->getUUID()] = category; diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index 7b56d0bdd1..ff8a5bae9b 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -41,6 +41,7 @@ #include "lluuid.h" #include "llpermissionsflags.h" #include "llstring.h" +#include "llmd5.h" #include <map> #include <set> #include <string> @@ -194,6 +195,9 @@ public: void getDirectDescendentsOf(const LLUUID& cat_id, cat_array_t*& categories, item_array_t*& items) const; + + // Compute a hash of direct descendent names (for detecting child name changes) + LLMD5 hashDirectDescendentNames(const LLUUID& cat_id) const; // Starting with the object specified, add its descendents to the // array provided, but do not add the inventory object specified diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp index bd6877d9d3..54b8f3a8a4 100644 --- a/indra/newview/llinventoryobserver.cpp +++ b/indra/newview/llinventoryobserver.cpp @@ -676,7 +676,9 @@ void LLInventoryCategoriesObserver::changed(U32 mask) iter != mCategoryMap.end(); ++iter) { - LLViewerInventoryCategory* category = gInventory.getCategory((*iter).first); + const LLUUID& cat_id = (*iter).first; + + LLViewerInventoryCategory* category = gInventory.getCategory(cat_id); if (!category) continue; @@ -691,7 +693,7 @@ void LLInventoryCategoriesObserver::changed(U32 mask) // Check number of known descendents to find out whether it has changed. LLInventoryModel::cat_array_t* cats; LLInventoryModel::item_array_t* items; - gInventory.getDirectDescendentsOf((*iter).first, cats, items); + gInventory.getDirectDescendentsOf(cat_id, cats, items); if (!cats || !items) { llwarns << "Category '" << category->getName() << "' descendents corrupted, fetch failed." << llendl; @@ -703,20 +705,39 @@ void LLInventoryCategoriesObserver::changed(U32 mask) continue; } - + const S32 current_num_known_descendents = cats->count() + items->count(); - LLCategoryData cat_data = (*iter).second; + LLCategoryData& cat_data = (*iter).second; + + bool cat_changed = false; // If category version or descendents count has changed - // update category data in mCategoryMap and fire a callback. + // update category data in mCategoryMap if (version != cat_data.mVersion || current_num_known_descendents != cat_data.mDescendentsCount) { cat_data.mVersion = version; cat_data.mDescendentsCount = current_num_known_descendents; + cat_changed = true; + } - cat_data.mCallback(); + // If any item names have changed, update the name hash + // Only need to check if (a) name hash has not previously been + // computed, or (b) a name has changed. + if (!cat_data.mIsNameHashInitialized || (mask & LLInventoryObserver::LABEL)) + { + LLMD5 item_name_hash = gInventory.hashDirectDescendentNames(cat_id); + if (cat_data.mItemNameHash != item_name_hash) + { + cat_data.mIsNameHashInitialized = true; + cat_data.mItemNameHash = item_name_hash; + cat_changed = true; + } } + + // If anything has changed above, fire the callback. + if (cat_changed) + cat_data.mCallback(); } } @@ -758,7 +779,8 @@ bool LLInventoryCategoriesObserver::addCategory(const LLUUID& cat_id, callback_t if (can_be_added) { - mCategoryMap.insert(category_map_value_t(cat_id, LLCategoryData(cb, version, current_num_known_descendents))); + mCategoryMap.insert(category_map_value_t( + cat_id,LLCategoryData(cat_id, cb, version, current_num_known_descendents))); } return can_be_added; @@ -768,3 +790,15 @@ void LLInventoryCategoriesObserver::removeCategory(const LLUUID& cat_id) { mCategoryMap.erase(cat_id); } + +LLInventoryCategoriesObserver::LLCategoryData::LLCategoryData( + const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents) + + : mCatID(cat_id) + , mCallback(cb) + , mVersion(version) + , mDescendentsCount(num_descendents) + , mIsNameHashInitialized(false) +{ + mItemNameHash.finalize(); +} diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h index 4a88a65bf8..d535250970 100644 --- a/indra/newview/llinventoryobserver.h +++ b/indra/newview/llinventoryobserver.h @@ -34,6 +34,7 @@ #define LL_LLINVENTORYOBSERVERS_H #include "lluuid.h" +#include "llmd5.h" #include <string> #include <vector> @@ -294,15 +295,14 @@ public: protected: struct LLCategoryData { - LLCategoryData(callback_t cb, S32 version, S32 num_descendents) - : mCallback(cb) - , mVersion(version) - , mDescendentsCount(num_descendents) - {} + LLCategoryData(const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents); callback_t mCallback; S32 mVersion; S32 mDescendentsCount; + LLMD5 mItemNameHash; + bool mIsNameHashInitialized; + LLUUID mCatID; }; typedef std::map<LLUUID, LLCategoryData> category_map_t; diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 5af99f3c8f..770bc02b40 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -175,6 +175,9 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params) setSortOrder(gSavedSettings.getU32(DEFAULT_SORT_ORDER)); } mFolderRoot->setSortOrder(getFilter()->getSortOrder()); + + // Initialize base class params. + LLPanel::initFromParams(params); } LLInventoryPanel::~LLInventoryPanel() @@ -706,21 +709,6 @@ BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, return handled; } -// virtual -void LLInventoryPanel::onMouseEnter(S32 x, S32 y, MASK mask) -{ - LLPanel::onMouseEnter(x, y, mask); - // don't auto-scroll a list when cursor is over Inventory. See EXT-3981. - mFolderRoot->setEnableScroll(false); -} - -// virtual -void LLInventoryPanel::onMouseLeave(S32 x, S32 y, MASK mask) -{ - LLPanel::onMouseLeave(x, y, mask); - mFolderRoot->setEnableScroll(true); -} - void LLInventoryPanel::onFocusLost() { // inventory no longer handles cut/copy/paste/delete @@ -790,7 +778,7 @@ void LLInventoryPanel::doToSelected(const LLSD& userdata) void LLInventoryPanel::doCreate(const LLSD& userdata) { - menu_create_inventory_item(mFolderRoot, LLFolderBridge::sSelf, userdata); + menu_create_inventory_item(mFolderRoot, LLFolderBridge::sSelf.get(), userdata); } bool LLInventoryPanel::beginIMSession() diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index c9e317f816..4db995b0c4 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -121,10 +121,6 @@ public: void* cargo_data, EAcceptance* accept, std::string& tooltip_msg); - - void onMouseEnter(S32 x, S32 y, MASK mask); - void onMouseLeave(S32 x, S32 y, MASK mask); - // LLUICtrl methods /*virtual*/ void onFocusLost(); /*virtual*/ void onFocusReceived(); diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index 06f490e8e3..ae8efc01a3 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -58,6 +58,7 @@ #endif #include "llsecapi.h" #include "llstartup.h" +#include "llmachineid.h" static const char * const TOS_REPLY_PUMP = "lllogininstance_tos_callback"; static const char * const TOS_LISTENER_NAME = "lllogininstance_tos"; @@ -165,22 +166,24 @@ void LLLoginInstance::constructAuthParams(LLPointer<LLCredential> user_credentia // (re)initialize the request params with creds. LLSD request_params = user_credential->getLoginParams(); - char hashed_mac_string[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */ - LLMD5 hashed_mac; - unsigned char MACAddress[MAC_ADDRESS_BYTES]; - if(LLUUID::getNodeID(MACAddress) == 0) { - llerrs << "Failed to get node id; cannot uniquely identify this machine." << llendl; + char hashed_unique_id_string[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */ + LLMD5 hashed_unique_id; + unsigned char unique_id[MAC_ADDRESS_BYTES]; + if(LLUUID::getNodeID(unique_id) == 0) { + if(LLMachineID::getUniqueID(unique_id, sizeof(unique_id)) == 0) { + llerrs << "Failed to get an id; cannot uniquely identify this machine." << llendl; + } } - hashed_mac.update( MACAddress, MAC_ADDRESS_BYTES ); - hashed_mac.finalize(); - hashed_mac.hex_digest(hashed_mac_string); + hashed_unique_id.update(unique_id, MAC_ADDRESS_BYTES); + hashed_unique_id.finalize(); + hashed_unique_id.hex_digest(hashed_unique_id_string); request_params["start"] = construct_start_string(); request_params["skipoptional"] = mSkipOptionalUpdate; request_params["agree_to_tos"] = false; // Always false here. Set true in request_params["read_critical"] = false; // handleTOSResponse request_params["last_exec_event"] = mLastExecEvent; - request_params["mac"] = hashed_mac_string; + request_params["mac"] = hashed_unique_id_string; request_params["version"] = gCurrentVersion; // Includes channel name request_params["channel"] = gSavedSettings.getString("VersionChannelName"); request_params["id0"] = mSerialNumber; diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 7a4ed74c4c..d6d128eb29 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -67,7 +67,8 @@ LLMediaCtrl::Params::Params() decouple_texture_size("decouple_texture_size", false), texture_width("texture_width", 1024), texture_height("texture_height", 1024), - caret_color("caret_color") + caret_color("caret_color"), + initial_mime_type("initial_mime_type") { tab_stop(false); } @@ -92,7 +93,8 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) : mDecoupleTextureSize ( false ), mTextureWidth ( 1024 ), mTextureHeight ( 1024 ), - mClearCache(false) + mClearCache(false), + mHomePageMimeType(p.initial_mime_type) { { LLColor4 color = p.caret_color().get(); @@ -101,7 +103,7 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) : setIgnoreUIScale(p.ignore_ui_scale); - setHomePageUrl(p.start_url); + setHomePageUrl(p.start_url, p.initial_mime_type); setBorderVisible(p.border_visible); @@ -567,12 +569,12 @@ void LLMediaCtrl::navigateHome() //////////////////////////////////////////////////////////////////////////////// // -void LLMediaCtrl::setHomePageUrl( const std::string urlIn ) +void LLMediaCtrl::setHomePageUrl( const std::string& urlIn, const std::string& mime_type ) { mHomePageUrl = urlIn; if (mMediaSource) { - mMediaSource->setHomeURL(mHomePageUrl); + mMediaSource->setHomeURL(mHomePageUrl, mime_type); } } @@ -616,7 +618,7 @@ bool LLMediaCtrl::ensureMediaSourceExists() if ( mMediaSource ) { mMediaSource->setUsedInUI(true); - mMediaSource->setHomeURL(mHomePageUrl); + mMediaSource->setHomeURL(mHomePageUrl, mHomePageMimeType); mMediaSource->setVisible( getVisible() ); mMediaSource->addObserver( this ); mMediaSource->setBackgroundColor( getBackgroundColor() ); diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h index 310492fe02..784b266d1f 100644 --- a/indra/newview/llmediactrl.h +++ b/indra/newview/llmediactrl.h @@ -63,6 +63,8 @@ public: texture_height; Optional<LLUIColor> caret_color; + + Optional<std::string> initial_mime_type; Params(); }; @@ -109,7 +111,7 @@ public: // because we control the page content. See DEV-9530. JC. void setTrusted( bool valIn ); - void setHomePageUrl( const std::string urlIn ); + void setHomePageUrl( const std::string& urlIn, const std::string& mime_type = LLStringUtil::null ); std::string getHomePageUrl(); // set/clear URL to visit when a 404 page is reached @@ -173,6 +175,7 @@ public: bool mForceUpdate; bool mTrusted; std::string mHomePageUrl; + std::string mHomePageMimeType; std::string mCurrentNavUrl; bool mIgnoreUIScale; bool mAlwaysRefresh; diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp index b8da368bd7..075f0ba3ec 100755 --- a/indra/newview/llmediadataclient.cpp +++ b/indra/newview/llmediadataclient.cpp @@ -58,6 +58,32 @@ // - Any request that gets a 503 still goes through the retry logic // +/*************************************************************************************************************** + What's up with this queueing code? + + First, a bit of background: + + Media on a prim was added into the system in the Viewer 2.0 timeframe. In order to avoid changing the + network format of objects, an unused field in the object (the "MediaURL" string) was repurposed to + indicate that the object had media data, and also hold a sequence number and the UUID of the agent + who last updated the data. The actual media data for objects is accessed via the "ObjectMedia" capability. + Due to concerns about sim performance, requests to this capability are rate-limited to 5 requests every + 5 seconds per agent. + + The initial implementation of LLMediaDataClient used a single queue to manage requests to the "ObjectMedia" cap. + Requests to the cap were queued so that objects closer to the avatar were loaded in first, since they were most + likely to be the ones the media performance manager would load. + + This worked in some cases, but we found that it was possible for a scripted object that constantly updated its + media data to starve other objects, since the same queue contained both requests to load previously unseen media + data and requests to fetch media data in response to object updates. + + The solution for this we came up with was to have two queues. The sorted queue contains requests to fetch media + data for objects that don't have it yet, and the round-robin queue contains requests to update media data for + objects that have already completed their initial load. When both queues are non-empty, the code ping-pongs + between them so that updates can't completely block initial load-in. +**************************************************************************************************************/ + // // Forward decls // @@ -71,6 +97,54 @@ const U32 LLMediaDataClient::MAX_ROUND_ROBIN_QUEUE_SIZE = 10000; std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue_t &q); std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::Request &q); +template <typename T> +static typename T::iterator find_matching_request(T &c, const LLMediaDataClient::Request *request, LLMediaDataClient::Request::Type match_type) +{ + for(typename T::iterator iter = c.begin(); iter != c.end(); ++iter) + { + if(request->isMatch(*iter, match_type)) + { + return iter; + } + } + + return c.end(); +} + +template <typename T> +static typename T::iterator find_matching_request(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type) +{ + for(typename T::iterator iter = c.begin(); iter != c.end(); ++iter) + { + if(((*iter)->getID() == id) && ((match_type == LLMediaDataClient::Request::ANY) || (match_type == (*iter)->getType()))) + { + return iter; + } + } + + return c.end(); +} + +// NOTE: remove_matching_requests will not work correctly for containers where deleting an element may invalidate iterators +// to other elements in the container (such as std::vector). +// If the implementation is changed to use a container with this property, this will need to be revisited. +template <typename T> +static void remove_matching_requests(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type) +{ + for(typename T::iterator iter = c.begin(); iter != c.end();) + { + typename T::value_type i = *iter; + typename T::iterator next = iter; + next++; + if((i->getID() == id) && ((match_type == LLMediaDataClient::Request::ANY) || (match_type == i->getType()))) + { + i->markDead(); + c.erase(iter); + } + iter = next; + } +} + ////////////////////////////////////////////////////////////////////////////////////// // // LLMediaDataClient @@ -87,117 +161,36 @@ LLMediaDataClient::LLMediaDataClient(F32 queue_timer_delay, mMaxNumRetries(max_retries), mMaxSortedQueueSize(max_sorted_queue_size), mMaxRoundRobinQueueSize(max_round_robin_queue_size), - mQueueTimerIsRunning(false), - mCurrentQueueIsTheSortedQueue(true) + mQueueTimerIsRunning(false) { } LLMediaDataClient::~LLMediaDataClient() { stopQueueTimer(); - - // This should clear the queue, and hopefully call all the destructors. - LL_DEBUGS("LLMediaDataClient") << "~LLMediaDataClient destructor: queue: " << - (isEmpty() ? "<empty> " : "<not empty> ") << LL_ENDL; - - mSortedQueue.clear(); - mRoundRobinQueue.clear(); } bool LLMediaDataClient::isEmpty() const { - return mSortedQueue.empty() && mRoundRobinQueue.empty(); + return mQueue.empty(); } bool LLMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object) { - return (LLMediaDataClient::findOrRemove(mSortedQueue, object, false/*remove*/, LLMediaDataClient::Request::ANY).notNull() - || (LLMediaDataClient::findOrRemove(mRoundRobinQueue, object, false/*remove*/, LLMediaDataClient::Request::ANY).notNull())); -} - -bool LLMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object) -{ - bool removedFromSortedQueue = LLMediaDataClient::findOrRemove(mSortedQueue, object, true/*remove*/, LLMediaDataClient::Request::ANY).notNull(); - bool removedFromRoundRobinQueue = LLMediaDataClient::findOrRemove(mRoundRobinQueue, object, true/*remove*/, LLMediaDataClient::Request::ANY).notNull(); - return removedFromSortedQueue || removedFromRoundRobinQueue; -} - -//static -LLMediaDataClient::request_ptr_t LLMediaDataClient::findOrRemove(request_queue_t &queue, const LLMediaDataClientObject::ptr_t &obj, bool remove, LLMediaDataClient::Request::Type type) -{ - request_ptr_t result; - request_queue_t::iterator iter = queue.begin(); - request_queue_t::iterator end = queue.end(); - while (iter != end) - { - if (obj->getID() == (*iter)->getObject()->getID() && (type == LLMediaDataClient::Request::ANY || type == (*iter)->getType())) - { - result = *iter; - if (remove) queue.erase(iter); - break; - } - iter++; - } - return result; -} - -void LLMediaDataClient::request(const LLMediaDataClientObject::ptr_t &object, const LLSD &payload) -{ - if (object.isNull() || ! object->hasMedia()) return; + if(find_matching_request(mQueue, object->getID()) != mQueue.end()) + return true; + + if(find_matching_request(mUnQueuedRequests, object->getID()) != mUnQueuedRequests.end()) + return true; - // Push the object on the queue - enqueue(new Request(getCapabilityName(), payload, object, this)); + return false; } -void LLMediaDataClient::enqueue(const Request *request) +void LLMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object) { - if (request->isNew()) - { - // Add to sorted queue - if (LLMediaDataClient::findOrRemove(mSortedQueue, request->getObject(), true/*remove*/, request->getType()).notNull()) - { - LL_DEBUGS("LLMediaDataClient") << "REMOVING OLD request for " << *request << " ALREADY THERE!" << LL_ENDL; - } - - LL_DEBUGS("LLMediaDataClient") << "Queuing SORTED request for " << *request << LL_ENDL; - - // Sadly, we have to const-cast because items put into the queue are not const - mSortedQueue.push_back(const_cast<LLMediaDataClient::Request*>(request)); - - LL_DEBUGS("LLMediaDataClientQueue") << "SORTED queue:" << mSortedQueue << LL_ENDL; - } - else { - if (mRoundRobinQueue.size() > mMaxRoundRobinQueueSize) - { - LL_INFOS_ONCE("LLMediaDataClient") << "RR QUEUE MAXED OUT!!!" << LL_ENDL; - LL_DEBUGS("LLMediaDataClient") << "Not queuing " << *request << LL_ENDL; - return; - } - - // ROUND ROBIN: if it is there, and it is a GET request, leave it. If not, put at front! - request_ptr_t existing_request; - if (request->getType() == Request::GET) - { - existing_request = LLMediaDataClient::findOrRemove(mRoundRobinQueue, request->getObject(), false/*remove*/, request->getType()); - } - if (existing_request.isNull()) - { - LL_DEBUGS("LLMediaDataClient") << "Queuing RR request for " << *request << LL_ENDL; - // Push the request on the pending queue - // Sadly, we have to const-cast because items put into the queue are not const - mRoundRobinQueue.push_front(const_cast<LLMediaDataClient::Request*>(request)); - - LL_DEBUGS("LLMediaDataClientQueue") << "RR queue:" << mRoundRobinQueue << LL_ENDL; - } - else - { - LL_DEBUGS("LLMediaDataClient") << "ALREADY THERE: NOT Queuing request for " << *request << LL_ENDL; - - existing_request->markSent(false); - } - } - // Start the timer if not already running - startQueueTimer(); + LL_DEBUGS("LLMediaDataClient") << "removing requests matching ID " << object->getID() << LL_ENDL; + remove_matching_requests(mQueue, object->getID()); + remove_matching_requests(mUnQueuedRequests, object->getID()); } void LLMediaDataClient::startQueueTimer() @@ -209,7 +202,7 @@ void LLMediaDataClient::startQueueTimer() new QueueTimer(mQueueTimerDelay, this); } else { - LL_DEBUGS("LLMediaDataClient") << "not starting queue timer (it's already running, right???)" << LL_ENDL; + LL_DEBUGS("LLMediaDataClient") << "queue timer is already running" << LL_ENDL; } } @@ -220,179 +213,138 @@ void LLMediaDataClient::stopQueueTimer() bool LLMediaDataClient::processQueueTimer() { - sortQueue(); - - if(!isEmpty()) - { - LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() started, SORTED queue size is: " << mSortedQueue.size() - << ", RR queue size is: " << mRoundRobinQueue.size() << LL_ENDL; - LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() started, SORTED queue is: " << mSortedQueue << LL_ENDL; - LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() started, RR queue is: " << mRoundRobinQueue << LL_ENDL; - } - + if(isEmpty()) + return true; + + LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() started, queue size is: " << mQueue.size() << LL_ENDL; + LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() started, SORTED queue is: " << mQueue << LL_ENDL; + serviceQueue(); - LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() finished, SORTED queue size is: " << mSortedQueue.size() - << ", RR queue size is: " << mRoundRobinQueue.size() << LL_ENDL; - LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() finished, SORTED queue is: " << mSortedQueue << LL_ENDL; - LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() finished, RR queue is: " << mRoundRobinQueue << LL_ENDL; + LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() finished, queue size is: " << mQueue.size() << LL_ENDL; + LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() finished, SORTED queue is: " << mQueue << LL_ENDL; return isEmpty(); } -void LLMediaDataClient::sortQueue() +LLMediaDataClient::request_ptr_t LLMediaDataClient::dequeue() { - if(!mSortedQueue.empty()) + request_ptr_t request; + request_queue_t *queue_p = getQueue(); + + if (queue_p->empty()) { - // Score all items first - request_queue_t::iterator iter = mSortedQueue.begin(); - request_queue_t::iterator end = mSortedQueue.end(); - while (iter != end) + LL_DEBUGS("LLMediaDataClient") << "queue empty: " << (*queue_p) << LL_ENDL; + } + else + { + request = queue_p->front(); + + if(canServiceRequest(request)) { - (*iter)->updateScore(); - iter++; + // We will be returning this request, so remove it from the queue. + queue_p->pop_front(); } - - // Re-sort the list... - // NOTE: should this be a stable_sort? If so we need to change to using a vector. - mSortedQueue.sort(LLMediaDataClient::compareRequests); - - // ...then cull items over the max - U32 size = mSortedQueue.size(); - if (size > mMaxSortedQueueSize) + else { - U32 num_to_cull = (size - mMaxSortedQueueSize); - LL_INFOS_ONCE("LLMediaDataClient") << "sorted queue MAXED OUT! Culling " - << num_to_cull << " items" << LL_ENDL; - while (num_to_cull-- > 0) - { - mSortedQueue.pop_back(); - } + // Don't return this request -- it's not ready to be serviced. + request = NULL; } } + + return request; } -// static -bool LLMediaDataClient::compareRequests(const request_ptr_t &o1, const request_ptr_t &o2) +void LLMediaDataClient::pushBack(request_ptr_t request) { - if (o2.isNull()) return true; - if (o1.isNull()) return false; - return ( o1->getScore() > o2->getScore() ); + request_queue_t *queue_p = getQueue(); + queue_p->push_front(request); +} + +void LLMediaDataClient::trackRequest(request_ptr_t request) +{ + request_set_t::iterator iter = mUnQueuedRequests.find(request); + + if(iter != mUnQueuedRequests.end()) + { + LL_WARNS("LLMediaDataClient") << "Tracking already tracked request: " << *request << LL_ENDL; + } + else + { + mUnQueuedRequests.insert(request); + } +} + +void LLMediaDataClient::stopTrackingRequest(request_ptr_t request) +{ + request_set_t::iterator iter = mUnQueuedRequests.find(request); + + if (iter != mUnQueuedRequests.end()) + { + mUnQueuedRequests.erase(iter); + } + else + { + LL_WARNS("LLMediaDataClient") << "Removing an untracked request: " << *request << LL_ENDL; + } } void LLMediaDataClient::serviceQueue() { - request_queue_t *queue_p = getCurrentQueue(); + // Peel one off of the items from the queue and execute it + request_ptr_t request; - // quick retry loop for cases where we shouldn't wait for the next timer tick - while(true) + do { - if (queue_p->empty()) + request = dequeue(); + + if(request.isNull()) { - LL_DEBUGS("LLMediaDataClient") << "queue empty: " << (*queue_p) << LL_ENDL; - break; + // Queue is empty. + return; } - - // Peel one off of the items from the queue, and execute request - request_ptr_t request = queue_p->front(); - llassert(!request.isNull()); - const LLMediaDataClientObject *object = (request.isNull()) ? NULL : request->getObject(); - llassert(NULL != object); - - // Check for conditions that would make us just pop and rapidly loop through - // the queue. - if(request.isNull() || - request->isMarkedSent() || - NULL == object || - object->isDead() || - !object->hasMedia()) + + if(request->isDead()) { - if (request.isNull()) - { - LL_WARNS("LLMediaDataClient") << "Skipping NULL request" << LL_ENDL; - } - else { - LL_INFOS("LLMediaDataClient") << "Skipping : " << *request << " " - << ((request->isMarkedSent()) ? " request is marked sent" : - ((NULL == object) ? " object is NULL " : - ((object->isDead()) ? "object is dead" : - ((!object->hasMedia()) ? "object has no media!" : "BADNESS!")))) << LL_ENDL; - } - queue_p->pop_front(); - continue; // jump back to the start of the quick retry loop + LL_INFOS("LLMediaDataClient") << "Skipping dead request " << *request << LL_ENDL; + continue; } + + } while(false); - // Next, ask if this is "interesting enough" to fetch. If not, just stop - // and wait for the next timer go-round. Only do this for the sorted - // queue. - if (mCurrentQueueIsTheSortedQueue && !object->isInterestingEnough()) - { - LL_DEBUGS("LLMediaDataClient") << "Not fetching " << *request << ": not interesting enough" << LL_ENDL; - break; - } + // try to send the HTTP message to the cap url + std::string url = request->getCapability(); + if (!url.empty()) + { + const LLSD &sd_payload = request->getPayload(); + LL_INFOS("LLMediaDataClient") << "Sending request for " << *request << LL_ENDL; - // Finally, try to send the HTTP message to the cap url - std::string url = request->getCapability(); - bool maybe_retry = false; - if (!url.empty()) - { - const LLSD &sd_payload = request->getPayload(); - LL_INFOS("LLMediaDataClient") << "Sending request for " << *request << LL_ENDL; - - // Call the subclass for creating the responder - LLHTTPClient::post(url, sd_payload, createResponder(request)); - } - else { - LL_INFOS("LLMediaDataClient") << "NOT Sending request for " << *request << ": empty cap url!" << LL_ENDL; - maybe_retry = true; - } - - bool exceeded_retries = request->getRetryCount() > mMaxNumRetries; - if (maybe_retry && ! exceeded_retries) // Try N times before giving up + // Add this request to the non-queued tracking list + trackRequest(request); + + // and make the post + LLHTTPClient::post(url, sd_payload, request->createResponder()); + } + else + { + // Cap url doesn't exist. + + if(request->getRetryCount() < mMaxNumRetries) { - // We got an empty cap, but in that case we will retry again next - // timer fire. + LL_WARNS("LLMediaDataClient") << "Could not send request " << *request << " (empty cap url), will retry." << LL_ENDL; + // Put this request back at the head of its queue, and retry next time the queue timer fires. request->incRetryCount(); + pushBack(request); } - else { - if (exceeded_retries) - { - LL_WARNS("LLMediaDataClient") << "Could not send request " << *request << " for " - << mMaxNumRetries << " tries...popping object id " << object->getID() << LL_ENDL; - // XXX Should we bring up a warning dialog?? - } - - queue_p->pop_front(); - - if (! mCurrentQueueIsTheSortedQueue) { - // Round robin - request->markSent(true); - mRoundRobinQueue.push_back(request); - } + else + { + // This request has exceeded its maxumim retry count. It will be dropped. + LL_WARNS("LLMediaDataClient") << "Could not send request " << *request << " for " << mMaxNumRetries << " tries, dropping request." << LL_ENDL; } - - // end of quick loop -- any cases where we want to loop will use 'continue' to jump back to the start. - break; - } - - swapCurrentQueue(); -} -void LLMediaDataClient::swapCurrentQueue() -{ - // Swap - mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue; - // If its empty, swap back - if (getCurrentQueue()->empty()) - { - mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue; } } -LLMediaDataClient::request_queue_t *LLMediaDataClient::getCurrentQueue() -{ - return (mCurrentQueueIsTheSortedQueue) ? &mSortedQueue : &mRoundRobinQueue; -} // dump the queue std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue_t &q) @@ -402,7 +354,7 @@ std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue LLMediaDataClient::request_queue_t::const_iterator end = q.end(); while (iter != end) { - s << "\t" << i << "]: " << (*iter)->getObject()->getID().asString() << "(" << (*iter)->getObject()->getMediaInterest() << ")"; + s << "\t" << i << "]: " << (*iter)->getID().asString() << "(" << (*iter)->getObject()->getMediaInterest() << ")"; iter++; i++; } @@ -422,18 +374,24 @@ LLMediaDataClient::QueueTimer::QueueTimer(F32 time, LLMediaDataClient *mdc) mMDC->setIsRunning(true); } -LLMediaDataClient::QueueTimer::~QueueTimer() -{ - LL_DEBUGS("LLMediaDataClient") << "~QueueTimer" << LL_ENDL; - mMDC->setIsRunning(false); - mMDC = NULL; -} - // virtual BOOL LLMediaDataClient::QueueTimer::tick() { - if (mMDC.isNull()) return TRUE; - return mMDC->processQueueTimer(); + BOOL result = TRUE; + + if (!mMDC.isNull()) + { + result = mMDC->processQueueTimer(); + + if(result) + { + // This timer won't fire again. + mMDC->setIsRunning(false); + mMDC = NULL; + } + } + + return result; } @@ -443,29 +401,30 @@ BOOL LLMediaDataClient::QueueTimer::tick() // ////////////////////////////////////////////////////////////////////////////////////// -LLMediaDataClient::Responder::RetryTimer::RetryTimer(F32 time, Responder *mdr) -: LLEventTimer(time), mResponder(mdr) +LLMediaDataClient::RetryTimer::RetryTimer(F32 time, request_ptr_t request) +: LLEventTimer(time), mRequest(request) { + mRequest->startTracking(); } -// virtual -LLMediaDataClient::Responder::RetryTimer::~RetryTimer() +// virtual +BOOL LLMediaDataClient::RetryTimer::tick() { - LL_DEBUGS("LLMediaDataClient") << "~RetryTimer" << *(mResponder->getRequest()) << LL_ENDL; - - // XXX This is weird: Instead of doing the work in tick() (which re-schedules - // a timer, which might be risky), do it here, in the destructor. Yes, it is very odd. - // Instead of retrying, we just put the request back onto the queue - LL_INFOS("LLMediaDataClient") << "RetryTimer fired for: " << *(mResponder->getRequest()) << " retrying" << LL_ENDL; - mResponder->getRequest()->reEnqueue(); + mRequest->stopTracking(); + + if(mRequest->isDead()) + { + LL_INFOS("LLMediaDataClient") << "RetryTimer fired for dead request: " << *mRequest << ", aborting." << LL_ENDL; + } + else + { + LL_INFOS("LLMediaDataClient") << "RetryTimer fired for: " << *mRequest << ", retrying." << LL_ENDL; + mRequest->reEnqueue(); + } - // Release the ref to the responder. - mResponder = NULL; -} + // Release the ref to the request. + mRequest = NULL; -// virtual -BOOL LLMediaDataClient::Responder::RetryTimer::tick() -{ // Don't fire again return TRUE; } @@ -478,56 +437,37 @@ BOOL LLMediaDataClient::Responder::RetryTimer::tick() ////////////////////////////////////////////////////////////////////////////////////// /*static*/U32 LLMediaDataClient::Request::sNum = 0; -LLMediaDataClient::Request::Request(const char *cap_name, - const LLSD& sd_payload, +LLMediaDataClient::Request::Request(Type in_type, LLMediaDataClientObject *obj, - LLMediaDataClient *mdc) -: mCapName(cap_name), - mPayload(sd_payload), + LLMediaDataClient *mdc, + S32 face) +: mType(in_type), mObject(obj), mNum(++sNum), mRetryCount(0), mMDC(mdc), - mMarkedSent(false), - mScore((F64)0.0) + mScore((F64)0.0), + mFace(face) { + mObjectID = mObject->getID(); } -LLMediaDataClient::Request::~Request() +const char *LLMediaDataClient::Request::getCapName() const { - LL_DEBUGS("LLMediaDataClient") << "~Request" << (*this) << LL_ENDL; - mMDC = NULL; - mObject = NULL; + if(mMDC) + return mMDC->getCapabilityName(); + + return ""; } - std::string LLMediaDataClient::Request::getCapability() const { - return getObject()->getCapabilityUrl(getCapName()); -} - -// Helper function to get the "type" of request, which just pokes around to -// discover it. -LLMediaDataClient::Request::Type LLMediaDataClient::Request::getType() const -{ - if (0 == strcmp(mCapName, "ObjectMediaNavigate")) + if(mMDC) { - return NAVIGATE; - } - else if (0 == strcmp(mCapName, "ObjectMedia")) - { - const std::string &verb = mPayload["verb"]; - if (verb == "GET") - { - return GET; - } - else if (verb == "UPDATE") - { - return UPDATE; - } + return getObject()->getCapabilityUrl(getCapName()); } - llassert(false); - return GET; + + return ""; } const char *LLMediaDataClient::Request::getTypeAsString() const @@ -552,35 +492,30 @@ const char *LLMediaDataClient::Request::getTypeAsString() const } -void LLMediaDataClient::Request::reEnqueue() const +void LLMediaDataClient::Request::reEnqueue() { - // I sure hope this doesn't deref a bad pointer: - mMDC->enqueue(this); + if(mMDC) + { + mMDC->enqueue(this); + } } F32 LLMediaDataClient::Request::getRetryTimerDelay() const { - return (mMDC == NULL) ? LLMediaDataClient::UNAVAILABLE_RETRY_TIMER_DELAY : - mMDC->mRetryTimerDelay; + if(mMDC) + return mMDC->mRetryTimerDelay; + + return 0.0f; } U32 LLMediaDataClient::Request::getMaxNumRetries() const { - return (mMDC == NULL) ? LLMediaDataClient::MAX_RETRIES : mMDC->mMaxNumRetries; + if(mMDC) + return mMDC->mMaxNumRetries; + + return 0; } -void LLMediaDataClient::Request::markSent(bool flag) -{ - if (mMarkedSent != flag) - { - mMarkedSent = flag; - if (!mMarkedSent) - { - mNum = ++sNum; - } - } -} - void LLMediaDataClient::Request::updateScore() { F64 tmp = mObject->getMediaInterest(); @@ -591,15 +526,37 @@ void LLMediaDataClient::Request::updateScore() } } +void LLMediaDataClient::Request::markDead() +{ + mMDC = NULL; +} + +bool LLMediaDataClient::Request::isDead() +{ + return ((mMDC == NULL) || mObject->isDead()); +} + +void LLMediaDataClient::Request::startTracking() +{ + if(mMDC) + mMDC->trackRequest(this); +} + +void LLMediaDataClient::Request::stopTracking() +{ + if(mMDC) + mMDC->stopTrackingRequest(this); +} + std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::Request &r) { s << "request: num=" << r.getNum() << " type=" << r.getTypeAsString() - << " ID=" << r.getObject()->getID() + << " ID=" << r.getID() + << " face=" << r.getFace() << " #retries=" << r.getRetryCount(); return s; } - ////////////////////////////////////////////////////////////////////////////////////// // @@ -612,15 +569,17 @@ LLMediaDataClient::Responder::Responder(const request_ptr_t &request) { } -LLMediaDataClient::Responder::~Responder() -{ - LL_DEBUGS("LLMediaDataClient") << "~Responder" << *(getRequest()) << LL_ENDL; - mRequest = NULL; -} - /*virtual*/ void LLMediaDataClient::Responder::error(U32 status, const std::string& reason) { + mRequest->stopTracking(); + + if(mRequest->isDead()) + { + LL_WARNS("LLMediaDataClient") << "dead request " << *mRequest << LL_ENDL; + return; + } + if (status == HTTP_SERVICE_UNAVAILABLE) { F32 retry_timeout = mRequest->getRetryTimerDelay(); @@ -633,14 +592,16 @@ void LLMediaDataClient::Responder::error(U32 status, const std::string& reason) // Start timer (instances are automagically tracked by // InstanceTracker<> and LLEventTimer) - new RetryTimer(F32(retry_timeout/*secs*/), this); + new RetryTimer(F32(retry_timeout/*secs*/), mRequest); } - else { + else + { LL_INFOS("LLMediaDataClient") << *mRequest << " got SERVICE_UNAVAILABLE...retry count " << mRequest->getRetryCount() << " exceeds " << mRequest->getMaxNumRetries() << ", not retrying" << LL_ENDL; } } - else { + else + { std::string msg = boost::lexical_cast<std::string>(status) + ": " + reason; LL_WARNS("LLMediaDataClient") << *mRequest << " http error(" << msg << ")" << LL_ENDL; } @@ -649,6 +610,14 @@ void LLMediaDataClient::Responder::error(U32 status, const std::string& reason) /*virtual*/ void LLMediaDataClient::Responder::result(const LLSD& content) { + mRequest->stopTracking(); + + if(mRequest->isDead()) + { + LL_WARNS("LLMediaDataClient") << "dead request " << *mRequest << LL_ENDL; + return; + } + LL_DEBUGS("LLMediaDataClientResponse") << *mRequest << " result : " << ll_print_sd(content) << LL_ENDL; } @@ -659,9 +628,10 @@ void LLMediaDataClient::Responder::result(const LLSD& content) // ////////////////////////////////////////////////////////////////////////////////////// -LLMediaDataClient::Responder *LLObjectMediaDataClient::createResponder(const request_ptr_t &request) const +void LLObjectMediaDataClient::fetchMedia(LLMediaDataClientObject *object) { - return new LLObjectMediaDataClient::Responder(request); + // Create a get request and put it in the queue. + enqueue(new RequestGet(object, this)); } const char *LLObjectMediaDataClient::getCapabilityName() const @@ -669,70 +639,286 @@ const char *LLObjectMediaDataClient::getCapabilityName() const return "ObjectMedia"; } -void LLObjectMediaDataClient::fetchMedia(LLMediaDataClientObject *object) +LLObjectMediaDataClient::request_queue_t *LLObjectMediaDataClient::getQueue() +{ + return (mCurrentQueueIsTheSortedQueue) ? &mQueue : &mRoundRobinQueue; +} + +void LLObjectMediaDataClient::sortQueue() +{ + if(!mQueue.empty()) + { + // score all elements in the sorted queue. + for(request_queue_t::iterator iter = mQueue.begin(); iter != mQueue.end(); iter++) + { + (*iter)->updateScore(); + } + + // Re-sort the list... + mQueue.sort(compareRequestScores); + + // ...then cull items over the max + U32 size = mQueue.size(); + if (size > mMaxSortedQueueSize) + { + U32 num_to_cull = (size - mMaxSortedQueueSize); + LL_INFOS_ONCE("LLMediaDataClient") << "sorted queue MAXED OUT! Culling " + << num_to_cull << " items" << LL_ENDL; + while (num_to_cull-- > 0) + { + mQueue.back()->markDead(); + mQueue.pop_back(); + } + } + } + +} + +// static +bool LLObjectMediaDataClient::compareRequestScores(const request_ptr_t &o1, const request_ptr_t &o2) { - LLSD sd_payload; - sd_payload["verb"] = "GET"; - sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID(); - request(object, sd_payload); + if (o2.isNull()) return true; + if (o1.isNull()) return false; + return ( o1->getScore() > o2->getScore() ); } +void LLObjectMediaDataClient::enqueue(Request *request) +{ + if(request->isDead()) + { + LL_DEBUGS("LLMediaDataClient") << "not queueing dead request " << *request << LL_ENDL; + return; + } + + // Invariants: + // new requests always go into the sorted queue. + // + + bool is_new = request->isNew(); + + if(!is_new && (request->getType() == Request::GET)) + { + // For GET requests that are not new, if a matching request is already in the round robin queue, + // in flight, or being retried, leave it at its current position. + request_queue_t::iterator iter = find_matching_request(mRoundRobinQueue, request->getID(), Request::GET); + request_set_t::iterator iter2 = find_matching_request(mUnQueuedRequests, request->getID(), Request::GET); + + if( (iter != mRoundRobinQueue.end()) || (iter2 != mUnQueuedRequests.end()) ) + { + LL_DEBUGS("LLMediaDataClient") << "ALREADY THERE: NOT Queuing request for " << *request << LL_ENDL; + + return; + } + } + + // TODO: should an UPDATE cause pending GET requests for the same object to be removed from the queue? + // IF the update will cause an object update message to be sent out at some point in the future, it probably should. + + // Remove any existing requests of this type for this object + remove_matching_requests(mQueue, request->getID(), request->getType()); + remove_matching_requests(mRoundRobinQueue, request->getID(), request->getType()); + remove_matching_requests(mUnQueuedRequests, request->getID(), request->getType()); + + if (is_new) + { + LL_DEBUGS("LLMediaDataClient") << "Queuing SORTED request for " << *request << LL_ENDL; + + mQueue.push_back(request); + + LL_DEBUGS("LLMediaDataClientQueue") << "SORTED queue:" << mQueue << LL_ENDL; + } + else + { + if (mRoundRobinQueue.size() > mMaxRoundRobinQueueSize) + { + LL_INFOS_ONCE("LLMediaDataClient") << "RR QUEUE MAXED OUT!!!" << LL_ENDL; + LL_DEBUGS("LLMediaDataClient") << "Not queuing " << *request << LL_ENDL; + return; + } + + LL_DEBUGS("LLMediaDataClient") << "Queuing RR request for " << *request << LL_ENDL; + // Push the request on the pending queue + mRoundRobinQueue.push_back(request); + + LL_DEBUGS("LLMediaDataClientQueue") << "RR queue:" << mRoundRobinQueue << LL_ENDL; + } + // Start the timer if not already running + startQueueTimer(); +} + +bool LLObjectMediaDataClient::canServiceRequest(request_ptr_t request) +{ + if(mCurrentQueueIsTheSortedQueue) + { + if(!request->getObject()->isInterestingEnough()) + { + LL_DEBUGS("LLMediaDataClient") << "Not fetching " << *request << ": not interesting enough" << LL_ENDL; + return false; + } + } + + return true; +}; + +void LLObjectMediaDataClient::swapCurrentQueue() +{ + // Swap + mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue; + // If its empty, swap back + if (getQueue()->empty()) + { + mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue; + } +} + +bool LLObjectMediaDataClient::isEmpty() const +{ + return mQueue.empty() && mRoundRobinQueue.empty(); +} + +bool LLObjectMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object) +{ + // First, call parent impl. + if(LLMediaDataClient::isInQueue(object)) + return true; + + if(find_matching_request(mRoundRobinQueue, object->getID()) != mRoundRobinQueue.end()) + return true; + + return false; +} + +void LLObjectMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object) +{ + // First, call parent impl. + LLMediaDataClient::removeFromQueue(object); + + remove_matching_requests(mRoundRobinQueue, object->getID()); +} + +bool LLObjectMediaDataClient::processQueueTimer() +{ + if(isEmpty()) + return true; + + LL_DEBUGS("LLMediaDataClient") << "started, SORTED queue size is: " << mQueue.size() + << ", RR queue size is: " << mRoundRobinQueue.size() << LL_ENDL; + LL_DEBUGS("LLMediaDataClientQueue") << " SORTED queue is: " << mQueue << LL_ENDL; + LL_DEBUGS("LLMediaDataClientQueue") << " RR queue is: " << mRoundRobinQueue << LL_ENDL; + +// purgeDeadRequests(); + + sortQueue(); + + LL_DEBUGS("LLMediaDataClientQueue") << "after sort, SORTED queue is: " << mQueue << LL_ENDL; + + serviceQueue(); + + swapCurrentQueue(); + + LL_DEBUGS("LLMediaDataClient") << "finished, SORTED queue size is: " << mQueue.size() + << ", RR queue size is: " << mRoundRobinQueue.size() << LL_ENDL; + LL_DEBUGS("LLMediaDataClientQueue") << " SORTED queue is: " << mQueue << LL_ENDL; + LL_DEBUGS("LLMediaDataClientQueue") << " RR queue is: " << mRoundRobinQueue << LL_ENDL; + + return isEmpty(); +} + +LLObjectMediaDataClient::RequestGet::RequestGet(LLMediaDataClientObject *obj, LLMediaDataClient *mdc): + LLMediaDataClient::Request(LLMediaDataClient::Request::GET, obj, mdc) +{ +} + +LLSD LLObjectMediaDataClient::RequestGet::getPayload() const +{ + LLSD result; + result["verb"] = "GET"; + result[LLTextureEntry::OBJECT_ID_KEY] = mObject->getID(); + + return result; +} + +LLMediaDataClient::Responder *LLObjectMediaDataClient::RequestGet::createResponder() +{ + return new LLObjectMediaDataClient::Responder(this); +} + + void LLObjectMediaDataClient::updateMedia(LLMediaDataClientObject *object) { - LLSD sd_payload; - sd_payload["verb"] = "UPDATE"; - sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID(); + // Create an update request and put it in the queue. + enqueue(new RequestUpdate(object, this)); +} + +LLObjectMediaDataClient::RequestUpdate::RequestUpdate(LLMediaDataClientObject *obj, LLMediaDataClient *mdc): + LLMediaDataClient::Request(LLMediaDataClient::Request::UPDATE, obj, mdc) +{ +} + +LLSD LLObjectMediaDataClient::RequestUpdate::getPayload() const +{ + LLSD result; + result["verb"] = "UPDATE"; + result[LLTextureEntry::OBJECT_ID_KEY] = mObject->getID(); + LLSD object_media_data; int i = 0; - int end = object->getMediaDataCount(); + int end = mObject->getMediaDataCount(); for ( ; i < end ; ++i) { - object_media_data.append(object->getMediaDataLLSD(i)); + object_media_data.append(mObject->getMediaDataLLSD(i)); } - sd_payload[LLTextureEntry::OBJECT_MEDIA_DATA_KEY] = object_media_data; - - LL_DEBUGS("LLMediaDataClient") << "update media data: " << object->getID() << " " << ll_print_sd(sd_payload) << LL_ENDL; - request(object, sd_payload); + result[LLTextureEntry::OBJECT_MEDIA_DATA_KEY] = object_media_data; + + return result; } +LLMediaDataClient::Responder *LLObjectMediaDataClient::RequestUpdate::createResponder() +{ + // This just uses the base class's responder. + return new LLMediaDataClient::Responder(this); +} + + /*virtual*/ void LLObjectMediaDataClient::Responder::result(const LLSD& content) { - const LLMediaDataClient::Request::Type type = getRequest()->getType(); - llassert(type == LLMediaDataClient::Request::GET || type == LLMediaDataClient::Request::UPDATE) - if (type == LLMediaDataClient::Request::GET) + getRequest()->stopTracking(); + + if(getRequest()->isDead()) { - LL_DEBUGS("LLMediaDataClientResponse") << *(getRequest()) << " GET returned: " << ll_print_sd(content) << LL_ENDL; + LL_WARNS("LLMediaDataClient") << "dead request " << *(getRequest()) << LL_ENDL; + return; + } + + // This responder is only used for GET requests, not UPDATE. + + LL_DEBUGS("LLMediaDataClientResponse") << *(getRequest()) << " GET returned: " << ll_print_sd(content) << LL_ENDL; + + // Look for an error + if (content.has("error")) + { + const LLSD &error = content["error"]; + LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error getting media data for object: code=" << + error["code"].asString() << ": " << error["message"].asString() << LL_ENDL; - // Look for an error - if (content.has("error")) - { - const LLSD &error = content["error"]; - LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error getting media data for object: code=" << - error["code"].asString() << ": " << error["message"].asString() << LL_ENDL; - - // XXX Warn user? - } - else { - // Check the data - const LLUUID &object_id = content[LLTextureEntry::OBJECT_ID_KEY]; - if (object_id != getRequest()->getObject()->getID()) - { - // NOT good, wrong object id!! - LL_WARNS("LLMediaDataClient") << *(getRequest()) << " DROPPING response with wrong object id (" << object_id << ")" << LL_ENDL; - return; - } - - // Otherwise, update with object media data - getRequest()->getObject()->updateObjectMediaData(content[LLTextureEntry::OBJECT_MEDIA_DATA_KEY], - content[LLTextureEntry::MEDIA_VERSION_KEY]); - } + // XXX Warn user? } - else if (type == LLMediaDataClient::Request::UPDATE) + else { - // just do what our superclass does - LLMediaDataClient::Responder::result(content); + // Check the data + const LLUUID &object_id = content[LLTextureEntry::OBJECT_ID_KEY]; + if (object_id != getRequest()->getObject()->getID()) + { + // NOT good, wrong object id!! + LL_WARNS("LLMediaDataClient") << *(getRequest()) << " DROPPING response with wrong object id (" << object_id << ")" << LL_ENDL; + return; + } + + // Otherwise, update with object media data + getRequest()->getObject()->updateObjectMediaData(content[LLTextureEntry::OBJECT_MEDIA_DATA_KEY], + content[LLTextureEntry::MEDIA_VERSION_KEY]); } } @@ -742,38 +928,105 @@ void LLObjectMediaDataClient::Responder::result(const LLSD& content) // Subclass of LLMediaDataClient for the ObjectMediaNavigate cap // ////////////////////////////////////////////////////////////////////////////////////// -LLMediaDataClient::Responder *LLObjectMediaNavigateClient::createResponder(const request_ptr_t &request) const -{ - return new LLObjectMediaNavigateClient::Responder(request); -} const char *LLObjectMediaNavigateClient::getCapabilityName() const { return "ObjectMediaNavigate"; } +void LLObjectMediaNavigateClient::enqueue(Request *request) +{ + if(request->isDead()) + { + LL_DEBUGS("LLMediaDataClient") << "not queueing dead request " << *request << LL_ENDL; + return; + } + + // If there's already a matching request in the queue, remove it. + request_queue_t::iterator iter = find_matching_request(mQueue, request); + if(iter != mQueue.end()) + { + LL_DEBUGS("LLMediaDataClient") << "removing matching queued request " << (**iter) << LL_ENDL; + mQueue.erase(iter); + } + else + { + request_set_t::iterator set_iter = find_matching_request(mUnQueuedRequests, request); + if(set_iter != mUnQueuedRequests.end()) + { + LL_DEBUGS("LLMediaDataClient") << "removing matching unqueued request " << (**set_iter) << LL_ENDL; + mUnQueuedRequests.erase(set_iter); + } + } + +#if 0 + // Sadly, this doesn't work. It ends up creating a race condition when the user navigates and then hits the "back" button + // where the navigate-back appears to be spurious and doesn't get broadcast. + if(request->getObject()->isCurrentMediaUrl(request->getFace(), request->getURL())) + { + // This navigate request is trying to send the face to the current URL. Drop it. + LL_DEBUGS("LLMediaDataClient") << "dropping spurious request " << (*request) << LL_ENDL; + } + else +#endif + { + LL_DEBUGS("LLMediaDataClient") << "queueing new request " << (*request) << LL_ENDL; + mQueue.push_back(request); + + // Start the timer if not already running + startQueueTimer(); + } +} + void LLObjectMediaNavigateClient::navigate(LLMediaDataClientObject *object, U8 texture_index, const std::string &url) { - LLSD sd_payload; - sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID(); - sd_payload[LLMediaEntry::CURRENT_URL_KEY] = url; - sd_payload[LLTextureEntry::TEXTURE_INDEX_KEY] = (LLSD::Integer)texture_index; + +// LL_INFOS("LLMediaDataClient") << "navigate() initiated: " << ll_print_sd(sd_payload) << LL_ENDL; - LL_INFOS("LLMediaDataClient") << "navigate() initiated: " << ll_print_sd(sd_payload) << LL_ENDL; + // Create a get request and put it in the queue. + enqueue(new RequestNavigate(object, this, texture_index, url)); +} + +LLObjectMediaNavigateClient::RequestNavigate::RequestNavigate(LLMediaDataClientObject *obj, LLMediaDataClient *mdc, U8 texture_index, const std::string &url): + LLMediaDataClient::Request(LLMediaDataClient::Request::NAVIGATE, obj, mdc, (S32)texture_index), + mURL(url) +{ +} + +LLSD LLObjectMediaNavigateClient::RequestNavigate::getPayload() const +{ + LLSD result; + result[LLTextureEntry::OBJECT_ID_KEY] = getID(); + result[LLMediaEntry::CURRENT_URL_KEY] = mURL; + result[LLTextureEntry::TEXTURE_INDEX_KEY] = (LLSD::Integer)getFace(); - request(object, sd_payload); + return result; +} + +LLMediaDataClient::Responder *LLObjectMediaNavigateClient::RequestNavigate::createResponder() +{ + return new LLObjectMediaNavigateClient::Responder(this); } /*virtual*/ void LLObjectMediaNavigateClient::Responder::error(U32 status, const std::string& reason) { + getRequest()->stopTracking(); + + if(getRequest()->isDead()) + { + LL_WARNS("LLMediaDataClient") << "dead request " << *(getRequest()) << LL_ENDL; + return; + } + // Bounce back (unless HTTP_SERVICE_UNAVAILABLE, in which case call base // class if (status == HTTP_SERVICE_UNAVAILABLE) { LLMediaDataClient::Responder::error(status, reason); } - else { + else + { // bounce the face back LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error navigating: http code=" << status << LL_ENDL; const LLSD &payload = getRequest()->getPayload(); @@ -785,6 +1038,14 @@ void LLObjectMediaNavigateClient::Responder::error(U32 status, const std::string /*virtual*/ void LLObjectMediaNavigateClient::Responder::result(const LLSD& content) { + getRequest()->stopTracking(); + + if(getRequest()->isDead()) + { + LL_WARNS("LLMediaDataClient") << "dead request " << *(getRequest()) << LL_ENDL; + return; + } + LL_INFOS("LLMediaDataClient") << *(getRequest()) << " NAVIGATE returned " << ll_print_sd(content) << LL_ENDL; if (content.has("error")) @@ -799,14 +1060,17 @@ void LLObjectMediaNavigateClient::Responder::result(const LLSD& content) // bounce the face back getRequest()->getObject()->mediaNavigateBounceBack((LLSD::Integer)payload[LLTextureEntry::TEXTURE_INDEX_KEY]); } - else { + else + { LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error navigating: code=" << error["code"].asString() << ": " << error["message"].asString() << LL_ENDL; } + // XXX Warn user? } - else { - // just do what our superclass does - LLMediaDataClient::Responder::result(content); + else + { + // No action required. + LL_DEBUGS("LLMediaDataClientResponse") << *(getRequest()) << " result : " << ll_print_sd(content) << LL_ENDL; } } diff --git a/indra/newview/llmediadataclient.h b/indra/newview/llmediadataclient.h index 8dd72cb595..f82eb2120b 100755 --- a/indra/newview/llmediadataclient.h +++ b/indra/newview/llmediadataclient.h @@ -34,7 +34,7 @@ #define LL_LLMEDIADATACLIENT_H #include "llhttpclient.h" -#include <queue> +#include <set> #include "llrefcount.h" #include "llpointer.h" #include "lleventtimer.h" @@ -48,6 +48,8 @@ public: virtual U8 getMediaDataCount() const = 0; // Get the media data at index, as an LLSD virtual LLSD getMediaDataLLSD(U8 index) const = 0; + // Return true if the current URL for the face in the media data matches the specified URL. + virtual bool isCurrentMediaUrl(U8 index, const std::string &url) const = 0; // Get this object's UUID virtual LLUUID getID() const = 0; // Navigate back to previous URL @@ -73,6 +75,7 @@ public: typedef LLPointer<LLMediaDataClientObject> ptr_t; }; + // This object creates a priority queue for requests. // Abstracts the Cap URL, the request, and the responder class LLMediaDataClient : public LLRefCount @@ -93,31 +96,37 @@ public: U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE, U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE); - // Make the request - void request(const LLMediaDataClientObject::ptr_t &object, const LLSD &payload); - F32 getRetryTimerDelay() const { return mRetryTimerDelay; } // Returns true iff the queue is empty - bool isEmpty() const; + virtual bool isEmpty() const; // Returns true iff the given object is in the queue - bool isInQueue(const LLMediaDataClientObject::ptr_t &object); + virtual bool isInQueue(const LLMediaDataClientObject::ptr_t &object); // Remove the given object from the queue. Returns true iff the given object is removed. - bool removeFromQueue(const LLMediaDataClientObject::ptr_t &object); + virtual void removeFromQueue(const LLMediaDataClientObject::ptr_t &object); // Called only by the Queue timer and tests (potentially) - bool processQueueTimer(); + virtual bool processQueueTimer(); protected: // Destructor virtual ~LLMediaDataClient(); // use unref - // Request + class Responder; + + // Request (pure virtual base class for requests in the queue) class Request : public LLRefCount { public: + // Subclasses must implement this to build a payload for their request type. + virtual LLSD getPayload() const = 0; + // and must create the correct type of responder. + virtual Responder *createResponder() = 0; + + virtual std::string getURL() { return ""; } + enum Type { GET, UPDATE, @@ -125,50 +134,61 @@ protected: ANY }; - Request(const char *cap_name, const LLSD& sd_payload, LLMediaDataClientObject *obj, LLMediaDataClient *mdc); - const char *getCapName() const { return mCapName; } - const LLSD &getPayload() const { return mPayload; } + protected: + // The only way to create one of these is through a subclass. + Request(Type in_type, LLMediaDataClientObject *obj, LLMediaDataClient *mdc, S32 face = -1); + public: LLMediaDataClientObject *getObject() const { return mObject; } U32 getNum() const { return mNum; } - U32 getRetryCount() const { return mRetryCount; } void incRetryCount() { mRetryCount++; } + Type getType() const { return mType; } + F64 getScore() const { return mScore; } // Note: may return empty string! std::string getCapability() const; - - Type getType() const; + const char *getCapName() const; const char *getTypeAsString() const; // Re-enqueue thyself - void reEnqueue() const; + void reEnqueue(); F32 getRetryTimerDelay() const; U32 getMaxNumRetries() const; - bool isNew() const { return mObject.notNull() ? mObject->isNew() : false; } - void markSent(bool flag); - bool isMarkedSent() const { return mMarkedSent; } + bool isObjectValid() const { return mObject.notNull() && (!mObject->isDead()); } + bool isNew() const { return isObjectValid() && mObject->isNew(); } void updateScore(); - F64 getScore() const { return mScore; } - public: + void markDead(); + bool isDead(); + void startTracking(); + void stopTracking(); + friend std::ostream& operator<<(std::ostream &s, const Request &q); - protected: - virtual ~Request(); // use unref(); - - private: - const char *mCapName; - LLSD mPayload; + const LLUUID &getID() const { return mObjectID; } + S32 getFace() const { return mFace; } + + bool isMatch (const Request* other, Type match_type = ANY) const + { + return ((match_type == ANY) || (mType == other->mType)) && + (mFace == other->mFace) && + (mObjectID == other->mObjectID); + } + protected: LLMediaDataClientObject::ptr_t mObject; + private: + Type mType; // Simple tracking U32 mNum; static U32 sNum; U32 mRetryCount; F64 mScore; - bool mMarkedSent; + + LLUUID mObjectID; + S32 mFace; // Back pointer to the MDC...not a ref! LLMediaDataClient *mMDC; @@ -185,48 +205,66 @@ protected: //If we get back a normal response, handle it here. Default just logs it. virtual void result(const LLSD& content); - const request_ptr_t &getRequest() const { return mRequest; } + request_ptr_t &getRequest() { return mRequest; } - protected: - virtual ~Responder(); - private: + request_ptr_t mRequest; + }; - class RetryTimer : public LLEventTimer - { - public: - RetryTimer(F32 time, Responder *); - virtual ~RetryTimer(); - virtual BOOL tick(); - private: - // back-pointer - boost::intrusive_ptr<Responder> mResponder; - }; - + class RetryTimer : public LLEventTimer + { + public: + RetryTimer(F32 time, request_ptr_t); + virtual BOOL tick(); + private: + // back-pointer request_ptr_t mRequest; }; + protected: + typedef std::list<request_ptr_t> request_queue_t; + typedef std::set<request_ptr_t> request_set_t; - // Subclasses must override this factory method to return a new responder - virtual Responder *createResponder(const request_ptr_t &request) const = 0; - // Subclasses must override to return a cap name virtual const char *getCapabilityName() const = 0; + + // Puts the request into a queue, appropriately handling duplicates, etc. + virtual void enqueue(Request*) = 0; - virtual void sortQueue(); virtual void serviceQueue(); + + virtual request_queue_t *getQueue() { return &mQueue; }; + + // Gets the next request, removing it from the queue + virtual request_ptr_t dequeue(); -private: - typedef std::list<request_ptr_t> request_queue_t; - - void enqueue(const Request*); + virtual bool canServiceRequest(request_ptr_t request) { return true; }; + + // Returns a request to the head of the queue (should only be used for requests that came from dequeue + virtual void pushBack(request_ptr_t request); - // Return whether the given object is/was in the queue - static LLMediaDataClient::request_ptr_t findOrRemove(request_queue_t &queue, const LLMediaDataClientObject::ptr_t &obj, bool remove, Request::Type type); + void trackRequest(request_ptr_t request); + void stopTrackingRequest(request_ptr_t request); + + request_queue_t mQueue; + + const F32 mQueueTimerDelay; + const F32 mRetryTimerDelay; + const U32 mMaxNumRetries; + const U32 mMaxSortedQueueSize; + const U32 mMaxRoundRobinQueueSize; + + // Set for keeping track of requests that aren't in either queue. This includes: + // Requests that have been sent and are awaiting a response (pointer held by the Responder) + // Requests that are waiting for their retry timers to fire (pointer held by the retry timer) + request_set_t mUnQueuedRequests; + + void startQueueTimer(); + void stopQueueTimer(); + +private: - // Comparator for sorting - static bool compareRequests(const request_ptr_t &o1, const request_ptr_t &o2); static F64 getObjectScore(const LLMediaDataClientObject::ptr_t &obj); friend std::ostream& operator<<(std::ostream &s, const Request &q); @@ -237,57 +275,76 @@ private: public: QueueTimer(F32 time, LLMediaDataClient *mdc); virtual BOOL tick(); - protected: - virtual ~QueueTimer(); private: // back-pointer LLPointer<LLMediaDataClient> mMDC; }; - void startQueueTimer(); - void stopQueueTimer(); void setIsRunning(bool val) { mQueueTimerIsRunning = val; } - - void swapCurrentQueue(); - request_queue_t *getCurrentQueue(); - - const F32 mQueueTimerDelay; - const F32 mRetryTimerDelay; - const U32 mMaxNumRetries; - const U32 mMaxSortedQueueSize; - const U32 mMaxRoundRobinQueueSize; - + bool mQueueTimerIsRunning; - - request_queue_t mSortedQueue; - request_queue_t mRoundRobinQueue; - bool mCurrentQueueIsTheSortedQueue; -}; + template <typename T> friend typename T::iterator find_matching_request(T &c, const LLMediaDataClient::Request *request, LLMediaDataClient::Request::Type match_type = LLMediaDataClient::Request::ANY); + template <typename T> friend typename T::iterator find_matching_request(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type = LLMediaDataClient::Request::ANY); + template <typename T> friend void remove_matching_requests(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type = LLMediaDataClient::Request::ANY); + +}; // MediaDataClient specific for the ObjectMedia cap class LLObjectMediaDataClient : public LLMediaDataClient { public: + LOG_CLASS(LLObjectMediaDataClient); LLObjectMediaDataClient(F32 queue_timer_delay = QUEUE_TIMER_DELAY, F32 retry_timer_delay = UNAVAILABLE_RETRY_TIMER_DELAY, U32 max_retries = MAX_RETRIES, U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE, U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE) - : LLMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries) + : LLMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries), + mCurrentQueueIsTheSortedQueue(true) {} - virtual ~LLObjectMediaDataClient() {} void fetchMedia(LLMediaDataClientObject *object); void updateMedia(LLMediaDataClientObject *object); - -protected: - // Subclasses must override this factory method to return a new responder - virtual Responder *createResponder(const request_ptr_t &request) const; + + class RequestGet: public Request + { + public: + RequestGet(LLMediaDataClientObject *obj, LLMediaDataClient *mdc); + /*virtual*/ LLSD getPayload() const; + /*virtual*/ Responder *createResponder(); + }; + + class RequestUpdate: public Request + { + public: + RequestUpdate(LLMediaDataClientObject *obj, LLMediaDataClient *mdc); + /*virtual*/ LLSD getPayload() const; + /*virtual*/ Responder *createResponder(); + }; + + // Returns true iff the queue is empty + virtual bool isEmpty() const; + // Returns true iff the given object is in the queue + virtual bool isInQueue(const LLMediaDataClientObject::ptr_t &object); + + // Remove the given object from the queue. Returns true iff the given object is removed. + virtual void removeFromQueue(const LLMediaDataClientObject::ptr_t &object); + + virtual bool processQueueTimer(); + + virtual bool canServiceRequest(request_ptr_t request); + +protected: // Subclasses must override to return a cap name virtual const char *getCapabilityName() const; - + + virtual request_queue_t *getQueue(); + + // Puts the request into the appropriate queue + virtual void enqueue(Request*); + class Responder : public LLMediaDataClient::Responder { public: @@ -295,6 +352,16 @@ protected: : LLMediaDataClient::Responder(request) {} virtual void result(const LLSD &content); }; +private: + // The Get/Update data client needs a second queue to avoid object updates starving load-ins. + void swapCurrentQueue(); + + request_queue_t mRoundRobinQueue; + bool mCurrentQueueIsTheSortedQueue; + + // Comparator for sorting + static bool compareRequestScores(const request_ptr_t &o1, const request_ptr_t &o2); + void sortQueue(); }; @@ -302,6 +369,7 @@ protected: class LLObjectMediaNavigateClient : public LLMediaDataClient { public: + LOG_CLASS(LLObjectMediaNavigateClient); // NOTE: from llmediaservice.h static const int ERROR_PERMISSION_DENIED_CODE = 8002; @@ -312,14 +380,24 @@ public: U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE) : LLMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries) {} - virtual ~LLObjectMediaNavigateClient() {} void navigate(LLMediaDataClientObject *object, U8 texture_index, const std::string &url); + + // Puts the request into the appropriate queue + virtual void enqueue(Request*); + + class RequestNavigate: public Request + { + public: + RequestNavigate(LLMediaDataClientObject *obj, LLMediaDataClient *mdc, U8 texture_index, const std::string &url); + /*virtual*/ LLSD getPayload() const; + /*virtual*/ Responder *createResponder(); + /*virtual*/ std::string getURL() { return mURL; } + private: + std::string mURL; + }; protected: - // Subclasses must override this factory method to return a new responder - virtual Responder *createResponder(const request_ptr_t &request) const; - // Subclasses must override to return a cap name virtual const char *getCapabilityName() const; diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 6ae4a5e5e4..fc41137686 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -83,6 +83,16 @@ LLFloaterMove::LLFloaterMove(const LLSD& key) { } +LLFloaterMove::~LLFloaterMove() +{ + // Ensure LLPanelStandStopFlying panel is not among floater's children. See EXT-8458. + setVisible(FALSE); + + // Otherwise it can be destroyed and static pointer in LLPanelStandStopFlying::getInstance() will become invalid. + // Such situation was possible when LLFloaterReg returns "dead" instance of floater. + // Should not happen after LLFloater::destroy was modified to remove "dead" instances from LLFloaterReg. +} + // virtual BOOL LLFloaterMove::postBuild() { diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h index d463861188..43b0342744 100644 --- a/indra/newview/llmoveview.h +++ b/indra/newview/llmoveview.h @@ -51,7 +51,7 @@ class LLFloaterMove private: LLFloaterMove(const LLSD& key); - ~LLFloaterMove() {} + ~LLFloaterMove(); public: /*virtual*/ BOOL postBuild(); diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index 67295179b2..18ef3e19ee 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -816,9 +816,9 @@ void LLNavigationBar::showNavigationPanel(BOOL visible) } } - childSetVisible("bg_icon", visible && fpVisible); - childSetVisible("bg_icon_no_fav_bevel", visible && !fpVisible); - childSetVisible("bg_icon_no_nav_bevel", !visible && fpVisible); + getChildView("bg_icon")->setVisible( visible && fpVisible); + getChildView("bg_icon_no_fav_bevel")->setVisible( visible && !fpVisible); + getChildView("bg_icon_no_nav_bevel")->setVisible( !visible && fpVisible); } void LLNavigationBar::showFavoritesPanel(BOOL visible) @@ -883,9 +883,9 @@ void LLNavigationBar::showFavoritesPanel(BOOL visible) getParent()->reshape(nbRect.getWidth(), nbRect.getHeight()); } - childSetVisible("bg_icon", npVisible && visible); - childSetVisible("bg_icon_no_fav_bevel", npVisible && !visible); - childSetVisible("bg_icon_no_nav_bevel", !npVisible && visible); + getChildView("bg_icon")->setVisible( npVisible && visible); + getChildView("bg_icon_no_fav_bevel")->setVisible( npVisible && !visible); + getChildView("bg_icon_no_nav_bevel")->setVisible( !npVisible && visible); fb->setVisible(visible); } diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index a300e15edd..6cfd810c10 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -317,9 +317,19 @@ void LLGestureComboList::refreshGestures() if (gestures) { - S32 index = gestures->getSelectedValue().asInteger(); - if(index > 0) - gesture = mGestures.at(index); + S32 sel_index = gestures->getFirstSelectedIndex(); + if (sel_index != 0) + { + S32 index = gestures->getSelectedValue().asInteger(); + if (index<0 || index >= (S32)mGestures.size()) + { + llwarns << "out of range gesture access" << llendl; + } + else + { + gesture = mGestures.at(index); + } + } } if(gesture && LLGestureMgr::instance().isGesturePlaying(gesture)) @@ -335,13 +345,13 @@ void LLGestureComboList::onCommitGesture() LLCtrlListInterface* gestures = getListInterface(); if (gestures) { - S32 index = gestures->getFirstSelectedIndex(); - if (index == 0) + S32 sel_index = gestures->getFirstSelectedIndex(); + if (sel_index == 0) { return; } - index = gestures->getSelectedValue().asInteger(); + S32 index = gestures->getSelectedValue().asInteger(); if (mViewAllItemIndex == index) { @@ -357,13 +367,20 @@ void LLGestureComboList::onCommitGesture() return; } - LLMultiGesture* gesture = mGestures.at(index); - if(gesture) + if (index<0 || index >= (S32)mGestures.size()) + { + llwarns << "out of range gesture index" << llendl; + } + else { - LLGestureMgr::instance().playGesture(gesture); - if(!gesture->mReplaceText.empty()) + LLMultiGesture* gesture = mGestures.at(index); + if(gesture) { - LLNearbyChatBar::sendChatFromViewer(gesture->mReplaceText, CHAT_TYPE_NORMAL, FALSE); + LLGestureMgr::instance().playGesture(gesture); + if(!gesture->mReplaceText.empty()) + { + LLNearbyChatBar::sendChatFromViewer(gesture->mReplaceText, CHAT_TYPE_NORMAL, FALSE); + } } } } @@ -374,6 +391,11 @@ LLGestureComboList::~LLGestureComboList() LLGestureMgr::instance().removeObserver(this); } +LLCtrlListInterface* LLGestureComboList::getListInterface() +{ + return mList; +} + LLNearbyChatBar::LLNearbyChatBar() : LLPanel() , mChatBox(NULL) diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index 83c174fd10..0eaa60ce81 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -68,7 +68,7 @@ public: ~LLGestureComboList(); - LLCtrlListInterface* getListInterface() { return (LLCtrlListInterface*)mList; }; + LLCtrlListInterface* getListInterface(); virtual void showList(); virtual void hideList(); virtual BOOL handleKeyHere(KEY key, MASK mask); diff --git a/indra/newview/lloutfitobserver.cpp b/indra/newview/lloutfitobserver.cpp index 03414b9964..60c941b456 100644 --- a/indra/newview/lloutfitobserver.cpp +++ b/indra/newview/lloutfitobserver.cpp @@ -40,6 +40,7 @@ LLOutfitObserver::LLOutfitObserver() : mCOFLastVersion(LLViewerInventoryCategory::VERSION_UNKNOWN) { + mItemNameHash.finalize(); gInventory.addObserver(this); } @@ -87,13 +88,24 @@ bool LLOutfitObserver::checkCOF() if (cof.isNull()) return false; + bool cof_changed = false; + LLMD5 item_name_hash = gInventory.hashDirectDescendentNames(cof); + if (item_name_hash != mItemNameHash) + { + cof_changed = true; + mItemNameHash = item_name_hash; + } + S32 cof_version = getCategoryVersion(cof); + if (cof_version != mCOFLastVersion) + { + cof_changed = true; + mCOFLastVersion = cof_version; + } - if (cof_version == mCOFLastVersion) + if (!cof_changed) return false; - - mCOFLastVersion = cof_version; - + // dirtiness state should be updated before sending signal LLAppearanceMgr::getInstance()->updateIsDirty(); mCOFChanged(); diff --git a/indra/newview/lloutfitobserver.h b/indra/newview/lloutfitobserver.h index 3a66b5ea9f..4bb2b9b5ec 100644 --- a/indra/newview/lloutfitobserver.h +++ b/indra/newview/lloutfitobserver.h @@ -34,6 +34,7 @@ #define LL_OUTFITOBSERVER_H #include "llsingleton.h" +#include "llmd5.h" /** * Outfit observer facade that provides simple possibility to subscribe on @@ -84,6 +85,8 @@ protected: bool mLastOutfitDirtiness; + LLMD5 mItemNameHash; + private: signal_t mBOFReplaced; signal_t mBOFChanged; diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index 63ffb80ff2..b51b2860ab 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -275,11 +275,10 @@ protected: } else if ("wear_replace" == param) { - return !gAgentWearables.isCOFChangeInProgress(); + return LLAppearanceMgr::instance().getCanReplaceCOF(outfit_cat_id); } else if ("wear_add" == param) { - if (gAgentWearables.isCOFChangeInProgress()) return false; return LLAppearanceMgr::getCanAddToCOF(outfit_cat_id); } else if ("take_off" == param) @@ -404,6 +403,12 @@ void LLOutfitsList::onOpen(const LLSD& /*info*/) mIsInitialized = true; } + + LLAccordionCtrlTab* selected_tab = mAccordion->getSelectedTab(); + if (!selected_tab) return; + + // Pass focus to the selected outfit tab. + selected_tab->showAndFocusHeader(); } void LLOutfitsList::refreshList(const LLUUID& category_id) @@ -665,7 +670,18 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata) } if (command_name == "wear") { - return !gAgentWearables.isCOFChangeInProgress(); + if (gAgentWearables.isCOFChangeInProgress()) + { + return false; + } + + if (hasItemSelected()) + { + return canWearSelected(); + } + + // outfit selected + return LLAppearanceMgr::instance().getCanReplaceCOF(mSelectedOutfitUUID); } if (command_name == "take_off") { @@ -677,11 +693,7 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata) if (command_name == "wear_add") { - if (gAgentWearables.isCOFChangeInProgress()) - { - return false; - } - + // *TODO: do we ever get here? return LLAppearanceMgr::getCanAddToCOF(mSelectedOutfitUUID); } @@ -984,6 +996,26 @@ bool LLOutfitsList::canTakeOffSelected() return false; } +bool LLOutfitsList::canWearSelected() +{ + uuid_vec_t selected_items; + getSelectedItemsUUIDs(selected_items); + + for (uuid_vec_t::const_iterator it = selected_items.begin(); it != selected_items.end(); ++it) + { + const LLUUID& id = *it; + + // Check whether the item is worn. + if (!get_can_item_be_worn(id)) + { + return false; + } + } + + // All selected items can be worn. + return true; +} + void LLOutfitsList::onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id) { LLAccordionCtrlTab* tab = dynamic_cast<LLAccordionCtrlTab*>(ctrl); @@ -1012,14 +1044,7 @@ void LLOutfitsList::wearSelectedItems() return; } - uuid_vec_t::const_iterator it; - // Wear items from all selected lists(if possible- add, else replace) - for (it = selected_uuids.begin(); it != selected_uuids.end()-1; ++it) - { - LLAppearanceMgr::getInstance()->wearItemOnAvatar(*it, false, false); - } - // call update only when wearing last item - LLAppearanceMgr::getInstance()->wearItemOnAvatar(*it, true, false); + wear_multiple(selected_uuids, false); } void LLOutfitsList::onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y) @@ -1036,25 +1061,37 @@ void LLOutfitsList::onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y) void LLOutfitsList::onCOFChanged() { - LLInventoryModel::changed_items_t changed_linked_items; + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t item_array; - const LLInventoryModel::changed_items_t& changed_items = gInventory.getChangedIDs(); - for (LLInventoryModel::changed_items_t::const_iterator iter = changed_items.begin(); - iter != changed_items.end(); - ++iter) + // Collect current COF items + gInventory.collectDescendents( + LLAppearanceMgr::instance().getCOF(), + cat_array, + item_array, + LLInventoryModel::EXCLUDE_TRASH); + + uuid_vec_t vnew; + uuid_vec_t vadded; + uuid_vec_t vremoved; + + // From gInventory we get the UUIDs of links that are currently in COF. + // These links UUIDs are not the same UUIDs that we have in each wearable items list. + // So we collect base items' UUIDs to find them or links that point to them in wearable + // items lists and update their worn state there. + for (LLInventoryModel::item_array_t::const_iterator iter = item_array.begin(); + iter != item_array.end(); + ++iter) { - LLViewerInventoryItem* item = gInventory.getItem(*iter); - if (item) - { - // From gInventory we get the UUIDs of new links added to COF - // or removed from COF. These links UUIDs are not the same UUIDs - // that we have in each wearable items list. So we collect base items - // UUIDs to find all items or links that point to same base items in wearable - // items lists and update their worn state there. - changed_linked_items.insert(item->getLinkedUUID()); - } + vnew.push_back((*iter)->getLinkedUUID()); } + // We need to update only items that were added or removed from COF. + LLCommonUtils::computeDifference(vnew, mCOFLinkedItems, vadded, vremoved); + + // Store the ids of items currently linked from COF. + mCOFLinkedItems = vnew; + for (outfits_map_t::iterator iter = mOutfitsMap.begin(); iter != mOutfitsMap.end(); ++iter) @@ -1065,9 +1102,13 @@ void LLOutfitsList::onCOFChanged() LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView()); if (!list) continue; + // Append removed ids to added ids because we should update all of them. + vadded.reserve(vadded.size() + vremoved.size()); + vadded.insert(vadded.end(), vremoved.begin(), vremoved.end()); + // Every list updates the labels of changed items or // the links that point to these items. - list->updateChangedItems(changed_linked_items); + list->updateChangedItems(vadded); } } diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h index d7cf8a8c08..4613bdfeb9 100644 --- a/indra/newview/lloutfitslist.h +++ b/indra/newview/lloutfitslist.h @@ -183,6 +183,11 @@ private: */ bool canTakeOffSelected(); + /** + * Returns true if all selected items can be worn. + */ + bool canWearSelected(); + void onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id); void onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y); void onCOFChanged(); @@ -209,6 +214,10 @@ private: typedef outfits_map_t::value_type outfits_map_value_t; outfits_map_t mOutfitsMap; + // IDs of original items which are worn and linked in COF. + // Used to monitor COF changes for updating items worn state. See EXT-8636. + uuid_vec_t mCOFLinkedItems; + LLOutfitListGearMenu* mGearMenu; LLListContextMenu* mOutfitMenu; diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index 534bb6e3fc..c8f97ecd13 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -176,14 +176,14 @@ void LLPanelAvatarNotes::onOpen(const LLSD& key) fillRightsData(); //Disable "Add Friend" button for friends. - childSetEnabled("add_friend", !LLAvatarActions::isFriend(getAvatarId())); + getChildView("add_friend")->setEnabled(!LLAvatarActions::isFriend(getAvatarId())); } void LLPanelAvatarNotes::fillRightsData() { - childSetValue("status_check", FALSE); - childSetValue("map_check", FALSE); - childSetValue("objects_check", FALSE); + getChild<LLUICtrl>("status_check")->setValue(FALSE); + getChild<LLUICtrl>("map_check")->setValue(FALSE); + getChild<LLUICtrl>("objects_check")->setValue(FALSE); const LLRelationship* relation = LLAvatarTracker::instance().getBuddyInfo(getAvatarId()); // If true - we are viewing friend's profile, enable check boxes and set values. @@ -191,9 +191,9 @@ void LLPanelAvatarNotes::fillRightsData() { S32 rights = relation->getRightsGrantedTo(); - childSetValue("status_check",LLRelationship::GRANT_ONLINE_STATUS & rights ? TRUE : FALSE); - childSetValue("map_check",LLRelationship::GRANT_MAP_LOCATION & rights ? TRUE : FALSE); - childSetValue("objects_check",LLRelationship::GRANT_MODIFY_OBJECTS & rights ? TRUE : FALSE); + getChild<LLUICtrl>("status_check")->setValue(LLRelationship::GRANT_ONLINE_STATUS & rights ? TRUE : FALSE); + getChild<LLUICtrl>("map_check")->setValue(LLRelationship::GRANT_MAP_LOCATION & rights ? TRUE : FALSE); + getChild<LLUICtrl>("objects_check")->setValue(LLRelationship::GRANT_MODIFY_OBJECTS & rights ? TRUE : FALSE); } @@ -202,7 +202,7 @@ void LLPanelAvatarNotes::fillRightsData() void LLPanelAvatarNotes::onCommitNotes() { - std::string notes = childGetValue("notes_edit").asString(); + std::string notes = getChild<LLUICtrl>("notes_edit")->getValue().asString(); LLAvatarPropertiesProcessor::getInstance()-> sendNotes(getAvatarId(),notes); } @@ -217,8 +217,8 @@ void LLPanelAvatarNotes::rightsConfirmationCallback(const LLSD& notification, } else { - childSetValue("objects_check", - childGetValue("objects_check").asBoolean() ? FALSE : TRUE); + getChild<LLUICtrl>("objects_check")->setValue( + getChild<LLUICtrl>("objects_check")->getValue().asBoolean() ? FALSE : TRUE); } } @@ -261,14 +261,14 @@ void LLPanelAvatarNotes::onCommitRights() S32 rights = 0; - if(childGetValue("status_check").asBoolean()) + if(getChild<LLUICtrl>("status_check")->getValue().asBoolean()) rights |= LLRelationship::GRANT_ONLINE_STATUS; - if(childGetValue("map_check").asBoolean()) + if(getChild<LLUICtrl>("map_check")->getValue().asBoolean()) rights |= LLRelationship::GRANT_MAP_LOCATION; - if(childGetValue("objects_check").asBoolean()) + if(getChild<LLUICtrl>("objects_check")->getValue().asBoolean()) rights |= LLRelationship::GRANT_MODIFY_OBJECTS; - bool allow_modify_objects = childGetValue("objects_check").asBoolean(); + bool allow_modify_objects = getChild<LLUICtrl>("objects_check")->getValue().asBoolean(); // if modify objects checkbox clicked if (buddy_relationship->isRightGrantedTo( @@ -291,8 +291,8 @@ void LLPanelAvatarNotes::processProperties(void* data, EAvatarProcessorType type LLAvatarNotes* avatar_notes = static_cast<LLAvatarNotes*>(data); if(avatar_notes && getAvatarId() == avatar_notes->target_id) { - childSetValue("notes_edit",avatar_notes->notes); - childSetEnabled("notes edit", true); + getChild<LLUICtrl>("notes_edit")->setValue(avatar_notes->notes); + getChildView("notes edit")->setEnabled(true); LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(),this); } @@ -301,15 +301,15 @@ void LLPanelAvatarNotes::processProperties(void* data, EAvatarProcessorType type void LLPanelAvatarNotes::resetData() { - childSetValue("notes_edit",LLStringUtil::null); + getChild<LLUICtrl>("notes_edit")->setValue(LLStringUtil::null); // Default value is TRUE - childSetValue("status_check", TRUE); + getChild<LLUICtrl>("status_check")->setValue(TRUE); } void LLPanelAvatarNotes::resetControls() { //Disable "Add Friend" button for friends. - childSetEnabled("add_friend", TRUE); + getChildView("add_friend")->setEnabled(TRUE); enableCheckboxes(false); } @@ -341,9 +341,9 @@ void LLPanelAvatarNotes::onShareButtonClick() void LLPanelAvatarNotes::enableCheckboxes(bool enable) { - childSetEnabled("status_check", enable); - childSetEnabled("map_check", enable); - childSetEnabled("objects_check", enable); + getChildView("status_check")->setEnabled(enable); + getChildView("map_check")->setEnabled(enable); + getChildView("objects_check")->setEnabled(enable); } LLPanelAvatarNotes::~LLPanelAvatarNotes() @@ -361,7 +361,7 @@ LLPanelAvatarNotes::~LLPanelAvatarNotes() // virtual, called by LLAvatarTracker void LLPanelAvatarNotes::changed(U32 mask) { - childSetEnabled("teleport", LLAvatarTracker::instance().isBuddyOnline(getAvatarId())); + getChildView("teleport")->setEnabled(LLAvatarTracker::instance().isBuddyOnline(getAvatarId())); // update rights to avoid have checkboxes enabled when friendship is terminated. EXT-4947. fillRightsData(); @@ -375,7 +375,7 @@ void LLPanelAvatarNotes::onChange(EStatusType status, const std::string &channel return; } - childSetEnabled("call", LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking()); + getChildView("call")->setEnabled(LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking()); } void LLPanelAvatarNotes::setAvatarId(const LLUUID& id) @@ -457,17 +457,17 @@ void LLPanelProfileTab::updateButtons() if(LLAvatarActions::isFriend(getAvatarId())) { - childSetEnabled("teleport", is_buddy_online); + getChildView("teleport")->setEnabled(is_buddy_online); } else { - childSetEnabled("teleport", true); + getChildView("teleport")->setEnabled(true); } bool enable_map_btn = (is_buddy_online && is_agent_mappable(getAvatarId())) || gAgent.isGodlike(); - childSetEnabled("show_on_map_btn", enable_map_btn); + getChildView("show_on_map_btn")->setEnabled(enable_map_btn); } ////////////////////////////////////////////////////////////////////////// @@ -528,7 +528,7 @@ void LLPanelAvatarProfile::onOpen(const LLSD& key) mGroups.clear(); //Disable "Add Friend" button for friends. - childSetEnabled("add_friend", !LLAvatarActions::isFriend(getAvatarId())); + getChildView("add_friend")->setEnabled(!LLAvatarActions::isFriend(getAvatarId())); } void LLPanelAvatarProfile::updateData() @@ -544,32 +544,32 @@ void LLPanelAvatarProfile::updateData() void LLPanelAvatarProfile::resetControls() { - childSetVisible("status_panel", true); - childSetVisible("profile_buttons_panel", true); - childSetVisible("title_groups_text", true); - childSetVisible("sl_groups", true); - childSetEnabled("add_friend", true); + getChildView("status_panel")->setVisible( true); + getChildView("profile_buttons_panel")->setVisible( true); + getChildView("title_groups_text")->setVisible( true); + getChildView("sl_groups")->setVisible( true); + getChildView("add_friend")->setEnabled(true); - childSetVisible("status_me_panel", false); - childSetVisible("profile_me_buttons_panel", false); - childSetVisible("account_actions_panel", false); + getChildView("status_me_panel")->setVisible( false); + getChildView("profile_me_buttons_panel")->setVisible( false); + getChildView("account_actions_panel")->setVisible( false); } void LLPanelAvatarProfile::resetData() { mGroups.clear(); - childSetValue("2nd_life_pic",LLUUID::null); - childSetValue("real_world_pic",LLUUID::null); - childSetValue("online_status",LLStringUtil::null); - childSetValue("status_message",LLStringUtil::null); - childSetValue("sl_description_edit",LLStringUtil::null); - childSetValue("fl_description_edit",LLStringUtil::null); - childSetValue("sl_groups",LLStringUtil::null); - childSetValue("homepage_edit",LLStringUtil::null); - childSetValue("register_date",LLStringUtil::null); - childSetValue("acc_status_text",LLStringUtil::null); - childSetTextArg("partner_text", "[FIRST]", LLStringUtil::null); - childSetTextArg("partner_text", "[LAST]", LLStringUtil::null); + getChild<LLUICtrl>("2nd_life_pic")->setValue(LLUUID::null); + getChild<LLUICtrl>("real_world_pic")->setValue(LLUUID::null); + getChild<LLUICtrl>("online_status")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("status_message")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("sl_description_edit")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("fl_description_edit")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("sl_groups")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("homepage_edit")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("register_date")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("acc_status_text")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("partner_text")->setTextArg("[FIRST]", LLStringUtil::null); + getChild<LLUICtrl>("partner_text")->setTextArg("[LAST]", LLStringUtil::null); } void LLPanelAvatarProfile::processProperties(void* data, EAvatarProcessorType type) @@ -631,7 +631,7 @@ void LLPanelAvatarProfile::processGroupProperties(const LLAvatarGroups* avatar_g groups += group_url; } - childSetValue("sl_groups", groups); + getChild<LLUICtrl>("sl_groups")->setValue(groups); } void LLPanelAvatarProfile::fillCommonData(const LLAvatarData* avatar_data) @@ -647,15 +647,15 @@ void LLPanelAvatarProfile::fillCommonData(const LLAvatarData* avatar_data) } args["[AGE]"] = LLDateUtil::ageFromDate( avatar_data->born_on, LLDate::now()); std::string register_date = getString("RegisterDateFormat", args); - childSetValue("register_date", register_date ); - childSetValue("sl_description_edit", avatar_data->about_text); - childSetValue("fl_description_edit",avatar_data->fl_about_text); - childSetValue("2nd_life_pic", avatar_data->image_id); - childSetValue("real_world_pic", avatar_data->fl_image_id); - childSetValue("homepage_edit", avatar_data->profile_url); + getChild<LLUICtrl>("register_date")->setValue(register_date ); + getChild<LLUICtrl>("sl_description_edit")->setValue(avatar_data->about_text); + getChild<LLUICtrl>("fl_description_edit")->setValue(avatar_data->fl_about_text); + getChild<LLUICtrl>("2nd_life_pic")->setValue(avatar_data->image_id); + getChild<LLUICtrl>("real_world_pic")->setValue(avatar_data->fl_image_id); + getChild<LLUICtrl>("homepage_edit")->setValue(avatar_data->profile_url); // Hide home page textbox if no page was set to fix "homepage URL appears clickable without URL - EXT-4734" - childSetVisible("homepage_edit", !avatar_data->profile_url.empty()); + getChildView("homepage_edit")->setVisible( !avatar_data->profile_url.empty()); } void LLPanelAvatarProfile::fillPartnerData(const LLAvatarData* avatar_data) @@ -681,7 +681,7 @@ void LLPanelAvatarProfile::fillAccountStatus(const LLAvatarData* avatar_data) // dataserver/lldataavatar.cpp for privacy considerations args["[AGEVERIFICATION]"] = ""; std::string caption_text = getString("CaptionTextAcctInfo", args); - childSetValue("acc_status_text", caption_text); + getChild<LLUICtrl>("acc_status_text")->setValue(caption_text); } void LLPanelAvatarProfile::pay() @@ -797,7 +797,7 @@ LLPanelAvatarProfile::~LLPanelAvatarProfile() // virtual, called by LLAvatarTracker void LLPanelAvatarProfile::changed(U32 mask) { - childSetEnabled("teleport", LLAvatarTracker::instance().isBuddyOnline(getAvatarId())); + getChildView("teleport")->setEnabled(LLAvatarTracker::instance().isBuddyOnline(getAvatarId())); } // virtual @@ -808,7 +808,7 @@ void LLPanelAvatarProfile::onChange(EStatusType status, const std::string &chann return; } - childSetEnabled("call", LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking()); + getChildView("call")->setEnabled(LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking()); } void LLPanelAvatarProfile::setAvatarId(const LLUUID& id) @@ -861,12 +861,12 @@ void LLPanelMyProfile::processProfileProperties(const LLAvatarData* avatar_data) void LLPanelMyProfile::resetControls() { - childSetVisible("status_panel", false); - childSetVisible("profile_buttons_panel", false); - childSetVisible("title_groups_text", false); - childSetVisible("sl_groups", false); - childSetVisible("status_me_panel", true); - childSetVisible("profile_me_buttons_panel", true); + getChildView("status_panel")->setVisible( false); + getChildView("profile_buttons_panel")->setVisible( false); + getChildView("title_groups_text")->setVisible( false); + getChildView("sl_groups")->setVisible( false); + getChildView("status_me_panel")->setVisible( true); + getChildView("profile_me_buttons_panel")->setVisible( true); } diff --git a/indra/newview/llpanelblockedlist.cpp b/indra/newview/llpanelblockedlist.cpp index c72f0f8012..d24c2f7f1b 100644 --- a/indra/newview/llpanelblockedlist.cpp +++ b/indra/newview/llpanelblockedlist.cpp @@ -132,7 +132,7 @@ void LLPanelBlockedList::refreshBlockedList() void LLPanelBlockedList::updateButtons() { bool hasSelected = NULL != mBlockedList->getFirstSelected(); - childSetEnabled("Unblock", hasSelected); + getChildView("Unblock")->setEnabled(hasSelected); } @@ -269,7 +269,7 @@ void LLFloaterGetBlockedObjectName::applyBlocking() { if (mGetObjectNameCallback) { - const std::string& text = childGetValue("object_name").asString(); + const std::string& text = getChild<LLUICtrl>("object_name")->getValue().asString(); mGetObjectNameCallback(text); } closeFloater(); diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index 7f027d299b..09b718f8b8 100644 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -38,53 +38,34 @@ #include "llpanelclassified.h" -#include "lldir.h" #include "lldispatcher.h" #include "llfloaterreg.h" #include "llhttpclient.h" #include "llnotifications.h" #include "llnotificationsutil.h" #include "llparcel.h" -#include "lltabcontainer.h" -#include "message.h" #include "llagent.h" -#include "llavataractions.h" -#include "llbutton.h" -#include "llcheckboxctrl.h" #include "llclassifiedflags.h" #include "llclassifiedstatsresponder.h" #include "llcommandhandler.h" // for classified HTML detail page click tracking -#include "llviewercontrol.h" +#include "lliconctrl.h" #include "lllineeditor.h" -#include "lltextbox.h" #include "llcombobox.h" #include "lltexturectrl.h" #include "lltexteditor.h" -#include "lluiconstants.h" -#include "llurldispatcher.h" // for classified HTML detail click teleports -#include "lluictrlfactory.h" #include "llviewerparcelmgr.h" -#include "llviewerwindow.h" -#include "llworldmap.h" #include "llfloaterworldmap.h" #include "llviewergenericmessage.h" // send_generic_message #include "llviewerregion.h" -#include "llviewerwindow.h" // for window width, height -#include "llappviewer.h" // abortQuit() #include "lltrans.h" #include "llscrollcontainer.h" #include "llstatusbar.h" const S32 MINIMUM_PRICE_FOR_LISTING = 50; // L$ -const S32 MATURE_UNDEFINED = -1; -const S32 MATURE_CONTENT = 1; -const S32 PG_CONTENT = 2; -const S32 DECLINE_TO_STATE = 0; //static -std::list<LLPanelClassified*> LLPanelClassified::sAllPanels; -std::list<LLPanelClassifiedInfo*> LLPanelClassifiedInfo::sAllPanels; +LLPanelClassifiedInfo::panel_list_t LLPanelClassifiedInfo::sAllPanels; // "classifiedclickthrough" // strings[0] = classified_id @@ -131,1040 +112,6 @@ public: } }; - -/* Re-expose this if we need to have classified ad HTML detail - pages. JC - -// We need to count classified teleport clicks from the search HTML detail pages, -// so we need have a teleport that also sends a click count message. -class LLClassifiedTeleportHandler : public LLCommandHandler -{ -public: - // don't allow from external browsers because it moves you immediately - LLClassifiedTeleportHandler() : LLCommandHandler("classifiedteleport", UNTRUSTED_BLOCK) { } - - bool handle(const LLSD& tokens, const LLSD& queryMap) - { - // Need at least classified id and region name, so 2 params - if (tokens.size() < 2) return false; - LLUUID classified_id = tokens[0].asUUID(); - if (classified_id.isNull()) return false; - // *HACK: construct a SLURL to do the teleport - std::string url("secondlife:///app/teleport/"); - // skip the uuid we took off above, rebuild URL - // separated by slashes. - for (S32 i = 1; i < tokens.size(); ++i) - { - url += tokens[i].asString(); - url += "/"; - } - llinfos << "classified teleport to " << url << llendl; - // *TODO: separately track old search, sidebar, and new search - // Right now detail HTML pages count as new search. - const bool from_search = true; - LLPanelClassified::sendClassifiedClickMessage(classified_id, "teleport", from_search); - // Invoke teleport - LLMediaCtrl* web = NULL; - const bool trusted_browser = true; - return LLURLDispatcher::dispatch(url, web, trusted_browser); - } -}; -// Creating the object registers with the dispatcher. -LLClassifiedTeleportHandler gClassifiedTeleportHandler; -*/ - -LLPanelClassified::LLPanelClassified(bool in_finder, bool from_search) -: LLPanel(), - mInFinder(in_finder), - mFromSearch(from_search), - mDirty(false), - mForceClose(false), - mLocationChanged(false), - mClassifiedID(), - mCreatorID(), - mPriceForListing(0), - mDataRequested(FALSE), - mPaidFor(FALSE), - mPosGlobal(), - mSnapshotCtrl(NULL), - mNameEditor(NULL), - mDescEditor(NULL), - mLocationEditor(NULL), - mCategoryCombo(NULL), - mMatureCombo(NULL), - mAutoRenewCheck(NULL), - mUpdateBtn(NULL), - mTeleportBtn(NULL), - mMapBtn(NULL), - mProfileBtn(NULL), - mInfoText(NULL), - mSetBtn(NULL), - mClickThroughText(NULL), - mTeleportClicksOld(0), - mMapClicksOld(0), - mProfileClicksOld(0), - mTeleportClicksNew(0), - mMapClicksNew(0), - mProfileClicksNew(0) - -{ - sAllPanels.push_back(this); - - std::string classified_def_file; - if (mInFinder) - { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_classified.xml"); - } - else - { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_classified.xml"); - } - - // Register dispatcher - gGenericDispatcher.addHandler("classifiedclickthrough", - &sClassifiedClickThrough); -} - - -LLPanelClassified::~LLPanelClassified() -{ - sAllPanels.remove(this); -} - - -void LLPanelClassified::reset() -{ - mClassifiedID.setNull(); - mCreatorID.setNull(); - mParcelID.setNull(); - - // Don't request data, this isn't valid - mDataRequested = TRUE; - - mDirty = false; - mPaidFor = FALSE; - - mPosGlobal.clearVec(); - - clearCtrls(); - resetDirty(); -} - - -BOOL LLPanelClassified::postBuild() -{ - mSnapshotCtrl = getChild<LLTextureCtrl>("snapshot_ctrl"); - mSnapshotCtrl->setCommitCallback(onCommitAny, this); - mSnapshotSize = mSnapshotCtrl->getRect(); - - mNameEditor = getChild<LLLineEditor>("given_name_editor"); - mNameEditor->setMaxTextLength(DB_PARCEL_NAME_LEN); - mNameEditor->setCommitOnFocusLost(TRUE); - mNameEditor->setFocusReceivedCallback(boost::bind(focusReceived, _1, this)); - mNameEditor->setCommitCallback(onCommitAny, this); - mNameEditor->setPrevalidate( LLTextValidate::validateASCII ); - - mDescEditor = getChild<LLTextEditor>("desc_editor"); - mDescEditor->setCommitOnFocusLost(TRUE); - mDescEditor->setFocusReceivedCallback(boost::bind(focusReceived, _1, this)); - mDescEditor->setCommitCallback(onCommitAny, this); - - mLocationEditor = getChild<LLLineEditor>("location_editor"); - - mSetBtn = getChild<LLButton>( "set_location_btn"); - mSetBtn->setClickedCallback(onClickSet, this); - - mTeleportBtn = getChild<LLButton>( "classified_teleport_btn"); - mTeleportBtn->setClickedCallback(onClickTeleport, this); - - mMapBtn = getChild<LLButton>( "classified_map_btn"); - mMapBtn->setClickedCallback(onClickMap, this); - - if(mInFinder) - { - mProfileBtn = getChild<LLButton>( "classified_profile_btn"); - mProfileBtn->setClickedCallback(onClickProfile, this); - } - - mCategoryCombo = getChild<LLComboBox>( "classified_category_combo"); - LLClassifiedInfo::cat_map::iterator iter; - for (iter = LLClassifiedInfo::sCategories.begin(); - iter != LLClassifiedInfo::sCategories.end(); - iter++) - { - mCategoryCombo->add(LLTrans::getString(iter->second), (void *)((intptr_t)iter->first), ADD_BOTTOM); - } - mCategoryCombo->setCurrentByIndex(0); - mCategoryCombo->setCommitCallback(onCommitAny, this); - - mMatureCombo = getChild<LLComboBox>( "classified_mature_check"); - mMatureCombo->setCurrentByIndex(0); - mMatureCombo->setCommitCallback(onCommitAny, this); - if (gAgent.wantsPGOnly()) - { - // Teens don't get to set mature flag. JC - mMatureCombo->setVisible(FALSE); - mMatureCombo->setCurrentByIndex(PG_CONTENT); - } - - if (!mInFinder) - { - mAutoRenewCheck = getChild<LLCheckBoxCtrl>( "auto_renew_check"); - mAutoRenewCheck->setCommitCallback(onCommitAny, this); - } - - mUpdateBtn = getChild<LLButton>("classified_update_btn"); - mUpdateBtn->setClickedCallback(onClickUpdate, this); - - if (!mInFinder) - { - mClickThroughText = getChild<LLTextBox>("click_through_text"); - } - - resetDirty(); - return TRUE; -} - -BOOL LLPanelClassified::titleIsValid() -{ - // Disallow leading spaces, punctuation, etc. that screw up - // sort order. - const std::string& name = mNameEditor->getText(); - if (name.empty()) - { - LLNotificationsUtil::add("BlankClassifiedName"); - return FALSE; - } - if (!isalnum(name[0])) - { - LLNotificationsUtil::add("ClassifiedMustBeAlphanumeric"); - return FALSE; - } - - return TRUE; -} - -void LLPanelClassified::apply() -{ - // Apply is used for automatically saving results, so only - // do that if there is a difference, and this is a save not create. - if (checkDirty() && mPaidFor) - { - sendClassifiedInfoUpdate(); - } -} - -bool LLPanelClassified::saveCallback(const LLSD& notification, const LLSD& response) -{ - S32 option = LLNotificationsUtil::getSelectedOption(notification, response); - - switch(option) - { - case 0: // Save - sendClassifiedInfoUpdate(); - // fall through to close - - case 1: // Don't Save - { - mForceClose = true; - // Close containing floater - LLFloater* parent_floater = gFloaterView->getParentFloater(this); - if (parent_floater) - { - parent_floater->closeFloater(); - } - } - break; - - case 2: // Cancel - default: - LLAppViewer::instance()->abortQuit(); - break; - } - return false; -} - - -BOOL LLPanelClassified::canClose() -{ - if (mForceClose || !checkDirty()) - return TRUE; - - LLSD args; - args["NAME"] = mNameEditor->getText(); - LLNotificationsUtil::add("ClassifiedSave", args, LLSD(), boost::bind(&LLPanelClassified::saveCallback, this, _1, _2)); - return FALSE; -} - -// Fill in some reasonable defaults for a new classified. -void LLPanelClassified::initNewClassified() -{ - // TODO: Don't generate this on the client. - mClassifiedID.generate(); - - mCreatorID = gAgent.getID(); - - mPosGlobal = gAgent.getPositionGlobal(); - - mPaidFor = FALSE; - - // Try to fill in the current parcel - LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); - if (parcel) - { - mNameEditor->setText(parcel->getName()); - //mDescEditor->setText(parcel->getDesc()); - mSnapshotCtrl->setImageAssetID(parcel->getSnapshotID()); - //mPriceEditor->setText("0"); - mCategoryCombo->setCurrentByIndex(0); - } - - mUpdateBtn->setLabel(getString("publish_txt")); - - // simulate clicking the "location" button - LLPanelClassified::onClickSet(this); -} - - -void LLPanelClassified::setClassifiedID(const LLUUID& id) -{ - mClassifiedID = id; -} - -//static -void LLPanelClassified::setClickThrough(const LLUUID& classified_id, - S32 teleport, - S32 map, - S32 profile, - bool from_new_table) -{ - for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter) - { - LLPanelClassified* self = *iter; - // For top picks, must match pick id - if (self->mClassifiedID != classified_id) - { - continue; - } - - // We need to check to see if the data came from the new stat_table - // or the old classified table. We also need to cache the data from - // the two separate sources so as to display the aggregate totals. - - if (from_new_table) - { - self->mTeleportClicksNew = teleport; - self->mMapClicksNew = map; - self->mProfileClicksNew = profile; - } - else - { - self->mTeleportClicksOld = teleport; - self->mMapClicksOld = map; - self->mProfileClicksOld = profile; - } - - if (self->mClickThroughText) - { - LLStringUtil::format_map_t args; - args["[TELEPORT]"] = llformat ("%d", self->mTeleportClicksNew + self->mTeleportClicksOld); - args["[MAP]"] = llformat ("%d", self->mMapClicksNew + self->mMapClicksOld); - args["[PROFILE]"] = llformat ("%d", self->mProfileClicksNew + self->mProfileClicksOld); - std::string msg = LLTrans::getString ("ClassifiedClicksTxt", args); - self->mClickThroughText->setText(msg); - } - } -} - -// Schedules the panel to request data -// from the server next time it is drawn. -void LLPanelClassified::markForServerRequest() -{ - mDataRequested = FALSE; -} - - -std::string LLPanelClassified::getClassifiedName() -{ - return mNameEditor->getText(); -} - - -void LLPanelClassified::sendClassifiedInfoRequest() -{ - LLMessageSystem *msg = gMessageSystem; - - if (mClassifiedID != mRequestedID) - { - msg->newMessageFast(_PREHASH_ClassifiedInfoRequest); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() ); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); - msg->nextBlockFast(_PREHASH_Data); - msg->addUUIDFast(_PREHASH_ClassifiedID, mClassifiedID); - gAgent.sendReliableMessage(); - - mDataRequested = TRUE; - mRequestedID = mClassifiedID; - - // While we're at it let's get the stats from the new table if that - // capability exists. - std::string url = gAgent.getRegion()->getCapability("SearchStatRequest"); - LLSD body; - body["classified_id"] = mClassifiedID; - - if (!url.empty()) - { - llinfos << "Classified stat request via capability" << llendl; - LLHTTPClient::post(url, body, new LLClassifiedStatsResponder(mClassifiedID)); - } - } -} - - -void LLPanelClassified::sendClassifiedInfoUpdate() -{ - // If we don't have a classified id yet, we'll need to generate one, - // otherwise we'll keep overwriting classified_id 00000 in the database. - if (mClassifiedID.isNull()) - { - // TODO: Don't do this on the client. - mClassifiedID.generate(); - } - - LLMessageSystem* msg = gMessageSystem; - - msg->newMessageFast(_PREHASH_ClassifiedInfoUpdate); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->nextBlockFast(_PREHASH_Data); - msg->addUUIDFast(_PREHASH_ClassifiedID, mClassifiedID); - // TODO: fix this - U32 category = mCategoryCombo->getCurrentIndex() + 1; - msg->addU32Fast(_PREHASH_Category, category); - msg->addStringFast(_PREHASH_Name, mNameEditor->getText()); - msg->addStringFast(_PREHASH_Desc, mDescEditor->getText()); - - // fills in on simulator if null - msg->addUUIDFast(_PREHASH_ParcelID, mParcelID); - // fills in on simulator if null - msg->addU32Fast(_PREHASH_ParentEstate, 0); - msg->addUUIDFast(_PREHASH_SnapshotID, mSnapshotCtrl->getImageAssetID()); - msg->addVector3dFast(_PREHASH_PosGlobal, mPosGlobal); - BOOL mature = mMatureCombo->getCurrentIndex() == MATURE_CONTENT; - BOOL auto_renew = FALSE; - if (mAutoRenewCheck) - { - auto_renew = mAutoRenewCheck->get(); - } - // These flags doesn't matter here. - const bool adult_enabled = false; - const bool is_pg = false; - U8 flags = pack_classified_flags_request(auto_renew, is_pg, mature, adult_enabled); - msg->addU8Fast(_PREHASH_ClassifiedFlags, flags); - msg->addS32("PriceForListing", mPriceForListing); - gAgent.sendReliableMessage(); - - mDirty = false; -} - - -//static -void LLPanelClassified::processClassifiedInfoReply(LLMessageSystem *msg, void **) -{ - lldebugs << "processClassifiedInfoReply()" << llendl; - // Extract the agent id and verify the message is for this - // client. - LLUUID agent_id; - msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id ); - if (agent_id != gAgent.getID()) - { - llwarns << "Agent ID mismatch in processClassifiedInfoReply" - << llendl; - return; - } - - LLUUID classified_id; - msg->getUUIDFast(_PREHASH_Data, _PREHASH_ClassifiedID, classified_id); - - LLUUID creator_id; - msg->getUUIDFast(_PREHASH_Data, _PREHASH_CreatorID, creator_id); - - LLUUID parcel_id; - msg->getUUIDFast(_PREHASH_Data, _PREHASH_ParcelID, parcel_id); - - std::string name; - msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name); - - std::string desc; - msg->getStringFast(_PREHASH_Data, _PREHASH_Desc, desc); - - LLUUID snapshot_id; - msg->getUUIDFast(_PREHASH_Data, _PREHASH_SnapshotID, snapshot_id); - - // "Location text" is actually the original - // name that owner gave the parcel, and the location. - std::string location_text; - - msg->getStringFast(_PREHASH_Data, _PREHASH_ParcelName, location_text); - if (!location_text.empty()) - { - location_text.append(", "); - } - - std::string sim_name; - msg->getStringFast(_PREHASH_Data, _PREHASH_SimName, sim_name); - - LLVector3d pos_global; - msg->getVector3dFast(_PREHASH_Data, _PREHASH_PosGlobal, pos_global); - - S32 region_x = llround((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS; - S32 region_y = llround((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS; - S32 region_z = llround((F32)pos_global.mdV[VZ]); - - std::string buffer = llformat("%s (%d, %d, %d)", sim_name.c_str(), region_x, region_y, region_z); - location_text.append(buffer); - - U8 flags; - msg->getU8Fast(_PREHASH_Data, _PREHASH_ClassifiedFlags, flags); - //BOOL enabled = is_cf_enabled(flags); - bool mature = is_cf_mature(flags); - bool auto_renew = is_cf_auto_renew(flags); - - U32 date = 0; - msg->getU32Fast(_PREHASH_Data, _PREHASH_CreationDate, date); - time_t tim = date; - - // future use - U32 expiration_date = 0; - msg->getU32("Data", "ExpirationDate", expiration_date); - - U32 category = 0; - msg->getU32Fast(_PREHASH_Data, _PREHASH_Category, category); - - S32 price_for_listing = 0; - msg->getS32("Data", "PriceForListing", price_for_listing); - - // Look up the panel to fill in - for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter) - { - LLPanelClassified* self = *iter; - // For top picks, must match pick id - if (self->mClassifiedID != classified_id) - { - continue; - } - - // Found the panel, now fill in the information - self->mClassifiedID = classified_id; - self->mCreatorID = creator_id; - self->mParcelID = parcel_id; - self->mPriceForListing = price_for_listing; - self->mSimName.assign(sim_name); - self->mPosGlobal = pos_global; - - // Update UI controls - self->mNameEditor->setText(name); - self->mDescEditor->setText(desc); - self->mSnapshotCtrl->setImageAssetID(snapshot_id); - self->mLocationEditor->setText(location_text); - self->mLocationChanged = false; - - self->mCategoryCombo->setCurrentByIndex(category - 1); - if(mature) - { - self->mMatureCombo->setCurrentByIndex(MATURE_CONTENT); - } - else - { - self->mMatureCombo->setCurrentByIndex(PG_CONTENT); - } - if (self->mAutoRenewCheck) - { - self->mAutoRenewCheck->set(auto_renew); - } - - std::string dateStr = self->getString("dateStr"); - LLSD substitution; - substitution["datetime"] = (S32) tim; - LLStringUtil::format (dateStr, substitution); - - LLStringUtil::format_map_t string_args; - string_args["[DATE]"] = dateStr; - string_args["[AMT]"] = llformat("%d", price_for_listing); - self->childSetText("classified_info_text", self->getString("ad_placed_paid", string_args)); - - // If we got data from the database, we know the listing is paid for. - self->mPaidFor = TRUE; - - self->mUpdateBtn->setLabel(self->getString("update_txt")); - - self->resetDirty(); - - // I don't know if a second call is deliberate or a bad merge, so I'm leaving it here. - self->resetDirty(); - } -} - -void LLPanelClassified::draw() -{ - refresh(); - - LLPanel::draw(); -} - - -void LLPanelClassified::refresh() -{ - if (!mDataRequested) - { - sendClassifiedInfoRequest(); - } - - // Check for god mode - BOOL godlike = gAgent.isGodlike(); - BOOL is_self = (gAgent.getID() == mCreatorID); - - // Set button visibility/enablement appropriately - if (mInFinder) - { - - // End user doesn't ned to see price twice, or date posted. - - mSnapshotCtrl->setEnabled(godlike); - if(godlike) - { - //make it smaller, so text is more legible - mSnapshotCtrl->setOrigin(20, 175); - mSnapshotCtrl->reshape(300, 200); - } - else - { - mSnapshotCtrl->setOrigin(mSnapshotSize.mLeft, mSnapshotSize.mBottom); - mSnapshotCtrl->reshape(mSnapshotSize.getWidth(), mSnapshotSize.getHeight()); - //normal - } - mNameEditor->setEnabled(godlike); - mDescEditor->setEnabled(godlike); - mCategoryCombo->setEnabled(godlike); - mCategoryCombo->setVisible(godlike); - - mMatureCombo->setEnabled(godlike); - mMatureCombo->setVisible(godlike); - - // Jesse (who is the only one who uses this, as far as we can tell - // Says that he does not want a set location button - he has used it - // accidently in the past. - mSetBtn->setVisible(FALSE); - mSetBtn->setEnabled(FALSE); - - mUpdateBtn->setEnabled(godlike); - mUpdateBtn->setVisible(godlike); - } - else - { - mSnapshotCtrl->setEnabled(is_self); - mNameEditor->setEnabled(is_self); - mDescEditor->setEnabled(is_self); - //mPriceEditor->setEnabled(is_self); - mCategoryCombo->setEnabled(is_self); - mMatureCombo->setEnabled(is_self); - - if( is_self ) - { - if( mMatureCombo->getCurrentIndex() == 0 ) - { - // It's a new panel. - // PG regions should have PG classifieds. AO should have mature. - - setDefaultAccessCombo(); - } - } - - if (mAutoRenewCheck) - { - mAutoRenewCheck->setEnabled(is_self); - mAutoRenewCheck->setVisible(is_self); - } - - mClickThroughText->setEnabled(is_self); - mClickThroughText->setVisible(is_self); - - mSetBtn->setVisible(is_self); - mSetBtn->setEnabled(is_self); - - mUpdateBtn->setEnabled(is_self && checkDirty()); - mUpdateBtn->setVisible(is_self); - } -} - -// static -void LLPanelClassified::onClickUpdate(void* data) -{ - LLPanelClassified* self = (LLPanelClassified*)data; - - if(self == NULL) return; - - // Disallow leading spaces, punctuation, etc. that screw up - // sort order. - if ( ! self->titleIsValid() ) - { - return; - }; - - // If user has not set mature, do not allow publish - if(self->mMatureCombo->getCurrentIndex() == DECLINE_TO_STATE) - { - // Tell user about it - LLNotificationsUtil::add("SetClassifiedMature", - LLSD(), - LLSD(), - boost::bind(&LLPanelClassified::confirmMature, self, _1, _2)); - return; - } - - // Mature content flag is set, proceed - self->gotMature(); -} - -// Callback from a dialog indicating response to mature notification -bool LLPanelClassified::confirmMature(const LLSD& notification, const LLSD& response) -{ - S32 option = LLNotificationsUtil::getSelectedOption(notification, response); - - // 0 == Yes - // 1 == No - // 2 == Cancel - switch(option) - { - case 0: - mMatureCombo->setCurrentByIndex(MATURE_CONTENT); - break; - case 1: - mMatureCombo->setCurrentByIndex(PG_CONTENT); - break; - default: - return false; - } - - // If we got here it means they set a valid value - gotMature(); - return false; -} - -// Called after we have determined whether this classified has -// mature content or not. -void LLPanelClassified::gotMature() -{ - // if already paid for, just do the update - if (mPaidFor) - { - LLNotification::Params params("PublishClassified"); - params.functor.function(boost::bind(&LLPanelClassified::confirmPublish, this, _1, _2)); - LLNotifications::instance().forceResponse(params, 0); - } - else - { - // Ask the user how much they want to pay - LLFloaterPriceForListing::show( callbackGotPriceForListing, this ); - } -} - -// static -void LLPanelClassified::callbackGotPriceForListing(S32 option, std::string text, void* data) -{ - LLPanelClassified* self = (LLPanelClassified*)data; - - // Only do something if user hits publish - if (option != 0) return; - - S32 price_for_listing = strtol(text.c_str(), NULL, 10); - if (price_for_listing < MINIMUM_PRICE_FOR_LISTING) - { - LLSD args; - std::string price_text = llformat("%d", MINIMUM_PRICE_FOR_LISTING); - args["MIN_PRICE"] = price_text; - - LLNotificationsUtil::add("MinClassifiedPrice", args); - return; - } - - // price is acceptable, put it in the dialog for later read by - // update send - self->mPriceForListing = price_for_listing; - - LLSD args; - args["AMOUNT"] = llformat("%d", price_for_listing); - LLNotificationsUtil::add("PublishClassified", args, LLSD(), - boost::bind(&LLPanelClassified::confirmPublish, self, _1, _2)); -} - -void LLPanelClassified::resetDirty() -{ - // Tell all the widgets to reset their dirty state since the ad was just saved - if (mSnapshotCtrl) - mSnapshotCtrl->resetDirty(); - if (mNameEditor) - mNameEditor->resetDirty(); - if (mDescEditor) - mDescEditor->resetDirty(); - if (mLocationEditor) - mLocationEditor->resetDirty(); - mLocationChanged = false; - if (mCategoryCombo) - mCategoryCombo->resetDirty(); - if (mMatureCombo) - mMatureCombo->resetDirty(); - if (mAutoRenewCheck) - mAutoRenewCheck->resetDirty(); -} - -// invoked from callbackConfirmPublish -bool LLPanelClassified::confirmPublish(const LLSD& notification, const LLSD& response) -{ - S32 option = LLNotificationsUtil::getSelectedOption(notification, response); - // Option 0 = publish - if (option != 0) return false; - - sendClassifiedInfoUpdate(); - - // Big hack - assume that top picks are always in a browser, - // and non-finder-classifieds are always in a tab container. - if (! mInFinder) - { - LLTabContainer* tab = (LLTabContainer*)getParent(); - tab->setCurrentTabName(mNameEditor->getText()); - } - - resetDirty(); - return false; -} - - -// static -void LLPanelClassified::onClickTeleport(void* data) -{ - LLPanelClassified* self = (LLPanelClassified*)data; - LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance(); - - if (!self->mPosGlobal.isExactlyZero()&&worldmap_instance) - { - gAgent.teleportViaLocation(self->mPosGlobal); - worldmap_instance->trackLocation(self->mPosGlobal); - self->sendClassifiedClickMessage("teleport"); - } -} - - -// static -void LLPanelClassified::onClickMap(void* data) -{ - LLPanelClassified* self = (LLPanelClassified*)data; - LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance(); - if(worldmap_instance) - { - worldmap_instance->trackLocation(self->mPosGlobal); - LLFloaterReg::showInstance("world_map", "center"); - } - self->sendClassifiedClickMessage("map"); -} - -// static -void LLPanelClassified::onClickProfile(void* data) -{ - LLPanelClassified* self = (LLPanelClassified*)data; - LLAvatarActions::showProfile(self->mCreatorID); - self->sendClassifiedClickMessage("profile"); -} - -// static -/* -void LLPanelClassified::onClickLandmark(void* data) -{ - LLPanelClassified* self = (LLPanelClassified*)data; - create_landmark(self->mNameEditor->getText(), "", self->mPosGlobal); -} -*/ - -// static -void LLPanelClassified::onClickSet(void* data) -{ - LLPanelClassified* self = (LLPanelClassified*)data; - - // Save location for later. - self->mPosGlobal = gAgent.getPositionGlobal(); - - std::string location_text; - std::string regionName = LLTrans::getString("ClassifiedUpdateAfterPublish"); - LLViewerRegion* pRegion = gAgent.getRegion(); - if (pRegion) - { - regionName = pRegion->getName(); - } - location_text.assign(regionName); - location_text.append(", "); - - S32 region_x = llround((F32)self->mPosGlobal.mdV[VX]) % REGION_WIDTH_UNITS; - S32 region_y = llround((F32)self->mPosGlobal.mdV[VY]) % REGION_WIDTH_UNITS; - S32 region_z = llround((F32)self->mPosGlobal.mdV[VZ]); - - location_text.append(self->mSimName); - location_text.append(llformat(" (%d, %d, %d)", region_x, region_y, region_z)); - - self->mLocationEditor->setText(location_text); - self->mLocationChanged = true; - - self->setDefaultAccessCombo(); - - // Set this to null so it updates on the next save. - self->mParcelID.setNull(); - - onCommitAny(NULL, data); -} - - -BOOL LLPanelClassified::checkDirty() -{ - mDirty = FALSE; - if ( mSnapshotCtrl ) mDirty |= mSnapshotCtrl->isDirty(); - if ( mNameEditor ) mDirty |= mNameEditor->isDirty(); - if ( mDescEditor ) mDirty |= mDescEditor->isDirty(); - if ( mLocationEditor ) mDirty |= mLocationEditor->isDirty(); - if ( mLocationChanged ) mDirty |= TRUE; - if ( mCategoryCombo ) mDirty |= mCategoryCombo->isDirty(); - if ( mMatureCombo ) mDirty |= mMatureCombo->isDirty(); - if ( mAutoRenewCheck ) mDirty |= mAutoRenewCheck->isDirty(); - - return mDirty; -} - -// static -void LLPanelClassified::onCommitAny(LLUICtrl* ctrl, void* data) -{ - LLPanelClassified* self = (LLPanelClassified*)data; - if (self) - { - self->checkDirty(); - } -} - -// static -void LLPanelClassified::focusReceived(LLFocusableElement* ctrl, void* data) -{ - // allow the data to be saved - onCommitAny((LLUICtrl*)ctrl, data); -} - - -void LLPanelClassified::sendClassifiedClickMessage(const std::string& type) -{ - // You're allowed to click on your own ads to reassure yourself - // that the system is working. - LLSD body; - body["type"] = type; - body["from_search"] = mFromSearch; - body["classified_id"] = mClassifiedID; - body["parcel_id"] = mParcelID; - body["dest_pos_global"] = mPosGlobal.getValue(); - body["region_name"] = mSimName; - - std::string url = gAgent.getRegion()->getCapability("SearchStatTracking"); - llinfos << "LLPanelClassified::sendClassifiedClickMessage via capability" << llendl; - LLHTTPClient::post(url, body, new LLHTTPClient::Responder()); -} - -//////////////////////////////////////////////////////////////////////////////////////////// - -LLFloaterPriceForListing::LLFloaterPriceForListing() -: LLFloater(LLSD()), - mCallback(NULL), - mUserData(NULL) -{ } - -//virtual -LLFloaterPriceForListing::~LLFloaterPriceForListing() -{ } - -//virtual -BOOL LLFloaterPriceForListing::postBuild() -{ - LLLineEditor* edit = getChild<LLLineEditor>("price_edit"); - if (edit) - { - edit->setPrevalidate(LLTextValidate::validateNonNegativeS32); - std::string min_price = llformat("%d", MINIMUM_PRICE_FOR_LISTING); - edit->setText(min_price); - edit->selectAll(); - edit->setFocus(TRUE); - } - - childSetAction("set_price_btn", onClickSetPrice, this); - - childSetAction("cancel_btn", onClickCancel, this); - - setDefaultBtn("set_price_btn"); - return TRUE; -} - -//static -void LLFloaterPriceForListing::show( void (*callback)(S32, std::string, void*), void* userdata) -{ - LLFloaterPriceForListing *self = new LLFloaterPriceForListing(); - - // Builds and adds to gFloaterView - LLUICtrlFactory::getInstance()->buildFloater(self, "floater_price_for_listing.xml", NULL); - self->center(); - - self->mCallback = callback; - self->mUserData = userdata; -} - -//static -void LLFloaterPriceForListing::onClickSetPrice(void* data) -{ - buttonCore(0, data); -} - -//static -void LLFloaterPriceForListing::onClickCancel(void* data) -{ - buttonCore(1, data); -} - -//static -void LLFloaterPriceForListing::buttonCore(S32 button, void* data) -{ - LLFloaterPriceForListing* self = (LLFloaterPriceForListing*)data; - - if (self->mCallback) - { - std::string text = self->childGetText("price_edit"); - self->mCallback(button, text, self->mUserData); - self->closeFloater(); - } -} - -void LLPanelClassified::setDefaultAccessCombo() -{ - // PG regions should have PG classifieds. AO should have mature. - - LLViewerRegion *regionp = gAgent.getRegion(); - - switch( regionp->getSimAccess() ) - { - case SIM_ACCESS_PG: - mMatureCombo->setCurrentByIndex(PG_CONTENT); - break; - case SIM_ACCESS_ADULT: - mMatureCombo->setCurrentByIndex(MATURE_CONTENT); - break; - default: - // You are free to move about the cabin. - break; - } -} - ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// @@ -1316,7 +263,7 @@ void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType t setSimName(c_info->sim_name); setClassifiedLocation(createLocationText(c_info->parcel_name, c_info->sim_name, c_info->pos_global)); - childSetValue("category", LLClassifiedInfo::sCategories[c_info->category]); + getChild<LLUICtrl>("category")->setValue(LLClassifiedInfo::sCategories[c_info->category]); static std::string mature_str = getString("type_mature"); static std::string pg_str = getString("type_pg"); @@ -1324,20 +271,20 @@ void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType t static std::string date_fmt = getString("date_fmt"); bool mature = is_cf_mature(c_info->flags); - childSetValue("content_type", mature ? mature_str : pg_str); + getChild<LLUICtrl>("content_type")->setValue(mature ? mature_str : pg_str); getChild<LLIconCtrl>("content_type_moderate")->setVisible(mature); getChild<LLIconCtrl>("content_type_general")->setVisible(!mature); std::string auto_renew_str = is_cf_auto_renew(c_info->flags) ? getString("auto_renew_on") : getString("auto_renew_off"); - childSetValue("auto_renew", auto_renew_str); + getChild<LLUICtrl>("auto_renew")->setValue(auto_renew_str); price_str.setArg("[PRICE]", llformat("%d", c_info->price_for_listing)); - childSetValue("price_for_listing", LLSD(price_str)); + getChild<LLUICtrl>("price_for_listing")->setValue(LLSD(price_str)); std::string date_str = date_fmt; LLStringUtil::format(date_str, LLSD().with("datetime", (S32) c_info->creation_date)); - childSetText("creation_date", date_str); + getChild<LLUICtrl>("creation_date")->setValue(date_str); setInfoLoaded(true); } @@ -1364,13 +311,13 @@ void LLPanelClassifiedInfo::resetData() mMapClicksNew = 0; mProfileClicksNew = 0; - childSetText("category", LLStringUtil::null); - childSetText("content_type", LLStringUtil::null); - childSetText("click_through_text", LLStringUtil::null); - childSetText("price_for_listing", LLStringUtil::null); - childSetText("auto_renew", LLStringUtil::null); - childSetText("creation_date", LLStringUtil::null); - childSetText("click_through_text", LLStringUtil::null); + getChild<LLUICtrl>("category")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("content_type")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("click_through_text")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("price_for_listing")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("auto_renew")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("creation_date")->setValue(LLStringUtil::null); + getChild<LLUICtrl>("click_through_text")->setValue(LLStringUtil::null); getChild<LLIconCtrl>("content_type_moderate")->setVisible(FALSE); getChild<LLIconCtrl>("content_type_general")->setVisible(FALSE); } @@ -1379,40 +326,40 @@ void LLPanelClassifiedInfo::resetControls() { bool is_self = getAvatarId() == gAgent.getID(); - childSetEnabled("edit_btn", is_self); - childSetVisible("edit_btn", is_self); - childSetVisible("price_layout_panel", is_self); - childSetVisible("clickthrough_layout_panel", is_self); + getChildView("edit_btn")->setEnabled(is_self); + getChildView("edit_btn")->setVisible( is_self); + getChildView("price_layout_panel")->setVisible( is_self); + getChildView("clickthrough_layout_panel")->setVisible( is_self); } void LLPanelClassifiedInfo::setClassifiedName(const std::string& name) { - childSetValue("classified_name", name); + getChild<LLUICtrl>("classified_name")->setValue(name); } std::string LLPanelClassifiedInfo::getClassifiedName() { - return childGetValue("classified_name").asString(); + return getChild<LLUICtrl>("classified_name")->getValue().asString(); } void LLPanelClassifiedInfo::setDescription(const std::string& desc) { - childSetValue("classified_desc", desc); + getChild<LLUICtrl>("classified_desc")->setValue(desc); } std::string LLPanelClassifiedInfo::getDescription() { - return childGetValue("classified_desc").asString(); + return getChild<LLUICtrl>("classified_desc")->getValue().asString(); } void LLPanelClassifiedInfo::setClassifiedLocation(const std::string& location) { - childSetValue("classified_location", location); + getChild<LLUICtrl>("classified_location")->setValue(location); } std::string LLPanelClassifiedInfo::getClassifiedLocation() { - return childGetValue("classified_location").asString(); + return getChild<LLUICtrl>("classified_location")->getValue().asString(); } void LLPanelClassifiedInfo::setSnapshotId(const LLUUID& id) @@ -1435,7 +382,7 @@ void LLPanelClassifiedInfo::draw() LLUUID LLPanelClassifiedInfo::getSnapshotId() { - return childGetValue("classified_snapshot").asUUID(); + return getChild<LLUICtrl>("classified_snapshot")->getValue().asUUID(); } // static @@ -1490,9 +437,9 @@ void LLPanelClassifiedInfo::setClickThrough( ct_str.setArg("[MAP]", llformat("%d", self->mMapClicksNew + self->mMapClicksOld)); ct_str.setArg("[PROFILE]", llformat("%d", self->mProfileClicksNew + self->mProfileClicksOld)); - self->childSetText("click_through_text", ct_str.getString()); + self->getChild<LLUICtrl>("click_through_text")->setValue(ct_str.getString()); // *HACK: remove this when there is enough room for click stats in the info panel - self->childSetToolTip("click_through_text", ct_str.getString()); + self->getChildView("click_through_text")->setToolTip(ct_str.getString()); llinfos << "teleport: " << llformat("%d", self->mTeleportClicksNew + self->mTeleportClicksOld) << ", map: " << llformat("%d", self->mMapClicksNew + self->mMapClicksOld) @@ -1740,8 +687,8 @@ void LLPanelClassifiedEdit::fillIn(const LLSD& key) region_name = region->getName(); } - childSetValue("classified_name", makeClassifiedName()); - childSetValue("classified_desc", desc); + getChild<LLUICtrl>("classified_name")->setValue(makeClassifiedName()); + getChild<LLUICtrl>("classified_desc")->setValue(desc); setSnapshotId(snapshot_id); setClassifiedLocation(createLocationText(getLocationNotice(), region_name, getPosGlobal())); // server will set valid parcel id @@ -1756,8 +703,8 @@ void LLPanelClassifiedEdit::fillIn(const LLSD& key) setCategory((U32)key["category"].asInteger()); setContentType((U32)key["content_type"].asInteger()); setClassifiedLocation(key["location_text"]); - childSetValue("auto_renew", key["auto_renew"]); - childSetValue("price_for_listing", key["price_for_listing"].asInteger()); + getChild<LLUICtrl>("auto_renew")->setValue(key["auto_renew"]); + getChild<LLUICtrl>("price_for_listing")->setValue(key["price_for_listing"].asInteger()); } } @@ -1788,7 +735,7 @@ void LLPanelClassifiedEdit::onOpen(const LLSD& key) } std::string save_btn_label = is_new ? getString("publish_label") : getString("save_label"); - childSetLabelArg("save_changes_btn", "[LABEL]", save_btn_label); + getChild<LLUICtrl>("save_changes_btn")->setLabelArg("[LABEL]", save_btn_label); enableVerbs(is_new); enableEditing(is_new); @@ -1827,16 +774,16 @@ void LLPanelClassifiedEdit::processProperties(void* data, EAvatarProcessorType t bool auto_renew = is_cf_auto_renew(c_info->flags); setContentType(mature ? CB_ITEM_MATURE : CB_ITEM_PG); - childSetValue("auto_renew", auto_renew); - childSetValue("price_for_listing", c_info->price_for_listing); - childSetEnabled("price_for_listing", isNew()); + getChild<LLUICtrl>("auto_renew")->setValue(auto_renew); + getChild<LLUICtrl>("price_for_listing")->setValue(c_info->price_for_listing); + getChildView("price_for_listing")->setEnabled(isNew()); resetDirty(); setInfoLoaded(true); enableVerbs(false); // for just created classified - in case user opened edit panel before processProperties() callback - childSetLabelArg("save_changes_btn", "[LABEL]", getString("save_label")); + getChild<LLUICtrl>("save_changes_btn")->setLabelArg("[LABEL]", getString("save_label")); } } } @@ -1895,9 +842,9 @@ void LLPanelClassifiedEdit::resetControls() getChild<LLComboBox>("category")->setCurrentByIndex(0); getChild<LLComboBox>("content_type")->setCurrentByIndex(0); - childSetValue("auto_renew", false); - childSetValue("price_for_listing", MINIMUM_PRICE_FOR_LISTING); - childSetEnabled("price_for_listing", TRUE); + getChild<LLUICtrl>("auto_renew")->setValue(false); + getChild<LLUICtrl>("price_for_listing")->setValue(MINIMUM_PRICE_FOR_LISTING); + getChildView("price_for_listing")->setEnabled(TRUE); } bool LLPanelClassifiedEdit::canClose() @@ -1936,7 +883,7 @@ void LLPanelClassifiedEdit::setContentType(U32 content_type) bool LLPanelClassifiedEdit::getAutoRenew() { - return childGetValue("auto_renew").asBoolean(); + return getChild<LLUICtrl>("auto_renew")->getValue().asBoolean(); } void LLPanelClassifiedEdit::sendUpdate() @@ -1987,7 +934,7 @@ void LLPanelClassifiedEdit::setCategory(U32 category) U8 LLPanelClassifiedEdit::getFlags() { - bool auto_renew = childGetValue("auto_renew").asBoolean(); + bool auto_renew = getChild<LLUICtrl>("auto_renew")->getValue().asBoolean(); LLComboBox* content_cb = getChild<LLComboBox>("content_type"); bool mature = content_cb->getCurrentIndex() == CB_ITEM_MATURE; @@ -1997,25 +944,25 @@ U8 LLPanelClassifiedEdit::getFlags() void LLPanelClassifiedEdit::enableVerbs(bool enable) { - childSetEnabled("save_changes_btn", enable); + getChildView("save_changes_btn")->setEnabled(enable); } void LLPanelClassifiedEdit::enableEditing(bool enable) { - childSetEnabled("classified_snapshot", enable); - childSetEnabled("classified_name", enable); - childSetEnabled("classified_desc", enable); - childSetEnabled("set_to_curr_location_btn", enable); - childSetEnabled("category", enable); - childSetEnabled("content_type", enable); - childSetEnabled("price_for_listing", enable); - childSetEnabled("auto_renew", enable); + getChildView("classified_snapshot")->setEnabled(enable); + getChildView("classified_name")->setEnabled(enable); + getChildView("classified_desc")->setEnabled(enable); + getChildView("set_to_curr_location_btn")->setEnabled(enable); + getChildView("category")->setEnabled(enable); + getChildView("content_type")->setEnabled(enable); + getChildView("price_for_listing")->setEnabled(enable); + getChildView("auto_renew")->setEnabled(enable); } void LLPanelClassifiedEdit::showEditing(bool show) { - childSetVisible("price_for_listing_label", show); - childSetVisible("price_for_listing", show); + getChildView("price_for_listing_label")->setVisible( show); + getChildView("price_for_listing")->setVisible( show); } std::string LLPanelClassifiedEdit::makeClassifiedName() @@ -2044,12 +991,12 @@ std::string LLPanelClassifiedEdit::makeClassifiedName() S32 LLPanelClassifiedEdit::getPriceForListing() { - return childGetValue("price_for_listing").asInteger(); + return getChild<LLUICtrl>("price_for_listing")->getValue().asInteger(); } void LLPanelClassifiedEdit::setPriceForListing(S32 price) { - childSetValue("price_for_listing", price); + getChild<LLUICtrl>("price_for_listing")->setValue(price); } void LLPanelClassifiedEdit::onSetLocationClick() @@ -2207,12 +1154,12 @@ BOOL LLPublishClassifiedFloater::postBuild() void LLPublishClassifiedFloater::setPrice(S32 price) { - childSetValue("price_for_listing", price); + getChild<LLUICtrl>("price_for_listing")->setValue(price); } S32 LLPublishClassifiedFloater::getPrice() { - return childGetValue("price_for_listing").asInteger(); + return getChild<LLUICtrl>("price_for_listing")->getValue().asInteger(); } void LLPublishClassifiedFloater::setPublishClickedCallback(const commit_signal_t::slot_type& cb) diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h index eaf652ca06..7d2b1ae571 100644 --- a/indra/newview/llpanelclassified.h +++ b/indra/newview/llpanelclassified.h @@ -33,174 +33,20 @@ // Display of a classified used both for the global view in the // Find directory, and also for each individual user's classified in their // profile. - #ifndef LL_LLPANELCLASSIFIED_H #define LL_LLPANELCLASSIFIED_H #include "llavatarpropertiesprocessor.h" -#include "llpanel.h" #include "llclassifiedinfo.h" -#include "v3dmath.h" -#include "lluuid.h" #include "llfloater.h" -//#include "llrect.h" - -class LLButton; -class LLCheckBoxCtrl; -class LLComboBox; -class LLIconCtrl; -class LLLineEditor; -class LLTextBox; -class LLTextEditor; +#include "llpanel.h" +#include "llrect.h" +#include "lluuid.h" +#include "v3dmath.h" + +class LLScrollContainer; class LLTextureCtrl; class LLUICtrl; -class LLMessageSystem; -class LLScrollContainer; - -// *TODO deprecated, should be removed. -// New class implemented in ticket EXT-2095 -class LLPanelClassified : public LLPanel -{ -public: - LLPanelClassified(bool in_finder, bool from_search); - /*virtual*/ ~LLPanelClassified(); - - void reset(); - - /*virtual*/ BOOL postBuild(); - - /*virtual*/ void draw(); - - /*virtual*/ void refresh(); - - void apply(); - - // If can close, return TRUE. If cannot close, pop save/discard dialog - // and return FALSE. - BOOL canClose(); - - // Setup a new classified, including creating an id, giving a sane - // initial position, etc. - void initNewClassified(); - - void setClassifiedID(const LLUUID& id); - void setClickThroughText(const std::string& text); - static void setClickThrough(const LLUUID& classified_id, - S32 teleport, S32 map, S32 profile, bool from_new_table); - - // check that the title is valid (E.G. starts with a number or letter) - BOOL titleIsValid(); - - // Schedules the panel to request data - // from the server next time it is drawn. - void markForServerRequest(); - - std::string getClassifiedName(); - const LLUUID& getClassifiedID() const { return mClassifiedID; } - - void sendClassifiedInfoRequest(); - void sendClassifiedInfoUpdate(); - void resetDirty(); - - static void processClassifiedInfoReply(LLMessageSystem* msg, void**); - - // Confirmation dialogs flow in this order - bool confirmMature(const LLSD& notification, const LLSD& response); - void gotMature(); - static void callbackGotPriceForListing(S32 option, std::string text, void* data); - bool confirmPublish(const LLSD& notification, const LLSD& response); - - void sendClassifiedClickMessage(const std::string& type); - -protected: - bool saveCallback(const LLSD& notification, const LLSD& response); - - static void onClickUpdate(void* data); - static void onClickTeleport(void* data); - static void onClickMap(void* data); - static void onClickProfile(void* data); - static void onClickSet(void* data); - - static void focusReceived(LLFocusableElement* ctrl, void* data); - static void onCommitAny(LLUICtrl* ctrl, void* data); - - void setDefaultAccessCombo(); // Default AO and PG regions to proper classified access - - BOOL checkDirty(); // Update and return mDirty - -protected: - bool mInFinder; - bool mFromSearch; // from web-based "All" search sidebar - BOOL mDirty; - bool mForceClose; - bool mLocationChanged; - LLUUID mClassifiedID; - LLUUID mRequestedID; - LLUUID mCreatorID; - LLUUID mParcelID; - S32 mPriceForListing; - - // Needed for stat tracking - S32 mTeleportClicksOld; - S32 mMapClicksOld; - S32 mProfileClicksOld; - S32 mTeleportClicksNew; - S32 mMapClicksNew; - S32 mProfileClicksNew; - - // Data will be requested on first draw - BOOL mDataRequested; - - // For avatar panel classifieds only, has the user been charged - // yet for this classified? That is, have they saved once? - BOOL mPaidFor; - - std::string mSimName; - LLVector3d mPosGlobal; - - // Values the user may change - LLTextureCtrl* mSnapshotCtrl; - LLLineEditor* mNameEditor; - LLTextEditor* mDescEditor; - LLLineEditor* mLocationEditor; - LLComboBox* mCategoryCombo; - LLComboBox* mMatureCombo; - LLCheckBoxCtrl* mAutoRenewCheck; - - LLButton* mUpdateBtn; - LLButton* mTeleportBtn; - LLButton* mMapBtn; - LLButton* mProfileBtn; - - LLTextBox* mInfoText; - LLButton* mSetBtn; - LLTextBox* mClickThroughText; - - LLRect mSnapshotSize; - typedef std::list<LLPanelClassified*> panel_list_t; - static panel_list_t sAllPanels; -}; - - -class LLFloaterPriceForListing -: public LLFloater -{ -public: - LLFloaterPriceForListing(); - virtual ~LLFloaterPriceForListing(); - virtual BOOL postBuild(); - - static void show( void (*callback)(S32 option, std::string value, void* userdata), void* userdata ); - -private: - static void onClickSetPrice(void*); - static void onClickCancel(void*); - static void buttonCore(S32 button, void* data); - -private: - void (*mCallback)(S32 option, std::string, void*); - void* mUserData; -}; class LLPublishClassifiedFloater : public LLFloater { diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp index f4c0a842e7..02db3d3715 100644 --- a/indra/newview/llpanelcontents.cpp +++ b/indra/newview/llpanelcontents.cpp @@ -113,7 +113,7 @@ void LLPanelContents::getState(LLViewerObject *objectp ) { if( !objectp ) { - childSetEnabled("button new script",FALSE); + getChildView("button new script")->setEnabled(FALSE); return; } @@ -127,7 +127,7 @@ void LLPanelContents::getState(LLViewerObject *objectp ) BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ); // Edit script button - ok if object is editable and there's an unambiguous destination for the object. - childSetEnabled("button new script", + getChildView("button new script")->setEnabled( editable && all_volume && ((LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() == 1) diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index 14f05bdb17..c928d83965 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -47,6 +47,7 @@ #include "llvoavatarself.h" #include "lltexteditor.h" #include "lltextbox.h" +#include "llaccordionctrl.h" #include "llaccordionctrltab.h" #include "llagentwearables.h" #include "llscrollingpanelparam.h" @@ -666,6 +667,35 @@ void LLPanelEditWearable::updateAvatarHeightLabel() mTxtAvatarHeight->appendText(this->mReplacementMetricUrl, false, param); } +void LLPanelEditWearable::onWearablePanelVisibilityChange(const LLSD &in_visible_chain, LLAccordionCtrl* accordion_ctrl) +{ + if (in_visible_chain.asBoolean() && accordion_ctrl != NULL) + { + accordion_ctrl->expandDefaultTab(); + } +} + +void LLPanelEditWearable::setWearablePanelVisibilityChangeCallback(LLPanel* bodypart_panel) +{ + if (bodypart_panel != NULL) + { + LLAccordionCtrl* accordion_ctrl = bodypart_panel->getChild<LLAccordionCtrl>("wearable_accordion"); + + if (accordion_ctrl != NULL) + { + bodypart_panel->setVisibleCallback( + boost::bind(&LLPanelEditWearable::onWearablePanelVisibilityChange, this, _2, accordion_ctrl)); + } + else + { + llwarns << "accordion_ctrl is NULL" << llendl; + } + } + else + { + llwarns << "bodypart_panel is NULL" << llendl; + } +} // virtual BOOL LLPanelEditWearable::postBuild() @@ -695,6 +725,14 @@ BOOL LLPanelEditWearable::postBuild() mPanelEyes = getChild<LLPanel>("edit_eyes_panel"); mPanelHair = getChild<LLPanel>("edit_hair_panel"); + // Setting the visibility callback is applied only to the bodyparts panel + // because currently they are the only ones whose 'wearable_accordion' has + // multiple accordion tabs (see EXT-8164 for details). + setWearablePanelVisibilityChangeCallback(mPanelShape); + setWearablePanelVisibilityChangeCallback(mPanelSkin); + setWearablePanelVisibilityChangeCallback(mPanelEyes); + setWearablePanelVisibilityChangeCallback(mPanelHair); + //clothes mPanelShirt = getChild<LLPanel>("edit_shirt_panel"); mPanelPants = getChild<LLPanel>("edit_pants_panel"); @@ -786,7 +824,7 @@ BOOL LLPanelEditWearable::isDirty() const if (mWearablePtr) { if (mWearablePtr->isDirty() || - mWearablePtr->getName().compare(mNameEditor->getText()) != 0) + mWearableItem->getName().compare(mNameEditor->getText()) != 0) { isDirty = TRUE; } @@ -806,6 +844,15 @@ void LLPanelEditWearable::draw() LLPanel::draw(); } +void LLPanelEditWearable::setVisible(BOOL visible) +{ + if (!visible) + { + showWearable(mWearablePtr, FALSE); + } + LLPanel::setVisible(visible); +} + void LLPanelEditWearable::setWearable(LLWearable *wearable) { showWearable(mWearablePtr, FALSE); @@ -839,7 +886,7 @@ void LLPanelEditWearable::saveAsCallback(const LLSD& notification, const LLSD& r if( !wearable_name.empty() ) { mNameEditor->setText(wearable_name); - saveChanges(); + saveChanges(true); } } } @@ -896,7 +943,7 @@ void LLPanelEditWearable::onTexturePickerCommit(const LLUICtrl* ctrl) { // Set the new version LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(texture_ctrl->getImageAssetID()); - if( image->getID().isNull() ) + if( image->getID() == IMG_DEFAULT ) { image = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR); } @@ -971,7 +1018,7 @@ void LLPanelEditWearable::updatePanelPickerControls(LLWearableType::EType type) } } -void LLPanelEditWearable::saveChanges() +void LLPanelEditWearable::saveChanges(bool force_save_as) { if (!mWearablePtr || !isDirty()) { @@ -980,16 +1027,18 @@ void LLPanelEditWearable::saveChanges() } U32 index = gAgentWearables.getWearableIndex(mWearablePtr); - - if (mWearablePtr->getName().compare(mNameEditor->getText()) != 0) + + std::string new_name = mNameEditor->getText(); + if (force_save_as) { // the name of the wearable has changed, re-save wearable with new name LLAppearanceMgr::instance().removeCOFItemLinks(mWearablePtr->getItemID(),false); - gAgentWearables.saveWearableAs(mWearablePtr->getType(), index, mNameEditor->getText(), FALSE); + gAgentWearables.saveWearableAs(mWearablePtr->getType(), index, new_name, FALSE); + mNameEditor->setText(mWearableItem->getName()); } else { - gAgentWearables.saveWearable(mWearablePtr->getType(), index); + gAgentWearables.saveWearable(mWearablePtr->getType(), index, TRUE, new_name); } } @@ -1002,7 +1051,7 @@ void LLPanelEditWearable::revertChanges() } mWearablePtr->revertValues(); - mNameEditor->setText(mWearablePtr->getName()); + mNameEditor->setText(mWearableItem->getName()); updatePanelPickerControls(mWearablePtr->getType()); updateTypeSpecificControls(mWearablePtr->getType()); gAgentAvatarp->wearableUpdated(mWearablePtr->getType(), FALSE); @@ -1048,7 +1097,7 @@ void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show) mDescTitle->setText(description_title); // set name - mNameEditor->setText(wearable->getName()); + mNameEditor->setText(mWearableItem->getName()); updatePanelPickerControls(type); updateTypeSpecificControls(type); @@ -1175,9 +1224,9 @@ void LLPanelEditWearable::toggleTypeSpecificControls(LLWearableType::EType type) // Toggle controls specific to shape editing panel. { bool is_shape = (type == LLWearableType::WT_SHAPE); - childSetVisible("sex_radio", is_shape); - childSetVisible("female_icon", is_shape); - childSetVisible("male_icon", is_shape); + getChildView("sex_radio")->setVisible( is_shape); + getChildView("female_icon")->setVisible( is_shape); + getChildView("male_icon")->setVisible( is_shape); } } @@ -1377,7 +1426,7 @@ void LLPanelEditWearable::updateVerbs() BOOL is_dirty = isDirty(); mBtnRevert->setEnabled(is_dirty); - childSetEnabled("save_as_button", is_dirty && can_copy); + getChildView("save_as_button")->setEnabled(is_dirty && can_copy); if(isAgentAvatarValid()) { diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h index bfce2ae56e..03b2cb7932 100644 --- a/indra/newview/llpaneleditwearable.h +++ b/indra/newview/llpaneleditwearable.h @@ -39,6 +39,7 @@ #include "llvoavatardefines.h" #include "llwearabletype.h" +class LLAccordionCtrl; class LLCheckBoxCtrl; class LLWearable; class LLTextBox; @@ -63,7 +64,7 @@ public: LLWearable* getWearable() { return mWearablePtr; } void setWearable(LLWearable *wearable); - void saveChanges(); + void saveChanges(bool force_save_as = false); void revertChanges(); void showDefaultSubpart(); @@ -76,6 +77,8 @@ public: void onSaveAsButtonClicked(); void saveAsCallback(const LLSD& notification, const LLSD& response); + virtual void setVisible(BOOL visible); + private: typedef std::map<F32, LLViewerVisualParam*> value_map_t; @@ -113,6 +116,10 @@ private: // updates avatar height label void updateAvatarHeightLabel(); + void onWearablePanelVisibilityChange(const LLSD &in_visible_chain, LLAccordionCtrl* accordion_ctrl); + + void setWearablePanelVisibilityChangeCallback(LLPanel* bodypart_panel); + // the pointer to the wearable we're editing. NULL means we're not editing a wearable. LLWearable *mWearablePtr; LLViewerInventoryItem* mWearableItem; diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 7d5be39074..36713f65bd 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -394,8 +394,8 @@ void LLPanelFace::getState() BOOL editable = objectp->permModify(); // only turn on auto-adjust button if there is a media renderer and the media is loaded - childSetEnabled("textbox autofix", editable); - childSetEnabled("button align", editable); + getChildView("textbox autofix")->setEnabled(editable); + getChildView("button align")->setEnabled(editable); //if ( LLMediaEngine::getInstance()->getMediaRenderer () ) // if ( LLMediaEngine::getInstance()->getMediaRenderer ()->isLoaded () ) @@ -405,7 +405,7 @@ void LLPanelFace::getState() // // //mBtnAutoFix->setEnabled ( editable ); // } - childSetEnabled("button apply",editable); + getChildView("button apply")->setEnabled(editable); bool identical; LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("texture control"); @@ -445,8 +445,8 @@ void LLPanelFace::getState() if(LLViewerMedia::textureHasMedia(id)) { - childSetEnabled("textbox autofix",editable); - childSetEnabled("button align",editable); + getChildView("textbox autofix")->setEnabled(editable); + getChildView("button align")->setEnabled(editable); } if (identical) @@ -505,8 +505,6 @@ void LLPanelFace::getState() // Texture scale { - childSetEnabled("tex scale",editable); - //mLabelTexScale->setEnabled( editable ); F32 scale_s = 1.f; struct f2 : public LLSelectedTEGetFunctor<F32> { @@ -516,12 +514,12 @@ void LLPanelFace::getState() } } func; identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, scale_s ); - childSetValue("TexScaleU",editable ? llabs(scale_s) : 0); - childSetTentative("TexScaleU",LLSD((BOOL)(!identical))); - childSetEnabled("TexScaleU",editable); - childSetValue("checkbox flip s",LLSD((BOOL)(scale_s < 0 ? TRUE : FALSE ))); - childSetTentative("checkbox flip s",LLSD((BOOL)((!identical) ? TRUE : FALSE ))); - childSetEnabled("checkbox flip s",editable); + getChild<LLUICtrl>("TexScaleU")->setValue(editable ? llabs(scale_s) : 0); + getChild<LLUICtrl>("TexScaleU")->setTentative(LLSD((BOOL)(!identical))); + getChildView("TexScaleU")->setEnabled(editable); + getChild<LLUICtrl>("checkbox flip s")->setValue(LLSD((BOOL)(scale_s < 0 ? TRUE : FALSE ))); + getChild<LLUICtrl>("checkbox flip s")->setTentative(LLSD((BOOL)((!identical) ? TRUE : FALSE ))); + getChildView("checkbox flip s")->setEnabled(editable); } { @@ -535,17 +533,17 @@ void LLPanelFace::getState() } func; identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, scale_t ); - childSetValue("TexScaleV",llabs(editable ? llabs(scale_t) : 0)); - childSetTentative("TexScaleV",LLSD((BOOL)(!identical))); - childSetEnabled("TexScaleV",editable); - childSetValue("checkbox flip t",LLSD((BOOL)(scale_t< 0 ? TRUE : FALSE ))); - childSetTentative("checkbox flip t",LLSD((BOOL)((!identical) ? TRUE : FALSE ))); - childSetEnabled("checkbox flip t",editable); + getChild<LLUICtrl>("TexScaleV")->setValue(llabs(editable ? llabs(scale_t) : 0)); + getChild<LLUICtrl>("TexScaleV")->setTentative(LLSD((BOOL)(!identical))); + getChildView("TexScaleV")->setEnabled(editable); + getChild<LLUICtrl>("checkbox flip t")->setValue(LLSD((BOOL)(scale_t< 0 ? TRUE : FALSE ))); + getChild<LLUICtrl>("checkbox flip t")->setTentative(LLSD((BOOL)((!identical) ? TRUE : FALSE ))); + getChildView("checkbox flip t")->setEnabled(editable); } // Texture offset { - childSetEnabled("tex offset",editable); + getChildView("tex offset")->setEnabled(editable); F32 offset_s = 0.f; struct f4 : public LLSelectedTEGetFunctor<F32> { @@ -555,9 +553,9 @@ void LLPanelFace::getState() } } func; identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, offset_s ); - childSetValue("TexOffsetU", editable ? offset_s : 0); - childSetTentative("TexOffsetU",!identical); - childSetEnabled("TexOffsetU",editable); + getChild<LLUICtrl>("TexOffsetU")->setValue(editable ? offset_s : 0); + getChild<LLUICtrl>("TexOffsetU")->setTentative(!identical); + getChildView("TexOffsetU")->setEnabled(editable); } { @@ -570,14 +568,13 @@ void LLPanelFace::getState() } } func; identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, offset_t ); - childSetValue("TexOffsetV", editable ? offset_t : 0); - childSetTentative("TexOffsetV",!identical); - childSetEnabled("TexOffsetV",editable); + getChild<LLUICtrl>("TexOffsetV")->setValue(editable ? offset_t : 0); + getChild<LLUICtrl>("TexOffsetV")->setTentative(!identical); + getChildView("TexOffsetV")->setEnabled(editable); } // Texture rotation { - childSetEnabled("tex rotate",editable); F32 rotation = 0.f; struct f6 : public LLSelectedTEGetFunctor<F32> { @@ -587,9 +584,9 @@ void LLPanelFace::getState() } } func; identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, rotation ); - childSetValue("TexRot", editable ? rotation * RAD_TO_DEG : 0); - childSetTentative("TexRot",!identical); - childSetEnabled("TexRot",editable); + getChild<LLUICtrl>("TexRot")->setValue(editable ? rotation * RAD_TO_DEG : 0); + getChild<LLUICtrl>("TexRot")->setTentative(!identical); + getChildView("TexRot")->setEnabled(editable); } // Color swatch @@ -615,13 +612,13 @@ void LLPanelFace::getState() } // Color transparency { - childSetEnabled("color trans",editable); + getChildView("color trans")->setEnabled(editable); } F32 transparency = (1.f - color.mV[VALPHA]) * 100.f; { - childSetValue("ColorTrans", editable ? transparency : 0); - childSetEnabled("ColorTrans",editable); + getChild<LLUICtrl>("ColorTrans")->setValue(editable ? transparency : 0); + getChildView("ColorTrans")->setEnabled(editable); } { @@ -635,10 +632,10 @@ void LLPanelFace::getState() } func; identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, glow ); - childSetValue("glow",glow); - childSetEnabled("glow",editable); - childSetTentative("glow",!identical); - childSetEnabled("glow label",editable); + getChild<LLUICtrl>("glow")->setValue(glow); + getChildView("glow")->setEnabled(editable); + getChild<LLUICtrl>("glow")->setTentative(!identical); + getChildView("glow label")->setEnabled(editable); } @@ -663,9 +660,9 @@ void LLPanelFace::getState() { llwarns << "failed childGetSelectionInterface for 'combobox shininess'" << llendl; } - childSetEnabled("combobox shininess",editable); - childSetTentative("combobox shininess",!identical); - childSetEnabled("label shininess",editable); + getChildView("combobox shininess")->setEnabled(editable); + getChild<LLUICtrl>("combobox shininess")->setTentative(!identical); + getChildView("label shininess")->setEnabled(editable); } { @@ -688,9 +685,9 @@ void LLPanelFace::getState() { llwarns << "failed childGetSelectionInterface for 'combobox bumpiness'" << llendl; } - childSetEnabled("combobox bumpiness",editable); - childSetTentative("combobox bumpiness",!identical); - childSetEnabled("label bumpiness",editable); + getChildView("combobox bumpiness")->setEnabled(editable); + getChild<LLUICtrl>("combobox bumpiness")->setTentative(!identical); + getChildView("label bumpiness")->setEnabled(editable); } { @@ -714,19 +711,14 @@ void LLPanelFace::getState() { llwarns << "failed childGetSelectionInterface for 'combobox texgen'" << llendl; } - childSetEnabled("combobox texgen",editable); - childSetTentative("combobox texgen",!identical); - childSetEnabled("tex gen",editable); + getChildView("combobox texgen")->setEnabled(editable); + getChild<LLUICtrl>("combobox texgen")->setTentative(!identical); + getChildView("tex gen")->setEnabled(editable); if (selected_texgen == 1) { - childSetText("tex scale",getString("string repeats per meter")); - childSetValue("TexScaleU", 2.0f * childGetValue("TexScaleU").asReal() ); - childSetValue("TexScaleV", 2.0f * childGetValue("TexScaleV").asReal() ); - } - else - { - childSetText("tex scale",getString("string repeats per face")); + getChild<LLUICtrl>("TexScaleU")->setValue(2.0f * getChild<LLUICtrl>("TexScaleU")->getValue().asReal() ); + getChild<LLUICtrl>("TexScaleV")->setValue(2.0f * getChild<LLUICtrl>("TexScaleV")->getValue().asReal() ); } } @@ -742,14 +734,14 @@ void LLPanelFace::getState() } func; identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, fullbrightf ); - childSetValue("checkbox fullbright",(S32)fullbrightf); - childSetEnabled("checkbox fullbright",editable); - childSetTentative("checkbox fullbright",!identical); + getChild<LLUICtrl>("checkbox fullbright")->setValue((S32)fullbrightf); + getChildView("checkbox fullbright")->setEnabled(editable); + getChild<LLUICtrl>("checkbox fullbright")->setTentative(!identical); } // Repeats per meter label { - childSetEnabled("rpt",editable); + getChildView("rpt")->setEnabled(editable); } // Repeats per meter @@ -769,14 +761,14 @@ void LLPanelFace::getState() } func; identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, repeats ); - childSetValue("rptctrl", editable ? repeats : 0); - childSetTentative("rptctrl",!identical); + getChild<LLUICtrl>("rptctrl")->setValue(editable ? repeats : 0); + getChild<LLUICtrl>("rptctrl")->setTentative(!identical); LLComboBox* mComboTexGen = getChild<LLComboBox>("combobox texgen"); if (mComboTexGen) { BOOL enabled = editable && (!mComboTexGen || mComboTexGen->getCurrentIndex() != 1); - childSetEnabled("rptctrl",enabled); - childSetEnabled("button apply",enabled); + getChildView("rptctrl")->setEnabled(enabled); + getChildView("button apply")->setEnabled(enabled); } } } @@ -800,21 +792,19 @@ void LLPanelFace::getState() mColorSwatch->setFallbackImageName("locked_image.j2c" ); mColorSwatch->setValid(FALSE); } - childSetEnabled("color trans",FALSE); - childSetEnabled("rpt",FALSE); - childSetEnabled("tex scale",FALSE); - childSetEnabled("tex offset",FALSE); - childSetEnabled("tex rotate",FALSE); - childSetEnabled("tex gen",FALSE); - childSetEnabled("label shininess",FALSE); - childSetEnabled("label bumpiness",FALSE); - - childSetEnabled("textbox autofix",FALSE); - - childSetEnabled("button align",FALSE); - childSetEnabled("button apply",FALSE); - //childSetEnabled("has media", FALSE); - //childSetEnabled("media info set", FALSE); + getChildView("color trans")->setEnabled(FALSE); + getChildView("rpt")->setEnabled(FALSE); + getChildView("tex offset")->setEnabled(FALSE); + getChildView("tex gen")->setEnabled(FALSE); + getChildView("label shininess")->setEnabled(FALSE); + getChildView("label bumpiness")->setEnabled(FALSE); + + getChildView("textbox autofix")->setEnabled(FALSE); + + getChildView("button align")->setEnabled(FALSE); + getChildView("button apply")->setEnabled(FALSE); + //getChildView("has media")->setEnabled(FALSE); + //getChildView("media info set")->setEnabled(FALSE); } } @@ -944,7 +934,7 @@ void LLPanelFace::onClickApply(void* userdata) gFocusMgr.setKeyboardFocus( NULL ); //F32 repeats_per_meter = self->mCtrlRepeatsPerMeter->get(); - F32 repeats_per_meter = (F32)self->childGetValue( "rptctrl" ).asReal();//self->mCtrlRepeatsPerMeter->get(); + F32 repeats_per_meter = (F32)self->getChild<LLUICtrl>("rptctrl")->getValue().asReal();//self->mCtrlRepeatsPerMeter->get(); LLSelectMgr::getInstance()->selectionTexScaleAutofit( repeats_per_meter ); } diff --git a/indra/newview/llpanelgenerictip.cpp b/indra/newview/llpanelgenerictip.cpp index 8ba2e6d01c..5a71f7f315 100644 --- a/indra/newview/llpanelgenerictip.cpp +++ b/indra/newview/llpanelgenerictip.cpp @@ -44,7 +44,7 @@ LLPanelGenericTip::LLPanelGenericTip( { LLUICtrlFactory::getInstance()->buildPanel(this, "panel_generic_tip.xml"); - childSetValue("message", notification->getMessage()); + getChild<LLUICtrl>("message")->setValue(notification->getMessage()); S32 max_line_count = gSavedSettings.getS32("TipToastMessageLineCount"); diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp index d997b83cbb..c383d04940 100644 --- a/indra/newview/llpanelgroup.cpp +++ b/indra/newview/llpanelgroup.cpp @@ -182,6 +182,11 @@ BOOL LLPanelGroup::postBuild() LLPanelGroupTab* panel_notices = findChild<LLPanelGroupTab>("group_notices_tab_panel"); LLPanelGroupTab* panel_land = findChild<LLPanelGroupTab>("group_land_tab_panel"); + if (LLAccordionCtrl* accordion_ctrl = getChild<LLAccordionCtrl>("groups_accordion")) + { + setVisibleCallback(boost::bind(&LLPanelGroup::onVisibilityChange, this, _2, accordion_ctrl)); + } + if(panel_general) mTabs.push_back(panel_general); if(panel_roles) mTabs.push_back(panel_roles); if(panel_notices) mTabs.push_back(panel_notices); @@ -305,6 +310,13 @@ void LLPanelGroup::onBtnCancel() onBackBtnClick(); } +void LLPanelGroup::onVisibilityChange(const LLSD &in_visible_chain, LLAccordionCtrl* accordion_ctrl) +{ + if (in_visible_chain.asBoolean() && accordion_ctrl != NULL) + { + accordion_ctrl->expandDefaultTab(); + } +} void LLPanelGroup::changed(LLGroupChange gc) { @@ -413,19 +425,14 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id) getChild<LLUICtrl>("prepend_founded_by")->setVisible(!is_null_group_id); - LLAccordionCtrl* tab_ctrl = findChild<LLAccordionCtrl>("group_accordion"); - if(tab_ctrl) - tab_ctrl->reset(); - - LLAccordionCtrlTab* tab_general = findChild<LLAccordionCtrlTab>("group_general_tab"); - LLAccordionCtrlTab* tab_roles = findChild<LLAccordionCtrlTab>("group_roles_tab"); - LLAccordionCtrlTab* tab_notices = findChild<LLAccordionCtrlTab>("group_notices_tab"); - LLAccordionCtrlTab* tab_land = findChild<LLAccordionCtrlTab>("group_land_tab"); + LLAccordionCtrl* tab_ctrl = getChild<LLAccordionCtrl>("groups_accordion"); + tab_ctrl->reset(); + LLAccordionCtrlTab* tab_general = getChild<LLAccordionCtrlTab>("group_general_tab"); + LLAccordionCtrlTab* tab_roles = getChild<LLAccordionCtrlTab>("group_roles_tab"); + LLAccordionCtrlTab* tab_notices = getChild<LLAccordionCtrlTab>("group_notices_tab"); + LLAccordionCtrlTab* tab_land = getChild<LLAccordionCtrlTab>("group_land_tab"); - if(!tab_general || !tab_roles || !tab_notices || !tab_land) - return; - if(mButtonJoin) mButtonJoin->setVisible(false); @@ -486,6 +493,8 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id) button_chat->setVisible(is_member); } + tab_ctrl->arrange(); + reposButtons(); update(GC_ALL);//show/hide "join" button if data is already ready } @@ -536,6 +545,7 @@ void LLPanelGroup::draw() { mRefreshTimer.stop(); childEnable("btn_refresh"); + childEnable("groups_accordion"); } LLButton* button_apply = findChild<LLButton>("btn_apply"); @@ -564,6 +574,8 @@ void LLPanelGroup::refreshData() // 5 second timeout childDisable("btn_refresh"); + childDisable("groups_accordion"); + mRefreshTimer.start(); mRefreshTimer.setTimerExpirySec(5); } diff --git a/indra/newview/llpanelgroup.h b/indra/newview/llpanelgroup.h index 13a03b0713..2b21e9895a 100644 --- a/indra/newview/llpanelgroup.h +++ b/indra/newview/llpanelgroup.h @@ -42,6 +42,7 @@ class LLOfferInfo; const S32 UPDATE_MEMBERS_PER_FRAME = 500; // Forward declares +class LLAccordionCtrl; class LLPanelGroupTab; class LLTabContainer; class LLAgent; @@ -102,6 +103,7 @@ protected: void onBackBtnClick(); void onBtnJoin(); void onBtnCancel(); + void onVisibilityChange(const LLSD &in_visible_chain, LLAccordionCtrl* accordion_ctrl); static void onBtnApply(void*); static void onBtnRefresh(void*); @@ -126,7 +128,6 @@ protected: LLButton* mButtonJoin; LLUICtrl* mJoinText; - }; class LLPanelGroupTab : public LLPanel diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index 8e1b7ba4d9..2302772803 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -184,8 +184,7 @@ BOOL LLPanelGroupGeneral::postBuild() mComboActiveTitle = getChild<LLComboBox>("active_title", recurse); if (mComboActiveTitle) { - mComboActiveTitle->setCommitCallback(onCommitTitle, this); - mComboActiveTitle->resetDirty(); + mComboActiveTitle->setCommitCallback(onCommitAny, this); } mIncompleteMemberDataStr = getString("incomplete_member_data_str"); @@ -278,16 +277,6 @@ void LLPanelGroupGeneral::onCommitEnrollment(LLUICtrl* ctrl, void* data) } // static -void LLPanelGroupGeneral::onCommitTitle(LLUICtrl* ctrl, void* data) -{ - LLPanelGroupGeneral* self = (LLPanelGroupGeneral*)data; - if (self->mGroupID.isNull() || !self->mAllowEdit) return; - LLGroupMgr::getInstance()->sendGroupTitleUpdate(self->mGroupID,self->mComboActiveTitle->getCurrentID()); - self->update(GC_TITLES); - self->mComboActiveTitle->resetDirty(); -} - -// static void LLPanelGroupGeneral::onClickInfo(void *userdata) { LLPanelGroupGeneral *self = (LLPanelGroupGeneral *)userdata; @@ -356,6 +345,13 @@ void LLPanelGroupGeneral::draw() bool LLPanelGroupGeneral::apply(std::string& mesg) { + if (!mGroupID.isNull() && mAllowEdit && mComboActiveTitle && mComboActiveTitle->isDirty()) + { + LLGroupMgr::getInstance()->sendGroupTitleUpdate(mGroupID,mComboActiveTitle->getCurrentID()); + update(GC_TITLES); + mComboActiveTitle->resetDirty(); + } + BOOL has_power_in_group = gAgent.hasPowerInGroup(mGroupID,GP_GROUP_CHANGE_IDENTITY); if (has_power_in_group || mGroupID.isNull()) diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h index 6f4fa994da..358d353074 100644 --- a/indra/newview/llpanelgroupgeneral.h +++ b/indra/newview/llpanelgroupgeneral.h @@ -77,7 +77,6 @@ private: static void onFocusEdit(LLFocusableElement* ctrl, void* data); static void onCommitAny(LLUICtrl* ctrl, void* data); static void onCommitUserOnly(LLUICtrl* ctrl, void* data); - static void onCommitTitle(LLUICtrl* ctrl, void* data); static void onCommitEnrollment(LLUICtrl* ctrl, void* data); static void onClickInfo(void* userdata); static void onReceiveNotices(LLUICtrl* ctrl, void* data); diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp index 65fe7165c2..1404cfcea2 100644 --- a/indra/newview/llpanelgrouplandmoney.cpp +++ b/indra/newview/llpanelgrouplandmoney.cpp @@ -371,7 +371,7 @@ void LLPanelGroupLandMoney::impl::setYourContributionTextField(int contrib) void LLPanelGroupLandMoney::impl::setYourMaxContributionTextBox(int max) { - mPanel.childSetTextArg("your_contribution_max_value", "[AMOUNT]", llformat("%d", max)); + mPanel.getChild<LLUICtrl>("your_contribution_max_value")->setTextArg("[AMOUNT]", llformat("%d", max)); } //static @@ -433,14 +433,14 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg) S32 total_contribution; msg->getS32("QueryData", "ActualArea", total_contribution, 0); - mPanel.childSetTextArg("total_contributed_land_value", "[AREA]", llformat("%d", total_contribution)); + mPanel.getChild<LLUICtrl>("total_contributed_land_value")->setTextArg("[AREA]", llformat("%d", total_contribution)); S32 committed; msg->getS32("QueryData", "BillableArea", committed, 0); - mPanel.childSetTextArg("total_land_in_use_value", "[AREA]", llformat("%d", committed)); + mPanel.getChild<LLUICtrl>("total_land_in_use_value")->setTextArg("[AREA]", llformat("%d", committed)); S32 available = total_contribution - committed; - mPanel.childSetTextArg("land_available_value", "[AREA]", llformat("%d", available)); + mPanel.getChild<LLUICtrl>("land_available_value")->setTextArg("[AREA]", llformat("%d", available)); if ( mGroupOverLimitTextp && mGroupOverLimitIconp ) { @@ -1432,10 +1432,10 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg, // text.append(llformat( "%-24s %6d %6d \n", LLTrans::getString("GroupMoneyDebits").c_str(), total_debits, (S32)floor((F32)total_debits/(F32)non_exempt_members))); // text.append(llformat( "%-24s %6d %6d \n", LLTrans::getString("GroupMoneyTotal").c_str(), total_credits + total_debits, (S32)floor((F32)(total_credits + total_debits)/(F32)non_exempt_members))); - text.append( " Group\n"); - text.append(llformat( "%-24s %6d\n", "Credits", total_credits)); - text.append(llformat( "%-24s %6d\n", "Debits", total_debits)); - text.append(llformat( "%-24s %6d\n", "Total", total_credits + total_debits)); + text.append(llformat( "%s\n", LLTrans::getString("GroupColumn").c_str())); + text.append(llformat( "%-24s %6d\n", LLTrans::getString("GroupMoneyCredits").c_str(), total_credits)); + text.append(llformat( "%-24s %6d\n", LLTrans::getString("GroupMoneyDebits").c_str(), total_debits)); + text.append(llformat( "%-24s %6d\n", LLTrans::getString("GroupMoneyTotal").c_str(), total_credits + total_debits)); if ( mImplementationp->mTextEditorp ) { diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 26e8a932aa..7a28d10baf 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -51,6 +51,7 @@ #include "lltabcontainer.h" #include "lltextbox.h" #include "lltexteditor.h" +#include "lltrans.h" #include "llviewertexturelist.h" #include "llviewerwindow.h" #include "llfocusmgr.h" @@ -587,7 +588,7 @@ void LLPanelGroupSubTab::buildActionCategory(LLScrollListCtrl* ctrl, row["columns"][1]["column"] = "action"; row["columns"][1]["type"] = "text"; - row["columns"][1]["value"] = action_set->mActionSetData->mName; + row["columns"][1]["value"] = LLTrans::getString(action_set->mActionSetData->mName); row["columns"][1]["font"]["name"] = "SANSSERIF_SMALL"; @@ -1593,6 +1594,7 @@ void LLPanelGroupMembersSubTab::updateMembers() LLGroupMgrGroupData::member_list_t::iterator end = gdatap->mMembers.end(); + LLUIString donated = getString("donation_area"); S32 i = 0; for( ; mMemberProgress != end && i<UPDATE_MEMBERS_PER_FRAME; @@ -1614,9 +1616,7 @@ void LLPanelGroupMembersSubTab::updateMembers() if (add_member) { - // Build the donated tier string. - std::ostringstream donated; - donated << mMemberProgress->second->getContribution() << " sq. m."; + donated.setArg("[AREA]", llformat("%d", mMemberProgress->second->getContribution())); LLSD row; row["id"] = (*mMemberProgress).first; @@ -1625,7 +1625,7 @@ void LLPanelGroupMembersSubTab::updateMembers() // value is filled in by name list control row["columns"][1]["column"] = "donated"; - row["columns"][1]["value"] = donated.str(); + row["columns"][1]["value"] = donated.getString(); row["columns"][2]["column"] = "online"; row["columns"][2]["value"] = mMemberProgress->second->getOnlineStatus(); diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp index b79a4f359a..32efdf2064 100644 --- a/indra/newview/llpanelimcontrolpanel.cpp +++ b/indra/newview/llpanelimcontrolpanel.cpp @@ -89,7 +89,7 @@ void LLPanelChatControlPanel::updateCallButton() if (!session) { - childSetEnabled("call_btn", false); + getChildView("call_btn")->setEnabled(false); return; } @@ -99,14 +99,14 @@ void LLPanelChatControlPanel::updateCallButton() BOOL enable_connect = session_initialized && voice_enabled && callback_enabled; - childSetEnabled("call_btn", enable_connect); + getChildView("call_btn")->setEnabled(enable_connect); } void LLPanelChatControlPanel::updateButtons(bool is_call_started) { - childSetVisible("end_call_btn_panel", is_call_started); - childSetVisible("voice_ctrls_btn_panel", is_call_started); - childSetVisible("call_btn_panel", ! is_call_started); + getChildView("end_call_btn_panel")->setVisible( is_call_started); + getChildView("voice_ctrls_btn_panel")->setVisible( is_call_started); + getChildView("call_btn_panel")->setVisible( ! is_call_started); updateCallButton(); } @@ -162,7 +162,7 @@ BOOL LLPanelIMControlPanel::postBuild() childSetAction("share_btn", boost::bind(&LLPanelIMControlPanel::onShareButtonClicked, this)); childSetAction("teleport_btn", boost::bind(&LLPanelIMControlPanel::onTeleportButtonClicked, this)); childSetAction("pay_btn", boost::bind(&LLPanelIMControlPanel::onPayButtonClicked, this)); - childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId())); + getChildView("add_friend_btn")->setEnabled(!LLAvatarActions::isFriend(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId())); setFocusReceivedCallback(boost::bind(&LLPanelIMControlPanel::onFocusReceived, this)); @@ -215,12 +215,12 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id) LLAvatarTracker::instance().addParticularFriendObserver(mAvatarID, this); // Disable "Add friend" button for friends. - childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(mAvatarID)); + getChildView("add_friend_btn")->setEnabled(!LLAvatarActions::isFriend(mAvatarID)); // Disable "Teleport" button if friend is offline if(LLAvatarActions::isFriend(mAvatarID)) { - childSetEnabled("teleport_btn", LLAvatarTracker::instance().isBuddyOnline(mAvatarID)); + getChildView("teleport_btn")->setEnabled(LLAvatarTracker::instance().isBuddyOnline(mAvatarID)); } getChild<LLAvatarIconCtrl>("avatar_icon")->setValue(mAvatarID); @@ -231,24 +231,24 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id) im_model.findIMSession(session_id); if( im_session && !im_session->mOtherParticipantIsAvatar ) { - childSetEnabled("view_profile_btn", FALSE); - childSetEnabled("add_friend_btn", FALSE); + getChildView("view_profile_btn")->setEnabled(FALSE); + getChildView("add_friend_btn")->setEnabled(FALSE); - childSetEnabled("share_btn", FALSE); - childSetEnabled("teleport_btn", FALSE); - childSetEnabled("pay_btn", FALSE); + getChildView("share_btn")->setEnabled(FALSE); + getChildView("teleport_btn")->setEnabled(FALSE); + getChildView("pay_btn")->setEnabled(FALSE); } } //virtual void LLPanelIMControlPanel::changed(U32 mask) { - childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(mAvatarID)); + getChildView("add_friend_btn")->setEnabled(!LLAvatarActions::isFriend(mAvatarID)); // Disable "Teleport" button if friend is offline if(LLAvatarActions::isFriend(mAvatarID)) { - childSetEnabled("teleport_btn", LLAvatarTracker::instance().isBuddyOnline(mAvatarID)); + getChildView("teleport_btn")->setEnabled(LLAvatarTracker::instance().isBuddyOnline(mAvatarID)); } } diff --git a/indra/newview/llpanelland.cpp b/indra/newview/llpanelland.cpp index 417a804834..6b84b2985a 100644 --- a/indra/newview/llpanelland.cpp +++ b/indra/newview/llpanelland.cpp @@ -64,15 +64,14 @@ public: BOOL LLPanelLandInfo::postBuild() { - - childSetAction("button buy land",onClickClaim,this); - childSetAction("button abandon land",onClickRelease,this); - childSetAction("button subdivide land",onClickDivide,this); - childSetAction("button join land",onClickJoin,this); - childSetAction("button about land",onClickAbout,this); + childSetAction("button buy land",boost::bind(onClickClaim)); + childSetAction("button abandon land", boost::bind(onClickRelease)); + childSetAction("button subdivide land", boost::bind(onClickDivide)); + childSetAction("button join land", boost::bind(onClickJoin)); + childSetAction("button about land", boost::bind(onClickAbout)); mCheckShowOwners = getChild<LLCheckBoxCtrl>("checkbox show owners"); - childSetValue("checkbox show owners", gSavedSettings.getBOOL("ShowParcelOwners")); + getChild<LLUICtrl>("checkbox show owners")->setValue(gSavedSettings.getBOOL("ShowParcelOwners")); return TRUE; } @@ -126,17 +125,17 @@ void LLPanelLandInfo::refresh() if (!parcel || !regionp) { // nothing selected, disable panel - childSetVisible("label_area_price",false); - childSetVisible("label_area",false); + getChildView("label_area_price")->setVisible(false); + getChildView("label_area")->setVisible(false); //mTextPrice->setText(LLStringUtil::null); - childSetText("textbox price",LLStringUtil::null); + getChild<LLUICtrl>("textbox price")->setValue(LLStringUtil::null); - childSetEnabled("button buy land",FALSE); - childSetEnabled("button abandon land",FALSE); - childSetEnabled("button subdivide land",FALSE); - childSetEnabled("button join land",FALSE); - childSetEnabled("button about land",FALSE); + getChildView("button buy land")->setEnabled(FALSE); + getChildView("button abandon land")->setEnabled(FALSE); + getChildView("button subdivide land")->setEnabled(FALSE); + getChildView("button join land")->setEnabled(FALSE); + getChildView("button about land")->setEnabled(FALSE); } else { @@ -154,11 +153,11 @@ void LLPanelLandInfo::refresh() if (is_public) { - childSetEnabled("button buy land",TRUE); + getChildView("button buy land")->setEnabled(TRUE); } else { - childSetEnabled("button buy land",can_buy); + getChildView("button buy land")->setEnabled(can_buy); } BOOL owner_release = LLViewerParcelMgr::isParcelOwnedByAgent(parcel, GP_LAND_RELEASE); @@ -170,16 +169,16 @@ void LLPanelLandInfo::refresh() BOOL manager_divideable = ( gAgent.canManageEstate() && ((parcel->getOwnerID() == regionp->getOwner()) || owner_divide) ); - childSetEnabled("button abandon land",owner_release || manager_releaseable || gAgent.isGodlike()); + getChildView("button abandon land")->setEnabled(owner_release || manager_releaseable || gAgent.isGodlike()); // only mainland sims are subdividable by owner if (regionp->getRegionFlags() && REGION_FLAGS_ALLOW_PARCEL_CHANGES) { - childSetEnabled("button subdivide land",owner_divide || manager_divideable || gAgent.isGodlike()); + getChildView("button subdivide land")->setEnabled(owner_divide || manager_divideable || gAgent.isGodlike()); } else { - childSetEnabled("button subdivide land",manager_divideable || gAgent.isGodlike()); + getChildView("button subdivide land")->setEnabled(manager_divideable || gAgent.isGodlike()); } // To join land, must have something selected, @@ -190,15 +189,15 @@ void LLPanelLandInfo::refresh() //&& LLViewerParcelMgr::getInstance()->getSelfCount() > 1 && !LLViewerParcelMgr::getInstance()->getParcelSelection()->getWholeParcelSelected()) { - childSetEnabled("button join land",TRUE); + getChildView("button join land")->setEnabled(TRUE); } else { lldebugs << "Invalid selection for joining land" << llendl; - childSetEnabled("button join land",FALSE); + getChildView("button join land")->setEnabled(FALSE); } - childSetEnabled("button about land",TRUE); + getChildView("button about land")->setEnabled(TRUE); // show pricing information S32 area; @@ -213,48 +212,48 @@ void LLPanelLandInfo::refresh() &dwell); if(is_public || (is_for_sale && LLViewerParcelMgr::getInstance()->getParcelSelection()->getWholeParcelSelected())) { - childSetTextArg("label_area_price","[PRICE]", llformat("%d",claim_price)); - childSetTextArg("label_area_price","[AREA]", llformat("%d",area)); - childSetVisible("label_area_price",true); - childSetVisible("label_area",false); + getChild<LLUICtrl>("label_area_price")->setTextArg("[PRICE]", llformat("%d",claim_price)); + getChild<LLUICtrl>("label_area_price")->setTextArg("[AREA]", llformat("%d",area)); + getChildView("label_area_price")->setVisible(true); + getChildView("label_area")->setVisible(false); } else { - childSetVisible("label_area_price",false); - childSetTextArg("label_area","[AREA]", llformat("%d",area)); - childSetVisible("label_area",true); + getChildView("label_area_price")->setVisible(false); + getChild<LLUICtrl>("label_area")->setTextArg("[AREA]", llformat("%d",area)); + getChildView("label_area")->setVisible(true); } } } //static -void LLPanelLandInfo::onClickClaim(void*) +void LLPanelLandInfo::onClickClaim() { LLViewerParcelMgr::getInstance()->startBuyLand(); } //static -void LLPanelLandInfo::onClickRelease(void*) +void LLPanelLandInfo::onClickRelease() { LLViewerParcelMgr::getInstance()->startReleaseLand(); } // static -void LLPanelLandInfo::onClickDivide(void*) +void LLPanelLandInfo::onClickDivide() { LLViewerParcelMgr::getInstance()->startDivideLand(); } // static -void LLPanelLandInfo::onClickJoin(void*) +void LLPanelLandInfo::onClickJoin() { LLViewerParcelMgr::getInstance()->startJoinLand(); } //static -void LLPanelLandInfo::onClickAbout(void*) +void LLPanelLandInfo::onClickAbout() { // Promote the rectangle selection to a parcel selection if (!LLViewerParcelMgr::getInstance()->getParcelSelection()->getWholeParcelSelected()) diff --git a/indra/newview/llpanelland.h b/indra/newview/llpanelland.h index 02e7e7bf38..32ddd5e93b 100644 --- a/indra/newview/llpanelland.h +++ b/indra/newview/llpanelland.h @@ -55,22 +55,13 @@ public: LLCheckBoxCtrl *mCheckShowOwners; protected: - static void onClickClaim(void*); - static void onClickRelease(void*); - static void onClickDivide(void*); - static void onClickJoin(void*); - static void onClickAbout(void*); + static void onClickClaim(); + static void onClickRelease(); + static void onClickDivide(); + static void onClickJoin(); + static void onClickAbout(); protected: - //LLTextBox* mTextPriceLabel; - //LLTextBox* mTextPrice; - - //LLButton* mBtnClaimLand; - //LLButton* mBtnReleaseLand; - //LLButton* mBtnDivideLand; - //LLButton* mBtnJoinLand; - //LLButton* mBtnAbout; - virtual BOOL postBuild(); static LLPanelLandSelectObserver* sObserver; diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp index 4ffd43cb0f..c05cffc59e 100644 --- a/indra/newview/llpanellandmarkinfo.cpp +++ b/indra/newview/llpanellandmarkinfo.cpp @@ -123,11 +123,54 @@ void LLPanelLandmarkInfo::setInfoType(EInfoType type) switch(type) { case CREATE_LANDMARK: + { mCurrentTitle = getString("title_create_landmark"); mLandmarkTitle->setVisible(FALSE); mLandmarkTitleEditor->setVisible(TRUE); mNotesEditor->setEnabled(TRUE); + + LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance(); + std::string name = parcel_mgr->getAgentParcelName(); + LLVector3 agent_pos = gAgent.getPositionAgent(); + + if (name.empty()) + { + S32 region_x = llround(agent_pos.mV[VX]); + S32 region_y = llround(agent_pos.mV[VY]); + S32 region_z = llround(agent_pos.mV[VZ]); + + std::string region_name; + LLViewerRegion* region = parcel_mgr->getSelectionRegion(); + if (region) + { + region_name = region->getName(); + } + else + { + region_name = getString("unknown"); + } + + mLandmarkTitleEditor->setText(llformat("%s (%d, %d, %d)", + region_name.c_str(), region_x, region_y, region_z)); + } + else + { + mLandmarkTitleEditor->setText(name); + } + + std::string desc; + LLAgentUI::buildLocationString(desc, LLAgentUI::LOCATION_FORMAT_FULL, agent_pos); + mNotesEditor->setText(desc); + + // Moved landmark creation here from LLPanelLandmarkInfo::processParcelInfo() + // because we use only agent's current coordinates instead of waiting for + // remote parcel request to complete. + if (!LLLandmarkActions::landmarkAlreadyExists()) + { + createLandmark(LLUUID()); + } + } break; case LANDMARK: @@ -192,28 +235,6 @@ void LLPanelLandmarkInfo::processParcelInfo(const LLParcelData& parcel_data) info["global_y"] = parcel_data.global_y; info["global_z"] = parcel_data.global_z; notifyParent(info); - - if (mInfoType == CREATE_LANDMARK) - { - if (parcel_data.name.empty()) - { - mLandmarkTitleEditor->setText(llformat("%s (%d, %d, %d)", - parcel_data.sim_name.c_str(), region_x, region_y, region_z)); - } - else - { - mLandmarkTitleEditor->setText(parcel_data.name); - } - - std::string desc; - LLAgentUI::buildLocationString(desc, LLAgentUI::LOCATION_FORMAT_FULL, gAgent.getPositionAgent()); - mNotesEditor->setText(desc); - - if (!LLLandmarkActions::landmarkAlreadyExists()) - { - createLandmark(mFolderCombo->getValue().asUUID()); - } - } } void LLPanelLandmarkInfo::displayItemInfo(const LLInventoryItem* pItem) diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index ce1131f45c..6f47fc60b0 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -522,6 +522,9 @@ void LLLandmarksPanel::setParcelID(const LLUUID& parcel_id) { if (!parcel_id.isNull()) { + //ext-4655, defensive. remove now incase this gets called twice without a remove + LLRemoteParcelInfoProcessor::getInstance()->removeObserver(parcel_id, this); + LLRemoteParcelInfoProcessor::getInstance()->addObserver(parcel_id, this); LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(parcel_id); } @@ -718,8 +721,8 @@ void LLLandmarksPanel::updateListCommands() bool trash_enabled = isActionEnabled("delete"); // keep Options & Add Landmark buttons always enabled - mListCommands->childSetEnabled(ADD_FOLDER_BUTTON_NAME, add_folder_enabled); - mListCommands->childSetEnabled(TRASH_BUTTON_NAME, trash_enabled); + mListCommands->getChildView(ADD_FOLDER_BUTTON_NAME)->setEnabled(add_folder_enabled); + mListCommands->getChildView(TRASH_BUTTON_NAME)->setEnabled(trash_enabled); } void LLLandmarksPanel::onActionsButtonClick() diff --git a/indra/newview/llpanellandmedia.cpp b/indra/newview/llpanellandmedia.cpp index e834e229cd..f0f386c5d1 100644 --- a/indra/newview/llpanellandmedia.cpp +++ b/indra/newview/llpanellandmedia.cpp @@ -145,19 +145,19 @@ void LLPanelLandMedia::refresh() mMediaURLEdit->setText(parcel->getMediaURL()); mMediaURLEdit->setEnabled( FALSE ); - childSetText("current_url", parcel->getMediaCurrentURL()); + getChild<LLUICtrl>("current_url")->setValue(parcel->getMediaCurrentURL()); mMediaDescEdit->setText(parcel->getMediaDesc()); mMediaDescEdit->setEnabled( can_change_media ); std::string mime_type = parcel->getMediaType(); - if (mime_type.empty()) + if (mime_type.empty() || mime_type == LLMIMETypes::getDefaultMimeType()) { mime_type = LLMIMETypes::getDefaultMimeTypeTranslation(); } setMediaType(mime_type); mMediaTypeCombo->setEnabled( can_change_media ); - childSetText("mime_type", mime_type); + getChild<LLUICtrl>("mime_type")->setValue(mime_type); mMediaUrlCheck->set( parcel->getObscureMedia() ); mMediaUrlCheck->setEnabled( can_change_media ); @@ -255,7 +255,7 @@ void LLPanelLandMedia::setMediaType(const std::string& mime_type) // localizable - "none" for example (see EXT-6542) mime_str = LLMIMETypes::getDefaultMimeTypeTranslation(); } - childSetText("mime_type", mime_str); + getChild<LLUICtrl>("mime_type")->setValue(mime_str); } void LLPanelLandMedia::setMediaURL(const std::string& media_url) @@ -269,7 +269,7 @@ void LLPanelLandMedia::setMediaURL(const std::string& media_url) mMediaURLEdit->onCommit(); // LLViewerParcelMedia::sendMediaNavigateMessage(media_url); - childSetText("current_url", media_url); + getChild<LLUICtrl>("current_url")->setValue(media_url); } std::string LLPanelLandMedia::getMediaURL() { @@ -280,11 +280,11 @@ std::string LLPanelLandMedia::getMediaURL() void LLPanelLandMedia::onCommitType(LLUICtrl *ctrl, void *userdata) { LLPanelLandMedia *self = (LLPanelLandMedia *)userdata; - std::string current_type = LLMIMETypes::widgetType(self->childGetText("mime_type")); + std::string current_type = LLMIMETypes::widgetType(self->getChild<LLUICtrl>("mime_type")->getValue().asString()); std::string new_type = self->mMediaTypeCombo->getValue(); if(current_type != new_type) { - self->childSetText("mime_type", LLMIMETypes::findDefaultMimeType(new_type)); + self->getChild<LLUICtrl>("mime_type")->setValue(LLMIMETypes::findDefaultMimeType(new_type)); } onCommitAny(ctrl, userdata); @@ -304,7 +304,7 @@ void LLPanelLandMedia::onCommitAny(LLUICtrl*, void *userdata) // Extract data from UI std::string media_url = self->mMediaURLEdit->getText(); std::string media_desc = self->mMediaDescEdit->getText(); - std::string mime_type = self->childGetText("mime_type"); + std::string mime_type = self->getChild<LLUICtrl>("mime_type")->getValue().asString(); U8 media_auto_scale = self->mMediaAutoScaleCheck->get(); U8 media_loop = self->mMediaLoopCheck->get(); U8 obscure_media = self->mMediaUrlCheck->get(); @@ -313,7 +313,7 @@ void LLPanelLandMedia::onCommitAny(LLUICtrl*, void *userdata) LLUUID media_id = self->mMediaTextureCtrl->getImageAssetID(); - self->childSetText("mime_type", mime_type); + self->getChild<LLUICtrl>("mime_type")->setValue(mime_type); // Remove leading/trailing whitespace (common when copying/pasting) LLStringUtil::trim(media_url); @@ -354,7 +354,7 @@ void LLPanelLandMedia::onResetBtn(void *userdata) LLParcel* parcel = self->mParcel->getParcel(); // LLViewerMedia::navigateHome(); self->refresh(); - self->childSetText("current_url", parcel->getMediaURL()); + self->getChild<LLUICtrl>("current_url")->setValue(parcel->getMediaURL()); // LLViewerParcelMedia::sendMediaNavigateMessage(parcel->getMediaURL()); } diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 144839b554..4b23e63f12 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -211,7 +211,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, } #if !USE_VIEWER_AUTH - childSetPrevalidate("username_edit", LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLLineEditor>("username_edit")->setPrevalidate(LLTextValidate::validateASCIIPrintableNoPipe); getChild<LLLineEditor>("password_edit")->setKeystrokeCallback(onPassKey, this); // change z sort of clickable text to be behind buttons @@ -441,8 +441,8 @@ void LLPanelLogin::giveFocus() if( sInstance ) { // Grab focus and move cursor to first blank input field - std::string username = sInstance->childGetText("username_edit"); - std::string pass = sInstance->childGetText("password_edit"); + std::string username = sInstance->getChild<LLUICtrl>("username_edit")->getValue().asString(); + std::string pass = sInstance->getChild<LLUICtrl>("password_edit")->getValue().asString(); BOOL have_username = !username.empty(); BOOL have_pass = !pass.empty(); @@ -472,7 +472,7 @@ void LLPanelLogin::giveFocus() // static void LLPanelLogin::showLoginWidgets() { - sInstance->childSetVisible("login_widgets", true); + sInstance->getChildView("login_widgets")->setVisible( true); LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html"); sInstance->reshapeBrowser(); // *TODO: Append all the usual login parameters, like first_login=Y etc. @@ -514,16 +514,16 @@ void LLPanelLogin::setFields(LLPointer<LLCredential> credential, LLSD identifier = credential->getIdentifier(); if((std::string)identifier["type"] == "agent") { - sInstance->childSetText("username_edit", (std::string)identifier["first_name"] + " " + + sInstance->getChild<LLUICtrl>("username_edit")->setValue((std::string)identifier["first_name"] + " " + (std::string)identifier["last_name"]); } else if((std::string)identifier["type"] == "account") { - sInstance->childSetText("username_edit", (std::string)identifier["account_name"]); + sInstance->getChild<LLUICtrl>("username_edit")->setValue((std::string)identifier["account_name"]); } else { - sInstance->childSetText("username_edit", std::string()); + sInstance->getChild<LLUICtrl>("username_edit")->setValue(std::string()); } // if the password exists in the credential, set the password field with // a filler to get some stars @@ -539,13 +539,13 @@ void LLPanelLogin::setFields(LLPointer<LLCredential> credential, // fill it with MAX_PASSWORD characters so we get a // nice row of asterixes. const std::string filler("123456789!123456"); - sInstance->childSetText("password_edit", std::string("123456789!123456")); + sInstance->getChild<LLUICtrl>("password_edit")->setValue(std::string("123456789!123456")); } else { - sInstance->childSetText("password_edit", std::string()); + sInstance->getChild<LLUICtrl>("password_edit")->setValue(std::string()); } - sInstance->childSetValue("remember_check", remember); + sInstance->getChild<LLUICtrl>("remember_check")->setValue(remember); } @@ -572,9 +572,9 @@ void LLPanelLogin::getFields(LLPointer<LLCredential>& credential, authenticator = credential->getAuthenticator(); } - std::string username = sInstance->childGetText("username_edit"); + std::string username = sInstance->getChild<LLUICtrl>("username_edit")->getValue().asString(); LLStringUtil::trim(username); - std::string password = sInstance->childGetText("password_edit"); + std::string password = sInstance->getChild<LLUICtrl>("password_edit")->getValue().asString(); LL_INFOS2("Credentials", "Authentication") << "retrieving username:" << username << LL_ENDL; // determine if the username is a first/last form or not. @@ -621,7 +621,7 @@ void LLPanelLogin::getFields(LLPointer<LLCredential>& credential, } } credential = gSecAPIHandler->createCredential(LLGridManager::getInstance()->getGrid(), identifier, authenticator); - remember = sInstance->childGetValue("remember_check"); + remember = sInstance->getChild<LLUICtrl>("remember_check")->getValue(); } // static @@ -649,9 +649,9 @@ BOOL LLPanelLogin::areCredentialFieldsDirty() } else { - std::string username = sInstance->childGetText("username_edit"); + std::string username = sInstance->getChild<LLUICtrl>("username_edit")->getValue().asString(); LLStringUtil::trim(username); - std::string password = sInstance->childGetText("password_edit"); + std::string password = sInstance->getChild<LLUICtrl>("password_edit")->getValue().asString(); LLLineEditor* ctrl = sInstance->getChild<LLLineEditor>("username_edit"); if(ctrl && ctrl->isDirty()) { @@ -699,12 +699,12 @@ void LLPanelLogin::updateLocationCombo( bool force_visible ) if ( ! force_visible ) show_start = gSavedSettings.getBOOL("ShowStartLocation"); - sInstance->childSetVisible("start_location_combo", show_start); - sInstance->childSetVisible("start_location_text", show_start); + sInstance->getChildView("start_location_combo")->setVisible( show_start); + sInstance->getChildView("start_location_text")->setVisible( show_start); BOOL show_server = gSavedSettings.getBOOL("ForceShowGrid"); - sInstance->childSetVisible("server_combo_text", show_server); - sInstance->childSetVisible("server_combo", show_server); + sInstance->getChildView("server_combo_text")->setVisible( show_server); + sInstance->getChildView("server_combo")->setVisible( show_server); } // static @@ -964,7 +964,7 @@ void LLPanelLogin::onClickConnect(void *) return; } updateStartSLURL(); - std::string username = sInstance->childGetText("username_edit"); + std::string username = sInstance->getChild<LLUICtrl>("username_edit")->getValue().asString(); if(username.empty()) @@ -1079,7 +1079,7 @@ void LLPanelLogin::updateServer() if(sInstance && !sInstance->areCredentialFieldsDirty()) { LLPointer<LLCredential> credential = gSecAPIHandler->loadCredential(LLGridManager::getInstance()->getGrid()); - bool remember = sInstance->childGetValue("remember_check"); + bool remember = sInstance->getChild<LLUICtrl>("remember_check")->getValue(); sInstance->setFields(credential, remember); } // grid changed so show new splash screen (possibly) @@ -1173,6 +1173,6 @@ void LLPanelLogin::updateLoginPanelLinks() // need to call through sInstance, as it's called from onSelectServer, which // is static. - sInstance->childSetVisible("create_new_account_text", system_grid); - sInstance->childSetVisible("forgot_password_text", system_grid); + sInstance->getChildView("create_new_account_text")->setVisible( system_grid); + sInstance->getChildView("forgot_password_text")->setVisible( system_grid); } diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 3e12f0ba9a..d7ffdacb70 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -45,6 +45,7 @@ #include "llinventorypanel.h" #include "llfiltereditor.h" #include "llfloaterreg.h" +#include "lloutfitobserver.h" #include "llpreviewtexture.h" #include "llresmgr.h" #include "llscrollcontainer.h" @@ -490,7 +491,7 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string ) void LLPanelMainInventory::onFilterSelected() { // Find my index - mActivePanel = (LLInventoryPanel*)childGetVisibleTab("inventory filter tabs"); + mActivePanel = (LLInventoryPanel*)getChild<LLTabContainer>("inventory filter tabs")->getCurrentPanel(); if (!mActivePanel) { @@ -498,7 +499,7 @@ void LLPanelMainInventory::onFilterSelected() } BOOL recent_active = ("Recent Items" == mActivePanel->getName()); - childSetVisible("add_btn_panel", !recent_active); + getChildView("add_btn_panel")->setVisible( !recent_active); setFilterSubString(mFilterSubString); LLInventoryFilter* filter = mActivePanel->getFilter(); @@ -567,7 +568,8 @@ void LLPanelMainInventory::draw() void LLPanelMainInventory::updateItemcountText() { - LLLocale locale(LLLocale::USER_LOCALE); + // *TODO: Calling setlocale() on each frame may be inefficient. + LLLocale locale(LLStringUtil::getLocale()); std::string item_count_string; LLResMgr::getInstance()->getIntegerString(item_count_string, gInventory.getItemCount()); @@ -589,7 +591,7 @@ void LLPanelMainInventory::updateItemcountText() { text = getString("ItemcountUnknown"); } - childSetText("ItemcountText",text); + getChild<LLUICtrl>("ItemcountText")->setValue(text); } void LLPanelMainInventory::setFilterTextFromFilter() @@ -656,7 +658,7 @@ void LLFloaterInventoryFinder::onCheckSinceLogoff(LLUICtrl *ctrl, void *user_dat LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data; if (!self) return; - bool since_logoff= self->childGetValue("check_since_logoff"); + bool since_logoff= self->getChild<LLUICtrl>("check_since_logoff")->getValue(); if (!since_logoff && !( self->mSpinSinceDays->get() || self->mSpinSinceHours->get() ) ) @@ -696,7 +698,7 @@ void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data) { since_logoff = false; } - self->childSetValue("check_since_logoff", since_logoff); + self->getChild<LLUICtrl>("check_since_logoff")->setValue(since_logoff); } void LLFloaterInventoryFinder::changeFilter(LLInventoryFilter* filter) @@ -719,20 +721,20 @@ void LLFloaterInventoryFinder::updateElementsFromFilter() // update the ui elements setTitle(mFilter->getName()); - childSetValue("check_animation", (S32) (filter_types & 0x1 << LLInventoryType::IT_ANIMATION)); - - childSetValue("check_calling_card", (S32) (filter_types & 0x1 << LLInventoryType::IT_CALLINGCARD)); - childSetValue("check_clothing", (S32) (filter_types & 0x1 << LLInventoryType::IT_WEARABLE)); - childSetValue("check_gesture", (S32) (filter_types & 0x1 << LLInventoryType::IT_GESTURE)); - childSetValue("check_landmark", (S32) (filter_types & 0x1 << LLInventoryType::IT_LANDMARK)); - childSetValue("check_notecard", (S32) (filter_types & 0x1 << LLInventoryType::IT_NOTECARD)); - childSetValue("check_object", (S32) (filter_types & 0x1 << LLInventoryType::IT_OBJECT)); - childSetValue("check_script", (S32) (filter_types & 0x1 << LLInventoryType::IT_LSL)); - childSetValue("check_sound", (S32) (filter_types & 0x1 << LLInventoryType::IT_SOUND)); - childSetValue("check_texture", (S32) (filter_types & 0x1 << LLInventoryType::IT_TEXTURE)); - childSetValue("check_snapshot", (S32) (filter_types & 0x1 << LLInventoryType::IT_SNAPSHOT)); - childSetValue("check_show_empty", show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS); - childSetValue("check_since_logoff", mFilter->isSinceLogoff()); + getChild<LLUICtrl>("check_animation")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_ANIMATION)); + + getChild<LLUICtrl>("check_calling_card")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_CALLINGCARD)); + getChild<LLUICtrl>("check_clothing")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_WEARABLE)); + getChild<LLUICtrl>("check_gesture")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_GESTURE)); + getChild<LLUICtrl>("check_landmark")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_LANDMARK)); + getChild<LLUICtrl>("check_notecard")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_NOTECARD)); + getChild<LLUICtrl>("check_object")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_OBJECT)); + getChild<LLUICtrl>("check_script")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_LSL)); + getChild<LLUICtrl>("check_sound")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_SOUND)); + getChild<LLUICtrl>("check_texture")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_TEXTURE)); + getChild<LLUICtrl>("check_snapshot")->setValue((S32) (filter_types & 0x1 << LLInventoryType::IT_SNAPSHOT)); + getChild<LLUICtrl>("check_show_empty")->setValue(show_folders == LLInventoryFilter::SHOW_ALL_FOLDERS); + getChild<LLUICtrl>("check_since_logoff")->setValue(mFilter->isSinceLogoff()); mSpinSinceHours->set((F32)(hours % 24)); mSpinSinceDays->set((F32)(hours / 24)); } @@ -743,32 +745,32 @@ void LLFloaterInventoryFinder::draw() U32 filter = 0xffffffff; BOOL filtered_by_all_types = TRUE; - if (!childGetValue("check_animation")) + if (!getChild<LLUICtrl>("check_animation")->getValue()) { filter &= ~(0x1 << LLInventoryType::IT_ANIMATION); filtered_by_all_types = FALSE; } - if (!childGetValue("check_calling_card")) + if (!getChild<LLUICtrl>("check_calling_card")->getValue()) { filter &= ~(0x1 << LLInventoryType::IT_CALLINGCARD); filtered_by_all_types = FALSE; } - if (!childGetValue("check_clothing")) + if (!getChild<LLUICtrl>("check_clothing")->getValue()) { filter &= ~(0x1 << LLInventoryType::IT_WEARABLE); filtered_by_all_types = FALSE; } - if (!childGetValue("check_gesture")) + if (!getChild<LLUICtrl>("check_gesture")->getValue()) { filter &= ~(0x1 << LLInventoryType::IT_GESTURE); filtered_by_all_types = FALSE; } - if (!childGetValue("check_landmark")) + if (!getChild<LLUICtrl>("check_landmark")->getValue()) { @@ -776,38 +778,38 @@ void LLFloaterInventoryFinder::draw() filtered_by_all_types = FALSE; } - if (!childGetValue("check_notecard")) + if (!getChild<LLUICtrl>("check_notecard")->getValue()) { filter &= ~(0x1 << LLInventoryType::IT_NOTECARD); filtered_by_all_types = FALSE; } - if (!childGetValue("check_object")) + if (!getChild<LLUICtrl>("check_object")->getValue()) { filter &= ~(0x1 << LLInventoryType::IT_OBJECT); filter &= ~(0x1 << LLInventoryType::IT_ATTACHMENT); filtered_by_all_types = FALSE; } - if (!childGetValue("check_script")) + if (!getChild<LLUICtrl>("check_script")->getValue()) { filter &= ~(0x1 << LLInventoryType::IT_LSL); filtered_by_all_types = FALSE; } - if (!childGetValue("check_sound")) + if (!getChild<LLUICtrl>("check_sound")->getValue()) { filter &= ~(0x1 << LLInventoryType::IT_SOUND); filtered_by_all_types = FALSE; } - if (!childGetValue("check_texture")) + if (!getChild<LLUICtrl>("check_texture")->getValue()) { filter &= ~(0x1 << LLInventoryType::IT_TEXTURE); filtered_by_all_types = FALSE; } - if (!childGetValue("check_snapshot")) + if (!getChild<LLUICtrl>("check_snapshot")->getValue()) { filter &= ~(0x1 << LLInventoryType::IT_SNAPSHOT); filtered_by_all_types = FALSE; @@ -847,12 +849,12 @@ void LLFloaterInventoryFinder::draw() BOOL LLFloaterInventoryFinder::getCheckShowEmpty() { - return childGetValue("check_show_empty"); + return getChild<LLUICtrl>("check_show_empty")->getValue(); } BOOL LLFloaterInventoryFinder::getCheckSinceLogoff() { - return childGetValue("check_since_logoff"); + return getChild<LLUICtrl>("check_since_logoff")->getValue(); } void LLFloaterInventoryFinder::onCloseBtn(void* user_data) @@ -867,17 +869,17 @@ void LLFloaterInventoryFinder::selectAllTypes(void* user_data) LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data; if(!self) return; - self->childSetValue("check_animation", TRUE); - self->childSetValue("check_calling_card", TRUE); - self->childSetValue("check_clothing", TRUE); - self->childSetValue("check_gesture", TRUE); - self->childSetValue("check_landmark", TRUE); - self->childSetValue("check_notecard", TRUE); - self->childSetValue("check_object", TRUE); - self->childSetValue("check_script", TRUE); - self->childSetValue("check_sound", TRUE); - self->childSetValue("check_texture", TRUE); - self->childSetValue("check_snapshot", TRUE); + self->getChild<LLUICtrl>("check_animation")->setValue(TRUE); + self->getChild<LLUICtrl>("check_calling_card")->setValue(TRUE); + self->getChild<LLUICtrl>("check_clothing")->setValue(TRUE); + self->getChild<LLUICtrl>("check_gesture")->setValue(TRUE); + self->getChild<LLUICtrl>("check_landmark")->setValue(TRUE); + self->getChild<LLUICtrl>("check_notecard")->setValue(TRUE); + self->getChild<LLUICtrl>("check_object")->setValue(TRUE); + self->getChild<LLUICtrl>("check_script")->setValue(TRUE); + self->getChild<LLUICtrl>("check_sound")->setValue(TRUE); + self->getChild<LLUICtrl>("check_texture")->setValue(TRUE); + self->getChild<LLUICtrl>("check_snapshot")->setValue(TRUE); } //static @@ -886,17 +888,17 @@ void LLFloaterInventoryFinder::selectNoTypes(void* user_data) LLFloaterInventoryFinder* self = (LLFloaterInventoryFinder*)user_data; if(!self) return; - self->childSetValue("check_animation", FALSE); - self->childSetValue("check_calling_card", FALSE); - self->childSetValue("check_clothing", FALSE); - self->childSetValue("check_gesture", FALSE); - self->childSetValue("check_landmark", FALSE); - self->childSetValue("check_notecard", FALSE); - self->childSetValue("check_object", FALSE); - self->childSetValue("check_script", FALSE); - self->childSetValue("check_sound", FALSE); - self->childSetValue("check_texture", FALSE); - self->childSetValue("check_snapshot", FALSE); + self->getChild<LLUICtrl>("check_animation")->setValue(FALSE); + self->getChild<LLUICtrl>("check_calling_card")->setValue(FALSE); + self->getChild<LLUICtrl>("check_clothing")->setValue(FALSE); + self->getChild<LLUICtrl>("check_gesture")->setValue(FALSE); + self->getChild<LLUICtrl>("check_landmark")->setValue(FALSE); + self->getChild<LLUICtrl>("check_notecard")->setValue(FALSE); + self->getChild<LLUICtrl>("check_object")->setValue(FALSE); + self->getChild<LLUICtrl>("check_script")->setValue(FALSE); + self->getChild<LLUICtrl>("check_sound")->setValue(FALSE); + self->getChild<LLUICtrl>("check_texture")->setValue(FALSE); + self->getChild<LLUICtrl>("check_snapshot")->setValue(FALSE); } ////////////////////////////////////////////////////////////////////////////////// @@ -919,6 +921,9 @@ void LLPanelMainInventory::initListCommandsHandlers() mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2)); mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_add.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); + + // Update the trash button when selected item(s) get worn or taken off. + LLOutfitObserver::instance().addCOFChangedCallback(boost::bind(&LLPanelMainInventory::updateListCommands, this)); } void LLPanelMainInventory::updateListCommands() diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp index 3f620869e0..017f6de63b 100644 --- a/indra/newview/llpanelme.cpp +++ b/indra/newview/llpanelme.cpp @@ -146,10 +146,10 @@ void LLPanelMe::onSaveChangesClicked() data.avatar_id = gAgent.getID(); data.image_id = mEditPanel->getChild<LLTextureCtrl>(PICKER_SECOND_LIFE)->getImageAssetID(); data.fl_image_id = mEditPanel->getChild<LLTextureCtrl>(PICKER_FIRST_LIFE)->getImageAssetID(); - data.about_text = mEditPanel->childGetValue("sl_description_edit").asString(); - data.fl_about_text = mEditPanel->childGetValue("fl_description_edit").asString(); - data.profile_url = mEditPanel->childGetValue("homepage_edit").asString(); - data.allow_publish = mEditPanel->childGetValue("show_in_search_checkbox"); + data.about_text = mEditPanel->getChild<LLUICtrl>("sl_description_edit")->getValue().asString(); + data.fl_about_text = mEditPanel->getChild<LLUICtrl>("fl_description_edit")->getValue().asString(); + data.profile_url = mEditPanel->getChild<LLUICtrl>("homepage_edit")->getValue().asString(); + data.allow_publish = mEditPanel->getChild<LLUICtrl>("show_in_search_checkbox")->getValue(); LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesUpdate(&data); togglePanel(mEditPanel); // close @@ -205,20 +205,20 @@ void LLPanelMyProfileEdit::processProfileProperties(const LLAvatarData* avatar_d // 'Home page' was hidden in LLPanelAvatarProfile::fillCommonData() to fix EXT-4734 // Show 'Home page' in Edit My Profile (EXT-4873) - childSetVisible("homepage_edit", true); + getChildView("homepage_edit")->setVisible( true); fillPartnerData(avatar_data); fillAccountStatus(avatar_data); - childSetValue("show_in_search_checkbox", (BOOL)(avatar_data->flags & AVATAR_ALLOW_PUBLISH)); + getChild<LLUICtrl>("show_in_search_checkbox")->setValue((BOOL)(avatar_data->flags & AVATAR_ALLOW_PUBLISH)); std::string first, last; BOOL found = gCacheName->getName(avatar_data->avatar_id, first, last); if (found) { - childSetTextArg("name_text", "[FIRST]", first); - childSetTextArg("name_text", "[LAST]", last); + getChild<LLUICtrl>("name_text")->setTextArg("[FIRST]", first); + getChild<LLUICtrl>("name_text")->setTextArg("[LAST]", last); } } @@ -226,8 +226,8 @@ BOOL LLPanelMyProfileEdit::postBuild() { initTexturePickerMouseEvents(); - childSetTextArg("partner_edit_link", "[URL]", getString("partner_edit_link_url")); - childSetTextArg("my_account_link", "[URL]", getString("my_account_link_url")); + getChild<LLUICtrl>("partner_edit_link")->setTextArg("[URL]", getString("partner_edit_link_url")); + getChild<LLUICtrl>("my_account_link")->setTextArg("[URL]", getString("my_account_link_url")); return LLPanelAvatarProfile::postBuild(); } @@ -256,8 +256,8 @@ void LLPanelMyProfileEdit::resetData() { LLPanelMyProfile::resetData(); - childSetTextArg("name_text", "[FIRST]", LLStringUtil::null); - childSetTextArg("name_text", "[LAST]", LLStringUtil::null); + getChild<LLUICtrl>("name_text")->setTextArg("[FIRST]", LLStringUtil::null); + getChild<LLUICtrl>("name_text")->setTextArg("[LAST]", LLStringUtil::null); } void LLPanelMyProfileEdit::onTexturePickerMouseEnter(LLUICtrl* ctrl) @@ -271,10 +271,10 @@ void LLPanelMyProfileEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl) void LLPanelMyProfileEdit::enableEditing(bool enable) { - childSetEnabled("2nd_life_pic", enable); - childSetEnabled("real_world_pic", enable); - childSetEnabled("sl_description_edit", enable); - childSetEnabled("fl_description_edit", enable); - childSetEnabled("homepage_edit", enable); - childSetEnabled("show_in_search_checkbox", enable); + getChildView("2nd_life_pic")->setEnabled(enable); + getChildView("real_world_pic")->setEnabled(enable); + getChildView("sl_description_edit")->setEnabled(enable); + getChildView("fl_description_edit")->setEnabled(enable); + getChildView("homepage_edit")->setEnabled(enable); + getChildView("show_in_search_checkbox")->setEnabled(enable); } diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp index f601a8d51c..7a61872bc7 100644 --- a/indra/newview/llpanelmediasettingsgeneral.cpp +++ b/indra/newview/llpanelmediasettingsgeneral.cpp @@ -131,13 +131,13 @@ void LLPanelMediaSettingsGeneral::draw() // enable/disable pixel values image entry based on auto scale checkbox if ( mAutoScale->getValue().asBoolean() == false ) { - childSetEnabled( LLMediaEntry::WIDTH_PIXELS_KEY, true ); - childSetEnabled( LLMediaEntry::HEIGHT_PIXELS_KEY, true ); + getChildView( LLMediaEntry::WIDTH_PIXELS_KEY )->setEnabled( true ); + getChildView( LLMediaEntry::HEIGHT_PIXELS_KEY )->setEnabled( true ); } else { - childSetEnabled( LLMediaEntry::WIDTH_PIXELS_KEY, false ); - childSetEnabled( LLMediaEntry::HEIGHT_PIXELS_KEY, false ); + getChildView( LLMediaEntry::WIDTH_PIXELS_KEY )->setEnabled( false ); + getChildView( LLMediaEntry::HEIGHT_PIXELS_KEY )->setEnabled( false ); }; // enable/disable UI based on type of media @@ -158,17 +158,17 @@ void LLPanelMediaSettingsGeneral::draw() bool show_time_controls = media_plugin->pluginSupportsMediaTime(); if ( show_time_controls ) { - childSetEnabled( LLMediaEntry::CURRENT_URL_KEY, false ); + getChildView( LLMediaEntry::CURRENT_URL_KEY )->setEnabled( false ); reset_button_is_active = false; - childSetEnabled( "current_url_label", false ); - childSetEnabled( LLMediaEntry::AUTO_LOOP_KEY, true ); + getChildView("current_url_label")->setEnabled(false ); + getChildView( LLMediaEntry::AUTO_LOOP_KEY )->setEnabled( true ); } else { - childSetEnabled( LLMediaEntry::CURRENT_URL_KEY, true ); + getChildView( LLMediaEntry::CURRENT_URL_KEY )->setEnabled( true ); reset_button_is_active = true; - childSetEnabled( "current_url_label", true ); - childSetEnabled( LLMediaEntry::AUTO_LOOP_KEY, false ); + getChildView("current_url_label")->setEnabled(true ); + getChildView( LLMediaEntry::AUTO_LOOP_KEY )->setEnabled( false ); }; }; }; @@ -185,18 +185,18 @@ void LLPanelMediaSettingsGeneral::draw() // user has perms to press reset button and it is active if ( user_can_press_reset ) { - childSetEnabled( "current_url_reset_btn", true ); + getChildView("current_url_reset_btn")->setEnabled(true ); } // user does not has perms to press reset button and it is active else { - childSetEnabled( "current_url_reset_btn", false ); + getChildView("current_url_reset_btn")->setEnabled(false ); }; } else // reset button is inactive so we just slam it to off - other states don't matter { - childSetEnabled( "current_url_reset_btn", false ); + getChildView("current_url_reset_btn")->setEnabled(false ); }; } diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp index e5caaaaffc..5effba515b 100644 --- a/indra/newview/llpanelmediasettingspermissions.cpp +++ b/indra/newview/llpanelmediasettingspermissions.cpp @@ -99,7 +99,7 @@ void LLPanelMediaSettingsPermissions::draw() // housekeeping LLPanel::draw(); - childSetText("perms_group_name",LLStringUtil::null); + getChild<LLUICtrl>("perms_group_name")->setValue(LLStringUtil::null); LLUUID group_id; BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id); if (groups_identical) @@ -107,7 +107,6 @@ void LLPanelMediaSettingsPermissions::draw() if(mPermsGroupName) { mPermsGroupName->setNameID(group_id, true); - mPermsGroupName->setEnabled(true); }; } else @@ -116,7 +115,6 @@ void LLPanelMediaSettingsPermissions::draw() { mPermsGroupName->setNameID(LLUUID::null, TRUE); mPermsGroupName->refresh(LLUUID::null, LLStringUtil::null, LLStringUtil::null, true); - mPermsGroupName->setEnabled(false); }; }; } @@ -142,6 +140,12 @@ void LLPanelMediaSettingsPermissions::clearValues( void* userdata, bool editable self->mPermsGroupControl->setEnabled(editable); self->mPermsWorldInteract->setEnabled(editable); self->mPermsWorldControl->setEnabled(editable); + + self->getChild< LLTextBox >("controls_label")->setEnabled(editable); + self->getChild< LLTextBox >("owner_label")->setEnabled(editable); + self->getChild< LLTextBox >("group_label")->setEnabled(editable); + self->getChild< LLNameBox >("perms_group_name")->setEnabled(editable); + self->getChild< LLTextBox >("anyone_label")->setEnabled(editable); } //////////////////////////////////////////////////////////////////////////////// @@ -216,13 +220,11 @@ void LLPanelMediaSettingsPermissions::initValues( void* userdata, const LLSD& me self->mPermsWorldControl->setEnabled(false); } - - self->childSetEnabled("media_perms_label_owner", editable ); - self->childSetText("media_perms_label_owner", LLTrans::getString("Media Perms Owner") ); - self->childSetEnabled("media_perms_label_group", editable ); - self->childSetText("media_perms_label_group", LLTrans::getString("Media Perms Group") ); - self->childSetEnabled("media_perms_label_anyone", editable ); - self->childSetText("media_perms_label_anyone", LLTrans::getString("Media Perms Anyone") ); + self->getChild< LLTextBox >("controls_label")->setEnabled(editable); + self->getChild< LLTextBox >("owner_label")->setEnabled(editable); + self->getChild< LLTextBox >("group_label")->setEnabled(editable); + self->getChild< LLNameBox >("perms_group_name")->setEnabled(editable); + self->getChild< LLTextBox >("anyone_label")->setEnabled(editable); } //////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 1de0496737..6b687846ae 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -484,17 +484,17 @@ void LLPanelObject::getState( ) BOOL editable = root_objectp->permModify(); // Select Single Message - childSetVisible("select_single", FALSE); - childSetVisible("edit_object", FALSE); + getChildView("select_single")->setVisible( FALSE); + getChildView("edit_object")->setVisible( FALSE); if (!editable || single_volume || selected_count <= 1) { - childSetVisible("edit_object", TRUE); - childSetEnabled("edit_object", TRUE); + getChildView("edit_object")->setVisible( TRUE); + getChildView("edit_object")->setEnabled(TRUE); } else { - childSetVisible("select_single", TRUE); - childSetEnabled("select_single", TRUE); + getChildView("select_single")->setVisible( TRUE); + getChildView("select_single")->setEnabled(TRUE); } // Lock checkbox - only modifiable if you own the object. BOOL self_owned = (gAgent.getID() == owner_id); @@ -1028,19 +1028,19 @@ void LLPanelObject::getState( ) mLabelSkew ->setEnabled( enabled ); mSpinSkew ->setEnabled( enabled ); - childSetVisible("scale_hole", FALSE); - childSetVisible("scale_taper", FALSE); + getChildView("scale_hole")->setVisible( FALSE); + getChildView("scale_taper")->setVisible( FALSE); if (top_size_x_visible || top_size_y_visible) { if (size_is_hole) { - childSetVisible("scale_hole", TRUE); - childSetEnabled("scale_hole", enabled); + getChildView("scale_hole")->setVisible( TRUE); + getChildView("scale_hole")->setEnabled(enabled); } else { - childSetVisible("scale_taper", TRUE); - childSetEnabled("scale_taper", enabled); + getChildView("scale_taper")->setVisible( TRUE); + getChildView("scale_taper")->setEnabled(enabled); } } @@ -1051,27 +1051,27 @@ void LLPanelObject::getState( ) mSpinShearX ->setEnabled( enabled ); mSpinShearY ->setEnabled( enabled ); - childSetVisible("advanced_cut", FALSE); - childSetVisible("advanced_dimple", FALSE); - childSetVisible("advanced_slice", FALSE); + getChildView("advanced_cut")->setVisible( FALSE); + getChildView("advanced_dimple")->setVisible( FALSE); + getChildView("advanced_slice")->setVisible( FALSE); if (advanced_cut_visible) { if (advanced_is_dimple) { - childSetVisible("advanced_dimple", TRUE); - childSetEnabled("advanced_dimple", enabled); + getChildView("advanced_dimple")->setVisible( TRUE); + getChildView("advanced_dimple")->setEnabled(enabled); } else if (advanced_is_slice) { - childSetVisible("advanced_slice", TRUE); - childSetEnabled("advanced_slice", enabled); + getChildView("advanced_slice")->setVisible( TRUE); + getChildView("advanced_slice")->setEnabled(enabled); } else { - childSetVisible("advanced_cut", TRUE); - childSetEnabled("advanced_cut", enabled); + getChildView("advanced_cut")->setVisible( TRUE); + getChildView("advanced_cut")->setEnabled(enabled); } } @@ -1989,15 +1989,15 @@ void LLPanelObject::clearCtrls() mLabelRadiusOffset->setEnabled( FALSE ); mLabelRevolutions->setEnabled( FALSE ); - childSetVisible("select_single", FALSE); - childSetVisible("edit_object", TRUE); - childSetEnabled("edit_object", FALSE); + getChildView("select_single")->setVisible( FALSE); + getChildView("edit_object")->setVisible( TRUE); + getChildView("edit_object")->setEnabled(FALSE); - childSetEnabled("scale_hole", FALSE); - childSetEnabled("scale_taper", FALSE); - childSetEnabled("advanced_cut", FALSE); - childSetEnabled("advanced_dimple", FALSE); - childSetVisible("advanced_slice", FALSE); + getChildView("scale_hole")->setEnabled(FALSE); + getChildView("scale_taper")->setEnabled(FALSE); + getChildView("advanced_cut")->setEnabled(FALSE); + getChildView("advanced_dimple")->setEnabled(FALSE); + getChildView("advanced_slice")->setVisible( FALSE); } // diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 9d0effc164..a2dd8b4d6d 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -750,8 +750,6 @@ void LLTaskCategoryBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { std::vector<std::string> items; std::vector<std::string> disabled_items; - items.push_back(std::string("--no options--")); - disabled_items.push_back(std::string("--no options--")); hide_context_entries(menu, items, disabled_items); } diff --git a/indra/newview/llpanelonlinestatus.cpp b/indra/newview/llpanelonlinestatus.cpp index b21fd7d385..7de4e8e49d 100644 --- a/indra/newview/llpanelonlinestatus.cpp +++ b/indra/newview/llpanelonlinestatus.cpp @@ -45,8 +45,8 @@ LLPanelOnlineStatus::LLPanelOnlineStatus( "panel_online_status_toast.xml"); - childSetValue("avatar_icon", notification->getPayload()["FROM_ID"]); - childSetValue("message", notification->getMessage()); + getChild<LLUICtrl>("avatar_icon")->setValue(notification->getPayload()["FROM_ID"]); + getChild<LLUICtrl>("message")->setValue(notification->getMessage()); if (notification->getPayload().has("respond_on_mousedown") && notification->getPayload()["respond_on_mousedown"]) diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index 937b794686..cfd31b6829 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -42,6 +42,7 @@ #include "lloutfitobserver.h" #include "llcofwearables.h" #include "llfilteredwearablelist.h" +#include "llfolderviewitem.h" #include "llinventory.h" #include "llinventoryitemslist.h" #include "llviewercontrol.h" @@ -85,6 +86,11 @@ const U64 ALL_ITEMS_MASK = WEARABLE_MASK | ATTACHMENT_MASK; static const std::string REVERT_BTN("revert_btn"); + +/////////////////////////////////////////////////////////////////////////////// +// LLShopURLDispatcher +/////////////////////////////////////////////////////////////////////////////// + class LLShopURLDispatcher { public: @@ -144,6 +150,10 @@ std::string LLShopURLDispatcher::resolveURL(LLAssetType::EType asset_type, ESex return gSavedSettings.getString(setting_name); } +/////////////////////////////////////////////////////////////////////////////// +// LLPanelOutfitEditGearMenu +/////////////////////////////////////////////////////////////////////////////// + class LLPanelOutfitEditGearMenu { public: @@ -159,7 +169,6 @@ public: if (menu) { populateCreateWearableSubmenus(menu); - menu->buildDrawLabels(); } return menu; @@ -208,6 +217,147 @@ private: } }; +/////////////////////////////////////////////////////////////////////////////// +// LLAddWearablesGearMenu +/////////////////////////////////////////////////////////////////////////////// + +class LLAddWearablesGearMenu : public LLInitClass<LLAddWearablesGearMenu> +{ +public: + static LLMenuGL* create(LLWearableItemsList* flat_list, LLInventoryPanel* inventory_panel) + { + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; + + llassert(flat_list); + llassert(inventory_panel); + + LLHandle<LLView> flat_list_handle = flat_list->getHandle(); + LLHandle<LLPanel> inventory_panel_handle = inventory_panel->getHandle(); + + registrar.add("AddWearable.Gear.Sort", boost::bind(onSort, flat_list_handle, inventory_panel_handle, _2)); + enable_registrar.add("AddWearable.Gear.Check", boost::bind(onCheck, flat_list_handle, inventory_panel_handle, _2)); + enable_registrar.add("AddWearable.Gear.Visible", boost::bind(onVisible, inventory_panel_handle, _2)); + + LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>( + "menu_add_wearable_gear.xml", + LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance()); + + return menu; + } + +private: + static void onSort(LLHandle<LLView> flat_list_handle, + LLHandle<LLPanel> inventory_panel_handle, + LLSD::String sort_order_str) + { + if (flat_list_handle.isDead() || inventory_panel_handle.isDead()) return; + + LLWearableItemsList* flat_list = dynamic_cast<LLWearableItemsList*>(flat_list_handle.get()); + LLInventoryPanel* inventory_panel = dynamic_cast<LLInventoryPanel*>(inventory_panel_handle.get()); + + if (!flat_list || !inventory_panel) return; + + LLWearableItemsList::ESortOrder sort_order; + + if ("by_most_recent" == sort_order_str) + { + sort_order = LLWearableItemsList::E_SORT_BY_MOST_RECENT; + } + else if ("by_name" == sort_order_str) + { + sort_order = LLWearableItemsList::E_SORT_BY_NAME; + } + else if ("by_type" == sort_order_str) + { + sort_order = LLWearableItemsList::E_SORT_BY_TYPE_NAME; + } + else + { + llwarns << "Unrecognized sort order action" << llendl; + return; + } + + if (inventory_panel->getVisible()) + { + inventory_panel->setSortOrder(sort_order); + } + else + { + flat_list->setSortOrder(sort_order); + } + } + + static bool onCheck(LLHandle<LLView> flat_list_handle, + LLHandle<LLPanel> inventory_panel_handle, + LLSD::String sort_order_str) + { + if (flat_list_handle.isDead() || inventory_panel_handle.isDead()) return false; + + LLWearableItemsList* flat_list = dynamic_cast<LLWearableItemsList*>(flat_list_handle.get()); + LLInventoryPanel* inventory_panel = dynamic_cast<LLInventoryPanel*>(inventory_panel_handle.get()); + + if (!inventory_panel || !flat_list) return false; + + // Inventory panel uses its own sort order independent from + // flat list view so this flag is used to distinguish between + // currently visible "tree" or "flat" representation of inventory. + bool inventory_tree_visible = inventory_panel->getVisible(); + + if (inventory_tree_visible) + { + U32 sort_order = inventory_panel->getSortOrder(); + + if ("by_most_recent" == sort_order_str) + { + return LLWearableItemsList::E_SORT_BY_MOST_RECENT & sort_order; + } + else if ("by_name" == sort_order_str) + { + // If inventory panel is not sorted by date then it is sorted by name. + return LLWearableItemsList::E_SORT_BY_MOST_RECENT & ~sort_order; + } + llwarns << "Unrecognized inventory panel sort order" << llendl; + } + else + { + LLWearableItemsList::ESortOrder sort_order = flat_list->getSortOrder(); + + if ("by_most_recent" == sort_order_str) + { + return LLWearableItemsList::E_SORT_BY_MOST_RECENT == sort_order; + } + else if ("by_name" == sort_order_str) + { + return LLWearableItemsList::E_SORT_BY_NAME == sort_order; + } + else if ("by_type" == sort_order_str) + { + return LLWearableItemsList::E_SORT_BY_TYPE_NAME == sort_order; + } + llwarns << "Unrecognized wearable list sort order" << llendl; + } + return false; + } + + static bool onVisible(LLHandle<LLPanel> inventory_panel_handle, + LLSD::String sort_order_str) + { + if (inventory_panel_handle.isDead()) return false; + + LLInventoryPanel* inventory_panel = dynamic_cast<LLInventoryPanel*>(inventory_panel_handle.get()); + + // Enable sorting by type only for the flat list of items + // because inventory panel doesn't support this kind of sorting. + return ( "by_type" == sort_order_str ) + && ( !inventory_panel || !inventory_panel->getVisible() ); + } +}; + +/////////////////////////////////////////////////////////////////////////////// +// LLCOFDragAndDropObserver +/////////////////////////////////////////////////////////////////////////////// + class LLCOFDragAndDropObserver : public LLInventoryAddItemByAssetObserver { public: @@ -243,12 +393,17 @@ void LLCOFDragAndDropObserver::done() LLAppearanceMgr::instance().updateAppearanceFromCOF(); } +/////////////////////////////////////////////////////////////////////////////// +// LLPanelOutfitEdit +/////////////////////////////////////////////////////////////////////////////// + LLPanelOutfitEdit::LLPanelOutfitEdit() : LLPanel(), mSearchFilter(NULL), mCOFWearables(NULL), mInventoryItemsPanel(NULL), mGearMenu(NULL), + mAddWearablesGearMenu(NULL), mCOFDragAndDropObserver(NULL), mInitialized(false), mAddWearablesPanel(NULL), @@ -301,7 +456,7 @@ BOOL LLPanelOutfitEdit::postBuild() mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.All"), new LLFindNonLinksByMask(ALL_ITEMS_MASK))); mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.Clothing"), new LLIsTypeActual(LLAssetType::AT_CLOTHING))); mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.Bodyparts"), new LLIsTypeActual(LLAssetType::AT_BODYPART))); - mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.Objects"), new LLFindByMask(ATTACHMENT_MASK)));; + mListViewItemTypes.push_back(new LLFilterItem(getString("Filter.Objects"), new LLFindNonLinksByMask(ATTACHMENT_MASK)));; mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("shape"), new LLFindActualWearablesOfType(LLWearableType::WT_SHAPE))); mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("skin"), new LLFindActualWearablesOfType(LLWearableType::WT_SKIN))); mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("hair"), new LLFindActualWearablesOfType(LLWearableType::WT_HAIR))); @@ -326,7 +481,9 @@ BOOL LLPanelOutfitEdit::postBuild() childSetCommitCallback("filter_button", boost::bind(&LLPanelOutfitEdit::showWearablesFilter, this), NULL); childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesFolderView, this), NULL); + childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::saveListSelection, this), NULL); childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesListView, this), NULL); + childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::saveListSelection, this), NULL); childSetCommitCallback("wearables_gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL); childSetCommitCallback("gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL); childSetCommitCallback("shop_btn_1", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL); @@ -386,12 +543,26 @@ BOOL LLPanelOutfitEdit::postBuild() childSetAction(REVERT_BTN, boost::bind(&LLAppearanceMgr::wearBaseOutfit, LLAppearanceMgr::getInstance())); + /* + * By default AT_CLOTHING are sorted by (in in MY OUTFITS): + * - by type (types order determined in LLWearableType::EType) + * - each LLWearableType::EType by outer layer on top + * + * In Add More panel AT_CLOTHING should be sorted in a such way: + * - by type (types order determined in LLWearableType::EType) + * - each LLWearableType::EType by name (EXT-8205) + */ + mWearableListViewItemsComparator = new LLWearableItemTypeNameComparator(); + mWearableListViewItemsComparator->setOrder(LLAssetType::AT_CLOTHING, LLWearableItemTypeNameComparator::ORDER_RANK_1, false, true); + mWearablesListViewPanel = getChild<LLPanel>("filtered_wearables_panel"); - mWearableItemsList = getChild<LLInventoryItemsList>("list_view"); + mWearableItemsList = getChild<LLWearableItemsList>("list_view"); mWearableItemsList->setCommitOnSelectionChange(true); mWearableItemsList->setCommitCallback(boost::bind(&LLPanelOutfitEdit::updatePlusButton, this)); mWearableItemsList->setDoubleClickCallback(boost::bind(&LLPanelOutfitEdit::onPlusBtnClicked, this)); + mWearableItemsList->setComparator(mWearableListViewItemsComparator); + mSaveComboBtn.reset(new LLSaveOutfitComboBtn(this)); return TRUE; } @@ -429,35 +600,46 @@ void LLPanelOutfitEdit::showAddWearablesPanel(bool show_add_wearables) { mAddWearablesPanel->setVisible(show_add_wearables); - childSetValue("show_add_wearables_btn", show_add_wearables); + getChild<LLUICtrl>("show_add_wearables_btn")->setValue(show_add_wearables); updateFiltersVisibility(); - childSetVisible("filter_button", show_add_wearables); + getChildView("filter_button")->setVisible( show_add_wearables); //search filter should be disabled if (!show_add_wearables) { - childSetValue("filter_button", false); + getChild<LLUICtrl>("filter_button")->setValue(false); mFolderViewFilterCmbBox->setVisible(false); mListViewFilterCmbBox->setVisible(false); showWearablesFilter(); + /* + * By default AT_CLOTHING are sorted by (in in MY OUTFITS): + * - by type (types order determined in LLWearableType::EType) + * - each LLWearableType::EType by outer layer on top + * + * In Add More panel AT_CLOTHING should be sorted in a such way: + * - by type (types order determined in LLWearableType::EType) + * - each LLWearableType::EType by name (EXT-8205) + */ + mWearableItemsList->setSortOrder(LLWearableItemsList::E_SORT_BY_TYPE_NAME); + // Reset mWearableItemsList position to top. See EXT-8180. mWearableItemsList->goToTop(); } //switching button bars - childSetVisible("no_add_wearables_button_bar", !show_add_wearables); - childSetVisible("add_wearables_button_bar", show_add_wearables); + getChildView("no_add_wearables_button_bar")->setVisible( !show_add_wearables); + getChildView("add_wearables_button_bar")->setVisible( show_add_wearables); } void LLPanelOutfitEdit::showWearablesFilter() { - bool filter_visible = childGetValue("filter_button"); + bool filter_visible = getChild<LLUICtrl>("filter_button")->getValue(); - childSetVisible("filter_panel", filter_visible); + getChildView("filter_panel")->setVisible( filter_visible); if(!filter_visible) { @@ -474,9 +656,7 @@ void LLPanelOutfitEdit::showWearablesListView() { if(switchPanels(mInventoryItemsPanel, mWearablesListViewPanel)) { - mFolderViewBtn->setToggleState(FALSE); - mFolderViewBtn->setImageOverlay(getString("folder_view_off"), mFolderViewBtn->getImageOverlayHAlign()); - mListViewBtn->setImageOverlay(getString("list_view_on"), mListViewBtn->getImageOverlayHAlign()); + updateWearablesPanelVerbButtons(); updateFiltersVisibility(); } mListViewBtn->setToggleState(TRUE); @@ -486,9 +666,7 @@ void LLPanelOutfitEdit::showWearablesFolderView() { if(switchPanels(mWearablesListViewPanel, mInventoryItemsPanel)) { - mListViewBtn->setToggleState(FALSE); - mListViewBtn->setImageOverlay(getString("list_view_off"), mListViewBtn->getImageOverlayHAlign()); - mFolderViewBtn->setImageOverlay(getString("folder_view_on"), mFolderViewBtn->getImageOverlayHAlign()); + updateWearablesPanelVerbButtons(); updateFiltersVisibility(); } mFolderViewBtn->setToggleState(TRUE); @@ -609,11 +787,11 @@ void LLPanelOutfitEdit::onAddWearableClicked(void) } } -void LLPanelOutfitEdit::onReplaceBodyPartMenuItemClicked(LLUUID selected_item_id) +void LLPanelOutfitEdit::onReplaceMenuItemClicked(LLUUID selected_item_id) { LLViewerInventoryItem* item = gInventory.getLinkedItem(selected_item_id); - if (item && item->getType() == LLAssetType::AT_BODYPART) + if (item) { showFilteredWearablesListView(item->getWearableType()); } @@ -629,8 +807,17 @@ void LLPanelOutfitEdit::onShopButtonClicked() if (isAgentAvatarValid()) { // try to get wearable type from 'Add More' panel first (EXT-7639) - LLWearableType::EType type = getAddMorePanelSelectionType(); + selection_info_t selection_info = getAddMorePanelSelectionType(); + LLWearableType::EType type = selection_info.first; + + if (selection_info.second > 1) + { + // the second argument is not important in this case: generic market place will be opened + url = url_resolver.resolveURL(LLWearableType::WT_NONE, SEX_FEMALE); + } + else + { if (type == LLWearableType::WT_NONE) { type = getCOFWearablesSelectionType(); @@ -646,7 +833,9 @@ void LLPanelOutfitEdit::onShopButtonClicked() if (url.empty()) { - url = url_resolver.resolveURL(mCOFWearables->getExpandedAccordionAssetType(), sex); + url = url_resolver.resolveURL( + mCOFWearables->getExpandedAccordionAssetType(), sex); + } } } else @@ -685,9 +874,9 @@ LLWearableType::EType LLPanelOutfitEdit::getCOFWearablesSelectionType() const return type; } -LLWearableType::EType LLPanelOutfitEdit::getAddMorePanelSelectionType() const +LLPanelOutfitEdit::selection_info_t LLPanelOutfitEdit::getAddMorePanelSelectionType() const { - LLWearableType::EType type = LLWearableType::WT_NONE; + selection_info_t result = std::make_pair(LLWearableType::WT_NONE, 0); if (mAddWearablesPanel != NULL && mAddWearablesPanel->getVisible()) { @@ -695,9 +884,11 @@ LLWearableType::EType LLPanelOutfitEdit::getAddMorePanelSelectionType() const { std::set<LLUUID> selected_uuids = mInventoryItemsPanel->getRootFolder()->getSelectionList(); - if (selected_uuids.size() == 1) + result.second = selected_uuids.size(); + + if (result.second == 1) { - type = getWearableTypeByItemUUID(*(selected_uuids.begin())); + result.first = getWearableTypeByItemUUID(*(selected_uuids.begin())); } } else if (mWearableItemsList != NULL && mWearableItemsList->getVisible()) @@ -705,14 +896,16 @@ LLWearableType::EType LLPanelOutfitEdit::getAddMorePanelSelectionType() const std::vector<LLUUID> selected_uuids; mWearableItemsList->getSelectedUUIDs(selected_uuids); - if (selected_uuids.size() == 1) + result.second = selected_uuids.size(); + + if (result.second == 1) { - type = getWearableTypeByItemUUID(selected_uuids.front()); + result.first = getWearableTypeByItemUUID(selected_uuids.front()); } } } - return type; + return result; } LLWearableType::EType LLPanelOutfitEdit::getWearableTypeByItemUUID(const LLUUID& item_uuid) const @@ -749,7 +942,7 @@ void LLPanelOutfitEdit::updatePlusButton() } // If any of the selected items are not wearable (due to already being worn OR being of the wrong type), disable the add button. - uuid_vec_t::iterator unwearable_item = std::find_if(selected_items.begin(), selected_items.end(), !boost::bind(& get_can_item_be_worn, _1)); + uuid_vec_t::iterator unwearable_item = std::find_if(selected_items.begin(), selected_items.end(), !boost::bind(&get_can_item_be_worn, _1)); bool can_add = ( unwearable_item == selected_items.end() ); mPlusBtn->setEnabled(can_add); @@ -809,15 +1002,38 @@ void LLPanelOutfitEdit::filterWearablesBySelectedItem(void) bool more_than_one_selected = ids.size() > 1; bool is_dummy_item = (ids.size() && dynamic_cast<LLPanelDummyClothingListItem*>(mCOFWearables->getSelectedItem())); - //selected and expanded accordion tabs determine filtering when no item is selected + // selected, expanded accordion tabs and selection in flat list view determine filtering when no item is selected in COF + // selection in flat list view participates in determining filtering because of EXT-7963 + // So the priority of criterions in is: + // 1. Selected accordion tab | IF (any accordion selected) + // | filter_type = selected_accordion_type + // 2. Selected item in flat list view | ELSEIF (any item in flat list view selected) + // | filter_type = selected_item_type + // 3. Expanded accordion tab | ELSEIF (any accordion expanded) + // | filter_type = expanded accordion_type if (nothing_selected) { showWearablesListView(); - //selected accordion tab is more priority than expanded tab when determining filtering + //selected accordion tab is more priority than expanded tab + //and selected item in flat list view of 'Add more' panel when + //determining filtering LLAssetType::EType type = mCOFWearables->getSelectedAccordionAssetType(); if (type == LLAssetType::AT_NONE) + { //no accordion selected + + // when no accordion selected then selected item from flat list view + // has more priority than expanded when determining filtering + LLUUID selected_item_id = mWearableItemsList->getSelectedUUID(); + LLViewerInventoryItem* item = gInventory.getLinkedItem(selected_item_id); + if(item) { + showFilteredWearablesListView(item->getWearableType()); + return; + } + + // when no accordion selected and no selected items in flat list view + // determine filtering according to expanded accordion type = mCOFWearables->getExpandedAccordionAssetType(); } @@ -830,7 +1046,7 @@ void LLPanelOutfitEdit::filterWearablesBySelectedItem(void) applyListViewFilter(LVIT_BODYPART); break; case LLAssetType::AT_CLOTHING: - default: + default: applyListViewFilter(LVIT_CLOTHING); break; } @@ -974,7 +1190,7 @@ void LLPanelOutfitEdit::updateVerbs() bool has_baseoutfit = LLAppearanceMgr::getInstance()->getBaseOutfitUUID().notNull(); mSaveComboBtn->setSaveBtnEnabled(!outfit_locked && outfit_is_dirty); - childSetEnabled(REVERT_BTN, outfit_is_dirty && has_baseoutfit); + getChildView(REVERT_BTN)->setEnabled(outfit_is_dirty && has_baseoutfit); mSaveComboBtn->setMenuItemEnabled("save_outfit", !outfit_locked && outfit_is_dirty); @@ -997,15 +1213,47 @@ bool LLPanelOutfitEdit::switchPanels(LLPanel* switch_from_panel, LLPanel* switch return false; } +void LLPanelOutfitEdit::resetAccordionState() +{ + if (mCOFWearables != NULL) + { + mCOFWearables->expandDefaultAccordionTab(); + } + else + { + llwarns << "mCOFWearables is NULL" << llendl; + } +} + void LLPanelOutfitEdit::onGearButtonClick(LLUICtrl* clicked_button) { - if(!mGearMenu) + LLMenuGL* menu = NULL; + + if (mAddWearablesPanel->getVisible()) { - mGearMenu = LLPanelOutfitEditGearMenu::create(); + if (!mAddWearablesGearMenu) + { + mAddWearablesGearMenu = LLAddWearablesGearMenu::create(mWearableItemsList, mInventoryItemsPanel); + } + + menu = mAddWearablesGearMenu; + } + else + { + if (!mGearMenu) + { + mGearMenu = LLPanelOutfitEditGearMenu::create(); + } + + menu = mGearMenu; } - S32 menu_y = mGearMenu->getRect().getHeight() + clicked_button->getRect().getHeight(); - LLMenuGL::showPopup(clicked_button, mGearMenu, 0, menu_y); + if (!menu) return; + + menu->arrangeAndClear(); // update menu height + S32 menu_y = menu->getRect().getHeight() + clicked_button->getRect().getHeight(); + menu->buildDrawLabels(); + LLMenuGL::showPopup(clicked_button, menu, 0, menu_y); } void LLPanelOutfitEdit::onAddMoreButtonClicked() @@ -1088,10 +1336,71 @@ void LLPanelOutfitEdit::getSelectedItemsUUID(uuid_vec_t& uuid_list) void LLPanelOutfitEdit::onCOFChanged() { //the panel is only updated when is visible to a user - if (!isInVisibleChain()) return; + + // BAP - this check has to be removed because otherwise item name + // changes made when the panel is not visible will not be + // propagated to the panel. + // if (!isInVisibleChain()) return; update(); } +void LLPanelOutfitEdit::updateWearablesPanelVerbButtons() +{ + if(mWearablesListViewPanel->getVisible()) + { + mFolderViewBtn->setToggleState(FALSE); + mFolderViewBtn->setImageOverlay(getString("folder_view_off"), mFolderViewBtn->getImageOverlayHAlign()); + mListViewBtn->setImageOverlay(getString("list_view_on"), mListViewBtn->getImageOverlayHAlign()); + } + else if(mInventoryItemsPanel->getVisible()) + { + mListViewBtn->setToggleState(FALSE); + mListViewBtn->setImageOverlay(getString("list_view_off"), mListViewBtn->getImageOverlayHAlign()); + mFolderViewBtn->setImageOverlay(getString("folder_view_on"), mFolderViewBtn->getImageOverlayHAlign()); + } +} + +void LLPanelOutfitEdit::saveListSelection() +{ + if(mWearablesListViewPanel->getVisible()) + { + std::set<LLUUID> selected_ids = mInventoryItemsPanel->getRootFolder()->getSelectionList(); + + if(!selected_ids.size()) return; + + for (std::set<LLUUID>::const_iterator item_id = selected_ids.begin(); item_id != selected_ids.end(); ++item_id) + { + mWearableItemsList->selectItemByUUID(*item_id, true); + } + mWearableItemsList->scrollToShowFirstSelectedItem(); + } + else if(mInventoryItemsPanel->getVisible()) + { + std::vector<LLUUID> selected_ids; + mWearableItemsList->getSelectedUUIDs(selected_ids); + + if(!selected_ids.size()) return; + + mInventoryItemsPanel->clearSelection(); + LLFolderView* root = mInventoryItemsPanel->getRootFolder(); + + if(!root) return; + + for(std::vector<LLUUID>::const_iterator item_id = selected_ids.begin(); item_id != selected_ids.end(); ++item_id) + { + LLFolderViewItem* item = root->getItemByID(*item_id); + if (!item) continue; + + LLFolderViewFolder* parent = item->getParentFolder(); + if(parent) + { + parent->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_UP); + } + mInventoryItemsPanel->getRootFolder()->changeSelection(item, TRUE); + } + mInventoryItemsPanel->getRootFolder()->scrollToShowSelection(); + } +} // EOF diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h index 770e2a229b..8d0325a4d6 100644 --- a/indra/newview/llpaneloutfitedit.h +++ b/indra/newview/llpaneloutfitedit.h @@ -43,8 +43,8 @@ #include "llremoteparcelrequest.h" #include "llinventory.h" #include "llinventoryfunctions.h" -#include "llinventoryitemslist.h" #include "llinventorymodel.h" +#include "llwearableitemslist.h" class LLButton; class LLCOFWearables; @@ -64,6 +64,7 @@ class LLMenuGL; class LLFindNonLinksByMask; class LLFindWearablesOfType; class LLSaveOutfitComboBtn; +class LLWearableItemTypeNameComparator; class LLPanelOutfitEdit : public LLPanel { @@ -164,7 +165,7 @@ public: void onRemoveFromOutfitClicked(void); void onEditWearableClicked(void); void onAddWearableClicked(void); - void onReplaceBodyPartMenuItemClicked(LLUUID selected_item_id); + void onReplaceMenuItemClicked(LLUUID selected_item_id); void onShopButtonClicked(); void displayCurrentOutfit(); @@ -182,6 +183,8 @@ public: */ bool switchPanels(LLPanel* switch_from_panel, LLPanel* switch_to_panel); + void resetAccordionState(); + virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void* cargo_data, @@ -198,8 +201,17 @@ private: void getCurrentItemUUID(LLUUID& selected_id); void onCOFChanged(); + /** + * Method preserves selection while switching between folder/list view modes + */ + void saveListSelection(); + + void updateWearablesPanelVerbButtons(); + + typedef std::pair<LLWearableType::EType, size_t> selection_info_t; + LLWearableType::EType getCOFWearablesSelectionType() const; - LLWearableType::EType getAddMorePanelSelectionType() const; + selection_info_t getAddMorePanelSelectionType() const; LLWearableType::EType getWearableTypeByItemUUID(const LLUUID& item_uuid) const; LLTextBox* mCurrentOutfitName; @@ -218,8 +230,9 @@ private: LLComboBox* mListViewFilterCmbBox; LLFilteredWearableListManager* mWearableListManager; - LLInventoryItemsList* mWearableItemsList; + LLWearableItemsList* mWearableItemsList; LLPanel* mWearablesListViewPanel; + LLWearableItemTypeNameComparator* mWearableListViewItemsComparator; LLCOFDragAndDropObserver* mCOFDragAndDropObserver; @@ -228,6 +241,7 @@ private: LLCOFWearables* mCOFWearables; LLMenuGL* mGearMenu; + LLMenuGL* mAddWearablesGearMenu; bool mInitialized; std::auto_ptr<LLSaveOutfitComboBtn> mSaveComboBtn; diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index ca5679d5b0..16ef7998b3 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -337,7 +337,7 @@ bool LLPanelOutfitsInventory::isCOFPanelActive() const void LLPanelOutfitsInventory::setWearablesLoading(bool val) { - mListCommands->childSetEnabled("wear_btn", !val); + updateVerbs(); } void LLPanelOutfitsInventory::onWearablesLoaded() diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 6dd800c0c6..58765d0ad8 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -272,6 +272,7 @@ public: friend class LLInventoryFriendCardObserver; LLFriendListUpdater(callback_t cb) : LLAvatarListUpdater(cb, FRIEND_LIST_UPDATE_TIMEOUT) + , mIsActive(false) { LLAvatarTracker::instance().addObserver(this); @@ -290,9 +291,12 @@ public: /*virtual*/ void changed(U32 mask) { - // events can arrive quickly in bulk - we need not process EVERY one of them - - // so we wait a short while to let others pile-in, and process them in aggregate. - mEventTimer.start(); + if (mIsActive) + { + // events can arrive quickly in bulk - we need not process EVERY one of them - + // so we wait a short while to let others pile-in, and process them in aggregate. + mEventTimer.start(); + } // save-up all the mask-bits which have come-in mMask |= mask; @@ -301,8 +305,12 @@ public: /*virtual*/ BOOL tick() { + if (!mIsActive) return FALSE; + if (mMask & (LLFriendObserver::ADD | LLFriendObserver::REMOVE | LLFriendObserver::ONLINE)) + { updateList(); + } // Stop updates. mEventTimer.stop(); @@ -311,9 +319,20 @@ public: return FALSE; } + // virtual + void setActive(bool active) + { + mIsActive = active; + if (active) + { + tick(); + } + } + private: U32 mMask; LLInventoryFriendCardObserver* mInvObserver; + bool mIsActive; /** * This class is intended for updating Friend List when Inventory Friend Card is added/removed. @@ -496,22 +515,25 @@ void LLPanelPeople::onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LL BOOL LLPanelPeople::postBuild() { - setVisibleCallback(boost::bind(&LLPanelPeople::onVisibilityChange, this, _2)); - mFilterEditor = getChild<LLFilterEditor>("filter_input"); mFilterEditor->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); mTabContainer = getChild<LLTabContainer>("tabs"); mTabContainer->setCommitCallback(boost::bind(&LLPanelPeople::onTabSelected, this, _2)); - mOnlineFriendList = getChild<LLPanel>(FRIENDS_TAB_NAME)->getChild<LLAvatarList>("avatars_online"); - mAllFriendList = getChild<LLPanel>(FRIENDS_TAB_NAME)->getChild<LLAvatarList>("avatars_all"); + LLPanel* friends_tab = getChild<LLPanel>(FRIENDS_TAB_NAME); + // updater is active only if panel is visible to user. + friends_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFriendListUpdater, _2)); + mOnlineFriendList = friends_tab->getChild<LLAvatarList>("avatars_online"); + mAllFriendList = friends_tab->getChild<LLAvatarList>("avatars_all"); mOnlineFriendList->setNoItemsCommentText(getString("no_friends_online")); mOnlineFriendList->setShowIcons("FriendsListShowIcons"); mAllFriendList->setNoItemsCommentText(getString("no_friends")); mAllFriendList->setShowIcons("FriendsListShowIcons"); - mNearbyList = getChild<LLPanel>(NEARBY_TAB_NAME)->getChild<LLAvatarList>("avatar_list"); + LLPanel* nearby_tab = getChild<LLPanel>(NEARBY_TAB_NAME); + nearby_tab->setVisibleCallback(boost::bind(&Updater::setActive, mNearbyListUpdater, _2)); + mNearbyList = nearby_tab->getChild<LLAvatarList>("avatar_list"); mNearbyList->setNoItemsCommentText(getString("no_one_near")); mNearbyList->setNoItemsMsg(getString("no_one_near")); mNearbyList->setNoFilteredItemsMsg(getString("no_one_filtered_near")); @@ -800,8 +822,8 @@ void LLPanelPeople::updateButtons() } LLPanel* groups_panel = mTabContainer->getCurrentPanel(); - groups_panel->childSetEnabled("activate_btn", item_selected && !cur_group_active); // "none" or a non-active group selected - groups_panel->childSetEnabled("minus_btn", item_selected && selected_id.notNull()); + groups_panel->getChildView("activate_btn")->setEnabled(item_selected && !cur_group_active); // "none" or a non-active group selected + groups_panel->getChildView("minus_btn")->setEnabled(item_selected && selected_id.notNull()); } else { @@ -817,10 +839,10 @@ void LLPanelPeople::updateButtons() LLPanel* cur_panel = mTabContainer->getCurrentPanel(); if (cur_panel) { - cur_panel->childSetEnabled("add_friend_btn", !is_friend); + cur_panel->getChildView("add_friend_btn")->setEnabled(!is_friend); if (friends_tab_active) { - cur_panel->childSetEnabled("del_btn", multiple_selected); + cur_panel->getChildView("del_btn")->setEnabled(multiple_selected); } } } @@ -955,28 +977,6 @@ void LLPanelPeople::setSortOrder(LLAvatarList* list, ESortOrder order, bool save } } -void LLPanelPeople::onVisibilityChange(const LLSD& new_visibility) -{ - if (new_visibility.asBoolean() == FALSE) - { - // Don't update anything while we're invisible. - mNearbyListUpdater->setActive(FALSE); - } - else - { - reSelectedCurrentTab(); - } -} - -// Make the tab-container re-select current tab -// for onTabSelected() callback to get called. -// (currently this is needed to reactivate nearby list updates -// when we get visible) -void LLPanelPeople::reSelectedCurrentTab() -{ - mTabContainer->selectTab(mTabContainer->getCurrentPanelIndex()); -} - bool LLPanelPeople::isRealGroup() { return getCurrentItemID() != LLUUID::null; @@ -1024,7 +1024,6 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string) void LLPanelPeople::onTabSelected(const LLSD& param) { std::string tab_name = getChild<LLPanel>(param.asString())->getName(); - mNearbyListUpdater->setActive(tab_name == NEARBY_TAB_NAME); updateButtons(); showFriendsAccordionsIfNeeded(); @@ -1388,8 +1387,6 @@ void LLPanelPeople::onOpen(const LLSD& key) if (!tab_name.empty()) mTabContainer->selectTabByName(tab_name); - else - reSelectedCurrentTab(); } bool LLPanelPeople::notifyChildren(const LLSD& info) diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 17c45a034b..ff8df5c7a8 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -91,10 +91,6 @@ private: void showGroupMenu(LLMenuGL* menu); void setSortOrder(LLAvatarList* list, ESortOrder order, bool save = true); - void onVisibilityChange( const LLSD& new_visibility); - - void reSelectedCurrentTab(); - // UI callbacks void onFilterEdit(const std::string& search_string); void onTabSelected(const LLSD& param); diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index 71d16a08b4..87e02bd5f4 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -142,9 +142,9 @@ LLPanelPermissions::LLPanelPermissions() : BOOL LLPanelPermissions::postBuild() { childSetCommitCallback("Object Name",LLPanelPermissions::onCommitName,this); - childSetPrevalidate("Object Name",LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLLineEditor>("Object Name")->setPrevalidate(LLTextValidate::validateASCIIPrintableNoPipe); childSetCommitCallback("Object Description",LLPanelPermissions::onCommitDesc,this); - childSetPrevalidate("Object Description",LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLLineEditor>("Object Description")->setPrevalidate(LLTextValidate::validateASCIIPrintableNoPipe); getChild<LLUICtrl>("button set group")->setCommitCallback(boost::bind(&LLPanelPermissions::onClickGroup,this)); @@ -183,81 +183,81 @@ LLPanelPermissions::~LLPanelPermissions() void LLPanelPermissions::disableAll() { - childSetEnabled("perm_modify", FALSE); - childSetText("perm_modify", LLStringUtil::null); - - childSetEnabled("Creator:", FALSE); - childSetText("Creator Name", LLStringUtil::null); - childSetEnabled("Creator Name", FALSE); - - childSetEnabled("Owner:", FALSE); - childSetText("Owner Name", LLStringUtil::null); - childSetEnabled("Owner Name", FALSE); - - childSetEnabled("Group:", FALSE); - childSetText("Group Name Proxy", LLStringUtil::null); - childSetEnabled("Group Name Proxy", FALSE); - childSetEnabled("button set group", FALSE); - - childSetText("Object Name", LLStringUtil::null); - childSetEnabled("Object Name", FALSE); - childSetEnabled("Name:", FALSE); - childSetText("Group Name", LLStringUtil::null); - childSetEnabled("Group Name", FALSE); - childSetEnabled("Description:", FALSE); - childSetText("Object Description", LLStringUtil::null); - childSetEnabled("Object Description", FALSE); - - childSetEnabled("Permissions:", FALSE); + getChildView("perm_modify")->setEnabled(FALSE); + getChild<LLUICtrl>("perm_modify")->setValue(LLStringUtil::null); + + getChildView("Creator:")->setEnabled(FALSE); + getChild<LLUICtrl>("Creator Name")->setValue(LLStringUtil::null); + getChildView("Creator Name")->setEnabled(FALSE); + + getChildView("Owner:")->setEnabled(FALSE); + getChild<LLUICtrl>("Owner Name")->setValue(LLStringUtil::null); + getChildView("Owner Name")->setEnabled(FALSE); + + getChildView("Group:")->setEnabled(FALSE); + getChild<LLUICtrl>("Group Name Proxy")->setValue(LLStringUtil::null); + getChildView("Group Name Proxy")->setEnabled(FALSE); + getChildView("button set group")->setEnabled(FALSE); + + getChild<LLUICtrl>("Object Name")->setValue(LLStringUtil::null); + getChildView("Object Name")->setEnabled(FALSE); + getChildView("Name:")->setEnabled(FALSE); + getChild<LLUICtrl>("Group Name")->setValue(LLStringUtil::null); + getChildView("Group Name")->setEnabled(FALSE); + getChildView("Description:")->setEnabled(FALSE); + getChild<LLUICtrl>("Object Description")->setValue(LLStringUtil::null); + getChildView("Object Description")->setEnabled(FALSE); + + getChildView("Permissions:")->setEnabled(FALSE); - childSetValue("checkbox share with group", FALSE); - childSetEnabled("checkbox share with group", FALSE); - childSetEnabled("button deed", FALSE); + getChild<LLUICtrl>("checkbox share with group")->setValue(FALSE); + getChildView("checkbox share with group")->setEnabled(FALSE); + getChildView("button deed")->setEnabled(FALSE); - childSetValue("checkbox allow everyone move", FALSE); - childSetEnabled("checkbox allow everyone move", FALSE); - childSetValue("checkbox allow everyone copy", FALSE); - childSetEnabled("checkbox allow everyone copy", FALSE); + getChild<LLUICtrl>("checkbox allow everyone move")->setValue(FALSE); + getChildView("checkbox allow everyone move")->setEnabled(FALSE); + getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(FALSE); + getChildView("checkbox allow everyone copy")->setEnabled(FALSE); //Next owner can: - childSetEnabled("Next owner can:", FALSE); - childSetValue("checkbox next owner can modify", FALSE); - childSetEnabled("checkbox next owner can modify", FALSE); - childSetValue("checkbox next owner can copy", FALSE); - childSetEnabled("checkbox next owner can copy", FALSE); - childSetValue("checkbox next owner can transfer", FALSE); - childSetEnabled("checkbox next owner can transfer", FALSE); + getChildView("Next owner can:")->setEnabled(FALSE); + getChild<LLUICtrl>("checkbox next owner can modify")->setValue(FALSE); + getChildView("checkbox next owner can modify")->setEnabled(FALSE); + getChild<LLUICtrl>("checkbox next owner can copy")->setValue(FALSE); + getChildView("checkbox next owner can copy")->setEnabled(FALSE); + getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(FALSE); + getChildView("checkbox next owner can transfer")->setEnabled(FALSE); //checkbox for sale - childSetValue("checkbox for sale", FALSE); - childSetEnabled("checkbox for sale", FALSE); + getChild<LLUICtrl>("checkbox for sale")->setValue(FALSE); + getChildView("checkbox for sale")->setEnabled(FALSE); //checkbox include in search - childSetValue("search_check", FALSE); - childSetEnabled("search_check", FALSE); + getChild<LLUICtrl>("search_check")->setValue(FALSE); + getChildView("search_check")->setEnabled(FALSE); LLComboBox* combo_sale_type = getChild<LLComboBox>("sale type"); combo_sale_type->setValue(LLSaleInfo::FS_COPY); combo_sale_type->setEnabled(FALSE); - childSetEnabled("Cost", FALSE); - childSetText("Cost", getString("Cost Default")); - childSetText("Edit Cost", LLStringUtil::null); - childSetEnabled("Edit Cost", FALSE); + getChildView("Cost")->setEnabled(FALSE); + getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default")); + getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null); + getChildView("Edit Cost")->setEnabled(FALSE); - childSetEnabled("label click action", FALSE); + getChildView("label click action")->setEnabled(FALSE); LLComboBox* combo_click_action = getChild<LLComboBox>("clickaction"); if (combo_click_action) { combo_click_action->setEnabled(FALSE); combo_click_action->clear(); } - childSetVisible("B:", FALSE); - childSetVisible("O:", FALSE); - childSetVisible("G:", FALSE); - childSetVisible("E:", FALSE); - childSetVisible("N:", FALSE); - childSetVisible("F:", FALSE); + getChildView("B:")->setVisible( FALSE); + getChildView("O:")->setVisible( FALSE); + getChildView("G:")->setVisible( FALSE); + getChildView("E:")->setVisible( FALSE); + getChildView("N:")->setVisible( FALSE); + getChildView("F:")->setVisible( FALSE); } void LLPanelPermissions::refresh() @@ -323,23 +323,23 @@ void LLPanelPermissions::refresh() { ++string_index; } - childSetEnabled("perm_modify", TRUE); - childSetText("perm_modify", MODIFY_INFO_STRINGS[string_index]); + getChildView("perm_modify")->setEnabled(TRUE); + getChild<LLUICtrl>("perm_modify")->setValue(MODIFY_INFO_STRINGS[string_index]); - childSetEnabled("Permissions:", TRUE); + getChildView("Permissions:")->setEnabled(TRUE); // Update creator text field - childSetEnabled("Creator:", TRUE); + getChildView("Creator:")->setEnabled(TRUE); BOOL creators_identical; std::string creator_name; creators_identical = LLSelectMgr::getInstance()->selectGetCreator(mCreatorID, creator_name); - childSetText("Creator Name", creator_name); - childSetEnabled("Creator Name", TRUE); + getChild<LLUICtrl>("Creator Name")->setValue(creator_name); + getChildView("Creator Name")->setEnabled(TRUE); // Update owner text field - childSetEnabled("Owner:", TRUE); + getChildView("Owner:")->setEnabled(TRUE); std::string owner_name; const BOOL owners_identical = LLSelectMgr::getInstance()->selectGetOwner(mOwnerID, owner_name); @@ -364,12 +364,12 @@ void LLPanelPermissions::refresh() } } } - childSetText("Owner Name", owner_name); - childSetEnabled("Owner Name", TRUE); + getChild<LLUICtrl>("Owner Name")->setValue(owner_name); + getChildView("Owner Name")->setEnabled(TRUE); // update group text field - childSetEnabled("Group:", TRUE); - childSetText("Group Name", LLStringUtil::null); + getChildView("Group:")->setEnabled(TRUE); + getChild<LLUICtrl>("Group Name")->setValue(LLStringUtil::null); LLUUID group_id; BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id); if (groups_identical) @@ -390,18 +390,18 @@ void LLPanelPermissions::refresh() } } - childSetEnabled("button set group", owners_identical && (mOwnerID == gAgent.getID())); + getChildView("button set group")->setEnabled(owners_identical && (mOwnerID == gAgent.getID())); - childSetEnabled("Name:", TRUE); + getChildView("Name:")->setEnabled(TRUE); LLLineEditor* LineEditorObjectName = getChild<LLLineEditor>("Object Name"); - childSetEnabled("Description:", TRUE); + getChildView("Description:")->setEnabled(TRUE); LLLineEditor* LineEditorObjectDesc = getChild<LLLineEditor>("Object Description"); if (is_one_object) { if (keyboard_focus_view != LineEditorObjectName) { - childSetText("Object Name",nodep->mName); + getChild<LLUICtrl>("Object Name")->setValue(nodep->mName); } if (LineEditorObjectDesc) @@ -414,7 +414,7 @@ void LLPanelPermissions::refresh() } else { - childSetText("Object Name", LLStringUtil::null); + getChild<LLUICtrl>("Object Name")->setValue(LLStringUtil::null); LineEditorObjectDesc->setText(LLStringUtil::null); } @@ -426,13 +426,13 @@ void LLPanelPermissions::refresh() } if (edit_name_desc) { - childSetEnabled("Object Name", TRUE); - childSetEnabled("Object Description", TRUE); + getChildView("Object Name")->setEnabled(TRUE); + getChildView("Object Description")->setEnabled(TRUE); } else { - childSetEnabled("Object Name", FALSE); - childSetEnabled("Object Description", FALSE); + getChildView("Object Name")->setEnabled(FALSE); + getChildView("Object Description")->setEnabled(FALSE); } S32 total_sale_price = 0; @@ -454,9 +454,9 @@ void LLPanelPermissions::refresh() if (!owners_identical) { - childSetEnabled("Cost", FALSE); - childSetText("Edit Cost", LLStringUtil::null); - childSetEnabled("Edit Cost", FALSE); + getChildView("Cost")->setEnabled(FALSE); + getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null); + getChildView("Edit Cost")->setEnabled(FALSE); } // You own these objects. else if (self_owned || (group_owned && gAgent.hasPowerInGroup(group_id,GP_OBJECT_SET_SALE))) @@ -464,11 +464,11 @@ void LLPanelPermissions::refresh() // If there are multiple items for sale then set text to PRICE PER UNIT. if (num_for_sale > 1) { - childSetText("Cost", getString("Cost Per Unit")); + getChild<LLUICtrl>("Cost")->setValue(getString("Cost Per Unit")); } else { - childSetText("Cost", getString("Cost Default")); + getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default")); } LLSpinCtrl *edit_price = getChild<LLSpinCtrl>("Edit Cost"); @@ -492,35 +492,35 @@ void LLPanelPermissions::refresh() // The edit fields are only enabled if you can sell this object // and the sale price is not mixed. BOOL enable_edit = (num_for_sale && can_transfer) ? !is_for_sale_mixed : FALSE; - childSetEnabled("Cost", enable_edit); - childSetEnabled("Edit Cost", enable_edit); + getChildView("Cost")->setEnabled(enable_edit); + getChildView("Edit Cost")->setEnabled(enable_edit); } // Someone, not you, owns these objects. else if (!public_owned) { - childSetEnabled("Cost", FALSE); - childSetEnabled("Edit Cost", FALSE); + getChildView("Cost")->setEnabled(FALSE); + getChildView("Edit Cost")->setEnabled(FALSE); // Don't show a price if none of the items are for sale. if (num_for_sale) - childSetText("Edit Cost", llformat("%d",total_sale_price)); + getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",total_sale_price)); else - childSetText("Edit Cost", LLStringUtil::null); + getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null); // If multiple items are for sale, set text to TOTAL PRICE. if (num_for_sale > 1) - childSetText("Cost", getString("Cost Total")); + getChild<LLUICtrl>("Cost")->setValue(getString("Cost Total")); else - childSetText("Cost", getString("Cost Default")); + getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default")); } // This is a public object. else { - childSetEnabled("Cost", FALSE); - childSetText("Cost", getString("Cost Default")); + getChildView("Cost")->setEnabled(FALSE); + getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default")); - childSetText("Edit Cost", LLStringUtil::null); - childSetEnabled("Edit Cost", FALSE); + getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null); + getChildView("Edit Cost")->setEnabled(FALSE); } // Enable and disable the permissions checkboxes @@ -562,20 +562,20 @@ void LLPanelPermissions::refresh() { if (valid_base_perms) { - childSetText("B:", "B: " + mask_to_string(base_mask_on)); - childSetVisible("B:", TRUE); + getChild<LLUICtrl>("B:")->setValue("B: " + mask_to_string(base_mask_on)); + getChildView("B:")->setVisible( TRUE); - childSetText("O:", "O: " + mask_to_string(owner_mask_on)); - childSetVisible("O:", TRUE); + getChild<LLUICtrl>("O:")->setValue("O: " + mask_to_string(owner_mask_on)); + getChildView("O:")->setVisible( TRUE); - childSetText("G:", "G: " + mask_to_string(group_mask_on)); - childSetVisible("G:", TRUE); + getChild<LLUICtrl>("G:")->setValue("G: " + mask_to_string(group_mask_on)); + getChildView("G:")->setVisible( TRUE); - childSetText("E:", "E: " + mask_to_string(everyone_mask_on)); - childSetVisible("E:", TRUE); + getChild<LLUICtrl>("E:")->setValue("E: " + mask_to_string(everyone_mask_on)); + getChildView("E:")->setVisible( TRUE); - childSetText("N:", "N: " + mask_to_string(next_owner_mask_on)); - childSetVisible("N:", TRUE); + getChild<LLUICtrl>("N:")->setValue("N: " + mask_to_string(next_owner_mask_on)); + getChildView("N:")->setVisible( TRUE); } U32 flag_mask = 0x0; @@ -584,17 +584,17 @@ void LLPanelPermissions::refresh() if (objectp->permCopy()) flag_mask |= PERM_COPY; if (objectp->permTransfer()) flag_mask |= PERM_TRANSFER; - childSetText("F:", "F:" + mask_to_string(flag_mask)); - childSetVisible("F:", TRUE); + getChild<LLUICtrl>("F:")->setValue("F:" + mask_to_string(flag_mask)); + getChildView("F:")->setVisible( TRUE); } else { - childSetVisible("B:", FALSE); - childSetVisible("O:", FALSE); - childSetVisible("G:", FALSE); - childSetVisible("E:", FALSE); - childSetVisible("N:", FALSE); - childSetVisible("F:", FALSE); + getChildView("B:")->setVisible( FALSE); + getChildView("O:")->setVisible( FALSE); + getChildView("G:")->setVisible( FALSE); + getChildView("E:")->setVisible( FALSE); + getChildView("N:")->setVisible( FALSE); + getChildView("F:")->setVisible( FALSE); } BOOL has_change_perm_ability = FALSE; @@ -614,65 +614,65 @@ void LLPanelPermissions::refresh() if (!has_change_perm_ability && !has_change_sale_ability && !root_selected) { // ...must select root to choose permissions - childSetValue("perm_modify", getString("text modify warning")); + getChild<LLUICtrl>("perm_modify")->setValue(getString("text modify warning")); } if (has_change_perm_ability) { - childSetEnabled("checkbox share with group", TRUE); - childSetEnabled("checkbox allow everyone move", owner_mask_on & PERM_MOVE); - childSetEnabled("checkbox allow everyone copy", owner_mask_on & PERM_COPY && owner_mask_on & PERM_TRANSFER); + getChildView("checkbox share with group")->setEnabled(TRUE); + getChildView("checkbox allow everyone move")->setEnabled(owner_mask_on & PERM_MOVE); + getChildView("checkbox allow everyone copy")->setEnabled(owner_mask_on & PERM_COPY && owner_mask_on & PERM_TRANSFER); } else { - childSetEnabled("checkbox share with group", FALSE); - childSetEnabled("checkbox allow everyone move", FALSE); - childSetEnabled("checkbox allow everyone copy", FALSE); + getChildView("checkbox share with group")->setEnabled(FALSE); + getChildView("checkbox allow everyone move")->setEnabled(FALSE); + getChildView("checkbox allow everyone copy")->setEnabled(FALSE); } if (has_change_sale_ability && (owner_mask_on & PERM_TRANSFER)) { - childSetEnabled("checkbox for sale", can_transfer || (!can_transfer && num_for_sale)); + getChildView("checkbox for sale")->setEnabled(can_transfer || (!can_transfer && num_for_sale)); // Set the checkbox to tentative if the prices of each object selected // are not the same. - childSetTentative("checkbox for sale", is_for_sale_mixed); - childSetEnabled("sale type", num_for_sale && can_transfer && !is_sale_price_mixed); + getChild<LLUICtrl>("checkbox for sale")->setTentative( is_for_sale_mixed); + getChildView("sale type")->setEnabled(num_for_sale && can_transfer && !is_sale_price_mixed); - childSetEnabled("Next owner can:", TRUE); - childSetEnabled("checkbox next owner can modify", base_mask_on & PERM_MODIFY); - childSetEnabled("checkbox next owner can copy", base_mask_on & PERM_COPY); - childSetEnabled("checkbox next owner can transfer", next_owner_mask_on & PERM_COPY); + getChildView("Next owner can:")->setEnabled(TRUE); + getChildView("checkbox next owner can modify")->setEnabled(base_mask_on & PERM_MODIFY); + getChildView("checkbox next owner can copy")->setEnabled(base_mask_on & PERM_COPY); + getChildView("checkbox next owner can transfer")->setEnabled(next_owner_mask_on & PERM_COPY); } else { - childSetEnabled("checkbox for sale", FALSE); - childSetEnabled("sale type", FALSE); + getChildView("checkbox for sale")->setEnabled(FALSE); + getChildView("sale type")->setEnabled(FALSE); - childSetEnabled("Next owner can:", FALSE); - childSetEnabled("checkbox next owner can modify", FALSE); - childSetEnabled("checkbox next owner can copy", FALSE); - childSetEnabled("checkbox next owner can transfer", FALSE); + getChildView("Next owner can:")->setEnabled(FALSE); + getChildView("checkbox next owner can modify")->setEnabled(FALSE); + getChildView("checkbox next owner can copy")->setEnabled(FALSE); + getChildView("checkbox next owner can transfer")->setEnabled(FALSE); } if (valid_group_perms) { if ((group_mask_on & PERM_COPY) && (group_mask_on & PERM_MODIFY) && (group_mask_on & PERM_MOVE)) { - childSetValue("checkbox share with group", TRUE); - childSetTentative("checkbox share with group", FALSE); - childSetEnabled("button deed", gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer); + getChild<LLUICtrl>("checkbox share with group")->setValue(TRUE); + getChild<LLUICtrl>("checkbox share with group")->setTentative( FALSE); + getChildView("button deed")->setEnabled(gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer); } else if ((group_mask_off & PERM_COPY) && (group_mask_off & PERM_MODIFY) && (group_mask_off & PERM_MOVE)) { - childSetValue("checkbox share with group", FALSE); - childSetTentative("checkbox share with group", FALSE); - childSetEnabled("button deed", FALSE); + getChild<LLUICtrl>("checkbox share with group")->setValue(FALSE); + getChild<LLUICtrl>("checkbox share with group")->setTentative( FALSE); + getChildView("button deed")->setEnabled(FALSE); } else { - childSetValue("checkbox share with group", TRUE); - childSetTentative("checkbox share with group", TRUE); - childSetEnabled("button deed", gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (group_mask_on & PERM_MOVE) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer); + getChild<LLUICtrl>("checkbox share with group")->setValue(TRUE); + getChild<LLUICtrl>("checkbox share with group")->setTentative( TRUE); + getChildView("button deed")->setEnabled(gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (group_mask_on & PERM_MOVE) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer); } } @@ -681,35 +681,35 @@ void LLPanelPermissions::refresh() // Move if (everyone_mask_on & PERM_MOVE) { - childSetValue("checkbox allow everyone move", TRUE); - childSetTentative("checkbox allow everyone move", FALSE); + getChild<LLUICtrl>("checkbox allow everyone move")->setValue(TRUE); + getChild<LLUICtrl>("checkbox allow everyone move")->setTentative( FALSE); } else if (everyone_mask_off & PERM_MOVE) { - childSetValue("checkbox allow everyone move", FALSE); - childSetTentative("checkbox allow everyone move", FALSE); + getChild<LLUICtrl>("checkbox allow everyone move")->setValue(FALSE); + getChild<LLUICtrl>("checkbox allow everyone move")->setTentative( FALSE); } else { - childSetValue("checkbox allow everyone move", TRUE); - childSetTentative("checkbox allow everyone move", TRUE); + getChild<LLUICtrl>("checkbox allow everyone move")->setValue(TRUE); + getChild<LLUICtrl>("checkbox allow everyone move")->setTentative( TRUE); } // Copy == everyone can't copy if (everyone_mask_on & PERM_COPY) { - childSetValue("checkbox allow everyone copy", TRUE); - childSetTentative("checkbox allow everyone copy", !can_copy || !can_transfer); + getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(TRUE); + getChild<LLUICtrl>("checkbox allow everyone copy")->setTentative( !can_copy || !can_transfer); } else if (everyone_mask_off & PERM_COPY) { - childSetValue("checkbox allow everyone copy", FALSE); - childSetTentative("checkbox allow everyone copy", FALSE); + getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(FALSE); + getChild<LLUICtrl>("checkbox allow everyone copy")->setTentative( FALSE); } else { - childSetValue("checkbox allow everyone copy", TRUE); - childSetTentative("checkbox allow everyone copy", TRUE); + getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(TRUE); + getChild<LLUICtrl>("checkbox allow everyone copy")->setTentative( TRUE); } } @@ -718,52 +718,52 @@ void LLPanelPermissions::refresh() // Modify == next owner canot modify if (next_owner_mask_on & PERM_MODIFY) { - childSetValue("checkbox next owner can modify", TRUE); - childSetTentative("checkbox next owner can modify", FALSE); + getChild<LLUICtrl>("checkbox next owner can modify")->setValue(TRUE); + getChild<LLUICtrl>("checkbox next owner can modify")->setTentative( FALSE); } else if (next_owner_mask_off & PERM_MODIFY) { - childSetValue("checkbox next owner can modify", FALSE); - childSetTentative("checkbox next owner can modify", FALSE); + getChild<LLUICtrl>("checkbox next owner can modify")->setValue(FALSE); + getChild<LLUICtrl>("checkbox next owner can modify")->setTentative( FALSE); } else { - childSetValue("checkbox next owner can modify", TRUE); - childSetTentative("checkbox next owner can modify", TRUE); + getChild<LLUICtrl>("checkbox next owner can modify")->setValue(TRUE); + getChild<LLUICtrl>("checkbox next owner can modify")->setTentative( TRUE); } // Copy == next owner cannot copy if (next_owner_mask_on & PERM_COPY) { - childSetValue("checkbox next owner can copy", TRUE); - childSetTentative("checkbox next owner can copy", !can_copy); + getChild<LLUICtrl>("checkbox next owner can copy")->setValue(TRUE); + getChild<LLUICtrl>("checkbox next owner can copy")->setTentative( !can_copy); } else if (next_owner_mask_off & PERM_COPY) { - childSetValue("checkbox next owner can copy", FALSE); - childSetTentative("checkbox next owner can copy", FALSE); + getChild<LLUICtrl>("checkbox next owner can copy")->setValue(FALSE); + getChild<LLUICtrl>("checkbox next owner can copy")->setTentative( FALSE); } else { - childSetValue("checkbox next owner can copy", TRUE); - childSetTentative("checkbox next owner can copy", TRUE); + getChild<LLUICtrl>("checkbox next owner can copy")->setValue(TRUE); + getChild<LLUICtrl>("checkbox next owner can copy")->setTentative( TRUE); } // Transfer == next owner cannot transfer if (next_owner_mask_on & PERM_TRANSFER) { - childSetValue("checkbox next owner can transfer", TRUE); - childSetTentative("checkbox next owner can transfer", !can_transfer); + getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(TRUE); + getChild<LLUICtrl>("checkbox next owner can transfer")->setTentative( !can_transfer); } else if (next_owner_mask_off & PERM_TRANSFER) { - childSetValue("checkbox next owner can transfer", FALSE); - childSetTentative("checkbox next owner can transfer", FALSE); + getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(FALSE); + getChild<LLUICtrl>("checkbox next owner can transfer")->setTentative( FALSE); } else { - childSetValue("checkbox next owner can transfer", TRUE); - childSetTentative("checkbox next owner can transfer", TRUE); + getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(TRUE); + getChild<LLUICtrl>("checkbox next owner can transfer")->setTentative( TRUE); } } @@ -785,7 +785,7 @@ void LLPanelPermissions::refresh() combo_sale_type->setTentative( TRUE); // unfortunately this doesn't do anything at the moment. } - childSetValue("checkbox for sale", (num_for_sale != 0)); + getChild<LLUICtrl>("checkbox for sale")->setValue((num_for_sale != 0)); // HACK: There are some old objects in world that are set for sale, // but are no-transfer. We need to let users turn for-sale off, but only @@ -795,7 +795,7 @@ void LLPanelPermissions::refresh() { if (num_for_sale && has_change_sale_ability) { - childSetEnabled("checkbox for sale", true); + getChildView("checkbox for sale")->setEnabled(true); } } @@ -803,9 +803,9 @@ void LLPanelPermissions::refresh() const BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ); bool include_in_search; const BOOL all_include_in_search = LLSelectMgr::getInstance()->selectionGetIncludeInSearch(&include_in_search); - childSetEnabled("search_check", has_change_sale_ability && all_volume); - childSetValue("search_check", include_in_search); - childSetTentative("search_check", !all_include_in_search); + getChildView("search_check")->setEnabled(has_change_sale_ability && all_volume); + getChild<LLUICtrl>("search_check")->setValue(include_in_search); + getChild<LLUICtrl>("search_check")->setTentative( !all_include_in_search); // Click action (touch, sit, buy) U8 click_action = 0; @@ -818,8 +818,8 @@ void LLPanelPermissions::refresh() combo_click_action->setValue(LLSD(combo_value)); } } - childSetEnabled("label click action", is_perm_modify && all_volume); - childSetEnabled("clickaction", is_perm_modify && all_volume); + getChildView("label click action")->setEnabled(is_perm_modify && all_volume); + getChildView("clickaction")->setEnabled(is_perm_modify && all_volume); } diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp index f0dc493ebe..54eb21422e 100644 --- a/indra/newview/llpanelpick.cpp +++ b/indra/newview/llpanelpick.cpp @@ -210,6 +210,9 @@ void LLPanelPickInfo::sendParcelInfoRequest() { if (mParcelId != mRequestedId) { + //ext-4655, remove now incase this gets called twice without a remove + LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mRequestedId, this); + LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelId, this); LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelId); @@ -247,13 +250,13 @@ void LLPanelPickInfo::resetControls() { if(getAvatarId() == gAgent.getID()) { - childSetEnabled("edit_btn", TRUE); - childSetVisible("edit_btn", TRUE); + getChildView("edit_btn")->setEnabled(TRUE); + getChildView("edit_btn")->setVisible( TRUE); } else { - childSetEnabled("edit_btn", FALSE); - childSetVisible("edit_btn", FALSE); + getChildView("edit_btn")->setEnabled(FALSE); + getChildView("edit_btn")->setVisible( FALSE); } } @@ -306,17 +309,17 @@ void LLPanelPickInfo::setSnapshotId(const LLUUID& id) void LLPanelPickInfo::setPickName(const std::string& name) { - childSetValue(XML_NAME, name); + getChild<LLUICtrl>(XML_NAME)->setValue(name); } void LLPanelPickInfo::setPickDesc(const std::string& desc) { - childSetValue(XML_DESC, desc); + getChild<LLUICtrl>(XML_DESC)->setValue(desc); } void LLPanelPickInfo::setPickLocation(const std::string& location) { - childSetValue(XML_LOCATION, location); + getChild<LLUICtrl>(XML_LOCATION)->setValue(location); } void LLPanelPickInfo::onClickMap() @@ -399,8 +402,8 @@ void LLPanelPickEdit::onOpen(const LLSD& key) } setParcelID(parcel_id); - childSetValue("pick_name", pick_name.empty() ? region_name : pick_name); - childSetValue("pick_desc", pick_desc); + getChild<LLUICtrl>("pick_name")->setValue(pick_name.empty() ? region_name : pick_name); + getChild<LLUICtrl>("pick_desc")->setValue(pick_desc); setSnapshotId(snapshot_id); setPickLocation(createLocationText(getLocationNotice(), pick_name, region_name, getPosGlobal())); @@ -428,8 +431,8 @@ void LLPanelPickEdit::setPickData(const LLPickData* pick_data) mNeedData = false; setParcelID(pick_data->parcel_id); - childSetValue("pick_name", pick_data->name); - childSetValue("pick_desc", pick_data->desc); + getChild<LLUICtrl>("pick_name")->setValue(pick_data->name); + getChild<LLUICtrl>("pick_desc")->setValue(pick_data->desc); setSnapshotId(pick_data->snapshot_id); setPosGlobal(pick_data->pos_global); setPickLocation(createLocationText(LLStringUtil::null, pick_data->name, @@ -511,8 +514,8 @@ void LLPanelPickEdit::sendUpdate() //legacy var need to be deleted pick_data.top_pick = FALSE; pick_data.parcel_id = mParcelId; - pick_data.name = childGetValue(XML_NAME).asString(); - pick_data.desc = childGetValue(XML_DESC).asString(); + pick_data.name = getChild<LLUICtrl>(XML_NAME)->getValue().asString(); + pick_data.desc = getChild<LLUICtrl>(XML_DESC)->getValue().asString(); pick_data.snapshot_id = mSnapshotCtrl->getImageAssetID(); pick_data.pos_global = getPosGlobal(); pick_data.sort_order = 0; @@ -547,7 +550,7 @@ void LLPanelPickEdit::resetData() void LLPanelPickEdit::enableSaveButton(bool enable) { - childSetEnabled(XML_BTN_SAVE, enable); + getChildView(XML_BTN_SAVE)->setEnabled(enable); } void LLPanelPickEdit::onClickSetLocation() diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index bde8d02885..65254e50b4 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -218,7 +218,7 @@ void LLPanelPicks::updateData() mNoPicks = false; mNoClassifieds = false; - childSetValue("picks_panel_text", LLTrans::getString("PicksClassifiedsLoadingText")); + getChild<LLUICtrl>("picks_panel_text")->setValue(LLTrans::getString("PicksClassifiedsLoadingText")); mPicksList->clear(); LLAvatarPropertiesProcessor::getInstance()->sendAvatarPicksRequest(getAvatarId()); @@ -237,7 +237,7 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type) { std::string name, second_name; gCacheName->getName(getAvatarId(),name,second_name); - childSetTextArg("pick_title", "[NAME]",name); + getChild<LLUICtrl>("pick_title")->setTextArg("[NAME]", name); // Save selection, to be able to edit same item after saving changes. See EXT-3023. LLUUID selected_id = mPicksList->getSelectedValue()[PICK_ID]; @@ -324,11 +324,11 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type) { if(getAvatarId() == gAgentID) { - childSetValue("picks_panel_text", LLTrans::getString("NoPicksClassifiedsText")); + getChild<LLUICtrl>("picks_panel_text")->setValue(LLTrans::getString("NoPicksClassifiedsText")); } else { - childSetValue("picks_panel_text", LLTrans::getString("NoAvatarPicksClassifiedsText")); + getChild<LLUICtrl>("picks_panel_text")->setValue(LLTrans::getString("NoAvatarPicksClassifiedsText")); } } } @@ -460,22 +460,22 @@ void LLPanelPicks::onOpen(const LLSD& key) BOOL self = (gAgent.getID() == id); // only agent can edit her picks - childSetEnabled("edit_panel", self); - childSetVisible("edit_panel", self); + getChildView("edit_panel")->setEnabled(self); + getChildView("edit_panel")->setVisible( self); // Disable buttons when viewing profile for first time if(getAvatarId() != id) { - childSetEnabled(XML_BTN_INFO,FALSE); - childSetEnabled(XML_BTN_TELEPORT,FALSE); - childSetEnabled(XML_BTN_SHOW_ON_MAP,FALSE); + getChildView(XML_BTN_INFO)->setEnabled(FALSE); + getChildView(XML_BTN_TELEPORT)->setEnabled(FALSE); + getChildView(XML_BTN_SHOW_ON_MAP)->setEnabled(FALSE); } // and see a special title - set as invisible by default in xml file if (self) { - childSetVisible("pick_title", !self); - childSetVisible("pick_title_agent", self); + getChildView("pick_title")->setVisible( !self); + getChildView("pick_title_agent")->setVisible( self); mPopupMenu->setItemVisible("pick_delete", TRUE); mPopupMenu->setItemVisible("pick_edit", TRUE); @@ -670,17 +670,17 @@ void LLPanelPicks::updateButtons() if (getAvatarId() == gAgentID) { - childSetEnabled(XML_BTN_DELETE, has_selected); + getChildView(XML_BTN_DELETE)->setEnabled(has_selected); } - childSetEnabled(XML_BTN_INFO, has_selected); - childSetEnabled(XML_BTN_TELEPORT, has_selected); - childSetEnabled(XML_BTN_SHOW_ON_MAP, has_selected); + getChildView(XML_BTN_INFO)->setEnabled(has_selected); + getChildView(XML_BTN_TELEPORT)->setEnabled(has_selected); + getChildView(XML_BTN_SHOW_ON_MAP)->setEnabled(has_selected); LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem()); if(c_item) { - childSetEnabled(XML_BTN_INFO, isClassifiedPublished(c_item)); + getChildView(XML_BTN_INFO)->setEnabled(isClassifiedPublished(c_item)); } } @@ -701,8 +701,7 @@ void LLPanelPicks::buildPickPanel() void LLPanelPicks::onClickPlusBtn() { - LLRect rect; - childGetRect(XML_BTN_NEW, rect); + LLRect rect(getChildView(XML_BTN_NEW)->getRect()); mPlusMenu->updateParent(LLMenuGL::sMenuContainer); mPlusMenu->setButtonRect(rect, this); @@ -1080,7 +1079,7 @@ void LLPickItem::init(LLPickData* pick_data) void LLPickItem::setPickName(const std::string& name) { mPickName = name; - childSetValue("picture_name",name); + getChild<LLUICtrl>("picture_name")->setValue(name); } @@ -1101,7 +1100,7 @@ const LLUUID& LLPickItem::getSnapshotId() void LLPickItem::setPickDesc(const std::string& descr) { - childSetValue("picture_descr",descr); + getChild<LLUICtrl>("picture_descr")->setValue(descr); } void LLPickItem::setPickId(const LLUUID& id) @@ -1121,7 +1120,7 @@ const LLVector3d& LLPickItem::getPosGlobal() const std::string LLPickItem::getDescription() { - return childGetValue("picture_descr").asString(); + return getChild<LLUICtrl>("picture_descr")->getValue().asString(); } void LLPickItem::update() @@ -1148,10 +1147,15 @@ void LLPickItem::processProperties(void *data, EAvatarProcessorType type) LLAvatarPropertiesProcessor::instance().removeObserver(mCreatorID, this); } +void set_child_visible(LLView* parent, const std::string& child_name, bool visible) +{ + parent->getChildView(child_name)->setVisible(visible); +} + BOOL LLPickItem::postBuild() { - setMouseEnterCallback(boost::bind(&LLPanelPickInfo::childSetVisible, this, "hovered_icon", true)); - setMouseLeaveCallback(boost::bind(&LLPanelPickInfo::childSetVisible, this, "hovered_icon", false)); + setMouseEnterCallback(boost::bind(&set_child_visible, this, "hovered_icon", true)); + setMouseLeaveCallback(boost::bind(&set_child_visible, this, "hovered_icon", false)); return TRUE; } @@ -1159,7 +1163,7 @@ void LLPickItem::setValue(const LLSD& value) { if (!value.isMap()) return;; if (!value.has("selected")) return; - childSetVisible("selected_icon", value["selected"]); + getChildView("selected_icon")->setVisible( value["selected"]); } ////////////////////////////////////////////////////////////////////////// @@ -1205,8 +1209,8 @@ void LLClassifiedItem::processProperties(void* data, EAvatarProcessorType type) BOOL LLClassifiedItem::postBuild() { - setMouseEnterCallback(boost::bind(&LLPanelPickInfo::childSetVisible, this, "hovered_icon", true)); - setMouseLeaveCallback(boost::bind(&LLPanelPickInfo::childSetVisible, this, "hovered_icon", false)); + setMouseEnterCallback(boost::bind(&set_child_visible, this, "hovered_icon", true)); + setMouseLeaveCallback(boost::bind(&set_child_visible, this, "hovered_icon", false)); return TRUE; } @@ -1214,7 +1218,7 @@ void LLClassifiedItem::setValue(const LLSD& value) { if (!value.isMap()) return;; if (!value.has("selected")) return; - childSetVisible("selected_icon", value["selected"]); + getChildView("selected_icon")->setVisible( value["selected"]); } void LLClassifiedItem::fillIn(LLPanelClassifiedEdit* panel) @@ -1237,22 +1241,22 @@ void LLClassifiedItem::fillIn(LLPanelClassifiedEdit* panel) void LLClassifiedItem::setClassifiedName(const std::string& name) { - childSetValue("name", name); + getChild<LLUICtrl>("name")->setValue(name); } void LLClassifiedItem::setDescription(const std::string& desc) { - childSetValue("description", desc); + getChild<LLUICtrl>("description")->setValue(desc); } void LLClassifiedItem::setSnapshotId(const LLUUID& snapshot_id) { - childSetValue("picture", snapshot_id); + getChild<LLUICtrl>("picture")->setValue(snapshot_id); } LLUUID LLClassifiedItem::getSnapshotId() { - return childGetValue("picture"); + return getChild<LLUICtrl>("picture")->getValue(); } //EOF diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h index a98b8c413e..9dd1ba6ff9 100644 --- a/indra/newview/llpanelpicks.h +++ b/indra/newview/llpanelpicks.h @@ -275,11 +275,11 @@ public: void setClassifiedName (const std::string& name); - std::string getClassifiedName() { return childGetValue("name").asString(); } + std::string getClassifiedName() { return getChild<LLUICtrl>("name")->getValue().asString(); } void setDescription(const std::string& desc); - std::string getDescription() { return childGetValue("description").asString(); } + std::string getDescription() { return getChild<LLUICtrl>("description")->getValue().asString(); } void setSnapshotId(const LLUUID& snapshot_id); diff --git a/indra/newview/llpanelplace.cpp b/indra/newview/llpanelplace.cpp deleted file mode 100644 index 1446088c4f..0000000000 --- a/indra/newview/llpanelplace.cpp +++ /dev/null @@ -1,424 +0,0 @@ -/** - * @file llpanelplace.cpp - * @brief Display of a place in the Find directory. - * - * $LicenseInfo:firstyear=2004&license=viewergpl$ - * - * Copyright (c) 2004-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" - -#include "llpanelplace.h" - -#include "llviewercontrol.h" -#include "llqueryflags.h" -#include "llui.h" -#include "llsecondlifeurls.h" -#include "llfloater.h" -#include "llfloaterreg.h" -#include "llregionhandle.h" - -#include "llagent.h" -#include "llviewerwindow.h" -#include "llbutton.h" -#include "llfloaterworldmap.h" -#include "lllineeditor.h" -#include "llnotificationsutil.h" -#include "lluiconstants.h" -#include "lltextbox.h" -#include "lltexteditor.h" -#include "lltexturectrl.h" -#include "lltrans.h" -#include "llworldmap.h" -#include "llviewerregion.h" -#include "llvoavatarself.h" -#include "lluictrlfactory.h" -//#include "llviewermenu.h" // create_landmark() -#include "llweb.h" -#include "llsdutil.h" -#include "llsdutil_math.h" - -LLPanelPlace::LLPanelPlace() -: LLPanel(), - mParcelID(), - mRequestedID(), - mRegionID(), - mPosGlobal(), - mPosRegion(), - mAuctionID(0), - mLandmarkAssetID() -{} - -LLPanelPlace::~LLPanelPlace() -{ - if (mParcelID.notNull()) - { - LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelID, this); - } -} - -BOOL LLPanelPlace::postBuild() -{ - // Since this is only used in the directory browser, always - // disable the snapshot control. Otherwise clicking on it will - // open a texture picker. - mSnapshotCtrl = getChild<LLTextureCtrl>("snapshot_ctrl"); - mSnapshotCtrl->setEnabled(FALSE); - - mNameEditor = getChild<LLTextBox>("name_editor"); - // Text boxes appear to have a " " in them by default. This breaks the - // emptiness test for filling in data from the network. Slam to empty. - mNameEditor->setText( LLStringUtil::null ); - - mDescEditor = getChild<LLTextEditor>("desc_editor"); - - mInfoEditor = getChild<LLTextBox>("info_editor"); - mLandTypeEditor = getChild<LLTextBox>("land_type_display"); - - mLocationDisplay = getChild<LLTextBox>("location_editor"); - - mTeleportBtn = getChild<LLButton>( "teleport_btn"); - mTeleportBtn->setClickedCallback(onClickTeleport, this); - - mMapBtn = getChild<LLButton>( "map_btn"); - mMapBtn->setClickedCallback(onClickMap, this); - - //mLandmarkBtn = getChild<LLButton>( "landmark_btn"); - //mLandmarkBtn->setClickedCallback(onClickLandmark, this); - - mAuctionBtn = getChild<LLButton>( "auction_btn"); - mAuctionBtn->setClickedCallback(onClickAuction, this); - - // Default to no auction button. We'll show it if we get an auction id - mAuctionBtn->setVisible(FALSE); - - // Temporary text to explain why the description panel is blank. - // mDescEditor->setText("Parcel information not available without server update"); - - return TRUE; -} - -void LLPanelPlace::displayItemInfo(const LLInventoryItem* pItem) -{ - if (pItem) - { - mNameEditor->setText(pItem->getName()); - mDescEditor->setText(pItem->getDescription()); - } -} - -// Use this for search directory clicks, because we are totally -// recycling the panel and don't need to use what's there. -// -// For SLURL clicks, don't call this, because we need to cache -// the location info from the user. -void LLPanelPlace::resetLocation() -{ - mParcelID.setNull(); - mRequestedID.setNull(); - mRegionID.setNull(); - mLandmarkAssetID.setNull(); - mPosGlobal.clearVec(); - mPosRegion.clearVec(); - mAuctionID = 0; - mNameEditor->setText( LLStringUtil::null ); - mDescEditor->setText( LLStringUtil::null ); - mInfoEditor->setText( LLStringUtil::null ); - mLandTypeEditor->setText( LLStringUtil::null ); - mLocationDisplay->setText( LLStringUtil::null ); -} - - -// Set the name and clear other bits of info. Used for SLURL clicks -void LLPanelPlace::resetName(const std::string& name) -{ - setName(name); - if(mDescEditor) - { - mDescEditor->setText( LLStringUtil::null ); - } - if(mNameEditor) - { - llinfos << "Clearing place name" << llendl; - mNameEditor->setText( LLStringUtil::null ); - } - if(mInfoEditor) - { - mInfoEditor->setText( LLStringUtil::null ); - } - if(mLandTypeEditor) - { - mLandTypeEditor->setText( LLStringUtil::null ); - } -} - -//virtual -void LLPanelPlace::setParcelID(const LLUUID& parcel_id) -{ - mParcelID = parcel_id; - sendParcelInfoRequest(); -} - -void LLPanelPlace::setSnapshot(const LLUUID& snapshot_id) -{ - mSnapshotCtrl->setImageAssetID(snapshot_id); -} - -void LLPanelPlace::setLocationString(const std::string& location) -{ - mLocationDisplay->setText(location); -} - -void LLPanelPlace::setLandTypeString(const std::string& land_type) -{ - mLandTypeEditor->setText(land_type); -} - -void LLPanelPlace::sendParcelInfoRequest() -{ - if (mParcelID != mRequestedID) - { - LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this); - LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID); - - mRequestedID = mParcelID; - } -} - -//virtual -void LLPanelPlace::setErrorStatus(U32 status, const std::string& reason) -{ - // We only really handle 404 and 499 errors - std::string error_text; - if(status == 404) - { - error_text = getString("server_error_text"); - } - else if(status == 499) - { - error_text = getString("server_forbidden_text"); - } - mDescEditor->setText(error_text); -} - -//virtual -void LLPanelPlace::processParcelInfo(const LLParcelData& parcel_data) -{ - mAuctionID = parcel_data.auction_id; - - if(parcel_data.snapshot_id.notNull()) - { - mSnapshotCtrl->setImageAssetID(parcel_data.snapshot_id); - } - - if( !parcel_data.name.empty() - && mNameEditor && mNameEditor->getText().empty()) - { - mNameEditor->setText(parcel_data.name); - } - - if( !parcel_data.desc.empty() - && mDescEditor && mDescEditor->getText().empty()) - { - mDescEditor->setText(parcel_data.desc); - } - - std::string info_text; - LLUIString traffic = getString("traffic_text"); - traffic.setArg("[TRAFFIC]", llformat("%d ", (int)parcel_data.dwell)); - info_text = traffic; - LLUIString area = getString("area_text"); - area.setArg("[AREA]", llformat("%d", parcel_data.actual_area)); - info_text += area; - if (parcel_data.flags & DFQ_FOR_SALE) - { - LLUIString forsale = getString("forsale_text"); - forsale.setArg("[PRICE]", llformat("%d", parcel_data.sale_price)); - info_text += forsale; - } - if (parcel_data.auction_id != 0) - { - LLUIString auction = getString("auction_text"); - auction.setArg("[ID]", llformat("%010d ", parcel_data.auction_id)); - info_text += auction; - } - if (mInfoEditor) - { - mInfoEditor->setText(info_text); - } - - // HACK: Flag 0x2 == adult region, - // Flag 0x1 == mature region, otherwise assume PG - std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG); - if (parcel_data.flags & 0x2) - { - rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT); - } - else if (parcel_data.flags & 0x1) - { - rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE); - } - - // Just use given region position for display - S32 region_x = llround(mPosRegion.mV[0]); - S32 region_y = llround(mPosRegion.mV[1]); - S32 region_z = llround(mPosRegion.mV[2]); - - // If the region position is zero, grab position from the global - if(mPosRegion.isExactlyZero()) - { - region_x = llround(parcel_data.global_x) % REGION_WIDTH_UNITS; - region_y = llround(parcel_data.global_y) % REGION_WIDTH_UNITS; - region_z = llround(parcel_data.global_z); - } - - if(mPosGlobal.isExactlyZero()) - { - mPosGlobal.setVec(parcel_data.global_x, parcel_data.global_y, parcel_data.global_z); - } - - std::string location = llformat("%s %d, %d, %d (%s)", - parcel_data.sim_name.c_str(), region_x, region_y, region_z, rating.c_str()); - if (mLocationDisplay) - { - mLocationDisplay->setText(location); - } - - BOOL show_auction = (parcel_data.auction_id > 0); - mAuctionBtn->setVisible(show_auction); -} - - -void LLPanelPlace::displayParcelInfo(const LLVector3& pos_region, - const LLUUID& landmark_asset_id, - const LLUUID& region_id, - const LLVector3d& pos_global) -{ - LLSD body; - mPosRegion = pos_region; - mPosGlobal = pos_global; - mLandmarkAssetID = landmark_asset_id; - std::string url = gAgent.getRegion()->getCapability("RemoteParcelRequest"); - if (!url.empty()) - { - body["location"] = ll_sd_from_vector3(pos_region); - if (!region_id.isNull()) - { - body["region_id"] = region_id; - } - if (!pos_global.isExactlyZero()) - { - U64 region_handle = to_region_handle(pos_global); - body["region_handle"] = ll_sd_from_U64(region_handle); - } - LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(getObserverHandle())); - } - else - { - mDescEditor->setText(getString("server_update_text")); - } - mSnapshotCtrl->setImageAssetID(LLUUID::null); -} - -// static -void LLPanelPlace::onClickTeleport(void* data) -{ - LLPanelPlace* self = (LLPanelPlace*)data; - - LLView* parent_viewp = self->getParent(); - LLFloater* parent_floaterp = dynamic_cast<LLFloater*>(parent_viewp); - if (parent_floaterp) - { - parent_floaterp->closeFloater(); - } - // LLFloater* parent_floaterp = (LLFloater*)self->getParent(); - parent_viewp->setVisible(false); - LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance(); - if(self->mLandmarkAssetID.notNull() && worldmap_instance) - { - gAgent.teleportViaLandmark(self->mLandmarkAssetID); - worldmap_instance->trackLandmark(self->mLandmarkAssetID); - - } - else if (!self->mPosGlobal.isExactlyZero() && worldmap_instance) - { - gAgent.teleportViaLocation(self->mPosGlobal); - worldmap_instance->trackLocation(self->mPosGlobal); - } -} - -// static -void LLPanelPlace::onClickMap(void* data) -{ - LLPanelPlace* self = (LLPanelPlace*)data; - LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance(); - - if (!self->mPosGlobal.isExactlyZero() && worldmap_instance) - { - worldmap_instance->trackLocation(self->mPosGlobal); - LLFloaterReg::showInstance("world_map", "center"); - } -} - -// static -/* -void LLPanelPlace::onClickLandmark(void* data) -{ - LLPanelPlace* self = (LLPanelPlace*)data; - - create_landmark(self->mNameEditor->getText(), "", self->mPosGlobal); -} -*/ - - -// static -void LLPanelPlace::onClickAuction(void* data) -{ - LLPanelPlace* self = (LLPanelPlace*)data; - LLSD args; - args["AUCTION_ID"] = self->mAuctionID; - - LLNotificationsUtil::add("GoToAuctionPage", args); -} -/* -// static -bool LLPanelPlace::callbackAuctionWebPage(const LLSD& notification, const LLSD& response) -{ - S32 option = LLNotificationsUtil::getSelectedOption(notification, response); - if (0 == option) - { - std::string url; - url = LLNotifications::instance().getGlobalString("AUCTION_URL") + llformat("%010d", response["auction_id"].asInteger()); - - llinfos << "Loading auction page " << url << llendl; - - LLWeb::loadURL(url); - } - return false; -} -*/ - diff --git a/indra/newview/llpanelplace.h b/indra/newview/llpanelplace.h deleted file mode 100644 index f90a1b0567..0000000000 --- a/indra/newview/llpanelplace.h +++ /dev/null @@ -1,120 +0,0 @@ -/** - * @file llpanelplace.h - * @brief Display of a place in the Find directory. - * - * $LicenseInfo:firstyear=2004&license=viewergpl$ - * - * Copyright (c) 2004-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#ifndef LL_LLPANELPLACE_H -#define LL_LLPANELPLACE_H - -#include "llpanel.h" - -#include "v3dmath.h" -#include "lluuid.h" - -#include "llremoteparcelrequest.h" - -class LLButton; -class LLTextBox; -class LLLineEditor; -class LLTextEditor; -class LLTextureCtrl; -class LLMessageSystem; -class LLInventoryItem; - -class LLPanelPlace : public LLPanel, LLRemoteParcelInfoObserver -{ -public: - LLPanelPlace(); - /*virtual*/ ~LLPanelPlace(); - - /*virtual*/ BOOL postBuild(); - - void resetLocation(); - // Ignore all old location information, useful if you are - // recycling an existing dialog and need to clear it. - - /*virtual*/ void setParcelID(const LLUUID& parcel_id); - // Sends a request for data about the given parcel, which will - // only update the location if there is none already available. - - void displayItemInfo(const LLInventoryItem* pItem); - void setRegionID(const LLUUID& region_id) { mRegionID = region_id; } - void setSnapshot(const LLUUID& snapshot_id); - void setLocationString(const std::string& location); - void setLandTypeString(const std::string& land_type); - /*virtual*/ void setErrorStatus(U32 status, const std::string& reason); - void resetName(const std::string& name); - - void sendParcelInfoRequest(); - void displayParcelInfo(const LLVector3& pos_region, - const LLUUID& landmark_asset_id, - const LLUUID& region_id, - const LLVector3d& pos_global); - /*virtual*/ void processParcelInfo(const LLParcelData& parcel_data); - - LLTextureCtrl *getSnapshotCtrl() const { return mSnapshotCtrl; } - -protected: - static void onClickTeleport(void* data); - static void onClickMap(void* data); - //static void onClickLandmark(void* data); - static void onClickAuction(void* data); - - // Go to auction web page if user clicked OK - static bool callbackAuctionWebPage(const LLSD& notification, const LLSD& response); - -protected: - LLUUID mParcelID; - LLUUID mRequestedID; - LLUUID mRegionID; - LLUUID mLandmarkAssetID; - // Absolute position of the location for teleport, may not - // be available (hence zero) - LLVector3d mPosGlobal; - // Region-local position for teleport, always available. - LLVector3 mPosRegion; - // Zero if this is not an auction - S32 mAuctionID; - - LLTextureCtrl* mSnapshotCtrl; - - LLTextBox* mNameEditor; - LLTextEditor* mDescEditor; - LLTextBox* mInfoEditor; - LLTextBox* mLandTypeEditor; - LLTextBox* mLocationDisplay; //not calling it "editor" because it isn't - - LLButton* mTeleportBtn; - LLButton* mMapBtn; - //LLButton* mLandmarkBtn; - LLButton* mAuctionBtn; -}; - -#endif // LL_LLPANELPLACE_H diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp index 8c1f5d0915..095cd79aaf 100644 --- a/indra/newview/llpanelplaceinfo.cpp +++ b/indra/newview/llpanelplaceinfo.cpp @@ -60,7 +60,8 @@ LLPanelPlaceInfo::LLPanelPlaceInfo() mScrollingPanelWidth(0), mInfoType(UNKNOWN), mScrollingPanel(NULL), - mScrollContainer(NULL) + mScrollContainer(NULL), + mDescEditor(NULL) {} //virtual @@ -103,11 +104,11 @@ void LLPanelPlaceInfo::resetLocation() mPosRegion.clearVec(); std::string loading = LLTrans::getString("LoadingData"); - mMaturityRatingIcon->setValue(loading); mMaturityRatingText->setValue(loading); mRegionName->setText(loading); mParcelName->setText(loading); mDescEditor->setText(loading); + mMaturityRatingIcon->setValue(LLUUID::null); mSnapshotCtrl->setImageAssetID(LLUUID::null); } @@ -132,6 +133,10 @@ void LLPanelPlaceInfo::sendParcelInfoRequest() { if (mParcelID != mRequestedID) { + //ext-4655, defensive. remove now incase this gets called twice without a remove + //as panel never closes its ok atm (but wrong :) + LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mRequestedID, this); + LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this); LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID); @@ -185,7 +190,21 @@ void LLPanelPlaceInfo::setErrorStatus(U32 status, const std::string& reason) { error_text = getString("server_forbidden_text"); } + else + { + error_text = getString("server_error_text"); + } + mDescEditor->setText(error_text); + + std::string not_available = getString("not_available"); + mMaturityRatingText->setValue(not_available); + mRegionName->setText(not_available); + mParcelName->setText(not_available); + mMaturityRatingIcon->setValue(LLUUID::null); + + // Enable "Back" button that was disabled when parcel request was sent. + getChild<LLButton>("back_btn")->setEnabled(TRUE); } // virtual @@ -248,6 +267,16 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data) // virtual void LLPanelPlaceInfo::reshape(S32 width, S32 height, BOOL called_from_parent) { + + // This if was added to force collapsing description textbox on Windows at the beginning of reshape + // (the only case when reshape is skipped here is when it's caused by this textbox, so called_from_parent is FALSE) + // This way it is consistent with Linux where topLost collapses textbox at the beginning of reshape. + // On windows it collapsed only after reshape which caused EXT-8342. + if(called_from_parent) + { + if(mDescEditor) mDescEditor->onTopLost(); + } + LLPanel::reshape(width, height, called_from_parent); if (!mScrollContainer || !mScrollingPanel) diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index 1f979b0ef1..08835dc2b8 100644 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -79,7 +79,8 @@ LLPanelPlaceProfile::LLPanelPlaceProfile() : LLPanelPlaceInfo(), mForSalePanel(NULL), mYouAreHerePanel(NULL), - mSelectedParcelID(-1) + mSelectedParcelID(-1), + mAccordionCtrl(NULL) {} // virtual @@ -139,6 +140,7 @@ BOOL LLPanelPlaceProfile::postBuild() mSubdivideText = getChild<LLTextEditor>("subdivide"); mResaleText = getChild<LLTextEditor>("resale"); mSaleToText = getChild<LLTextBox>("sale_to"); + mAccordionCtrl = getChild<LLAccordionCtrl>("advanced_info_accordion"); icon_pg = getString("icon_PG"); icon_m = getString("icon_M"); @@ -278,6 +280,11 @@ void LLPanelPlaceProfile::handleVisibilityChange(BOOL new_visibility) parcel_mgr->deselectUnused(); } } + + if (mAccordionCtrl != NULL) + { + mAccordionCtrl->expandDefaultTab(); + } } void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel, diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h index e77b441567..49c13ff5e3 100644 --- a/indra/newview/llpanelplaceprofile.h +++ b/indra/newview/llpanelplaceprofile.h @@ -35,6 +35,7 @@ #include "llpanelplaceinfo.h" +class LLAccordionCtrl; class LLIconCtrl; class LLTextEditor; @@ -118,6 +119,7 @@ private: LLTextEditor* mSubdivideText; LLTextEditor* mResaleText; LLTextBox* mSaleToText; + LLAccordionCtrl* mAccordionCtrl; }; #endif // LL_LLPANELPLACEPROFILE_H diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index 705b196ef1..abf2b94b09 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -54,6 +54,7 @@ #include "llagent.h" #include "llagentpicksinfo.h" #include "llavatarpropertiesprocessor.h" +#include "llcommandhandler.h" #include "llfloaterworldmap.h" #include "llinventorybridge.h" #include "llinventoryobserver.h" @@ -66,6 +67,7 @@ #include "llpanelplaceprofile.h" #include "llpanelteleporthistory.h" #include "llremoteparcelrequest.h" +#include "llsidetray.h" #include "llteleporthistorystorage.h" #include "lltoggleablemenu.h" #include "llviewerinventory.h" @@ -75,6 +77,7 @@ #include "llviewerregion.h" #include "llviewerwindow.h" +// Constants static const S32 LANDMARK_FOLDERS_MENU_WIDTH = 250; static const F32 PLACE_INFO_UPDATE_INTERVAL = 3.0; static const std::string AGENT_INFO_TYPE = "agent"; @@ -83,6 +86,40 @@ static const std::string LANDMARK_INFO_TYPE = "landmark"; static const std::string REMOTE_PLACE_INFO_TYPE = "remote_place"; static const std::string TELEPORT_HISTORY_INFO_TYPE = "teleport_history"; +// Support for secondlife:///app/parcel/{UUID}/about SLapps +class LLParcelHandler : public LLCommandHandler +{ +public: + // requires trusted browser to trigger + LLParcelHandler() : LLCommandHandler("parcel", UNTRUSTED_THROTTLE) { } + bool handle(const LLSD& params, const LLSD& query_map, + LLMediaCtrl* web) + { + if (params.size() < 2) + { + return false; + } + LLUUID parcel_id; + if (!parcel_id.set(params[0], FALSE)) + { + return false; + } + if (params[1].asString() == "about") + { + if (parcel_id.notNull()) + { + LLSD key; + key["type"] = "remote_place"; + key["id"] = parcel_id; + LLSideTray::getInstance()->showPanel("panel_places", key); + return true; + } + } + return false; + } +}; +LLParcelHandler gParcelHandler; + // Helper functions static bool is_agent_in_selected_parcel(LLParcel* parcel); static void onSLURLBuilt(std::string& slurl); @@ -718,8 +755,8 @@ void LLPanelPlaces::onOverflowButtonClicked() bool is_agent_place_info_visible = mPlaceInfoType == AGENT_INFO_TYPE; if ((is_agent_place_info_visible || - mPlaceInfoType == "remote_place" || - mPlaceInfoType == "teleport_history") && mPlaceMenu != NULL) + mPlaceInfoType == REMOTE_PLACE_INFO_TYPE || + mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE) && mPlaceMenu != NULL) { menu = mPlaceMenu; @@ -1089,6 +1126,8 @@ void LLPanelPlaces::updateVerbs() if (is_place_info_visible) { + mShowOnMapBtn->setEnabled(have_3d_pos); + if (is_agent_place_info_visible) { // We don't need to teleport to the current location diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index d84ac2e4c8..c5c9b4f894 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -988,6 +988,13 @@ void LLPanelPrimMediaControls::onClickZoom() void LLPanelPrimMediaControls::nextZoomLevel() { + LLViewerObject* objectp = getTargetObject(); + if(objectp && objectp->isHUDAttachment()) + { + // Never allow zooming on HUD attachments. + return; + } + int index = 0; while (index < kNumZoomLevels) { diff --git a/indra/newview/llpanelprofileview.cpp b/indra/newview/llpanelprofileview.cpp index 044036ea50..d59e694be6 100644 --- a/indra/newview/llpanelprofileview.cpp +++ b/indra/newview/llpanelprofileview.cpp @@ -123,8 +123,8 @@ BOOL LLPanelProfileView::postBuild() getTabContainer()[PANEL_NOTES] = getChild<LLPanelAvatarNotes>(PANEL_NOTES); //*TODO remove this, according to style guide we don't use status combobox - getTabContainer()[PANEL_PROFILE]->childSetVisible("online_me_status_text", FALSE); - getTabContainer()[PANEL_PROFILE]->childSetVisible("status_combo", FALSE); + getTabContainer()[PANEL_PROFILE]->getChildView("online_me_status_text")->setVisible( FALSE); + getTabContainer()[PANEL_PROFILE]->getChildView("status_combo")->setVisible( FALSE); mStatusText = getChild<LLTextBox>("status"); mStatusText->setVisible(false); diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index 1048e3fcc0..af58912b38 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -169,7 +169,7 @@ void LLTeleportHistoryFlatItem::setValue(const LLSD& value) { if (!value.isMap()) return;; if (!value.has("selected")) return; - childSetVisible("selected_icon", value["selected"]); + getChildView("selected_icon")->setVisible( value["selected"]); } void LLTeleportHistoryFlatItem::setHighlightedText(const std::string& text) @@ -193,7 +193,7 @@ void LLTeleportHistoryFlatItem::updateTitle() void LLTeleportHistoryFlatItem::onMouseEnter(S32 x, S32 y, MASK mask) { - childSetVisible("hovered_icon", true); + getChildView("hovered_icon")->setVisible( true); mProfileBtn->setVisible(true); LLPanel::onMouseEnter(x, y, mask); @@ -201,7 +201,7 @@ void LLTeleportHistoryFlatItem::onMouseEnter(S32 x, S32 y, MASK mask) void LLTeleportHistoryFlatItem::onMouseLeave(S32 x, S32 y, MASK mask) { - childSetVisible("hovered_icon", false); + getChildView("hovered_icon")->setVisible( false); mProfileBtn->setVisible(false); LLPanel::onMouseLeave(x, y, mask); diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp index 68dc1cdf71..e73d1fb7c2 100644 --- a/indra/newview/llpaneltopinfobar.cpp +++ b/indra/newview/llpaneltopinfobar.cpp @@ -161,6 +161,8 @@ BOOL LLPanelTopInfoBar::postBuild() mParcelMgrConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback( boost::bind(&LLPanelTopInfoBar::onAgentParcelChange, this)); + setVisibleCallback(boost::bind(&LLPanelTopInfoBar::onVisibilityChange, this, _2)); + return TRUE; } @@ -174,6 +176,27 @@ void LLPanelTopInfoBar::onNavBarShowParcelPropertiesCtrlChanged() setParcelInfoText(new_text); } +// when panel is shown, all minimized floaters should be shifted downwards to prevent overlapping of +// PanelTopInfoBar. See EXT-7951. +void LLPanelTopInfoBar::onVisibilityChange(const LLSD& show) +{ + // this height is used as a vertical offset for ALREADY MINIMIZED floaters + // when PanelTopInfoBar visibility changes + S32 height = getRect().getHeight(); + + // this vertical offset is used for a start minimize position of floaters that + // are NOT MIMIMIZED YET + S32 minimize_pos_offset = 0; + + if (show.asBoolean()) + { + height = minimize_pos_offset = -height; + } + + gFloaterView->shiftFloaters(0, height); + gFloaterView->setMinimizePositionVerticalOffset(minimize_pos_offset); +} + void LLPanelTopInfoBar::draw() { updateParcelInfoText(); diff --git a/indra/newview/llpaneltopinfobar.h b/indra/newview/llpaneltopinfobar.h index 6e6fbc08ab..0603ee744f 100644 --- a/indra/newview/llpaneltopinfobar.h +++ b/indra/newview/llpaneltopinfobar.h @@ -58,6 +58,11 @@ public: */ void handleLoginComplete(); + /** + * Called when the top info bar gets shown or hidden + */ + void onVisibilityChange(const LLSD& show); + private: class LLParcelChangeObserver; diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp index 8b01637239..2b76b71568 100644 --- a/indra/newview/llpanelvolume.cpp +++ b/indra/newview/llpanelvolume.cpp @@ -85,21 +85,21 @@ BOOL LLPanelVolume::postBuild() { childSetCommitCallback("Flexible1D Checkbox Ctrl",onCommitIsFlexible,this); childSetCommitCallback("FlexNumSections",onCommitFlexible,this); - childSetValidate("FlexNumSections",precommitValidate); + getChild<LLUICtrl>("FlexNumSections")->setValidateBeforeCommit(precommitValidate); childSetCommitCallback("FlexGravity",onCommitFlexible,this); - childSetValidate("FlexGravity",precommitValidate); + getChild<LLUICtrl>("FlexGravity")->setValidateBeforeCommit(precommitValidate); childSetCommitCallback("FlexFriction",onCommitFlexible,this); - childSetValidate("FlexFriction",precommitValidate); + getChild<LLUICtrl>("FlexFriction")->setValidateBeforeCommit(precommitValidate); childSetCommitCallback("FlexWind",onCommitFlexible,this); - childSetValidate("FlexWind",precommitValidate); + getChild<LLUICtrl>("FlexWind")->setValidateBeforeCommit(precommitValidate); childSetCommitCallback("FlexTension",onCommitFlexible,this); - childSetValidate("FlexTension",precommitValidate); + getChild<LLUICtrl>("FlexTension")->setValidateBeforeCommit(precommitValidate); childSetCommitCallback("FlexForceX",onCommitFlexible,this); - childSetValidate("FlexForceX",precommitValidate); + getChild<LLUICtrl>("FlexForceX")->setValidateBeforeCommit(precommitValidate); childSetCommitCallback("FlexForceY",onCommitFlexible,this); - childSetValidate("FlexForceY",precommitValidate); + getChild<LLUICtrl>("FlexForceY")->setValidateBeforeCommit(precommitValidate); childSetCommitCallback("FlexForceZ",onCommitFlexible,this); - childSetValidate("FlexForceZ",precommitValidate); + getChild<LLUICtrl>("FlexForceZ")->setValidateBeforeCommit(precommitValidate); } // LIGHT Parameters @@ -121,18 +121,18 @@ BOOL LLPanelVolume::postBuild() } childSetCommitCallback("Light Intensity",onCommitLight,this); - childSetValidate("Light Intensity",precommitValidate); + getChild<LLUICtrl>("Light Intensity")->setValidateBeforeCommit(precommitValidate); childSetCommitCallback("Light Radius",onCommitLight,this); - childSetValidate("Light Radius",precommitValidate); + getChild<LLUICtrl>("Light Radius")->setValidateBeforeCommit(precommitValidate); childSetCommitCallback("Light Falloff",onCommitLight,this); - childSetValidate("Light Falloff",precommitValidate); + getChild<LLUICtrl>("Light Falloff")->setValidateBeforeCommit(precommitValidate); childSetCommitCallback("Light FOV", onCommitLight, this); - childSetValidate("Light FOV", precommitValidate); + getChild<LLUICtrl>("Light FOV")->setValidateBeforeCommit( precommitValidate); childSetCommitCallback("Light Focus", onCommitLight, this); - childSetValidate("Light Focus", precommitValidate); + getChild<LLUICtrl>("Light Focus")->setValidateBeforeCommit( precommitValidate); childSetCommitCallback("Light Ambiance", onCommitLight, this); - childSetValidate("Light Ambiance", precommitValidate); + getChild<LLUICtrl>("Light Ambiance")->setValidateBeforeCommit( precommitValidate); } // Start with everyone disabled @@ -210,25 +210,25 @@ void LLPanelVolume::getState( ) // Select Single Message if (single_volume) { - childSetVisible("edit_object",true); - childSetEnabled("edit_object",true); - childSetVisible("select_single",false); + getChildView("edit_object")->setVisible(true); + getChildView("edit_object")->setEnabled(true); + getChildView("select_single")->setVisible(false); } else { - childSetVisible("edit_object",false); - childSetVisible("select_single",true); - childSetEnabled("select_single",true); + getChildView("edit_object")->setVisible(false); + getChildView("select_single")->setVisible(true); + getChildView("select_single")->setEnabled(true); } // Light properties BOOL is_light = volobjp && volobjp->getIsLight(); - childSetValue("Light Checkbox Ctrl",is_light); - childSetEnabled("Light Checkbox Ctrl",editable && single_volume && volobjp); + getChild<LLUICtrl>("Light Checkbox Ctrl")->setValue(is_light); + getChildView("Light Checkbox Ctrl")->setEnabled(editable && single_volume && volobjp); if (is_light && editable && single_volume) { - childSetEnabled("label color",true); + getChildView("label color")->setEnabled(true); //mLabelColor ->setEnabled( TRUE ); LLColorSwatchCtrl* LightColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch"); if(LightColorSwatch) @@ -246,22 +246,22 @@ void LLPanelVolume::getState( ) LightTextureCtrl->setImageAssetID(volobjp->getLightTextureID()); } - childSetEnabled("Light Intensity",true); - childSetEnabled("Light Radius",true); - childSetEnabled("Light Falloff",true); + getChildView("Light Intensity")->setEnabled(true); + getChildView("Light Radius")->setEnabled(true); + getChildView("Light Falloff")->setEnabled(true); - childSetEnabled("Light FOV", true); - childSetEnabled("Light Focus", true); - childSetEnabled("Light Ambiance", true); + getChildView("Light FOV")->setEnabled(true); + getChildView("Light Focus")->setEnabled(true); + getChildView("Light Ambiance")->setEnabled(true); - childSetValue("Light Intensity",volobjp->getLightIntensity()); - childSetValue("Light Radius",volobjp->getLightRadius()); - childSetValue("Light Falloff",volobjp->getLightFalloff()); + getChild<LLUICtrl>("Light Intensity")->setValue(volobjp->getLightIntensity()); + getChild<LLUICtrl>("Light Radius")->setValue(volobjp->getLightRadius()); + getChild<LLUICtrl>("Light Falloff")->setValue(volobjp->getLightFalloff()); LLVector3 params = volobjp->getSpotLightParams(); - childSetValue("Light FOV", params.mV[0]); - childSetValue("Light Focus", params.mV[1]); - childSetValue("Light Ambiance", params.mV[2]); + getChild<LLUICtrl>("Light FOV")->setValue(params.mV[0]); + getChild<LLUICtrl>("Light Focus")->setValue(params.mV[1]); + getChild<LLUICtrl>("Light Ambiance")->setValue(params.mV[2]); mLightSavedColor = volobjp->getLightColor(); } @@ -271,7 +271,7 @@ void LLPanelVolume::getState( ) getChild<LLSpinCtrl>("Light Radius", true)->clear(); getChild<LLSpinCtrl>("Light Falloff", true)->clear(); - childSetEnabled("label color",false); + getChildView("label color")->setEnabled(false); LLColorSwatchCtrl* LightColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch"); if(LightColorSwatch) { @@ -285,56 +285,56 @@ void LLPanelVolume::getState( ) LightTextureCtrl->setValid(FALSE); } - childSetEnabled("Light Intensity",false); - childSetEnabled("Light Radius",false); - childSetEnabled("Light Falloff",false); + getChildView("Light Intensity")->setEnabled(false); + getChildView("Light Radius")->setEnabled(false); + getChildView("Light Falloff")->setEnabled(false); - childSetEnabled("Light FOV",false); - childSetEnabled("Light Focus",false); - childSetEnabled("Light Ambiance",false); + getChildView("Light FOV")->setEnabled(false); + getChildView("Light Focus")->setEnabled(false); + getChildView("Light Ambiance")->setEnabled(false); } // Flexible properties BOOL is_flexible = volobjp && volobjp->isFlexible(); - childSetValue("Flexible1D Checkbox Ctrl",is_flexible); + getChild<LLUICtrl>("Flexible1D Checkbox Ctrl")->setValue(is_flexible); if (is_flexible || (volobjp && volobjp->canBeFlexible())) { - childSetEnabled("Flexible1D Checkbox Ctrl", editable && single_volume && volobjp); + getChildView("Flexible1D Checkbox Ctrl")->setEnabled(editable && single_volume && volobjp); } else { - childSetEnabled("Flexible1D Checkbox Ctrl", false); + getChildView("Flexible1D Checkbox Ctrl")->setEnabled(false); } if (is_flexible && editable && single_volume) { - childSetVisible("FlexNumSections",true); - childSetVisible("FlexGravity",true); - childSetVisible("FlexTension",true); - childSetVisible("FlexFriction",true); - childSetVisible("FlexWind",true); - childSetVisible("FlexForceX",true); - childSetVisible("FlexForceY",true); - childSetVisible("FlexForceZ",true); - - childSetEnabled("FlexNumSections",true); - childSetEnabled("FlexGravity",true); - childSetEnabled("FlexTension",true); - childSetEnabled("FlexFriction",true); - childSetEnabled("FlexWind",true); - childSetEnabled("FlexForceX",true); - childSetEnabled("FlexForceY",true); - childSetEnabled("FlexForceZ",true); + getChildView("FlexNumSections")->setVisible(true); + getChildView("FlexGravity")->setVisible(true); + getChildView("FlexTension")->setVisible(true); + getChildView("FlexFriction")->setVisible(true); + getChildView("FlexWind")->setVisible(true); + getChildView("FlexForceX")->setVisible(true); + getChildView("FlexForceY")->setVisible(true); + getChildView("FlexForceZ")->setVisible(true); + + getChildView("FlexNumSections")->setEnabled(true); + getChildView("FlexGravity")->setEnabled(true); + getChildView("FlexTension")->setEnabled(true); + getChildView("FlexFriction")->setEnabled(true); + getChildView("FlexWind")->setEnabled(true); + getChildView("FlexForceX")->setEnabled(true); + getChildView("FlexForceY")->setEnabled(true); + getChildView("FlexForceZ")->setEnabled(true); LLFlexibleObjectData *attributes = (LLFlexibleObjectData *)objectp->getParameterEntry(LLNetworkData::PARAMS_FLEXIBLE); - childSetValue("FlexNumSections",(F32)attributes->getSimulateLOD()); - childSetValue("FlexGravity",attributes->getGravity()); - childSetValue("FlexTension",attributes->getTension()); - childSetValue("FlexFriction",attributes->getAirFriction()); - childSetValue("FlexWind",attributes->getWindSensitivity()); - childSetValue("FlexForceX",attributes->getUserForce().mV[VX]); - childSetValue("FlexForceY",attributes->getUserForce().mV[VY]); - childSetValue("FlexForceZ",attributes->getUserForce().mV[VZ]); + getChild<LLUICtrl>("FlexNumSections")->setValue((F32)attributes->getSimulateLOD()); + getChild<LLUICtrl>("FlexGravity")->setValue(attributes->getGravity()); + getChild<LLUICtrl>("FlexTension")->setValue(attributes->getTension()); + getChild<LLUICtrl>("FlexFriction")->setValue(attributes->getAirFriction()); + getChild<LLUICtrl>("FlexWind")->setValue(attributes->getWindSensitivity()); + getChild<LLUICtrl>("FlexForceX")->setValue(attributes->getUserForce().mV[VX]); + getChild<LLUICtrl>("FlexForceY")->setValue(attributes->getUserForce().mV[VY]); + getChild<LLUICtrl>("FlexForceZ")->setValue(attributes->getUserForce().mV[VZ]); } else { @@ -347,14 +347,14 @@ void LLPanelVolume::getState( ) getChild<LLSpinCtrl>("FlexForceY", true)->clear(); getChild<LLSpinCtrl>("FlexForceZ", true)->clear(); - childSetEnabled("FlexNumSections",false); - childSetEnabled("FlexGravity",false); - childSetEnabled("FlexTension",false); - childSetEnabled("FlexFriction",false); - childSetEnabled("FlexWind",false); - childSetEnabled("FlexForceX",false); - childSetEnabled("FlexForceY",false); - childSetEnabled("FlexForceZ",false); + getChildView("FlexNumSections")->setEnabled(false); + getChildView("FlexGravity")->setEnabled(false); + getChildView("FlexTension")->setEnabled(false); + getChildView("FlexFriction")->setEnabled(false); + getChildView("FlexWind")->setEnabled(false); + getChildView("FlexForceX")->setEnabled(false); + getChildView("FlexForceY")->setEnabled(false); + getChildView("FlexForceZ")->setEnabled(false); } mObject = objectp; @@ -384,11 +384,11 @@ void LLPanelVolume::refresh() BOOL visible = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED) > 0 ? TRUE : FALSE; - childSetVisible("label texture", visible); - childSetVisible("Light FOV", visible); - childSetVisible("Light Focus", visible); - childSetVisible("Light Ambiance", visible); - childSetVisible("light texture control", visible); + getChildView("label texture")->setVisible( visible); + getChildView("Light FOV")->setVisible( visible); + getChildView("Light Focus")->setVisible( visible); + getChildView("Light Ambiance")->setVisible( visible); + getChildView("light texture control")->setVisible( visible); } @@ -403,13 +403,13 @@ void LLPanelVolume::clearCtrls() { LLPanel::clearCtrls(); - childSetEnabled("select_single",false); - childSetVisible("select_single",true); - childSetEnabled("edit_object",false); - childSetVisible("edit_object",false); - childSetEnabled("Light Checkbox Ctrl",false); - childSetEnabled("label color",false); - childSetEnabled("label color",false); + getChildView("select_single")->setEnabled(false); + getChildView("select_single")->setVisible(true); + getChildView("edit_object")->setEnabled(false); + getChildView("edit_object")->setVisible(false); + getChildView("Light Checkbox Ctrl")->setEnabled(false); + getChildView("label color")->setEnabled(false); + getChildView("label color")->setEnabled(false); LLColorSwatchCtrl* LightColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch"); if(LightColorSwatch) { @@ -423,19 +423,19 @@ void LLPanelVolume::clearCtrls() LightTextureCtrl->setValid( FALSE ); } - childSetEnabled("Light Intensity",false); - childSetEnabled("Light Radius",false); - childSetEnabled("Light Falloff",false); - - childSetEnabled("Flexible1D Checkbox Ctrl",false); - childSetEnabled("FlexNumSections",false); - childSetEnabled("FlexGravity",false); - childSetEnabled("FlexTension",false); - childSetEnabled("FlexFriction",false); - childSetEnabled("FlexWind",false); - childSetEnabled("FlexForceX",false); - childSetEnabled("FlexForceY",false); - childSetEnabled("FlexForceZ",false); + getChildView("Light Intensity")->setEnabled(false); + getChildView("Light Radius")->setEnabled(false); + getChildView("Light Falloff")->setEnabled(false); + + getChildView("Flexible1D Checkbox Ctrl")->setEnabled(false); + getChildView("FlexNumSections")->setEnabled(false); + getChildView("FlexGravity")->setEnabled(false); + getChildView("FlexTension")->setEnabled(false); + getChildView("FlexFriction")->setEnabled(false); + getChildView("FlexWind")->setEnabled(false); + getChildView("FlexForceX")->setEnabled(false); + getChildView("FlexForceY")->setEnabled(false); + getChildView("FlexForceZ")->setEnabled(false); } // @@ -451,7 +451,7 @@ void LLPanelVolume::sendIsLight() } LLVOVolume *volobjp = (LLVOVolume *)objectp; - BOOL value = childGetValue("Light Checkbox Ctrl"); + BOOL value = getChild<LLUICtrl>("Light Checkbox Ctrl")->getValue(); volobjp->setIsLight(value); llinfos << "update light sent" << llendl; } @@ -465,7 +465,7 @@ void LLPanelVolume::sendIsFlexible() } LLVOVolume *volobjp = (LLVOVolume *)objectp; - BOOL is_flexible = childGetValue("Flexible1D Checkbox Ctrl"); + BOOL is_flexible = getChild<LLUICtrl>("Flexible1D Checkbox Ctrl")->getValue(); //BOOL is_flexible = mCheckFlexible1D->get(); if (is_flexible) @@ -557,9 +557,9 @@ void LLPanelVolume::onCommitLight( LLUICtrl* ctrl, void* userdata ) LLVOVolume *volobjp = (LLVOVolume *)objectp; - volobjp->setLightIntensity((F32)self->childGetValue("Light Intensity").asReal()); - volobjp->setLightRadius((F32)self->childGetValue("Light Radius").asReal()); - volobjp->setLightFalloff((F32)self->childGetValue("Light Falloff").asReal()); + volobjp->setLightIntensity((F32)self->getChild<LLUICtrl>("Light Intensity")->getValue().asReal()); + volobjp->setLightRadius((F32)self->getChild<LLUICtrl>("Light Radius")->getValue().asReal()); + volobjp->setLightFalloff((F32)self->getChild<LLUICtrl>("Light Falloff")->getValue().asReal()); LLColorSwatchCtrl* LightColorSwatch = self->getChild<LLColorSwatchCtrl>("colorswatch"); if(LightColorSwatch) @@ -578,25 +578,25 @@ void LLPanelVolume::onCommitLight( LLUICtrl* ctrl, void* userdata ) { //this commit is making this a spot light, set UI to default params volobjp->setLightTextureID(id); LLVector3 spot_params = volobjp->getSpotLightParams(); - self->childSetValue("Light FOV", spot_params.mV[0]); - self->childSetValue("Light Focus", spot_params.mV[1]); - self->childSetValue("Light Ambiance", spot_params.mV[2]); + self->getChild<LLUICtrl>("Light FOV")->setValue(spot_params.mV[0]); + self->getChild<LLUICtrl>("Light Focus")->setValue(spot_params.mV[1]); + self->getChild<LLUICtrl>("Light Ambiance")->setValue(spot_params.mV[2]); } else { //modifying existing params LLVector3 spot_params; - spot_params.mV[0] = (F32) self->childGetValue("Light FOV").asReal(); - spot_params.mV[1] = (F32) self->childGetValue("Light Focus").asReal(); - spot_params.mV[2] = (F32) self->childGetValue("Light Ambiance").asReal(); + spot_params.mV[0] = (F32) self->getChild<LLUICtrl>("Light FOV")->getValue().asReal(); + spot_params.mV[1] = (F32) self->getChild<LLUICtrl>("Light Focus")->getValue().asReal(); + spot_params.mV[2] = (F32) self->getChild<LLUICtrl>("Light Ambiance")->getValue().asReal(); volobjp->setSpotLightParams(spot_params); } } else if (volobjp->isLightSpotlight()) { //no longer a spot light volobjp->setLightTextureID(id); - //self->childDisable("Light FOV"); - //self->childDisable("Light Focus"); - //self->childDisable("Light Ambiance"); + //self->getChildView("Light FOV")->setEnabled(FALSE); + //self->getChildView("Light Focus")->setEnabled(FALSE); + //self->getChildView("Light Ambiance")->setEnabled(FALSE); } } @@ -629,14 +629,14 @@ void LLPanelVolume::onCommitFlexible( LLUICtrl* ctrl, void* userdata ) new_attributes = *attributes; - new_attributes.setSimulateLOD(self->childGetValue("FlexNumSections").asInteger());//(S32)self->mSpinSections->get()); - new_attributes.setGravity((F32)self->childGetValue("FlexGravity").asReal()); - new_attributes.setTension((F32)self->childGetValue("FlexTension").asReal()); - new_attributes.setAirFriction((F32)self->childGetValue("FlexFriction").asReal()); - new_attributes.setWindSensitivity((F32)self->childGetValue("FlexWind").asReal()); - F32 fx = (F32)self->childGetValue("FlexForceX").asReal(); - F32 fy = (F32)self->childGetValue("FlexForceY").asReal(); - F32 fz = (F32)self->childGetValue("FlexForceZ").asReal(); + new_attributes.setSimulateLOD(self->getChild<LLUICtrl>("FlexNumSections")->getValue().asInteger());//(S32)self->mSpinSections->get()); + new_attributes.setGravity((F32)self->getChild<LLUICtrl>("FlexGravity")->getValue().asReal()); + new_attributes.setTension((F32)self->getChild<LLUICtrl>("FlexTension")->getValue().asReal()); + new_attributes.setAirFriction((F32)self->getChild<LLUICtrl>("FlexFriction")->getValue().asReal()); + new_attributes.setWindSensitivity((F32)self->getChild<LLUICtrl>("FlexWind")->getValue().asReal()); + F32 fx = (F32)self->getChild<LLUICtrl>("FlexForceX")->getValue().asReal(); + F32 fy = (F32)self->getChild<LLUICtrl>("FlexForceY")->getValue().asReal(); + F32 fz = (F32)self->getChild<LLUICtrl>("FlexForceZ")->getValue().asReal(); LLVector3 force(fx,fy,fz); new_attributes.setUserForce(force); diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp index b8852890ad..fd7ca39c72 100644 --- a/indra/newview/llpanelwearing.cpp +++ b/indra/newview/llpanelwearing.cpp @@ -87,9 +87,58 @@ protected: { LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + functor_t take_off = boost::bind(&LLAppearanceMgr::removeItemFromAvatar, LLAppearanceMgr::getInstance(), _1); + registrar.add("Wearing.Edit", boost::bind(&edit_outfit)); + registrar.add("Wearing.TakeOff", boost::bind(handleMultiple, take_off, mUUIDs)); + registrar.add("Wearing.Detach", boost::bind(handleMultiple, take_off, mUUIDs)); + + LLContextMenu* menu = createFromFile("menu_wearing_tab.xml"); + + updateMenuItemsVisibility(menu); - return createFromFile("menu_wearing_tab.xml"); + return menu; + } + + void updateMenuItemsVisibility(LLContextMenu* menu) + { + bool bp_selected = false; // true if body parts selected + bool clothes_selected = false; + bool attachments_selected = false; + + // See what types of wearables are selected. + for (uuid_vec_t::const_iterator it = mUUIDs.begin(); it != mUUIDs.end(); ++it) + { + LLViewerInventoryItem* item = gInventory.getItem(*it); + + if (!item) + { + llwarns << "Invalid item" << llendl; + continue; + } + + LLAssetType::EType type = item->getType(); + if (type == LLAssetType::AT_CLOTHING) + { + clothes_selected = true; + } + else if (type == LLAssetType::AT_BODYPART) + { + bp_selected = true; + } + else if (type == LLAssetType::AT_OBJECT) + { + attachments_selected = true; + } + } + + // Enable/disable some menu items depending on the selection. + bool allow_detach = !bp_selected && !clothes_selected && attachments_selected; + bool allow_take_off = !bp_selected && clothes_selected && !attachments_selected; + + menu->setItemVisible("take_off", allow_take_off); + menu->setItemVisible("detach", allow_detach); + menu->setItemVisible("edit_outfit_separator", allow_take_off || allow_detach); } }; diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index f2e6969998..4e8e4e3a40 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -695,11 +695,11 @@ void LLParticipantList::LLParticipantListMenu::show(LLView* spawning_view, const if (is_muted) { - LLMenuGL::sMenuContainer->childSetVisible("ModerateVoiceMuteSelected", false); + LLMenuGL::sMenuContainer->getChildView("ModerateVoiceMuteSelected")->setVisible( false); } else { - LLMenuGL::sMenuContainer->childSetVisible("ModerateVoiceUnMuteSelected", false); + LLMenuGL::sMenuContainer->getChildView("ModerateVoiceUnMuteSelected")->setVisible( false); } } diff --git a/indra/newview/llplacesinventorybridge.cpp b/indra/newview/llplacesinventorybridge.cpp index f59a55cb8b..18a91b0eb0 100644 --- a/indra/newview/llplacesinventorybridge.cpp +++ b/indra/newview/llplacesinventorybridge.cpp @@ -115,7 +115,7 @@ void LLPlacesFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // they should be synchronized with Places/My Landmarks/Gear menu. See EXT-1601 // repeat parent functionality - sSelf = this; // necessary for "New Folder" functionality + sSelf = getHandle(); // necessary for "New Folder" functionality hide_context_entries(menu, items, disabled_items); } diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp index dd31a62642..4becde7ab5 100644 --- a/indra/newview/llpreview.cpp +++ b/indra/newview/llpreview.cpp @@ -149,12 +149,12 @@ void LLPreview::onCommit() } LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item); - new_item->setDescription(childGetText("desc")); + new_item->setDescription(getChild<LLUICtrl>("desc")->getValue().asString()); - std::string new_name = childGetText("name"); + std::string new_name = getChild<LLUICtrl>("name")->getValue().asString(); if ( (new_item->getName() != new_name) && !new_name.empty()) { - new_item->rename(childGetText("name")); + new_item->rename(getChild<LLUICtrl>("name")->getValue().asString()); } if(mObjectUUID.notNull()) @@ -186,7 +186,7 @@ void LLPreview::onCommit() { LLSelectMgr::getInstance()->deselectAll(); LLSelectMgr::getInstance()->addAsIndividual( obj, SELECT_ALL_TES, FALSE ); - LLSelectMgr::getInstance()->selectionSetObjectDescription( childGetText("desc") ); + LLSelectMgr::getInstance()->selectionSetObjectDescription( getChild<LLUICtrl>("desc")->getValue().asString() ); LLSelectMgr::getInstance()->deselectAll(); } @@ -232,10 +232,10 @@ void LLPreview::refreshFromItem() LLUIString title = getString("Title", args); setTitle(title.getString()); } - childSetText("desc",item->getDescription()); + getChild<LLUICtrl>("desc")->setValue(item->getDescription()); BOOL can_agent_manipulate = item->getPermissions().allowModifyBy(gAgent.getID()); - childSetEnabled("desc",can_agent_manipulate); + getChildView("desc")->setEnabled(can_agent_manipulate); } // static diff --git a/indra/newview/llpreviewanim.cpp b/indra/newview/llpreviewanim.cpp index 262961b73b..a59ed53889 100644 --- a/indra/newview/llpreviewanim.cpp +++ b/indra/newview/llpreviewanim.cpp @@ -60,8 +60,8 @@ void LLPreviewAnim::endAnimCallback( void *userdata ) delete handlep; // done with the handle if (self) { - self->childSetValue("Anim play btn", FALSE); - self->childSetValue("Anim audition btn", FALSE); + self->getChild<LLUICtrl>("Anim play btn")->setValue(FALSE); + self->getChild<LLUICtrl>("Anim audition btn")->setValue(FALSE); } } @@ -72,14 +72,14 @@ BOOL LLPreviewAnim::postBuild() if(item) { gAgentAvatarp->createMotion(item->getAssetUUID()); // preload the animation - childSetText("desc", item->getDescription()); + getChild<LLUICtrl>("desc")->setValue(item->getDescription()); } childSetAction("Anim play btn",playAnim, this); childSetAction("Anim audition btn",auditionAnim, this); childSetCommitCallback("desc", LLPreview::onText, this); - childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); return LLPreview::postBuild(); } @@ -121,7 +121,7 @@ void LLPreviewAnim::playAnim( void *userdata ) btn->toggleState(); } - if (self->childGetValue("Anim play btn").asBoolean() ) + if (self->getChild<LLUICtrl>("Anim play btn")->getValue().asBoolean() ) { self->mPauseRequest = NULL; gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_START); @@ -155,7 +155,7 @@ void LLPreviewAnim::auditionAnim( void *userdata ) btn->toggleState(); } - if (self->childGetValue("Anim audition btn").asBoolean() ) + if (self->getChild<LLUICtrl>("Anim audition btn")->getValue().asBoolean() ) { self->mPauseRequest = NULL; gAgentAvatarp->startMotion(item->getAssetUUID()); diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp index a7b4873fed..6ef7c85e31 100644 --- a/indra/newview/llpreviewgesture.cpp +++ b/indra/newview/llpreviewgesture.cpp @@ -482,11 +482,11 @@ BOOL LLPreviewGesture::postBuild() if (item) { - childSetText("desc", item->getDescription()); - childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLUICtrl>("desc")->setValue(item->getDescription()); + getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); - childSetText("name", item->getName()); - childSetPrevalidate("name", &LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLUICtrl>("name")->setValue(item->getName()); + getChild<LLLineEditor>("name")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); } return LLPreview::postBuild(); @@ -628,7 +628,7 @@ void LLPreviewGesture::refresh() if (mPreviewGesture || !is_complete) { - childSetEnabled("desc", FALSE); + getChildView("desc")->setEnabled(FALSE); //mDescEditor->setEnabled(FALSE); mTriggerEditor->setEnabled(FALSE); mReplaceText->setEnabled(FALSE); @@ -659,7 +659,7 @@ void LLPreviewGesture::refresh() BOOL modifiable = item->getPermissions().allowModifyBy(gAgent.getID()); - childSetEnabled("desc", modifiable); + getChildView("desc")->setEnabled(modifiable); mTriggerEditor->setEnabled(TRUE); mLibraryList->setEnabled(modifiable); mStepList->setEnabled(modifiable); @@ -1625,7 +1625,17 @@ std::string LLPreviewGesture::getLabel(std::vector<std::string> labels) result=LLTrans::getString("AnimFlagStart"); } - result.append(v_labels[1]); + // lets localize action value + std::string action = v_labels[1]; + if ("None" == action) + { + action = LLTrans::getString("GestureActionNone"); + } + else if ("until animations are done" == action) + { + action = LLFloaterReg::getInstance("preview_gesture")->getChild<LLCheckBoxCtrl>("wait_anim_check")->getLabel(); + } + result.append(action); return result; } diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp index fb7ac0d86b..ee86d3a2c6 100644 --- a/indra/newview/llpreviewnotecard.cpp +++ b/indra/newview/llpreviewnotecard.cpp @@ -91,20 +91,20 @@ BOOL LLPreviewNotecard::postBuild() ed->makePristine(); childSetAction("Save", onClickSave, this); - childSetVisible("lock", FALSE); + getChildView("lock")->setVisible( FALSE); childSetAction("Delete", onClickDelete, this); - childSetEnabled("Delete", false); + getChildView("Delete")->setEnabled(false); const LLInventoryItem* item = getItem(); childSetCommitCallback("desc", LLPreview::onText, this); if (item) { - childSetText("desc", item->getDescription()); - childSetEnabled("Delete", true); + getChild<LLUICtrl>("desc")->setValue(item->getDescription()); + getChildView("Delete")->setEnabled(true); } - childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); return LLPreview::postBuild(); } @@ -120,10 +120,10 @@ void LLPreviewNotecard::setEnabled( BOOL enabled ) LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor"); - childSetEnabled("Notecard Editor", enabled); - childSetVisible("lock", !enabled); - childSetEnabled("desc", enabled); - childSetEnabled("Save", enabled && editor && (!editor->isPristine())); + getChildView("Notecard Editor")->setEnabled(enabled); + getChildView("lock")->setVisible( !enabled); + getChildView("desc")->setEnabled(enabled); + getChildView("Save")->setEnabled(enabled && editor && (!editor->isPristine())); } @@ -132,7 +132,7 @@ void LLPreviewNotecard::draw() LLViewerTextEditor* editor = getChild<LLViewerTextEditor>("Notecard Editor"); BOOL changed = !editor->isPristine(); - childSetEnabled("Save", changed && getEnabled()); + getChildView("Save")->setEnabled(changed && getEnabled()); LLPreview::draw(); } @@ -283,7 +283,7 @@ void LLPreviewNotecard::loadAsset() GP_OBJECT_MANIPULATE)) { editor->setEnabled(FALSE); - childSetVisible("lock", TRUE); + getChildView("lock")->setVisible( TRUE); } } else diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 7b926f468d..73845e2772 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -219,7 +219,7 @@ void LLFloaterScriptSearch::onBtnSearch(void *userdata) void LLFloaterScriptSearch::handleBtnSearch() { LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text"); - mEditorCore->mEditor->selectNext(childGetText("search_text"), caseChk->get()); + mEditorCore->mEditor->selectNext(getChild<LLUICtrl>("search_text")->getValue().asString(), caseChk->get()); } // static @@ -232,7 +232,7 @@ void LLFloaterScriptSearch::onBtnReplace(void *userdata) void LLFloaterScriptSearch::handleBtnReplace() { LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text"); - mEditorCore->mEditor->replaceText(childGetText("search_text"), childGetText("replace_text"), caseChk->get()); + mEditorCore->mEditor->replaceText(getChild<LLUICtrl>("search_text")->getValue().asString(), getChild<LLUICtrl>("replace_text")->getValue().asString(), caseChk->get()); } // static @@ -245,7 +245,7 @@ void LLFloaterScriptSearch::onBtnReplaceAll(void *userdata) void LLFloaterScriptSearch::handleBtnReplaceAll() { LLCheckBoxCtrl* caseChk = getChild<LLCheckBoxCtrl>("case_text"); - mEditorCore->mEditor->replaceTextAll(childGetText("search_text"), childGetText("replace_text"), caseChk->get()); + mEditorCore->mEditor->replaceTextAll(getChild<LLUICtrl>("search_text")->getValue().asString(), getChild<LLUICtrl>("replace_text")->getValue().asString(), caseChk->get()); } @@ -457,7 +457,7 @@ bool LLScriptEdCore::hasChanged() void LLScriptEdCore::draw() { BOOL script_changed = hasChanged(); - childSetEnabled("Save_btn", script_changed); + getChildView("Save_btn")->setEnabled(script_changed); if( mEditor->hasFocus() ) { @@ -469,11 +469,11 @@ void LLScriptEdCore::draw() args["[LINE]"] = llformat ("%d", line); args["[COLUMN]"] = llformat ("%d", column); cursor_pos = LLTrans::getString("CursorPos", args); - childSetText("line_col", cursor_pos); + getChild<LLUICtrl>("line_col")->setValue(cursor_pos); } else { - childSetText("line_col", LLStringUtil::null); + getChild<LLUICtrl>("line_col")->setValue(LLStringUtil::null); } updateDynamicHelp(); @@ -666,7 +666,7 @@ void LLScriptEdCore::onBtnDynamicHelp() if (parent) parent->addDependentFloater(live_help_floater, TRUE); live_help_floater->childSetCommitCallback("lock_check", onCheckLock, this); - live_help_floater->childSetValue("lock_check", gSavedSettings.getBOOL("ScriptHelpFollowsCursor")); + live_help_floater->getChild<LLUICtrl>("lock_check")->setValue(gSavedSettings.getBOOL("ScriptHelpFollowsCursor")); live_help_floater->childSetCommitCallback("history_combo", onHelpComboCommit, this); live_help_floater->childSetAction("back_btn", onClickBack, this); live_help_floater->childSetAction("fwd_btn", onClickForward, this); @@ -959,10 +959,10 @@ BOOL LLPreviewLSL::postBuild() llassert(item); if (item) { - childSetText("desc", item->getDescription()); + getChild<LLUICtrl>("desc")->setValue(item->getDescription()); } childSetCommitCallback("desc", LLPreview::onText, this); - childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); return LLPreview::postBuild(); } @@ -1040,8 +1040,8 @@ void LLPreviewLSL::loadAsset() mScriptEd->mFunctions->setEnabled(FALSE); mAssetStatus = PREVIEW_ASSET_LOADED; } - childSetVisible("lock", !is_modifiable); - mScriptEd->childSetEnabled("Insert...", is_modifiable); + getChildView("lock")->setVisible( !is_modifiable); + mScriptEd->getChildView("Insert...")->setEnabled(is_modifiable); } else { @@ -1429,14 +1429,14 @@ LLLiveLSLEditor::LLLiveLSLEditor(const LLSD& key) : BOOL LLLiveLSLEditor::postBuild() { childSetCommitCallback("running", LLLiveLSLEditor::onRunningCheckboxClicked, this); - childSetEnabled("running", FALSE); + getChildView("running")->setEnabled(FALSE); childSetAction("Reset",&LLLiveLSLEditor::onReset,this); - childSetEnabled("Reset", TRUE); + getChildView("Reset")->setEnabled(TRUE); mMonoCheckbox = getChild<LLCheckBoxCtrl>("mono"); childSetCommitCallback("mono", &LLLiveLSLEditor::onMonoCheckboxClicked, this); - childSetEnabled("mono", FALSE); + getChildView("mono")->setEnabled(FALSE); mScriptEd->mEditor->makePristine(); mScriptEd->mEditor->setFocus(TRUE); diff --git a/indra/newview/llpreviewsound.cpp b/indra/newview/llpreviewsound.cpp index 44b828854b..d9bcf5fba6 100644 --- a/indra/newview/llpreviewsound.cpp +++ b/indra/newview/llpreviewsound.cpp @@ -60,7 +60,7 @@ BOOL LLPreviewSound::postBuild() const LLInventoryItem* item = getItem(); if (item) { - childSetText("desc", item->getDescription()); + getChild<LLUICtrl>("desc")->setValue(item->getDescription()); if (gAudiop) gAudiop->preloadSound(item->getAssetUUID()); // preload the sound } @@ -75,7 +75,7 @@ BOOL LLPreviewSound::postBuild() button->setSoundFlags(LLView::SILENT); childSetCommitCallback("desc", LLPreview::onText, this); - childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); return LLPreview::postBuild(); } diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp index c4cbbbb791..c1cb386556 100644 --- a/indra/newview/llpreviewtexture.cpp +++ b/indra/newview/llpreviewtexture.cpp @@ -88,7 +88,7 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key) LLPreviewTexture::~LLPreviewTexture() { - LLLoadedCallbackEntry::cleanUpCallbackList(&mCallbackTextureList, this) ; + LLLoadedCallbackEntry::cleanUpCallbackList(&mCallbackTextureList) ; if( mLoadingFullImage ) { @@ -105,7 +105,7 @@ BOOL LLPreviewTexture::postBuild() { getChild<LLButton>("Keep")->setLabel(getString("Copy")); childSetAction("Keep",LLPreview::onBtnCopyToInv,this); - childSetVisible("Discard", false); + getChildView("Discard")->setVisible( false); } else if (mShowKeepDiscard) { @@ -114,13 +114,13 @@ BOOL LLPreviewTexture::postBuild() } else { - childSetVisible("Keep", false); - childSetVisible("Discard", false); + getChildView("Keep")->setVisible( false); + getChildView("Discard")->setVisible( false); } childSetAction("save_tex_btn", LLPreviewTexture::onSaveAsBtn, this); - childSetVisible("save_tex_btn", true); - childSetEnabled("save_tex_btn", canSaveAs()); + getChildView("save_tex_btn")->setVisible( true); + getChildView("save_tex_btn")->setEnabled(canSaveAs()); if (!mCopyToInv) { @@ -129,8 +129,8 @@ BOOL LLPreviewTexture::postBuild() if (item) { childSetCommitCallback("desc", LLPreview::onText, this); - childSetText("desc", item->getDescription()); - childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLUICtrl>("desc")->setValue(item->getDescription()); + getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); } } @@ -281,7 +281,7 @@ void LLPreviewTexture::saveAs() mLoadingFullImage = TRUE; getWindow()->incBusyCount(); mImage->setLoadedCallback( LLPreviewTexture::onFileLoadedForSave, - 0, TRUE, FALSE, new LLUUID( mItemUUID ), this, &mCallbackTextureList ); + 0, TRUE, FALSE, new LLUUID( mItemUUID ), &mCallbackTextureList ); } // virtual @@ -289,8 +289,7 @@ void LLPreviewTexture::reshape(S32 width, S32 height, BOOL called_from_parent) { LLPreview::reshape(width, height, called_from_parent); - LLRect dim_rect; - childGetRect("dimensions", dim_rect); + LLRect dim_rect(getChildView("dimensions")->getRect()); S32 horiz_pad = 2 * (LLPANEL_BORDER_WIDTH + PREVIEW_PAD) + PREVIEW_RESIZE_HANDLE_SIZE; @@ -412,12 +411,11 @@ void LLPreviewTexture::updateDimensions() mUpdateDimensions = FALSE; - childSetTextArg("dimensions", "[WIDTH]", llformat("%d", mImage->getFullWidth())); - childSetTextArg("dimensions", "[HEIGHT]", llformat("%d", mImage->getFullHeight())); + getChild<LLUICtrl>("dimensions")->setTextArg("[WIDTH]", llformat("%d", mImage->getFullWidth())); + getChild<LLUICtrl>("dimensions")->setTextArg("[HEIGHT]", llformat("%d", mImage->getFullHeight())); - LLRect dim_rect; - childGetRect("dimensions", dim_rect); + LLRect dim_rect(getChildView("dimensions")->getRect()); S32 horiz_pad = 2 * (LLPANEL_BORDER_WIDTH + PREVIEW_PAD) + PREVIEW_RESIZE_HANDLE_SIZE; @@ -491,9 +489,8 @@ void LLPreviewTexture::updateDimensions() // Hide the aspect ratio label if the window is too narrow // Assumes the label should be to the right of the dimensions - LLRect aspect_label_rect; - childGetRect("aspect_ratio", aspect_label_rect); - childSetVisible("aspect_ratio", dim_rect.mRight < aspect_label_rect.mLeft); + LLRect aspect_label_rect(getChildView("aspect_ratio")->getRect()); + getChildView("aspect_ratio")->setVisible( dim_rect.mRight < aspect_label_rect.mLeft); } @@ -550,7 +547,7 @@ void LLPreviewTexture::loadAsset() mAssetStatus = PREVIEW_ASSET_LOADING; mUpdateDimensions = TRUE; updateDimensions(); - childSetEnabled("save_tex_btn", canSaveAs()); + getChildView("save_tex_btn")->setEnabled(canSaveAs()); } LLPreview::EAssetStatus LLPreviewTexture::getAssetStatus() diff --git a/indra/newview/llremoteparcelrequest.cpp b/indra/newview/llremoteparcelrequest.cpp index 95e3dd6d78..c28c041d0c 100644 --- a/indra/newview/llremoteparcelrequest.cpp +++ b/indra/newview/llremoteparcelrequest.cpp @@ -36,7 +36,6 @@ #include "message.h" -#include "llpanelplace.h" #include "llpanel.h" #include "llhttpclient.h" #include "llsdserialize.h" diff --git a/indra/newview/llsaveoutfitcombobtn.cpp b/indra/newview/llsaveoutfitcombobtn.cpp index 9518b0cbb3..e2f5aee56d 100644 --- a/indra/newview/llsaveoutfitcombobtn.cpp +++ b/indra/newview/llsaveoutfitcombobtn.cpp @@ -94,5 +94,5 @@ void LLSaveOutfitComboBtn::setMenuItemEnabled(const std::string& item, bool enab void LLSaveOutfitComboBtn::setSaveBtnEnabled(bool enabled) { - mParent->childSetEnabled(SAVE_BTN, enabled); + mParent->getChildView(SAVE_BTN)->setEnabled(enabled); } diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp index 75797dae81..f124659910 100644 --- a/indra/newview/llscriptfloater.cpp +++ b/indra/newview/llscriptfloater.cpp @@ -32,6 +32,7 @@ #include "llviewerprecompiledheaders.h" #include "llscriptfloater.h" +#include "llagentcamera.h" #include "llbottomtray.h" #include "llchannelmanager.h" @@ -71,6 +72,7 @@ LLScriptFloater::LLScriptFloater(const LLSD& key) { setMouseDownCallback(boost::bind(&LLScriptFloater::onMouseDown, this)); setOverlapsScreenChannel(true); + mIsDockedStateForcedCallback = boost::bind(&LLAgentCamera::cameraMouselook, &gAgentCamera); } bool LLScriptFloater::toggle(const LLUUID& notification_id) diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp index 36d581a41a..d715c47631 100644 --- a/indra/newview/llscrollingpanelparam.cpp +++ b/indra/newview/llscrollingpanelparam.cpp @@ -79,17 +79,17 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_param mHintMin->setAllowsUpdates( FALSE ); mHintMax->setAllowsUpdates( FALSE ); - childSetValue("param slider", weightToPercent(param->getWeight())); + getChild<LLUICtrl>("param slider")->setValue(weightToPercent(param->getWeight())); std::string display_name = LLTrans::getString(param->getDisplayName()); - childSetLabelArg("param slider", "[DESC]", display_name); - childSetEnabled("param slider", mAllowModify); + getChild<LLUICtrl>("param slider")->setLabelArg("[DESC]", display_name); + getChildView("param slider")->setEnabled(mAllowModify); childSetCommitCallback("param slider", LLScrollingPanelParam::onSliderMoved, this); std::string min_name = LLTrans::getString(param->getMinDisplayName()); std::string max_name = LLTrans::getString(param->getMaxDisplayName()); - childSetValue("min param text", min_name); - childSetValue("max param text", max_name); + getChild<LLUICtrl>("min param text")->setValue(min_name); + getChild<LLUICtrl>("max param text")->setValue(max_name); LLButton* less = getChild<LLButton>("less"); if (less) @@ -126,14 +126,14 @@ void LLScrollingPanelParam::updatePanel(BOOL allow_modify) return; } F32 current_weight = mWearable->getVisualParamWeight( param->getID() ); - childSetValue("param slider", weightToPercent( current_weight ) ); + getChild<LLUICtrl>("param slider")->setValue(weightToPercent( current_weight ) ); mHintMin->requestUpdate( sUpdateDelayFrames++ ); mHintMax->requestUpdate( sUpdateDelayFrames++ ); mAllowModify = allow_modify; - childSetEnabled("param slider", mAllowModify); - childSetEnabled("less", mAllowModify); - childSetEnabled("more", mAllowModify); + getChildView("param slider")->setEnabled(mAllowModify); + getChildView("less")->setEnabled(mAllowModify); + getChildView("more")->setEnabled(mAllowModify); } void LLScrollingPanelParam::setVisible( BOOL visible ) @@ -159,16 +159,16 @@ void LLScrollingPanelParam::draw() return; } - childSetVisible("less", mHintMin->getVisible()); - childSetVisible("more", mHintMax->getVisible()); + getChildView("less")->setVisible( mHintMin->getVisible()); + getChildView("more")->setVisible( mHintMax->getVisible()); // hide borders if texture has been loaded - childSetVisible("left_border", !mHintMin->getVisible()); - childSetVisible("right_border", !mHintMax->getVisible()); + getChildView("left_border")->setVisible( !mHintMin->getVisible()); + getChildView("right_border")->setVisible( !mHintMax->getVisible()); // Draw all the children except for the labels - childSetVisible( "min param text", FALSE ); - childSetVisible( "max param text", FALSE ); + getChildView("min param text")->setVisible( FALSE ); + getChildView("max param text")->setVisible( FALSE ); LLPanel::draw(); // Draw the hints over the "less" and "more" buttons. @@ -190,10 +190,10 @@ void LLScrollingPanelParam::draw() // Draw labels on top of the buttons - childSetVisible( "min param text", TRUE ); + getChildView("min param text")->setVisible( TRUE ); drawChild(getChild<LLView>("min param text")); - childSetVisible( "max param text", TRUE ); + getChildView("max param text")->setVisible( TRUE ); drawChild(getChild<LLView>("max param text")); } diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 92903a6aa9..ff2929695d 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -3621,7 +3621,7 @@ void LLSelectMgr::selectionSetObjectSaleInfo(const LLSaleInfo& sale_info) // Attachments //---------------------------------------------------------------------- -void LLSelectMgr::sendAttach(U8 attachment_point) +void LLSelectMgr::sendAttach(U8 attachment_point, bool replace) { LLViewerObject* attach_object = mSelectedObjects->getFirstRootObject(); @@ -3635,9 +3635,12 @@ void LLSelectMgr::sendAttach(U8 attachment_point) if (0 == attachment_point || get_if_there(gAgentAvatarp->mAttachmentPoints, (S32)attachment_point, (LLViewerJointAttachment*)NULL)) { - - if (gSavedSettings.getBOOL("MultipleAttachments")) + if (!replace || attachment_point != 0) + { + // If we know the attachment point then we got here by clicking an + // "Attach to..." context menu item, so we should add, not replace. attachment_point |= ATTACHMENT_ADD; + } sendListToRegions( "ObjectAttach", diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index 45ab40fae2..a7f9723bfa 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -618,7 +618,7 @@ public: // verification only, if it doesn't match region info then sale is // canceled void sendBuy(const LLUUID& buyer_id, const LLUUID& category_id, const LLSaleInfo sale_info); - void sendAttach(U8 attachment_point); + void sendAttach(U8 attachment_point, bool replace); void sendDetach(); void sendDropAttachment(); void sendLink(); diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 7a7ffb9983..33a464fea6 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -190,13 +190,16 @@ void LLSidepanelAppearance::onVisibilityChange(const LLSD &new_visibility) { if (new_visibility.asBoolean()) { - if ((mOutfitEdit && mOutfitEdit->getVisible()) || (mEditWearable && mEditWearable->getVisible())) + bool is_outfit_edit_visible = mOutfitEdit && mOutfitEdit->getVisible(); + bool is_wearable_edit_visible = mEditWearable && mEditWearable->getVisible(); + + if (is_outfit_edit_visible || is_wearable_edit_visible) { if (!gAgentCamera.cameraCustomizeAvatar() && gSavedSettings.getBOOL("AppearanceCameraMovement")) { gAgentCamera.changeCameraToCustomizeAvatar(); } - if (mEditWearable && mEditWearable->getVisible()) + if (is_wearable_edit_visible) { LLWearable *wearable_ptr = mEditWearable->getWearable(); if (gAgentWearables.getWearableIndex(wearable_ptr) == LLAgentWearables::MAX_CLOTHING_PER_TYPE) @@ -205,6 +208,11 @@ void LLSidepanelAppearance::onVisibilityChange(const LLSD &new_visibility) showOutfitEditPanel(); } } + + if (is_outfit_edit_visible) + { + mOutfitEdit->resetAccordionState(); + } } } else @@ -283,6 +291,15 @@ void LLSidepanelAppearance::showOutfitsInventoryPanel() void LLSidepanelAppearance::showOutfitEditPanel() { + // Accordion's state must be reset in all cases except the one when user + // is returning back to the mOutfitEdit panel from the mEditWearable panel. + // The simplest way to control this is to check the visibility state of the mEditWearable + // BEFORE it is changed by the call to the toggleWearableEditPanel(FALSE, NULL, TRUE). + if (mEditWearable != NULL && !mEditWearable->getVisible() && mOutfitEdit != NULL) + { + mOutfitEdit->resetAccordionState(); + } + togglMyOutfitsPanel(FALSE); toggleWearableEditPanel(FALSE, NULL, TRUE); // don't switch out of edit appearance mode toggleOutfitEditPanel(TRUE); @@ -456,7 +473,7 @@ void LLSidepanelAppearance::fetchInventory() { LLViewerObject* attached_object = (*attachment_iter); if (!attached_object) continue; - const LLUUID& item_id = attached_object->getItemID(); + const LLUUID& item_id = attached_object->getAttachmentItemID(); if (item_id.isNull()) continue; ids.push_back(item_id); } @@ -484,8 +501,8 @@ void LLSidepanelAppearance::inventoryFetched() void LLSidepanelAppearance::setWearablesLoading(bool val) { - childSetVisible("wearables_loading_indicator", val); - childSetVisible("edit_outfit_btn", !val); + getChildView("wearables_loading_indicator")->setVisible( val); + getChildView("edit_outfit_btn")->setVisible( !val); if (!val) { diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index de59af49da..0951586dd5 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -33,10 +33,13 @@ #include "llsidepanelinventory.h" #include "llagent.h" +#include "llappearancemgr.h" #include "llavataractions.h" #include "llbutton.h" #include "llinventorybridge.h" +#include "llinventoryfunctions.h" #include "llinventorypanel.h" +#include "lloutfitobserver.h" #include "llpanelmaininventory.h" #include "llsidepaneliteminfo.h" #include "llsidepaneltaskinfo.h" @@ -98,6 +101,8 @@ BOOL LLSidepanelInventory::postBuild() my_inventory_panel->addHideFolderType(LLFolderType::FT_LANDMARK); my_inventory_panel->addHideFolderType(LLFolderType::FT_FAVORITE); */ + + LLOutfitObserver::instance().addCOFChangedCallback(boost::bind(&LLSidepanelInventory::updateVerbs, this)); } // UI elements from item panel @@ -283,7 +288,7 @@ void LLSidepanelInventory::updateVerbs() case LLInventoryType::IT_OBJECT: case LLInventoryType::IT_ATTACHMENT: mWearBtn->setVisible(TRUE); - mWearBtn->setEnabled(TRUE); + mWearBtn->setEnabled(get_can_item_be_worn(item->getLinkedUUID())); mShopBtn->setVisible(FALSE); break; case LLInventoryType::IT_SOUND: diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp index d9870e81c5..56bb7167b6 100644 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -110,9 +110,9 @@ BOOL LLSidepanelItemInfo::postBuild() { LLSidepanelInventorySubpanel::postBuild(); - childSetPrevalidate("LabelItemName",&LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLLineEditor>("LabelItemName")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); getChild<LLUICtrl>("LabelItemName")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitName,this)); - childSetPrevalidate("LabelItemDesc",&LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLLineEditor>("LabelItemDesc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe); getChild<LLUICtrl>("LabelItemDesc")->setCommitCallback(boost::bind(&LLSidepanelItemInfo:: onCommitDescription, this)); // Creator information getChild<LLUICtrl>("BtnCreator")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onClickCreator,this)); @@ -193,7 +193,7 @@ void LLSidepanelItemInfo::refresh() for(size_t t=0; t<LL_ARRAY_SIZE(no_item_names); ++t) { - childSetEnabled(no_item_names[t],false); + getChildView(no_item_names[t])->setEnabled(false); } const std::string hide_names[]={ @@ -205,7 +205,7 @@ void LLSidepanelItemInfo::refresh() }; for(size_t t=0; t<LL_ARRAY_SIZE(hide_names); ++t) { - childSetVisible(hide_names[t],false); + getChildView(hide_names[t])->setVisible(false); } } @@ -217,7 +217,7 @@ void LLSidepanelItemInfo::refresh() }; for(size_t t=0; t<LL_ARRAY_SIZE(no_edit_mode_names); ++t) { - childSetEnabled(no_edit_mode_names[t],false); + getChildView(no_edit_mode_names[t])->setEnabled(false); } } @@ -265,13 +265,13 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) GP_OBJECT_MANIPULATE) && is_obj_modify && is_complete && not_in_trash; - childSetEnabled("LabelItemNameTitle",TRUE); - childSetEnabled("LabelItemName",is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards - childSetText("LabelItemName",item->getName()); - childSetEnabled("LabelItemDescTitle",TRUE); - childSetEnabled("LabelItemDesc",is_modifiable); - childSetVisible("IconLocked",!is_modifiable); - childSetText("LabelItemDesc",item->getDescription()); + getChildView("LabelItemNameTitle")->setEnabled(TRUE); + getChildView("LabelItemName")->setEnabled(is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards + getChild<LLUICtrl>("LabelItemName")->setValue(item->getName()); + getChildView("LabelItemDescTitle")->setEnabled(TRUE); + getChildView("LabelItemDesc")->setEnabled(is_modifiable); + getChildView("IconLocked")->setVisible(!is_modifiable); + getChild<LLUICtrl>("LabelItemDesc")->setValue(item->getDescription()); ////////////////// // CREATOR NAME // @@ -283,17 +283,17 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) { std::string name; gCacheName->getFullName(item->getCreatorUUID(), name); - childSetEnabled("BtnCreator",TRUE); - childSetEnabled("LabelCreatorTitle",TRUE); - childSetEnabled("LabelCreatorName",TRUE); - childSetText("LabelCreatorName",name); + getChildView("BtnCreator")->setEnabled(TRUE); + getChildView("LabelCreatorTitle")->setEnabled(TRUE); + getChildView("LabelCreatorName")->setEnabled(TRUE); + getChild<LLUICtrl>("LabelCreatorName")->setValue(name); } else { - childSetEnabled("BtnCreator",FALSE); - childSetEnabled("LabelCreatorTitle",FALSE); - childSetEnabled("LabelCreatorName",FALSE); - childSetText("LabelCreatorName",getString("unknown")); + getChildView("BtnCreator")->setEnabled(FALSE); + getChildView("LabelCreatorTitle")->setEnabled(FALSE); + getChildView("LabelCreatorName")->setEnabled(FALSE); + getChild<LLUICtrl>("LabelCreatorName")->setValue(getString("unknown")); } //////////////// @@ -310,17 +310,17 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) { gCacheName->getFullName(perm.getOwner(), name); } - childSetEnabled("BtnOwner",TRUE); - childSetEnabled("LabelOwnerTitle",TRUE); - childSetEnabled("LabelOwnerName",TRUE); - childSetText("LabelOwnerName",name); + getChildView("BtnOwner")->setEnabled(TRUE); + getChildView("LabelOwnerTitle")->setEnabled(TRUE); + getChildView("LabelOwnerName")->setEnabled(TRUE); + getChild<LLUICtrl>("LabelOwnerName")->setValue(name); } else { - childSetEnabled("BtnOwner",FALSE); - childSetEnabled("LabelOwnerTitle",FALSE); - childSetEnabled("LabelOwnerName",FALSE); - childSetText("LabelOwnerName",getString("public")); + getChildView("BtnOwner")->setEnabled(FALSE); + getChildView("LabelOwnerTitle")->setEnabled(FALSE); + getChildView("LabelOwnerName")->setEnabled(FALSE); + getChild<LLUICtrl>("LabelOwnerName")->setValue(getString("public")); } //////////// @@ -329,11 +329,11 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) if (object) { - childSetText("origin",getString("origin_inworld")); + getChild<LLUICtrl>("origin")->setValue(getString("origin_inworld")); } else { - childSetText("origin",getString("origin_inventory")); + getChild<LLUICtrl>("origin")->setValue(getString("origin_inventory")); } ////////////////// @@ -343,7 +343,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) time_t time_utc = item->getCreationDate(); if (0 == time_utc) { - childSetText("LabelAcquiredDate",getString("unknown")); + getChild<LLUICtrl>("LabelAcquiredDate")->setValue(getString("unknown")); } else { @@ -351,7 +351,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) LLSD substitution; substitution["datetime"] = (S32) time_utc; LLStringUtil::format (timeStr, substitution); - childSetText ("LabelAcquiredDate", timeStr); + getChild<LLUICtrl>("LabelAcquiredDate")->setValue(timeStr); } ////////////////////////////////////// @@ -394,12 +394,12 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) { for(size_t t=0; t<LL_ARRAY_SIZE(perm_and_sale_items); ++t) { - childSetVisible(perm_and_sale_items[t],false); + getChildView(perm_and_sale_items[t])->setVisible(false); } for(size_t t=0; t<LL_ARRAY_SIZE(debug_items); ++t) { - childSetVisible(debug_items[t],false); + getChildView(debug_items[t])->setVisible(false); } return; } @@ -407,7 +407,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) { for(size_t t=0; t<LL_ARRAY_SIZE(perm_and_sale_items); ++t) { - childSetVisible(perm_and_sale_items[t],true); + getChildView(perm_and_sale_items[t])->setVisible(true); } } @@ -416,11 +416,11 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) /////////////////////// if(can_agent_manipulate) { - childSetText("OwnerLabel",getString("you_can")); + getChild<LLUICtrl>("OwnerLabel")->setValue(getString("you_can")); } else { - childSetText("OwnerLabel",getString("owner_can")); + getChild<LLUICtrl>("OwnerLabel")->setValue(getString("owner_can")); } U32 base_mask = perm.getMaskBase(); @@ -429,13 +429,13 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) U32 everyone_mask = perm.getMaskEveryone(); U32 next_owner_mask = perm.getMaskNextOwner(); - childSetEnabled("OwnerLabel",TRUE); - childSetEnabled("CheckOwnerModify",FALSE); - childSetValue("CheckOwnerModify",LLSD((BOOL)(owner_mask & PERM_MODIFY))); - childSetEnabled("CheckOwnerCopy",FALSE); - childSetValue("CheckOwnerCopy",LLSD((BOOL)(owner_mask & PERM_COPY))); - childSetEnabled("CheckOwnerTransfer",FALSE); - childSetValue("CheckOwnerTransfer",LLSD((BOOL)(owner_mask & PERM_TRANSFER))); + getChildView("OwnerLabel")->setEnabled(TRUE); + getChildView("CheckOwnerModify")->setEnabled(FALSE); + getChild<LLUICtrl>("CheckOwnerModify")->setValue(LLSD((BOOL)(owner_mask & PERM_MODIFY))); + getChildView("CheckOwnerCopy")->setEnabled(FALSE); + getChild<LLUICtrl>("CheckOwnerCopy")->setValue(LLSD((BOOL)(owner_mask & PERM_COPY))); + getChildView("CheckOwnerTransfer")->setEnabled(FALSE); + getChild<LLUICtrl>("CheckOwnerTransfer")->setValue(LLSD((BOOL)(owner_mask & PERM_TRANSFER))); /////////////////////// // DEBUG PERMISSIONS // @@ -459,39 +459,39 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) perm_string = "B: "; perm_string += mask_to_string(base_mask); - childSetText("BaseMaskDebug",perm_string); - childSetVisible("BaseMaskDebug",TRUE); + getChild<LLUICtrl>("BaseMaskDebug")->setValue(perm_string); + getChildView("BaseMaskDebug")->setVisible(TRUE); perm_string = "O: "; perm_string += mask_to_string(owner_mask); - childSetText("OwnerMaskDebug",perm_string); - childSetVisible("OwnerMaskDebug",TRUE); + getChild<LLUICtrl>("OwnerMaskDebug")->setValue(perm_string); + getChildView("OwnerMaskDebug")->setVisible(TRUE); perm_string = "G"; perm_string += overwrite_group ? "*: " : ": "; perm_string += mask_to_string(group_mask); - childSetText("GroupMaskDebug",perm_string); - childSetVisible("GroupMaskDebug",TRUE); + getChild<LLUICtrl>("GroupMaskDebug")->setValue(perm_string); + getChildView("GroupMaskDebug")->setVisible(TRUE); perm_string = "E"; perm_string += overwrite_everyone ? "*: " : ": "; perm_string += mask_to_string(everyone_mask); - childSetText("EveryoneMaskDebug",perm_string); - childSetVisible("EveryoneMaskDebug",TRUE); + getChild<LLUICtrl>("EveryoneMaskDebug")->setValue(perm_string); + getChildView("EveryoneMaskDebug")->setVisible(TRUE); perm_string = "N"; perm_string += slam_perm ? "*: " : ": "; perm_string += mask_to_string(next_owner_mask); - childSetText("NextMaskDebug",perm_string); - childSetVisible("NextMaskDebug",TRUE); + getChild<LLUICtrl>("NextMaskDebug")->setValue(perm_string); + getChildView("NextMaskDebug")->setVisible(TRUE); } else { - childSetVisible("BaseMaskDebug",FALSE); - childSetVisible("OwnerMaskDebug",FALSE); - childSetVisible("GroupMaskDebug",FALSE); - childSetVisible("EveryoneMaskDebug",FALSE); - childSetVisible("NextMaskDebug",FALSE); + getChildView("BaseMaskDebug")->setVisible(FALSE); + getChildView("OwnerMaskDebug")->setVisible(FALSE); + getChildView("GroupMaskDebug")->setVisible(FALSE); + getChildView("EveryoneMaskDebug")->setVisible(FALSE); + getChildView("NextMaskDebug")->setVisible(FALSE); } ///////////// @@ -501,18 +501,18 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) // Check for ability to change values. if (is_link || cannot_restrict_permissions) { - childSetEnabled("CheckShareWithGroup",FALSE); - childSetEnabled("CheckEveryoneCopy",FALSE); + getChildView("CheckShareWithGroup")->setEnabled(FALSE); + getChildView("CheckEveryoneCopy")->setEnabled(FALSE); } else if (is_obj_modify && can_agent_manipulate) { - childSetEnabled("CheckShareWithGroup",TRUE); - childSetEnabled("CheckEveryoneCopy",(owner_mask & PERM_COPY) && (owner_mask & PERM_TRANSFER)); + getChildView("CheckShareWithGroup")->setEnabled(TRUE); + getChildView("CheckEveryoneCopy")->setEnabled((owner_mask & PERM_COPY) && (owner_mask & PERM_TRANSFER)); } else { - childSetEnabled("CheckShareWithGroup",FALSE); - childSetEnabled("CheckEveryoneCopy",FALSE); + getChildView("CheckShareWithGroup")->setEnabled(FALSE); + getChildView("CheckEveryoneCopy")->setEnabled(FALSE); } // Set values. @@ -522,7 +522,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) if (is_group_copy && is_group_modify && is_group_move) { - childSetValue("CheckShareWithGroup",LLSD((BOOL)TRUE)); + getChild<LLUICtrl>("CheckShareWithGroup")->setValue(LLSD((BOOL)TRUE)); LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup"); if(ctl) @@ -532,7 +532,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) } else if (!is_group_copy && !is_group_modify && !is_group_move) { - childSetValue("CheckShareWithGroup",LLSD((BOOL)FALSE)); + getChild<LLUICtrl>("CheckShareWithGroup")->setValue(LLSD((BOOL)FALSE)); LLCheckBoxCtrl* ctl = getChild<LLCheckBoxCtrl>("CheckShareWithGroup"); if(ctl) { @@ -549,7 +549,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) } } - childSetValue("CheckEveryoneCopy",LLSD((BOOL)(everyone_mask & PERM_COPY))); + getChild<LLUICtrl>("CheckEveryoneCopy")->setValue(LLSD((BOOL)(everyone_mask & PERM_COPY))); /////////////// // SALE INFO // @@ -561,48 +561,48 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) if (is_obj_modify && can_agent_sell && gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE)) { - childSetEnabled("SaleLabel",is_complete); - childSetEnabled("CheckPurchase",is_complete); + getChildView("SaleLabel")->setEnabled(is_complete); + getChildView("CheckPurchase")->setEnabled(is_complete); - childSetEnabled("NextOwnerLabel",TRUE); - childSetEnabled("CheckNextOwnerModify",(base_mask & PERM_MODIFY) && !cannot_restrict_permissions); - childSetEnabled("CheckNextOwnerCopy",(base_mask & PERM_COPY) && !cannot_restrict_permissions); - childSetEnabled("CheckNextOwnerTransfer",(next_owner_mask & PERM_COPY) && !cannot_restrict_permissions); + getChildView("NextOwnerLabel")->setEnabled(TRUE); + getChildView("CheckNextOwnerModify")->setEnabled((base_mask & PERM_MODIFY) && !cannot_restrict_permissions); + getChildView("CheckNextOwnerCopy")->setEnabled((base_mask & PERM_COPY) && !cannot_restrict_permissions); + getChildView("CheckNextOwnerTransfer")->setEnabled((next_owner_mask & PERM_COPY) && !cannot_restrict_permissions); - childSetEnabled("TextPrice",is_complete && is_for_sale); - childSetEnabled("Edit Cost",is_complete && is_for_sale); + getChildView("TextPrice")->setEnabled(is_complete && is_for_sale); + getChildView("Edit Cost")->setEnabled(is_complete && is_for_sale); } else { - childSetEnabled("SaleLabel",FALSE); - childSetEnabled("CheckPurchase",FALSE); + getChildView("SaleLabel")->setEnabled(FALSE); + getChildView("CheckPurchase")->setEnabled(FALSE); - childSetEnabled("NextOwnerLabel",FALSE); - childSetEnabled("CheckNextOwnerModify",FALSE); - childSetEnabled("CheckNextOwnerCopy",FALSE); - childSetEnabled("CheckNextOwnerTransfer",FALSE); + getChildView("NextOwnerLabel")->setEnabled(FALSE); + getChildView("CheckNextOwnerModify")->setEnabled(FALSE); + getChildView("CheckNextOwnerCopy")->setEnabled(FALSE); + getChildView("CheckNextOwnerTransfer")->setEnabled(FALSE); - childSetEnabled("TextPrice",FALSE); - childSetEnabled("Edit Cost",FALSE); + getChildView("TextPrice")->setEnabled(FALSE); + getChildView("Edit Cost")->setEnabled(FALSE); } // Set values. - childSetValue("CheckPurchase", is_for_sale); - childSetEnabled("combobox sale copy", is_for_sale); - childSetEnabled("Edit Cost", is_for_sale); - childSetValue("CheckNextOwnerModify",LLSD(BOOL(next_owner_mask & PERM_MODIFY))); - childSetValue("CheckNextOwnerCopy",LLSD(BOOL(next_owner_mask & PERM_COPY))); - childSetValue("CheckNextOwnerTransfer",LLSD(BOOL(next_owner_mask & PERM_TRANSFER))); + getChild<LLUICtrl>("CheckPurchase")->setValue(is_for_sale); + getChildView("combobox sale copy")->setEnabled(is_for_sale); + getChildView("Edit Cost")->setEnabled(is_for_sale); + getChild<LLUICtrl>("CheckNextOwnerModify")->setValue(LLSD(BOOL(next_owner_mask & PERM_MODIFY))); + getChild<LLUICtrl>("CheckNextOwnerCopy")->setValue(LLSD(BOOL(next_owner_mask & PERM_COPY))); + getChild<LLUICtrl>("CheckNextOwnerTransfer")->setValue(LLSD(BOOL(next_owner_mask & PERM_TRANSFER))); if (is_for_sale) { S32 numerical_price; numerical_price = sale_info.getSalePrice(); - childSetText("Edit Cost",llformat("%d",numerical_price)); + getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",numerical_price)); } else { - childSetText("Edit Cost",llformat("%d",0)); + getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",0)); } } @@ -823,10 +823,10 @@ void LLSidepanelItemInfo::updateSaleInfo() LLSaleInfo sale_info(item->getSaleInfo()); if(!gAgent.allowOperation(PERM_TRANSFER, item->getPermissions(), GP_OBJECT_SET_SALE)) { - childSetValue("CheckPurchase",LLSD((BOOL)FALSE)); + getChild<LLUICtrl>("CheckPurchase")->setValue(LLSD((BOOL)FALSE)); } - if((BOOL)childGetValue("CheckPurchase")) + if((BOOL)getChild<LLUICtrl>("CheckPurchase")->getValue()) { // turn on sale info LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_COPY; diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp index 3ab71eac64..2755a1c3ae 100644 --- a/indra/newview/llsidepaneltaskinfo.cpp +++ b/indra/newview/llsidepaneltaskinfo.cpp @@ -107,9 +107,9 @@ BOOL LLSidepanelTaskInfo::postBuild() mLabelGroupName = getChild<LLNameBox>("Group Name Proxy"); childSetCommitCallback("Object Name", LLSidepanelTaskInfo::onCommitName,this); - childSetPrevalidate("Object Name", LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLLineEditor>("Object Name")->setPrevalidate(LLTextValidate::validateASCIIPrintableNoPipe); childSetCommitCallback("Object Description", LLSidepanelTaskInfo::onCommitDesc,this); - childSetPrevalidate("Object Description", LLTextValidate::validateASCIIPrintableNoPipe); + getChild<LLLineEditor>("Object Description")->setPrevalidate(LLTextValidate::validateASCIIPrintableNoPipe); getChild<LLUICtrl>("button set group")->setCommitCallback(boost::bind(&LLSidepanelTaskInfo::onClickGroup,this)); childSetCommitCallback("checkbox share with group", &LLSidepanelTaskInfo::onCommitGroupShare,this); childSetAction("button deed", &LLSidepanelTaskInfo::onClickDeedToGroup,this); @@ -144,81 +144,81 @@ BOOL LLSidepanelTaskInfo::postBuild() void LLSidepanelTaskInfo::disableAll() { - childSetEnabled("perm_modify", FALSE); - childSetText("perm_modify", LLStringUtil::null); - - childSetEnabled("Creator:", FALSE); - childSetText("Creator Name", LLStringUtil::null); - childSetEnabled("Creator Name", FALSE); - - childSetEnabled("Owner:", FALSE); - childSetText("Owner Name", LLStringUtil::null); - childSetEnabled("Owner Name", FALSE); - - childSetEnabled("Group:", FALSE); - childSetText("Group Name", LLStringUtil::null); - childSetEnabled("Group Name", FALSE); - childSetEnabled("button set group", FALSE); - - childSetText("Object Name", LLStringUtil::null); - childSetEnabled("Object Name", FALSE); - childSetEnabled("Name:", FALSE); - childSetText("Group Name", LLStringUtil::null); - childSetEnabled("Group Name", FALSE); - childSetEnabled("Description:", FALSE); - childSetText("Object Description", LLStringUtil::null); - childSetEnabled("Object Description", FALSE); - - childSetEnabled("Permissions:", FALSE); + getChildView("perm_modify")->setEnabled(FALSE); + getChild<LLUICtrl>("perm_modify")->setValue(LLStringUtil::null); + + getChildView("Creator:")->setEnabled(FALSE); + getChild<LLUICtrl>("Creator Name")->setValue(LLStringUtil::null); + getChildView("Creator Name")->setEnabled(FALSE); + + getChildView("Owner:")->setEnabled(FALSE); + getChild<LLUICtrl>("Owner Name")->setValue(LLStringUtil::null); + getChildView("Owner Name")->setEnabled(FALSE); + + getChildView("Group:")->setEnabled(FALSE); + getChild<LLUICtrl>("Group Name")->setValue(LLStringUtil::null); + getChildView("Group Name")->setEnabled(FALSE); + getChildView("button set group")->setEnabled(FALSE); + + getChild<LLUICtrl>("Object Name")->setValue(LLStringUtil::null); + getChildView("Object Name")->setEnabled(FALSE); + getChildView("Name:")->setEnabled(FALSE); + getChild<LLUICtrl>("Group Name")->setValue(LLStringUtil::null); + getChildView("Group Name")->setEnabled(FALSE); + getChildView("Description:")->setEnabled(FALSE); + getChild<LLUICtrl>("Object Description")->setValue(LLStringUtil::null); + getChildView("Object Description")->setEnabled(FALSE); + + getChildView("Permissions:")->setEnabled(FALSE); - childSetValue("checkbox share with group", FALSE); - childSetEnabled("checkbox share with group", FALSE); - childSetEnabled("button deed", FALSE); + getChild<LLUICtrl>("checkbox share with group")->setValue(FALSE); + getChildView("checkbox share with group")->setEnabled(FALSE); + getChildView("button deed")->setEnabled(FALSE); - childSetValue("checkbox allow everyone move", FALSE); - childSetEnabled("checkbox allow everyone move", FALSE); - childSetValue("checkbox allow everyone copy", FALSE); - childSetEnabled("checkbox allow everyone copy", FALSE); + getChild<LLUICtrl>("checkbox allow everyone move")->setValue(FALSE); + getChildView("checkbox allow everyone move")->setEnabled(FALSE); + getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(FALSE); + getChildView("checkbox allow everyone copy")->setEnabled(FALSE); //Next owner can: - childSetEnabled("Next owner can:", FALSE); - childSetValue("checkbox next owner can modify", FALSE); - childSetEnabled("checkbox next owner can modify", FALSE); - childSetValue("checkbox next owner can copy", FALSE); - childSetEnabled("checkbox next owner can copy", FALSE); - childSetValue("checkbox next owner can transfer", FALSE); - childSetEnabled("checkbox next owner can transfer", FALSE); + getChildView("Next owner can:")->setEnabled(FALSE); + getChild<LLUICtrl>("checkbox next owner can modify")->setValue(FALSE); + getChildView("checkbox next owner can modify")->setEnabled(FALSE); + getChild<LLUICtrl>("checkbox next owner can copy")->setValue(FALSE); + getChildView("checkbox next owner can copy")->setEnabled(FALSE); + getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(FALSE); + getChildView("checkbox next owner can transfer")->setEnabled(FALSE); //checkbox for sale - childSetValue("checkbox for sale", FALSE); - childSetEnabled("checkbox for sale", FALSE); + getChild<LLUICtrl>("checkbox for sale")->setValue(FALSE); + getChildView("checkbox for sale")->setEnabled(FALSE); //checkbox include in search - childSetValue("search_check", FALSE); - childSetEnabled("search_check", FALSE); + getChild<LLUICtrl>("search_check")->setValue(FALSE); + getChildView("search_check")->setEnabled(FALSE); LLComboBox* combo_sale_type = getChild<LLComboBox>("sale type"); combo_sale_type->setValue(LLSaleInfo::FS_COPY); combo_sale_type->setEnabled(FALSE); - childSetEnabled("Cost", FALSE); - childSetText("Cost", getString("Cost Default")); - childSetText("Edit Cost", LLStringUtil::null); - childSetEnabled("Edit Cost", FALSE); + getChildView("Cost")->setEnabled(FALSE); + getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default")); + getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null); + getChildView("Edit Cost")->setEnabled(FALSE); - childSetEnabled("label click action", FALSE); + getChildView("label click action")->setEnabled(FALSE); LLComboBox* combo_click_action = getChild<LLComboBox>("clickaction"); if (combo_click_action) { combo_click_action->setEnabled(FALSE); combo_click_action->clear(); } - childSetVisible("B:", FALSE); - childSetVisible("O:", FALSE); - childSetVisible("G:", FALSE); - childSetVisible("E:", FALSE); - childSetVisible("N:", FALSE); - childSetVisible("F:", FALSE); + getChildView("B:")->setVisible( FALSE); + getChildView("O:")->setVisible( FALSE); + getChildView("G:")->setVisible( FALSE); + getChildView("E:")->setVisible( FALSE); + getChildView("N:")->setVisible( FALSE); + getChildView("F:")->setVisible( FALSE); mOpenBtn->setEnabled(FALSE); mPayBtn->setEnabled(FALSE); @@ -289,23 +289,23 @@ void LLSidepanelTaskInfo::refresh() { ++string_index; } - childSetEnabled("perm_modify", TRUE); - childSetText("perm_modify", MODIFY_INFO_STRINGS[string_index]); + getChildView("perm_modify")->setEnabled(TRUE); + getChild<LLUICtrl>("perm_modify")->setValue(MODIFY_INFO_STRINGS[string_index]); - childSetEnabled("Permissions:", TRUE); + getChildView("Permissions:")->setEnabled(TRUE); // Update creator text field - childSetEnabled("Creator:", TRUE); + getChildView("Creator:")->setEnabled(TRUE); BOOL creators_identical; std::string creator_name; creators_identical = LLSelectMgr::getInstance()->selectGetCreator(mCreatorID, creator_name); - childSetText("Creator Name", creator_name); - childSetEnabled("Creator Name", TRUE); + getChild<LLUICtrl>("Creator Name")->setValue(creator_name); + getChildView("Creator Name")->setEnabled(TRUE); // Update owner text field - childSetEnabled("Owner:", TRUE); + getChildView("Owner:")->setEnabled(TRUE); std::string owner_name; const BOOL owners_identical = LLSelectMgr::getInstance()->selectGetOwner(mOwnerID, owner_name); @@ -330,12 +330,12 @@ void LLSidepanelTaskInfo::refresh() } } } - childSetText("Owner Name", owner_name); - childSetEnabled("Owner Name", TRUE); + getChild<LLUICtrl>("Owner Name")->setValue(owner_name); + getChildView("Owner Name")->setEnabled(TRUE); // update group text field - childSetEnabled("Group:", TRUE); - childSetText("Group Name", LLStringUtil::null); + getChildView("Group:")->setEnabled(TRUE); + getChild<LLUICtrl>("Group Name")->setValue(LLStringUtil::null); LLUUID group_id; BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id); if (groups_identical) @@ -356,18 +356,18 @@ void LLSidepanelTaskInfo::refresh() } } - childSetEnabled("button set group", owners_identical && (mOwnerID == gAgent.getID())); + getChildView("button set group")->setEnabled(owners_identical && (mOwnerID == gAgent.getID())); - childSetEnabled("Name:", TRUE); + getChildView("Name:")->setEnabled(TRUE); LLLineEditor* LineEditorObjectName = getChild<LLLineEditor>("Object Name"); - childSetEnabled("Description:", TRUE); + getChildView("Description:")->setEnabled(TRUE); LLLineEditor* LineEditorObjectDesc = getChild<LLLineEditor>("Object Description"); if (is_one_object) { if (!LineEditorObjectName->hasFocus()) { - childSetText("Object Name",nodep->mName); + getChild<LLUICtrl>("Object Name")->setValue(nodep->mName); } if (LineEditorObjectDesc) @@ -380,7 +380,7 @@ void LLSidepanelTaskInfo::refresh() } else { - childSetText("Object Name", LLStringUtil::null); + getChild<LLUICtrl>("Object Name")->setValue(LLStringUtil::null); LineEditorObjectDesc->setText(LLStringUtil::null); } @@ -392,13 +392,13 @@ void LLSidepanelTaskInfo::refresh() } if (edit_name_desc) { - childSetEnabled("Object Name", TRUE); - childSetEnabled("Object Description", TRUE); + getChildView("Object Name")->setEnabled(TRUE); + getChildView("Object Description")->setEnabled(TRUE); } else { - childSetEnabled("Object Name", FALSE); - childSetEnabled("Object Description", FALSE); + getChildView("Object Name")->setEnabled(FALSE); + getChildView("Object Description")->setEnabled(FALSE); } S32 total_sale_price = 0; @@ -420,9 +420,9 @@ void LLSidepanelTaskInfo::refresh() if (!owners_identical) { - childSetEnabled("Cost", FALSE); - childSetText("Edit Cost", LLStringUtil::null); - childSetEnabled("Edit Cost", FALSE); + getChildView("Cost")->setEnabled(FALSE); + getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null); + getChildView("Edit Cost")->setEnabled(FALSE); } // You own these objects. else if (self_owned || (group_owned && gAgent.hasPowerInGroup(group_id,GP_OBJECT_SET_SALE))) @@ -430,11 +430,11 @@ void LLSidepanelTaskInfo::refresh() // If there are multiple items for sale then set text to PRICE PER UNIT. if (num_for_sale > 1) { - childSetText("Cost", getString("Cost Per Unit")); + getChild<LLUICtrl>("Cost")->setValue(getString("Cost Per Unit")); } else { - childSetText("Cost", getString("Cost Default")); + getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default")); } LLSpinCtrl *edit_price = getChild<LLSpinCtrl>("Edit Cost"); @@ -458,35 +458,35 @@ void LLSidepanelTaskInfo::refresh() // The edit fields are only enabled if you can sell this object // and the sale price is not mixed. BOOL enable_edit = (num_for_sale && can_transfer) ? !is_for_sale_mixed : FALSE; - childSetEnabled("Cost", enable_edit); - childSetEnabled("Edit Cost", enable_edit); + getChildView("Cost")->setEnabled(enable_edit); + getChildView("Edit Cost")->setEnabled(enable_edit); } // Someone, not you, owns these objects. else if (!public_owned) { - childSetEnabled("Cost", FALSE); - childSetEnabled("Edit Cost", FALSE); + getChildView("Cost")->setEnabled(FALSE); + getChildView("Edit Cost")->setEnabled(FALSE); // Don't show a price if none of the items are for sale. if (num_for_sale) - childSetText("Edit Cost", llformat("%d",total_sale_price)); + getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",total_sale_price)); else - childSetText("Edit Cost", LLStringUtil::null); + getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null); // If multiple items are for sale, set text to TOTAL PRICE. if (num_for_sale > 1) - childSetText("Cost", getString("Cost Total")); + getChild<LLUICtrl>("Cost")->setValue(getString("Cost Total")); else - childSetText("Cost", getString("Cost Default")); + getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default")); } // This is a public object. else { - childSetEnabled("Cost", FALSE); - childSetText("Cost", getString("Cost Default")); + getChildView("Cost")->setEnabled(FALSE); + getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default")); - childSetText("Edit Cost", LLStringUtil::null); - childSetEnabled("Edit Cost", FALSE); + getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null); + getChildView("Edit Cost")->setEnabled(FALSE); } // Enable and disable the permissions checkboxes @@ -528,20 +528,20 @@ void LLSidepanelTaskInfo::refresh() { if (valid_base_perms) { - childSetText("B:", "B: " + mask_to_string(base_mask_on)); - childSetVisible("B:", TRUE); + getChild<LLUICtrl>("B:")->setValue("B: " + mask_to_string(base_mask_on)); + getChildView("B:")->setVisible( TRUE); - childSetText("O:", "O: " + mask_to_string(owner_mask_on)); - childSetVisible("O:", TRUE); + getChild<LLUICtrl>("O:")->setValue("O: " + mask_to_string(owner_mask_on)); + getChildView("O:")->setVisible( TRUE); - childSetText("G:", "G: " + mask_to_string(group_mask_on)); - childSetVisible("G:", TRUE); + getChild<LLUICtrl>("G:")->setValue("G: " + mask_to_string(group_mask_on)); + getChildView("G:")->setVisible( TRUE); - childSetText("E:", "E: " + mask_to_string(everyone_mask_on)); - childSetVisible("E:", TRUE); + getChild<LLUICtrl>("E:")->setValue("E: " + mask_to_string(everyone_mask_on)); + getChildView("E:")->setVisible( TRUE); - childSetText("N:", "N: " + mask_to_string(next_owner_mask_on)); - childSetVisible("N:", TRUE); + getChild<LLUICtrl>("N:")->setValue("N: " + mask_to_string(next_owner_mask_on)); + getChildView("N:")->setVisible( TRUE); } U32 flag_mask = 0x0; @@ -550,17 +550,17 @@ void LLSidepanelTaskInfo::refresh() if (objectp->permCopy()) flag_mask |= PERM_COPY; if (objectp->permTransfer()) flag_mask |= PERM_TRANSFER; - childSetText("F:", "F:" + mask_to_string(flag_mask)); - childSetVisible("F:", TRUE); + getChild<LLUICtrl>("F:")->setValue("F:" + mask_to_string(flag_mask)); + getChildView("F:")->setVisible( TRUE); } else { - childSetVisible("B:", FALSE); - childSetVisible("O:", FALSE); - childSetVisible("G:", FALSE); - childSetVisible("E:", FALSE); - childSetVisible("N:", FALSE); - childSetVisible("F:", FALSE); + getChildView("B:")->setVisible( FALSE); + getChildView("O:")->setVisible( FALSE); + getChildView("G:")->setVisible( FALSE); + getChildView("E:")->setVisible( FALSE); + getChildView("N:")->setVisible( FALSE); + getChildView("F:")->setVisible( FALSE); } BOOL has_change_perm_ability = FALSE; @@ -580,65 +580,65 @@ void LLSidepanelTaskInfo::refresh() if (!has_change_perm_ability && !has_change_sale_ability && !root_selected) { // ...must select root to choose permissions - childSetValue("perm_modify", getString("text modify warning")); + getChild<LLUICtrl>("perm_modify")->setValue(getString("text modify warning")); } if (has_change_perm_ability) { - childSetEnabled("checkbox share with group", TRUE); - childSetEnabled("checkbox allow everyone move", owner_mask_on & PERM_MOVE); - childSetEnabled("checkbox allow everyone copy", owner_mask_on & PERM_COPY && owner_mask_on & PERM_TRANSFER); + getChildView("checkbox share with group")->setEnabled(TRUE); + getChildView("checkbox allow everyone move")->setEnabled(owner_mask_on & PERM_MOVE); + getChildView("checkbox allow everyone copy")->setEnabled(owner_mask_on & PERM_COPY && owner_mask_on & PERM_TRANSFER); } else { - childSetEnabled("checkbox share with group", FALSE); - childSetEnabled("checkbox allow everyone move", FALSE); - childSetEnabled("checkbox allow everyone copy", FALSE); + getChildView("checkbox share with group")->setEnabled(FALSE); + getChildView("checkbox allow everyone move")->setEnabled(FALSE); + getChildView("checkbox allow everyone copy")->setEnabled(FALSE); } if (has_change_sale_ability && (owner_mask_on & PERM_TRANSFER)) { - childSetEnabled("checkbox for sale", can_transfer || (!can_transfer && num_for_sale)); + getChildView("checkbox for sale")->setEnabled(can_transfer || (!can_transfer && num_for_sale)); // Set the checkbox to tentative if the prices of each object selected // are not the same. - childSetTentative("checkbox for sale", is_for_sale_mixed); - childSetEnabled("sale type", num_for_sale && can_transfer && !is_sale_price_mixed); + getChild<LLUICtrl>("checkbox for sale")->setTentative( is_for_sale_mixed); + getChildView("sale type")->setEnabled(num_for_sale && can_transfer && !is_sale_price_mixed); - childSetEnabled("Next owner can:", TRUE); - childSetEnabled("checkbox next owner can modify", base_mask_on & PERM_MODIFY); - childSetEnabled("checkbox next owner can copy", base_mask_on & PERM_COPY); - childSetEnabled("checkbox next owner can transfer", next_owner_mask_on & PERM_COPY); + getChildView("Next owner can:")->setEnabled(TRUE); + getChildView("checkbox next owner can modify")->setEnabled(base_mask_on & PERM_MODIFY); + getChildView("checkbox next owner can copy")->setEnabled(base_mask_on & PERM_COPY); + getChildView("checkbox next owner can transfer")->setEnabled(next_owner_mask_on & PERM_COPY); } else { - childSetEnabled("checkbox for sale", FALSE); - childSetEnabled("sale type", FALSE); + getChildView("checkbox for sale")->setEnabled(FALSE); + getChildView("sale type")->setEnabled(FALSE); - childSetEnabled("Next owner can:", FALSE); - childSetEnabled("checkbox next owner can modify", FALSE); - childSetEnabled("checkbox next owner can copy", FALSE); - childSetEnabled("checkbox next owner can transfer", FALSE); + getChildView("Next owner can:")->setEnabled(FALSE); + getChildView("checkbox next owner can modify")->setEnabled(FALSE); + getChildView("checkbox next owner can copy")->setEnabled(FALSE); + getChildView("checkbox next owner can transfer")->setEnabled(FALSE); } if (valid_group_perms) { if ((group_mask_on & PERM_COPY) && (group_mask_on & PERM_MODIFY) && (group_mask_on & PERM_MOVE)) { - childSetValue("checkbox share with group", TRUE); - childSetTentative("checkbox share with group", FALSE); - childSetEnabled("button deed", gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer); + getChild<LLUICtrl>("checkbox share with group")->setValue(TRUE); + getChild<LLUICtrl>("checkbox share with group")->setTentative( FALSE); + getChildView("button deed")->setEnabled(gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer); } else if ((group_mask_off & PERM_COPY) && (group_mask_off & PERM_MODIFY) && (group_mask_off & PERM_MOVE)) { - childSetValue("checkbox share with group", FALSE); - childSetTentative("checkbox share with group", FALSE); - childSetEnabled("button deed", FALSE); + getChild<LLUICtrl>("checkbox share with group")->setValue(FALSE); + getChild<LLUICtrl>("checkbox share with group")->setTentative( FALSE); + getChildView("button deed")->setEnabled(FALSE); } else { - childSetValue("checkbox share with group", TRUE); - childSetTentative("checkbox share with group", TRUE); - childSetEnabled("button deed", gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (group_mask_on & PERM_MOVE) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer); + getChild<LLUICtrl>("checkbox share with group")->setValue(TRUE); + getChild<LLUICtrl>("checkbox share with group")->setTentative( TRUE); + getChildView("button deed")->setEnabled(gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && (group_mask_on & PERM_MOVE) && (owner_mask_on & PERM_TRANSFER) && !group_owned && can_transfer); } } @@ -647,35 +647,35 @@ void LLSidepanelTaskInfo::refresh() // Move if (everyone_mask_on & PERM_MOVE) { - childSetValue("checkbox allow everyone move", TRUE); - childSetTentative("checkbox allow everyone move", FALSE); + getChild<LLUICtrl>("checkbox allow everyone move")->setValue(TRUE); + getChild<LLUICtrl>("checkbox allow everyone move")->setTentative( FALSE); } else if (everyone_mask_off & PERM_MOVE) { - childSetValue("checkbox allow everyone move", FALSE); - childSetTentative("checkbox allow everyone move", FALSE); + getChild<LLUICtrl>("checkbox allow everyone move")->setValue(FALSE); + getChild<LLUICtrl>("checkbox allow everyone move")->setTentative( FALSE); } else { - childSetValue("checkbox allow everyone move", TRUE); - childSetTentative("checkbox allow everyone move", TRUE); + getChild<LLUICtrl>("checkbox allow everyone move")->setValue(TRUE); + getChild<LLUICtrl>("checkbox allow everyone move")->setTentative( TRUE); } // Copy == everyone can't copy if (everyone_mask_on & PERM_COPY) { - childSetValue("checkbox allow everyone copy", TRUE); - childSetTentative("checkbox allow everyone copy", !can_copy || !can_transfer); + getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(TRUE); + getChild<LLUICtrl>("checkbox allow everyone copy")->setTentative( !can_copy || !can_transfer); } else if (everyone_mask_off & PERM_COPY) { - childSetValue("checkbox allow everyone copy", FALSE); - childSetTentative("checkbox allow everyone copy", FALSE); + getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(FALSE); + getChild<LLUICtrl>("checkbox allow everyone copy")->setTentative( FALSE); } else { - childSetValue("checkbox allow everyone copy", TRUE); - childSetTentative("checkbox allow everyone copy", TRUE); + getChild<LLUICtrl>("checkbox allow everyone copy")->setValue(TRUE); + getChild<LLUICtrl>("checkbox allow everyone copy")->setTentative( TRUE); } } @@ -684,52 +684,52 @@ void LLSidepanelTaskInfo::refresh() // Modify == next owner canot modify if (next_owner_mask_on & PERM_MODIFY) { - childSetValue("checkbox next owner can modify", TRUE); - childSetTentative("checkbox next owner can modify", FALSE); + getChild<LLUICtrl>("checkbox next owner can modify")->setValue(TRUE); + getChild<LLUICtrl>("checkbox next owner can modify")->setTentative( FALSE); } else if (next_owner_mask_off & PERM_MODIFY) { - childSetValue("checkbox next owner can modify", FALSE); - childSetTentative("checkbox next owner can modify", FALSE); + getChild<LLUICtrl>("checkbox next owner can modify")->setValue(FALSE); + getChild<LLUICtrl>("checkbox next owner can modify")->setTentative( FALSE); } else { - childSetValue("checkbox next owner can modify", TRUE); - childSetTentative("checkbox next owner can modify", TRUE); + getChild<LLUICtrl>("checkbox next owner can modify")->setValue(TRUE); + getChild<LLUICtrl>("checkbox next owner can modify")->setTentative( TRUE); } // Copy == next owner cannot copy if (next_owner_mask_on & PERM_COPY) { - childSetValue("checkbox next owner can copy", TRUE); - childSetTentative("checkbox next owner can copy", !can_copy); + getChild<LLUICtrl>("checkbox next owner can copy")->setValue(TRUE); + getChild<LLUICtrl>("checkbox next owner can copy")->setTentative( !can_copy); } else if (next_owner_mask_off & PERM_COPY) { - childSetValue("checkbox next owner can copy", FALSE); - childSetTentative("checkbox next owner can copy", FALSE); + getChild<LLUICtrl>("checkbox next owner can copy")->setValue(FALSE); + getChild<LLUICtrl>("checkbox next owner can copy")->setTentative( FALSE); } else { - childSetValue("checkbox next owner can copy", TRUE); - childSetTentative("checkbox next owner can copy", TRUE); + getChild<LLUICtrl>("checkbox next owner can copy")->setValue(TRUE); + getChild<LLUICtrl>("checkbox next owner can copy")->setTentative( TRUE); } // Transfer == next owner cannot transfer if (next_owner_mask_on & PERM_TRANSFER) { - childSetValue("checkbox next owner can transfer", TRUE); - childSetTentative("checkbox next owner can transfer", !can_transfer); + getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(TRUE); + getChild<LLUICtrl>("checkbox next owner can transfer")->setTentative( !can_transfer); } else if (next_owner_mask_off & PERM_TRANSFER) { - childSetValue("checkbox next owner can transfer", FALSE); - childSetTentative("checkbox next owner can transfer", FALSE); + getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(FALSE); + getChild<LLUICtrl>("checkbox next owner can transfer")->setTentative( FALSE); } else { - childSetValue("checkbox next owner can transfer", TRUE); - childSetTentative("checkbox next owner can transfer", TRUE); + getChild<LLUICtrl>("checkbox next owner can transfer")->setValue(TRUE); + getChild<LLUICtrl>("checkbox next owner can transfer")->setTentative( TRUE); } } @@ -751,7 +751,7 @@ void LLSidepanelTaskInfo::refresh() combo_sale_type->setTentative( TRUE); // unfortunately this doesn't do anything at the moment. } - childSetValue("checkbox for sale", (num_for_sale != 0)); + getChild<LLUICtrl>("checkbox for sale")->setValue((num_for_sale != 0)); // HACK: There are some old objects in world that are set for sale, // but are no-transfer. We need to let users turn for-sale off, but only @@ -761,7 +761,7 @@ void LLSidepanelTaskInfo::refresh() { if (num_for_sale && has_change_sale_ability) { - childSetEnabled("checkbox for sale", true); + getChildView("checkbox for sale")->setEnabled(true); } } @@ -769,9 +769,9 @@ void LLSidepanelTaskInfo::refresh() const BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ); bool include_in_search; const BOOL all_include_in_search = LLSelectMgr::getInstance()->selectionGetIncludeInSearch(&include_in_search); - childSetEnabled("search_check", has_change_sale_ability && all_volume); - childSetValue("search_check", include_in_search); - childSetTentative("search_check", !all_include_in_search); + getChildView("search_check")->setEnabled(has_change_sale_ability && all_volume); + getChild<LLUICtrl>("search_check")->setValue(include_in_search); + getChild<LLUICtrl>("search_check")->setTentative( !all_include_in_search); // Click action (touch, sit, buy) U8 click_action = 0; @@ -783,8 +783,8 @@ void LLSidepanelTaskInfo::refresh() ComboClickAction->setCurrentByIndex((S32)click_action); } } - childSetEnabled("label click action", is_perm_modify && all_volume); - childSetEnabled("clickaction", is_perm_modify && all_volume); + getChildView("label click action")->setEnabled(is_perm_modify && all_volume); + getChildView("clickaction")->setEnabled(is_perm_modify && all_volume); if (!getIsEditing()) { @@ -810,7 +810,7 @@ void LLSidepanelTaskInfo::refresh() }; for (size_t t=0; t<LL_ARRAY_SIZE(no_item_names); ++t) { - childSetEnabled(no_item_names[t], FALSE); + getChildView(no_item_names[t])->setEnabled( FALSE); } } updateVerbs(); diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h index 010173e84e..99d0603ec5 100644 --- a/indra/newview/llsidepaneltaskinfo.h +++ b/indra/newview/llsidepaneltaskinfo.h @@ -121,7 +121,7 @@ private: protected: LLViewerObject* getObject(); private: - LLViewerObject* mObject; + LLPointer<LLViewerObject> mObject; LLObjectSelectionHandle mObjectSelection; static LLSidepanelTaskInfo* sActivePanel; }; diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index bf00b47c21..5128ab6a18 100644 --- a/indra/newview/llspeakers.cpp +++ b/indra/newview/llspeakers.cpp @@ -74,7 +74,10 @@ LLSpeaker::LLSpeaker(const LLUUID& id, const std::string& name, const ESpeakerTy void LLSpeaker::lookupName() { - gCacheName->get(mID, FALSE, boost::bind(&LLSpeaker::onAvatarNameLookup, this, _1, _2, _3, _4)); + if (mDisplayName.empty()) + { + gCacheName->get(mID, FALSE, boost::bind(&LLSpeaker::onAvatarNameLookup, this, _1, _2, _3, _4)); + } } void LLSpeaker::onAvatarNameLookup(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group) diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index e9efc49e27..e64c4c90b7 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -118,7 +118,6 @@ #include "llinventorybridge.h" #include "llinventorymodel.h" #include "llinventorymodelbackgroundfetch.h" -#include "llfriendcard.h" #include "llkeyboard.h" #include "llloginhandler.h" // gLoginHandler, SLURL support #include "lllogininstance.h" // Host the login module. @@ -128,7 +127,6 @@ #include "llfloaterevent.h" #include "llpanelclassified.h" #include "llpanelpick.h" -#include "llpanelplace.h" #include "llpanelgrouplandmoney.h" #include "llpanelgroupnotices.h" #include "llpreview.h" @@ -1646,12 +1644,6 @@ bool idle_startup() //all categories loaded. lets create "My Favorites" category gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE,true); - // Checks whether "Friends" and "Friends/All" folders exist in "Calling Cards" folder, - // fetches their contents if needed and synchronizes it with buddies list. - // If the folders are not found they are created. - LLFriendCardsManager::instance().syncFriendCardsFolders(); - - // set up callbacks llinfos << "Registering Callbacks" << llendl; LLMessageSystem* msg = gMessageSystem; @@ -2933,9 +2925,8 @@ bool process_login_success_response() text = response["agent_region_access"].asString(); if (!text.empty()) { - U32 preferredMaturity = - llmin((U32)LLAgent::convertTextToMaturity(text[0]), - gSavedSettings.getU32("PreferredMaturity")); + U32 preferredMaturity = (U32)LLAgent::convertTextToMaturity(text[0]); + gSavedSettings.setU32("PreferredMaturity", preferredMaturity); } // During the AO transition, this flag will be true. Then the flag will diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index c02559b209..a6bb4d4d5f 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -111,8 +111,6 @@ const F32 ICON_TIMER_EXPIRY = 3.f; // How long the balance and health icons sho const F32 ICON_FLASH_FREQUENCY = 2.f; const S32 TEXT_HEIGHT = 18; -static void onClickHealth(void*); -static void onClickScriptDebug(void*); static void onClickVolume(void*); std::vector<std::string> LLStatusBar::sDays; @@ -195,9 +193,6 @@ BOOL LLStatusBar::postBuild() gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&LLStatusBar::onVolumeChanged, this, _2)); - childSetAction("scriptout", onClickScriptDebug, this); - childSetAction("health", onClickHealth, this); - // Adding Net Stat Graph S32 x = getRect().getWidth() - 2; S32 y = 0; @@ -235,7 +230,7 @@ BOOL LLStatusBar::postBuild() mSGPacketLoss->mPerSec = FALSE; addChild(mSGPacketLoss); - childSetActionTextbox("stat_btn", onClickStatGraph); + getChild<LLTextBox>("stat_btn")->setClickedCallback(onClickStatGraph); mPanelVolumePulldown = new LLPanelVolumePulldown(); addChild(mPanelVolumePulldown); @@ -247,14 +242,17 @@ BOOL LLStatusBar::postBuild() mPanelNearByMedia->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT); mPanelNearByMedia->setVisible(FALSE); + mScriptOut = getChildView("scriptout"); + return TRUE; } // Per-frame updates of visibility void LLStatusBar::refresh() { - bool net_stats_visible = gSavedSettings.getBOOL("ShowNetStats"); - + static LLCachedControl<bool> show_net_stats(gSavedSettings, "ShowNetStats", false); + bool net_stats_visible = show_net_stats; + if (net_stats_visible) { // Adding Net Stat Meter back in @@ -266,26 +264,30 @@ void LLStatusBar::refresh() mSGBandwidth->setThreshold(2, bwtotal); } - // Get current UTC time, adjusted for the user's clock - // being off. - time_t utc_time; - utc_time = time_corrected(); - - std::string timeStr = getString("time"); - LLSD substitution; - substitution["datetime"] = (S32) utc_time; - LLStringUtil::format (timeStr, substitution); - mTextTime->setText(timeStr); - - // set the tooltip to have the date - std::string dtStr = getString("timeTooltip"); - LLStringUtil::format (dtStr, substitution); - mTextTime->setToolTip (dtStr); + // update clock every 10 seconds + if(mClockUpdateTimer.getElapsedTimeF32() > 10.f) + { + mClockUpdateTimer.reset(); + + // Get current UTC time, adjusted for the user's clock + // being off. + time_t utc_time; + utc_time = time_corrected(); + + std::string timeStr = getString("time"); + LLSD substitution; + substitution["datetime"] = (S32) utc_time; + LLStringUtil::format (timeStr, substitution); + mTextTime->setText(timeStr); + + // set the tooltip to have the date + std::string dtStr = getString("timeTooltip"); + LLStringUtil::format (dtStr, substitution); + mTextTime->setToolTip (dtStr); + } LLRect r; const S32 MENU_RIGHT = gMenuBarView->getRightmostMenuEdge(); - S32 x = MENU_RIGHT + MENU_PARCEL_SPACING; - S32 y = 0; // reshape menu bar to its content's width if (MENU_RIGHT != gMenuBarView->getRect().getWidth()) @@ -293,48 +295,9 @@ void LLStatusBar::refresh() gMenuBarView->reshape(MENU_RIGHT, gMenuBarView->getRect().getHeight()); } - LLViewerRegion *region = gAgent.getRegion(); - LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); - - LLRect buttonRect; - - if (LLHUDIcon::iconsNearby()) - { - childGetRect( "scriptout", buttonRect ); - r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight()); - childSetRect("scriptout",r); - childSetVisible("scriptout", true); - x += buttonRect.getWidth(); - } - else - { - childSetVisible("scriptout", false); - } - - if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK && - ((region && region->getAllowDamage()) || (parcel && parcel->getAllowDamage()))) - { - // set visibility based on flashing - if( mHealthTimer->hasExpired() ) - { - childSetVisible("health", true); - } - else - { - BOOL flash = S32(mHealthTimer->getElapsedSeconds() * ICON_FLASH_FREQUENCY) & 1; - childSetVisible("health", flash); - } - - // Health - childGetRect( "health", buttonRect ); - r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight()); - childSetRect("health", r); - x += buttonRect.getWidth(); - } - mSGBandwidth->setVisible(net_stats_visible); mSGPacketLoss->setVisible(net_stats_visible); - childSetEnabled("stat_btn", net_stats_visible); + getChildView("stat_btn")->setEnabled(net_stats_visible); // update the master volume button state bool mute_audio = LLAppViewer::instance()->getMasterSystemAudioMute(); @@ -499,16 +462,6 @@ void LLStatusBar::onClickBuyCurrency() LLBuyCurrencyHTML::openCurrencyFloater(); } -static void onClickHealth(void* ) -{ - LLNotificationsUtil::add("NotSafe"); -} - -static void onClickScriptDebug(void*) -{ - LLFloaterScriptDebug::show(LLUUID::null); -} - void LLStatusBar::onMouseEnterVolume() { LLButton* volbtn = getChild<LLButton>( "volume_btn" ); diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h index 32f29e9e1c..2e2187bafe 100644 --- a/indra/newview/llstatusbar.h +++ b/indra/newview/llstatusbar.h @@ -112,6 +112,8 @@ private: LLButton *mBtnVolume; LLButton *mMediaToggle; + LLView* mScriptOut; + LLFrameTimer mClockUpdateTimer; S32 mBalance; S32 mHealth; diff --git a/indra/newview/llstylemap.cpp b/indra/newview/llstylemap.cpp index 8fab3bb361..b3d7dddde8 100644 --- a/indra/newview/llstylemap.cpp +++ b/indra/newview/llstylemap.cpp @@ -46,20 +46,12 @@ const LLStyle::Params &LLStyleMap::lookupAgent(const LLUUID &source) if (mMap.find(source) == mMap.end()) { LLStyle::Params style_params; - if (source != LLUUID::null && source != gAgent.getID() ) + if (source != LLUUID::null) { style_params.color.control = "HTMLLinkColor"; style_params.readonly_color.control = "HTMLLinkColor"; - style_params.link_href = - LLSLURL("agent", source, "inspect").getSLURLString(); + style_params.link_href = LLSLURL("agent", source, "inspect").getSLURLString(); } - else - { - // Make the resident's own name white and don't make the name clickable. - style_params.color = LLColor4::white; - style_params.readonly_color = LLColor4::white; - } - mMap[source] = style_params; } return mMap[source]; diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp index ddb5d08e07..cecc135951 100644 --- a/indra/newview/llsurface.cpp +++ b/indra/newview/llsurface.cpp @@ -158,6 +158,7 @@ void LLSurface::initClasses() void LLSurface::setRegion(LLViewerRegion *regionp) { mRegionp = regionp; + mWaterObjp = NULL; // depends on regionp, needs recreating } // Assumes that arguments are powers of 2, and that @@ -958,6 +959,7 @@ LLSurfacePatch *LLSurface::resolvePatchRegion(const LLVector3 &pos_region) const LLSurfacePatch *LLSurface::resolvePatchGlobal(const LLVector3d &pos_global) const { + llassert(mRegionp); LLVector3 pos_region = mRegionp->getPosRegionFromGlobal(pos_global); return resolvePatchRegion(pos_region); } diff --git a/indra/newview/llsyswellitem.cpp b/indra/newview/llsyswellitem.cpp index 0cfcfdc634..1f3d6a582d 100644 --- a/indra/newview/llsyswellitem.cpp +++ b/indra/newview/llsyswellitem.cpp @@ -42,14 +42,12 @@ //--------------------------------------------------------------------------------- LLSysWellItem::LLSysWellItem(const Params& p) : LLPanel(p), mTitle(NULL), - mCloseBtn(NULL), - mIcon(NULL) + mCloseBtn(NULL) { LLUICtrlFactory::getInstance()->buildPanel(this, "panel_sys_well_item.xml"); mTitle = getChild<LLTextBox>("title"); mCloseBtn = getChild<LLButton>("close_btn"); - mIcon = getChild<LLIconCtrl>("icon"); mTitle->setValue(p.title); mCloseBtn->setClickedCallback(boost::bind(&LLSysWellItem::onClickCloseBtn,this)); diff --git a/indra/newview/llsyswellitem.h b/indra/newview/llsyswellitem.h index b9b00e972a..3680e50218 100644 --- a/indra/newview/llsyswellitem.h +++ b/indra/newview/llsyswellitem.h @@ -79,7 +79,6 @@ private: LLTextBox* mTitle; LLButton* mCloseBtn; - LLIconCtrl* mIcon; LLUUID mID; }; diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index 46bd55de43..d8b9bc2329 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -119,14 +119,16 @@ LLTexLayerSetBuffer::LLTexLayerSetBuffer(LLTexLayerSet* const owner, S32 width, S32 height) : // ORDER_LAST => must render these after the hints are created. LLViewerDynamicTexture( width, height, 4, LLViewerDynamicTexture::ORDER_LAST, TRUE ), - mNeedsUpdate(TRUE), - mNeedsUpload(FALSE), mUploadPending(FALSE), // Not used for any logic here, just to sync sending of updates + mNeedsUpload(FALSE), mNumLowresUploads(0), + mNeedsUpdate(TRUE), + mNumLowresUpdates(0), mTexLayerSet(owner) { LLTexLayerSetBuffer::sGLByteCount += getSize(); mNeedsUploadTimer.start(); + mNeedsUpdateTimer.start(); } LLTexLayerSetBuffer::~LLTexLayerSetBuffer() @@ -165,8 +167,9 @@ void LLTexLayerSetBuffer::dumpTotalByteCount() void LLTexLayerSetBuffer::requestUpdate() { - conditionalRestartUploadTimer(); + restartUpdateTimer(); mNeedsUpdate = TRUE; + mNumLowresUpdates = 0; // If we're in the middle of uploading a baked texture, we don't care about it any more. // When it's downloaded, ignore it. mUploadID.setNull(); @@ -196,6 +199,12 @@ void LLTexLayerSetBuffer::conditionalRestartUploadTimer() } } +void LLTexLayerSetBuffer::restartUpdateTimer() +{ + mNeedsUpdateTimer.reset(); + mNeedsUpdateTimer.start(); +} + void LLTexLayerSetBuffer::cancelUpload() { mNeedsUpload = FALSE; @@ -229,25 +238,31 @@ BOOL LLTexLayerSetBuffer::needsRender() llassert(mTexLayerSet->getAvatar() == gAgentAvatarp); if (!isAgentAvatarValid()) return FALSE; - const BOOL upload_now = isReadyToUpload(); - BOOL needs_update = (mNeedsUpdate || upload_now) && !gAgentAvatarp->mAppearanceAnimating; - if (needs_update) + const BOOL upload_now = mNeedsUpload && isReadyToUpload(); + const BOOL update_now = mNeedsUpdate && isReadyToUpdate(); + + // Don't render if we don't want to (or aren't ready to) upload or update. + if (!(update_now || upload_now)) { - BOOL invalid_skirt = gAgentAvatarp->getBakedTE(mTexLayerSet) == LLVOAvatarDefines::TEX_SKIRT_BAKED && !gAgentAvatarp->isWearingWearableType(LLWearableType::WT_SKIRT); - if (invalid_skirt) - { - // we were trying to create a skirt texture - // but we're no longer wearing a skirt... - needs_update = FALSE; - cancelUpload(); - } - else - { - needs_update &= mTexLayerSet->isLocalTextureDataAvailable(); - } + return FALSE; } - return needs_update; + // Don't render if we're animating our appearance. + if (gAgentAvatarp->getIsAppearanceAnimating()) + { + return FALSE; + } + + // Don't render if we are trying to create a shirt texture but aren't wearing a skirt. + if (gAgentAvatarp->getBakedTE(mTexLayerSet) == LLVOAvatarDefines::TEX_SKIRT_BAKED && + !gAgentAvatarp->isWearingWearableType(LLWearableType::WT_SKIRT)) + { + cancelUpload(); + return FALSE; + } + + // Render if we have at least minimal level of detail for each local texture. + return mTexLayerSet->isLocalTextureDataAvailable(); } void LLTexLayerSetBuffer::preRender(BOOL clear_depth) @@ -272,11 +287,12 @@ BOOL LLTexLayerSetBuffer::render() gGL.setColorMask(true, true); // do we need to upload, and do we have sufficient data to create an uploadable composite? - // When do we upload the texture if gAgent.mNumPendingQueries is non-zero? - const BOOL upload_now = isReadyToUpload(); + // TODO: When do we upload the texture if gAgent.mNumPendingQueries is non-zero? + const BOOL upload_now = mNeedsUpload && isReadyToUpload(); + const BOOL update_now = mNeedsUpdate && isReadyToUpdate(); + BOOL success = TRUE; - // Composite the color data LLGLSUIDefault gls_ui; success &= mTexLayerSet->render( mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight ); @@ -294,7 +310,7 @@ BOOL LLTexLayerSetBuffer::render() if (mTexLayerSet->isVisible()) { mTexLayerSet->getAvatar()->debugBakedTextureUpload(mTexLayerSet->getBakedTexIndex(), FALSE); // FALSE for start of upload, TRUE for finish. - readBackAndUpload(); + doUpload(); } else { @@ -305,6 +321,11 @@ BOOL LLTexLayerSetBuffer::render() } } } + + if (update_now) + { + doUpdate(); + } // reset GL state gGL.setColorMask(true, true); @@ -312,7 +333,6 @@ BOOL LLTexLayerSetBuffer::render() // we have valid texture data now mGLTexturep->setGLTextureCreated(true); - mNeedsUpdate = FALSE; return success; } @@ -339,16 +359,16 @@ BOOL LLTexLayerSetBuffer::uploadInProgress() const BOOL LLTexLayerSetBuffer::isReadyToUpload() const { - if (!mNeedsUpload) return FALSE; // Don't need to upload if we haven't requested one. if (!gAgentQueryManager.hasNoPendingQueries()) return FALSE; // Can't upload if there are pending queries. if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures()) return FALSE; // Don't upload if avatar is using composites. // If we requested an upload and have the final LOD ready, then upload. - const BOOL can_highest_lod = mTexLayerSet->isLocalTextureDataFinal(); - if (can_highest_lod) return TRUE; + if (mTexLayerSet->isLocalTextureDataFinal()) return TRUE; - const U32 texture_timeout = gSavedSettings.getU32("AvatarBakedTextureTimeout"); - if (texture_timeout) + // Upload if we've hit a timeout. Upload is a pretty expensive process so we need to make sure + // we aren't doing uploads too frequently. + const U32 texture_timeout = gSavedSettings.getU32("AvatarBakedTextureUploadTimeout"); + if (texture_timeout != 0) { // The timeout period increases exponentially between every lowres upload in order to prevent // spamming the server with frequent uploads. @@ -359,10 +379,33 @@ BOOL LLTexLayerSetBuffer::isReadyToUpload() const const BOOL has_lower_lod = mTexLayerSet->isLocalTextureDataAvailable(); if (has_lower_lod && is_upload_textures_timeout) return TRUE; } + + return FALSE; +} + +BOOL LLTexLayerSetBuffer::isReadyToUpdate() const +{ + // If we requested an update and have the final LOD ready, then update. + if (mTexLayerSet->isLocalTextureDataFinal()) return TRUE; + + // If we haven't done an update yet, then just do one now regardless of state of textures. + if (mNumLowresUpdates == 0) return TRUE; + + // Update if we've hit a timeout. Unlike for uploads, we can make this timeout fairly small + // since render unnecessarily doesn't cost much. + const U32 texture_timeout = gSavedSettings.getU32("AvatarBakedLocalTextureUpdateTimeout"); + if (texture_timeout != 0) + { + // If we hit our timeout and have textures available at even lower resolution, then update. + const BOOL is_update_textures_timeout = mNeedsUpdateTimer.getElapsedTimeF32() >= texture_timeout; + const BOOL has_lower_lod = mTexLayerSet->isLocalTextureDataAvailable(); + if (has_lower_lod && is_update_textures_timeout) return TRUE; + } + return FALSE; } -BOOL LLTexLayerSetBuffer::updateImmediate() +BOOL LLTexLayerSetBuffer::requestUpdateImmediate() { mNeedsUpdate = TRUE; BOOL result = FALSE; @@ -377,7 +420,9 @@ BOOL LLTexLayerSetBuffer::updateImmediate() return result; } -void LLTexLayerSetBuffer::readBackAndUpload() +// Create the baked texture, send it out to the server, then wait for it to come +// back so we can switch to using it. +void LLTexLayerSetBuffer::doUpload() { llinfos << "Uploading baked " << mTexLayerSet->getBodyRegionName() << llendl; LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TEX_BAKES); @@ -447,6 +492,7 @@ void LLTexLayerSetBuffer::readBackAndUpload() LLBakedUploadData* baked_upload_data = new LLBakedUploadData(gAgentAvatarp, this->mTexLayerSet, asset_id); + // upload ID is used to avoid overlaps, e.g. when the user rapidly makes two changes outside of Face Edit. mUploadID = asset_id; // Upload the image @@ -490,13 +536,13 @@ void LLTexLayerSetBuffer::readBackAndUpload() // Print out notification that we uploaded this texture. if (gSavedSettings.getBOOL("DebugAvatarRezTime")) { - std::string lod_str = highest_lod ? "HighRes" : "LowRes"; + const std::string lod_str = highest_lod ? "HighRes" : "LowRes"; LLSD args; args["EXISTENCE"] = llformat("%d",(U32)mTexLayerSet->getAvatar()->debugGetExistenceTimeElapsedF32()); args["TIME"] = llformat("%d",(U32)mNeedsUploadTimer.getElapsedTimeF32()); args["BODYREGION"] = mTexLayerSet->getBodyRegionName(); args["RESOLUTION"] = lod_str; - LLNotificationsUtil::add("AvatarRezSelfBakeNotification",args); + LLNotificationsUtil::add("AvatarRezSelfBakedTextureUploadNotification",args); llinfos << "Uploading [ name: " << mTexLayerSet->getBodyRegionName() << " res:" << lod_str << " time:" << (U32)mNeedsUploadTimer.getElapsedTimeF32() << " ]" << llendl; } } @@ -520,6 +566,40 @@ void LLTexLayerSetBuffer::readBackAndUpload() delete [] baked_color_data; } +// Mostly bookkeeping; don't need to actually "do" anything since +// render() will actually do the update. +void LLTexLayerSetBuffer::doUpdate() +{ + const BOOL highest_lod = mTexLayerSet->isLocalTextureDataFinal(); + if (highest_lod) + { + mNeedsUpdate = FALSE; + } + else + { + mNumLowresUpdates++; + } + + restartUpdateTimer(); + + // need to swtich to using this layerset if this is the first update + // after getting the lowest LOD + mTexLayerSet->getAvatar()->updateMeshTextures(); + + // Print out notification that we uploaded this texture. + if (gSavedSettings.getBOOL("DebugAvatarRezTime")) + { + const BOOL highest_lod = mTexLayerSet->isLocalTextureDataFinal(); + const std::string lod_str = highest_lod ? "HighRes" : "LowRes"; + LLSD args; + args["EXISTENCE"] = llformat("%d",(U32)mTexLayerSet->getAvatar()->debugGetExistenceTimeElapsedF32()); + args["TIME"] = llformat("%d",(U32)mNeedsUpdateTimer.getElapsedTimeF32()); + args["BODYREGION"] = mTexLayerSet->getBodyRegionName(); + args["RESOLUTION"] = lod_str; + LLNotificationsUtil::add("AvatarRezSelfBakedTextureUpdateNotification",args); + llinfos << "Locally updating [ name: " << mTexLayerSet->getBodyRegionName() << " res:" << lod_str << " time:" << (U32)mNeedsUpdateTimer.getElapsedTimeF32() << " ]" << llendl; + } +} // static void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid, @@ -931,7 +1011,7 @@ void LLTexLayerSet::setUpdatesEnabled( BOOL b ) void LLTexLayerSet::updateComposite() { createComposite(); - mComposite->updateImmediate(); + mComposite->requestUpdateImmediate(); } LLTexLayerSetBuffer* LLTexLayerSet::getComposite() diff --git a/indra/newview/lltexlayer.h b/indra/newview/lltexlayer.h index cb2e1faaa6..745cd88c47 100644 --- a/indra/newview/lltexlayer.h +++ b/indra/newview/lltexlayer.h @@ -270,47 +270,69 @@ class LLTexLayerSetBuffer : public LLViewerDynamicTexture public: LLTexLayerSetBuffer(LLTexLayerSet* const owner, S32 width, S32 height); virtual ~LLTexLayerSetBuffer(); - /*virtual*/ S8 getType() const; - virtual void preRender(BOOL clear_depth); - virtual void postRender(BOOL success); - virtual BOOL render(); - BOOL updateImmediate(); +public: + /*virtual*/ S8 getType() const; BOOL isInitialized(void) const; - BOOL uploadPending() const; // We are expecting a new texture to be uploaded at some point - BOOL uploadNeeded() const; // We need to upload a new texture - BOOL uploadInProgress() const; // We have started uploading a new texture and are awaiting the result + static void dumpTotalByteCount(); + const std::string dumpTextureInfo() const; + virtual void restoreGLTexture(); + virtual void destroyGLTexture(); +protected: + void pushProjection() const; + void popProjection() const; +private: + LLTexLayerSet* const mTexLayerSet; + static S32 sGLByteCount; + //-------------------------------------------------------------------- + // Render + //-------------------------------------------------------------------- +public: /*virtual*/ BOOL needsRender(); - void requestUpdate(); +protected: + BOOL render(S32 x, S32 y, S32 width, S32 height); + virtual void preRender(BOOL clear_depth); + virtual void postRender(BOOL success); + virtual BOOL render(); + + //-------------------------------------------------------------------- + // Uploads + //-------------------------------------------------------------------- +public: void requestUpload(); void cancelUpload(); - BOOL render(S32 x, S32 y, S32 width, S32 height); - void readBackAndUpload(); + BOOL uploadNeeded() const; // We need to upload a new texture + BOOL uploadInProgress() const; // We have started uploading a new texture and are awaiting the result + BOOL uploadPending() const; // We are expecting a new texture to be uploaded at some point static void onTextureUploadComplete(const LLUUID& uuid, void* userdata, S32 result, LLExtStat ext_status); - static void dumpTotalByteCount(); - const std::string dumpTextureInfo() const; - virtual void restoreGLTexture(); - virtual void destroyGLTexture(); - - protected: - void pushProjection() const; - void popProjection() const; BOOL isReadyToUpload() const; + void doUpload(); // Does a read back and upload. void conditionalRestartUploadTimer(); - private: - LLTexLayerSet* const mTexLayerSet; - BOOL mNeedsUpdate; // whether we need to update our baked textures - BOOL mNeedsUpload; // whether we need to send our baked textures to the server - U32 mNumLowresUploads; // number of times we've sent a lowres version of our baked textures to the server - BOOL mUploadPending; // whether we have received back the new baked textures - LLUUID mUploadID; // the current upload process (null if none). Used to avoid overlaps, e.g. when the user rapidly makes two changes outside of Face Edit. - static S32 sGLByteCount; - LLFrameTimer mNeedsUploadTimer; // Tracks time since upload was requested + BOOL mNeedsUpload; // Whether we need to send our baked textures to the server + U32 mNumLowresUploads; // Number of times we've sent a lowres version of our baked textures to the server + BOOL mUploadPending; // Whether we have received back the new baked textures + LLUUID mUploadID; // The current upload process (null if none). + LLFrameTimer mNeedsUploadTimer; // Tracks time since upload was requested and performed. + + //-------------------------------------------------------------------- + // Updates + //-------------------------------------------------------------------- +public: + void requestUpdate(); + BOOL requestUpdateImmediate(); +protected: + BOOL isReadyToUpdate() const; + void doUpdate(); + void restartUpdateTimer(); +private: + BOOL mNeedsUpdate; // Whether we need to locally update our baked textures + U32 mNumLowresUpdates; // Number of times we've locally updated with lowres version of our baked textures + LLFrameTimer mNeedsUpdateTimer; // Tracks time since update was requested and performed. }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp index f2d1b5d032..dc97c4b673 100644 --- a/indra/newview/lltexlayerparams.cpp +++ b/indra/newview/lltexlayerparams.cpp @@ -180,7 +180,7 @@ void LLTexLayerParamAlpha::setWeight(F32 weight, BOOL upload_bake) if ((mAvatar->getSex() & getSex()) && (mAvatar->isSelf() && !mIsDummy)) // only trigger a baked texture update if we're changing a wearable's visual param. { - if (gAgentCamera.cameraCustomizeAvatar()) + if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures()) { upload_bake = FALSE; } diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 9ad2322765..952f893015 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -391,6 +391,7 @@ bool LLTextureCacheRemoteWorker::doRead() } else { + //llinfos << "texture " << mID.asString() << " found in local_assets" << llendl; mImageSize = local_size; mImageLocal = TRUE; } @@ -997,7 +998,11 @@ LLAPRFile* LLTextureCache::openHeaderEntriesFile(bool readonly, S32 offset) void LLTextureCache::closeHeaderEntriesFile() { - llassert_always(mHeaderAPRFile != NULL); + if(!mHeaderAPRFile) + { + return ; + } + delete mHeaderAPRFile; mHeaderAPRFile = NULL; } @@ -1114,7 +1119,7 @@ S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create } //mHeaderMutex is locked before calling this. -void LLTextureCache::writeEntryToHeaderImmediately(S32 idx, Entry& entry, bool write_header) +void LLTextureCache::writeEntryToHeaderImmediately(S32& idx, Entry& entry, bool write_header) { LLAPRFile* aprfile ; S32 bytes_written ; @@ -1123,7 +1128,13 @@ void LLTextureCache::writeEntryToHeaderImmediately(S32 idx, Entry& entry, bool w { aprfile = openHeaderEntriesFile(false, 0); bytes_written = aprfile->write((U8*)&mHeaderEntriesInfo, sizeof(EntriesInfo)) ; - llassert_always(bytes_written == sizeof(EntriesInfo)); + if(bytes_written != sizeof(EntriesInfo)) + { + clearCorruptedCache() ; //clear the cache. + idx = -1 ;//mark the idx invalid. + return ; + } + mHeaderAPRFile->seek(APR_SET, offset); } else @@ -1131,19 +1142,31 @@ void LLTextureCache::writeEntryToHeaderImmediately(S32 idx, Entry& entry, bool w aprfile = openHeaderEntriesFile(false, offset); } bytes_written = aprfile->write((void*)&entry, (S32)sizeof(Entry)); - llassert_always(bytes_written == sizeof(Entry)); + if(bytes_written != sizeof(Entry)) + { + clearCorruptedCache() ; //clear the cache. + idx = -1 ;//mark the idx invalid. + + return ; + } + closeHeaderEntriesFile(); mUpdatedEntryMap.erase(idx) ; } //mHeaderMutex is locked before calling this. -void LLTextureCache::readEntryFromHeaderImmediately(S32 idx, Entry& entry) +void LLTextureCache::readEntryFromHeaderImmediately(S32& idx, Entry& entry) { S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry); LLAPRFile* aprfile = openHeaderEntriesFile(true, offset); S32 bytes_read = aprfile->read((void*)&entry, (S32)sizeof(Entry)); - llassert_always(bytes_read == sizeof(Entry)); closeHeaderEntriesFile(); + + if(bytes_read != sizeof(Entry)) + { + clearCorruptedCache() ; //clear the cache. + idx = -1 ;//mark the idx invalid. + } } //mHeaderMutex is locked before calling this. @@ -1168,7 +1191,7 @@ void LLTextureCache::updateEntryTimeStamp(S32 idx, Entry& entry) } //update an existing entry, write to header file immediately. -bool LLTextureCache::updateEntry(S32 idx, Entry& entry, S32 new_image_size, S32 new_data_size) +bool LLTextureCache::updateEntry(S32& idx, Entry& entry, S32 new_image_size, S32 new_data_size) { S32 new_body_size = llmax(0, new_data_size - TEXTURE_CACHE_ENTRY_SIZE) ; @@ -1239,6 +1262,10 @@ U32 LLTextureCache::openAndReadEntries(std::vector<Entry>& entries) { aprfile = openHeaderEntriesFile(false, 0); updatedHeaderEntriesFile() ; + if(!aprfile) + { + return 0; + } aprfile->seek(APR_SET, (S32)sizeof(EntriesInfo)); } for (U32 idx=0; idx<num_entries; idx++) @@ -1280,7 +1307,11 @@ void LLTextureCache::writeEntriesAndClose(const std::vector<Entry>& entries) for (S32 idx=0; idx<num_entries; idx++) { S32 bytes_written = aprfile->write((void*)(&entries[idx]), (S32)sizeof(Entry)); - llassert_always(bytes_written == sizeof(Entry)); + if(bytes_written != sizeof(Entry)) + { + clearCorruptedCache() ; //clear the cache. + return ; + } } closeHeaderEntriesFile(); } @@ -1306,7 +1337,11 @@ void LLTextureCache::updatedHeaderEntriesFile() //entriesInfo mHeaderAPRFile->seek(APR_SET, 0); S32 bytes_written = mHeaderAPRFile->write((U8*)&mHeaderEntriesInfo, sizeof(EntriesInfo)) ; - llassert_always(bytes_written == sizeof(EntriesInfo)); + if(bytes_written != sizeof(EntriesInfo)) + { + clearCorruptedCache() ; //clear the cache. + return ; + } //write each updated entry S32 entry_size = (S32)sizeof(Entry) ; @@ -1322,7 +1357,11 @@ void LLTextureCache::updatedHeaderEntriesFile() } bytes_written = mHeaderAPRFile->write((void*)(&iter->second), entry_size); - llassert_always(bytes_written == entry_size); + if(bytes_written != entry_size) + { + clearCorruptedCache() ; //clear the cache. + return ; + } } mUpdatedEntryMap.clear() ; } @@ -1443,6 +1482,29 @@ void LLTextureCache::readHeaderCache() ////////////////////////////////////////////////////////////////////////////// +//the header mutex is locked before calling this. +void LLTextureCache::clearCorruptedCache() +{ + llwarns << "the texture cache is corrupted, need to be cleared." << llendl ; + + closeHeaderEntriesFile();//close possible file handler + purgeAllTextures(false) ; //clear the cache. + + if (!mReadOnly) //regenerate the directory tree if not exists. + { + LLFile::mkdir(mTexturesDirName); + + const char* subdirs = "0123456789abcdef"; + for (S32 i=0; i<16; i++) + { + std::string dirname = mTexturesDirName + gDirUtilp->getDirDelimiter() + subdirs[i]; + LLFile::mkdir(dirname); + } + } + + return ; +} + void LLTextureCache::purgeAllTextures(bool purge_directories) { if (!mReadOnly) @@ -1471,11 +1533,14 @@ void LLTextureCache::purgeAllTextures(bool purge_directories) mTexturesSizeTotal = 0; mFreeList.clear(); mTexturesSizeTotal = 0; + mUpdatedEntryMap.clear(); // Info with 0 entries mHeaderEntriesInfo.mVersion = sHeaderCacheVersion; mHeaderEntriesInfo.mEntries = 0; writeEntriesHeader(); + + llinfos << "The entire texture cache is cleared." << llendl ; } void LLTextureCache::purgeTextures(bool validate) @@ -1643,7 +1708,8 @@ S32 LLTextureCache::setHeaderCacheEntry(const LLUUID& id, Entry& entry, S32 imag { updateEntry(idx, entry, imagesize, datasize); } - else // retry + + if(idx < 0) // retry { readHeaderCache(); // We couldn't write an entry, so refresh the LRU diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h index 0fceee3011..f80be0056b 100644 --- a/indra/newview/lltexturecache.h +++ b/indra/newview/lltexturecache.h @@ -154,6 +154,7 @@ protected: private: void setDirNames(ELLPath location); void readHeaderCache(); + void clearCorruptedCache(); void purgeAllTextures(bool purge_directories); void purgeTextures(bool validate); LLAPRFile* openHeaderEntriesFile(bool readonly, S32 offset); @@ -161,12 +162,12 @@ private: void readEntriesHeader(); void writeEntriesHeader(); S32 openAndReadEntry(const LLUUID& id, Entry& entry, bool create); - bool updateEntry(S32 idx, Entry& entry, S32 new_image_size, S32 new_body_size); + bool updateEntry(S32& idx, Entry& entry, S32 new_image_size, S32 new_body_size); void updateEntryTimeStamp(S32 idx, Entry& entry) ; U32 openAndReadEntries(std::vector<Entry>& entries); void writeEntriesAndClose(const std::vector<Entry>& entries); - void readEntryFromHeaderImmediately(S32 idx, Entry& entry) ; - void writeEntryToHeaderImmediately(S32 idx, Entry& entry, bool write_header = false) ; + void readEntryFromHeaderImmediately(S32& idx, Entry& entry) ; + void writeEntryToHeaderImmediately(S32& idx, Entry& entry, bool write_header = false) ; void removeEntry(S32 idx, Entry& entry, std::string& filename); void removeCachedTexture(const LLUUID& id) ; S32 getHeaderCacheEntry(const LLUUID& id, Entry& entry); diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index cd9190bbb0..3aaf5f0c9f 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -175,6 +175,8 @@ protected: BOOL mNoCopyTextureSelected; F32 mContextConeOpacity; LLSaveFolderState mSavedFolderState; + + BOOL mSelectedItemPinned; }; LLFloaterTexturePicker::LLFloaterTexturePicker( @@ -197,7 +199,8 @@ LLFloaterTexturePicker::LLFloaterTexturePicker( mFilterEdit(NULL), mImmediateFilterPermMask(immediate_filter_perm_mask), mNonImmediateFilterPermMask(non_immediate_filter_perm_mask), - mContextConeOpacity(0.f) + mContextConeOpacity(0.f), + mSelectedItemPinned( FALSE ) { mCanApplyImmediately = can_apply_immediately; LLUICtrlFactory::getInstance()->buildFloater(this,"floater_texture_ctrl.xml",NULL); @@ -226,7 +229,7 @@ void LLFloaterTexturePicker::setImageID(const LLUUID& image_id) if (itemp && !itemp->getPermissions().allowCopyBy(gAgent.getID())) { // no copy texture - childSetValue("apply_immediate_check", FALSE); + getChild<LLUICtrl>("apply_immediate_check")->setValue(FALSE); mNoCopyTextureSelected = TRUE; } mInventoryPanel->setSelection(item_id, TAKE_FOCUS_NO); @@ -236,7 +239,7 @@ void LLFloaterTexturePicker::setImageID(const LLUUID& image_id) void LLFloaterTexturePicker::setActive( BOOL active ) { - if (!active && childGetValue("Pipette").asBoolean()) + if (!active && getChild<LLUICtrl>("Pipette")->getValue().asBoolean()) { stopUsingPipette(); } @@ -248,7 +251,7 @@ void LLFloaterTexturePicker::setCanApplyImmediately(BOOL b) mCanApplyImmediately = b; if (!mCanApplyImmediately) { - childSetValue("apply_immediate_check", FALSE); + getChild<LLUICtrl>("apply_immediate_check")->setValue(FALSE); } updateFilterPermMask(); } @@ -407,7 +410,7 @@ BOOL LLFloaterTexturePicker::postBuild() childSetCommitCallback("show_folders_check", onShowFolders, this); - childSetVisible("show_folders_check", FALSE); + getChildView("show_folders_check")->setVisible( FALSE); mFilterEdit = getChild<LLFilterEditor>("inventory search editor"); mFilterEdit->setCommitCallback(boost::bind(&LLFloaterTexturePicker::onFilterEdit, this, _2)); @@ -446,12 +449,12 @@ BOOL LLFloaterTexturePicker::postBuild() mNoCopyTextureSelected = FALSE; - childSetValue("apply_immediate_check", gSavedSettings.getBOOL("ApplyTextureImmediately")); + getChild<LLUICtrl>("apply_immediate_check")->setValue(gSavedSettings.getBOOL("ApplyTextureImmediately")); childSetCommitCallback("apply_immediate_check", onApplyImmediateCheck, this); if (!mCanApplyImmediately) { - childSetEnabled("show_folders_check", FALSE); + getChildView("show_folders_check")->setEnabled(FALSE); } getChild<LLUICtrl>("Pipette")->setCommitCallback( boost::bind(&LLFloaterTexturePicker::onBtnPipette, this)); @@ -528,10 +531,10 @@ void LLFloaterTexturePicker::draw() updateImageStats(); // if we're inactive, gray out "apply immediate" checkbox - childSetEnabled("show_folders_check", mActive && mCanApplyImmediately && !mNoCopyTextureSelected); - childSetEnabled("Select", mActive); - childSetEnabled("Pipette", mActive); - childSetValue("Pipette", LLToolMgr::getInstance()->getCurrentTool() == LLToolPipette::getInstance()); + getChildView("show_folders_check")->setEnabled(mActive && mCanApplyImmediately && !mNoCopyTextureSelected); + getChildView("Select")->setEnabled(mActive); + getChildView("Pipette")->setEnabled(mActive); + getChild<LLUICtrl>("Pipette")->setValue(LLToolMgr::getInstance()->getCurrentTool() == LLToolPipette::getInstance()); //BOOL allow_copy = FALSE; if( mOwner ) @@ -548,9 +551,9 @@ void LLFloaterTexturePicker::draw() mTentativeLabel->setVisible( FALSE ); } - childSetEnabled("Default", mImageAssetID != mOwner->getDefaultImageAssetID()); - childSetEnabled("Blank", mImageAssetID != mWhiteImageAssetID ); - childSetEnabled("None", mOwner->getAllowNoTexture() && !mImageAssetID.isNull() ); + getChildView("Default")->setEnabled(mImageAssetID != mOwner->getDefaultImageAssetID()); + getChildView("Blank")->setEnabled(mImageAssetID != mWhiteImageAssetID ); + getChildView("None")->setEnabled(mOwner->getAllowNoTexture() && !mImageAssetID.isNull() ); LLFloater::draw(); @@ -601,6 +604,31 @@ void LLFloaterTexturePicker::draw() mTentativeLabel->setVisible( TRUE ); drawChild(mTentativeLabel); } + + if (mSelectedItemPinned) return; + + LLFolderView* folder_view = mInventoryPanel->getRootFolder(); + if (!folder_view) return; + + LLInventoryFilter* filter = folder_view->getFilter(); + if (!filter) return; + + bool is_filter_active = folder_view->getCompletedFilterGeneration() < filter->getCurrentGeneration() && + filter->isNotDefault(); + + // After inventory panel filter is applied we have to update + // constraint rect for the selected item because of folder view + // AutoSelectOverride set to TRUE. We force PinningSelectedItem + // flag to FALSE state and setting filter "dirty" to update + // scroll container to show selected item (see LLFolderView::doIdle()). + if (!is_filter_active && !mSelectedItemPinned) + { + folder_view->setPinningSelectedItem(mSelectedItemPinned); + folder_view->dirtyFilter(); + folder_view->arrangeFromRoot(); + + mSelectedItemPinned = TRUE; + } } } @@ -655,13 +683,13 @@ const LLUUID& LLFloaterTexturePicker::findItemID(const LLUUID& asset_id, BOOL co PermissionMask LLFloaterTexturePicker::getFilterPermMask() { - bool apply_immediate = childGetValue("apply_immediate_check").asBoolean(); + bool apply_immediate = getChild<LLUICtrl>("apply_immediate_check")->getValue().asBoolean(); return apply_immediate ? mImmediateFilterPermMask : mNonImmediateFilterPermMask; } void LLFloaterTexturePicker::commitIfImmediateSet() { - bool apply_immediate = childGetValue("apply_immediate_check").asBoolean(); + bool apply_immediate = getChild<LLUICtrl>("apply_immediate_check")->getValue().asBoolean(); if (!mNoCopyTextureSelected && apply_immediate && mOwner) { mOwner->onFloaterCommit(LLTextureCtrl::TEXTURE_CHANGE); @@ -734,7 +762,7 @@ void LLFloaterTexturePicker::onBtnSelect(void* userdata) void LLFloaterTexturePicker::onBtnPipette() { - BOOL pipette_active = childGetValue("Pipette").asBoolean(); + BOOL pipette_active = getChild<LLUICtrl>("Pipette")->getValue().asBoolean(); pipette_active = !pipette_active; if (pipette_active) { diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index ceed90e210..bd0a43cd54 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -54,6 +54,7 @@ #include "llviewertexturelist.h" #include "llviewertexture.h" #include "llviewerregion.h" +#include "llviewerstats.h" #include "llworld.h" ////////////////////////////////////////////////////////////////////////////// @@ -150,7 +151,7 @@ public: ~LLTextureFetchWorker(); void relese() { --mActiveCount; } - void callbackHttpGet(const LLChannelDescriptors& channels, + S32 callbackHttpGet(const LLChannelDescriptors& channels, const LLIOPipe::buffer_ptr_t& buffer, bool partial, bool success); void callbackCacheRead(bool success, LLImageFormatted* image, @@ -290,8 +291,8 @@ class HTTPGetResponder : public LLCurl::Responder { LOG_CLASS(HTTPGetResponder); public: - HTTPGetResponder(LLTextureFetch* fetcher, const LLUUID& id, U64 startTime, S32 requestedSize, U32 offset) - : mFetcher(fetcher), mID(id), mStartTime(startTime), mRequestedSize(requestedSize), mOffset(offset) + HTTPGetResponder(LLTextureFetch* fetcher, const LLUUID& id, U64 startTime, S32 requestedSize, U32 offset, bool redir) + : mFetcher(fetcher), mID(id), mStartTime(startTime), mRequestedSize(requestedSize), mOffset(offset), mFollowRedir(redir) { } ~HTTPGetResponder() @@ -335,8 +336,9 @@ public: worker->setGetStatus(status, reason); // llwarns << "CURL GET FAILED, status:" << status << " reason:" << reason << llendl; } - mFetcher->removeFromHTTPQueue(mID); - worker->callbackHttpGet(channels, buffer, partial, success); + + S32 data_size = worker->callbackHttpGet(channels, buffer, partial, success); + mFetcher->removeFromHTTPQueue(mID, data_size); } else { @@ -344,6 +346,11 @@ public: llwarns << "Worker not found: " << mID << llendl; } } + + virtual bool followRedir() + { + return mFollowRedir; + } private: LLTextureFetch* mFetcher; @@ -351,6 +358,7 @@ private: U64 mStartTime; S32 mRequestedSize; U32 mOffset; + bool mFollowRedir; }; ////////////////////////////////////////////////////////////////////////////// @@ -589,7 +597,7 @@ bool LLTextureFetchWorker::doWork(S32 param) return true; // abort } } - if(mImagePriority < 1.0f) + if(mImagePriority < F_ALMOST_ZERO) { if (mState == INIT || mState == LOAD_FROM_NETWORK || mState == LOAD_FROM_SIMULATOR) { @@ -844,20 +852,10 @@ bool LLTextureFetchWorker::doWork(S32 param) { if(mCanUseHTTP) { - const S32 HTTP_QUEUE_MAX_SIZE = 8; - // *TODO: Integrate this with llviewerthrottle - // Note: LLViewerThrottle uses dynamic throttling which makes sense for UDP, - // but probably not for Textures. - // Set the throttle to the entire bandwidth, assuming UDP packets will get priority - // when they are needed - F32 max_bandwidth = mFetcher->mMaxBandwidth; - if ((mFetcher->getHTTPQueueSize() >= HTTP_QUEUE_MAX_SIZE) || - (mFetcher->getTextureBandwidth() > max_bandwidth)) - { - // Make normal priority and return (i.e. wait until there is room in the queue) - setPriority(LLWorkerThread::PRIORITY_NORMAL | mWorkPriority); - return false; - } + //NOTE: + //it seems ok to let sim control the UDP traffic + //so there is no throttle for http here. + // mFetcher->removeFromNetworkQueue(this, false); @@ -867,10 +865,17 @@ bool LLTextureFetchWorker::doWork(S32 param) cur_size = mFormattedImage->getDataSize(); // amount of data we already have if (mFormattedImage->getDiscardLevel() == 0) { - // We already have all the data, just decode it - mLoadedDiscard = mFormattedImage->getDiscardLevel(); - mState = DECODE_IMAGE; - return false; + if(cur_size > 0) + { + // We already have all the data, just decode it + mLoadedDiscard = mFormattedImage->getDiscardLevel(); + mState = DECODE_IMAGE; + return false; + } + else + { + return true ; //abort. + } } } mRequestedSize = mDesiredSize; @@ -887,7 +892,7 @@ bool LLTextureFetchWorker::doWork(S32 param) mGetReason.clear(); LL_DEBUGS("Texture") << "HTTP GET: " << mID << " Offset: " << offset << " Bytes: " << mRequestedSize - << " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << max_bandwidth + << " Bandwidth(kbps): " << mFetcher->getTextureBandwidth() << "/" << mFetcher->mMaxBandwidth << LL_ENDL; setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); mState = WAIT_HTTP_REQ; @@ -897,7 +902,7 @@ bool LLTextureFetchWorker::doWork(S32 param) std::vector<std::string> headers; headers.push_back("Accept: image/x-j2c"); res = mFetcher->mCurlGetRequest->getByteRange(mUrl, headers, offset, mRequestedSize, - new HTTPGetResponder(mFetcher, mID, LLTimer::getTotalTime(), mRequestedSize, offset)); + new HTTPGetResponder(mFetcher, mID, LLTimer::getTotalTime(), mRequestedSize, offset, true)); } if (!res) { @@ -945,17 +950,6 @@ bool LLTextureFetchWorker::doWork(S32 param) max_attempts = mHTTPFailCount+1; // Keep retrying LL_INFOS_ONCE("Texture") << "Texture server busy (503): " << mUrl << LL_ENDL; } - else if(mGetStatus >= HTTP_MULTIPLE_CHOICES && mGetStatus < HTTP_BAD_REQUEST) //http re-direct - { - ++mHTTPFailCount; - max_attempts = 5 ; //try at most 5 times to avoid infinite redirection loop. - - llwarns << "HTTP GET failed because of redirection: " << mUrl - << " Status: " << mGetStatus << " Reason: '" << mGetReason << llendl ; - - //assign to the new url - mUrl = mGetReason ; - } else { const S32 HTTP_MAX_RETRY_COUNT = 3; @@ -978,6 +972,7 @@ bool LLTextureFetchWorker::doWork(S32 param) else { resetFormattedData(); + mState = DONE; return true; // failed } } @@ -988,6 +983,17 @@ bool LLTextureFetchWorker::doWork(S32 param) } } + llassert_always(mBufferSize == cur_size + mRequestedSize); + if(!mBufferSize)//no data received. + { + delete[] mBuffer; + mBuffer = NULL; + + //abort. + mState = DONE; + return true; + } + if (mFormattedImage.isNull()) { // For now, create formatted image based on extension @@ -998,8 +1004,7 @@ bool LLTextureFetchWorker::doWork(S32 param) mFormattedImage = new LLImageJ2C; // default } } - - llassert_always(mBufferSize == cur_size + mRequestedSize); + if (mHaveAllData && mRequestedDiscard == 0) //the image file is fully loaded. { mFileSize = mBufferSize; @@ -1058,7 +1063,12 @@ bool LLTextureFetchWorker::doWork(S32 param) if (mFormattedImage->getDataSize() <= 0) { - llerrs << "Decode entered with invalid mFormattedImage. ID = " << mID << llendl; + //llerrs << "Decode entered with invalid mFormattedImage. ID = " << mID << llendl; + + //abort, don't decode + mState = DONE; + setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); + return true; } if (mLoadedDiscard < 0) { @@ -1255,8 +1265,7 @@ bool LLTextureFetchWorker::deleteOK() if ((haveWork() && // not ok to delete from these states - ((mState >= SEND_HTTP_REQ && mState <= WAIT_HTTP_REQ) || - (mState >= WRITE_TO_CACHE && mState <= WAIT_ON_WRITE)))) + ((mState >= WRITE_TO_CACHE && mState <= WAIT_ON_WRITE)))) { delete_ok = false; } @@ -1335,29 +1344,29 @@ bool LLTextureFetchWorker::processSimulatorPackets() ////////////////////////////////////////////////////////////////////////////// -void LLTextureFetchWorker::callbackHttpGet(const LLChannelDescriptors& channels, +S32 LLTextureFetchWorker::callbackHttpGet(const LLChannelDescriptors& channels, const LLIOPipe::buffer_ptr_t& buffer, bool partial, bool success) { + S32 data_size = 0 ; + LLMutexLock lock(&mWorkMutex); if (mState != WAIT_HTTP_REQ) { llwarns << "callbackHttpGet for unrequested fetch worker: " << mID << " req=" << mSentRequest << " state= " << mState << llendl; - return; + return data_size; } if (mLoaded) { llwarns << "Duplicate callback for " << mID.asString() << llendl; - return; // ignore duplicate callback + return data_size ; // ignore duplicate callback } if (success) { // get length of stream: - S32 data_size = buffer->countAfter(channels.in(), NULL); - - gTextureList.sTextureBits += data_size * 8; // Approximate - does not include header bits + data_size = buffer->countAfter(channels.in(), NULL); LL_DEBUGS("Texture") << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << LL_ENDL; if (data_size > 0) @@ -1394,6 +1403,8 @@ void LLTextureFetchWorker::callbackHttpGet(const LLChannelDescriptors& channels, } mLoaded = TRUE; setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); + + return data_size ; } ////////////////////////////////////////////////////////////////////////////// @@ -1512,6 +1523,7 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image mTextureCache(cache), mImageDecodeThread(imagedecodethread), mTextureBandwidth(0), + mHTTPTextureBits(0), mCurlGetRequest(NULL) { mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS"); @@ -1657,10 +1669,11 @@ void LLTextureFetch::addToHTTPQueue(const LLUUID& id) mHTTPTextureQueue.insert(id); } -void LLTextureFetch::removeFromHTTPQueue(const LLUUID& id) +void LLTextureFetch::removeFromHTTPQueue(const LLUUID& id, S32 received_size) { LLMutexLock lock(&mNetworkQueueMutex); mHTTPTextureQueue.erase(id); + mHTTPTextureBits += received_size * 8; // Approximate - does not include header bits } void LLTextureFetch::deleteRequest(const LLUUID& id, bool cancel) @@ -1808,12 +1821,19 @@ bool LLTextureFetch::updateRequestPriority(const LLUUID& id, F32 priority) //virtual S32 LLTextureFetch::update(U32 max_time_ms) { - S32 res; - static LLCachedControl<F32> band_width(gSavedSettings,"ThrottleBandwidthKBPS"); - mMaxBandwidth = band_width ; - - res = LLWorkerThread::update(max_time_ms); + + { + mNetworkQueueMutex.lock() ; + mMaxBandwidth = band_width ; + + gTextureList.sTextureBits += mHTTPTextureBits ; + mHTTPTextureBits = 0 ; + + mNetworkQueueMutex.unlock() ; + } + + S32 res = LLWorkerThread::update(max_time_ms); if (!mDebugPause) { @@ -1829,7 +1849,7 @@ S32 LLTextureFetch::update(U32 max_time_ms) lldebugs << "processed: " << processed << " messages." << llendl; } } - + return res; } diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h index 634e590fe0..2024165e7e 100644 --- a/indra/newview/lltexturefetch.h +++ b/indra/newview/lltexturefetch.h @@ -94,8 +94,7 @@ protected: void addToNetworkQueue(LLTextureFetchWorker* worker); void removeFromNetworkQueue(LLTextureFetchWorker* worker, bool cancel); void addToHTTPQueue(const LLUUID& id); - void removeFromHTTPQueue(const LLUUID& id); - S32 getHTTPQueueSize() { return getNumHTTPRequests(); } + void removeFromHTTPQueue(const LLUUID& id, S32 received_size = 0); void removeRequest(LLTextureFetchWorker* worker, bool cancel); // Called from worker thread (during doWork) void processCurlRequests(); @@ -134,6 +133,8 @@ private: F32 mTextureBandwidth; F32 mMaxBandwidth; LLTextureInfo mTextureInfo; + + U32 mHTTPTextureBits; }; #endif // LL_LLTEXTUREFETCH_H diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index 8ea4dbeb04..b588ff91d1 100644 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -450,14 +450,14 @@ void LLAvatarTexBar::draw() text_color, LLFontGL::LEFT, LLFontGL::TOP); //, LLFontGL::BOLD, LLFontGL::DROP_SHADOW_SOFT); line_num++; } - const U32 texture_timeout = gSavedSettings.getU32("AvatarBakedTextureTimeout"); + const U32 texture_timeout = gSavedSettings.getU32("AvatarBakedTextureUploadTimeout"); const U32 override_tex_discard_level = gSavedSettings.getU32("TextureDiscardLevel"); LLColor4 header_color(1.f, 1.f, 1.f, 0.9f); const std::string texture_timeout_str = texture_timeout ? llformat("%d",texture_timeout) : "Disabled"; const std::string override_tex_discard_level_str = override_tex_discard_level ? llformat("%d",override_tex_discard_level) : "Disabled"; - std::string header_text = llformat("[ Timeout('AvatarBakedTextureTimeout'):%s ] [ LOD_Override('TextureDiscardLevel'):%s ]", texture_timeout_str.c_str(), override_tex_discard_level_str.c_str()); + std::string header_text = llformat("[ Timeout('AvatarBakedTextureUploadTimeout'):%s ] [ LOD_Override('TextureDiscardLevel'):%s ]", texture_timeout_str.c_str(), override_tex_discard_level_str.c_str()); LLFontGL::getFontMonospace()->renderUTF8(header_text, 0, l_offset, v_offset + line_height*line_num, header_color, LLFontGL::LEFT, LLFontGL::TOP); //, LLFontGL::BOLD, LLFontGL::DROP_SHADOW_SOFT); line_num++; diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp index 7eac3867d5..57b80fc792 100644 --- a/indra/newview/lltoastgroupnotifypanel.cpp +++ b/indra/newview/lltoastgroupnotifypanel.cpp @@ -130,7 +130,7 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification pAttachLink->setValue(payload["inventory_name"]); mInventoryOffer = new LLOfferInfo(payload["inventory_offer"]); - childSetActionTextbox("attachment", boost::bind( + getChild<LLTextBox>("attachment")->setClickedCallback(boost::bind( &LLToastGroupNotifyPanel::onClickAttachment, this)); LLUIImagePtr attachIconImg = LLInventoryIcon::getIcon(mInventoryOffer->mType, diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp index fa21b1a866..81559429b0 100644 --- a/indra/newview/lltoolmorph.cpp +++ b/indra/newview/lltoolmorph.cpp @@ -147,7 +147,7 @@ void LLVisualParamHint::requestHintUpdates( LLVisualParamHint* exception1, LLVis BOOL LLVisualParamHint::needsRender() { - return mNeedsUpdate && mDelayFrames-- <= 0 && !gAgentAvatarp->mAppearanceAnimating && mAllowsUpdates; + return mNeedsUpdate && mDelayFrames-- <= 0 && !gAgentAvatarp->getIsAppearanceAnimating() && mAllowsUpdates; } void LLVisualParamHint::preRender(BOOL clear_depth) diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 95c4f01e46..cf1dd639e1 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -1270,7 +1270,6 @@ bool LLToolPie::handleMediaClick(const LLPickInfo& pick) if (!parcel || objectp.isNull() || - objectp->isHUDAttachment() || pick.mObjectFace < 0 || pick.mObjectFace >= objectp->getNumTEs()) { @@ -1561,7 +1560,7 @@ BOOL LLToolPie::pickRightMouseDownCallback() mute_msg = LLTrans::getString("MuteObject2"); } - gMenuHolder->childSetText("Object Mute", mute_msg); + gMenuHolder->getChild<LLUICtrl>("Object Mute")->setValue(mute_msg); gMenuObject->show(x, y); showVisualContextMenuEffect(); diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp index cbaa7248a2..ad7969681b 100644 --- a/indra/newview/llurldispatcher.cpp +++ b/indra/newview/llurldispatcher.cpp @@ -37,7 +37,6 @@ #include "llcommandhandler.h" #include "llfloaterhelpbrowser.h" #include "llfloaterreg.h" -#include "llfloaterurldisplay.h" #include "llfloaterworldmap.h" #include "llpanellogin.h" #include "llregionhandle.h" @@ -182,10 +181,6 @@ bool LLURLDispatcherImpl::dispatchRegion(const LLSLURL& slurl, bool right_mouse) return true; } - // LLFloaterURLDisplay functionality moved to LLPanelPlaces in Side Tray. - //LLFloaterURLDisplay* slurl_displayp = LLFloaterReg::getTypedInstance<LLFloaterURLDisplay>("preview_url",LLSD()); - //if(slurl_displayp) slurl_displayp->setName(region_name); - // Request a region handle by name LLWorldMapMessage::getInstance()->sendNamedRegionRequest(slurl.getRegion(), LLURLDispatcherImpl::regionNameCallback, @@ -251,21 +246,6 @@ void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const LLSLURL& key["z"] = global_pos.mdV[VZ]; LLSideTray::getInstance()->showPanel("panel_places", key); - - // LLFloaterURLDisplay functionality moved to LLPanelPlaces in Side Tray. - -// // display informational floater, allow user to click teleport btn -// LLFloaterURLDisplay* slurl_displayp = LLFloaterReg::getTypedInstance<LLFloaterURLDisplay>("preview_url",LLSD()); -// if(slurl_displayp) -// { -// url_displayp->displayParcelInfo(region_handle, local_pos); -// if(snapshot_id.notNull()) -// { -// url_displayp->setSnapshotDisplay(snapshot_id); -// } -// std::string locationString = llformat("%s %d, %d, %d", region_name.c_str(), x, y, z); -// url_displayp->setLocationString(locationString); -// } } } diff --git a/indra/newview/llviewchildren.cpp b/indra/newview/llviewchildren.cpp index 41eafa871d..b86e0ac441 100644 --- a/indra/newview/llviewchildren.cpp +++ b/indra/newview/llviewchildren.cpp @@ -55,12 +55,12 @@ LLViewChildren::LLViewChildren(LLPanel& parent) void LLViewChildren::show(const std::string& id, bool visible) { - mParent.childSetVisible(id, visible); + mParent.getChildView(id)->setVisible(visible); } void LLViewChildren::enable(const std::string& id, bool enabled) { - mParent.childSetEnabled(id, enabled); + mParent.getChildView(id)->setEnabled(enabled); } void LLViewChildren::setText( diff --git a/indra/newview/llviewerattachmenu.cpp b/indra/newview/llviewerattachmenu.cpp index f7f5ec72fd..5b3c4ea773 100644 --- a/indra/newview/llviewerattachmenu.cpp +++ b/indra/newview/llviewerattachmenu.cpp @@ -84,7 +84,7 @@ void LLViewerAttachMenu::populateMenus(const std::string& attach_to_menu_name, c LLSD cbparams; cbparams["index"] = curiter->first; - cbparams["label"] = attachment->getName(); + cbparams["label"] = p.name; p.on_click.function_name = "Object.Attach"; p.on_click.parameter = LLSD(attachment->getName()); p.on_enable.function_name = "Attachment.Label"; @@ -122,7 +122,7 @@ void LLViewerAttachMenu::attachObjects(const uuid_vec_t& items, const std::strin LLViewerInventoryItem* item = (LLViewerInventoryItem*)gInventory.getLinkedItem(id); if(item && gInventory.isObjectDescendentOf(id, gInventory.getRootFolderID())) { - rez_attachment(item, attachmentp); + rez_attachment(item, attachmentp); // don't replace if called from an "Attach To..." menu } else if(item && item->isFinished()) { diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index c953fb23e3..680a4f1ffa 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -82,7 +82,6 @@ #include "llfloaternotificationsconsole.h" #include "llfloateropenobject.h" #include "llfloaterpay.h" -#include "llfloaterparcel.h" #include "llfloaterperms.h" #include "llfloaterpostcard.h" #include "llfloaterpostprocess.h" @@ -102,7 +101,6 @@ #include "llfloatertos.h" #include "llfloatertopobjects.h" #include "llfloateruipreview.h" -#include "llfloaterurldisplay.h" #include "llfloatervoicedevicesettings.h" #include "llfloatervoiceeffect.h" #include "llfloaterwater.h" @@ -208,14 +206,12 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("openobject", "floater_openobject.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterOpenObject>); LLFloaterReg::add("outgoing_call", "floater_outgoing_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLOutgoingCallDialog>); - LLFloaterReg::add("parcel_info", "floater_preview_url.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterParcelInfo>); LLFloaterPayUtil::registerFloater(); LLFloaterReg::add("postcard", "floater_postcard.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPostcard>); LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>); LLFloaterReg::add("prefs_hardware_settings", "floater_hardware_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHardwareSettings>); LLFloaterReg::add("perm_prefs", "floater_perm_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPerms>); - LLFloaterReg::add("preview_url", "floater_preview_url.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterURLDisplay>); LLFloaterReg::add("pref_joystick", "floater_joystick.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterJoystick>); LLFloaterReg::add("pref_voicedevicesettings", "floater_device_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterVoiceDeviceSettings>); LLFloaterReg::add("preview_anim", "floater_preview_animation.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewAnim>, "preview"); diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index cbc86c89cc..a6e8ea032a 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -67,7 +67,7 @@ #include "llsidepanelappearance.h" ///---------------------------------------------------------------------------- -/// Helper class to store special inventory item names +/// Helper class to store special inventory item names and their localized values. ///---------------------------------------------------------------------------- class LLLocalizedInventoryItemsDictionary : public LLSingleton<LLLocalizedInventoryItemsDictionary> { @@ -93,8 +93,10 @@ public: mInventoryItemsDict["New Tattoo"] = LLTrans::getString("New Tattoo"); mInventoryItemsDict["Invalid Wearable"] = LLTrans::getString("Invalid Wearable"); + mInventoryItemsDict["New Gesture"] = LLTrans::getString("New Gesture"); mInventoryItemsDict["New Script"] = LLTrans::getString("New Script"); mInventoryItemsDict["New Folder"] = LLTrans::getString("New Folder"); + mInventoryItemsDict["New Note"] = LLTrans::getString("New Note"); mInventoryItemsDict["Contents"] = LLTrans::getString("Contents"); mInventoryItemsDict["Gesture"] = LLTrans::getString("Gesture"); @@ -108,7 +110,7 @@ public: //male mInventoryItemsDict["Male - Excuse me"] = LLTrans::getString("Male - Excuse me"); - mInventoryItemsDict["Male - Get lost"] = LLTrans::getString("Male - Get lost"); + mInventoryItemsDict["Male - Get lost"] = LLTrans::getString("Male - Get lost"); // double space after Male. EXT-8319 mInventoryItemsDict["Male - Blow kiss"] = LLTrans::getString("Male - Blow kiss"); mInventoryItemsDict["Male - Boo"] = LLTrans::getString("Male - Boo"); mInventoryItemsDict["Male - Bored"] = LLTrans::getString("Male - Bored"); @@ -120,19 +122,47 @@ public: mInventoryItemsDict["Male - Wow"] = LLTrans::getString("Male - Wow"); //female + mInventoryItemsDict["Female - Chuckle"] = LLTrans::getString("Female - Chuckle"); + mInventoryItemsDict["Female - Cry"] = LLTrans::getString("Female - Cry"); + mInventoryItemsDict["Female - Embarrassed"] = LLTrans::getString("Female - Embarrassed"); mInventoryItemsDict["Female - Excuse me"] = LLTrans::getString("Female - Excuse me"); - mInventoryItemsDict["Female - Get lost"] = LLTrans::getString("Female - Get lost"); + mInventoryItemsDict["Female - Get lost"] = LLTrans::getString("Female - Get lost"); // double space after Female. EXT-8319 mInventoryItemsDict["Female - Blow kiss"] = LLTrans::getString("Female - Blow kiss"); mInventoryItemsDict["Female - Boo"] = LLTrans::getString("Female - Boo"); mInventoryItemsDict["Female - Bored"] = LLTrans::getString("Female - Bored"); mInventoryItemsDict["Female - Hey"] = LLTrans::getString("Female - Hey"); + mInventoryItemsDict["Female - Hey baby"] = LLTrans::getString("Female - Hey baby"); mInventoryItemsDict["Female - Laugh"] = LLTrans::getString("Female - Laugh"); + mInventoryItemsDict["Female - Looking good"] = LLTrans::getString("Female - Looking good"); + mInventoryItemsDict["Female - Over here"] = LLTrans::getString("Female - Over here"); + mInventoryItemsDict["Female - Please"] = LLTrans::getString("Female - Please"); mInventoryItemsDict["Female - Repulsed"] = LLTrans::getString("Female - Repulsed"); mInventoryItemsDict["Female - Shrug"] = LLTrans::getString("Female - Shrug"); mInventoryItemsDict["Female - Stick tougue out"]= LLTrans::getString("Female - Stick tougue out"); mInventoryItemsDict["Female - Wow"] = LLTrans::getString("Female - Wow"); } + + /** + * Finds passed name in dictionary and replaces it with found localized value. + * + * @param object_name - string to be localized. + * @return true if passed name was found and localized, false otherwise. + */ + bool localizeInventoryObjectName(std::string& object_name) + { + LL_DEBUGS("InventoryLocalize") << "Searching for localization: " << object_name << LL_ENDL; + + std::map<std::string, std::string>::const_iterator dictionary_iter = mInventoryItemsDict.find(object_name); + + bool found = dictionary_iter != mInventoryItemsDict.end(); + if(found) + { + object_name = dictionary_iter->second; + LL_DEBUGS("InventoryLocalize") << "Found, new name is: " << object_name << LL_ENDL; + } + return found; + } }; @@ -391,16 +421,7 @@ BOOL LLViewerInventoryItem::unpackMessage(LLMessageSystem* msg, const char* bloc { BOOL rv = LLInventoryItem::unpackMessage(msg, block, block_num); - std::string localized_str; - - std::map<std::string, std::string>::const_iterator dictionary_iter; - - dictionary_iter = LLLocalizedInventoryItemsDictionary::getInstance()->mInventoryItemsDict.find(mName); - - if(dictionary_iter != LLLocalizedInventoryItemsDictionary::getInstance()->mInventoryItemsDict.end()) - { - mName = dictionary_iter->second; - } + LLLocalizedInventoryItemsDictionary::getInstance()->localizeInventoryObjectName(mName); mIsComplete = TRUE; return rv; @@ -820,6 +841,11 @@ void LLViewerInventoryCategory::changeType(LLFolderType::EType new_folder_type) gInventory.addChangedMask(LLInventoryObserver::LABEL, folder_id); } +void LLViewerInventoryCategory::localizeName() +{ + LLLocalizedInventoryItemsDictionary::getInstance()->localizeInventoryObjectName(mName); +} + ///---------------------------------------------------------------------------- /// Local function definitions ///---------------------------------------------------------------------------- @@ -1147,6 +1173,14 @@ void move_inventory_item( void copy_inventory_from_notecard(const LLUUID& object_id, const LLUUID& notecard_inv_id, const LLInventoryItem *src, U32 callback_id) { + if (NULL == src) + { + LL_WARNS("copy_inventory_from_notecard") << "Null pointer to item was passed for object_id " + << object_id << " and notecard_inv_id " + << notecard_inv_id << LL_ENDL; + return; + } + LLViewerRegion* viewer_region = NULL; LLViewerObject* vo = NULL; if (object_id.notNull() && (vo = gObjectList.findObject(object_id)) != NULL) @@ -1169,6 +1203,16 @@ void copy_inventory_from_notecard(const LLUUID& object_id, const LLUUID& notecar return; } + // check capability to prevent a crash while LL_ERRS in LLCapabilityListener::capListener. See EXT-8459. + std::string url = viewer_region->getCapability("CopyInventoryFromNotecard"); + if (url.empty()) + { + LL_WARNS("copy_inventory_from_notecard") << "There is no 'CopyInventoryFromNotecard' capability" + << " for region: " << viewer_region->getName() + << LL_ENDL; + return; + } + LLSD request, body; body["notecard-id"] = notecard_inv_id; body["object-id"] = object_id; diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h index 1dd6597388..ef3586537b 100644 --- a/indra/newview/llviewerinventory.h +++ b/indra/newview/llviewerinventory.h @@ -229,6 +229,11 @@ public: bool importFileLocal(LLFILE* fp); void determineFolderType(); void changeType(LLFolderType::EType new_folder_type); + +private: + friend class LLInventoryModel; + void localizeName(); // intended to be called from the LLInventoryModel + protected: LLUUID mOwnerID; S32 mVersion; diff --git a/indra/newview/llviewerjointattachment.cpp b/indra/newview/llviewerjointattachment.cpp index 2b4b78d82d..c9335366cd 100644 --- a/indra/newview/llviewerjointattachment.cpp +++ b/indra/newview/llviewerjointattachment.cpp @@ -35,12 +35,11 @@ #include "llviewerjointattachment.h" #include "llagentconstants.h" - #include "llviewercontrol.h" #include "lldrawable.h" #include "llgl.h" #include "llrender.h" -#include "llvoavatar.h" +#include "llvoavatarself.h" #include "llvolume.h" #include "pipeline.h" #include "llspatialpartition.h" @@ -164,6 +163,9 @@ void LLViewerJointAttachment::setupDrawable(LLViewerObject *object) //----------------------------------------------------------------------------- BOOL LLViewerJointAttachment::addObject(LLViewerObject* object) { + object->extractAttachmentItemID(); + + // Same object reattached if (isObjectAttached(object)) { llinfos << "(same object re-attached)" << llendl; @@ -171,20 +173,19 @@ BOOL LLViewerJointAttachment::addObject(LLViewerObject* object) // Pass through anyway to let setupDrawable() // re-connect object to the joint correctly } - - // Find the inventory item ID of the attached object - LLNameValue* item_id_nv = object->getNVPair("AttachItemID"); - if( item_id_nv ) + + // Two instances of the same inventory item attached -- + // Request detach, and kill the object in the meantime. + if (getAttachedObject(object->getAttachmentItemID())) { - const char* s = item_id_nv->getString(); - if( s ) - { - LLUUID item_id; - item_id.set(s); - object->setItemID(item_id); - lldebugs << "getNVPair( AttachItemID ) = " << item_id << llendl; - } + llinfos << "(same object re-attached)" << llendl; + object->markDead(); + + // If this happens to be attached to self, then detach. + LLVOAvatarSelf::detachAttachmentIntoInventory(object->getAttachmentItemID()); + return FALSE; } + mAttachedObjects.push_back(object); setupDrawable(object); @@ -207,7 +208,7 @@ BOOL LLViewerJointAttachment::addObject(LLViewerObject* object) } calcLOD(); mUpdateXform = TRUE; - + return TRUE; } @@ -303,7 +304,7 @@ void LLViewerJointAttachment::removeObject(LLViewerObject *object) { mUpdateXform = FALSE; } - object->setItemID(LLUUID::null); + object->setAttachmentItemID(LLUUID::null); } //----------------------------------------------------------------------------- @@ -429,7 +430,7 @@ const LLViewerObject *LLViewerJointAttachment::getAttachedObject(const LLUUID &o ++iter) { const LLViewerObject* attached_object = (*iter); - if (attached_object->getItemID() == object_id) + if (attached_object->getAttachmentItemID() == object_id) { return attached_object; } @@ -444,7 +445,7 @@ LLViewerObject *LLViewerJointAttachment::getAttachedObject(const LLUUID &object_ ++iter) { LLViewerObject* attached_object = (*iter); - if (attached_object->getItemID() == object_id) + if (attached_object->getAttachmentItemID() == object_id) { return attached_object; } diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 303f339f7d..3a360b68a5 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -2196,7 +2196,8 @@ void LLViewerMediaImpl::navigateReload() ////////////////////////////////////////////////////////////////////////////////////////// void LLViewerMediaImpl::navigateHome() { - navigateTo(mHomeURL, "", true, false); + bool rediscover_mimetype = mHomeMimeType.empty(); + navigateTo(mHomeURL, mHomeMimeType, rediscover_mimetype, false); } ////////////////////////////////////////////////////////////////////////////////////////// @@ -2308,6 +2309,8 @@ void LLViewerMediaImpl::navigateInternal() // which is really not what we want. LLSD headers = LLSD::emptyMap(); headers["Accept"] = "*/*"; + // Allow cookies in the response, to prevent a redirect loop when accessing join.secondlife.com + headers["Cookie"] = ""; LLHTTPClient::getHeaderOnly( mMediaURL, new LLMimeDiscoveryResponder(this), headers, 10.0f); } else if("data" == scheme || "file" == scheme || "about" == scheme) @@ -2916,14 +2919,23 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla { LL_DEBUGS("Media") << "MEDIA_EVENT_NAVIGATE_COMPLETE, uri is: " << plugin->getNavigateURI() << LL_ENDL; + std::string url = plugin->getNavigateURI(); if(getNavState() == MEDIANAVSTATE_BEGUN) { - mCurrentMediaURL = plugin->getNavigateURI(); - setNavState(MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED); + if(mCurrentMediaURL == url) + { + // This is a navigate that takes us to the same url as the previous navigate. + setNavState(MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS); + } + else + { + mCurrentMediaURL = url; + setNavState(MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED); + } } else if(getNavState() == MEDIANAVSTATE_SERVER_BEGUN) { - mCurrentMediaURL = plugin->getNavigateURI(); + mCurrentMediaURL = url; setNavState(MEDIANAVSTATE_SERVER_COMPLETE_BEFORE_LOCATION_CHANGED); } else @@ -2937,14 +2949,24 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla { LL_DEBUGS("Media") << "MEDIA_EVENT_LOCATION_CHANGED, uri is: " << plugin->getLocation() << LL_ENDL; + std::string url = plugin->getLocation(); + if(getNavState() == MEDIANAVSTATE_BEGUN) { - mCurrentMediaURL = plugin->getLocation(); - setNavState(MEDIANAVSTATE_FIRST_LOCATION_CHANGED); + if(mCurrentMediaURL == url) + { + // This is a navigate that takes us to the same url as the previous navigate. + setNavState(MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS); + } + else + { + mCurrentMediaURL = url; + setNavState(MEDIANAVSTATE_FIRST_LOCATION_CHANGED); + } } else if(getNavState() == MEDIANAVSTATE_SERVER_BEGUN) { - mCurrentMediaURL = plugin->getLocation(); + mCurrentMediaURL = url; setNavState(MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED); } else @@ -3057,20 +3079,25 @@ void LLViewerMediaImpl::calculateInterest() // Calculate distance from the avatar, for use in the proximity calculation. mProximityDistance = 0.0f; + mProximityCamera = 0.0f; if(!mObjectList.empty()) { // Just use the first object in the list. We could go through the list and find the closest object, but this should work well enough. std::list< LLVOVolume* >::iterator iter = mObjectList.begin() ; LLVOVolume* objp = *iter ; llassert_always(objp != NULL) ; + + // The distance calculation is invalid for HUD attachments -- leave both mProximityDistance and mProximityCamera at 0 for them. + if(!objp->isHUDAttachment()) + { + LLVector3d obj_global = objp->getPositionGlobal() ; + LLVector3d agent_global = gAgent.getPositionGlobal() ; + LLVector3d global_delta = agent_global - obj_global ; + mProximityDistance = global_delta.magVecSquared(); // use distance-squared because it's cheaper and sorts the same. - LLVector3d obj_global = objp->getPositionGlobal() ; - LLVector3d agent_global = gAgent.getPositionGlobal() ; - LLVector3d global_delta = agent_global - obj_global ; - mProximityDistance = global_delta.magVecSquared(); // use distance-squared because it's cheaper and sorts the same. - - LLVector3d camera_delta = gAgentCamera.getCameraPositionGlobal() - obj_global; - mProximityCamera = camera_delta.magVec(); + LLVector3d camera_delta = gAgentCamera.getCameraPositionGlobal() - obj_global; + mProximityCamera = camera_delta.magVec(); + } } if(mNeedsMuteCheck) @@ -3223,7 +3250,9 @@ void LLViewerMediaImpl::setNavState(EMediaNavState state) case MEDIANAVSTATE_NONE: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_NONE" << llendl; break; case MEDIANAVSTATE_BEGUN: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_BEGUN" << llendl; break; case MEDIANAVSTATE_FIRST_LOCATION_CHANGED: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_FIRST_LOCATION_CHANGED" << llendl; break; + case MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS" << llendl; break; case MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED" << llendl; break; + case MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS" << llendl; break; case MEDIANAVSTATE_SERVER_SENT: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_SERVER_SENT" << llendl; break; case MEDIANAVSTATE_SERVER_BEGUN: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_SERVER_BEGUN" << llendl; break; case MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED" << llendl; break; diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index ef9c07c6c7..01063aae06 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -237,7 +237,7 @@ public: std::string getCurrentMediaURL(); std::string getHomeURL() { return mHomeURL; } std::string getMediaEntryURL() { return mMediaEntryURL; } - void setHomeURL(const std::string& home_url) { mHomeURL = home_url; }; + void setHomeURL(const std::string& home_url, const std::string& mime_type = LLStringUtil::null) { mHomeURL = home_url; mHomeMimeType = mime_type;}; void clearCache(); std::string getMimeType() { return mMimeType; } void scaleMouse(S32 *mouse_x, S32 *mouse_y); @@ -362,7 +362,9 @@ public: MEDIANAVSTATE_NONE, // State is outside what we need to track for navigation. MEDIANAVSTATE_BEGUN, // a MEDIA_EVENT_NAVIGATE_BEGIN has been received which was not server-directed MEDIANAVSTATE_FIRST_LOCATION_CHANGED, // first LOCATION_CHANGED event after a non-server-directed BEGIN + MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS, // Same as above, but the new URL is identical to the previously navigated URL. MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED, // we received a NAVIGATE_COMPLETE event before the first LOCATION_CHANGED + MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS,// Same as above, but the new URL is identical to the previously navigated URL. MEDIANAVSTATE_SERVER_SENT, // server-directed nav has been requested, but MEDIA_EVENT_NAVIGATE_BEGIN hasn't been received yet MEDIANAVSTATE_SERVER_BEGUN, // MEDIA_EVENT_NAVIGATE_BEGIN has been received which was server-directed MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED, // first LOCATION_CHANGED event after a server-directed BEGIN @@ -399,6 +401,7 @@ private: bool mMovieImageHasMips; std::string mMediaURL; // The last media url set with NavigateTo std::string mHomeURL; + std::string mHomeMimeType; // forced mime type for home url std::string mMimeType; std::string mCurrentMediaURL; // The most current media url from the plugin (via the "location changed" or "navigate complete" events). std::string mCurrentMimeType; // The MIME type that caused the currently loaded plugin to be loaded. diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 5922834ae8..dc16cc593d 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -108,9 +108,12 @@ #include "llappearancemgr.h" #include "lltrans.h" #include "lleconomy.h" +#include "boost/unordered_map.hpp" using namespace LLVOAvatarDefines; +static boost::unordered_map<std::string, LLStringExplicit> sDefaultItemLabels; + BOOL enable_land_build(void*); BOOL enable_object_build(void*); @@ -2412,31 +2415,55 @@ void handle_object_touch() msg->sendMessage(object->getRegion()->getHost()); } -// One object must have touch sensor -class LLObjectEnableTouch : public view_listener_t +static void init_default_item_label(const std::string& item_name) { - bool handleEvent(const LLSD& userdata) + boost::unordered_map<std::string, LLStringExplicit>::iterator it = sDefaultItemLabels.find(item_name); + if (it == sDefaultItemLabels.end()) { - LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); - - bool new_value = obj && obj->flagHandleTouch(); - - // Update label based on the node touch name if available. - std::string touch_text; - LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); - if (node && node->mValid && !node->mTouchName.empty()) - { - touch_text = node->mTouchName; - } - else + // *NOTE: This will not work for items of type LLMenuItemCheckGL because they return boolean value + // (doesn't seem to matter much ATM). + LLStringExplicit default_label = gMenuHolder->childGetValue(item_name).asString(); + if (!default_label.empty()) { - touch_text = userdata.asString(); + sDefaultItemLabels.insert(std::pair<std::string, LLStringExplicit>(item_name, default_label)); } - gMenuHolder->childSetText("Object Touch", touch_text); - gMenuHolder->childSetText("Attachment Object Touch", touch_text); + } +} - return new_value; +static LLStringExplicit get_default_item_label(const std::string& item_name) +{ + LLStringExplicit res(""); + boost::unordered_map<std::string, LLStringExplicit>::iterator it = sDefaultItemLabels.find(item_name); + if (it != sDefaultItemLabels.end()) + { + res = it->second; } + + return res; +} + + +bool enable_object_touch(LLUICtrl* ctrl) +{ + LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); + + bool new_value = obj && obj->flagHandleTouch(); + + std::string item_name = ctrl->getName(); + init_default_item_label(item_name); + + // Update label based on the node touch name if available. + LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); + if (node && node->mValid && !node->mTouchName.empty()) + { + gMenuHolder->childSetText(item_name, node->mTouchName); + } + else + { + gMenuHolder->childSetText(item_name, get_default_item_label(item_name)); + } + + return new_value; }; //void label_touch(std::string& label, void*) @@ -3636,7 +3663,7 @@ class LLEnableEditShape : public view_listener_t } }; -bool enable_sit_object() +bool is_object_sittable() { LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); @@ -5522,56 +5549,37 @@ bool enable_pay_object() return false; } -bool visible_object_stand_up() +bool enable_object_stand_up() { - // 'Object Stand Up' menu item is visible when agent is sitting on selection + // 'Object Stand Up' menu item is enabled when agent is sitting on selection return sitting_on_selection(); } -bool visible_object_sit() +bool enable_object_sit(LLUICtrl* ctrl) { - // 'Object Sit' menu item is visible when agent is not sitting on selection - bool is_sit_visible = !sitting_on_selection(); - if (is_sit_visible) + // 'Object Sit' menu item is enabled when agent is not sitting on selection + bool sitting_on_sel = sitting_on_selection(); + if (!sitting_on_sel) { - LLMenuItemGL* sit_menu_item = gMenuHolder->getChild<LLMenuItemGL>("Object Sit"); - // Init default 'Object Sit' menu item label - static const LLStringExplicit sit_text(sit_menu_item->getLabel()); + std::string item_name = ctrl->getName(); + + // init default labels + init_default_item_label(item_name); + // Update label - std::string label; LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); if (node && node->mValid && !node->mSitName.empty()) { - label.assign(node->mSitName); + gMenuHolder->childSetText(item_name, node->mSitName); } else { - label = sit_text; + gMenuHolder->childSetText(item_name, get_default_item_label(item_name)); } - sit_menu_item->setLabel(label); } - return is_sit_visible; + return !sitting_on_sel && is_object_sittable(); } -class LLObjectEnableSitOrStand : public view_listener_t -{ - bool handleEvent(const LLSD& userdata) - { - bool new_value = false; - LLViewerObject* dest_object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); - - if(dest_object) - { - if(dest_object->getPCode() == LL_PCODE_VOLUME) - { - new_value = true; - } - } - - return new_value; - } -}; - void dump_select_mgr(void*) { LLSelectMgr::getInstance()->dump(); @@ -5853,6 +5861,7 @@ void handle_buy_land() class LLObjectAttachToAvatar : public view_listener_t { public: + LLObjectAttachToAvatar(bool replace) : mReplace(replace) {} static void setObjectSelection(LLObjectSelectionHandle selection) { sObjectSelection = selection; } private: @@ -5866,22 +5875,38 @@ private: LLViewerJointAttachment* attachment_point = NULL; if (index > 0) attachment_point = get_if_there(gAgentAvatarp->mAttachmentPoints, index, (LLViewerJointAttachment*)NULL); - confirm_replace_attachment(0, attachment_point); + confirmReplaceAttachment(0, attachment_point); } return true; } + static void onNearAttachObject(BOOL success, void *user_data); + void confirmReplaceAttachment(S32 option, LLViewerJointAttachment* attachment_point); + + struct CallbackData + { + CallbackData(LLViewerJointAttachment* point, bool replace) : mAttachmentPoint(point), mReplace(replace) {} + + LLViewerJointAttachment* mAttachmentPoint; + bool mReplace; + }; + protected: static LLObjectSelectionHandle sObjectSelection; + bool mReplace; }; LLObjectSelectionHandle LLObjectAttachToAvatar::sObjectSelection; -void near_attach_object(BOOL success, void *user_data) +// static +void LLObjectAttachToAvatar::onNearAttachObject(BOOL success, void *user_data) { + if (!user_data) return; + CallbackData* cb_data = static_cast<CallbackData*>(user_data); + if (success) { - const LLViewerJointAttachment *attachment = (LLViewerJointAttachment *)user_data; + const LLViewerJointAttachment *attachment = cb_data->mAttachmentPoint; U8 attachment_id = 0; if (attachment) @@ -5901,12 +5926,15 @@ void near_attach_object(BOOL success, void *user_data) // interpret 0 as "default location" attachment_id = 0; } - LLSelectMgr::getInstance()->sendAttach(attachment_id); + LLSelectMgr::getInstance()->sendAttach(attachment_id, cb_data->mReplace); } LLObjectAttachToAvatar::setObjectSelection(NULL); + + delete cb_data; } -void confirm_replace_attachment(S32 option, void* user_data) +// static +void LLObjectAttachToAvatar::confirmReplaceAttachment(S32 option, LLViewerJointAttachment* attachment_point) { if (option == 0/*YES*/) { @@ -5931,7 +5959,9 @@ void confirm_replace_attachment(S32 option, void* user_data) delta = delta * 0.5f; walkToSpot -= delta; - gAgent.startAutoPilotGlobal(gAgent.getPosGlobalFromAgent(walkToSpot), "Attach", NULL, near_attach_object, user_data, stop_distance); + // The callback will be called even if avatar fails to get close enough to the object, so we won't get a memory leak. + CallbackData* user_data = new CallbackData(attachment_point, mReplace); + gAgent.startAutoPilotGlobal(gAgent.getPosGlobalFromAgent(walkToSpot), "Attach", NULL, onNearAttachObject, user_data, stop_distance); gAgentCamera.clearFocusObject(); } } @@ -6051,7 +6081,7 @@ static bool onEnableAttachmentLabel(LLUICtrl* ctrl, const LLSD& data) const LLViewerObject* attached_object = (*attachment_iter); if (attached_object) { - LLViewerInventoryItem* itemp = gInventory.getItem(attached_object->getItemID()); + LLViewerInventoryItem* itemp = gInventory.getItem(attached_object->getAttachmentItemID()); if (itemp) { label += std::string(" (") + itemp->getName() + std::string(")"); @@ -6170,14 +6200,14 @@ class LLAttachmentEnableDrop : public view_listener_t { // make sure item is in your inventory (it could be a delayed attach message being sent from the sim) // so check to see if the item is in the inventory already - item = gInventory.getItem((*attachment_iter)->getItemID()); + item = gInventory.getItem((*attachment_iter)->getAttachmentItemID()); if (!item) { // Item does not exist, make an observer to enable the pie menu // when the item finishes fetching worst case scenario // if a fetch is already out there (being sent from a slow sim) // we refetch and there are 2 fetches - LLWornItemFetchedObserver* worn_item_fetched = new LLWornItemFetchedObserver((*attachment_iter)->getItemID()); + LLWornItemFetchedObserver* worn_item_fetched = new LLWornItemFetchedObserver((*attachment_iter)->getAttachmentItemID()); worn_item_fetched->startFetch(); gInventory.addObserver(worn_item_fetched); } @@ -6524,7 +6554,7 @@ void handle_dump_attachments(void*) !attached_object->mDrawable->isRenderType(0)); LLVector3 pos; if (visible) pos = attached_object->mDrawable->getPosition(); - llinfos << "ATTACHMENT " << key << ": item_id=" << attached_object->getItemID() + llinfos << "ATTACHMENT " << key << ": item_id=" << attached_object->getAttachmentItemID() << (attached_object ? " present " : " absent ") << (visible ? "visible " : "invisible ") << " at " << pos @@ -8115,9 +8145,9 @@ void initialize_menus() view_listener_t::addMenu(new LLObjectBuild(), "Object.Build"); commit.add("Object.Touch", boost::bind(&handle_object_touch)); commit.add("Object.SitOrStand", boost::bind(&handle_object_sit_or_stand)); - enable.add("Object.EnableSit", boost::bind(&enable_sit_object)); commit.add("Object.Delete", boost::bind(&handle_object_delete)); - view_listener_t::addMenu(new LLObjectAttachToAvatar(), "Object.AttachToAvatar"); + view_listener_t::addMenu(new LLObjectAttachToAvatar(true), "Object.AttachToAvatar"); + view_listener_t::addMenu(new LLObjectAttachToAvatar(false), "Object.AttachAddToAvatar"); view_listener_t::addMenu(new LLObjectReturn(), "Object.Return"); view_listener_t::addMenu(new LLObjectReportAbuse(), "Object.ReportAbuse"); view_listener_t::addMenu(new LLObjectMute(), "Object.Mute"); @@ -8131,13 +8161,12 @@ void initialize_menus() commit.add("Object.Open", boost::bind(&handle_object_open)); commit.add("Object.Take", boost::bind(&handle_take)); enable.add("Object.EnableOpen", boost::bind(&enable_object_open)); - view_listener_t::addMenu(new LLObjectEnableTouch(), "Object.EnableTouch"); - view_listener_t::addMenu(new LLObjectEnableSitOrStand(), "Object.EnableSitOrStand"); + enable.add("Object.EnableTouch", boost::bind(&enable_object_touch, _1)); enable.add("Object.EnableDelete", boost::bind(&enable_object_delete)); enable.add("Object.EnableWear", boost::bind(&object_selected_and_point_valid)); - enable.add("Object.StandUpVisible", boost::bind(&visible_object_stand_up)); - enable.add("Object.SitVisible", boost::bind(&visible_object_sit)); + enable.add("Object.EnableStandUp", boost::bind(&enable_object_stand_up)); + enable.add("Object.EnableSit", boost::bind(&enable_object_sit, _1)); view_listener_t::addMenu(new LLObjectEnableReturn(), "Object.EnableReturn"); view_listener_t::addMenu(new LLObjectEnableReportAbuse(), "Object.EnableReportAbuse"); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index d4ff054961..a04c919310 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -1138,10 +1138,26 @@ void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_nam } else if(from_name.empty()) { + std::string folder_name; + if (parent_folder) + { + // Localize folder name. + // *TODO: share this code? + folder_name = parent_folder->getName(); + if (LLFolderType::lookupIsProtectedType(parent_folder->getPreferredType())) + { + LLTrans::findString(folder_name, "InvFolder " + folder_name); + } + } + else + { + folder_name = LLTrans::getString("Unknown"); + } + // we receive a message from LLOpenTaskOffer, it mean that new landmark has been added. LLSD args; args["LANDMARK_NAME"] = item->getName(); - args["FOLDER_NAME"] = std::string(parent_folder ? parent_folder->getName() : "unknown"); + args["FOLDER_NAME"] = folder_name; LLNotificationsUtil::add("LandmarkCreated", args); } } @@ -1215,8 +1231,9 @@ bool highlight_offered_object(const LLUUID& obj_id) void inventory_offer_mute_callback(const LLUUID& blocked_id, const std::string& first_name, const std::string& last_name, - BOOL is_group, LLOfferInfo* offer = NULL) + BOOL is_group, boost::shared_ptr<LLNotificationResponderInterface> offer_ptr) { + LLOfferInfo* offer = dynamic_cast<LLOfferInfo*>(offer_ptr.get()); std::string from_name; LLMute::EType type; if (is_group) @@ -1406,7 +1423,13 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& // * we can't build two messages at once. if (2 == button) // Block { - gCacheName->get(mFromID, mFromGroup, boost::bind(&inventory_offer_mute_callback,_1,_2,_3,_4,this)); + LLNotificationPtr notification_ptr = LLNotifications::instance().find(notification["id"].asUUID()); + + llassert(notification_ptr != NULL); + if (notification_ptr != NULL) + { + gCacheName->get(mFromID, mFromGroup, boost::bind(&inventory_offer_mute_callback,_1,_2,_3,_4, notification_ptr->getResponderPtr())); + } } std::string from_string; // Used in the pop-up. @@ -1540,7 +1563,13 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const // * we can't build two messages at once. if (2 == button) { - gCacheName->get(mFromID, mFromGroup, boost::bind(&inventory_offer_mute_callback,_1,_2,_3,_4,this)); + LLNotificationPtr notification_ptr = LLNotifications::instance().find(notification["id"].asUUID()); + + llassert(notification_ptr != NULL); + if (notification_ptr != NULL) + { + gCacheName->get(mFromID, mFromGroup, boost::bind(&inventory_offer_mute_callback,_1,_2,_3,_4, notification_ptr->getResponderPtr())); + } } LLMessageSystem* msg = gMessageSystem; @@ -5095,7 +5124,7 @@ void process_alert_message(LLMessageSystem *msgsystem, void **user_data) void process_alert_core(const std::string& message, BOOL modal) { - // HACK -- handle callbacks for specific alerts + // HACK -- handle callbacks for specific alerts. It also is localized in notifications.xml if ( message == "You died and have been teleported to your home location") { LLViewerStats::getInstance()->incStat(LLViewerStats::ST_KILLED_COUNT); @@ -5290,10 +5319,10 @@ void process_economy_data(LLMessageSystem *msg, void** /*user_data*/) LL_INFOS_ONCE("Messaging") << "EconomyData message arrived; upload cost is L$" << upload_cost << LL_ENDL; - gMenuHolder->childSetLabelArg("Upload Image", "[COST]", llformat("%d", upload_cost)); - gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", llformat("%d", upload_cost)); - gMenuHolder->childSetLabelArg("Upload Animation", "[COST]", llformat("%d", upload_cost)); - gMenuHolder->childSetLabelArg("Bulk Upload", "[COST]", llformat("%d", upload_cost)); + gMenuHolder->getChild<LLUICtrl>("Upload Image")->setLabelArg("[COST]", llformat("%d", upload_cost)); + gMenuHolder->getChild<LLUICtrl>("Upload Sound")->setLabelArg("[COST]", llformat("%d", upload_cost)); + gMenuHolder->getChild<LLUICtrl>("Upload Animation")->setLabelArg("[COST]", llformat("%d", upload_cost)); + gMenuHolder->getChild<LLUICtrl>("Bulk Upload")->setLabelArg("[COST]", llformat("%d", upload_cost)); } void notify_cautioned_script_question(const LLSD& notification, const LLSD& response, S32 orig_questions, BOOL granted) diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp index fec112b9e7..1fac4d003d 100644 --- a/indra/newview/llviewernetwork.cpp +++ b/indra/newview/llviewernetwork.cpp @@ -49,6 +49,7 @@ const char* DEFAULT_SLURL_BASE = "https://%s/region/"; const char* DEFAULT_APP_SLURL_BASE = "x-grid-location-info://%s/app"; LLGridManager::LLGridManager() +: mIsInProductionGrid(false) { // by default, we use the 'grids.xml' file in the user settings directory // this file is an LLSD file containing multiple grid definitions. @@ -308,6 +309,10 @@ void LLGridManager::initialize(const std::string& grid_file) addGrid(grid); } + gSavedSettings.getControl("CurrentGrid")->getSignal()->connect(boost::bind(&LLGridManager::updateIsInProductionGrid, this)); + // since above only triggers on changes, trigger the callback manually to initialize state + updateIsInProductionGrid(); + LL_DEBUGS("GridManager") << "Selected grid is " << mGrid << LL_ENDL; setGridChoice(mGrid); if(mGridList[mGrid][GRID_LOGIN_URI_VALUE].isArray()) @@ -559,23 +564,30 @@ std::string LLGridManager::getLoginPage() return mGridList[mGrid][GRID_LOGIN_PAGE_VALUE]; } -bool LLGridManager::isInProductionGrid() +void LLGridManager::updateIsInProductionGrid() { + mIsInProductionGrid = false; + // *NOTE:Mani This used to compare GRID_INFO_AGNI to gGridChoice, // but it seems that loginURI trumps that. std::vector<std::string> uris; getLoginURIs(uris); - if (uris.size() < 1) + if (uris.empty()) { - return 1; + mIsInProductionGrid = true; + return; } LLStringUtil::toLower(uris[0]); if((uris[0].find("agni") != std::string::npos)) { - return true; + mIsInProductionGrid = true; + return; } +} - return false; +bool LLGridManager::isInProductionGrid() +{ + return mIsInProductionGrid; } void LLGridManager::saveFavorites() diff --git a/indra/newview/llviewernetwork.h b/indra/newview/llviewernetwork.h index 8c3a15b7cf..f6cbd57ac0 100644 --- a/indra/newview/llviewernetwork.h +++ b/indra/newview/llviewernetwork.h @@ -136,6 +136,8 @@ public: protected: + void updateIsInProductionGrid(); + // helper function for adding the predefined grids void addSystemGrid(const std::string& label, const std::string& name, @@ -148,6 +150,7 @@ protected: std::string mGrid; std::string mGridFile; LLSD mGridList; + bool mIsInProductionGrid; }; const S32 MAC_ADDRESS_BYTES = 6; diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 9587fbafb1..fd2212f25d 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -5352,6 +5352,33 @@ void LLViewerObject::resetChildrenPosition(const LLVector3& offset, BOOL simplif return ; } +const LLUUID &LLViewerObject::getAttachmentItemID() const +{ + return mAttachmentItemID; +} + +void LLViewerObject::setAttachmentItemID(const LLUUID &id) +{ + mAttachmentItemID = id; +} + +const LLUUID &LLViewerObject::extractAttachmentItemID() +{ + LLUUID item_id = LLUUID::null; + LLNameValue* item_id_nv = getNVPair("AttachItemID"); + if( item_id_nv ) + { + const char* s = item_id_nv->getString(); + if( s ) + { + item_id.set(s); + } + } + setAttachmentItemID(item_id); + return getAttachmentItemID(); +} + + //virtual LLVOAvatar* LLViewerObject::getAvatar() const { @@ -5423,4 +5450,3 @@ public: LLHTTPRegistration<ObjectPhysicsProperties> gHTTPRegistrationObjectPhysicsProperties("/message/ObjectPhysicsProperties"); - diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 70bc916acb..649b849644 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -708,11 +708,15 @@ protected: private: static S32 sNumObjects; + //-------------------------------------------------------------------- + // For objects that are attachments + //-------------------------------------------------------------------- public: - const LLUUID &getItemID() const { return mAttachmentItemID; } - void setItemID(const LLUUID &id) { mAttachmentItemID = id; } + const LLUUID &getAttachmentItemID() const; + void setAttachmentItemID(const LLUUID &id); + const LLUUID &extractAttachmentItemID(); // find&set the inventory item ID of the attached object private: - LLUUID mAttachmentItemID; // ItemID when item is in user inventory. + LLUUID mAttachmentItemID; // ItemID of the associated object is in user inventory. }; /////////////////// diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index ccec972c0d..f292d6b619 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -79,6 +79,8 @@ // format changes. JC const U32 INDRA_OBJECT_CACHE_VERSION = 14; +// Format string used to construct filename for the object cache +static const char OBJECT_CACHE_FILENAME[] = "objects_%d_%d.slc"; extern BOOL gNoRender; @@ -323,13 +325,25 @@ LLViewerRegion::~LLViewerRegion() delete mEventPoll; LLHTTPSender::clearSender(mHost); - saveCache(); + saveObjectCache(); std::for_each(mObjectPartition.begin(), mObjectPartition.end(), DeletePointer()); } -void LLViewerRegion::loadCache() +const std::string LLViewerRegion::getObjectCacheFilename(U64 mHandle) const +{ + std::string filename; + U32 region_x, region_y; + + grid_from_region_handle(mHandle, ®ion_x, ®ion_y); + filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, + llformat(OBJECT_CACHE_FILENAME, region_x, region_y)); + + return filename; +} + +void LLViewerRegion::loadObjectCache() { if (mCacheLoaded) { @@ -341,9 +355,8 @@ void LLViewerRegion::loadCache() LLVOCacheEntry *entry; - std::string filename; - filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE,"") + gDirUtilp->getDirDelimiter() + - llformat("objects_%d_%d.slc",U32(mHandle>>32)/REGION_WIDTH_UNITS, U32(mHandle)/REGION_WIDTH_UNITS ); + std::string filename = getObjectCacheFilename(mHandle); + LL_DEBUGS("ObjectCache") << filename << LL_ENDL; LLFILE* fp = LLFile::fopen(filename, "rb"); /* Flawfinder: ignore */ if (!fp) @@ -414,7 +427,7 @@ void LLViewerRegion::loadCache() } -void LLViewerRegion::saveCache() +void LLViewerRegion::saveObjectCache() { if (!mCacheLoaded) { @@ -427,9 +440,8 @@ void LLViewerRegion::saveCache() return; } - std::string filename; - filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE,"") + gDirUtilp->getDirDelimiter() + - llformat("sobjects_%d_%d.slc", U32(mHandle>>32)/REGION_WIDTH_UNITS, U32(mHandle)/REGION_WIDTH_UNITS ); + std::string filename = getObjectCacheFilename(mHandle); + LL_DEBUGS("ObjectCache") << filename << LL_ENDL; LLFILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */ if (!fp) @@ -1454,7 +1466,7 @@ void LLViewerRegion::unpackRegionHandshake() // Now that we have the name, we can load the cache file // off disk. - loadCache(); + loadObjectCache(); // After loading cache, signal that simulator can start // sending data. diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index a9e7ef771c..8254cf1cad 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -99,9 +99,8 @@ public: ~LLViewerRegion(); // Call this after you have the region name and handle. - void loadCache(); - - void saveCache(); + void loadObjectCache(); + void saveObjectCache(); void sendMessage(); // Send the current message to this region's simulator void sendReliableMessage(); // Send the current message to this region's simulator @@ -330,6 +329,9 @@ public: LLDynamicArray<LLUUID> mMapAvatarIDs; private: + // determine the cache filename for the region from the region handle + const std::string getObjectCacheFilename(U64 mHandle) const; + // The surfaces and other layers LLSurface* mLandp; @@ -404,7 +406,7 @@ private: // Cache ID is unique per-region, across renames, moving locations, // etc. LLUUID mCacheID; - + typedef std::map<std::string, std::string> CapabilityMap; CapabilityMap mCapabilities; diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index 697e8afa65..84a42611a4 100644 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -90,7 +90,7 @@ public: } static void processForeignLandmark(LLLandmark* landmark, const LLUUID& object_id, const LLUUID& notecard_inventory_id, - LLInventoryItem* item) + LLPointer<LLInventoryItem> item_ptr) { LLVector3d global_pos; landmark->getGlobalPos(global_pos); @@ -103,8 +103,16 @@ public: } else { - LLPointer<LLEmbeddedLandmarkCopied> cb = new LLEmbeddedLandmarkCopied(); - copy_inventory_from_notecard(object_id, notecard_inventory_id, item, gInventoryCallbacks.registerCB(cb)); + if (item_ptr.isNull()) + { + // check to prevent a crash. See EXT-8459. + llwarns << "Passed handle contains a dead inventory item. Most likely notecard has been closed and embedded item was destroyed." << llendl; + } + else + { + LLPointer<LLEmbeddedLandmarkCopied> cb = new LLEmbeddedLandmarkCopied(); + copy_inventory_from_notecard(object_id, notecard_inventory_id, item_ptr.get(), gInventoryCallbacks.registerCB(cb)); + } } } }; @@ -300,14 +308,14 @@ public: void markSaved(); - static LLInventoryItem* getEmbeddedItem(llwchar ext_char); // returns item from static list + static LLPointer<LLInventoryItem> getEmbeddedItemPtr(llwchar ext_char); // returns pointer to item from static list static BOOL getEmbeddedItemSaved(llwchar ext_char); // returns whether item from static list is saved private: struct embedded_info_t { - LLPointer<LLInventoryItem> mItem; + LLPointer<LLInventoryItem> mItemPtr; BOOL mSaved; }; typedef std::map<llwchar, embedded_info_t > item_map_t; @@ -378,7 +386,7 @@ BOOL LLEmbeddedItems::insertEmbeddedItem( LLInventoryItem* item, llwchar* ext_ch ++wc_emb; } - sEntries[wc_emb].mItem = item; + sEntries[wc_emb].mItemPtr = item; sEntries[wc_emb].mSaved = is_new ? FALSE : TRUE; *ext_char = wc_emb; mEmbeddedUsedChars.insert(wc_emb); @@ -400,14 +408,14 @@ BOOL LLEmbeddedItems::removeEmbeddedItem( llwchar ext_char ) } // static -LLInventoryItem* LLEmbeddedItems::getEmbeddedItem(llwchar ext_char) +LLPointer<LLInventoryItem> LLEmbeddedItems::getEmbeddedItemPtr(llwchar ext_char) { if( ext_char >= LLTextEditor::FIRST_EMBEDDED_CHAR && ext_char <= LLTextEditor::LAST_EMBEDDED_CHAR ) { item_map_t::iterator iter = sEntries.find(ext_char); if (iter != sEntries.end()) { - return iter->second.mItem; + return iter->second.mItemPtr; } } return NULL; @@ -505,7 +513,7 @@ BOOL LLEmbeddedItems::hasEmbeddedItem(llwchar ext_char) LLUIImagePtr LLEmbeddedItems::getItemImage(llwchar ext_char) const { - LLInventoryItem* item = getEmbeddedItem(ext_char); + LLInventoryItem* item = getEmbeddedItemPtr(ext_char); if (item) { const char* img_name = ""; @@ -570,7 +578,7 @@ void LLEmbeddedItems::getEmbeddedItemList( std::vector<LLPointer<LLInventoryItem for (std::set<llwchar>::iterator iter = mEmbeddedUsedChars.begin(); iter != mEmbeddedUsedChars.end(); ++iter) { llwchar wc = *iter; - LLPointer<LLInventoryItem> item = getEmbeddedItem(wc); + LLPointer<LLInventoryItem> item = getEmbeddedItemPtr(wc); if (item) { items.push_back(item); @@ -701,7 +709,7 @@ BOOL LLViewerTextEditor::handleMouseDown(S32 x, S32 y, MASK mask) { wc = getWText()[mCursorPos]; } - LLInventoryItem* item_at_pos = LLEmbeddedItems::getEmbeddedItem(wc); + LLPointer<LLInventoryItem> item_at_pos = LLEmbeddedItems::getEmbeddedItemPtr(wc); if (item_at_pos) { mDragItem = item_at_pos; @@ -1022,7 +1030,7 @@ llwchar LLViewerTextEditor::pasteEmbeddedItem(llwchar ext_char) { return ext_char; // already exists in my list } - LLInventoryItem* item = LLEmbeddedItems::getEmbeddedItem(ext_char); + LLInventoryItem* item = LLEmbeddedItems::getEmbeddedItemPtr(ext_char); if (item) { // Add item to my list and return new llwchar associated with it @@ -1056,7 +1064,7 @@ void LLViewerTextEditor::findEmbeddedItemSegments(S32 start, S32 end) && embedded_char <= LAST_EMBEDDED_CHAR && mEmbeddedItemList->hasEmbeddedItem(embedded_char) ) { - LLInventoryItem* itemp = mEmbeddedItemList->getEmbeddedItem(embedded_char); + LLInventoryItem* itemp = mEmbeddedItemList->getEmbeddedItemPtr(embedded_char); LLUIImagePtr image = mEmbeddedItemList->getItemImage(embedded_char); insertSegment(new LLEmbeddedItemSegment(idx, image, itemp, *this)); } @@ -1068,7 +1076,7 @@ BOOL LLViewerTextEditor::openEmbeddedItemAtPos(S32 pos) if( pos < getLength()) { llwchar wc = getWText()[pos]; - LLInventoryItem* item = LLEmbeddedItems::getEmbeddedItem( wc ); + LLPointer<LLInventoryItem> item = LLEmbeddedItems::getEmbeddedItemPtr( wc ); if( item ) { BOOL saved = LLEmbeddedItems::getEmbeddedItemSaved( wc ); @@ -1086,7 +1094,7 @@ BOOL LLViewerTextEditor::openEmbeddedItemAtPos(S32 pos) } -BOOL LLViewerTextEditor::openEmbeddedItem(LLInventoryItem* item, llwchar wc) +BOOL LLViewerTextEditor::openEmbeddedItem(LLPointer<LLInventoryItem> item, llwchar wc) { switch( item->getType() ) @@ -1154,17 +1162,17 @@ void LLViewerTextEditor::openEmbeddedSound( LLInventoryItem* item, llwchar wc ) } -void LLViewerTextEditor::openEmbeddedLandmark( LLInventoryItem* item, llwchar wc ) +void LLViewerTextEditor::openEmbeddedLandmark( LLPointer<LLInventoryItem> item_ptr, llwchar wc ) { - if (!item) + if (item_ptr.isNull()) return; - LLLandmark* landmark = gLandmarkList.getAsset(item->getAssetUUID(), - boost::bind(&LLEmbeddedLandmarkCopied::processForeignLandmark, _1, mObjectID, mNotecardInventoryID, item)); + LLLandmark* landmark = gLandmarkList.getAsset(item_ptr->getAssetUUID(), + boost::bind(&LLEmbeddedLandmarkCopied::processForeignLandmark, _1, mObjectID, mNotecardInventoryID, item_ptr)); if (landmark) { LLEmbeddedLandmarkCopied::processForeignLandmark(landmark, mObjectID, - mNotecardInventoryID, item); + mNotecardInventoryID, item_ptr); } } @@ -1223,7 +1231,7 @@ bool LLViewerTextEditor::onCopyToInvDialog(const LLSD& notification, const LLSD& { LLUUID item_id = notification["payload"]["item_id"].asUUID(); llwchar wc = llwchar(notification["payload"]["item_wc"].asInteger()); - LLInventoryItem* itemp = LLEmbeddedItems::getEmbeddedItem(wc); + LLInventoryItem* itemp = LLEmbeddedItems::getEmbeddedItemPtr(wc); if (itemp) copyInventory(itemp); } diff --git a/indra/newview/llviewertexteditor.h b/indra/newview/llviewertexteditor.h index ba0c40cb2e..74b6d70640 100644 --- a/indra/newview/llviewertexteditor.h +++ b/indra/newview/llviewertexteditor.h @@ -104,13 +104,16 @@ private: virtual llwchar pasteEmbeddedItem(llwchar ext_char); BOOL openEmbeddedItemAtPos( S32 pos ); - BOOL openEmbeddedItem(LLInventoryItem* item, llwchar wc); + BOOL openEmbeddedItem(LLPointer<LLInventoryItem> item, llwchar wc); S32 insertEmbeddedItem(S32 pos, LLInventoryItem* item); + // *NOTE: most of openEmbeddedXXX methods except openEmbeddedLandmark take pointer to LLInventoryItem. + // Be sure they don't bind it to callback function to avoid situation when it gets invalid when + // callback is trigged after text editor is closed. See EXT-8459. void openEmbeddedTexture( LLInventoryItem* item, llwchar wc ); void openEmbeddedSound( LLInventoryItem* item, llwchar wc ); - void openEmbeddedLandmark( LLInventoryItem* item, llwchar wc ); + void openEmbeddedLandmark( LLPointer<LLInventoryItem> item_ptr, llwchar wc ); void openEmbeddedNotecard( LLInventoryItem* item, llwchar wc); void openEmbeddedCallingcard( LLInventoryItem* item, llwchar wc); void showCopyToInvDialog( LLInventoryItem* item, llwchar wc ); diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index d50efe89dd..1ee399ecd2 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -114,7 +114,6 @@ LLLoadedCallbackEntry::LLLoadedCallbackEntry(loaded_callback_func cb, BOOL need_imageraw, // Needs image raw for the callback void* userdata, LLLoadedCallbackEntry::source_callback_list_t* src_callback_list, - void* source, LLViewerFetchedTexture* target, BOOL pause) : mCallback(cb), @@ -123,7 +122,6 @@ LLLoadedCallbackEntry::LLLoadedCallbackEntry(loaded_callback_func cb, mNeedsImageRaw(need_imageraw), mUserData(userdata), mSourceCallbackList(src_callback_list), - mSource(source), mPaused(pause) { if(mSourceCallbackList) @@ -145,10 +143,10 @@ void LLLoadedCallbackEntry::removeTexture(LLViewerFetchedTexture* tex) } //static -void LLLoadedCallbackEntry::cleanUpCallbackList(LLLoadedCallbackEntry::source_callback_list_t* callback_list, void* src) +void LLLoadedCallbackEntry::cleanUpCallbackList(LLLoadedCallbackEntry::source_callback_list_t* callback_list) { //clear texture callbacks. - if(!callback_list->empty()) + if(callback_list && !callback_list->empty()) { for(LLLoadedCallbackEntry::source_callback_list_t::iterator iter = callback_list->begin(); iter != callback_list->end(); ++iter) @@ -156,7 +154,7 @@ void LLLoadedCallbackEntry::cleanUpCallbackList(LLLoadedCallbackEntry::source_ca LLViewerFetchedTexture* tex = gTextureList.findImage(*iter) ; if(tex) { - tex->deleteCallbackEntry(src) ; + tex->deleteCallbackEntry(callback_list) ; } } callback_list->clear() ; @@ -514,6 +512,7 @@ LLViewerTexture::LLViewerTexture(const LLImageRaw* raw, BOOL usemipmaps) LLViewerTexture::~LLViewerTexture() { + cleanup(); sImageCount--; } @@ -547,7 +546,6 @@ S8 LLViewerTexture::getType() const return LLViewerTexture::LOCAL_TEXTURE ; } -//virtual void LLViewerTexture::cleanup() { mFaceList.clear() ; @@ -816,7 +814,7 @@ void LLViewerTexture::generateGLTexture() LLImageGL* LLViewerTexture::getGLTexture() const { llassert(mGLTexturep.notNull()) ; - + return mGLTexturep ; } @@ -1186,7 +1184,6 @@ S8 LLViewerFetchedTexture::getType() const return LLViewerTexture::FETCHED_TEXTURE ; } -//virtual void LLViewerFetchedTexture::cleanup() { for(callback_list_t::iterator iter = mLoadedCallbackList.begin(); @@ -1208,8 +1205,6 @@ void LLViewerFetchedTexture::cleanup() mCachedRawDiscardLevel = -1 ; mCachedRawImageReady = FALSE ; mSavedRawImage = NULL ; - - LLViewerTexture::cleanup(); } void LLViewerFetchedTexture::setForSculpt() @@ -1502,53 +1497,62 @@ void LLViewerFetchedTexture::setKnownDrawSize(S32 width, S32 height) void LLViewerFetchedTexture::processTextureStats() { if(mFullyLoaded) - { - if(mDesiredDiscardLevel <= mMinDesiredDiscardLevel)//already loaded + { + if(mDesiredDiscardLevel > mMinDesiredDiscardLevel)//need to load more { - return ; + mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel) ; + mFullyLoaded = FALSE ; } - mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel) ; - mFullyLoaded = FALSE ; - return ; - } - - updateVirtualSize() ; - - static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes"); - - if (textures_fullres) - { - mDesiredDiscardLevel = 0; - } - else if(!mFullWidth || !mFullHeight) - { - mDesiredDiscardLevel = getMaxDiscardLevel() ; } else - { - if(!mKnownDrawWidth || !mKnownDrawHeight || mFullWidth <= mKnownDrawWidth || mFullHeight <= mKnownDrawHeight) + { + updateVirtualSize() ; + + static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes"); + + if (textures_fullres) { - if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT) + mDesiredDiscardLevel = 0; + } + else if(!mFullWidth || !mFullHeight) + { + mDesiredDiscardLevel = getMaxDiscardLevel() ; + } + else + { + if(!mKnownDrawWidth || !mKnownDrawHeight || mFullWidth <= mKnownDrawWidth || mFullHeight <= mKnownDrawHeight) { - mDesiredDiscardLevel = 1; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048 + if (mFullWidth > MAX_IMAGE_SIZE_DEFAULT || mFullHeight > MAX_IMAGE_SIZE_DEFAULT) + { + mDesiredDiscardLevel = 1; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048 + } + else + { + mDesiredDiscardLevel = 0; + } } - else + else if(mKnownDrawSizeChanged)//known draw size is set + { + mDesiredDiscardLevel = (S8)llmin(log((F32)mFullWidth / mKnownDrawWidth) / log_2, + log((F32)mFullHeight / mKnownDrawHeight) / log_2) ; + mDesiredDiscardLevel = llclamp(mDesiredDiscardLevel, (S8)0, (S8)getMaxDiscardLevel()) ; + mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel) ; + } + mKnownDrawSizeChanged = FALSE ; + + if(getDiscardLevel() >= 0 && (getDiscardLevel() <= mDesiredDiscardLevel)) { - mDesiredDiscardLevel = 0; + mFullyLoaded = TRUE ; } } - else if(mKnownDrawSizeChanged)//known draw size is set - { - mDesiredDiscardLevel = (S8)llmin(log((F32)mFullWidth / mKnownDrawWidth) / log_2, - log((F32)mFullHeight / mKnownDrawHeight) / log_2) ; - mDesiredDiscardLevel = llclamp(mDesiredDiscardLevel, (S8)0, (S8)getMaxDiscardLevel()) ; - mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel) ; - } - mKnownDrawSizeChanged = FALSE ; - - if(getDiscardLevel() >= 0 && (getDiscardLevel() <= mDesiredDiscardLevel)) + } + + if(mForceToSaveRawImage && mDesiredSavedRawDiscardLevel >= 0) //force to refetch the texture. + { + mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S8)mDesiredSavedRawDiscardLevel) ; + if(getDiscardLevel() < 0 || getDiscardLevel() > mDesiredDiscardLevel) { - mFullyLoaded = TRUE ; + mFullyLoaded = FALSE ; } } } @@ -1627,6 +1631,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority() S32 ddiscard = MAX_DISCARD_LEVEL - (S32)desired; ddiscard = llclamp(ddiscard, 0, MAX_DELTA_DISCARD_LEVEL_FOR_PRIORITY); priority = (ddiscard + 1) * PRIORITY_DELTA_DISCARD_LEVEL_FACTOR; + setAdditionalDecodePriority(1.0f) ;//boost the textures without any data so far. } else if ((mMinDiscardLevel > 0) && (cur_discard <= mMinDiscardLevel)) { @@ -1730,6 +1735,11 @@ void LLViewerFetchedTexture::setDecodePriority(F32 priority) llassert(!mInImageList); mDecodePriority = priority; + + if(mDecodePriority < F_ALMOST_ZERO) + { + mStopFetchingTimer.reset() ; + } } void LLViewerFetchedTexture::setAdditionalDecodePriority(F32 priority) @@ -1921,7 +1931,12 @@ bool LLViewerFetchedTexture::updateFetch() // llinfos << "Calling updateRequestPriority() with decode_priority = 0.0f" << llendl; // calcDecodePriority(); // } - LLAppViewer::getTextureFetch()->updateRequestPriority(mID, decode_priority); + static const F32 MAX_HOLD_TIME = 5.0f ; //seconds to wait before canceling fecthing if decode_priority is 0.f. + if(decode_priority > 0.0f || mStopFetchingTimer.getElapsedTimeF32() > MAX_HOLD_TIME) + { + mStopFetchingTimer.reset() ; + LLAppViewer::getTextureFetch()->updateRequestPriority(mID, decode_priority); + } } } @@ -2045,7 +2060,7 @@ void LLViewerFetchedTexture::setIsMissingAsset() } void LLViewerFetchedTexture::setLoadedCallback( loaded_callback_func loaded_callback, - S32 discard_level, BOOL keep_imageraw, BOOL needs_aux, void* userdata, void* src, + S32 discard_level, BOOL keep_imageraw, BOOL needs_aux, void* userdata, LLLoadedCallbackEntry::source_callback_list_t* src_callback_list, BOOL pause) { // @@ -2064,9 +2079,9 @@ void LLViewerFetchedTexture::setLoadedCallback( loaded_callback_func loaded_call if(mPauseLoadedCallBacks && !pause) { - unpauseLoadedCallbacks(src) ; + unpauseLoadedCallbacks(src_callback_list) ; } - LLLoadedCallbackEntry* entryp = new LLLoadedCallbackEntry(loaded_callback, discard_level, keep_imageraw, userdata, src_callback_list, src, this, pause); + LLLoadedCallbackEntry* entryp = new LLLoadedCallbackEntry(loaded_callback, discard_level, keep_imageraw, userdata, src_callback_list, this, pause); mLoadedCallbackList.push_back(entryp); mNeedsAux |= needs_aux; @@ -2081,26 +2096,56 @@ void LLViewerFetchedTexture::setLoadedCallback( loaded_callback_func loaded_call } } -void LLViewerFetchedTexture::deleteCallbackEntry(void* src) +void LLViewerFetchedTexture::clearCallbackEntryList() { if(mLoadedCallbackList.empty()) { return ; } - S32 desired_discard = INVALID_DISCARD_LEVEL ; + for(callback_list_t::iterator iter = mLoadedCallbackList.begin(); + iter != mLoadedCallbackList.end(); ) + { + LLLoadedCallbackEntry *entryp = *iter; + + // We never finished loading the image. Indicate failure. + // Note: this allows mLoadedCallbackUserData to be cleaned up. + entryp->mCallback(FALSE, this, NULL, NULL, 0, TRUE, entryp->mUserData); + iter = mLoadedCallbackList.erase(iter) ; + delete entryp; + } + gTextureList.mCallbackList.erase(this); + + mMinDesiredDiscardLevel = MAX_DISCARD_LEVEL + 1; + mLoadedCallbackDesiredDiscardLevel = S8_MAX ; + if(mForceToSaveRawImage) + { + destroySavedRawImage() ; + } + + return ; +} + +void LLViewerFetchedTexture::deleteCallbackEntry(const LLLoadedCallbackEntry::source_callback_list_t* callback_list) +{ + if(mLoadedCallbackList.empty() || !callback_list) + { + return ; + } + + S32 desired_discard = S8_MAX ; S32 desired_raw_discard = INVALID_DISCARD_LEVEL ; for(callback_list_t::iterator iter = mLoadedCallbackList.begin(); iter != mLoadedCallbackList.end(); ) { LLLoadedCallbackEntry *entryp = *iter; - if(entryp->mSource == src) + if(entryp->mSourceCallbackList == callback_list) { // We never finished loading the image. Indicate failure. // Note: this allows mLoadedCallbackUserData to be cleaned up. entryp->mCallback(FALSE, this, NULL, NULL, 0, TRUE, entryp->mUserData); - delete entryp; iter = mLoadedCallbackList.erase(iter) ; + delete entryp; } else { @@ -2139,14 +2184,20 @@ void LLViewerFetchedTexture::deleteCallbackEntry(void* src) } } -void LLViewerFetchedTexture::unpauseLoadedCallbacks(void* src) +void LLViewerFetchedTexture::unpauseLoadedCallbacks(const LLLoadedCallbackEntry::source_callback_list_t* callback_list) +{ + if(!callback_list) { + mPauseLoadedCallBacks = FALSE ; + return ; + } + BOOL need_raw = FALSE ; for(callback_list_t::iterator iter = mLoadedCallbackList.begin(); iter != mLoadedCallbackList.end(); ) { LLLoadedCallbackEntry *entryp = *iter++; - if(entryp->mSource == src) + if(entryp->mSourceCallbackList == callback_list) { entryp->mPaused = FALSE ; if(entryp->mNeedsImageRaw) @@ -2162,15 +2213,20 @@ void LLViewerFetchedTexture::unpauseLoadedCallbacks(void* src) } } -void LLViewerFetchedTexture::pauseLoadedCallbacks(void* src) +void LLViewerFetchedTexture::pauseLoadedCallbacks(const LLLoadedCallbackEntry::source_callback_list_t* callback_list) +{ + if(!callback_list) { + return ; + } + bool paused = true ; for(callback_list_t::iterator iter = mLoadedCallbackList.begin(); iter != mLoadedCallbackList.end(); ) { LLLoadedCallbackEntry *entryp = *iter++; - if(entryp->mSource == src) + if(entryp->mSourceCallbackList == callback_list) { entryp->mPaused = TRUE ; } @@ -2347,10 +2403,6 @@ bool LLViewerFetchedTexture::doLoadedCallbacks() BOOL final = mRawDiscardLevel <= entryp->mDesiredDiscard ? TRUE : FALSE; //llinfos << "Running callback for " << getID() << llendl; //llinfos << mRawImage->getWidth() << "x" << mRawImage->getHeight() << llendl; - if (final) - { - //llinfos << "Final!" << llendl; - } entryp->mLastUsedDiscard = mRawDiscardLevel; entryp->mCallback(TRUE, this, mRawImage, mAuxRawImage, mRawDiscardLevel, final, entryp->mUserData); if (final) @@ -2651,6 +2703,12 @@ void LLViewerFetchedTexture::forceToSaveRawImage(S32 desired_discard, bool from_ } void LLViewerFetchedTexture::destroySavedRawImage() { + clearCallbackEntryList() ; + //if(mForceToSaveRawImage && mDesiredSavedRawDiscardLevel >= 0 && mDesiredSavedRawDiscardLevel < getDiscardLevel()) + //{ + // return ; //can not destroy the saved raw image before it is fully fetched, otherwise causing callbacks hanging there. + //} + mSavedRawImage = NULL ; mForceToSaveRawImage = FALSE ; mSavedRawDiscardLevel = -1 ; @@ -2901,7 +2959,7 @@ BOOL LLViewerLODTexture::isUpdateFrozen() void LLViewerLODTexture::processTextureStats() { updateVirtualSize() ; - + static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes"); if (textures_fullres) @@ -3703,7 +3761,7 @@ void LLTexturePipelineTester::updateStablizingTime() { F32 t = mEndStablizingTime - mStartStablizingTime ; - if(t > 0.0001f && (t - mTotalStablizingTime) < 0.0001f) + if(t > F_ALMOST_ZERO && (t - mTotalStablizingTime) < F_ALMOST_ZERO) { //already stablized mTotalStablizingTime = LLImageGL::sLastFrameTime - mStartStablizingTime ; @@ -3828,7 +3886,7 @@ LLMetricPerformanceTester::LLTestSession* LLTexturePipelineTester::loadTestSessi //time F32 start_time = (*log)[label]["StartFetchingTime"].asReal() ; F32 cur_time = (*log)[label]["Time"].asReal() ; - if(start_time - start_fetching_time > 0.0001f) //fetching has paused for a while + if(start_time - start_fetching_time > F_ALMOST_ZERO) //fetching has paused for a while { sessionp->mTotalFetchingTime += total_fetching_time ; sessionp->mTotalGrayTime += total_gray_time ; diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index b33d04e8dd..6adfd2bae4 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -75,7 +75,6 @@ public: BOOL need_imageraw, // Needs image raw for the callback void* userdata, source_callback_list_t* src_callback_list, - void* source, LLViewerFetchedTexture* target, BOOL pause); ~LLLoadedCallbackEntry(); @@ -88,10 +87,9 @@ public: BOOL mPaused; void* mUserData; source_callback_list_t* mSourceCallbackList; - void* mSource; public: - static void cleanUpCallbackList(LLLoadedCallbackEntry::source_callback_list_t* callback_list, void* src) ; + static void cleanUpCallbackList(LLLoadedCallbackEntry::source_callback_list_t* callback_list) ; }; class LLTextureBar; @@ -265,7 +263,7 @@ public: /*virtual*/ void updateBindStatsForTester() ; protected: - virtual void cleanup() ; + void cleanup() ; void init(bool firstinit) ; void reorganizeFaceList() ; void reorganizeVolumeList() ; @@ -387,13 +385,14 @@ public: // Set callbacks to get called when the image gets updated with higher // resolution versions. void setLoadedCallback(loaded_callback_func cb, - S32 discard_level, BOOL keep_imageraw, BOOL needs_aux, void* src, + S32 discard_level, BOOL keep_imageraw, BOOL needs_aux, void* userdata, LLLoadedCallbackEntry::source_callback_list_t* src_callback_list, BOOL pause = FALSE); bool hasCallbacks() { return mLoadedCallbackList.empty() ? false : true; } - void pauseLoadedCallbacks(void* src); - void unpauseLoadedCallbacks(void* src); + void pauseLoadedCallbacks(const LLLoadedCallbackEntry::source_callback_list_t* callback_list); + void unpauseLoadedCallbacks(const LLLoadedCallbackEntry::source_callback_list_t* callback_list); bool doLoadedCallbacks(); - void deleteCallbackEntry(void* src); + void deleteCallbackEntry(const LLLoadedCallbackEntry::source_callback_list_t* callback_list); + void clearCallbackEntryList() ; void addToCreateTexture(); @@ -488,7 +487,7 @@ protected: private: void init(bool firstinit) ; - /*virtual*/ void cleanup() ; + void cleanup() ; void saveRawImage() ; void setCachedRawImage() ; @@ -564,6 +563,7 @@ protected: // Timers LLFrameTimer mLastPacketTimer; // Time since last packet. + LLFrameTimer mStopFetchingTimer; // Time since mDecodePriority == 0.f. BOOL mInImageList; // TRUE if image is in list (in which case don't reset priority!) BOOL mNeedsCreateTexture; diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index b3aff30324..02097ea06d 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -853,14 +853,14 @@ F32 LLViewerTextureList::updateImagesFetchTextures(F32 max_time) } min_count--; } - if (fetch_count == 0) - { - gDebugTimers[0].pause(); - } - else - { - gDebugTimers[0].unpause(); - } + //if (fetch_count == 0) + //{ + // gDebugTimers[0].pause(); + //} + //else + //{ + // gDebugTimers[0].unpause(); + //} return image_op_timer.getElapsedTimeF32(); } @@ -1402,12 +1402,17 @@ LLUIImagePtr LLUIImageList::loadUIImage(LLViewerFetchedTexture* imagep, const st mUIImages.insert(std::make_pair(name, new_imagep)); mUITextureList.push_back(imagep); - LLUIImageLoadData* datap = new LLUIImageLoadData; - datap->mImageName = name; - datap->mImageScaleRegion = scale_rect; - - imagep->setLoadedCallback(onUIImageLoaded, 0, FALSE, FALSE, datap, NULL, NULL); + //Note: + //Some other textures such as ICON also through this flow to be fetched. + //But only UI textures need to set this callback. + if(imagep->getBoostLevel() == LLViewerTexture::BOOST_UI) + { + LLUIImageLoadData* datap = new LLUIImageLoadData; + datap->mImageName = name; + datap->mImageScaleRegion = scale_rect; + imagep->setLoadedCallback(onUIImageLoaded, 0, FALSE, FALSE, datap, NULL); + } return new_imagep; } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index b1def5b2c8..430f83307a 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2547,17 +2547,6 @@ void LLViewerWindow::updateUI() // only update mouse hover set when UI is visible (since we shouldn't send hover events to invisible UI if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI)) { - // include all ancestors of captor_view as automatically having mouse - if (captor_view) - { - LLView* captor_parent_view = captor_view->getParent(); - while(captor_parent_view) - { - mouse_hover_set.insert(captor_parent_view->getHandle()); - captor_parent_view = captor_parent_view->getParent(); - } - } - // aggregate visible views that contain mouse cursor in display order LLPopupView::popup_list_t popups = mPopupView->getCurrentPopups(); @@ -4466,7 +4455,7 @@ void LLViewerWindow::restoreGL(const std::string& progress_message) gResizeScreenTexture = TRUE; - if (gAgentCamera.cameraCustomizeAvatar()) + if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures()) { LLVisualParamHint::requestHintUpdates(); } diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index e50d0fce49..0c8a518de0 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -831,6 +831,7 @@ LLVOAvatar::~LLVOAvatar() mDead = TRUE; mAnimationSources.clear(); + LLLoadedCallbackEntry::cleanUpCallbackList(&mCallbackTextureList) ; ll_aligned_free_16(mImpostorExtents); mImpostorExtents = NULL; @@ -847,7 +848,7 @@ void LLVOAvatar::markDead() sNumVisibleChatBubbles--; } mVoiceVisualizer->markDead(); - LLLoadedCallbackEntry::cleanUpCallbackList(&mCallbackTextureList, this) ; + LLLoadedCallbackEntry::cleanUpCallbackList(&mCallbackTextureList) ; LLViewerObject::markDead(); } @@ -2027,8 +2028,8 @@ void LLVOAvatar::updateMeshData() } else { - facep->mVertexBuffer->resizeBuffer(num_vertices, num_indices) ; - } + facep->mVertexBuffer->resizeBuffer(num_vertices, num_indices) ; + } } facep->setGeomIndex(0); @@ -2785,7 +2786,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) { // update chat bubble //-------------------------------------------------------------------- - // draw text label over characters head + // draw text label over character's head //-------------------------------------------------------------------- if (mChatTimer.getElapsedTimeF32() > BUBBLE_CHAT_TIME) { @@ -3165,14 +3166,16 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent) if (motionp->getName().empty()) { output = llformat("%s - %d", - motionp->getID().asString().c_str(), - (U32)motionp->getPriority()); + gAgent.isGodlikeWithoutAdminMenuFakery() ? + motionp->getID().asString().c_str() : + LLUUID::null.asString().c_str(), + (U32)motionp->getPriority()); } else { output = llformat("%s - %d", - motionp->getName().c_str(), - (U32)motionp->getPriority()); + motionp->getName().c_str(), + (U32)motionp->getPriority()); } addDebugText(output); } @@ -3861,11 +3864,11 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass) { //LOD changed or new mesh created, allocate new vertex buffer if needed if (needs_rebuild || mDirtyMesh >= 2 || mVisibilityRank <= 4) { - updateMeshData(); + updateMeshData(); mDirtyMesh = 0; - mNeedsSkin = TRUE; - mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY); - } + mNeedsSkin = TRUE; + mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY); + } } if (LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_AVATAR) <= 0) @@ -4168,9 +4171,13 @@ void LLVOAvatar::updateTextures() } else { - render_avatar = isVisible() && !mCulled; + if(!isVisible()) + { + return ;//do not update for invisible avatar. + } + + render_avatar = !mCulled; //visible and not culled. } - checkTextureLoading() ; std::vector<BOOL> layer_baked; // GL NOT ACTIVE HERE - *TODO @@ -4245,10 +4252,11 @@ void LLVOAvatar::addLocalTextureStats( ETextureIndex idx, LLViewerFetchedTexture return; } - +const S32 MAX_TEXTURE_UPDATE_INTERVAL = 64 ; //need to call updateTextures() at least every 32 frames. +const S32 MAX_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL = S32_MAX ; //frames void LLVOAvatar::checkTextureLoading() { - static const F32 MAX_INVISIBLE_WAITING_TIME = 30.f ; //seconds + static const F32 MAX_INVISIBLE_WAITING_TIME = 15.f ; //seconds BOOL pause = !isVisible() ; if(!pause) @@ -4268,7 +4276,7 @@ void LLVOAvatar::checkTextureLoading() if(pause && mInvisibleTimer.getElapsedTimeF32() < MAX_INVISIBLE_WAITING_TIME) { - return ; + return ; //have not been invisible for enough time. } for(LLLoadedCallbackEntry::source_callback_list_t::iterator iter = mCallbackTextureList.begin(); @@ -4279,18 +4287,26 @@ void LLVOAvatar::checkTextureLoading() { if(pause)//pause texture fetching. { - tex->pauseLoadedCallbacks(this) ; + tex->pauseLoadedCallbacks(&mCallbackTextureList) ; + + //set to terminate texture fetching after MAX_TEXTURE_UPDATE_INTERVAL frames. + tex->setMaxVirtualSizeResetInterval(MAX_TEXTURE_UPDATE_INTERVAL); + tex->resetMaxVirtualSizeResetCounter() ; } else//unpause { static const F32 START_AREA = 100.f ; - tex->unpauseLoadedCallbacks(this) ; + tex->unpauseLoadedCallbacks(&mCallbackTextureList) ; tex->addTextureStats(START_AREA); //jump start the fetching again } } } + if(!pause) + { + updateTextures() ; //refresh texture stats. + } mLoadedCallbacksPaused = pause ; return ; } @@ -4299,12 +4315,14 @@ const F32 SELF_ADDITIONAL_PRI = 0.75f ; const F32 ADDITIONAL_PRI = 0.5f; void LLVOAvatar::addBakedTextureStats( LLViewerFetchedTexture* imagep, F32 pixel_area, F32 texel_area_ratio, S32 boost_level) { - //if this function is not called for the last 512 frames, the texture pipeline will stop fetching this texture. - static const S32 MAX_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL = 512 ; //frames + //Note: + //if this function is not called for the last MAX_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL frames, + //the texture pipeline will stop fetching this texture. imagep->resetTextureStats(); imagep->setCanUseHTTP(false) ; //turn off http fetching for baked textures. imagep->setMaxVirtualSizeResetInterval(MAX_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL); + imagep->resetMaxVirtualSizeResetCounter() ; mMaxPixelArea = llmax(pixel_area, mMaxPixelArea); mMinPixelArea = llmin(pixel_area, mMinPixelArea); @@ -5613,6 +5631,7 @@ BOOL LLVOAvatar::setParent(LLViewerObject* parent) void LLVOAvatar::addChild(LLViewerObject *childp) { + childp->extractAttachmentItemID(); // find the inventory item this object is associated with. LLViewerObject::addChild(childp); if (childp->mDrawable) { @@ -5701,6 +5720,15 @@ BOOL LLVOAvatar::canAttachMoreObjects() const } //----------------------------------------------------------------------------- +// canAttachMoreObjects() +// Returns true if we can attach <n> more objects. +//----------------------------------------------------------------------------- +BOOL LLVOAvatar::canAttachMoreObjects(U32 n) const +{ + return (getNumAttachments() + n) <= MAX_AGENT_ATTACHMENTS; +} + +//----------------------------------------------------------------------------- // lazyAttach() //----------------------------------------------------------------------------- void LLVOAvatar::lazyAttach() @@ -6138,11 +6166,9 @@ void LLVOAvatar::updateMeshTextures() const BOOL self_customizing = isSelf() && gAgentCamera.cameraCustomizeAvatar(); // During face edit mode, we don't use baked textures const BOOL other_culled = !isSelf() && mCulled; LLLoadedCallbackEntry::source_callback_list_t* src_callback_list = NULL ; - void* callback_src = NULL ; BOOL paused = FALSE; if(!isSelf()) { - callback_src = this ; src_callback_list = &mCallbackTextureList ; paused = mLoadedCallbacksPaused ; } @@ -6162,10 +6188,14 @@ void LLVOAvatar::updateMeshTextures() // When an avatar is changing clothes and not in Appearance mode, // use the last-known good baked texture until it finish the first // render of the new layerset. + + const BOOL layerset_invalid = !mBakedTextureDatas[i].mTexLayerSet + || !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized() + || !mBakedTextureDatas[i].mTexLayerSet->isLocalTextureDataAvailable(); + use_lkg_baked_layer[i] = (!is_layer_baked[i] && (mBakedTextureDatas[i].mLastTextureIndex != IMG_DEFAULT_AVATAR) - && mBakedTextureDatas[i].mTexLayerSet - && !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized()); + && layerset_invalid); if (use_lkg_baked_layer[i]) { mBakedTextureDatas[i].mTexLayerSet->setUpdatesEnabled(TRUE); @@ -6218,10 +6248,10 @@ void LLVOAvatar::updateMeshTextures() if ( (baked_img->getID() != IMG_INVISIBLE) && ((i == BAKED_HEAD) || (i == BAKED_UPPER) || (i == BAKED_LOWER)) ) { baked_img->setLoadedCallback(onBakedTextureMasksLoaded, MORPH_MASK_REQUESTED_DISCARD, TRUE, TRUE, new LLTextureMaskData( mID ), - callback_src, src_callback_list, paused); + src_callback_list, paused); } baked_img->setLoadedCallback(onBakedTextureLoaded, SWITCH_TO_BAKED_DISCARD, FALSE, FALSE, new LLUUID( mID ), - callback_src, src_callback_list, paused ); + src_callback_list, paused ); } } else if (mBakedTextureDatas[i].mTexLayerSet @@ -6682,11 +6712,9 @@ void LLVOAvatar::onFirstTEMessageReceived() mFirstTEMessageReceived = TRUE; LLLoadedCallbackEntry::source_callback_list_t* src_callback_list = NULL ; - void* callback_src = NULL ; BOOL paused = FALSE ; if(!isSelf()) { - callback_src = this ; src_callback_list = &mCallbackTextureList ; paused = mLoadedCallbacksPaused ; } @@ -6705,10 +6733,10 @@ void LLVOAvatar::onFirstTEMessageReceived() if ( (image->getID() != IMG_INVISIBLE) && ((i == BAKED_HEAD) || (i == BAKED_UPPER) || (i == BAKED_LOWER)) ) { image->setLoadedCallback( onBakedTextureMasksLoaded, MORPH_MASK_REQUESTED_DISCARD, TRUE, TRUE, new LLTextureMaskData( mID ), - callback_src, src_callback_list, paused); + src_callback_list, paused); } image->setLoadedCallback( onInitialBakedTextureLoaded, MAX_DISCARD_LEVEL, FALSE, FALSE, new LLUUID( mID ), - callback_src, src_callback_list, paused ); + src_callback_list, paused ); } } diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 94b564fc8f..955deff1ea 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -615,8 +615,9 @@ public: // Appearance morphing //-------------------------------------------------------------------- public: - BOOL mAppearanceAnimating; + BOOL getIsAppearanceAnimating() const { return mAppearanceAnimating; } private: + BOOL mAppearanceAnimating; LLFrameTimer mAppearanceMorphTimer; F32 mLastAppearanceBlendTime; @@ -690,6 +691,7 @@ public: void rebuildHUD(); void resetHUDAttachments(); BOOL canAttachMoreObjects() const; + BOOL canAttachMoreObjects(U32 n) const; protected: U32 getNumAttachments() const; // O(N), not O(1) @@ -1052,6 +1054,7 @@ protected: // Shared with LLVOAvatarSelf *******************************************************************************/ }; // LLVOAvatar -extern const F32 SELF_ADDITIONAL_PRI; +extern const F32 SELF_ADDITIONAL_PRI; +extern const S32 MAX_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL; #endif // LL_VO_AVATAR_H diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index b80e47e11a..7663329713 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -1016,6 +1016,44 @@ BOOL LLVOAvatarSelf::isWearingAttachment(const LLUUID& inv_item_id) const } //----------------------------------------------------------------------------- +BOOL LLVOAvatarSelf::attachmentWasRequested(const LLUUID& inv_item_id) const +{ + const F32 REQUEST_EXPIRATION_SECONDS = 5.0; // any request older than this is ignored/removed. + std::map<LLUUID,LLTimer>::iterator it = mAttachmentRequests.find(inv_item_id); + if (it != mAttachmentRequests.end()) + { + const LLTimer& request_time = it->second; + F32 request_time_elapsed = request_time.getElapsedTimeF32(); + if (request_time_elapsed > REQUEST_EXPIRATION_SECONDS) + { + mAttachmentRequests.erase(it); + return FALSE; + } + else + { + return TRUE; + } + } + else + { + return FALSE; + } +} + +//----------------------------------------------------------------------------- +void LLVOAvatarSelf::addAttachmentRequest(const LLUUID& inv_item_id) +{ + LLTimer current_time; + mAttachmentRequests[inv_item_id] = current_time; +} + +//----------------------------------------------------------------------------- +void LLVOAvatarSelf::removeAttachmentRequest(const LLUUID& inv_item_id) +{ + mAttachmentRequests.erase(inv_item_id); +} + +//----------------------------------------------------------------------------- // getWornAttachment() //----------------------------------------------------------------------------- LLViewerObject* LLVOAvatarSelf::getWornAttachment(const LLUUID& inv_item_id) @@ -1067,8 +1105,10 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view // Should just be the last object added if (attachment->isObjectAttached(viewer_object)) { - const LLUUID& attachment_id = viewer_object->getItemID(); + const LLUUID& attachment_id = viewer_object->getAttachmentItemID(); LLAppearanceMgr::instance().registerAttachment(attachment_id); + // Clear any pending requests once the attachment arrives. + removeAttachmentRequest(attachment_id); } return attachment; @@ -1077,7 +1117,7 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view //virtual BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object) { - const LLUUID attachment_id = viewer_object->getItemID(); + const LLUUID attachment_id = viewer_object->getAttachmentItemID(); if (LLVOAvatar::detachObject(viewer_object)) { // the simulator should automatically handle permission revocation @@ -1115,6 +1155,29 @@ BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object) return FALSE; } +// static +BOOL LLVOAvatarSelf::detachAttachmentIntoInventory(const LLUUID &item_id) +{ + LLInventoryItem* item = gInventory.getItem(item_id); + if (item) + { + gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); + gMessageSystem->nextBlockFast(_PREHASH_ObjectData); + gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + gMessageSystem->addUUIDFast(_PREHASH_ItemID, item_id); + gMessageSystem->sendReliable(gAgent.getRegion()->getHost()); + + // this object might have been selected, so let the selection manager know it's gone now + LLViewerObject *found_obj = gObjectList.findObject(item_id); + if (found_obj) + { + LLSelectMgr::getInstance()->remove(found_obj); + } + return TRUE; + } + return FALSE; +} + U32 LLVOAvatarSelf::getNumWearables(LLVOAvatarDefines::ETextureIndex i) const { LLWearableType::EType type = LLVOAvatarDictionary::getInstance()->getTEWearableType(i); @@ -1148,11 +1211,11 @@ void LLVOAvatarSelf::localTextureLoaded(BOOL success, LLViewerFetchedTexture *sr discard_level < local_tex_obj->getDiscard()) { local_tex_obj->setDiscard(discard_level); - if (!gAgentCamera.cameraCustomizeAvatar()) + if (isUsingBakedTextures()) { requestLayerSetUpdate(index); } - else if (gAgentCamera.cameraCustomizeAvatar()) + else { LLVisualParamHint::requestHintUpdates(); } @@ -1622,18 +1685,21 @@ void LLVOAvatarSelf::setLocalTexture(ETextureIndex type, LLViewerTexture* src_te if (tex_discard >= 0 && tex_discard <= desired_discard) { local_tex_obj->setDiscard(tex_discard); - if (isSelf() && !gAgentCamera.cameraCustomizeAvatar()) + if (isSelf()) + { + if (gAgentAvatarp->isUsingBakedTextures()) { requestLayerSetUpdate(type); } - else if (isSelf() && gAgentCamera.cameraCustomizeAvatar()) + else { LLVisualParamHint::requestHintUpdates(); } } + } else { - tex->setLoadedCallback(onLocalTextureLoaded, desired_discard, TRUE, FALSE, new LLAvatarTexData(getID(), type), NULL, NULL); + tex->setLoadedCallback(onLocalTextureLoaded, desired_discard, TRUE, FALSE, new LLAvatarTexData(getID(), type), NULL); } } tex->setMinDiscardLevel(desired_discard); @@ -2032,7 +2098,7 @@ void LLVOAvatarSelf::addLocalTextureStats( ETextureIndex type, LLViewerFetchedTe imagep->setBoostLevel(getAvatarBoostLevel()); imagep->resetTextureStats(); - imagep->setMaxVirtualSizeResetInterval(16); + imagep->setMaxVirtualSizeResetInterval(MAX_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL); imagep->addTextureStats( desired_pixels / texel_area_ratio ); imagep->setAdditionalDecodePriority(SELF_ADDITIONAL_PRI) ; imagep->forceUpdateBindStats() ; @@ -2142,6 +2208,11 @@ void LLVOAvatarSelf::setNewBakedTexture( ETextureIndex te, const LLUUID& uuid ) void LLVOAvatarSelf::outputRezDiagnostics() const { + if(!gSavedSettings.getBOOL("DebugAvatarLocalTexLoadedTime")) + { + return ; + } + const F32 final_time = mDebugSelfLoadTimer.getElapsedTimeF32(); llinfos << "REZTIME: Myself rez stats:" << llendl; llinfos << "\t Time from avatar creation to load wearables: " << (S32)mDebugTimeWearablesLoaded << llendl; diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 630afe7a0f..21c815a70c 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -291,10 +291,18 @@ protected: public: void updateAttachmentVisibility(U32 camera_mode); BOOL isWearingAttachment(const LLUUID& inv_item_id) const; + BOOL attachmentWasRequested(const LLUUID& inv_item_id) const; + void addAttachmentRequest(const LLUUID& inv_item_id); + void removeAttachmentRequest(const LLUUID& inv_item_id); LLViewerObject* getWornAttachment(const LLUUID& inv_item_id); const std::string getAttachedPointName(const LLUUID& inv_item_id) const; /*virtual*/ const LLViewerJointAttachment *attachObject(LLViewerObject *viewer_object); /*virtual*/ BOOL detachObject(LLViewerObject *viewer_object); + static BOOL detachAttachmentIntoInventory(const LLUUID& item_id); + +private: + // Track attachments that have been requested but have not arrived yet. + mutable std::map<LLUUID,LLTimer> mAttachmentRequests; //-------------------------------------------------------------------- // HUDs diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp index 65829b213e..bd7eac7b7d 100644 --- a/indra/newview/llvograss.cpp +++ b/indra/newview/llvograss.cpp @@ -53,6 +53,7 @@ #include "llworld.h" #include "lldir.h" #include "llxmltree.h" +#include "llvotree.h" const S32 GRASS_MAX_BLADES = 32; const F32 GRASS_BLADE_BASE = 0.25f; // Width of grass at base @@ -294,6 +295,23 @@ BOOL LLVOGrass::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) return TRUE; } + if(LLVOTree::isTreeRenderingStopped()) //stop rendering grass + { + if(mNumBlades) + { + mNumBlades = 0 ; + gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL, TRUE); + } + return TRUE ; + } + else if(!mNumBlades)//restart grass rendering + { + mNumBlades = GRASS_MAX_BLADES ; + gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL, TRUE); + + return TRUE ; + } + if (mPatch && (mLastPatchUpdateTime != mPatch->getLastUpdateTime())) { gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, TRUE); @@ -340,7 +358,20 @@ BOOL LLVOGrass::updateLOD() { return FALSE; } - + if(LLVOTree::isTreeRenderingStopped()) + { + if(mNumBlades) + { + mNumBlades = 0 ; + gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL, TRUE); + } + return TRUE ; + } + if(!mNumBlades) + { + mNumBlades = GRASS_MAX_BLADES; + } + LLFace* face = mDrawable->getFace(0); F32 tan_angle = 0.f; @@ -387,8 +418,24 @@ static LLFastTimer::DeclareTimer FTM_UPDATE_GRASS("Update Grass"); BOOL LLVOGrass::updateGeometry(LLDrawable *drawable) { LLFastTimer ftm(FTM_UPDATE_GRASS); + dirtySpatialGroup(); - plantBlades(); + + if(!mNumBlades)//stop rendering grass + { + if (mDrawable->getNumFaces() > 0) + { + LLFace* facep = mDrawable->getFace(0); + if(facep) + { + facep->setSize(0, 0); + } + } + } + else + { + plantBlades(); + } return TRUE; } @@ -429,6 +476,11 @@ void LLVOGrass::getGeometry(S32 idx, LLStrider<LLColor4U>& colorsp, LLStrider<U16>& indicesp) { + if(!mNumBlades)//stop rendering grass + { + return ; + } + mPatch = mRegionp->getLand().resolvePatchRegion(getPositionRegion()); if (mPatch) mLastPatchUpdateTime = mPatch->getLastUpdateTime(); diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index d73850cb49..bb80988854 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -975,7 +975,10 @@ void LLVOSky::calcAtmospherics(void) } temp2.mV[1] = llmax(0.f, lighty); - temp2.mV[1] = 1.f / temp2.mV[1]; + if(temp2.mV[1] > 0.f) + { + temp2.mV[1] = 1.f / temp2.mV[1]; + } componentMultBy(sunlight, componentExp((light_atten * -1.f) * temp2.mV[1])); // Distance diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index e3b4efb9dd..c29252bba9 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -73,7 +73,7 @@ S32 LLVOTree::sLODVertexCount[sMAX_NUM_TREE_LOD_LEVELS]; S32 LLVOTree::sLODIndexOffset[sMAX_NUM_TREE_LOD_LEVELS]; S32 LLVOTree::sLODIndexCount[sMAX_NUM_TREE_LOD_LEVELS]; S32 LLVOTree::sLODSlices[sMAX_NUM_TREE_LOD_LEVELS] = {10, 5, 4, 3}; -F32 LLVOTree::sLODAngles[sMAX_NUM_TREE_LOD_LEVELS] = {30.f, 20.f, 15.f, 0.00001f}; +F32 LLVOTree::sLODAngles[sMAX_NUM_TREE_LOD_LEVELS] = {30.f, 20.f, 15.f, F_ALMOST_ZERO}; F32 LLVOTree::sTreeFactor = 1.f; @@ -101,6 +101,12 @@ LLVOTree::~LLVOTree() } } +//static +bool LLVOTree::isTreeRenderingStopped() +{ + return LLVOTree::sTreeFactor < LLVOTree::sLODAngles[sMAX_NUM_TREE_LOD_LEVELS - 1] ; +} + // static void LLVOTree::initClass() { @@ -442,22 +448,35 @@ void LLVOTree::render(LLAgent &agent) void LLVOTree::setPixelAreaAndAngle(LLAgent &agent) { - // First calculate values as for any other object (for mAppAngle) - LLViewerObject::setPixelAreaAndAngle(agent); - - // Re-calculate mPixelArea accurately + LLVector3 center = getPositionAgent();//center of tree. + LLVector3 viewer_pos_agent = gAgentCamera.getCameraPositionAgent(); + LLVector3 lookAt = center - viewer_pos_agent; + F32 dist = lookAt.normVec() ; + F32 cos_angle_to_view_dir = lookAt * LLViewerCamera::getInstance()->getXAxis() ; - // This should be the camera's center, as soon as we move to all region-local. - LLVector3 relative_position = getPositionAgent() - gAgentCamera.getCameraPositionAgent(); - F32 range_squared = relative_position.lengthSquared() ; + F32 range = dist - getMinScale()/2; + if (range < F_ALMOST_ZERO || isHUDAttachment()) // range == zero + { + mAppAngle = 180.f; + } + else + { + mAppAngle = (F32) atan2( getMaxScale(), range) * RAD_TO_DEG; + } F32 max_scale = mBillboardScale * getMaxScale(); F32 area = max_scale * (max_scale*mBillboardRatio); - // Compute pixels per meter at the given range - F32 pixels_per_meter = LLViewerCamera::getInstance()->getViewHeightInPixels() / tan(LLViewerCamera::getInstance()->getView()); + F32 pixels_per_meter = LLViewerCamera::getInstance()->getViewHeightInPixels() / (tan(LLViewerCamera::getInstance()->getView()) * dist); + mPixelArea = pixels_per_meter * pixels_per_meter * area ; + + F32 importance = LLFace::calcImportanceToCamera(cos_angle_to_view_dir, dist) ; + mPixelArea = LLFace::adjustPixelArea(importance, mPixelArea) ; + if (mPixelArea > LLViewerCamera::getInstance()->getScreenPixelArea()) + { + mAppAngle = 180.f; + } - mPixelArea = (pixels_per_meter) * (pixels_per_meter) * area / range_squared; #if 0 // mAppAngle is a bit of voodoo; // use the one calculated LLViewerObject::setPixelAreaAndAngle above diff --git a/indra/newview/llvotree.h b/indra/newview/llvotree.h index 104226fcb6..5ef79d02ca 100644 --- a/indra/newview/llvotree.h +++ b/indra/newview/llvotree.h @@ -59,6 +59,7 @@ public: // Initialize data that's only inited once per class. static void initClass(); static void cleanupClass(); + static bool isTreeRenderingStopped(); /*virtual*/ U32 processUpdateMessage(LLMessageSystem *mesgsys, void **user_data, diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 128fd15142..0a7611c527 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -102,8 +102,14 @@ static LLFastTimer::DeclareTimer FTM_VOLUME_TEXTURES("Volume Textures"); class LLMediaDataClientObjectImpl : public LLMediaDataClientObject { public: - LLMediaDataClientObjectImpl(LLVOVolume *obj, bool isNew) : mObject(obj), mNew(isNew) {} - LLMediaDataClientObjectImpl() { mObject = NULL; } + LLMediaDataClientObjectImpl(LLVOVolume *obj, bool isNew) : mObject(obj), mNew(isNew) + { + mObject->addMDCImpl(); + } + ~LLMediaDataClientObjectImpl() + { + mObject->removeMDCImpl(); + } virtual U8 getMediaDataCount() const { return mObject->getNumTEs(); } @@ -128,6 +134,18 @@ public: } return result; } + virtual bool isCurrentMediaUrl(U8 index, const std::string &url) const + { + LLTextureEntry *te = mObject->getTE(index); + if (te) + { + if (te->getMediaData()) + { + return (te->getMediaData()->getCurrentURL() == url); + } + } + return url.empty(); + } virtual LLUUID getID() const { return mObject->getID(); } @@ -202,6 +220,7 @@ LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *re mMediaImplList.resize(getNumTEs()); mLastFetchedMediaVersion = -1; mIndexInTex = 0; + mMDCImplCount = 0; } LLVOVolume::~LLVOVolume() @@ -227,9 +246,12 @@ void LLVOVolume::markDead() { if (!mDead) { - LLMediaDataClientObject::ptr_t obj = new LLMediaDataClientObjectImpl(const_cast<LLVOVolume*>(this), false); - if (sObjectMediaClient) sObjectMediaClient->removeFromQueue(obj); - if (sObjectMediaNavigateClient) sObjectMediaNavigateClient->removeFromQueue(obj); + if(getMDCImplCount() > 0) + { + LLMediaDataClientObject::ptr_t obj = new LLMediaDataClientObjectImpl(const_cast<LLVOVolume*>(this), false); + if (sObjectMediaClient) sObjectMediaClient->removeFromQueue(obj); + if (sObjectMediaNavigateClient) sObjectMediaNavigateClient->removeFromQueue(obj); + } // Detach all media impls from this object for(U32 i = 0 ; i < mMediaImplList.size() ; i++) @@ -2100,12 +2122,12 @@ void LLVOVolume::mediaNavigated(LLViewerMediaImpl *impl, LLPluginClassMedia* plu } else { - llwarns << "Couldn't find media entry!" << llendl; + LL_WARNS("MediaOnAPrim") << "Couldn't find media entry!" << LL_ENDL; } if(block_navigation) { - llinfos << "blocking navigate to URI " << new_location << llendl; + LL_INFOS("MediaOnAPrim") << "blocking navigate to URI " << new_location << LL_ENDL; // "bounce back" to the current URL from the media entry mediaNavigateBounceBack(face_index); @@ -2113,7 +2135,7 @@ void LLVOVolume::mediaNavigated(LLViewerMediaImpl *impl, LLPluginClassMedia* plu else if (sObjectMediaNavigateClient) { - llinfos << "broadcasting navigate with URI " << new_location << llendl; + LL_DEBUGS("MediaOnAPrim") << "broadcasting navigate with URI " << new_location << LL_ENDL; sObjectMediaNavigateClient->navigate(new LLMediaDataClientObjectImpl(this, false), face_index, new_location); } @@ -2135,14 +2157,19 @@ void LLVOVolume::mediaEvent(LLViewerMediaImpl *impl, LLPluginClassMedia* plugin, } break; + case LLViewerMediaImpl::MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS: + // This navigate didn't change the current URL. + LL_DEBUGS("MediaOnAPrim") << " NOT broadcasting navigate (spurious)" << LL_ENDL; + break; + case LLViewerMediaImpl::MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED: // This is the first location changed event after the start of a server-directed nav. Don't broadcast it. - llinfos << " NOT broadcasting navigate (server-directed)" << llendl; + LL_INFOS("MediaOnAPrim") << " NOT broadcasting navigate (server-directed)" << LL_ENDL; break; default: // This is a subsequent location-changed due to a redirect. Don't broadcast. - llinfos << " NOT broadcasting navigate (redirect)" << llendl; + LL_INFOS("MediaOnAPrim") << " NOT broadcasting navigate (redirect)" << LL_ENDL; break; } } @@ -2159,9 +2186,14 @@ void LLVOVolume::mediaEvent(LLViewerMediaImpl *impl, LLPluginClassMedia* plugin, } break; + case LLViewerMediaImpl::MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS: + // This navigate didn't change the current URL. + LL_DEBUGS("MediaOnAPrim") << " NOT broadcasting navigate (spurious)" << LL_ENDL; + break; + case LLViewerMediaImpl::MEDIANAVSTATE_SERVER_COMPLETE_BEFORE_LOCATION_CHANGED: // This is the the navigate complete event from a server-directed nav. Don't broadcast it. - llinfos << " NOT broadcasting navigate (server-directed)" << llendl; + LL_INFOS("MediaOnAPrim") << " NOT broadcasting navigate (server-directed)" << LL_ENDL; break; default: diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index d5606034d0..f97214295a 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -283,6 +283,10 @@ public: // Returns the "last fetched" media version, or -1 if not fetched yet S32 getLastFetchedMediaVersion() const { return mLastFetchedMediaVersion; } + + void addMDCImpl() { ++mMDCImplCount; } + void removeMDCImpl() { --mMDCImplCount; } + S32 getMDCImplCount() { return mMDCImplCount; } protected: S32 computeLODDetail(F32 distance, F32 radius); @@ -316,6 +320,7 @@ private: media_list_t mMediaImplList; S32 mLastFetchedMediaVersion; // as fetched from the server, starts as -1 S32 mIndexInTex; + S32 mMDCImplCount; // statics public: static F32 sLODSlopDistanceFactor;// Changing this to zero, effectively disables the LOD transition slop diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index ec9c78ee53..1209b60679 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -52,6 +52,7 @@ #include "llvoavatarself.h" #include "llvoavatardefines.h" #include "llwearable.h" +#include "llviewercontrol.h" using namespace LLVOAvatarDefines; @@ -444,9 +445,10 @@ BOOL LLWearable::importFile( LLFILE* file ) delete mSavedTEMap[te]; } - image->setBoostLevel(LLViewerTexture::BOOST_AVATAR_SELF) ; - image->setLoadedCallback(LLVOAvatarSelf::debugOnTimingLocalTexLoaded,0,TRUE,FALSE, new LLVOAvatarSelf::LLAvatarTexData(id, (LLVOAvatarDefines::ETextureIndex)te), NULL, NULL); - + if(gSavedSettings.getBOOL("DebugAvatarLocalTexLoadedTime")) + { + image->setLoadedCallback(LLVOAvatarSelf::debugOnTimingLocalTexLoaded,0,TRUE,FALSE, new LLVOAvatarSelf::LLAvatarTexData(id, (LLVOAvatarDefines::ETextureIndex)te), NULL); + } LLUUID textureid(text_buffer); mTEMap[te] = new LLLocalTextureObject(image, textureid); mSavedTEMap[te] = new LLLocalTextureObject(image, textureid); @@ -699,7 +701,7 @@ void LLWearable::removeFromAvatar( LLWearableType::EType type, BOOL upload_bake } } - if( gAgentCamera.cameraCustomizeAvatar() ) + if(gAgentCamera.cameraCustomizeAvatar()) { LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_outfit")); } diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index 60ebb9416e..9f7ea68e87 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -124,7 +124,11 @@ void LLPanelWearableOutfitItem::updateItem(const std::string& name, { std::string search_label = name; - if (mWornIndicationEnabled && get_is_item_worn(mInventoryItemUUID)) + // Updating item's worn status depending on whether it is linked in COF or not. + // We don't use get_is_item_worn() here because this update is triggered by + // an inventory observer upon link in COF beind added or removed so actual + // worn status of a linked item may still remain unchanged. + if (mWornIndicationEnabled && LLAppearanceMgr::instance().isLinkInCOF(mInventoryItemUUID)) { search_label += LLTrans::getString("worn"); item_state = IS_WORN; @@ -465,6 +469,29 @@ std::string LLPanelDummyClothingListItem::wearableTypeToString(LLWearableType::E ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// +LLWearableItemTypeNameComparator::LLWearableTypeOrder::LLWearableTypeOrder(LLWearableItemTypeNameComparator::ETypeListOrder order_priority, bool sort_asset_by_name, bool sort_wearable_by_name): + mOrderPriority(order_priority), + mSortAssetTypeByName(sort_asset_by_name), + mSortWearableTypeByName(sort_wearable_by_name) +{ +} + +LLWearableItemTypeNameComparator::LLWearableItemTypeNameComparator() +{ + // By default the sort order conforms the order by spec of MY OUTFITS items list: + // 1. CLOTHING - sorted by name + // 2. OBJECT - sorted by type + // 3. BODYPART - sorted by name + mWearableOrder[LLAssetType::AT_CLOTHING] = LLWearableTypeOrder(ORDER_RANK_1, false, false); + mWearableOrder[LLAssetType::AT_OBJECT] = LLWearableTypeOrder(ORDER_RANK_2, true, true); + mWearableOrder[LLAssetType::AT_BODYPART] = LLWearableTypeOrder(ORDER_RANK_3, false, true); +} + +void LLWearableItemTypeNameComparator::setOrder(LLAssetType::EType items_of_type, LLWearableItemTypeNameComparator::ETypeListOrder order_priority, bool sort_asset_items_by_name, bool sort_wearable_items_by_name) +{ + mWearableOrder[items_of_type] = LLWearableTypeOrder(order_priority, sort_asset_items_by_name, sort_wearable_items_by_name); +} + /*virtual*/ bool LLWearableItemNameComparator::doCompare(const LLPanelInventoryListItemBase* wearable_item1, const LLPanelInventoryListItemBase* wearable_item2) const { @@ -493,7 +520,7 @@ bool LLWearableItemTypeNameComparator::doCompare(const LLPanelInventoryListItemB return item_type_order1 < item_type_order2; } - if (item_type_order1 & TLO_SORTABLE_BY_NAME) + if (sortAssetTypeByName(item_type1)) { // If both items are of the same asset type except AT_CLOTHING and AT_BODYPART // we can compare them by name. @@ -504,44 +531,92 @@ bool LLWearableItemTypeNameComparator::doCompare(const LLPanelInventoryListItemB const LLWearableType::EType item_wearable_type2 = wearable_item2->getWearableType(); if (item_wearable_type1 != item_wearable_type2) + // If items are of different LLWearableType::EType types they are compared + // by LLWearableType::EType. types order determined in LLWearableType::EType. { - // If items are of different clothing types they are compared - // by clothing types order determined in LLWearableType::EType. + // If items are of different LLWearableType::EType types they are compared + // by LLWearableType::EType. types order determined in LLWearableType::EType. return item_wearable_type1 < item_wearable_type2; } else { // If both items are of the same clothing type they are compared - // by description and place in reverse order i.e. outer layer item - // on top. + // by description and place in reverse order (i.e. outer layer item + // on top) OR by name + if(sortWearableTypeByName(item_type1)) + { + return LLWearableItemNameComparator::doCompare(wearable_item1, wearable_item2); + } return wearable_item1->getDescription() > wearable_item2->getDescription(); } } -// static -LLWearableItemTypeNameComparator::ETypeListOrder LLWearableItemTypeNameComparator::getTypeListOrder(LLAssetType::EType item_type) +LLWearableItemTypeNameComparator::ETypeListOrder LLWearableItemTypeNameComparator::getTypeListOrder(LLAssetType::EType item_type) const { - switch (item_type) + wearable_type_order_map_t::const_iterator const_it = mWearableOrder.find(item_type); + + + if(const_it == mWearableOrder.end()) { - case LLAssetType::AT_OBJECT: - return TLO_ATTACHMENT; + llwarns<<"Absent information about order rang of items of "<<LLAssetType::getDesc(item_type)<<" type"<<llendl; + return ORDER_RANK_UNKNOWN; + } - case LLAssetType::AT_CLOTHING: - return TLO_CLOTHING; + return const_it->second.mOrderPriority; +} + +bool LLWearableItemTypeNameComparator::sortAssetTypeByName(LLAssetType::EType item_type) const +{ + wearable_type_order_map_t::const_iterator const_it = mWearableOrder.find(item_type); - case LLAssetType::AT_BODYPART: - return TLO_BODYPART; - default: - return TLO_UNKNOWN; + if(const_it == mWearableOrder.end()) + { + llwarns<<"Absent information about sorting items of "<<LLAssetType::getDesc(item_type)<<" type"<<llendl; + return true; } + + + return const_it->second.mSortAssetTypeByName; + } + + +bool LLWearableItemTypeNameComparator::sortWearableTypeByName(LLAssetType::EType item_type) const +{ + wearable_type_order_map_t::const_iterator const_it = mWearableOrder.find(item_type); + + + if(const_it == mWearableOrder.end()) + { + llwarns<<"Absent information about sorting items of "<<LLAssetType::getDesc(item_type)<<" type"<<llendl; + return true; } + + return const_it->second.mSortWearableTypeByName; +} + +/*virtual*/ +bool LLWearableItemCreationDateComparator::doCompare(const LLPanelInventoryListItemBase* item1, const LLPanelInventoryListItemBase* item2) const +{ + time_t date1 = item1->getCreationDate(); + time_t date2 = item2->getCreationDate(); + + if (date1 == date2) + { + return LLWearableItemNameComparator::doCompare(item1, item2); + } + + return date1 > date2; +} ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// -static const LLWearableItemTypeNameComparator WEARABLE_TYPE_NAME_COMPARATOR; +static LLWearableItemTypeNameComparator WEARABLE_TYPE_NAME_COMPARATOR; +static const LLWearableItemTypeNameComparator WEARABLE_TYPE_LAYER_COMPARATOR; +static const LLWearableItemNameComparator WEARABLE_NAME_COMPARATOR; +static const LLWearableItemCreationDateComparator WEARABLE_CREATION_DATE_COMPARATOR; static const LLDefaultChildRegistry::Register<LLWearableItemsList> r("wearable_items_list"); @@ -553,7 +628,7 @@ LLWearableItemsList::Params::Params() LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p) : LLInventoryItemsList(p) { - setComparator(&WEARABLE_TYPE_NAME_COMPARATOR); + setSortOrder(E_SORT_BY_TYPE_LAYER, false); mIsStandalone = p.standalone; if (mIsStandalone) { @@ -561,6 +636,7 @@ LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p) setRightMouseDownCallback(boost::bind(&LLWearableItemsList::onRightClick, this, _2, _3)); } mWornIndicationEnabled = p.worn_indication_enabled; + setNoItemsCommentText(LLTrans::getString("LoadingData")); } // virtual @@ -602,10 +678,15 @@ void LLWearableItemsList::updateList(const LLUUID& category_id) LLInventoryModel::EXCLUDE_TRASH, collector); + if(item_array.empty() && gInventory.isCategoryComplete(category_id)) + { + setNoItemsCommentText(LLTrans::getString("EmptyOutfitText")); + } + refreshList(item_array); } -void LLWearableItemsList::updateChangedItems(const LLInventoryModel::changed_items_t& changed_items_uuids) +void LLWearableItemsList::updateChangedItems(const uuid_vec_t& changed_items_uuids) { // nothing to update if (changed_items_uuids.empty()) return; @@ -627,7 +708,7 @@ void LLWearableItemsList::updateChangedItems(const LLInventoryModel::changed_ite LLUUID linked_uuid = inv_item->getLinkedUUID(); - for (LLInventoryModel::changed_items_t::const_iterator iter = changed_items_uuids.begin(); + for (uuid_vec_t::const_iterator iter = changed_items_uuids.begin(); iter != changed_items_uuids.end(); ++iter) { @@ -653,6 +734,38 @@ void LLWearableItemsList::onRightClick(S32 x, S32 y) ContextMenu::instance().show(this, selected_uuids, x, y); } +void LLWearableItemsList::setSortOrder(ESortOrder sort_order, bool sort_now) +{ + switch (sort_order) + { + case E_SORT_BY_MOST_RECENT: + setComparator(&WEARABLE_CREATION_DATE_COMPARATOR); + break; + case E_SORT_BY_NAME: + setComparator(&WEARABLE_NAME_COMPARATOR); + break; + case E_SORT_BY_TYPE_LAYER: + setComparator(&WEARABLE_TYPE_LAYER_COMPARATOR); + break; + case E_SORT_BY_TYPE_NAME: + { + WEARABLE_TYPE_NAME_COMPARATOR.setOrder(LLAssetType::AT_CLOTHING, LLWearableItemTypeNameComparator::ORDER_RANK_1, false, true); + setComparator(&WEARABLE_TYPE_NAME_COMPARATOR); + break; + } + + // No "default:" to raise compiler warning + // if we're not handling something + } + + mSortOrder = sort_order; + + if (sort_now) + { + sort(); + } +} + ////////////////////////////////////////////////////////////////////////// /// ContextMenu ////////////////////////////////////////////////////////////////////////// @@ -676,13 +789,11 @@ LLContextMenu* LLWearableItemsList::ContextMenu::createMenu() const uuid_vec_t& ids = mUUIDs; // selected items IDs LLUUID selected_id = ids.front(); // ID of the first selected item - functor_t wear = boost::bind(&LLAppearanceMgr::wearItemOnAvatar, LLAppearanceMgr::getInstance(), _1, true, true, LLPointer<LLInventoryCallback>(NULL)); - functor_t add = boost::bind(&LLAppearanceMgr::wearItemOnAvatar, LLAppearanceMgr::getInstance(), _1, true, false, LLPointer<LLInventoryCallback>(NULL)); functor_t take_off = boost::bind(&LLAppearanceMgr::removeItemFromAvatar, LLAppearanceMgr::getInstance(), _1); // Register handlers common for all wearable types. - registrar.add("Wearable.Wear", boost::bind(handleMultiple, wear, ids)); - registrar.add("Wearable.Add", boost::bind(handleMultiple, add, ids)); + registrar.add("Wearable.Wear", boost::bind(wear_multiple, ids, true)); + registrar.add("Wearable.Add", boost::bind(wear_multiple, ids, false)); registrar.add("Wearable.Edit", boost::bind(handleMultiple, LLAgentWearables::editWearable, ids)); registrar.add("Wearable.CreateNew", boost::bind(createNewWearable, selected_id)); registrar.add("Wearable.ShowOriginal", boost::bind(show_item_original, selected_id)); @@ -725,6 +836,8 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu U32 n_links = 0; // number of links among the selected items U32 n_editable = 0; // number of editable items among the selected ones + bool can_be_worn = true; + for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it) { LLUUID id = *it; @@ -760,16 +873,22 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu { ++n_already_worn; } + + if (can_be_worn) + { + can_be_worn = get_can_item_be_worn(item->getLinkedUUID()); + } } // for bool standalone = mParent ? mParent->isStandalone() : false; + bool wear_add_visible = mask & (MASK_CLOTHING|MASK_ATTACHMENT) && n_worn == 0 && can_be_worn && (n_already_worn != 0 || mask & MASK_ATTACHMENT); // *TODO: eliminate multiple traversals over the menu items - setMenuItemVisible(menu, "wear_wear", n_already_worn == 0); - setMenuItemEnabled(menu, "wear_wear", n_already_worn == 0); - setMenuItemVisible(menu, "wear_add", mask == MASK_CLOTHING && n_worn == 0 && n_already_worn != 0); - setMenuItemEnabled(menu, "wear_add", n_items == 1 && canAddWearable(ids.front()) && n_already_worn != 0); - setMenuItemVisible(menu, "wear_replace", n_worn == 0 && n_already_worn != 0); + setMenuItemVisible(menu, "wear_wear", n_already_worn == 0 && n_worn == 0 && can_be_worn); + setMenuItemEnabled(menu, "wear_wear", n_already_worn == 0 && n_worn == 0); + setMenuItemVisible(menu, "wear_add", wear_add_visible); + setMenuItemEnabled(menu, "wear_add", canAddWearables(ids)); + setMenuItemVisible(menu, "wear_replace", n_worn == 0 && n_already_worn != 0 && can_be_worn); //visible only when one item selected and this item is worn setMenuItemVisible(menu, "edit", !standalone && mask & (MASK_CLOTHING|MASK_BODYPART) && n_worn == n_items && n_worn == 1); setMenuItemEnabled(menu, "edit", n_editable == 1 && n_worn == 1 && n_items == 1); @@ -877,20 +996,61 @@ void LLWearableItemsList::ContextMenu::createNewWearable(const LLUUID& item_id) LLAgentWearables::createWearable(item->getWearableType(), true); } -// Can we wear another wearable of the given item's wearable type? +// Returns true if all the given objects and clothes can be added. // static -bool LLWearableItemsList::ContextMenu::canAddWearable(const LLUUID& item_id) +bool LLWearableItemsList::ContextMenu::canAddWearables(const uuid_vec_t& item_ids) { // TODO: investigate wearables may not be loaded at this point EXT-8231 - LLViewerInventoryItem* item = gInventory.getItem(item_id); - if (!item || item->getType() != LLAssetType::AT_CLOTHING) + U32 n_objects = 0; + boost::unordered_map<LLWearableType::EType, U32> clothes_by_type; + + // Count given clothes (by wearable type) and objects. + for (uuid_vec_t::const_iterator it = item_ids.begin(); it != item_ids.end(); ++it) + { + LLViewerInventoryItem* item = gInventory.getItem(*it); + if (!item) + { + return false; + } + + if (item->getType() == LLAssetType::AT_OBJECT) + { + ++n_objects; + } + else if (item->getType() == LLAssetType::AT_CLOTHING) + { + ++clothes_by_type[item->getWearableType()]; + } + else + { + llwarns << "Unexpected wearable type" << llendl; + return false; + } + } + + // Check whether we can add all the objects. + if (!isAgentAvatarValid() || !gAgentAvatarp->canAttachMoreObjects(n_objects)) { return false; } - U32 wearable_count = gAgentWearables.getWearableCount(item->getWearableType()); - return wearable_count < LLAgentWearables::MAX_CLOTHING_PER_TYPE; + // Check whether we can add all the clothes. + boost::unordered_map<LLWearableType::EType, U32>::const_iterator m_it; + for (m_it = clothes_by_type.begin(); m_it != clothes_by_type.end(); ++m_it) + { + LLWearableType::EType w_type = m_it->first; + U32 n_clothes = m_it->second; + + U32 wearable_count = gAgentWearables.getWearableCount(w_type); + if ((wearable_count + n_clothes) > LLAgentWearables::MAX_CLOTHING_PER_TYPE) + { + return false; + } + + } + + return true; } // EOF diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index 367b648b3d..62e35a8eef 100644 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -39,7 +39,6 @@ // newview #include "llinventoryitemslist.h" #include "llinventorylistitem.h" -#include "llinventorymodel.h" #include "lllistcontextmenu.h" #include "llwearabletype.h" @@ -307,33 +306,89 @@ class LLWearableItemTypeNameComparator : public LLWearableItemNameComparator LOG_CLASS(LLWearableItemTypeNameComparator); public: - LLWearableItemTypeNameComparator() {}; + + LLWearableItemTypeNameComparator(); virtual ~LLWearableItemTypeNameComparator() {}; + enum ETypeListOrder + { + ORDER_RANK_1 = 1, + ORDER_RANK_2, + ORDER_RANK_3, + ORDER_RANK_UNKNOWN + }; + + void setOrder(LLAssetType::EType items_of_type, ETypeListOrder order_priority, bool sort_items_by_name, bool sort_wearable_items_by_name); + protected: /** - * Returns "true" if wearable_item1 is placed before wearable_item2 sorted by the following: - * - Attachments (abc order) - * - Clothing + * All information about sort order is stored in mWearableOrder map + * + * mWearableOrder : KEYS VALUES + * [LLAssetType] [struct LLWearableTypeOrder] + * + *--------------------------------------------------------------------------------------------- + * I. Determines order (ORDER_RANK) in which items of LLAssetType should be displayed in list. + * For example by spec in MY OUTFITS the order is: + * 1. AT_CLOTHING (ORDER_RANK_1) + * 2. AT_OBJECT (ORDER_RANK_2) + * 3. AT_BODYPART (ORDER_RANK_3) + * + * II.Items of each type(LLAssetType) are sorted by name or type(LLWearableType) + * For example by spec in MY OUTFITS the order within each items type(LLAssetType) is: + * 1. AT_OBJECTS (abc order) + * 2. AT_CLOTHINGS * - by type (types order determined in LLWearableType::EType) * - outer layer on top - * - Body Parts (abc order), - * "false" otherwise. + * 3. AT_BODYPARTS (abc order) + *--------------------------------------------------------------------------------------------- + * + * For each LLAssetType (KEYS in mWearableOrder) the information about: + * + * I. ORDER_RANK (the flag is LLWearableTypeOrder::mOrderPriority) + * + * II. whether items of this LLAssetType type should be ordered + * by name or by LLWearableType::EType (the flag is LLWearableTypeOrder::mSortAssetTypeByName) + * + * III.whether items of LLWearableType type within this LLAssetType + * should be ordered by name (the flag is LLWearableTypeOrder::mSortWearableTypeByName) + * + * holds in mWearableOrder map as VALUES (struct LLWearableTypeOrder). */ /*virtual*/ bool doCompare(const LLPanelInventoryListItemBase* wearable_item1, const LLPanelInventoryListItemBase* wearable_item2) const; private: - enum ETypeListOrder + + struct LLWearableTypeOrder { - TLO_CLOTHING = 0x01, - TLO_ATTACHMENT = 0x02, - TLO_BODYPART = 0x04, - TLO_UNKNOWN = 0x08, + ETypeListOrder mOrderPriority; + bool mSortAssetTypeByName; + bool mSortWearableTypeByName; - TLO_SORTABLE_BY_NAME = TLO_ATTACHMENT | TLO_UNKNOWN + LLWearableTypeOrder(ETypeListOrder order_priority, bool sort_asset_by_name, bool sort_wearable_by_name); + LLWearableTypeOrder(){}; }; - static LLWearableItemTypeNameComparator::ETypeListOrder getTypeListOrder(LLAssetType::EType item_type); + ETypeListOrder getTypeListOrder(LLAssetType::EType item_type) const; + + bool sortAssetTypeByName(LLAssetType::EType item_type) const; + bool sortWearableTypeByName(LLAssetType::EType item_type) const; + + typedef std::map<LLAssetType::EType,LLWearableTypeOrder> wearable_type_order_map_t; + wearable_type_order_map_t mWearableOrder; +}; + +/** + * @class LLWearableItemCreationDateComparator + * + * Comparator for sorting wearable list items by creation date (newest go first). + */ +class LLWearableItemCreationDateComparator : public LLWearableItemNameComparator +{ + LOG_CLASS(LLWearableItemCreationDateComparator); + +protected: + /*virtual*/ bool doCompare(const LLPanelInventoryListItemBase* item1, const LLPanelInventoryListItemBase* item2) const; }; /** @@ -375,7 +430,7 @@ public: static void setMenuItemEnabled(LLContextMenu* menu, const std::string& name, bool val); static void updateMask(U32& mask, LLAssetType::EType at); static void createNewWearable(const LLUUID& item_id); - static bool canAddWearable(const LLUUID& item_id); + static bool canAddWearables(const uuid_vec_t& item_ids); LLWearableItemsList* mParent; }; @@ -388,6 +443,14 @@ public: Params(); }; + typedef enum e_sort_order { + // Values should be compatible with InventorySortOrder setting. + E_SORT_BY_NAME = 0, + E_SORT_BY_MOST_RECENT = 1, + E_SORT_BY_TYPE_LAYER = 2, + E_SORT_BY_TYPE_NAME = 3, + } ESortOrder; + virtual ~LLWearableItemsList(); /*virtual*/ void addNewItem(LLViewerInventoryItem* item, bool rearrange = true); @@ -398,10 +461,14 @@ public: * Update items that match UUIDs from changed_items_uuids * or links that point at such items. */ - void updateChangedItems(const LLInventoryModel::changed_items_t& changed_items_uuids); + void updateChangedItems(const uuid_vec_t& changed_items_uuids); bool isStandalone() const { return mIsStandalone; } + ESortOrder getSortOrder() const { return mSortOrder; } + + void setSortOrder(ESortOrder sort_order, bool sort_now = true); + protected: friend class LLUICtrlFactory; LLWearableItemsList(const LLWearableItemsList::Params& p); @@ -410,6 +477,8 @@ protected: bool mIsStandalone; bool mWornIndicationEnabled; + + ESortOrder mSortOrder; }; #endif //LL_LLWEARABLEITEMSLIST_H diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp index 66cb02ce99..9bbe005de8 100644 --- a/indra/newview/llworldmap.cpp +++ b/indra/newview/llworldmap.cpp @@ -37,6 +37,7 @@ #include "llworldmapmessage.h" #include "message.h" #include "lltracker.h" +#include "lluistring.h" #include "llviewertexturelist.h" #include "lltrans.h" @@ -522,8 +523,12 @@ bool LLWorldMap::insertItem(U32 x_world, U32 y_world, std::string& name, LLUUID& case MAP_ITEM_LAND_FOR_SALE: // land for sale case MAP_ITEM_LAND_FOR_SALE_ADULT: // adult land for sale { - std::string tooltip = llformat("%d sq. m. L$%d", extra, extra2); - new_item.setTooltip(tooltip); + static LLUIString tooltip_fmt = LLTrans::getString("worldmap_item_tooltip_format"); + + tooltip_fmt.setArg("[AREA]", llformat("%d", extra)); + tooltip_fmt.setArg("[PRICE]", llformat("%d", extra2)); + new_item.setTooltip(tooltip_fmt.getString()); + if (type == MAP_ITEM_LAND_FOR_SALE) { siminfo->insertLandForSale(new_item); diff --git a/indra/newview/llworldmap.h b/indra/newview/llworldmap.h index e4e677eb64..b97e5249e1 100644 --- a/indra/newview/llworldmap.h +++ b/indra/newview/llworldmap.h @@ -52,7 +52,7 @@ public: LLItemInfo(F32 global_x, F32 global_y, const std::string& name, LLUUID id); // Setters - void setTooltip(std::string& tooltip) { mToolTip = tooltip; } + void setTooltip(const std::string& tooltip) { mToolTip = tooltip; } void setElevation(F64 z) { mPosGlobal.mdV[VZ] = z; } void setCount(S32 count) { mCount = count; } // void setSelected(bool selected) { mSelected = selected; } diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index b0a7b1ce83..e8052aa5a0 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -639,10 +639,10 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) void LLPipeline::updateRenderDeferred() { BOOL deferred = (gSavedSettings.getBOOL("RenderDeferred") && - LLRenderTarget::sUseFBO && + LLRenderTarget::sUseFBO && LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") && - gSavedSettings.getBOOL("VertexShaderEnable") && - gSavedSettings.getBOOL("RenderAvatarVP") && + gSavedSettings.getBOOL("VertexShaderEnable") && + gSavedSettings.getBOOL("RenderAvatarVP") && (gSavedSettings.getBOOL("WindLightUseAtmosShaders")) ? TRUE : FALSE) && !gUseWireframe; @@ -2200,8 +2200,8 @@ void LLPipeline::markVisible(LLDrawable *drawablep, LLCamera& camera) if(drawablep && !drawablep->isDead()) { - if (drawablep->isSpatialBridge()) - { + if (drawablep->isSpatialBridge()) + { const LLDrawable* root = ((LLSpatialBridge*) drawablep)->mDrawable; llassert(root); // trying to catch a bad assumption if (root && // // this test may not be needed, see above @@ -2213,24 +2213,24 @@ void LLPipeline::markVisible(LLDrawable *drawablep, LLCamera& camera) LLViewerObject *vobj = rootparent->getVObj(); llassert(vobj); // trying to catch a bad assumption if (vobj) // this test may not be needed, see above - { + { const LLVOAvatar* av = vobj->asAvatar(); - if (av && av->isImpostor()) - { - return; - } - } - } + if (av && av->isImpostor()) + { + return; } - sCull->pushBridge((LLSpatialBridge*) drawablep); - } - else - { - sCull->pushDrawable(drawablep); } - - drawablep->setVisible(camera); + } + } + sCull->pushBridge((LLSpatialBridge*) drawablep); + } + else + { + sCull->pushDrawable(drawablep); } + + drawablep->setVisible(camera); +} } void LLPipeline::markMoved(LLDrawable *drawablep, BOOL damped_motion) @@ -3907,7 +3907,7 @@ void LLPipeline::renderDebug() if (i > 3) { //render shadow frusta as volumes if (mShadowFrustPoints[i-4].empty()) - { + { continue; } @@ -3940,22 +3940,22 @@ void LLPipeline::renderDebug() if (i < 4) { - + //if (i == 0 || !mShadowFrustPoints[i].empty()) { //render visible point cloud gGL.flush(); glPointSize(8.f); gGL.begin(LLRender::POINTS); - + F32* c = col+i*4; gGL.color3fv(c); for (U32 j = 0; j < mShadowFrustPoints[i].size(); ++j) - { - gGL.vertex3fv(mShadowFrustPoints[i][j].mV); + { + gGL.vertex3fv(mShadowFrustPoints[i][j].mV); - } + } gGL.end(); gGL.flush(); @@ -3981,7 +3981,7 @@ void LLPipeline::renderDebug() gGL.vertex3fv(frust[2].mV); gGL.vertex3fv(frust[6].mV); gGL.vertex3fv(frust[3].mV); gGL.vertex3fv(frust[7].mV); gGL.end(); - } + } } @@ -4606,7 +4606,7 @@ void LLPipeline::setupAvatarLights(BOOL for_edit) glLightf (GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.0f); glLightf (GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.0f); glLightf (GL_LIGHT1, GL_SPOT_EXPONENT, 0.0f); - glLightf (GL_LIGHT1, GL_SPOT_CUTOFF, 180.0f); + glLightf (GL_LIGHT1, GL_SPOT_CUTOFF, 180.0f); } else if (gAvatarBacklight) // Always true (unless overridden in a devs .ini) { @@ -4922,8 +4922,8 @@ void LLPipeline::setupHWLights(LLDrawPool* pool) } else // omnidirectional (point) light { - glLightf (gllight, GL_SPOT_EXPONENT, 0.0f); - glLightf (gllight, GL_SPOT_CUTOFF, 180.0f); + glLightf (gllight, GL_SPOT_EXPONENT, 0.0f); + glLightf (gllight, GL_SPOT_CUTOFF, 180.0f); // we use specular.w = 1.0 as a cheap hack for the shaders to know that this is omnidirectional rather than a spotlight const float specular[] = {0.f, 0.f, 0.f, 1.f}; @@ -4956,7 +4956,7 @@ void LLPipeline::setupHWLights(LLDrawPool* pool) F32 light_radius = 16.f; - F32 x = 3.f; + F32 x = 3.f; float linatten = x / (light_radius); // % of brightness at radius mHWLightColors[2] = light_color; @@ -6628,13 +6628,13 @@ void LLPipeline::renderDeferredLighting() glTexCoord4f(tc.v[0], tc.v[1], tc.v[2], 0); } - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); + glPushMatrix(); + glLoadIdentity(); + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); - mDeferredLight[0].bindTarget(); + mDeferredLight[0].bindTarget(); if (gSavedSettings.getBOOL("RenderDeferredSSAO") || gSavedSettings.getS32("RenderShadowDetail") > 0) { @@ -6679,19 +6679,19 @@ void LLPipeline::renderDeferredLighting() unbindDeferredShader(gDeferredSunProgram); } } - else - { + else + { glClearColor(1,1,1,1); - mDeferredLight[0].clear(GL_COLOR_BUFFER_BIT); + mDeferredLight[0].clear(GL_COLOR_BUFFER_BIT); glClearColor(0,0,0,0); - } + } - mDeferredLight[0].flush(); + mDeferredLight[0].flush(); { //global illumination specific block (still experimental) if (gSavedSettings.getBOOL("RenderDeferredBlurLight") && - gSavedSettings.getBOOL("RenderDeferredGI")) - { + gSavedSettings.getBOOL("RenderDeferredGI")) + { LLFastTimer ftm(FTM_EDGE_DETECTION); //generate edge map LLGLDisable blend(GL_BLEND); @@ -6793,75 +6793,75 @@ void LLPipeline::renderDeferredLighting() } if (gSavedSettings.getBOOL("RenderDeferredSSAO")) - { //soften direct lighting lightmap - LLFastTimer ftm(FTM_SOFTEN_SHADOW); - //blur lightmap - mDeferredLight[1].bindTarget(); + { //soften direct lighting lightmap + LLFastTimer ftm(FTM_SOFTEN_SHADOW); + //blur lightmap + mDeferredLight[1].bindTarget(); - glClearColor(1,1,1,1); - mDeferredLight[1].clear(GL_COLOR_BUFFER_BIT); - glClearColor(0,0,0,0); - - bindDeferredShader(gDeferredBlurLightProgram); + glClearColor(1,1,1,1); + mDeferredLight[1].clear(GL_COLOR_BUFFER_BIT); + glClearColor(0,0,0,0); + + bindDeferredShader(gDeferredBlurLightProgram); - LLVector3 go = gSavedSettings.getVector3("RenderShadowGaussian"); - const U32 kern_length = 4; - F32 blur_size = gSavedSettings.getF32("RenderShadowBlurSize"); - F32 dist_factor = gSavedSettings.getF32("RenderShadowBlurDistFactor"); + LLVector3 go = gSavedSettings.getVector3("RenderShadowGaussian"); + const U32 kern_length = 4; + F32 blur_size = gSavedSettings.getF32("RenderShadowBlurSize"); + F32 dist_factor = gSavedSettings.getF32("RenderShadowBlurDistFactor"); - // sample symmetrically with the middle sample falling exactly on 0.0 - F32 x = 0.f; + // sample symmetrically with the middle sample falling exactly on 0.0 + F32 x = 0.f; - LLVector3 gauss[32]; // xweight, yweight, offset + LLVector3 gauss[32]; // xweight, yweight, offset - for (U32 i = 0; i < kern_length; i++) - { - gauss[i].mV[0] = llgaussian(x, go.mV[0]); - gauss[i].mV[1] = llgaussian(x, go.mV[1]); - gauss[i].mV[2] = x; - x += 1.f; - } + for (U32 i = 0; i < kern_length; i++) + { + gauss[i].mV[0] = llgaussian(x, go.mV[0]); + gauss[i].mV[1] = llgaussian(x, go.mV[1]); + gauss[i].mV[2] = x; + x += 1.f; + } - gDeferredBlurLightProgram.uniform2f("delta", 1.f, 0.f); - gDeferredBlurLightProgram.uniform1f("dist_factor", dist_factor); - gDeferredBlurLightProgram.uniform3fv("kern[0]", kern_length, gauss[0].mV); - gDeferredBlurLightProgram.uniform3fv("kern", kern_length, gauss[0].mV); - gDeferredBlurLightProgram.uniform1f("kern_scale", blur_size * (kern_length/2.f - 0.5f)); - - { - LLGLDisable blend(GL_BLEND); - LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_ALWAYS); - stop_glerror(); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); - stop_glerror(); - } + gDeferredBlurLightProgram.uniform2f("delta", 1.f, 0.f); + gDeferredBlurLightProgram.uniform1f("dist_factor", dist_factor); + gDeferredBlurLightProgram.uniform3fv("kern[0]", kern_length, gauss[0].mV); + gDeferredBlurLightProgram.uniform3fv("kern", kern_length, gauss[0].mV); + gDeferredBlurLightProgram.uniform1f("kern_scale", blur_size * (kern_length/2.f - 0.5f)); - mDeferredLight[1].flush(); - unbindDeferredShader(gDeferredBlurLightProgram); + { + LLGLDisable blend(GL_BLEND); + LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_ALWAYS); + stop_glerror(); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); + stop_glerror(); + } + + mDeferredLight[1].flush(); + unbindDeferredShader(gDeferredBlurLightProgram); - bindDeferredShader(gDeferredBlurLightProgram, 1); - mDeferredLight[0].bindTarget(); + bindDeferredShader(gDeferredBlurLightProgram, 1); + mDeferredLight[0].bindTarget(); - gDeferredBlurLightProgram.uniform2f("delta", 0.f, 1.f); + gDeferredBlurLightProgram.uniform2f("delta", 0.f, 1.f); - { - LLGLDisable blend(GL_BLEND); - LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_ALWAYS); - stop_glerror(); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); - stop_glerror(); + { + LLGLDisable blend(GL_BLEND); + LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_ALWAYS); + stop_glerror(); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); + stop_glerror(); + } + mDeferredLight[0].flush(); + unbindDeferredShader(gDeferredBlurLightProgram); } - mDeferredLight[0].flush(); - unbindDeferredShader(gDeferredBlurLightProgram); - } - stop_glerror(); - glPopMatrix(); - stop_glerror(); - glMatrixMode(GL_MODELVIEW); - stop_glerror(); - glPopMatrix(); - stop_glerror(); + stop_glerror(); + glPopMatrix(); + stop_glerror(); + glMatrixMode(GL_MODELVIEW); + stop_glerror(); + glPopMatrix(); + stop_glerror(); //copy depth and stencil from deferred screen //mScreen.copyContents(mDeferredScreen, 0, 0, mDeferredScreen.getWidth(), mDeferredScreen.getHeight(), @@ -7528,7 +7528,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) LLPipeline::sUseOcclusion = llmin(occlusion, 1); gPipeline.pushRenderTypeMask(); - + glh::matrix4f projection = glh_get_current_projection(); glh::matrix4f mat; @@ -7618,24 +7618,24 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) } gPipeline.pushRenderTypeMask(); - + clearRenderTypeMask(LLPipeline::RENDER_TYPE_WATER, LLPipeline::RENDER_TYPE_GROUND, LLPipeline::RENDER_TYPE_SKY, LLPipeline::RENDER_TYPE_CLOUDS, LLPipeline::END_RENDER_TYPES); - S32 detail = gSavedSettings.getS32("RenderReflectionDetail"); + S32 detail = gSavedSettings.getS32("RenderReflectionDetail"); if (detail > 0) { //mask out selected geometry based on reflection detail if (detail < 4) { clearRenderTypeMask(LLPipeline::RENDER_TYPE_PARTICLES, END_RENDER_TYPES); - if (detail < 3) - { + if (detail < 3) + { clearRenderTypeMask(LLPipeline::RENDER_TYPE_AVATAR, END_RENDER_TYPES); - if (detail < 2) - { + if (detail < 2) + { clearRenderTypeMask(LLPipeline::RENDER_TYPE_VOLUME, END_RENDER_TYPES); } } @@ -7647,15 +7647,15 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) stateSort(camera, ref_result); } - if (LLDrawPoolWater::sNeedsDistortionUpdate) - { + if (LLDrawPoolWater::sNeedsDistortionUpdate) + { if (gSavedSettings.getS32("RenderReflectionDetail") > 0) - { - gPipeline.grabReferences(ref_result); - LLGLUserClipPlane clip_plane(plane, mat, projection); - renderGeom(camera); - } + { + gPipeline.grabReferences(ref_result); + LLGLUserClipPlane clip_plane(plane, mat, projection); + renderGeom(camera); } + } gPipeline.popRenderTypeMask(); } @@ -7959,7 +7959,7 @@ BOOL LLPipeline::getVisiblePointCloud(LLCamera& camera, LLVector3& min, LLVector //bounding box line segments U32 bs[] = - { + { 0,1, 1,3, 3,2, @@ -7997,9 +7997,9 @@ BOOL LLPipeline::getVisiblePointCloud(LLCamera& camera, LLVector3& min, LLVector LLVector3 intersect = v2+line*t; pp.push_back(intersect); } + } } - } - + //camera frustum line segments const U32 fs[] = { @@ -8012,7 +8012,7 @@ BOOL LLPipeline::getVisiblePointCloud(LLCamera& camera, LLVector3& min, LLVector 5,6, 6,7, 7,4, - + 0,4, 1,5, 2,6, @@ -8021,7 +8021,7 @@ BOOL LLPipeline::getVisiblePointCloud(LLCamera& camera, LLVector3& min, LLVector LLVector3 center = (max+min)*0.5f; LLVector3 size = (max-min)*0.5f; - + for (U32 i = 0; i < 12; i++) { for (U32 j = 0; j < 6; ++j) @@ -8044,17 +8044,17 @@ BOOL LLPipeline::getVisiblePointCloud(LLCamera& camera, LLVector3& min, LLVector pp.push_back(intersect); } } - } - + } + LLVector3 ext[] = { min-LLVector3(0.05f,0.05f,0.05f), max+LLVector3(0.05f,0.05f,0.05f) }; for (U32 i = 0; i < pp.size(); ++i) { bool found = true; - - const F32* p = pp[i].mV; + const F32* p = pp[i].mV; + for (U32 j = 0; j < 3; ++j) { if (p[j] < ext[0].mV[j] || @@ -8064,24 +8064,24 @@ BOOL LLPipeline::getVisiblePointCloud(LLCamera& camera, LLVector3& min, LLVector break; } } - + for (U32 j = 0; j < 6; ++j) { const LLPlane& cp = camera.getAgentPlane(j); F32 dist = cp.dist(pp[i]); if (dist > 0.05f) //point is above some plane, not contained - { + { found = false; break; - } - } + } + } - if (found) - { + if (found) + { fp.push_back(pp[i]); } } - + if (fp.empty()) { return FALSE; @@ -8893,141 +8893,141 @@ void LLPipeline::generateSunShadow(LLCamera& camera) } } - + //hack to disable projector shadows static bool clear = true; bool gen_shadow = gSavedSettings.getS32("RenderShadowDetail") > 1; - + if (gen_shadow) { clear = true; - F32 fade_amt = gFrameIntervalSeconds * llmax(LLViewerCamera::getInstance()->getVelocityStat()->getCurrentPerSec(), 1.f); + F32 fade_amt = gFrameIntervalSeconds * llmax(LLViewerCamera::getInstance()->getVelocityStat()->getCurrentPerSec(), 1.f); - //update shadow targets - for (U32 i = 0; i < 2; i++) - { //for each current shadow - LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_SHADOW4+i; + //update shadow targets + for (U32 i = 0; i < 2; i++) + { //for each current shadow + LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_SHADOW4+i; - if (mShadowSpotLight[i].notNull() && - (mShadowSpotLight[i] == mTargetShadowSpotLight[0] || - mShadowSpotLight[i] == mTargetShadowSpotLight[1])) - { //keep this spotlight - mSpotLightFade[i] = llmin(mSpotLightFade[i]+fade_amt, 1.f); - } - else - { //fade out this light - mSpotLightFade[i] = llmax(mSpotLightFade[i]-fade_amt, 0.f); - - if (mSpotLightFade[i] == 0.f || mShadowSpotLight[i].isNull()) - { //faded out, grab one of the pending spots (whichever one isn't already taken) - if (mTargetShadowSpotLight[0] != mShadowSpotLight[(i+1)%2]) - { - mShadowSpotLight[i] = mTargetShadowSpotLight[0]; - } - else - { - mShadowSpotLight[i] = mTargetShadowSpotLight[1]; - } + if (mShadowSpotLight[i].notNull() && + (mShadowSpotLight[i] == mTargetShadowSpotLight[0] || + mShadowSpotLight[i] == mTargetShadowSpotLight[1])) + { //keep this spotlight + mSpotLightFade[i] = llmin(mSpotLightFade[i]+fade_amt, 1.f); + } + else + { //fade out this light + mSpotLightFade[i] = llmax(mSpotLightFade[i]-fade_amt, 0.f); + + if (mSpotLightFade[i] == 0.f || mShadowSpotLight[i].isNull()) + { //faded out, grab one of the pending spots (whichever one isn't already taken) + if (mTargetShadowSpotLight[0] != mShadowSpotLight[(i+1)%2]) + { + mShadowSpotLight[i] = mTargetShadowSpotLight[0]; + } + else + { + mShadowSpotLight[i] = mTargetShadowSpotLight[1]; } } } - - for (S32 i = 0; i < 2; i++) - { - glh_set_current_modelview(saved_view); - glh_set_current_projection(saved_proj); + } - if (mShadowSpotLight[i].isNull()) - { - continue; - } + for (S32 i = 0; i < 2; i++) + { + glh_set_current_modelview(saved_view); + glh_set_current_projection(saved_proj); - LLVOVolume* volume = mShadowSpotLight[i]->getVOVolume(); + if (mShadowSpotLight[i].isNull()) + { + continue; + } - if (!volume) - { - mShadowSpotLight[i] = NULL; - continue; - } + LLVOVolume* volume = mShadowSpotLight[i]->getVOVolume(); - LLDrawable* drawable = mShadowSpotLight[i]; + if (!volume) + { + mShadowSpotLight[i] = NULL; + continue; + } - LLVector3 params = volume->getSpotLightParams(); - F32 fov = params.mV[0]; + LLDrawable* drawable = mShadowSpotLight[i]; - //get agent->light space matrix (modelview) - LLVector3 center = drawable->getPositionAgent(); - LLQuaternion quat = volume->getRenderRotation(); + LLVector3 params = volume->getSpotLightParams(); + F32 fov = params.mV[0]; - //get near clip plane - LLVector3 scale = volume->getScale(); - LLVector3 at_axis(0,0,-scale.mV[2]*0.5f); - at_axis *= quat; + //get agent->light space matrix (modelview) + LLVector3 center = drawable->getPositionAgent(); + LLQuaternion quat = volume->getRenderRotation(); - LLVector3 np = center+at_axis; - at_axis.normVec(); + //get near clip plane + LLVector3 scale = volume->getScale(); + LLVector3 at_axis(0,0,-scale.mV[2]*0.5f); + at_axis *= quat; - //get origin that has given fov for plane np, at_axis, and given scale - F32 dist = (scale.mV[1]*0.5f)/tanf(fov*0.5f); + LLVector3 np = center+at_axis; + at_axis.normVec(); - LLVector3 origin = np - at_axis*dist; + //get origin that has given fov for plane np, at_axis, and given scale + F32 dist = (scale.mV[1]*0.5f)/tanf(fov*0.5f); - LLMatrix4 mat(quat, LLVector4(origin, 1.f)); + LLVector3 origin = np - at_axis*dist; - view[i+4] = glh::matrix4f((F32*) mat.mMatrix); + LLMatrix4 mat(quat, LLVector4(origin, 1.f)); - view[i+4] = view[i+4].inverse(); + view[i+4] = glh::matrix4f((F32*) mat.mMatrix); - //get perspective matrix - F32 near_clip = dist+0.01f; - F32 width = scale.mV[VX]; - F32 height = scale.mV[VY]; - F32 far_clip = dist+volume->getLightRadius()*1.5f; + view[i+4] = view[i+4].inverse(); - F32 fovy = fov * RAD_TO_DEG; - F32 aspect = width/height; - - proj[i+4] = gl_perspective(fovy, aspect, near_clip, far_clip); + //get perspective matrix + F32 near_clip = dist+0.01f; + F32 width = scale.mV[VX]; + F32 height = scale.mV[VY]; + F32 far_clip = dist+volume->getLightRadius()*1.5f; - //translate and scale to from [-1, 1] to [0, 1] - glh::matrix4f trans(0.5f, 0.f, 0.f, 0.5f, - 0.f, 0.5f, 0.f, 0.5f, - 0.f, 0.f, 0.5f, 0.5f, - 0.f, 0.f, 0.f, 1.f); + F32 fovy = fov * RAD_TO_DEG; + F32 aspect = width/height; + + proj[i+4] = gl_perspective(fovy, aspect, near_clip, far_clip); - glh_set_current_modelview(view[i+4]); - glh_set_current_projection(proj[i+4]); + //translate and scale to from [-1, 1] to [0, 1] + glh::matrix4f trans(0.5f, 0.f, 0.f, 0.5f, + 0.f, 0.5f, 0.f, 0.5f, + 0.f, 0.f, 0.5f, 0.5f, + 0.f, 0.f, 0.f, 1.f); - mSunShadowMatrix[i+4] = trans*proj[i+4]*view[i+4]*inv_view; - - for (U32 j = 0; j < 16; j++) - { - gGLLastModelView[j] = mShadowModelview[i+4].m[j]; - gGLLastProjection[j] = mShadowProjection[i+4].m[j]; - } + glh_set_current_modelview(view[i+4]); + glh_set_current_projection(proj[i+4]); + + mSunShadowMatrix[i+4] = trans*proj[i+4]*view[i+4]*inv_view; + + for (U32 j = 0; j < 16; j++) + { + gGLLastModelView[j] = mShadowModelview[i+4].m[j]; + gGLLastProjection[j] = mShadowProjection[i+4].m[j]; + } - mShadowModelview[i+4] = view[i+4]; - mShadowProjection[i+4] = proj[i+4]; + mShadowModelview[i+4] = view[i+4]; + mShadowProjection[i+4] = proj[i+4]; - LLCamera shadow_cam = camera; - shadow_cam.setFar(far_clip); - shadow_cam.setOrigin(origin); + LLCamera shadow_cam = camera; + shadow_cam.setFar(far_clip); + shadow_cam.setOrigin(origin); - LLViewerCamera::updateFrustumPlanes(shadow_cam, FALSE, FALSE, TRUE); + LLViewerCamera::updateFrustumPlanes(shadow_cam, FALSE, FALSE, TRUE); - stop_glerror(); + stop_glerror(); - mShadow[i+4].bindTarget(); - mShadow[i+4].getViewport(gGLViewport); + mShadow[i+4].bindTarget(); + mShadow[i+4].getViewport(gGLViewport); - static LLCullResult result[2]; + static LLCullResult result[2]; - LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_SHADOW0+i+4; + LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_SHADOW0+i+4; - renderShadow(view[i+4], proj[i+4], shadow_cam, result[i], FALSE, FALSE); + renderShadow(view[i+4], proj[i+4], shadow_cam, result[i], FALSE, FALSE); - mShadow[i+4].flush(); - } + mShadow[i+4].flush(); + } } else { diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc index df2fb2a6ea..9bafc28705 100644 --- a/indra/newview/res/viewerRes.rc +++ b/indra/newview/res/viewerRes.rc @@ -129,8 +129,8 @@ TOOLSIT CURSOR "toolsit.cur" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,1,0,0 - PRODUCTVERSION 2,1,0,0 + FILEVERSION 2,1,0,13828 + PRODUCTVERSION 2,1,0,13828 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -147,12 +147,12 @@ BEGIN BEGIN VALUE "CompanyName", "Linden Lab" VALUE "FileDescription", "Second Life" - VALUE "FileVersion", "2.1.0.0" + VALUE "FileVersion", "2.1.0.13828" VALUE "InternalName", "Second Life" VALUE "LegalCopyright", "Copyright 2001-2008, Linden Research, Inc." VALUE "OriginalFilename", "SecondLife.exe" VALUE "ProductName", "Second Life" - VALUE "ProductVersion", "2.1.0.0" + VALUE "ProductVersion", "2.1.0.13828" END END BLOCK "VarFileInfo" diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 2188c71ff9..5ba1fc9b21 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -113,7 +113,7 @@ reference="LtYellow" /> <color name="AgentLinkColor" - reference="White" /> + reference="EmphasisColor" /> <color name="AlertTextColor" value="0.58 0.66 0.84 1" /> diff --git a/indra/newview/skins/default/xui/da/floater_camera.xml b/indra/newview/skins/default/xui/da/floater_camera.xml index a1b98ec4ce..5b7ef6db54 100644 --- a/indra/newview/skins/default/xui/da/floater_camera.xml +++ b/indra/newview/skins/default/xui/da/floater_camera.xml @@ -22,6 +22,35 @@ Se objekt </floater.string> <panel name="controls"> + <panel name="preset_views_list"> + <panel_camera_item name="front_view"> + <panel_camera_item.text name="front_view_text"> + Se forfra + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="group_view"> + <panel_camera_item.text name="side_view_text"> + Se fra siden + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="rear_view"> + <panel_camera_item.text name="rear_view_text"> + Se bagfra + </panel_camera_item.text> + </panel_camera_item> + </panel> + <panel name="camera_modes_list"> + <panel_camera_item name="object_view"> + <panel_camera_item.text name="object_view_text"> + Se fra objekt + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="mouselook_view"> + <panel_camera_item.text name="mouselook_view_text"> + Førsteperson + </panel_camera_item.text> + </panel_camera_item> + </panel> <panel name="zoom" tool_tip="Zoom kamera mod fokus"> <joystick_rotate name="cam_rotate_stick" tool_tip="Kamera kredser rundt om fokus"/> <slider_bar name="zoom_slider" tool_tip="Zoom kamera mod fokus"/> diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture.xml index a26f2f95c9..bd2b194717 100644 --- a/indra/newview/skins/default/xui/da/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/da/floater_preview_gesture.xml @@ -42,7 +42,12 @@ <text name="library_label"> Type: </text> - <scroll_list name="library_list"/> + <scroll_list name="library_list"> + <scroll_list.rows name="action_animation" value="Animation"/> + <scroll_list.rows name="action_sound" value="Lyd"/> + <scroll_list.rows name="action_chat" value="Chat"/> + <scroll_list.rows name="action_wait" value="Vent"/> + </scroll_list> <button label="Tilføj >>" name="add_btn"/> <text name="steps_label"> Trin: diff --git a/indra/newview/skins/default/xui/da/floater_world_map.xml b/indra/newview/skins/default/xui/da/floater_world_map.xml index ca18faa0bb..97364e0f9f 100644 --- a/indra/newview/skins/default/xui/da/floater_world_map.xml +++ b/indra/newview/skins/default/xui/da/floater_world_map.xml @@ -19,12 +19,12 @@ <text name="land_sale_label"> Land til salg </text> - <text name="by_owner_label"> - efter ejer - </text> <text name="auction_label"> land auktion </text> + <text name="by_owner_label"> + efter ejer + </text> <button name="Go Home" tool_tip="Teleportér til min hjemmelokation"/> <text name="Home_label"> Hjem @@ -35,7 +35,7 @@ <text name="pg_label"> Generelt </text> - <check_box name="events_mature_chk"/> + <check_box initial_value="true" name="events_mature_chk"/> <text name="events_mature_label"> Moderat </text> @@ -58,6 +58,9 @@ <search_editor label="Regioner efter navn" name="location" tool_tip="Indtast navn på en region"/> <button label="Find" name="DoSearch" tool_tip="Led efter region"/> <button name="Clear" tool_tip="Fjern søgelinier og nulstil kort"/> + <text name="events_label"> + Lokation: + </text> <button label="Teleport" name="Teleport" tool_tip="Teleportér til valgte sted"/> <button label="Kopiér SLurl" name="copy_slurl" tool_tip="Kopierer nuværende lokation som SLurl der kan sendes på web."/> <button label="Vis valgte" name="Show Destination" tool_tip="Centrér kortet på valgte lokation"/> diff --git a/indra/newview/skins/default/xui/da/language_settings.xml b/indra/newview/skins/default/xui/da/language_settings.xml index fa8a788605..3e46f69af1 100644 --- a/indra/newview/skins/default/xui/da/language_settings.xml +++ b/indra/newview/skins/default/xui/da/language_settings.xml @@ -17,6 +17,7 @@ datetimeToCodes["month"] = "%B"; // August datetimeToCodes["mthnum"] = "%m"; // 08 datetimeToCodes["day"] = "%d"; // 31 + datetimeToCodes["sday"] = "%-d"; // 9 datetimeToCodes["hour24"] = "%H"; // 14 datetimeToCodes["hour"] = "%H"; // 14 datetimeToCodes["hour12"] = "%I"; // 02 diff --git a/indra/newview/skins/default/xui/da/menu_inventory.xml b/indra/newview/skins/default/xui/da/menu_inventory.xml index 96da784fe4..35551318d1 100644 --- a/indra/newview/skins/default/xui/da/menu_inventory.xml +++ b/indra/newview/skins/default/xui/da/menu_inventory.xml @@ -59,6 +59,7 @@ <menu_item_call label="Kopiér" name="Copy"/> <menu_item_call label="Indsæt" name="Paste"/> <menu_item_call label="Sæt ind som link" name="Paste As Link"/> + <menu_item_call label="Slet" name="Remove Link"/> <menu_item_call label="Slet" name="Delete"/> <menu_item_call label="Slet systemfolder" name="Delete System Folder"/> <menu_item_call label="start konference chat" name="Conference Chat Folder"/> diff --git a/indra/newview/skins/default/xui/da/menu_inventory_add.xml b/indra/newview/skins/default/xui/da/menu_inventory_add.xml index dc79e4109e..07f70d7190 100644 --- a/indra/newview/skins/default/xui/da/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/da/menu_inventory_add.xml @@ -5,6 +5,7 @@ <menu_item_call label="Lyd (L$[COST])..." name="Upload Sound"/> <menu_item_call label="Animation (L$[COST])..." name="Upload Animation"/> <menu_item_call label="Hent mange (L$[COST] pr. fil)..." name="Bulk Upload"/> + <menu_item_call label="Sæt standardværdier for upload rettigheder" name="perm prefs"/> </menu> <menu_item_call label="Ny mappe" name="New Folder"/> <menu_item_call label="Nyt script" name="New Script"/> diff --git a/indra/newview/skins/default/xui/da/menu_object.xml b/indra/newview/skins/default/xui/da/menu_object.xml index c98a07e140..f4f7eb0af8 100644 --- a/indra/newview/skins/default/xui/da/menu_object.xml +++ b/indra/newview/skins/default/xui/da/menu_object.xml @@ -1,6 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Object Pie"> - <menu_item_call label="Berør" name="Object Touch"/> + <menu_item_call label="Berør" name="Object Touch"> + <on_enable parameter="Berør" name="EnableTouch"/> + </menu_item_call> <menu_item_call label="Redigér" name="Edit..."/> <menu_item_call label="Byg" name="Build"/> <menu_item_call label="Åben" name="Open"/> diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml index 0d36a08652..fa74568c2d 100644 --- a/indra/newview/skins/default/xui/da/menu_viewer.xml +++ b/indra/newview/skins/default/xui/da/menu_viewer.xml @@ -92,7 +92,7 @@ <menu_item_call label="Sæt scripts til "Not Running"" name="Set Scripts to Not Running"/> </menu> <menu label="Valg" name="Options"> - <menu_item_call label="Sæt standard rettigheder" name="perm prefs"/> + <menu_item_call label="Sæt standard rettigher for upload" name="perm prefs"/> <menu_item_check label="Vis avancerede rettigheder" name="DebugPermissions"/> <menu_item_check label="Vælg kun egne objekter" name="Select Only My Objects"/> <menu_item_check label="Vis kun flytbare objekter" name="Select Only Movable Objects"/> diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml index 163df5b8d2..62d9c5a203 100644 --- a/indra/newview/skins/default/xui/da/notifications.xml +++ b/indra/newview/skins/default/xui/da/notifications.xml @@ -1635,8 +1635,8 @@ Check venligst din netværks- og firewall setup. Avatar '[NAME]' forsvandt helt "uploaded". </notification> <notification name="AvatarRezSelfBakeNotification"> - ( [EXISTENCE] seconds alive ) -Du sendte en [RESOLUTION] tekstur til '[BODYREGION]' efter [TIME] sekunder. + ( [EXISTENCE] sekunder i live ) +You [ACTION] a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME] seconds. </notification> <notification name="ConfirmLeaveCall"> Er du sikker på at du vil forlade dette opkald? @@ -1660,4 +1660,7 @@ Hvis du bliver ved med at have problemer, besøg venligst [SUPPORT_SITE]. Hvis du selv ejer land, kan du benytte det til hjemme lokation. Ellers kan du se på verdenskortet og finde steder markeret med "Infohub". </global> + <global name="You died and have been teleported to your home location"> + Du døde og er blevet teleporteret til din hjemmelokation. + </global> </notifications> diff --git a/indra/newview/skins/default/xui/da/panel_group_notices.xml b/indra/newview/skins/default/xui/da/panel_group_notices.xml index d8e8cb3c2a..0a0b8f5e04 100644 --- a/indra/newview/skins/default/xui/da/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/da/panel_group_notices.xml @@ -24,7 +24,7 @@ Maksimum er 200 pr. gruppe pr. dag <text name="notice_list_none_found"> Ingen fundet </text> - <button label="Lav en ny besked" label_selected="Lav ny besked" name="create_new_notice" tool_tip="Lav en ny besked"/> + <button label="Ny besked" label_selected="Lav ny besked" name="create_new_notice" tool_tip="Lav en ny besked"/> <button label="Genopfrisk" label_selected="Genopfrisk liste" name="refresh_notices" tool_tip="Genopfrisk beskedliste"/> <panel label="Lav ny besked" name="panel_create_new_notice"> <text name="lbl"> diff --git a/indra/newview/skins/default/xui/da/panel_group_roles.xml b/indra/newview/skins/default/xui/da/panel_group_roles.xml index 3ab3dd8bf8..ebc773f7ed 100644 --- a/indra/newview/skins/default/xui/da/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/da/panel_group_roles.xml @@ -13,6 +13,9 @@ Vælg flere medlemmer ved at holde Ctrl-tasten nede og klik på deres navne. </panel.string> + <panel.string name="donation_area"> + [AREA] m² + </panel.string> <filter_editor label="Filtrér medlemmer" name="filter_input"/> <name_list name="member_list"> <name_list.columns label="Medlemsnavn" name="name"/> @@ -76,21 +79,15 @@ ting i denne gruppe. Der er en bred vifte af rettigheder. <text name="static"> Rolle navn </text> - <line_editor name="role_name"> - Ansatte - </line_editor> + <line_editor name="role_name"/> <text name="static3"> Rolle titel </text> - <line_editor name="role_title"> - (venter) - </line_editor> + <line_editor name="role_title"/> <text name="static2"> Beskrivelse </text> - <text_editor name="role_description"> - (venter) - </text_editor> + <text_editor name="role_description"/> <text name="static4"> Tildelte roller </text> @@ -105,9 +102,6 @@ ting i denne gruppe. Der er en bred vifte af rettigheder. </scroll_list> </panel> <panel name="actions_footer"> - <text name="static"> - Beskrivelse - </text> <text_editor name="action_description"> Denne rettigheder 'Udmeld medlemmer fra denne gruppe'. Kun en ejer kan udmelde en anden ejer. </text_editor> diff --git a/indra/newview/skins/default/xui/da/panel_nearby_media.xml b/indra/newview/skins/default/xui/da/panel_nearby_media.xml index 95bfc89f20..b4be70a22a 100644 --- a/indra/newview/skins/default/xui/da/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/da/panel_nearby_media.xml @@ -23,6 +23,12 @@ <button label="Mere >>" label_selected="Mindre <<" name="less_btn" tool_tip="Advancerede kontroller"/> </panel> <panel name="nearby_media_panel"> + <text name="nearby_media_title"> + Media tæt på + </text> + <text name="show_text"> + Vis: + </text> <combo_box name="show_combo"> <combo_box.item label="Overalt" name="All"/> <combo_box.item label="På dette sted" name="WithinParcel"/> @@ -36,28 +42,28 @@ <scroll_list.columns label="Navn" name="media_name"/> <scroll_list.columns label="Debug" name="media_debug"/> </scroll_list> - <panel> + <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> - <button name="stop_btn" tool_tip="Stop valgte medie"/> + <button name="stop_btn" tool_tip="Stop valgte media"/> </layout_panel> <layout_panel name="play"> - <button name="play_btn" tool_tip="Afspil valgte medie"/> + <button name="play_btn" tool_tip="Afspil valgte media"/> </layout_panel> <layout_panel name="pause"> - <button name="pause_btn" tool_tip="Pause valgt medie"/> + <button name="pause_btn" tool_tip="Pause valgte media"/> </layout_panel> <layout_panel name="volume_slider_ctrl"> - <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Lydstyrke for valgte medie"/> + <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Lydstyrke for valgte media"/> </layout_panel> <layout_panel name="mute"> - <button name="mute_btn" tool_tip="Sluk lyd fra valgte medie"/> + <button name="mute_btn" tool_tip="Sluk lyd for valgte media"/> </layout_panel> <layout_panel name="zoom"> - <button name="zoom_btn" tool_tip="Zoom til valgte medie"/> + <button name="zoom_btn" tool_tip="Zoom til valgte media"/> </layout_panel> <layout_panel name="unzoom"> - <button name="unzoom_btn" tool_tip="Zoom tilbage fra valgte medie"/> + <button name="unzoom_btn" tool_tip="Zoom tilbage fra valgte media"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_sound.xml b/indra/newview/skins/default/xui/da/panel_preferences_sound.xml index a1b47c3c1f..18cb0e47b9 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_sound.xml @@ -11,8 +11,8 @@ <check_box label="Aktiveret" name="enable_media"/> <slider label="Stemme chat" name="Voice Volume"/> <check_box label="Aktiveret" name="enable_voice_check"/> - <check_box label="Tillad media at afspilles automatisk" name="media_auto_play_btn" tool_tip="Vælg dette for at media afspille automatisk hvis det ønsker det" /> - <check_box label="Afspil media vedhæftet andre avatarer" name="media_show_on_others_btn" tool_tip="Deaktiver dette for at skjule vedhæftet media for avatarer i nærheden" /> + <check_box label="Tillad media at afspilles automatisk" name="media_auto_play_btn" tool_tip="Vælg dette for at media afspille automatisk hvis det ønsker det" value="true"/> + <check_box label="Afspil media vedhæftet andre avatarer" name="media_show_on_others_btn" tool_tip="Deaktiver dette for at skjule vedhæftet media for avatarer i nærheden" value="true"/> <text name="voice_chat_settings"> Stemme chat opsætning </text> @@ -28,6 +28,12 @@ <panel.string name="default_text"> Standard </panel.string> + <panel.string name="default system device"> + Standard systemenhed + </panel.string> + <panel.string name="no device"> + Ingen enheder + </panel.string> <text name="Input"> Input </text> diff --git a/indra/newview/skins/default/xui/da/panel_teleport_history.xml b/indra/newview/skins/default/xui/da/panel_teleport_history.xml index 8a01659ffa..e6e78028f5 100644 --- a/indra/newview/skins/default/xui/da/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/da/panel_teleport_history.xml @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="Teleport History"> <accordion name="history_accordion"> + <no_matched_tabs_text name="no_matched_teleports_msg" value="Fandt du ikke hvad du søgte? Prøv [secondlife:///app/search/places/[SEARCH_TERM] Search]."/> + <no_visible_tabs_text name="no_teleports_msg" value="Teleport historik er tom. Prøv [secondlife:///app/search/places/ Search]."/> <accordion_tab name="today" title="I dag"/> <accordion_tab name="yesterday" title="I går"/> <accordion_tab name="2_days_ago" title="2 dage siden"/> - 5 <accordion_tab name="3_days_ago" title="3 dage siden"/> <accordion_tab name="4_days_ago" title="4 dage siden"/> <accordion_tab name="5_days_ago" title="5 dage siden"/> diff --git a/indra/newview/skins/default/xui/da/sidepanel_item_info.xml b/indra/newview/skins/default/xui/da/sidepanel_item_info.xml index 070b4218a8..2350af8d49 100644 --- a/indra/newview/skins/default/xui/da/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/da/sidepanel_item_info.xml @@ -23,7 +23,7 @@ </panel.string> <text name="title" value="Profil for genstand"/> <text name="origin" value="(Beholdning)"/> - <panel label=""> + <panel label="" name="item_profile"> <text name="LabelItemNameTitle"> Navn: </text> @@ -39,7 +39,7 @@ </text> <button label="Profil..." name="BtnOwner"/> <text name="LabelAcquiredTitle"> - Erhvervet: + Anskaffet: </text> <text name="LabelAcquiredDate"/> <panel name="perms_inv"> @@ -48,21 +48,21 @@ </text> <check_box label="Redigere" name="CheckOwnerModify"/> <check_box label="Kopiere" name="CheckOwnerCopy"/> - <check_box label="Give væk" name="CheckOwnerTransfer"/> + <check_box label="Overfør" name="CheckOwnerTransfer"/> <text name="AnyoneLabel"> - Enhver: + Alle: </text> <check_box label="Kopiere" name="CheckEveryoneCopy"/> <text name="GroupLabel"> Gruppe: </text> - <check_box label="Dele" name="CheckShareWithGroup" tool_tip="Tillad alle medlemmer i den aktive gruppe at dele dine 'redigere' rettigheder for dette objekt. Du skal dedikere for at åbne for rolle begrænsninger."/> + <check_box label="Del" name="CheckShareWithGroup" tool_tip="Giver alle medlemmer adgang til at give gruppen ret til at ændre rettigheder for dette objekt. Du skal dedikere for at åbne for rolle begrænsninger."/> <text name="NextOwnerLabel"> Næste ejer: </text> <check_box label="Redigere" name="CheckNextOwnerModify"/> <check_box label="Kopiere" name="CheckNextOwnerCopy"/> - <check_box label="Give væk" name="CheckNextOwnerTransfer" tool_tip="Næste ejer kan give væk eller sælge dette objekt"/> + <check_box label="Overføre" name="CheckNextOwnerTransfer" tool_tip="Næste ejer kan give væk eller sælge dette objekt"/> </panel> <check_box label="Til salg" name="CheckPurchase"/> <combo_box name="combobox sale copy"> diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml index b6580a4515..3152661fd4 100644 --- a/indra/newview/skins/default/xui/da/strings.xml +++ b/indra/newview/skins/default/xui/da/strings.xml @@ -181,6 +181,7 @@ <string name="TooltipMustSingleDrop"> Kun et enkelt element kan trækkes ind her </string> + <string name="TooltipPrice" value="L$[BELØB]:"/> <string name="TooltipHttpUrl"> Klik for at se denne hjemmeside </string> @@ -233,7 +234,6 @@ Klik for at starte secondlife:// kommando </string> <string name="CurrentURL" value=" Nuværende URL: [CurrentURL]"/> - <string name="TooltipPrice" value="L$[AMOUNT]: "/> <string name="SLurlLabelTeleport"> Teleportér til </string> @@ -642,6 +642,9 @@ <string name="worldmap_offline"> Offline </string> + <string name="worldmap_item_tooltip_format"> + [AREA] m² L$[PRICE] + </string> <string name="worldmap_results_none_found"> Ingen fundet. </string> @@ -882,12 +885,57 @@ <string name="invalid_not_worn"> ugyldig </string> + <string name="create_new_shape"> + Opret ny figur + </string> + <string name="create_new_skin"> + Opret nyt hud + </string> + <string name="create_new_hair"> + Opret nyt hår + </string> + <string name="create_new_eyes"> + Opret nye øjne + </string> + <string name="create_new_shirt"> + Opret ny trøje + </string> + <string name="create_new_pants"> + Opret nye bukser + </string> + <string name="create_new_shoes"> + Opret nye sko + </string> + <string name="create_new_socks"> + Opret nye strømper + </string> + <string name="create_new_jacket"> + Opret ny jakke + </string> + <string name="create_new_gloves"> + Opret nye handsker + </string> + <string name="create_new_undershirt"> + Opret ny undertrøje + </string> + <string name="create_new_underpants"> + Opret nye underbukser + </string> + <string name="create_new_skirt"> + Opret ny nederdel + </string> + <string name="create_new_alpha"> + Opret ny alpha + </string> + <string name="create_new_tattoo"> + Opret ny tatovering + </string> + <string name="create_new_invalid"> + ugyldig + </string> <string name="NewWearable"> Ny [WEARABLE_ITEM] </string> - <string name="CreateNewWearable"> - Opret [WEARABLE_TYPE] - </string> <string name="next"> Næste </string> @@ -986,6 +1034,7 @@ <string name="AnimFlagStop" value=" Stop Animation : "/> <string name="AnimFlagStart" value=" Start Animation : "/> <string name="Wave" value=" Vink "/> + <string name="GestureActionNone" value="Ingen"/> <string name="HelloAvatar" value=" Hej, avatar! "/> <string name="ViewAllGestures" value=" Se alle >>"/> <string name="GetMoreGestures" value="Få mere >>"/> @@ -1071,6 +1120,9 @@ <string name="InvFolder Current Outfit"> Nuværende sæt </string> + <string name="InvFolder Initial Outfits"> + Start sæt + </string> <string name="InvFolder My Outfits"> Mine sæt </string> @@ -1390,6 +1442,7 @@ <string name="SummaryForTheWeek" value="Opsummering for denne uge, begyndende med "/> <string name="NextStipendDay" value="Næste stipendie dag er "/> <string name="GroupIndividualShare" value=" Gruppe Individuel Delt"/> + <string name="GroupColumn" value="Gruppe"/> <string name="Balance"> Balance </string> @@ -1604,7 +1657,7 @@ Beboeren du sendte en besked er 'optaget', hvilket betyder at han/hun ikke vil forstyrres. Din besked vil blive vis i hans/hendes IM panel til senere visning. </string> <string name="NoOutfits"> - Du har ikke nogen sæt endnu. Prøv [secondlife:///app/search/all/ Search] + You don't have any outfits yet. Try [secondlife:///app/search/all/ Search] </string> <string name="NoOutfitsTabsMatched"> Fandt du ikke hvad du søgte? Prøv [secondlife:///app/search/all/[SEARCH_TERM] Search]. @@ -3529,6 +3582,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE]. <string name="group_role_owners"> Ejere </string> + <string name="group_member_status_online"> + Online + </string> <string name="uploading_abuse_report"> Uploader... @@ -3582,9 +3638,15 @@ Krænkelsesanmeldelse <string name="Invalid Wearable"> Kan ikke tages på </string> + <string name="New Gesture"> + Ny bevægelse + </string> <string name="New Script"> Nyt script </string> + <string name="New Note"> + Ny note + </string> <string name="New Folder"> Ny folder </string> @@ -3642,6 +3704,15 @@ Krænkelsesanmeldelse <string name="Male - Wow"> Mand - Wow </string> + <string name="Female - Chuckle"> + Kvinde - Kluklatter + </string> + <string name="Female - Cry"> + Kvinde - gråd + </string> + <string name="Female - Embarrassed"> + Kvinde - Flov + </string> <string name="Female - Excuse me"> Kvinde - Undskyld mig </string> @@ -3660,9 +3731,21 @@ Krænkelsesanmeldelse <string name="Female - Hey"> Kvinde - Hey </string> + <string name="Female - Hey baby"> + Kvinde - Hey baby + </string> <string name="Female - Laugh"> Kvinde - Latter </string> + <string name="Female - Looking good"> + Kvinde - "Ser godt ud" + </string> + <string name="Female - Over here"> + Kvinde - Herovre + </string> + <string name="Female - Please"> + Kvinde - Be´ om + </string> <string name="Female - Repulsed"> Kvinde - Frastødt </string> @@ -3712,4 +3795,46 @@ Krænkelsesanmeldelse <string name="dateTimePM"> PM </string> + <string name="LocalEstimateUSD"> + US$ [AMOUNT] + </string> + <string name="Membership"> + Medlemsskab + </string> + <string name="Roles"> + Roller + </string> + <string name="Group Identity"> + Gruppe identitet + </string> + <string name="Parcel Management"> + Parcel håndtering + </string> + <string name="Parcel Identity"> + Parcel identitet + </string> + <string name="Parcel Settings"> + Parcel opsætning + </string> + <string name="Parcel Powers"> + Parcel beføjelser + </string> + <string name="Parcel Access"> + Parcel adgang + </string> + <string name="Parcel Content"> + Parcel indhold + </string> + <string name="Object Management"> + Objekt håndtering + </string> + <string name="Accounting"> + Regnskab + </string> + <string name="Notices"> + Beskeder + </string> + <string name="Chat"> + Chat + </string> </strings> diff --git a/indra/newview/skins/default/xui/de/floater_camera.xml b/indra/newview/skins/default/xui/de/floater_camera.xml index 418e717bf6..d49c207f98 100644 --- a/indra/newview/skins/default/xui/de/floater_camera.xml +++ b/indra/newview/skins/default/xui/de/floater_camera.xml @@ -22,6 +22,35 @@ Objekt ansehen </floater.string> <panel name="controls"> + <panel name="preset_views_list"> + <panel_camera_item name="front_view"> + <panel_camera_item.text name="front_view_text"> + Vorderansicht + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="group_view"> + <panel_camera_item.text name="side_view_text"> + Seitenansicht + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="rear_view"> + <panel_camera_item.text name="rear_view_text"> + Hinteransicht + </panel_camera_item.text> + </panel_camera_item> + </panel> + <panel name="camera_modes_list"> + <panel_camera_item name="object_view"> + <panel_camera_item.text name="object_view_text"> + Objektansicht + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="mouselook_view"> + <panel_camera_item.text name="mouselook_view_text"> + Mouselook + </panel_camera_item.text> + </panel_camera_item> + </panel> <panel name="zoom" tool_tip="Kamera auf Fokus zoomen"> <joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/> <slider_bar name="zoom_slider" tool_tip="Kamera auf Fokus zoomen"/> diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture.xml index 3a036fc441..6d3635fa8d 100644 --- a/indra/newview/skins/default/xui/de/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/de/floater_preview_gesture.xml @@ -42,7 +42,12 @@ <text name="library_label"> Bibliothek: </text> - <scroll_list name="library_list" width="166"/> + <scroll_list name="library_list" width="166"> + <scroll_list.rows name="action_animation" value="Animation"/> + <scroll_list.rows name="action_sound" value="Sound"/> + <scroll_list.rows name="action_chat" value="Chat"/> + <scroll_list.rows name="action_wait" value="Warten"/> + </scroll_list> <button label="Hinzufügen >>" left_pad="6" name="add_btn" width="94"/> <text name="steps_label"> Schritte: @@ -59,6 +64,7 @@ </radio_group> <check_box label="bis alle Animationen beendet sind" name="wait_anim_check"/> <check_box label="Zeit in Sekunden:" name="wait_time_check"/> + <line_editor name="wait_time_editor"/> <text name="help_label"> Alle Schritte werden gleichzeitig ausgeführt, wenn keine Pausen hinzugefügt wurden. </text> diff --git a/indra/newview/skins/default/xui/de/floater_world_map.xml b/indra/newview/skins/default/xui/de/floater_world_map.xml index f54d8c3328..befa46651a 100644 --- a/indra/newview/skins/default/xui/de/floater_world_map.xml +++ b/indra/newview/skins/default/xui/de/floater_world_map.xml @@ -22,12 +22,12 @@ <text name="land_sale_label"> Land-Verkauf </text> - <text name="by_owner_label"> - durch Besitzer - </text> <text name="auction_label"> Land-Auktion </text> + <text name="by_owner_label"> + durch Besitzer + </text> <button label="Nach Hause" label_selected="Nach Hause" name="Go Home" tool_tip="Nach Hause teleportieren"/> <text name="Home_label"> Zuhause @@ -39,7 +39,7 @@ <text name="pg_label"> Generell </text> - <check_box label="Mature" name="events_mature_chk"/> + <check_box initial_value="true" label="Mature" name="events_mature_chk"/> <text name="events_mature_label"> Moderat </text> @@ -67,6 +67,9 @@ <scroll_list.columns label="" name="icon"/> <scroll_list.columns label="" name="sim_name"/> </scroll_list> + <text name="events_label"> + Standort: + </text> <button label="Teleportieren" label_selected="Teleportieren" name="Teleport" tool_tip="Zu ausgewählter Position teleportieren"/> <button font="SansSerifSmall" label="SLurl kopieren" name="copy_slurl" tool_tip="Kopiert die aktuelle Position als SLurl zur Verwendung im Web."/> <button label="Auswahl anzeigen" label_selected="Ziel anzeigen" name="Show Destination" tool_tip="Karte auf ausgewählte Position zentrieren"/> diff --git a/indra/newview/skins/default/xui/de/language_settings.xml b/indra/newview/skins/default/xui/de/language_settings.xml index 3e357007ff..d54f548fe1 100644 --- a/indra/newview/skins/default/xui/de/language_settings.xml +++ b/indra/newview/skins/default/xui/de/language_settings.xml @@ -17,6 +17,7 @@ datetimeToCodes["month"] = "%B"; // August datetimeToCodes["mthnum"] = "%m"; // 08 datetimeToCodes["day"] = "%d"; // 31 + datetimeToCodes["sday"] = "%-d"; // 9 datetimeToCodes["hour24"] = "%H"; // 14 datetimeToCodes["hour"] = "%H"; // 14 datetimeToCodes["hour12"] = "%I"; // 02 diff --git a/indra/newview/skins/default/xui/de/menu_inventory.xml b/indra/newview/skins/default/xui/de/menu_inventory.xml index 59e93b113d..43722e0dcf 100644 --- a/indra/newview/skins/default/xui/de/menu_inventory.xml +++ b/indra/newview/skins/default/xui/de/menu_inventory.xml @@ -61,7 +61,7 @@ <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="Link entfernen" name="Remove 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"/> diff --git a/indra/newview/skins/default/xui/de/menu_inventory_add.xml b/indra/newview/skins/default/xui/de/menu_inventory_add.xml index 531edc02f1..dccee6712d 100644 --- a/indra/newview/skins/default/xui/de/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/de/menu_inventory_add.xml @@ -5,6 +5,7 @@ <menu_item_call label="Sound ([COST] L$)..." name="Upload Sound"/> <menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/> <menu_item_call label="Mehrfach-Upload ([COST] L$ pro Datei)..." name="Bulk Upload"/> + <menu_item_call label="Hochlade-Berechtigungen (Standard) festlegen" name="perm prefs"/> </menu> <menu_item_call label="Neuer Ordner" name="New Folder"/> <menu_item_call label="Neues Skript" name="New Script"/> diff --git a/indra/newview/skins/default/xui/de/menu_object.xml b/indra/newview/skins/default/xui/de/menu_object.xml index 8bb7b66482..756b606d65 100644 --- a/indra/newview/skins/default/xui/de/menu_object.xml +++ b/indra/newview/skins/default/xui/de/menu_object.xml @@ -1,6 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Object Pie"> - <menu_item_call label="Berühren" name="Object Touch"/> + <menu_item_call label="Berühren" name="Object Touch"> + <on_enable parameter="Berühren" name="EnableTouch"/> + </menu_item_call> <menu_item_call label="Bearbeiten" name="Edit..."/> <menu_item_call label="Bauen" name="Build"/> <menu_item_call label="Öffnen" name="Open"/> diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index 968f0f9ed1..e5baf0f98f 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -2765,7 +2765,7 @@ Avatar '[NAME]' hat als vollständig gerezzter Avatar die Welt verlass </notification> <notification name="AvatarRezSelfBakeNotification"> (Seit [EXISTENCE] Sekunden inworld ) -Die [RESOLUTION]-gebakene Textur für '[BODYREGION]' wurde in [TIME] Sekunden hochgeladen. +Die [RESOLUTION]-gebakene Textur für '[BODYREGION]' wurde in [TIME] Sekunden [ACTION]. </notification> <notification name="ConfirmLeaveCall"> Möchten Sie dieses Gespräch wirklich verlassen ? @@ -2803,4 +2803,7 @@ Sollte das Problem fortbestehen, finden Sie weitere Hilfestellung unter [SUPPORT Wenn Sie ein Stück Land besitzen, können Sie dies als Ihr Zuhause festlegen. Ansonsten können Sie auf der Karte nachsehen und dort Ort suchen, die als „Infohub“ gekennzeichnet sind. </global> + <global name="You died and have been teleported to your home location"> + Sie sind gestorben und wurden zu Ihrem Zuhause teleportiert. + </global> </notifications> diff --git a/indra/newview/skins/default/xui/de/panel_group_notices.xml b/indra/newview/skins/default/xui/de/panel_group_notices.xml index f45b5ea7af..8c1df04ed8 100644 --- a/indra/newview/skins/default/xui/de/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/de/panel_group_notices.xml @@ -21,7 +21,7 @@ Maximal 200 pro Gruppe täglich <text name="notice_list_none_found"> Nicht gefunden. </text> - <button label="Neue Mitteilung erstellen" label_selected="Neue Mitteilung" name="create_new_notice" tool_tip="Neue Mitteilung erstellen"/> + <button label="Neue Mitteilung" label_selected="Neue Mitteilung" name="create_new_notice" tool_tip="Neue Mitteilung erstellen"/> <button label="Aktualisieren" label_selected="Liste aktualisieren" name="refresh_notices" tool_tip="Mitteilungsliste aktualisieren"/> <panel label="Neue Mitteilung" name="panel_create_new_notice"> <text name="lbl"> diff --git a/indra/newview/skins/default/xui/de/panel_group_roles.xml b/indra/newview/skins/default/xui/de/panel_group_roles.xml index db5186e081..f297d32a91 100644 --- a/indra/newview/skins/default/xui/de/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/de/panel_group_roles.xml @@ -13,6 +13,9 @@ Drücken Sie die Strg-Taste und klicken Sie auf Namen, um mehrere Mitglieder auszuwählen. </panel.string> + <panel.string name="donation_area"> + [AREA] m². + </panel.string> <filter_editor label="Mitglieder filtern" name="filter_input"/> <name_list name="member_list"> <name_list.columns label="Mitglied" name="name" relative_width="0.30"/> diff --git a/indra/newview/skins/default/xui/de/panel_nearby_media.xml b/indra/newview/skins/default/xui/de/panel_nearby_media.xml index e633ae1dde..ef66148902 100644 --- a/indra/newview/skins/default/xui/de/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/de/panel_nearby_media.xml @@ -23,6 +23,12 @@ <button label="Mehr >>" label_selected="Weniger <<" name="less_btn" tool_tip="Erweiterte Steuerung"/> </panel> <panel name="nearby_media_panel"> + <text name="nearby_media_title"> + Medien in der Nähe + </text> + <text name="show_text"> + Anzeigen: + </text> <combo_box name="show_combo"> <combo_box.item label="Alle" name="All"/> <combo_box.item label="Auf dieser Parzelle" name="WithinParcel"/> @@ -36,7 +42,7 @@ <scroll_list.columns label="Name" name="media_name"/> <scroll_list.columns label="Fehler beseitigen" name="media_debug"/> </scroll_list> - <panel> + <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> <button name="stop_btn" tool_tip="Ausgewählte Medien stoppen"/> diff --git a/indra/newview/skins/default/xui/de/panel_people.xml b/indra/newview/skins/default/xui/de/panel_people.xml index 6db4cf76f1..8acb680175 100644 --- a/indra/newview/skins/default/xui/de/panel_people.xml +++ b/indra/newview/skins/default/xui/de/panel_people.xml @@ -56,7 +56,7 @@ Sie suchen nach Leuten? Verwenden Sie die [secondlife:///app/worldmap Karte]. <button label="IM" name="im_btn" tool_tip="Instant Messenger öffnen"/> <button label="Anrufen" name="call_btn" tool_tip="Diesen Einwohner anrufen"/> <button label="Teilen" name="share_btn" tool_tip="Inventarobjekt teilen"/> - <button label="Teleportieren" name="teleport_btn" tool_tip="Teleport anbieten"/> + <button label="Teleport" name="teleport_btn" tool_tip="Teleport anbieten"/> <button label="Gruppenprofil" name="group_info_btn" tool_tip="Gruppeninformationen anzeigen"/> <button label="Gruppen-Chat" name="chat_btn" tool_tip="Chat öffnen"/> <button label="Gruppe anrufen" name="group_call_btn" tool_tip="Diese Gruppe anrufen"/> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml index 44b2bd1f60..5c71b20fb0 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml @@ -11,8 +11,8 @@ <check_box label="Aktiviert" name="enable_media"/> <slider label="Voice-Chat" name="Voice Volume"/> <check_box label="Aktiviert" name="enable_voice_check"/> - <check_box label="Automatische Wiedergabe zulassen" name="media_auto_play_btn" tool_tip="Hier aktivieren, um Medien automatisch wiederzugeben."/> - <check_box label="Medien, die an andere Avatare angehängt sind, wiedergeben." name="media_show_on_others_btn" tool_tip="Diese Option deaktivieren, um Medien für andere Avataren, die sich in der Nähe befinden, auszublenden."/> + <check_box label="Automatische Wiedergabe zulassen" name="media_auto_play_btn" tool_tip="Hier aktivieren, um Medien automatisch wiederzugeben." value="true"/> + <check_box label="Medien, die an andere Avatare angehängt sind, wiedergeben." name="media_show_on_others_btn" tool_tip="Diese Option deaktivieren, um Medien für andere Avataren, die sich in der Nähe befinden, auszublenden." value="true"/> <text name="voice_chat_settings"> Voice-Chat-Einstellungen </text> @@ -28,6 +28,12 @@ <panel.string name="default_text"> Standard </panel.string> + <panel.string name="default system device"> + Standardgerät + </panel.string> + <panel.string name="no device"> + Kein Gerät + </panel.string> <text name="Input"> Eingabe </text> diff --git a/indra/newview/skins/default/xui/de/panel_teleport_history.xml b/indra/newview/skins/default/xui/de/panel_teleport_history.xml index 4efd83dfff..4d721f2af6 100644 --- a/indra/newview/skins/default/xui/de/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/de/panel_teleport_history.xml @@ -1,6 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="Teleport History"> <accordion name="history_accordion"> + <no_matched_tabs_text name="no_matched_teleports_msg" value="Sie haben nicht das Richtige gefunden? Versuchen Sie es mit der [secondlife:///app/search/places/[SEARCH_TERM] Suche]."/> + <no_visible_tabs_text name="no_teleports_msg" value="Die Teleportliste ist leer. Versuchen Sie es mit der [secondlife:///app/search/all Suche]."/> <accordion_tab name="today" title="Heute"/> <accordion_tab name="yesterday" title="Gestern"/> <accordion_tab name="2_days_ago" title="Vor 2 Tagen"/> diff --git a/indra/newview/skins/default/xui/de/sidepanel_item_info.xml b/indra/newview/skins/default/xui/de/sidepanel_item_info.xml index 63e7bce8ae..4ba187dbd6 100644 --- a/indra/newview/skins/default/xui/de/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/de/sidepanel_item_info.xml @@ -23,7 +23,7 @@ </panel.string> <text name="title" value="Objektprofil"/> <text name="origin" value="(Inventar)"/> - <panel label=""> + <panel label="" name="item_profile"> <text name="LabelItemNameTitle"> Name: </text> @@ -50,7 +50,7 @@ </text> <check_box label="Bearbeiten" name="CheckOwnerModify"/> <check_box label="Kopieren" name="CheckOwnerCopy"/> - <check_box label="Transferieren" name="CheckOwnerTransfer"/> + <check_box label="Übertragen" name="CheckOwnerTransfer"/> <text name="AnyoneLabel"> Jeder: </text> @@ -58,13 +58,13 @@ <text name="GroupLabel"> Gruppe: </text> - <check_box label="Teilen" name="CheckShareWithGroup" tool_tip="Mit allen Mitgliedern der zugeordneten Gruppe, Ihre Berechtigungen dieses Objekt zu ändern teilen. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/> + <check_box label="Teilen" name="CheckShareWithGroup" tool_tip="Mit allen Mitgliedern der zugeordneten Gruppe, Ihre Berechtigungen dieses Objekt zu ändern, teilen. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/> <text name="NextOwnerLabel"> Nächster Eigentümer: </text> <check_box label="Bearbeiten" name="CheckNextOwnerModify"/> <check_box label="Kopieren" name="CheckNextOwnerCopy"/> - <check_box label="Transferieren" name="CheckNextOwnerTransfer" tool_tip="Nächster Eigentümer kann dieses Objekt weitergeben oder -verkaufen"/> + <check_box label="Übertragen" name="CheckNextOwnerTransfer" tool_tip="Nächster Eigentümer kann dieses Objekt weitergeben oder -verkaufen"/> </panel> <check_box label="Zum Verkauf" name="CheckPurchase"/> <combo_box name="combobox sale copy"> diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index 91aad12e72..bf7d2ef3b3 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -196,6 +196,7 @@ <string name="TooltipMustSingleDrop"> Sie können nur ein einzelnes Objekt hierher ziehen </string> + <string name="TooltipPrice" value="[AMOUNT] L$"/> <string name="TooltipHttpUrl"> Anklicken, um Webseite anzuzeigen </string> @@ -248,7 +249,6 @@ Anklicken, um Befehl secondlife:// auszuführen </string> <string name="CurrentURL" value=" CurrentURL: [CurrentURL]"/> - <string name="TooltipPrice" value="[AMOUNT]L$: "/> <string name="SLurlLabelTeleport"> Teleportieren nach </string> @@ -663,6 +663,9 @@ <string name="worldmap_offline"> Offline </string> + <string name="worldmap_item_tooltip_format"> + [PRICE] L$ für [AREA] m² + </string> <string name="worldmap_results_none_found"> Nicht gefunden. </string> @@ -906,12 +909,57 @@ <string name="invalid_not_worn"> ungültig </string> + <string name="create_new_shape"> + Neue Form/Gestalt erstellen + </string> + <string name="create_new_skin"> + Neue Haut erstellen + </string> + <string name="create_new_hair"> + Neue Haare erstellen + </string> + <string name="create_new_eyes"> + Neue Augen erstellen + </string> + <string name="create_new_shirt"> + Neues Hemd erstellen + </string> + <string name="create_new_pants"> + Neue Hose erstellen + </string> + <string name="create_new_shoes"> + Neue Schuhe erstellen + </string> + <string name="create_new_socks"> + Neue Socken erstellen + </string> + <string name="create_new_jacket"> + Neue Jacke erstellen + </string> + <string name="create_new_gloves"> + Neue Handschuhe erstellen + </string> + <string name="create_new_undershirt"> + Neues Unterhemd erstellen + </string> + <string name="create_new_underpants"> + Neue Unterhose erstellen + </string> + <string name="create_new_skirt"> + Neuer Rock erstellen + </string> + <string name="create_new_alpha"> + Neue Alpha erstellen + </string> + <string name="create_new_tattoo"> + Neue Tätowierung erstellen + </string> + <string name="create_new_invalid"> + ungültig + </string> <string name="NewWearable"> Neue/r/s [WEARABLE_ITEM] </string> - <string name="CreateNewWearable"> - [WEARABLE_TYPE] erstellen - </string> <string name="next"> Weiter </string> @@ -1016,6 +1064,7 @@ <string name="AnimFlagStop" value=" Animation stoppen:"/> <string name="AnimFlagStart" value=" Animation starten:"/> <string name="Wave" value=" Winken"/> + <string name="GestureActionNone" value="Keine"/> <string name="HelloAvatar" value=" Hallo Avatar!"/> <string name="ViewAllGestures" value=" Alle anzeigen >>"/> <string name="GetMoreGestures" value="Mehr >>"/> @@ -1101,6 +1150,9 @@ <string name="InvFolder Current Outfit"> Aktuelles Outfit </string> + <string name="InvFolder Initial Outfits"> + Ursprüngliche Outfits + </string> <string name="InvFolder My Outfits"> Meine Outfits </string> @@ -1420,6 +1472,7 @@ <string name="SummaryForTheWeek" value="Zusammenfassung für diese Woche, beginnend am "/> <string name="NextStipendDay" value=". Der nächste Stipendium-Tag ist "/> <string name="GroupIndividualShare" value=" Gruppenanteil Einzelanteil"/> + <string name="GroupColumn" value="Gruppe"/> <string name="Balance"> Kontostand </string> @@ -1640,7 +1693,7 @@ Der Einwohner/Die Einwohnerin ist „beschäftigt”, d.h. er/sie möchte im Moment nicht gestört werden. Ihre Nachricht wird dem Einwohner/der Einwohnerin als IM angezeigt, und kann später beantwortet werden. </string> <string name="NoOutfits"> - Sie haben noch Outfits. Versuchen Sie es mit der [secondlife:///app/search/all Suche]. + Sie haben noch keine Outfits. Versuchen Sie es mit der [secondlife:///app/search/all Suche]. </string> <string name="NoOutfitsTabsMatched"> Sie haben nicht das Richtige gefunden? Versuchen Sie es mit der [secondlife:///app/search/all/[SEARCH_TERM] Suche]. @@ -3634,6 +3687,9 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_ <string name="group_role_owners"> Eigentümer </string> + <string name="group_member_status_online"> + Online + </string> <string name="uploading_abuse_report"> Bericht wird hochgeladen... @@ -3687,9 +3743,15 @@ Missbrauchsbericht <string name="Invalid Wearable"> Ungültiges Objekt </string> + <string name="New Gesture"> + Neue Geste + </string> <string name="New Script"> Neues Skript </string> + <string name="New Note"> + Neue Notiz + </string> <string name="New Folder"> Neuer Ordner </string> @@ -3747,6 +3809,15 @@ Missbrauchsbericht <string name="Male - Wow"> Männlich - Wow </string> + <string name="Female - Chuckle"> + Weiblich - Kichern + </string> + <string name="Female - Cry"> + Weiblich - Weinen + </string> + <string name="Female - Embarrassed"> + Weiblich - Verlegen + </string> <string name="Female - Excuse me"> Weiblich - Räuspern </string> @@ -3765,9 +3836,21 @@ Missbrauchsbericht <string name="Female - Hey"> Weiblich - Hey </string> + <string name="Female - Hey baby"> + Weiblich - Hey Süße(r) + </string> <string name="Female - Laugh"> Weiblich - Lachen </string> + <string name="Female - Looking good"> + Weiblich - Looking good + </string> + <string name="Female - Over here"> + Weiblich - Over here + </string> + <string name="Female - Please"> + Weiblich - Please + </string> <string name="Female - Repulsed"> Weiblich - Angewidert </string> @@ -3817,4 +3900,46 @@ Missbrauchsbericht <string name="dateTimePM"> Uhr </string> + <string name="LocalEstimateUSD"> + [AMOUNT] US$ + </string> + <string name="Membership"> + Mitgliedschaft + </string> + <string name="Roles"> + Rollen + </string> + <string name="Group Identity"> + Gruppenidentität + </string> + <string name="Parcel Management"> + Parzellenverwaltung + </string> + <string name="Parcel Identity"> + Parzellenidentität + </string> + <string name="Parcel Settings"> + Parzelleneinstellungen + </string> + <string name="Parcel Powers"> + Parzellenfähigkeiten + </string> + <string name="Parcel Access"> + Parzellenzugang + </string> + <string name="Parcel Content"> + Parzelleninhalt + </string> + <string name="Object Management"> + Objektmanagement + </string> + <string name="Accounting"> + Kontoführung + </string> + <string name="Notices"> + Mitteilungen + </string> + <string name="Chat"> + Chat + </string> </strings> diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml index b9bc45a10b..cae6146880 100644 --- a/indra/newview/skins/default/xui/en/floater_aaa.xml +++ b/indra/newview/skins/default/xui/en/floater_aaa.xml @@ -21,7 +21,7 @@ <string name="test_the_vlt">This string CHANGE2 is extracted.</string> <string name="testing_eli">Just a test. changes.</string> <chat_history - allow_html="true" + parse_urls="true" bg_readonly_color="ChatHistoryBgColor" bg_writeable_color="ChatHistoryBgColor" border_visible="false" diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml index 860cff6664..0676243598 100644 --- a/indra/newview/skins/default/xui/en/floater_about.xml +++ b/indra/newview/skins/default/xui/en/floater_about.xml @@ -73,7 +73,7 @@ Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number help_topic="about_support_tab" name="support_panel"> <text_editor - allow_html="true" + parse_urls="true" follows="top|left" font="SansSerif" height="343" 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 68e36ff0b3..99bf3e6bc1 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -1472,8 +1472,10 @@ Only large parcels can be listed in search. left="14" name="MatureCheck" top="177" + label_text.valign="center" + label_text.v_pad="-5" tool_tip=" " - width="107" /> + width="200" /> <text type="string" length="1" diff --git a/indra/newview/skins/default/xui/en/floater_buy_land.xml b/indra/newview/skins/default/xui/en/floater_buy_land.xml index 0ad4fbc967..c88de878f4 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_land.xml @@ -529,13 +529,14 @@ sold with objects length="1" follows="top|left" font="SansSerifBig" - height="16" + height="32" layout="topleft" left="72" name="account_action" right="438" top="200" - width="218"> + width="218" + wrap="true"> Upgrade you to premium membership. </text> <text @@ -577,19 +578,21 @@ sold with objects layout="topleft" left="0" name="step_2" + top_pad="-10" width="64" /> <text type="string" length="1" follows="top|left" font="SansSerifBig" - height="16" + height="32" layout="topleft" left="72" name="land_use_action" right="438" top="284" - width="218"> + width="218" + wrap="true"> Increase your monthly land use fees to US$ 40/month. </text> <text @@ -620,14 +623,15 @@ This parcel is 512 m² of land. <text type="string" length="1" - bottom_delta="-38" + bottom_delta="-22" follows="top|left" font="SansSerifBig" - height="16" + height="32" layout="topleft" left="72" name="purchase_action" - right="438"> + right="438" + wrap="true"> Pay Joe Resident L$ 4000 for the land </text> <text @@ -665,7 +669,7 @@ This parcel is 512 m² of land. layout="topleft" left="170" name="currency_amt" - top="408" + top="424" width="80"> 1000 </line_editor> @@ -681,7 +685,7 @@ This parcel is 512 m² of land. layout="topleft" left="260" name="currency_est" - top="409" + top="425" width="178"> for approx. [LOCAL_AMOUNT] </text> @@ -713,7 +717,7 @@ This parcel is 512 m² of land. layout="topleft" left="70" name="buy_btn" - top="448" + top="460" width="100" /> <button follows="bottom|right" diff --git a/indra/newview/skins/default/xui/en/floater_event.xml b/indra/newview/skins/default/xui/en/floater_event.xml index 887cedc33f..9864083442 100644 --- a/indra/newview/skins/default/xui/en/floater_event.xml +++ b/indra/newview/skins/default/xui/en/floater_event.xml @@ -244,7 +244,6 @@ layout="topleft" left="6" name="event_desc" - textbox.label="More" width="322"> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</expandable_text> </layout_panel> diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index c9b013099b..6c1214f152 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -67,7 +67,7 @@ height="150" name="chat_history" parse_highlights="true" - allow_html="true" + parse_urls="true" left="1" width="249"> </chat_history> diff --git a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml index ec097a8e87..3b26c2ab59 100644 --- a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml +++ b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml @@ -25,7 +25,7 @@ single_instance="true" width="320"> <chat_history - allow_html="true" + parse_urls="true" bg_readonly_color="ChatHistoryBgColor" bg_writeable_color="ChatHistoryBgColor" follows="all" diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml index 6281bc5272..1903401988 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml @@ -96,19 +96,19 @@ name="replace_text" tool_tip="Replace the trigger word(s) with these words. For example, trigger 'hello' replace with 'howdy' will turn the chat 'I wanted to say hello' into 'I wanted to say howdy' as well as playing the gesture!" top_pad="10" - width="200"> + width="210"> Replace with: </text> <line_editor follows="left|top" height="20" layout="topleft" - left_delta="89" + left_delta="99" max_length="31" name="replace_editor" tool_tip="Replace the trigger word(s) with these words. For example, trigger 'hello' replace with 'howdy' will turn the chat 'I wanted to say hello' into 'I wanted to say howdy' as well as playing the gesture" top_delta="-4" - width="175" /> + width="165" /> <text type="string" length="1" @@ -120,25 +120,25 @@ font.style="BOLD" name="key_label" top_pad="10" - width="100"> + width="150"> Shortcut Key: </text> <combo_box height="20" label="None" layout="topleft" - left_delta="89" + left_delta="154" name="modifier_combo" top_delta="-4" - width="75" /> + width="55" /> <combo_box height="20" label="None" layout="topleft" - left_pad="10" + left_pad="4" name="key_combo" top_delta="0" - width="75" /> + width="50" /> <text type="string" length="1" @@ -162,12 +162,16 @@ top_delta="15" width="180"> <scroll_list.rows + name="action_animation" value="Animation" /> <scroll_list.rows + name="action_sound" value="Sound" /> <scroll_list.rows + name="action_chat" value="Chat" /> <scroll_list.rows + name="action_wait" value="Wait" /> </scroll_list> <button @@ -306,7 +310,7 @@ left_delta="0" name="wait_time_check" top_delta="20" - width="100" /> + width="115" /> <line_editor follows="top|left" height="20" diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml index 0e8eef2a21..e5a5fab9b9 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml @@ -71,7 +71,7 @@ left="4" max_length="65536" name="Notecard Editor" - allow_html="false" + parse_urls="false" tab_group="1" top="46" width="392" diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml index 49b3b58113..354f1de85e 100644 --- a/indra/newview/skins/default/xui/en/floater_search.xml +++ b/indra/newview/skins/default/xui/en/floater_search.xml @@ -22,7 +22,7 @@ Done </floater.string> <layout_stack - bottom="595" + height="580" follows="left|right|top|bottom" layout="topleft" left="10" @@ -30,6 +30,7 @@ top="20" width="630"> <layout_panel + height="570" layout="topleft" left_delta="0" top_delta="0" @@ -37,13 +38,12 @@ user_resize="false" width="630"> <web_browser - bottom="-10" follows="left|right|top|bottom" layout="topleft" left="0" name="browser" top="0" - height="555" + height="540" width="630" /> <text follows="bottom|left" @@ -51,7 +51,7 @@ layout="topleft" left_delta="0" name="status_text" - top_pad="7" + top_pad="10" width="150" /> <text visible="false" diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index bbb90eba6e..71a46b22e4 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -2481,6 +2481,7 @@ even though the user gets a free copy. layout="topleft" left_pad="15" name="color trans" + text_readonly_color="LabelDisabledColor" top="6" width="110"> Transparency % @@ -2505,6 +2506,7 @@ even though the user gets a free copy. layout="topleft" left_delta="0" name="glow label" + text_readonly_color="LabelDisabledColor" top_pad="8" width="80"> Glow @@ -2535,6 +2537,7 @@ even though the user gets a free copy. layout="topleft" left="10" name="tex gen" + text_readonly_color="LabelDisabledColor" top_pad="5" width="90"> Mapping @@ -2563,6 +2566,7 @@ even though the user gets a free copy. layout="topleft" name="label shininess" left_pad="4" + text_readonly_color="LabelDisabledColor" top_pad="-36" width="90"> Shininess @@ -2599,6 +2603,7 @@ even though the user gets a free copy. layout="topleft" left_pad="4" name="label bumpiness" + text_readonly_color="LabelDisabledColor" top_pad="-36" width="90"> Bumpiness @@ -2724,7 +2729,8 @@ even though the user gets a free copy. height="10" layout="topleft" left="10" - name="tex scale" + name="rpt" + text_readonly_color="LabelDisabledColor" top_pad="4" width="200"> Repeats / Face @@ -2813,6 +2819,7 @@ even though the user gets a free copy. layout="topleft" left="10" name="tex offset" + text_readonly_color="LabelDisabledColor" width="200"> Texture Offset </text> @@ -2896,9 +2903,9 @@ even though the user gets a free copy. follows="top|left" tool_tip="Edit this Media" height="12" - image_disabled="Icon_Gear_Foreground" - image_selected="Icon_Gear_Background" - image_unselected="Icon_Gear_Press" + image_disabled="Icon_Gear_Background" + image_selected="Icon_Gear_Press" + image_unselected="Icon_Gear_Foreground" layout="topleft" left_pad="10" name="edit_media" diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml index a59db1420f..20629018e2 100644 --- a/indra/newview/skins/default/xui/en/floater_world_map.xml +++ b/indra/newview/skins/default/xui/en/floater_world_map.xml @@ -395,7 +395,7 @@ <panel follows="right|top|bottom" - height="310" + height="330" top_pad="0" width="238" name="layout_panel_4"> @@ -534,7 +534,66 @@ <scroll_list.commit_callback function="WMap.SearchResult" /> </scroll_list> - <button + <text + type="string" + length="1" + follows="right|bottom" + halign="right" + height="16" + layout="topleft" + left="25" + name="events_label" + top_pad="16" + width="70"> + Location: + </text> + <spinner + control_name="Teleport_Coordinate_X" + decimal_digits="0" + follows="right|bottom" + height="23" + increment="1" + initial_value="128" + layout="topleft" + left_delta="74" + max_val="255" + min_val="0" + name="teleport_coordinate_x" + width="44" > + <spinner.commit_callback + function="WMap.Coordinates" /> + </spinner> + <spinner + control_name="Teleport_Coordinate_Y" + decimal_digits="0" + follows="right|bottom" + height="23" + increment="1" + initial_value="128" + layout="topleft" + left_delta="47" + max_val="255" + min_val="0" + name="teleport_coordinate_y" > + <spinner.commit_callback + function="WMap.Coordinates" /> + </spinner> + <spinner + control_name="Teleport_Coordinate_Z" + decimal_digits="0" + follows="right|bottom" + height="23" + increment="1" + initial_value="128" + layout="topleft" + left_delta="47" + max_val="255" + min_val="0" + name="teleport_coordinate_z"> + <spinner.commit_callback + function="WMap.Coordinates" /> + </spinner> + <button follows="right|bottom" height="23" image_unselected="PushButton_On" @@ -574,66 +633,6 @@ <button.commit_callback function="WMap.ShowTarget" /> </button> - -<!-- <text - type="string" - length="1" - follows="bottom|right" - halign="left" - height="16" - top_pad="4" - left="25" - layout="topleft" - name="land_sale_label" - width="250"> - Location: - </text> - <spinner - decimal_digits="0" - follows="bottom|right" - increment="1" - initial_value="128" - layout="topleft" - top_pad="0" - left="25" - max_val="255" - name="spin x" - tool_tip="X coordinate of location to show on map" - width="48"> - <spinner.commit_callback - function="WMap.CommitLocation" /> - </spinner> - <spinner - decimal_digits="0" - follows="bottom|right" - height="16" - increment="1" - initial_value="128" - layout="topleft" - left_pad="2" - max_val="255" - name="spin y" - tool_tip="Y coordinate of location to show on map" - top_delta="0" - width="48" > - <spinner.commit_callback - function="WMap.CommitLocation" /> - </spinner> - <spinner - decimal_digits="0" - follows="bottom|right" - increment="1" - initial_value="0" - layout="topleft" - left_pad="2" - max_val="4096" - name="spin z" - tool_tip="Z coordinate of location to show on map" - top_delta="0" - width="48"> - <spinner.commit_callback - function="WMap.CommitLocation" /> - </spinner>--> </panel> <panel follows="right|bottom" diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml index 8aeec46ba3..eb2e7ea788 100644 --- a/indra/newview/skins/default/xui/en/inspect_object.xml +++ b/indra/newview/skins/default/xui/en/inspect_object.xml @@ -26,7 +26,7 @@ Owner [OWNER] <string name="Touch">Touch</string> <string name="Sit">Sit</string> <text - allow_html="false" + parse_urls="false" follows="all" font="SansSerifLarge" height="30" diff --git a/indra/newview/skins/default/xui/en/language_settings.xml b/indra/newview/skins/default/xui/en/language_settings.xml index c523185034..c8a06fe401 100644 --- a/indra/newview/skins/default/xui/en/language_settings.xml +++ b/indra/newview/skins/default/xui/en/language_settings.xml @@ -23,6 +23,7 @@ datetimeToCodes["month"] = "%B"; // August datetimeToCodes["mthnum"] = "%m"; // 08 datetimeToCodes["day"] = "%d"; // 31 + datetimeToCodes["sday"] = "%-d"; // 9 datetimeToCodes["hour24"] = "%H"; // 14 datetimeToCodes["hour"] = "%H"; // 14 datetimeToCodes["hour12"] = "%I"; // 02 diff --git a/indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml new file mode 100644 index 0000000000..1925d3396f --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<menu + layout="topleft" + name="Add Wearable Gear Menu"> + <menu_item_check + label="Sort by Most Recent" + layout="topleft" + name="sort_by_most_recent"> + <on_check + function="AddWearable.Gear.Check" + parameter="by_most_recent" /> + <on_click + function="AddWearable.Gear.Sort" + parameter="by_most_recent" /> + </menu_item_check> + <menu_item_check + label="Sort by Name" + layout="topleft" + name="sort_by_name"> + <on_check + function="AddWearable.Gear.Check" + parameter="by_name" /> + <on_click + function="AddWearable.Gear.Sort" + parameter="by_name" /> + </menu_item_check> + <menu_item_check + label="Sort by Type" + layout="topleft" + name="sort_by_type"> + <on_check + function="AddWearable.Gear.Check" + parameter="by_type" /> + <on_click + function="AddWearable.Gear.Sort" + parameter="by_type" /> + <on_visible + function="AddWearable.Gear.Visible" + parameter="by_type" /> + </menu_item_check> +</menu> diff --git a/indra/newview/skins/default/xui/en/menu_attachment_self.xml b/indra/newview/skins/default/xui/en/menu_attachment_self.xml index 7239b13466..e2348375d5 100644 --- a/indra/newview/skins/default/xui/en/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/en/menu_attachment_self.xml @@ -11,8 +11,7 @@ function="Object.Touch" /> <menu_item_call.on_enable function="Object.EnableTouch" - name="EnableTouch" - parameter="Touch" /> + name="EnableTouch"/> </menu_item_call> <!--menu_item_call label="Stand Up" diff --git a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml index 22df02cd7e..76f68c6d4b 100644 --- a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml @@ -22,7 +22,7 @@ <menu_item_call.on_click function="InspectObject.Sit"/> <menu_item_call.on_visible - function="Object.EnableSit" /> + function="Object.EnableSit"/> </menu_item_call> <menu_item_call label="Pay" @@ -89,6 +89,15 @@ function="Object.EnableWear" /> </menu_item_call> <menu_item_call + label="Add" + layout="topleft" + name="add"> + <menu_item_call.on_click + function="Object.AttachAddToAvatar" /> + <menu_item_call.on_visible + function="Object.EnableWear" /> + </menu_item_call> + <menu_item_call label="Report" layout="topleft" name="report"> diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml index 397e61c97a..31f70d99ca 100644 --- a/indra/newview/skins/default/xui/en/menu_object.xml +++ b/indra/newview/skins/default/xui/en/menu_object.xml @@ -45,10 +45,7 @@ <menu_item_call.on_click function="Object.SitOrStand" /> <menu_item_call.on_enable - function="Object.SitVisible" /> - <menu_item_call.on_enable - function="Object.EnableSitOrStand" - name="EnableSitOrStand" /> + function="Object.EnableSit" /> </menu_item_call> <menu_item_call enabled="false" @@ -57,10 +54,7 @@ <menu_item_call.on_click function="Object.SitOrStand" /> <menu_item_call.on_enable - function="Object.StandUpVisible" /> - <menu_item_call.on_enable - function="Object.EnableSitOrStand" - name="EnableSitOrStand" /> + function="Object.EnableStandUp" /> </menu_item_call> <menu_item_call label="Object Profile" @@ -89,6 +83,15 @@ <menu_item_call.on_enable function="Object.EnableWear" /> </menu_item_call> + <menu_item_call + enabled="false" + label="Add" + name="Add"> + <menu_item_call.on_click + function="Object.AttachAddToAvatar" /> + <menu_item_call.on_enable + function="Object.EnableWear" /> + </menu_item_call> <context_menu label="Attach ▶" name="Object Attach" /> diff --git a/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml index 3e38503e43..77cc3910fd 100644 --- a/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml +++ b/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml @@ -94,6 +94,9 @@ <on_enable function="Places.LandmarksGear.Enable" parameter="expand" /> + <on_visible + function="Places.LandmarksGear.Enable" + parameter="expand" /> </menu_item_call> <menu_item_call label="Collapse" @@ -105,6 +108,9 @@ <on_enable function="Places.LandmarksGear.Enable" parameter="collapse" /> + <on_visible + function="Places.LandmarksGear.Enable" + parameter="collapse" /> </menu_item_call> <menu_item_call label="Expand all folders" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 5a9b5356fd..9185113868 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -963,17 +963,6 @@ name="Advanced" tear_off="true" visible="false"> - <menu_item_check - label="Show Advanced Menu" - name="Show Advanced Menu" - shortcut="control|alt|D"> - <on_check - function="CheckControl" - parameter="UseDebugMenus" /> - <on_click - function="ToggleControl" - parameter="UseDebugMenus" /> - </menu_item_check> <menu_item_call label="Stop Animating Me" name="Stop Animating My Avatar"> @@ -1442,17 +1431,7 @@ function="Advanced.ToggleFeature" parameter="flexible" /> </menu_item_check> - </menu> - <menu_item_check - label="Run Multiple Threads" - name="Run Multiple Threads"> - <menu_item_check.on_check - function="CheckControl" - parameter="RunMultipleThreads" /> - <menu_item_check.on_click - function="ToggleControl" - parameter="RunMultipleThreads" /> - </menu_item_check> + </menu> <menu_item_check label="Use Plugin Read Thread" name="Use Plugin Read Thread"> @@ -1693,7 +1672,24 @@ <menu_item_call.on_click function="View.ZoomOut" /> </menu_item_call> - </menu> + <menu_item_separator + visible="false"/> + <!-- Made invisible to avoid a dissonance: menu item toggle menu where it is located. EXT-8069. + Can't be removed to keep sortcut workable. + --> + <menu_item_check + label="Show Advanced Menu" + name="Show Advanced Menu" + shortcut="control|alt|D" + visible="false"> + <on_check + function="CheckControl" + parameter="UseDebugMenus" /> + <on_click + function="ToggleControl" + parameter="UseDebugMenus" /> + </menu_item_check> + </menu> <!--Shortcuts--> <menu_item_separator/> @@ -3442,4 +3438,4 @@ </menu> </menu> </menu> -</menu_bar>
\ No newline at end of file +</menu_bar> diff --git a/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml index c3adbb7904..5feac53c33 100644 --- a/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml @@ -13,7 +13,7 @@ layout="topleft" name="wear_wear"> <on_click - function="Wearable.Add" /> + function="Wearable.Wear" /> </menu_item_call> <menu_item_call label="Add" @@ -59,7 +59,7 @@ function="Wearable.Edit" /> </menu_item_call> <menu_item_call - label="Object Profile" + label="Item Profile" layout="topleft" name="object_profile"> <on_click diff --git a/indra/newview/skins/default/xui/en/menu_wearing_tab.xml b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml index 85505f9972..2d54e69601 100644 --- a/indra/newview/skins/default/xui/en/menu_wearing_tab.xml +++ b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml @@ -3,6 +3,24 @@ layout="topleft" name="Wearing"> <menu_item_call + label="Take Off" + layout="topleft" + name="take_off"> + <on_click + function="Wearing.TakeOff" /> + </menu_item_call> + <menu_item_call + label="Detach" + layout="topleft" + name="detach"> + <on_click + function="Wearing.Detach" + parameter="detach"/> + </menu_item_call> + <menu_item_separator + layout="topleft" + name="edit_outfit_separator" /> + <menu_item_call label="Edit Outfit" layout="topleft" name="edit"> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 844ad41332..203af1756b 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -4023,6 +4023,19 @@ Are you sure you want to quit? <notification icon="alertmodal.tga" + name="DeleteItems" + type="alertmodal"> + [QUESTION] + <usetemplate + ignoretext="Confirm before deleting items" + name="okcancelignore" + notext="Cancel" + yestext="OK"/> + <unique/> + </notification> + + <notification + icon="alertmodal.tga" name="HelpReportAbuseEmailLL" type="alert"> Use this tool to report violations of the [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards]. @@ -6359,13 +6372,21 @@ Avatar '[NAME]' left as fully loaded. <notification icon="notifytip.tga" - name="AvatarRezSelfBakeNotification" + name="AvatarRezSelfBakedTextureUploadNotification" type="notifytip"> ( [EXISTENCE] seconds alive ) You uploaded a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME] seconds. </notification> <notification + icon="notifytip.tga" + name="AvatarRezSelfBakedTextureUpdateNotification" + type="notifytip"> +( [EXISTENCE] seconds alive ) +You locally updated a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME] seconds. + </notification> + + <notification icon="alertmodal.tga" name="ConfirmLeaveCall" type="alert"> @@ -6420,11 +6441,14 @@ If you continue to have problems, please visit the [SUPPORT_SITE]. - Your system memory does not meet the minimum requirements. </global> -<!-- this is alert string from server. the name needs to match entire the server string, and needs to be changed +<!-- these are alert strings from server. the name needs to match entire the server string, and needs to be changed whenever the server string changes --> <global name="You can only set your 'Home Location' on your land or at a mainland Infohub."> If you own a piece of land, you can make it your home location. Otherwise, you can look at the Map and find places marked "Infohub". </global> + <global name="You died and have been teleported to your home location"> +You died and have been teleported to your home location. + </global> </notifications> diff --git a/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml index 06bd1e9ff4..20ff492c0f 100644 --- a/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml +++ b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml @@ -9,6 +9,7 @@ layout="topleft" name="Mockup Tab" selection_enabled="true" + tab_stop="false" title="Mockup Tab" translate="false" width="0"> diff --git a/indra/newview/skins/default/xui/en/panel_bars.xml b/indra/newview/skins/default/xui/en/panel_bars.xml deleted file mode 100644 index 96722ce278..0000000000 --- a/indra/newview/skins/default/xui/en/panel_bars.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel - follows="left|right|top|bottom" - height="768" - layout="topleft" - left="0" - mouse_opaque="false" - name="screen" - width="1024"> - <layout_stack name="menu_stack" orientation="vertical" height="768" border_size="0"> - <panel auto_resize="false" width="1024" name="status_bar" filename="panel_status_bar.xml"/> - <panel auto_resize="false" width="1024" height="60" name="navigation bar" filename="panel_navigation_bar.xml"/> - <layout_stack name="hud_stack" orientation="horizontal" auto_resize="true" width="1024" height="500" follows="all"> - <panel auto_resize="true" name="floater_view" height="500"/> - <panel auto_resize="false" filename="panel_side_tray.xml" height="500" width="333"/> - </layout_stack> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml index 4f989a6f6f..216a265164 100644 --- a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml @@ -41,7 +41,7 @@ height="16" layout="topleft" left_pad="5" - allow_html="false" + parse_urls="false" use_ellipses="true" name="item_name" text_color="white" diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml index 9124ad528d..17e8d4d2df 100644 --- a/indra/newview/skins/default/xui/en/panel_chat_header.xml +++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml @@ -21,7 +21,7 @@ top="3" width="18" /> <text - allow_html="false" + parse_urls="false" allow_scroll="false" v_pad = "7" read_only = "true" @@ -38,16 +38,17 @@ use_ellipses="true" valign="bottom" value="Ericag Vader" /> - <text - font="SansSerifSmall" - follows="right" - halign="right" - height="13" - layout="topleft" - left_pad="5" - name="time_box" - right="-5" - top="8" - value="23:30" - width="110" /> + <text + allow_scroll="false" + font="SansSerifSmall" + follows="right" + halign="right" + height="13" + layout="topleft" + left_pad="5" + name="time_box" + right="-5" + top="8" + value="23:30" + width="110" /> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_classified.xml b/indra/newview/skins/default/xui/en/panel_classified.xml index c8293d3663..e96dbd527c 100644 --- a/indra/newview/skins/default/xui/en/panel_classified.xml +++ b/indra/newview/skins/default/xui/en/panel_classified.xml @@ -25,6 +25,7 @@ [mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt] </panel.string> <texture_picker + fallback_image="default_land_picture.j2c" follows="left|top" height="300" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml index b7fd9773f2..268cb4e5f9 100644 --- a/indra/newview/skins/default/xui/en/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml @@ -93,6 +93,7 @@ width="275" > <texture_picker + fallback_image="default_land_picture.j2c" enabled="false" follows="left|top|right" height="197" @@ -201,7 +202,7 @@ value="Category:" width="140" /> <text_editor - allow_html="true" + parse_urls="true" allow_scroll="false" bg_visible="false" follows="left|top|right" @@ -370,7 +371,7 @@ value="Description:" width="250" /> <text_editor - allow_html="true" + parse_urls="true" allow_scroll="true" bg_visible="false" follows="all" diff --git a/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml b/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml index af3315ebfe..27c653bc35 100644 --- a/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml @@ -33,7 +33,7 @@ <texture_picker allow_no_texture="true" border_enabled="true" - default_image_name="TabIcon_Places_Large" + fallback_image="default_land_picture.j2c" enabled="false" follows="left|top" height="80" @@ -65,7 +65,6 @@ left="103" name="description" textbox.max_length="1024" - textbox.label="More" textbox.show_context_menu="false" top_pad="0" width="178" diff --git a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml index 93d7720c57..cc0541e65c 100644 --- a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml @@ -53,7 +53,7 @@ height="16" layout="topleft" left_pad="5" - allow_html="false" + parse_urls="false" use_ellipses="true" name="item_name" text_color="white" diff --git a/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml index 75b5fd1532..de2ff0afc9 100644 --- a/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml @@ -53,7 +53,7 @@ height="16" layout="topleft" left_pad="5" - allow_html="false" + parse_urls="false" use_ellipses="true" name="item_name" text_color="white" diff --git a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml index a5dd34bd22..df459b4083 100644 --- a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml @@ -42,7 +42,7 @@ height="16" layout="topleft" left_pad="5" - allow_html="false" + parse_urls="false" use_ellipses="true" name="item_name" text_color="LtGray_50" diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml index 9408f193fd..a5c74b08e7 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_classified.xml @@ -78,6 +78,7 @@ top="10" width="272"> <texture_picker + fallback_image="default_land_picture.j2c" follows="left|top|right" height="197" width="272" diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml index dc83b334b5..f50e182313 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml @@ -63,6 +63,7 @@ left="0" width="285"> <texture_picker + fallback_image="default_land_picture.j2c" follows="left|top|right" height="197" width="272" diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml index 484617df34..9fb777e0e7 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml @@ -242,6 +242,7 @@ max_length="63" name="description" prevalidate_callback="ascii" + select_on_focus="true" text_color="black" top_pad="3" width="290" /> diff --git a/indra/newview/skins/default/xui/en/panel_group_list_item.xml b/indra/newview/skins/default/xui/en/panel_group_list_item.xml index b674b39d9b..ab34cbf20e 100644 --- a/indra/newview/skins/default/xui/en/panel_group_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_group_list_item.xml @@ -36,7 +36,7 @@ top="2" width="20" /> <text - allow_html="false" + parse_urls="false" follows="left|right" font="SansSerifSmall" height="15" diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml index 6523b0d491..41f2b28004 100644 --- a/indra/newview/skins/default/xui/en/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml @@ -76,19 +76,22 @@ Maximum 200 per group daily follows="top|left" height="23" image_overlay="AddItem_Off" + image_overlay_alignment="left" + imgoverlay_label_space="-10" + label="New Notice" layout="topleft" left="5" name="create_new_notice" tool_tip="Create a new notice" - top_delta="-3" - width="23" /> + top_delta="0" + width="93" /> <button follows="top|left" height="23" image_overlay="Refresh_Off" layout="topleft" name="refresh_notices" - left_pad="230" + left="260" tool_tip="Refresh list of notices" top_delta="0" width="23" /> @@ -113,7 +116,7 @@ Maximum 200 per group daily mouse_opaque="false" name="lbl" text_color="EmphasisColor" - top="0" + top="5" width="200"> Create a Notice </text> @@ -270,7 +273,7 @@ Maximum 200 per group daily mouse_opaque="false" name="lbl" text_color="EmphasisColor" - top_pad="0" + top_pad="5" width="265"> Archived Notice </text> diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml index 65b2e81d50..6f271a757c 100644 --- a/indra/newview/skins/default/xui/en/panel_group_notify.xml +++ b/indra/newview/skins/default/xui/en/panel_group_notify.xml @@ -50,7 +50,7 @@ width="230" /> </panel> <text_editor - allow_html="true" + parse_urls="true" enabled="true" follows="all" height="0" diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml index 0eb5c47f85..4af4774304 100644 --- a/indra/newview/skins/default/xui/en/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml @@ -50,6 +50,10 @@ Select multiple Members by holding the Ctrl key and clicking on their names. </panel.string> <panel.string + name="donation_area"> + [AREA] m² + </panel.string> + <panel.string name="power_folder_icon" translate="false"> Inv_FolderClosed </panel.string> @@ -99,7 +103,7 @@ clicking on their names. height="23" follows="top|left" label="Invite" - left="0" + left="5" name="member_invite" width="100" /> <button diff --git a/indra/newview/skins/default/xui/en/panel_inventory_item.xml b/indra/newview/skins/default/xui/en/panel_inventory_item.xml index f1b7b92ece..2e38835810 100644 --- a/indra/newview/skins/default/xui/en/panel_inventory_item.xml +++ b/indra/newview/skins/default/xui/en/panel_inventory_item.xml @@ -41,7 +41,7 @@ height="20" layout="topleft" left_pad="5" - allow_html="false" + parse_urls="false" use_ellipses="true" name="item_name" text_color="white" diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml index a0a1e2963a..c5d6aced7a 100644 --- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml +++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml @@ -139,7 +139,6 @@ layout="topleft" left="10" name="description" - textbox.label="More" top_pad="10" value="Du waltz die spritz" width="280" /> @@ -236,7 +235,7 @@ value="Title:" width="290" /> <text - allow_html="false" + parse_urls="false" follows="left|top" height="22" layout="topleft" @@ -276,7 +275,7 @@ name="notes_editor" read_only="true" text_readonly_color="white" - text_type="ascii" + text_type="ascii_with_newline" top_pad="5" width="290" wrap="true" /> diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index 185e458a85..0499873fb0 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -156,6 +156,7 @@ width="135" visible="false" /> </layout_panel> <layout_panel +tab_stop="false" follows="right|bottom" name="links" width="200" diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml index c5f44cd049..d3a58fed58 100644 --- a/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml +++ b/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml @@ -16,7 +16,8 @@ follows="top|left" height="15" left="10" - name="controls_label"> + name="controls_label" + text_readonly_color="LabelDisabledColor"> Controls: </text> <combo_box @@ -46,7 +47,8 @@ follows="top|left" height="15" left="10" - name="owner_label"> + name="owner_label" + text_readonly_color="LabelDisabledColor"> Owner </text> @@ -83,8 +85,9 @@ enabled="false" follows="top|left" height="15" - left="10" - name="group_label"> + left="10" + name="group_label" + text_readonly_color="LabelDisabledColor"> Group: </text> @@ -95,6 +98,7 @@ font="SansSerif" height="20" left="60" name="perms_group_name" + text_readonly_color="LabelDisabledColor" value ="" width="200" /> @@ -132,7 +136,8 @@ follows="top|left" height="15" left="10" - name="anyone_label"> + name="anyone_label" + text_readonly_color="LabelDisabledColor"> Anyone </text> diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml index 1083f4d467..4629bb9cfe 100644 --- a/indra/newview/skins/default/xui/en/panel_my_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml @@ -118,7 +118,6 @@ layout="topleft" left="107" textbox.max_length="512" - textbox.label="More" textbox.show_context_menu="true" name="sl_description_edit" top_pad="-3" @@ -141,6 +140,7 @@ allow_no_texture="true" default_image_name="None" enabled="false" + fallback_image="Generic_Person_Large" follows="top|left" height="124" layout="topleft" @@ -174,7 +174,6 @@ layout="topleft" left="107" textbox.max_length="512" - textbox.label="More" textbox.show_context_menu="true" name="fl_description_edit" top_pad="-3" @@ -316,7 +315,6 @@ name="sl_groups" top_pad="0" translate="false" - textbox.label="More" textbox.show_context_menu="true" width="298" expanded_bg_visible="true" diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml index 2c9d7e4b6a..082d51ed3c 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -97,6 +97,8 @@ name="location_combo" top_delta="0" width="266"> + <combo_list + mouse_wheel_opaque="true"/> <!-- *TODO: Delete. Let the location_input use the correct art sizes. <location_input.add_landmark_button height="18" diff --git a/indra/newview/skins/default/xui/en/panel_nearby_media.xml b/indra/newview/skins/default/xui/en/panel_nearby_media.xml index 584ca8b3b5..8c13ced8f3 100644 --- a/indra/newview/skins/default/xui/en/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/en/panel_nearby_media.xml @@ -187,6 +187,7 @@ bevel_style="in" background_visible="false" follows="left|right|bottom" + name="media_controls_panel" top_pad="5" height="30" left="10" diff --git a/indra/newview/skins/default/xui/en/panel_notification.xml b/indra/newview/skins/default/xui/en/panel_notification.xml index 34738745eb..59ead84127 100644 --- a/indra/newview/skins/default/xui/en/panel_notification.xml +++ b/indra/newview/skins/default/xui/en/panel_notification.xml @@ -78,7 +78,7 @@ width="285" wrap="true" parse_highlights="true" - allow_html="true"/> + parse_urls="true"/> </panel> <panel background_visible="false" diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml index 1d01bcb8a5..95c8cb301d 100644 --- a/indra/newview/skins/default/xui/en/panel_pick_info.xml +++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml @@ -55,6 +55,7 @@ left="0" width="285"> <texture_picker + fallback_image="default_land_picture.j2c" enabled="false" follows="left|top|right" height="197" @@ -100,7 +101,7 @@ follows="all" height="100" width="280" - allow_html="true" + parse_urls="true" hide_scrollbar="false" layout="topleft" left="10" diff --git a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml index 41651edaa0..de147908d8 100644 --- a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml @@ -33,7 +33,7 @@ <texture_picker allow_no_texture="true" border_enabled="true" - default_image_name="TabIcon_Places_Large" + fallback_image="default_land_picture.j2c" enabled="false" follows="left|top" height="80" @@ -65,7 +65,6 @@ left="103" name="picture_descr" textbox.max_length="1024" - textbox.label="More" textbox.show_context_menu="false" top_pad="0" width="178" diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index 35e8075896..c6e93af50a 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -264,7 +264,7 @@ </layout_panel> </layout_stack> <text - allow_html="false" + parse_urls="false" follows="left|top|right" font="SansSerifLarge" height="14" @@ -277,7 +277,7 @@ value="SampleRegion" width="290" /> <text - allow_html="false" + parse_urls="false" follows="left|top|right" height="14" layout="topleft" @@ -293,7 +293,6 @@ layout="topleft" left="5" name="description" - textbox.label="More" top_pad="10" value="Du waltz die spritz" width="300" /> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml index 65c78ad333..aa760edad3 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml @@ -408,6 +408,14 @@ name="default_text"> Default </panel.string> + <panel.string + name="default system device"> + Default system device + </panel.string> + <panel.string + name="no device"> + No device + </panel.string> <icon height="18" image_name="Microphone_On" diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index fc33836c79..e41b80baf2 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -108,7 +108,6 @@ layout="topleft" left="107" textbox.max_length="512" - textbox.label="More" textbox.show_context_menu="true" name="sl_description_edit" top_pad="-3" @@ -155,7 +154,6 @@ layout="topleft" left="107" textbox.max_length="512" - textbox.label="More" textbox.show_context_menu="true" name="fl_description_edit" top_pad="-3" @@ -295,7 +293,6 @@ left="7" name="sl_groups" textbox.max_length="512" - textbox.label="More" textbox.show_context_menu="true" top_pad="0" translate="false" diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml index daa4356c83..b48c5d1f8a 100644 --- a/indra/newview/skins/default/xui/en/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history.xml @@ -5,8 +5,6 @@ background_visible="true" bg_alpha_color="DkGray"> <accordion - no_matched_tabs_text.value="Didn't find what you're looking for? Try [secondlife:///app/search/places/[SEARCH_TERM] Search]." - no_visible_tabs_text.value="Teleport history is empty. Try [secondlife:///app/search/places/ Search]." follows="left|top|right|bottom" height="373" layout="topleft" @@ -16,6 +14,12 @@ background_visible="true" bg_alpha_color="DkGray2" width="307"> + <no_matched_tabs_text + name="no_matched_teleports_msg" + value="Didn't find what you're looking for? Try [secondlife:///app/search/places/[SEARCH_TERM] Search]." /> + <no_visible_tabs_text + name="no_teleports_msg" + value="Teleport history is empty. Try [secondlife:///app/search/places/ Search]." /> <accordion_tab layout="topleft" name="today" diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml index c5f3fcc27d..d38ad8c5f8 100644 --- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml @@ -41,7 +41,7 @@ height="20" layout="topleft" left_pad="5" - allow_html="false" + parse_urls="false" use_ellipses="true" name="region" text_color="white" diff --git a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml index d8f4297e0c..30d3064e14 100644 --- a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml @@ -36,7 +36,7 @@ enabled="true" follows="right|top" height="18" - image_name="Parcel_VoiceNo_Light" + image_name="Parcel_VoiceNo_Dark" name="voice_icon" top="1" visible="false" @@ -45,7 +45,7 @@ <icon follows="right|top" height="18" - image_name="Parcel_FlyNo_Light" + image_name="Parcel_FlyNo_Dark" name="fly_icon" top="1" visible="false" @@ -54,7 +54,7 @@ <icon follows="right|top" height="18" - image_name="Parcel_PushNo_Light" + image_name="Parcel_PushNo_Dark" name="push_icon" top="1" visible="false" @@ -63,7 +63,7 @@ <icon follows="right|top" height="18" - image_name="Parcel_BuildNo_Light" + image_name="Parcel_BuildNo_Dark" name="build_icon" top="1" visible="false" @@ -72,7 +72,7 @@ <icon follows="right|top" height="18" - image_name="Parcel_ScriptsNo_Light" + image_name="Parcel_ScriptsNo_Dark" name="scripts_icon" top="1" visible="false" diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index 50df227fbf..49b252174c 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -80,10 +80,11 @@ <panel follows="all" height="493" + help_topic="" label="" layout="topleft" left="9" - help_topic="" + name="item_profile" top="45" width="313" background_visible="true" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index d2cf25d7bc..94ee5d9c32 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -278,6 +278,7 @@ <!-- world map --> <string name="texture_loading">Loading...</string> <string name="worldmap_offline">Offline</string> + <string name="worldmap_item_tooltip_format">[AREA] m² L$[PRICE]</string> <string name="worldmap_results_none_found">None found.</string> <!-- animations uploading status codes --> @@ -1913,6 +1914,7 @@ Clears (deletes) the media and all params from the given face. <string name="AnimFlagStop" value=" Stop Animation : " /> <string name="AnimFlagStart" value=" Start Animation : " /> <string name="Wave" value=" Wave " /> + <string name="GestureActionNone" value="None" /> <string name="HelloAvatar" value=" Hello, avatar! " /> <string name="ViewAllGestures" value=" View All >>" /> <string name="GetMoreGestures" value=" Get More >>" /> @@ -1960,6 +1962,7 @@ Clears (deletes) the media and all params from the given face. We should localize both of them with the same value --> <string name="InvFolder favorite">Favorites</string> <string name="InvFolder Current Outfit">Current Outfit</string> + <string name="InvFolder Initial Outfits">Initial Outfits</string> <string name="InvFolder My Outfits">My Outfits</string> <string name="InvFolder Accessories">Accessories</string> <string name="InvFolder Meshes">Meshes</string> @@ -2101,6 +2104,7 @@ Clears (deletes) the media and all params from the given face. <string name="SummaryForTheWeek" value="Summary for this week, beginning on " /> <string name="NextStipendDay" value="The next stipend day is " /> <string name="GroupIndividualShare" value=" Group Individual Share" /> + <string name="GroupColumn" value=" Group" /> <string name="Balance">Balance</string> <string name="Credits">Credits</string> <string name="Debits">Debits</string> @@ -2279,6 +2283,9 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh <string name="accel-win-alt">Alt+</string> <string name="accel-win-shift">Shift+</string> + <string name="Esc">Esc</string> + <string name="Home">Home</string> + <!-- Previews --> <string name="FileSaved">File Saved</string> <string name="Receiving">Receiving</string> @@ -3021,6 +3028,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="conference-title"> Ad-hoc Conference </string> + <string name="conference-title-incoming"> + [AGENT_NAME] Conference + </string> <string name="inventory_item_offered-im"> Inventory item offered </string> @@ -3140,6 +3150,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="group_role_everyone">Everyone</string> <string name="group_role_officers">Officers</string> <string name="group_role_owners">Owners</string> + <string name="group_member_status_online">Online</string> <string name="uploading_abuse_report">Uploading... @@ -3162,7 +3173,9 @@ Abuse Report</string> <string name="New Alpha">New Alpha</string> <string name="New Tattoo">New Tattoo</string> <string name="Invalid Wearable">Invalid Wearable</string> + <string name="New Gesture">New Gesture</string> <string name="New Script">New Script</string> + <string name="New Note">New Note</string> <string name="New Folder">New Folder</string> <string name="Contents">Contents</string> <string name="Gesture">Gesture</string> @@ -3184,13 +3197,20 @@ Abuse Report</string> <string name="Male - Stick tougue out">Male - Stick tougue out</string> <string name="Male - Wow">Male - Wow</string> + <string name="Female - Chuckle">Female - Chuckle</string> + <string name="Female - Cry">Female - Cry</string> + <string name="Female - Embarrassed">Female - Embarrassed</string> <string name="Female - Excuse me">Female - Excuse me</string> <string name="Female - Get lost">Female - Get lost</string> <string name="Female - Blow kiss">Female - Blow kiss</string> <string name="Female - Boo">Female - Boo</string> <string name="Female - Bored">Female - Bored</string> <string name="Female - Hey">Female - Hey</string> + <string name="Female - Hey baby">Female - Hey baby</string> <string name="Female - Laugh">Female - Laugh</string> + <string name="Female - Looking good">Female - Looking good</string> + <string name="Female - Over here">Female - Over here</string> + <string name="Female - Please">Female - Please</string> <string name="Female - Repulsed">Female - Repulsed</string> <string name="Female - Shrug">Female - Shrug</string> <string name="Female - Stick tougue out">Female - Stick tougue out</string> @@ -3223,4 +3243,29 @@ Abuse Report</string> <string name="dateTimeDayFormat">[MDAY]</string> <string name="dateTimeAM">AM</string> <string name="dateTimePM">PM</string> + + <!-- currency formatting --> + <string name="LocalEstimateUSD">US$ [AMOUNT]</string> + + <!-- Group Profile roles and powers --> + <string name="Membership">Membership</string> + <string name="Roles">Roles</string> + <string name="Group Identity">Group Identity</string> + <string name="Parcel Management">Parcel Management</string> + <string name="Parcel Identity">Parcel Identity</string> + <string name="Parcel Settings">Parcel Settings</string> + <string name="Parcel Powers">Parcel Powers</string> + <string name="Parcel Access">Parcel Access</string> + <string name="Parcel Content">Parcel Content</string> + <string name="Object Management">Object Management</string> + <string name="Accounting">Accounting</string> + <string name="Notices">Notices</string> + <string name="Chat">Chat</string> + + <!-- Question strings for delete items notifications --> + <string name="DeleteItems">Delete selected items?</string> + <string name="DeleteItem">Delete selected item?</string> + + <string name="EmptyOutfitText">There are no items in this outfit</string> + </strings> diff --git a/indra/newview/skins/default/xui/en/widgets/accordion.xml b/indra/newview/skins/default/xui/en/widgets/accordion.xml index 19f8234389..1a66f0f5c5 100644 --- a/indra/newview/skins/default/xui/en/widgets/accordion.xml +++ b/indra/newview/skins/default/xui/en/widgets/accordion.xml @@ -3,6 +3,12 @@ height="100" name="accordion" width="200"> + <!-- It is possible to override attributes of "no_matched_tabs_text" and "no_visible_tabs_text" with a short form: + no_matched_tabs_text.value="Overridden text" (placed among <accordion> attributes) + But unfortunatly such form is not supported by VLT Tool. It requires to have the overridden "value" + attribute declared in tags below ("no_matched_tabs_text" & "no_visible_tabs_text"). + It looks less clean but we have to use "long" form for these messages to enable automated translation with VLT. + --> <no_matched_tabs_text follows="all" height="100" diff --git a/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml b/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml index c08267de82..0eec002006 100644 --- a/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml @@ -21,7 +21,7 @@ height="16" layout="topleft" left="21" - allow_html="false" + parse_urls="false" use_ellipses="true" name="item_name" text_color="white" diff --git a/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml b/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml index f7a05e9bc4..96d72c78a6 100644 --- a/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml @@ -21,7 +21,7 @@ height="16" layout="topleft" left="42" - allow_html="false" + parse_urls="false" use_ellipses="true" name="item_name" text_color="white" diff --git a/indra/newview/skins/default/xui/en/widgets/deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/en/widgets/deletable_wearable_list_item.xml index 88a4682e13..0534485ddd 100644 --- a/indra/newview/skins/default/xui/en/widgets/deletable_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/deletable_wearable_list_item.xml @@ -33,7 +33,7 @@ height="16" layout="topleft" left="45" - allow_html="false" + parse_urls="false" use_ellipses="true" name="item_name" text_color="white" diff --git a/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml index 80a877a6c2..6c60624805 100644 --- a/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml @@ -22,7 +22,7 @@ height="16" layout="topleft" left="41" - allow_html="false" + parse_urls="false" use_ellipses="true" name="item_name" text_color="LtGray_50" diff --git a/indra/newview/skins/default/xui/en/widgets/expandable_text.xml b/indra/newview/skins/default/xui/en/widgets/expandable_text.xml index 216c4dea95..c6331ec87b 100644 --- a/indra/newview/skins/default/xui/en/widgets/expandable_text.xml +++ b/indra/newview/skins/default/xui/en/widgets/expandable_text.xml @@ -2,10 +2,9 @@ <expandable_text max_height="300" > <textbox - allow_html="true" + parse_urls="true" allow_scroll="true" bg_visible="false" - label="More" follows="left|top|right" name="text" read_only="true" diff --git a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml index 0a5930c820..da9059c819 100644 --- a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml +++ b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml @@ -32,7 +32,7 @@ height="20" layout="topleft" left="21" - allow_html="false" + parse_urls="false" use_ellipses="true" name="item_name" text_color="white" diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_list.xml b/indra/newview/skins/default/xui/en/widgets/scroll_list.xml index 63166f32b7..dd93675807 100644 --- a/indra/newview/skins/default/xui/en/widgets/scroll_list.xml +++ b/indra/newview/skins/default/xui/en/widgets/scroll_list.xml @@ -12,6 +12,7 @@ draw_stripes="true" scroll_bar_bg_visible="false" scroll_bar_bg_color="black" + mouse_wheel_opaque="false" background_visible="true" heading_height="23" draw_border="false" diff --git a/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml b/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml index bb46ec0954..3878c7a144 100644 --- a/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <simple_text_editor - allow_html="false" + parse_urls="false" mouse_opaque="true" font="SansSerifSmall" max_length="255" @@ -15,11 +15,13 @@ default_color="TextDefaultColor" text_color="TextFgColor" text_readonly_color="TextFgReadOnlyColor" + text_selected_color="White" h_pad="6" v_pad="4" bg_visible="true" bg_readonly_color="TextBgReadOnlyColor" bg_writeable_color="TextBgWriteableColor" + bg_selected_color="EmphasisColor" bg_focus_color="TextBgFocusColor"> <simple_text_editor.border bevel_style="in" diff --git a/indra/newview/skins/default/xui/en/widgets/text.xml b/indra/newview/skins/default/xui/en/widgets/text.xml index 3006df22b8..134f2d7522 100644 --- a/indra/newview/skins/default/xui/en/widgets/text.xml +++ b/indra/newview/skins/default/xui/en/widgets/text.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<text allow_html="true" +<text parse_urls="true" mouse_opaque="false" name="text_box" font="SansSerifSmall" @@ -8,7 +8,7 @@ halign="left" h_pad="0" allow_scroll="false" - text_readonly_color="LabelDisabledColor" + text_readonly_color="LabelTextColor" bg_writeable_color="FloaterDefaultBackgroundColor" use_ellipses="false" bg_visible="false" diff --git a/indra/newview/skins/default/xui/en/widgets/text_editor.xml b/indra/newview/skins/default/xui/en/widgets/text_editor.xml index 2ced8b1b4b..180120ec89 100644 --- a/indra/newview/skins/default/xui/en/widgets/text_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/text_editor.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <!-- Core parameters are in simple_text_editor.xml --> <text_editor - allow_html="false" + parse_urls="false" + text_readonly_color="LabelDisabledColor" show_context_menu="true"/> diff --git a/indra/newview/skins/default/xui/es/floater_camera.xml b/indra/newview/skins/default/xui/es/floater_camera.xml index c625407ba2..ccf3d4bf91 100644 --- a/indra/newview/skins/default/xui/es/floater_camera.xml +++ b/indra/newview/skins/default/xui/es/floater_camera.xml @@ -22,6 +22,35 @@ Centrar el objeto </floater.string> <panel name="controls"> + <panel name="preset_views_list"> + <panel_camera_item name="front_view"> + <panel_camera_item.text name="front_view_text"> + De frente + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="group_view"> + <panel_camera_item.text name="side_view_text"> + Vista lateral + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="rear_view"> + <panel_camera_item.text name="rear_view_text"> + Desde detrás + </panel_camera_item.text> + </panel_camera_item> + </panel> + <panel name="camera_modes_list"> + <panel_camera_item name="object_view"> + <panel_camera_item.text name="object_view_text"> + Vista de objeto + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="mouselook_view"> + <panel_camera_item.text name="mouselook_view_text"> + Vista subjetiva + </panel_camera_item.text> + </panel_camera_item> + </panel> <panel name="zoom" tool_tip="Hacer zoom con la cámara en lo enfocado"> <joystick_rotate name="cam_rotate_stick" tool_tip="La cámara gira alrededor del punto de vista"/> <slider_bar name="zoom_slider" tool_tip="Hacer zoom en lo enfocado"/> diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture.xml index cf1b3bbbbd..c58eb227aa 100644 --- a/indra/newview/skins/default/xui/es/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/es/floater_preview_gesture.xml @@ -42,7 +42,12 @@ <text name="library_label"> Biblioteca: </text> - <scroll_list name="library_list"/> + <scroll_list name="library_list"> + <scroll_list.rows name="action_animation" value="Animaciones"/> + <scroll_list.rows name="action_sound" value="Sonido"/> + <scroll_list.rows name="action_chat" value="Chat"/> + <scroll_list.rows name="action_wait" value="Espera"/> + </scroll_list> <button label="Añadir >>" name="add_btn"/> <text name="steps_label"> Pasos: diff --git a/indra/newview/skins/default/xui/es/floater_world_map.xml b/indra/newview/skins/default/xui/es/floater_world_map.xml index 3135324816..acc63e52a0 100644 --- a/indra/newview/skins/default/xui/es/floater_world_map.xml +++ b/indra/newview/skins/default/xui/es/floater_world_map.xml @@ -19,12 +19,12 @@ <text name="land_sale_label"> Venta de terreno </text> - <text name="by_owner_label"> - por el dueño - </text> <text name="auction_label"> subasta </text> + <text name="by_owner_label"> + por el dueño + </text> <button name="Go Home" tool_tip="Teleportar a mi Base"/> <text name="Home_label"> Base @@ -35,7 +35,7 @@ <text name="pg_label"> General </text> - <check_box name="events_mature_chk"/> + <check_box initial_value="true" name="events_mature_chk"/> <text name="events_mature_label"> Moderado </text> @@ -58,6 +58,9 @@ <search_editor label="Regiones alfabéticamente" name="location" tool_tip="Escribe el nombre de una región"/> <button label="Encontrar" name="DoSearch" tool_tip="Buscar una región"/> <button name="Clear" tool_tip="Limpia las marcas y actualiza el mapa"/> + <text name="events_label"> + Lugar: + </text> <button label="Teleportar" name="Teleport" tool_tip="Teleportar a la localización seleccionada"/> <button label="Copiar la SLurl" name="copy_slurl" tool_tip="Copiar la SLurl de esta posición para usarla en una web."/> <button label="Ver lo elegido" name="Show Destination" tool_tip="Centrar el mapa en la localización seleccionada"/> diff --git a/indra/newview/skins/default/xui/es/language_settings.xml b/indra/newview/skins/default/xui/es/language_settings.xml index 1ade4ba300..f172994077 100644 --- a/indra/newview/skins/default/xui/es/language_settings.xml +++ b/indra/newview/skins/default/xui/es/language_settings.xml @@ -17,6 +17,7 @@ datetimeToCodes["month"] = "%B"; // August datetimeToCodes["mthnum"] = "%m"; // 08 datetimeToCodes["day"] = "%d"; // 31 + datetimeToCodes["sday"] = "%-d"; // 9 datetimeToCodes["hour24"] = "%H"; // 14 datetimeToCodes["hour"] = "%H"; // 14 datetimeToCodes["hour12"] = "%I"; // 02 diff --git a/indra/newview/skins/default/xui/es/menu_inventory.xml b/indra/newview/skins/default/xui/es/menu_inventory.xml index 2937b0c4e3..94ee162bbc 100644 --- a/indra/newview/skins/default/xui/es/menu_inventory.xml +++ b/indra/newview/skins/default/xui/es/menu_inventory.xml @@ -61,7 +61,7 @@ <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="Quitar el enlace" name="Remove 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"/> diff --git a/indra/newview/skins/default/xui/es/menu_inventory_add.xml b/indra/newview/skins/default/xui/es/menu_inventory_add.xml index 91cb4a08ff..ba106e8335 100644 --- a/indra/newview/skins/default/xui/es/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/es/menu_inventory_add.xml @@ -5,6 +5,7 @@ <menu_item_call label="Sonido ([COST] L$)..." name="Upload Sound"/> <menu_item_call label="Animación ([COST] L$)..." name="Upload Animation"/> <menu_item_call label="Masivo ([COST] L$ por archivo)..." name="Bulk Upload"/> + <menu_item_call label="Configurar los permisos por defecto de subida" name="perm prefs"/> </menu> <menu_item_call label="Carpeta nueva" name="New Folder"/> <menu_item_call label="Script nuevo" name="New Script"/> diff --git a/indra/newview/skins/default/xui/es/menu_object.xml b/indra/newview/skins/default/xui/es/menu_object.xml index d2743cd4fc..060d806c55 100644 --- a/indra/newview/skins/default/xui/es/menu_object.xml +++ b/indra/newview/skins/default/xui/es/menu_object.xml @@ -1,6 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Object Pie"> - <menu_item_call label="Tocar" name="Object Touch"/> + <menu_item_call label="Tocar" name="Object Touch"> + <on_enable parameter="Tocar" name="EnableTouch"/> + </menu_item_call> <menu_item_call label="Editar" name="Edit..."/> <menu_item_call label="Construir" name="Build"/> <menu_item_call label="Abrir" name="Open"/> diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index 88013df8f5..e9eda790dd 100644 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -2750,8 +2750,8 @@ Comprueba la configuración de la red y del servidor de seguridad. El avatar '[NAME]' ya estaba totalmente cargado al salir. </notification> <notification name="AvatarRezSelfBakeNotification"> - ( [EXISTENCE] segundos vivo) -Has cargado una textura obtenida mediante bake de [RESOLUTION] para '[BODYREGION]' después de [TIME] segundos. + ( [EXISTENCE] segundos con vida ) +Has [ACTION] una textura obtenida mediante bake de [RESOLUTION] para '[BODYREGION]' después de [TIME] segundos. </notification> <notification name="ConfirmLeaveCall"> ¿Estás seguro de que deseas salir de esta multiconferencia? @@ -2788,4 +2788,7 @@ Si los problemas persisten, por favor, acude a [SUPPORT_SITE]. Si posees un terreno, puedes hacerlo tu Base. También puedes buscar en el Mapa lugares marcados como "Puntos de Información". </global> + <global name="You died and have been teleported to your home location"> + Has muerto y te has teleportado a tu Base. + </global> </notifications> diff --git a/indra/newview/skins/default/xui/es/panel_group_notices.xml b/indra/newview/skins/default/xui/es/panel_group_notices.xml index 7a3dbad59e..1eaa69abff 100644 --- a/indra/newview/skins/default/xui/es/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/es/panel_group_notices.xml @@ -18,7 +18,7 @@ El máximo es de 200 por día y grupo. <text name="notice_list_none_found"> No se han encontrado </text> - <button label="Crear un aviso nuevo" label_selected="Crear un aviso nuevo" name="create_new_notice" tool_tip="Crear un aviso nuevo"/> + <button label="Nuevo aviso" label_selected="Crear un aviso nuevo" name="create_new_notice" tool_tip="Crear un aviso nuevo"/> <button label="Actualizar" label_selected="Actualizar la lista" name="refresh_notices" tool_tip="Actualizar la lista de avisos"/> <panel label="Crear un aviso nuevo" name="panel_create_new_notice"> <text name="lbl"> diff --git a/indra/newview/skins/default/xui/es/panel_group_roles.xml b/indra/newview/skins/default/xui/es/panel_group_roles.xml index 5ef81162bc..390b4e2e9d 100644 --- a/indra/newview/skins/default/xui/es/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/es/panel_group_roles.xml @@ -12,6 +12,9 @@ Puede añadir o quitar los roles asignados a los miembros. Seleccione varios nombres manteniendo pulsada la tecla Ctrl y pulsando en cada uno de ellos. </panel.string> + <panel.string name="donation_area"> + [AREA] m² + </panel.string> <filter_editor label="Filtrar los miembros" name="filter_input"/> <name_list name="member_list"> <name_list.columns label="Miembro" name="name"/> @@ -74,21 +77,15 @@ incluyendo el de Todos y el de Propietarios. <text name="static"> Nombre del rol </text> - <line_editor name="role_name"> - Empleados - </line_editor> + <line_editor name="role_name"/> <text name="static3"> Etiqueta del rol </text> - <line_editor name="role_title"> - (esperando) - </line_editor> + <line_editor name="role_title"/> <text name="static2"> Descripción </text> - <text_editor name="role_description"> - (esperando) - </text_editor> + <text_editor name="role_description"/> <text name="static4"> Roles asignados </text> @@ -103,9 +100,6 @@ incluyendo el de Todos y el de Propietarios. </scroll_list> </panel> <panel name="actions_footer"> - <text name="static"> - Descripción de la capacidad - </text> <text_editor name="action_description"> Esta capacidad es la de 'Expulsar miembros de este grupo'. Sólo un propietario puede expulsar a otro. </text_editor> diff --git a/indra/newview/skins/default/xui/es/panel_nearby_media.xml b/indra/newview/skins/default/xui/es/panel_nearby_media.xml index d1a14c877f..f65cae6e20 100644 --- a/indra/newview/skins/default/xui/es/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/es/panel_nearby_media.xml @@ -23,6 +23,12 @@ <button label="Más >>" label_selected="Menos <<" name="less_btn" tool_tip="Controles avanzados"/> </panel> <panel name="nearby_media_panel"> + <text name="nearby_media_title"> + Media cercanos + </text> + <text name="show_text"> + Mostrar: + </text> <combo_box name="show_combo"> <combo_box.item label="Todo" name="All"/> <combo_box.item label="En esta parcela" name="WithinParcel"/> @@ -36,22 +42,22 @@ <scroll_list.columns label="Nombre" name="media_name"/> <scroll_list.columns label="Depurar" name="media_debug"/> </scroll_list> - <panel> + <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> <button name="stop_btn" tool_tip="Parar los media seleccionados"/> </layout_panel> <layout_panel name="play"> - <button name="play_btn" tool_tip="Ejecutar los media"/> + <button name="play_btn" tool_tip="Ejecutar los media seleccionados"/> </layout_panel> <layout_panel name="pause"> - <button name="pause_btn" tool_tip="Pausa los media seleccionados"/> + <button name="pause_btn" tool_tip="Pausar los media seleccionados"/> </layout_panel> <layout_panel name="volume_slider_ctrl"> <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Volumen de los media seleccionados"/> </layout_panel> <layout_panel name="mute"> - <button name="mute_btn" tool_tip="Silencia los media seleccionados"/> + <button name="mute_btn" tool_tip="Silenciar el audio de los media seleccionados"/> </layout_panel> <layout_panel name="zoom"> <button name="zoom_btn" tool_tip="Zoom en los media seleccionados"/> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_sound.xml b/indra/newview/skins/default/xui/es/panel_preferences_sound.xml index 2d3c76d215..b0088ee1a2 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_sound.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Sonidos" name="Preference Media panel"> <slider label="Volumen general" name="System Volume"/> - <check_box label="Silenciar cuando minimice" name="mute_when_minimized"/> + <check_box initial_value="true" label="Silenciar cuando minimice" name="mute_when_minimized"/> <slider label="Botones" name="UI Volume"/> <slider label="Ambiental" name="Wind Volume"/> <slider label="Efectos de sonido" name="SFX Volume"/> @@ -11,8 +11,8 @@ <check_box label="Activada" name="enable_media"/> <slider label="Chat de voz" name="Voice Volume"/> <check_box label="Activado" name="enable_voice_check"/> - <check_box label="Permitir la ejecución automática de los media" name="media_auto_play_btn" tool_tip="Marcar esto para permitir la ejecución automática de los media"/> - <check_box label="Ejecutar para otros avatares los media anexados" name="media_show_on_others_btn" tool_tip="Al desmarcar esto se esconderán los media anexados a otros avatares cercanos"/> + <check_box label="Permitir la ejecución automática de los media" name="media_auto_play_btn" tool_tip="Marcar esto para permitir la ejecución automática de los media" value="true"/> + <check_box label="Ejecutar para otros avatares los media anexados" name="media_show_on_others_btn" tool_tip="Al desmarcar esto se esconderán los media anexados a otros avatares cercanos" value="true"/> <text name="voice_chat_settings"> Configuración del chat de voz </text> @@ -28,6 +28,12 @@ <panel.string name="default_text"> Por defecto </panel.string> + <panel.string name="default system device"> + Dispositivo del sistema por defecto + </panel.string> + <panel.string name="no device"> + Ningún dispositivo + </panel.string> <text name="Input"> Entrada </text> diff --git a/indra/newview/skins/default/xui/es/panel_teleport_history.xml b/indra/newview/skins/default/xui/es/panel_teleport_history.xml index a0ee30e8f6..364451b26b 100644 --- a/indra/newview/skins/default/xui/es/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/es/panel_teleport_history.xml @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="Teleport History"> <accordion name="history_accordion"> + <no_matched_tabs_text name="no_matched_teleports_msg" value="¿No encuentras lo que buscas? Intenta con [secondlife:///app/search/places/[SEARCH_TERM] Buscar]."/> + <no_visible_tabs_text name="no_teleports_msg" value="El historial de teleportes está vacío. Intenta con [secondlife:///app/search/places/ Buscar]."/> <accordion_tab name="today" title="Hoy"/> <accordion_tab name="yesterday" title="Ayer"/> <accordion_tab name="2_days_ago" title="Hace 2 días"/> - 5 <accordion_tab name="3_days_ago" title="Hace 3 días"/> <accordion_tab name="4_days_ago" title="Hace 4 días"/> <accordion_tab name="5_days_ago" title="Hace 5 días"/> diff --git a/indra/newview/skins/default/xui/es/sidepanel_item_info.xml b/indra/newview/skins/default/xui/es/sidepanel_item_info.xml index 38f43c3cbc..0cea46afba 100644 --- a/indra/newview/skins/default/xui/es/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/es/sidepanel_item_info.xml @@ -23,7 +23,7 @@ </panel.string> <text name="title" value="Perfil del elemento"/> <text name="origin" value="(Inventario)"/> - <panel label=""> + <panel label="" name="item_profile"> <text name="LabelItemNameTitle"> Nombre: </text> @@ -47,22 +47,22 @@ Tú puedes: </text> <check_box label="Modificar" name="CheckOwnerModify"/> - <check_box label="Copiarlo" name="CheckOwnerCopy"/> - <check_box label="Transferirlo" name="CheckOwnerTransfer"/> + <check_box label="Copiar" name="CheckOwnerCopy"/> + <check_box label="Transferir" name="CheckOwnerTransfer"/> <text name="AnyoneLabel"> Cualquiera: </text> - <check_box label="Copiarlo" name="CheckEveryoneCopy"/> + <check_box label="Copiar" name="CheckEveryoneCopy"/> <text name="GroupLabel"> Grupo: </text> - <check_box label="Compartir" name="CheckShareWithGroup" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación en este objeto. Debes transferirlo para activar las restricciones según los roles."/> + <check_box label="Compartir" name="CheckShareWithGroup" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación de este objeto. Debes transferirlo para activar las restricciones según los roles."/> <text name="NextOwnerLabel"> Próximo propietario: </text> - <check_box label="Modificarlo" name="CheckNextOwnerModify"/> - <check_box label="Copiarlo" name="CheckNextOwnerCopy"/> - <check_box label="Transferirlo" name="CheckNextOwnerTransfer" tool_tip="El próximo propietario puede dar o revender este objeto"/> + <check_box label="Modificar" name="CheckNextOwnerModify"/> + <check_box label="Copiar" name="CheckNextOwnerCopy"/> + <check_box label="Transferir" name="CheckNextOwnerTransfer" tool_tip="El próximo propietario puede dar o revender este objeto"/> </panel> <check_box label="En venta" name="CheckPurchase"/> <combo_box name="combobox sale copy"> diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index 917b0641cc..9f5f1f99e7 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -184,6 +184,7 @@ <string name="TooltipMustSingleDrop"> Aquí se puede arrastrar sólo un ítem </string> + <string name="TooltipPrice" value="[AMOUNT] L$:"/> <string name="TooltipHttpUrl"> Pulsa para ver esta página web </string> @@ -236,7 +237,6 @@ Pulsa para ejecutar el comando secondlife:// </string> <string name="CurrentURL" value="URL actual: [CurrentURL]"/> - <string name="TooltipPrice" value="[AMOUNT]L$: "/> <string name="SLurlLabelTeleport"> Teleportarse a </string> @@ -645,6 +645,9 @@ <string name="worldmap_offline"> Sin conexión </string> + <string name="worldmap_item_tooltip_format"> + [PRICE] L$ por [AREA] m² + </string> <string name="worldmap_results_none_found"> No se ha encontrado. </string> @@ -885,12 +888,57 @@ <string name="invalid_not_worn"> no válido/a </string> + <string name="create_new_shape"> + Crear una anatomía nueva + </string> + <string name="create_new_skin"> + Crear una piel nueva + </string> + <string name="create_new_hair"> + Crear pelo nuevo + </string> + <string name="create_new_eyes"> + Crear ojos nuevos + </string> + <string name="create_new_shirt"> + Crear una camisa nueva + </string> + <string name="create_new_pants"> + Crear unos pantalones nuevos + </string> + <string name="create_new_shoes"> + Crear unos zapatos nuevos + </string> + <string name="create_new_socks"> + Crear unos calcetines nuevos + </string> + <string name="create_new_jacket"> + Crear una chaqueta nueva + </string> + <string name="create_new_gloves"> + Crear unos guantes nuevos + </string> + <string name="create_new_undershirt"> + Crear una camiseta nueva + </string> + <string name="create_new_underpants"> + Crear ropa interior nueva + </string> + <string name="create_new_skirt"> + Crear una falda nueva + </string> + <string name="create_new_alpha"> + Crear una capa alfa nueva + </string> + <string name="create_new_tattoo"> + Crear un tatuaje nuevo + </string> + <string name="create_new_invalid"> + no válido/a + </string> <string name="NewWearable"> Nuevo [WEARABLE_ITEM] </string> - <string name="CreateNewWearable"> - Crear [WEARABLE_TYPE] - </string> <string name="next"> Siguiente </string> @@ -989,6 +1037,7 @@ <string name="AnimFlagStop" value="Parar la animación:"/> <string name="AnimFlagStart" value="Empezar la animación:"/> <string name="Wave" value="Onda"/> + <string name="GestureActionNone" value="Ninguno"/> <string name="HelloAvatar" value="¡Hola, avatar!"/> <string name="ViewAllGestures" value="Ver todos >>"/> <string name="GetMoreGestures" value="Obtener más >>"/> @@ -1074,6 +1123,9 @@ <string name="InvFolder Current Outfit"> Vestuario actual </string> + <string name="InvFolder Initial Outfits"> + Vestuario inicial + </string> <string name="InvFolder My Outfits"> Mis vestuarios </string> @@ -1393,6 +1445,7 @@ <string name="SummaryForTheWeek" value="Resumen de esta semana, empezando el"/> <string name="NextStipendDay" value="El próximo día de pago es el"/> <string name="GroupIndividualShare" value="Grupo Aportaciones individuales"/> + <string name="GroupColumn" value="Grupo"/> <string name="Balance"> Saldo </string> @@ -3532,6 +3585,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE]. <string name="group_role_owners"> Propietarios </string> + <string name="group_member_status_online"> + Conectado/a + </string> <string name="uploading_abuse_report"> Subiendo... @@ -3585,9 +3641,15 @@ Denuncia de infracción <string name="Invalid Wearable"> No se puede poner </string> + <string name="New Gesture"> + Gesto nuevo + </string> <string name="New Script"> Script nuevo </string> + <string name="New Note"> + Nota nueva + </string> <string name="New Folder"> Carpeta nueva </string> @@ -3645,6 +3707,15 @@ Denuncia de infracción <string name="Male - Wow"> Varón - Admiración </string> + <string name="Female - Chuckle"> + Mujer - Risa suave + </string> + <string name="Female - Cry"> + Mujer - Llorar + </string> + <string name="Female - Embarrassed"> + Mujer - Ruborizada + </string> <string name="Female - Excuse me"> Mujer - Disculpa </string> @@ -3663,9 +3734,21 @@ Denuncia de infracción <string name="Female - Hey"> Mujer - ¡Eh! </string> + <string name="Female - Hey baby"> + Mujer - ¡Eh, encanto! + </string> <string name="Female - Laugh"> Mujer - Risa </string> + <string name="Female - Looking good"> + Mujer - Buen aspecto + </string> + <string name="Female - Over here"> + Mujer - Por aquí + </string> + <string name="Female - Please"> + Mujer - Por favor + </string> <string name="Female - Repulsed"> Mujer - Rechazo </string> @@ -3715,4 +3798,46 @@ Denuncia de infracción <string name="dateTimePM"> PM </string> + <string name="LocalEstimateUSD"> + [AMOUNT] dólares estadounidenses + </string> + <string name="Membership"> + Membresía + </string> + <string name="Roles"> + Roles + </string> + <string name="Group Identity"> + Indentidad de grupo + </string> + <string name="Parcel Management"> + Gestión de la parcela + </string> + <string name="Parcel Identity"> + Identidad de la parcela + </string> + <string name="Parcel Settings"> + Configuración de la parcela + </string> + <string name="Parcel Powers"> + Poder de la parcela + </string> + <string name="Parcel Access"> + Acceso a la parcela + </string> + <string name="Parcel Content"> + Contenido de la parcela + </string> + <string name="Object Management"> + Manejo de objetos + </string> + <string name="Accounting"> + Contabilidad + </string> + <string name="Notices"> + Avisos + </string> + <string name="Chat"> + Chat + </string> </strings> 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 5c71e50282..5263de4532 100644 --- a/indra/newview/skins/default/xui/fr/floater_about_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml @@ -220,7 +220,7 @@ ou divisé. [COUNT] sur [MAX] ([DELETED] seront supprimés) </panel.string> <text name="parcel_object_bonus"> - Facteur Bonus Objets : [BONUS] + Facteur Bonus objets : [BONUS] </text> <text name="Simulator primitive usage:"> Utilisation des primitives : diff --git a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml index 4eaff8535e..b3acc83078 100644 --- a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml @@ -22,10 +22,10 @@ le Lindex... <text name="currency_action"> Je veux acheter </text> - <text name="currency_label"> + <text name="currency_label" left="308"> L$ </text> - <line_editor label="L$" name="currency_amt" width="65"> + <line_editor label="L$" name="currency_amt" width="65" left_pad="-85"> 1234 </line_editor> <text name="buying_label"> diff --git a/indra/newview/skins/default/xui/fr/floater_camera.xml b/indra/newview/skins/default/xui/fr/floater_camera.xml index b0834fe170..1d62a89ff2 100644 --- a/indra/newview/skins/default/xui/fr/floater_camera.xml +++ b/indra/newview/skins/default/xui/fr/floater_camera.xml @@ -22,6 +22,35 @@ Voir l'objet </floater.string> <panel name="controls"> + <panel name="preset_views_list"> + <panel_camera_item name="front_view"> + <panel_camera_item.text name="front_view_text"> + Vue frontale + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="group_view"> + <panel_camera_item.text name="side_view_text"> + Vue latérale + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="rear_view"> + <panel_camera_item.text name="rear_view_text"> + Vue arrière + </panel_camera_item.text> + </panel_camera_item> + </panel> + <panel name="camera_modes_list"> + <panel_camera_item name="object_view"> + <panel_camera_item.text name="object_view_text"> + Vue de l'objet + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="mouselook_view"> + <panel_camera_item.text name="mouselook_view_text"> + Vue subjective + </panel_camera_item.text> + </panel_camera_item> + </panel> <panel name="zoom" tool_tip="Zoomer en direction du point central"> <joystick_rotate name="cam_rotate_stick" tool_tip="Faire tourner la caméra autour du point central"/> <slider_bar name="zoom_slider" tool_tip="Zoomer en direction du point central"/> diff --git a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml index 87c8847cbd..0ce17b9dc6 100644 --- a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml @@ -80,12 +80,12 @@ </text> <spinner label="Heure" name="WLLengthOfDayHour"/> <spinner label="Min" name="WLLengthOfDayMin"/> - <spinner label="S" name="WLLengthOfDaySec"/> + <spinner label="Sec" name="WLLengthOfDaySec"/> <text name="DayCycleText3"> Aperçu : </text> <button label="Lire" label_selected="Lire" name="WLAnimSky"/> - <button label="Stop !" label_selected="Stop" name="WLStopAnimSky"/> + <button label="Arrêter" label_selected="Stop" name="WLStopAnimSky"/> <button label="Utiliser heure domaine" label_selected="Aller heure domaine" name="WLUseLindenTime"/> <button label="Enregistrer jour test" label_selected="Enregistrer jour test" name="WLSaveDayCycle"/> <button label="Charger jour test" label_selected="Charger jour test" name="WLLoadDayCycle"/> diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml index fca1a329a2..29b61fc98d 100644 --- a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml @@ -44,7 +44,7 @@ <text name="OwnerLabel"> Vous : </text> - <check_box label="Éditer" name="CheckOwnerModify"/> + <check_box label="Modifier" name="CheckOwnerModify"/> <check_box label="Copier" name="CheckOwnerCopy"/> <check_box label="Revendre" name="CheckOwnerTransfer"/> <text name="AnyoneLabel" width="80"> @@ -58,7 +58,7 @@ <text name="NextOwnerLabel" width="192"> Le prochain propriétaire : </text> - <check_box label="Éditer" name="CheckNextOwnerModify"/> + <check_box label="Modifier" name="CheckNextOwnerModify"/> <check_box label="Copier" name="CheckNextOwnerCopy"/> <check_box label="Revendre" name="CheckNextOwnerTransfer"/> <check_box label="À vendre" name="CheckPurchase"/> diff --git a/indra/newview/skins/default/xui/fr/floater_postcard.xml b/indra/newview/skins/default/xui/fr/floater_postcard.xml index 0f3a4541e2..a4b0675fe4 100644 --- a/indra/newview/skins/default/xui/fr/floater_postcard.xml +++ b/indra/newview/skins/default/xui/fr/floater_postcard.xml @@ -16,7 +16,7 @@ Objet : </text> <line_editor left="143" name="subject_form" width="130" left_delta="146"/> - <line_editor label="Saisissez votre objet ici." name="subject_form"/> + <line_editor label="Saisir ici votre objet" name="subject_form"/> <text name="msg_label"> Message : </text> @@ -24,7 +24,7 @@ <check_box label="Contenu adulte" name="mature_check" tool_tip="Cette carte postale est à caractère adulte."/> <button label="?" name="publish_help_btn"/> <text_editor name="msg_form"> - Saisissez votre message ici. + Saisir ici votre message </text_editor> <text name="fine_print"> Si le destinataire s'inscrit sur [SECOND_LIFE], vous recevrez un bonus. diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml index 4fa91b87ef..de8d25a494 100644 --- a/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml @@ -13,13 +13,13 @@ Attendre : </floater.string> <floater.string name="stop_txt"> - Stop + Arrêter </floater.string> <floater.string name="preview_txt"> Prévisualiser </floater.string> <floater.string name="none_text"> - -- Aucune -- + -Aucun choix- </floater.string> <floater.string name="Title"> Geste : [NAME] @@ -42,7 +42,12 @@ <text name="library_label"> Bibliothèque : </text> - <scroll_list name="library_list"/> + <scroll_list name="library_list"> + <scroll_list.rows name="action_animation" value="Animation"/> + <scroll_list.rows name="action_sound" value="Son"/> + <scroll_list.rows name="action_chat" value="Chat"/> + <scroll_list.rows name="action_wait" value="Attente"/> + </scroll_list> <button label="Ajouter >>" name="add_btn"/> <text name="steps_label"> Étapes : diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml index 26d097d549..b0c8636ea3 100644 --- a/indra/newview/skins/default/xui/fr/floater_tools.xml +++ b/indra/newview/skins/default/xui/fr/floater_tools.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="toolbox floater" short_title="OUTILS POUR LA CONSTRUCTION" title=""> <floater.string name="status_rotate"> - Pour faire tourner l'objet, faîtes glisser les bandes de couleur. + Pour faire tourner l'objet, faites glisser les bandes de couleur. </floater.string> <floater.string name="status_scale"> Pour étirer le côté sélectionné, cliquez et faites glisser. @@ -48,13 +48,13 @@ Glissez pour déplacer, Maj-glissez pour copier. </text> <radio_group name="focus_radio_group"> - <radio_item label="Zoom" name="radio zoom"/> - <radio_item label="Orbite (Ctrl)" name="radio orbit"/> + <radio_item label="Zoomer" name="radio zoom"/> + <radio_item label="Faire tourner la caméra (Ctrl)" name="radio orbit"/> <radio_item label="Faire un panoramique (Ctrl+Maj)" name="radio pan"/> </radio_group> <radio_group name="move_radio_group"> <radio_item label="Déplacer" name="radio move"/> - <radio_item label="Orbite (Ctrl)" name="radio lift"/> + <radio_item label="Soulever (Ctrl)" name="radio lift"/> <radio_item label="Faire tourner (Ctrl+Maj)" name="radio spin"/> </radio_group> <radio_group name="edit_radio_group"> @@ -190,7 +190,7 @@ Cliquer pour : </text> <combo_box name="clickaction" width="178"> - <combo_box.item label="Toucher (défaut)" name="Touch/grab(default)"/> + <combo_box.item label="Toucher (par défaut)" name="Touch/grab(default)"/> <combo_box.item label="S'asseoir sur l'objet" name="Sitonobject"/> <combo_box.item label="Acheter l'objet" name="Buyobject"/> <combo_box.item label="Payer l'objet" name="Payobject"/> @@ -402,8 +402,8 @@ Application </text> <combo_box name="combobox texgen"> - <combo_box.item label="Défaut" name="Default"/> - <combo_box.item label="Planar" name="Planar"/> + <combo_box.item label="Par défaut" name="Default"/> + <combo_box.item label="Plan" name="Planar"/> </combo_box> <text name="label shininess"> Brillance diff --git a/indra/newview/skins/default/xui/fr/floater_water.xml b/indra/newview/skins/default/xui/fr/floater_water.xml index 96723b0fe6..7d1e3cd65c 100644 --- a/indra/newview/skins/default/xui/fr/floater_water.xml +++ b/indra/newview/skins/default/xui/fr/floater_water.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Water Floater" title="ÉDITEUR D'EAU AVANCÉ"> <floater.string name="WLDefaultWaterNames"> - Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez + Valeur par défaut:Transparente:Bassin:Trouble:Première plaie:SERPENT !!!:Valdez </floater.string> <text name="KeyFramePresetsText" width="120"> Préréglages : diff --git a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml index 74f1697449..657e5f5051 100644 --- a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml @@ -184,6 +184,6 @@ </panel> </tab_container> <string name="WLDefaultSkyNames"> - A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor's Delight:Sheer Sensuality + A-Minuit:A-Midi:A-3h:A-15h:A-16h30:A-6h:A-18h:A-9h:A-21h:Barcelone:Blizzard:Bleu mi-journée:Après-midi sur la côte:Coucher de soleil (côte):Valeur par défaut:Coucher de soleil (désert):Belle journée:Gros nuages floconneux:Brumeux:Funky Funky:Funky Funky Funky:Gelatto:Fantôme:Vérités incohérentes:Mi-journée 1:Mi-journée 2:Mi-journée 3:Mi-journée 4:Nuit:Pirate:Mauve:Rêve de navigateur:Sensualité pure </string> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_world_map.xml b/indra/newview/skins/default/xui/fr/floater_world_map.xml index 0047a3bb04..f5dab91924 100644 --- a/indra/newview/skins/default/xui/fr/floater_world_map.xml +++ b/indra/newview/skins/default/xui/fr/floater_world_map.xml @@ -19,12 +19,12 @@ <text name="land_sale_label"> Vente de terrains </text> - <text name="by_owner_label"> - propriétaire - </text> <text name="auction_label"> enchères </text> + <text name="by_owner_label"> + propriétaire + </text> <button name="Go Home" tool_tip="Me téléporter jusqu’à mon domicile"/> <text name="Home_label"> Domicile @@ -58,6 +58,9 @@ <search_editor label="Régions par nom" name="location" tool_tip="Tapez le nom d'une région"/> <button label="Trouver" name="DoSearch" tool_tip="Rechercher une région"/> <button name="Clear" tool_tip="Effacer les lignes de suivi et réinitialiser la carte"/> + <text name="events_label"> + Endroit : + </text> <button label="Téléporter" name="Teleport" tool_tip="Me téléporter à l'emplacement sélectionné"/> <button label="Copier la SLurl" name="copy_slurl" tool_tip="Copie l’emplacement actuel sous la forme d’une SLurl à utiliser sur le Web."/> <button label="Afficher la sélection" name="Show Destination" tool_tip="Centrer la carte sur l'emplacement sélectionné"/> diff --git a/indra/newview/skins/default/xui/fr/language_settings.xml b/indra/newview/skins/default/xui/fr/language_settings.xml index 117ae16ee8..bd272e1f28 100644 --- a/indra/newview/skins/default/xui/fr/language_settings.xml +++ b/indra/newview/skins/default/xui/fr/language_settings.xml @@ -17,6 +17,7 @@ datetimeToCodes["month"] = "%B"; // August datetimeToCodes["mthnum"] = "%m"; // 08 datetimeToCodes["day"] = "%d"; // 31 + datetimeToCodes["sday"] = "%-d"; // 9 datetimeToCodes["hour24"] = "%H"; // 14 datetimeToCodes["hour"] = "%H"; // 14 datetimeToCodes["hour12"] = "%I"; // 02 diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml index 3f6cd85685..4516b624b8 100644 --- a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Attachment Pie"> <menu_item_call label="Toucher" name="Attachment Object Touch"/> - <menu_item_call label="Éditer" name="Edit..."/> + <menu_item_call label="Modifier" name="Edit..."/> <menu_item_call label="Détacher" name="Detach"/> <menu_item_call label="Me lever" name="Stand Up"/> <menu_item_call label="Changer de tenue" name="Change Outfit"/> 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 4512d1bf7e..062dd0f005 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="Ajouter/Supprimer des favoris" 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_inspect_object_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml index 0ecce069bd..e2b215cbb8 100644 --- a/indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml +++ b/indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml @@ -7,7 +7,7 @@ <menu_item_call label="Prendre" name="take"/> <menu_item_call label="Prendre une copie" name="take_copy"/> <menu_item_call label="Ouvrir" name="open"/> - <menu_item_call label="Éditer" name="edit"/> + <menu_item_call label="Modifier" name="edit"/> <menu_item_call label="Porter" name="wear"/> <menu_item_call label="Signaler" name="report"/> <menu_item_call label="Ignorer" name="block"/> diff --git a/indra/newview/skins/default/xui/fr/menu_inventory.xml b/indra/newview/skins/default/xui/fr/menu_inventory.xml index 0e12ff68c6..a2279cf0ac 100644 --- a/indra/newview/skins/default/xui/fr/menu_inventory.xml +++ b/indra/newview/skins/default/xui/fr/menu_inventory.xml @@ -61,7 +61,7 @@ <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 le lien" name="Remove 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"/> @@ -79,7 +79,7 @@ <menu_item_call label="Porter" name="Wearable And Object Wear"/> <menu label="Attacher à" name="Attach To"/> <menu label="Attacher au HUD " name="Attach To HUD"/> - <menu_item_call label="Éditer" name="Wearable Edit"/> + <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="--aucune option--" name="--no options--"/> diff --git a/indra/newview/skins/default/xui/fr/menu_inventory_add.xml b/indra/newview/skins/default/xui/fr/menu_inventory_add.xml index 57b0a768c2..fe096b4a7e 100644 --- a/indra/newview/skins/default/xui/fr/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/fr/menu_inventory_add.xml @@ -5,6 +5,7 @@ <menu_item_call label="Son ([COST] L$)..." name="Upload Sound"/> <menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/> <menu_item_call label="Lot ([COST] L$ par fichier)..." name="Bulk Upload"/> + <menu_item_call label="Définir les droits de chargement par défaut" name="perm prefs"/> </menu> <menu_item_call label="Nouveau dossier" name="New Folder"/> <menu_item_call label="Nouveau script" name="New Script"/> diff --git a/indra/newview/skins/default/xui/fr/menu_picks.xml b/indra/newview/skins/default/xui/fr/menu_picks.xml index adb1cec8f5..7d7174d43c 100644 --- a/indra/newview/skins/default/xui/fr/menu_picks.xml +++ b/indra/newview/skins/default/xui/fr/menu_picks.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Picks"> <menu_item_call label="Infos" name="pick_info"/> - <menu_item_call label="Éditer" name="pick_edit"/> + <menu_item_call label="Modifier" name="pick_edit"/> <menu_item_call label="Téléporter" name="pick_teleport"/> <menu_item_call label="Carte" name="pick_map"/> <menu_item_call label="Supprimer" name="pick_delete"/> diff --git a/indra/newview/skins/default/xui/fr/menu_place.xml b/indra/newview/skins/default/xui/fr/menu_place.xml index 441b476ad2..6b0f4db752 100644 --- a/indra/newview/skins/default/xui/fr/menu_place.xml +++ b/indra/newview/skins/default/xui/fr/menu_place.xml @@ -3,5 +3,5 @@ <menu_item_call label="Enregistrer comme repère" name="landmark"/> <menu_item_call label="Créer un favori" name="pick"/> <menu_item_call label="Acheter un pass" name="pass"/> - <menu_item_call label="Éditer" name="edit"/> + <menu_item_call label="Modifier" name="edit"/> </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 ec9bee9a64..cd0e41e496 100644 --- a/indra/newview/skins/default/xui/fr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml @@ -61,8 +61,8 @@ </menu> <menu label="Construire" name="BuildTools"> <menu_item_check label="Construire" name="Show Build Tools"/> - <menu label="Sélectionner l'outil de construction" name="Select Tool"> - <menu_item_call label="Outil de zoom" name="Focus"/> + <menu label="Sélectionner un outil de construction" name="Select Tool"> + <menu_item_call label="Outil de mise au point" name="Focus"/> <menu_item_call label="Outil de déplacement" name="Move"/> <menu_item_call label="Outil de modification" name="Edit"/> <menu_item_call label="Outil de création" name="Create"/> @@ -187,8 +187,8 @@ <menu_item_check label="Joystick Flycam" name="Joystick Flycam"/> <menu_item_call label="Réinitialiser la vue" name="Reset View"/> <menu_item_call label="Regarder la dernière conversation" name="Look at Last Chatter"/> - <menu label="Sélectionner l'outil de construction" name="Select Tool"> - <menu_item_call label="Outil de zoom" name="Focus"/> + <menu label="Sélectionner un outil de construction" name="Select Tool"> + <menu_item_call label="Outil de mise au point" name="Focus"/> <menu_item_call label="Outil de déplacement" name="Move"/> <menu_item_call label="Outil de modification" name="Edit"/> <menu_item_call label="Outil de création" name="Create"/> diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index 59c978bb6b..259ac4cee6 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -909,7 +909,7 @@ Fusionner le terrain ? </notification> <notification name="CannotSaveToAssetStore"> Impossible de sauvegarder le fichier [NAME] dans la base de données centrale. -Cette erreur est généralement temporaire. Veuillez éditer et sauvegarder l'élément endossable à nouveau d'ici quelques minutes. +Cette erreur est généralement temporaire. Veuillez modifier et sauvegarder l'élément endossable à nouveau d'ici quelques minutes. </notification> <notification name="YouHaveBeenLoggedOut"> Zut. Vous avez été déconnecté(e) de [SECOND_LIFE] @@ -1683,7 +1683,7 @@ Publier cette petite annonce maintenant pour [AMOUNT] L$ ? <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> </notification> <notification label="Envoyer un message à la région" name="MessageRegion"> - Saisissez une message qui sera envoyé à tous les résidents présents dans cette région. + Saisissez un message qui sera envoyé à tous les résidents présents dans cette région. <form name="form"> <input name="message"/> <button name="OK" text="OK"/> @@ -1917,7 +1917,7 @@ Liez-la à partir d'une page web pour permettre aux autres résidents d&apo <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/> </notification> <notification name="WLNoEditDefault"> - Vous ne pouvez pas éditer ou supprimer un préréglage par défaut. + Vous ne pouvez pas modifier ou supprimer un préréglage par défaut. </notification> <notification name="WLMissingSky"> Une dossier semble manquer au Cycle du jour : [SKY]. @@ -1953,7 +1953,7 @@ Liez-la à partir d'une page web pour permettre aux autres résidents d&apo Ce préréglage existe déjà ! </notification> <notification name="WaterNoEditDefault"> - Vous ne pouvez pas éditer ou supprimer un préréglage par défaut. + Vous ne pouvez pas modifier ou supprimer un préréglage par défaut. </notification> <notification name="ChatterBoxSessionStartError"> Impossible de démarrer une nouvelle session de chat avec [RECIPIENT]. @@ -2746,7 +2746,7 @@ Départ de l'avatar [NAME] entièrement chargé. </notification> <notification name="AvatarRezSelfBakeNotification"> ([EXISTENCE] secondes d'existence) -Texture figée de [RESOLUTION] chargée pour [BODYREGION] au bout de [TIME] secondes. +Vous avez [ACTION] une texture figée de [RESOLUTION] pour [BODYREGION] au bout de [TIME] secondes. </notification> <notification name="ConfirmLeaveCall"> Voulez-vous vraiment quitter cet appel ? @@ -2784,4 +2784,7 @@ Si vous avez toujours des problèmes, veuillez consulter la page [SUPPORT_SITE]. Si vous possédez un terrain, vous pouvez le définir comme domicile. Sinon, consultez la carte et trouvez les " infohubs ". </global> + <global name="You died and have been teleported to your home location"> + Vous êtes mort et avez été téléporté à votre domicile. + </global> </notifications> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml index 4b1572b052..624026efbb 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml @@ -103,6 +103,6 @@ </panel> <panel name="button_panel"> <button label="Enregistrer sous" name="save_as_button"/> - <button label="Annuler les modifications" name="revert_button" width="130"/> + <button label="Annuler" name="revert_button" width="130"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_group_notices.xml b/indra/newview/skins/default/xui/fr/panel_group_notices.xml index 5fc1397763..3364dd9dbc 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_notices.xml @@ -21,7 +21,7 @@ Vous pouvez désactiver la réception des notices dans l'onglet Général. <text name="notice_list_none_found"> Aucun résultat </text> - <button label="Créer une notice" label_selected="Créer une notice" name="create_new_notice" tool_tip="Créer une notice"/> + <button label="Nouv. notice" label_selected="Créer une notice" name="create_new_notice" tool_tip="Créer une notice"/> <button label="Rafraîchir" label_selected="Rafraîchir la liste" name="refresh_notices" tool_tip="Actualiser la liste des notices"/> <panel label="Créer une notice" name="panel_create_new_notice"> <text name="lbl"> diff --git a/indra/newview/skins/default/xui/fr/panel_group_roles.xml b/indra/newview/skins/default/xui/fr/panel_group_roles.xml index e1eeaa8601..0bd2e0bdab 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_roles.xml @@ -12,6 +12,9 @@ Vous pouvez ajouter ou supprimer les rôles assignés aux membres. Pour sélectionner plusieurs membres, cliquez sur leurs noms en maintenant la touche Ctrl enfoncée. </panel.string> + <panel.string name="donation_area"> + [AREA] m² + </panel.string> <filter_editor label="Filtrer les membres" name="filter_input"/> <name_list name="member_list"> <name_list.columns label="Membre" name="name"/> diff --git a/indra/newview/skins/default/xui/fr/panel_landmark_info.xml b/indra/newview/skins/default/xui/fr/panel_landmark_info.xml index bd29bd676c..60507f191d 100644 --- a/indra/newview/skins/default/xui/fr/panel_landmark_info.xml +++ b/indra/newview/skins/default/xui/fr/panel_landmark_info.xml @@ -16,7 +16,7 @@ Les informations sur ce lieu ne sont pas disponibles car l'accès y est restreint. Veuillez vérifier vos droits avec le propriétaire de la parcelle. </string> <string name="acquired_date"> - [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] + [weekday,datetime,local] [sday,datetime,local] [month,datetime,local] [year,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] </string> <button name="back_btn" tool_tip="Précédent"/> <text name="title" value="Profil du lieu"/> diff --git a/indra/newview/skins/default/xui/fr/panel_landmarks.xml b/indra/newview/skins/default/xui/fr/panel_landmarks.xml index 9c15b0bbd3..9e0d08958b 100644 --- a/indra/newview/skins/default/xui/fr/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/fr/panel_landmarks.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="Landmarks"> <accordion name="landmarks_accordion"> - <accordion_tab name="tab_favorites" title="Barre des Favoris"/> + <accordion_tab name="tab_favorites" title="Barre des favoris"/> <accordion_tab name="tab_landmarks" title="Mes repères"/> <accordion_tab name="tab_inventory" title="Mon inventaire"/> <accordion_tab name="tab_library" title="Bibliothèque"/> diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml index f5847e0ee0..1b3e1c1c90 100644 --- a/indra/newview/skins/default/xui/fr/panel_login.xml +++ b/indra/newview/skins/default/xui/fr/panel_login.xml @@ -23,7 +23,7 @@ <combo_box name="start_location_combo" width="152"> <combo_box.item label="Dernier emplacement" name="MyLastLocation"/> <combo_box.item label="Domicile" name="MyHome"/> - <combo_box.item label="<Saisissez le nom de la région>" name="Typeregionname"/> + <combo_box.item label="<Saisir le nom de la région>" name="Typeregionname"/> </combo_box> </layout_panel> <layout_panel name="links"> diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_media.xml b/indra/newview/skins/default/xui/fr/panel_nearby_media.xml index 36388b0bc1..66bfd01a2a 100644 --- a/indra/newview/skins/default/xui/fr/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/fr/panel_nearby_media.xml @@ -23,6 +23,12 @@ <button label="Plus >>" label_selected="Moins <<" name="less_btn" tool_tip="Options avancées"/> </panel> <panel name="nearby_media_panel"> + <text name="nearby_media_title"> + Médias proches + </text> + <text name="show_text"> + Voir : + </text> <combo_box name="show_combo"> <combo_box.item label="Tout" name="All"/> <combo_box.item label="Sur cette parcelle" name="WithinParcel"/> @@ -36,7 +42,7 @@ <scroll_list.columns label="Nom" name="media_name"/> <scroll_list.columns label="Débogage" name="media_debug"/> </scroll_list> - <panel> + <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> <button name="stop_btn" tool_tip="Arrêter le média sélectionné"/> diff --git a/indra/newview/skins/default/xui/fr/panel_pick_info.xml b/indra/newview/skins/default/xui/fr/panel_pick_info.xml index e9572caac7..3ca1e9a21b 100644 --- a/indra/newview/skins/default/xui/fr/panel_pick_info.xml +++ b/indra/newview/skins/default/xui/fr/panel_pick_info.xml @@ -11,6 +11,6 @@ <panel name="buttons"> <button label="Téléporter" name="teleport_btn"/> <button label="Carte" name="show_on_map_btn"/> - <button label="Éditer" name="edit_btn"/> + <button label="Modifier" name="edit_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_places.xml b/indra/newview/skins/default/xui/fr/panel_places.xml index efb06cfce9..52a69db23c 100644 --- a/indra/newview/skins/default/xui/fr/panel_places.xml +++ b/indra/newview/skins/default/xui/fr/panel_places.xml @@ -6,7 +6,7 @@ <panel name="button_panel"> <button label="Téléporter" name="teleport_btn" tool_tip="Me téléporter jusqu'à la zone sélectionnée"/> <button label="Carte" name="map_btn" tool_tip="Afficher la zone correspondante sur la carte du monde"/> - <button label="Éditer" name="edit_btn" tool_tip="Modifier les informations du repère"/> + <button label="Modifier" name="edit_btn" tool_tip="Modifier les informations du repère"/> <button label="▼" name="overflow_btn" tool_tip="Afficher d'autres options"/> <button label="Enregistrer" name="save_btn"/> <button label="Annuler" name="cancel_btn"/> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml index c9676c898b..b82d8bcd18 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml @@ -11,8 +11,8 @@ <check_box label="Activé" name="enable_media"/> <slider label="Chat vocal" name="Voice Volume"/> <check_box label="Activé" name="enable_voice_check"/> - <check_box label="Autoriser la lecture automatique du média" name="media_auto_play_btn" tool_tip="Cochez pour autoriser la lecture automatique du média"/> - <check_box label="Jouer le média aux autres avatars" name="media_show_on_others_btn" tool_tip="Décochez pour masquer le média aux autres avatars près de vous"/> + <check_box label="Autoriser la lecture automatique du média" name="media_auto_play_btn" tool_tip="Cochez pour autoriser la lecture automatique du média" value="true"/> + <check_box label="Jouer le média aux autres avatars" name="media_show_on_others_btn" tool_tip="Décochez pour masquer le média aux autres avatars près de vous" value="true"/> <text name="voice_chat_settings"> Paramètres du chat vocal </text> @@ -28,6 +28,12 @@ <panel.string name="default_text"> Défaut </panel.string> + <panel.string name="default system device"> + Périphérique système par défaut + </panel.string> + <panel.string name="no device"> + Aucun périphérique + </panel.string> <text name="Input"> Entrée </text> diff --git a/indra/newview/skins/default/xui/fr/panel_script_ed.xml b/indra/newview/skins/default/xui/fr/panel_script_ed.xml index ea161ecae8..3b3b676aa1 100644 --- a/indra/newview/skins/default/xui/fr/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/fr/panel_script_ed.xml @@ -25,7 +25,7 @@ <menu_item_call label="Enregistrer" name="Save"/> <menu_item_call label="Annuler tous les changements" name="Revert All Changes"/> </menu> - <menu label="Éditer" name="Edit"> + <menu label="Modifier" name="Edit"> <menu_item_call label="Annuler" name="Undo"/> <menu_item_call label="Refaire" name="Redo"/> <menu_item_call label="Couper" name="Cut"/> diff --git a/indra/newview/skins/default/xui/fr/panel_status_bar.xml b/indra/newview/skins/default/xui/fr/panel_status_bar.xml index 3c56fa68e7..85429a18c7 100644 --- a/indra/newview/skins/default/xui/fr/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/fr/panel_status_bar.xml @@ -16,7 +16,7 @@ [hour12, datetime, slt]:[min, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt] </panel.string> <panel.string name="timeTooltip"> - [weekday, datetime, slt], [day, datetime, slt] [month, datetime, slt] [year, datetime, slt] + [weekday, datetime, slt] [sday, datetime, slt] [month, datetime, slt] [year, datetime, slt] </panel.string> <panel.string name="buycurrencylabel"> [AMT] L$ diff --git a/indra/newview/skins/default/xui/fr/panel_teleport_history.xml b/indra/newview/skins/default/xui/fr/panel_teleport_history.xml index bfd7a869c5..1586c201da 100644 --- a/indra/newview/skins/default/xui/fr/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/fr/panel_teleport_history.xml @@ -1,6 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="Teleport History"> <accordion name="history_accordion"> + <no_matched_tabs_text name="no_matched_teleports_msg" value="Vous n'avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/places/Rechercher [SEARCH_TERM]]."/> + <no_visible_tabs_text name="no_teleports_msg" value="L'historique des téléportations est vide. Essayez [secondlife:///app/search/places/ Rechercher]."/> <accordion_tab name="today" title="Aujourd'hui"/> <accordion_tab name="yesterday" title="Hier"/> <accordion_tab name="2_days_ago" title="Il y a 2 jours"/> diff --git a/indra/newview/skins/default/xui/fr/role_actions.xml b/indra/newview/skins/default/xui/fr/role_actions.xml index c91bbbcf51..d731fa6896 100644 --- a/indra/newview/skins/default/xui/fr/role_actions.xml +++ b/indra/newview/skins/default/xui/fr/role_actions.xml @@ -3,7 +3,7 @@ <action_set description="Ces pouvoirs permettent d'ajouter et de supprimer des membres du groupe et permettent aux nouveaux membres de rejoindre le groupe sans recevoir d'invitation." name="Membership"> <action description="Inviter des membres dans ce groupe" longdescription="Invitez des personnes à rejoindre ce groupe en utilisant le bouton Inviter dans l'onglet Membres de la section Rôles." name="member invite" value="1"/> <action description="Expulser des membres du groupe" longdescription="Expulsez des personnes de ce groupe en utilisant le bouton Expulser dans l'onglet Membres de la section Rôles. Un propriétaire peut expulser tout le monde à l'exception des autres propriétaires. Si vous n'êtes pas propriétaire, vous pouvez expulser un membre d'un groupe uniquement si il n'a que le rôle Tous et AUCUN autre rôle. Pour supprimer des membres des rôles, vous devez disposer du pouvoir correspondant." name="member eject" value="2"/> - <action description="Activer Inscription libre et modifiez les frais d'inscription" longdescription="Activez Inscription libre pour permettre aux nouveaux membres de s'inscrire sans invitation, et changez les frais d'inscription dans la section Général." name="member options" value="3"/> + <action description="Activer Inscription libre et modifier les frais d'inscription" longdescription="Activez Inscription libre pour permettre aux nouveaux membres de s'inscrire sans invitation, et changez les frais d'inscription dans la section Général." name="member options" value="3"/> </action_set> <action_set description="Ces pouvoirs permettent d'ajouter, de supprimer et de modifier les rôles dans le groupe et d'y assigner des membres et des pouvoirs." name="Roles"> <action description="Créer des rôles" longdescription="Créez de nouveaux rôles dans l'onglet Rôles de la section Rôles." name="role create" value="4"/> diff --git a/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml b/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml index 0a5680fe06..77c6f4877c 100644 --- a/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml @@ -23,9 +23,9 @@ </panel.string> <text name="title" value="Profil de l'article"/> <text name="origin" value="(inventaire)"/> - <panel label=""> + <panel label="" name="item_profile"> <text name="LabelItemNameTitle"> - Nom : + Nom : </text> <text name="LabelItemDescTitle"> Description : @@ -36,12 +36,12 @@ <text name="LabelCreatorName"/> <button label="Profil" name="BtnCreator"/> <text name="LabelOwnerTitle"> - Propriétaire : + Propriétaire : </text> <text name="LabelOwnerName"/> <button label="Profil" name="BtnOwner"/> <text name="LabelAcquiredTitle"> - Acquis : + Acquis le : </text> <text name="LabelAcquiredDate"/> <panel name="perms_inv"> @@ -52,26 +52,26 @@ <check_box label="Copier" name="CheckOwnerCopy"/> <check_box label="Transférer" name="CheckOwnerTransfer"/> <text name="AnyoneLabel"> - N'importe qui : + N'importe qui : </text> <check_box label="Copier" name="CheckEveryoneCopy"/> <text name="GroupLabel"> - Groupe : + Groupe : </text> - <check_box label="Partager" name="CheckShareWithGroup" tool_tip="Autorisez tous les membres du groupe choisi à utiliser et à partager vos droits pour cet objet. Pour activer les restrictions de rôles, vous devez d'abord cliquer sur Transférer."/> + <check_box label="Partager" name="CheckShareWithGroup" tool_tip="Autoriser tous les membres du groupe choisi à partager vos droits de modification pour cet objet. Pour activer les restrictions de rôles, vous devez d'abord cliquer sur Céder."/> <text name="NextOwnerLabel"> - Le prochain propriétaire : + Prochain propriétaire : </text> <check_box label="Modifier" name="CheckNextOwnerModify"/> <check_box label="Copier" name="CheckNextOwnerCopy"/> - <check_box label="Transférer" name="CheckNextOwnerTransfer" tool_tip="Le prochain propriétaire peut donner ou revendre cet objet"/> + <check_box label="Transférer" name="CheckNextOwnerTransfer" tool_tip="Le prochain propriétaire peut donner ou revendre cet objet."/> </panel> <check_box label="À vendre" name="CheckPurchase"/> <combo_box name="combobox sale copy"> <combo_box.item label="Copier" name="Copy"/> <combo_box.item label="Original" name="Original"/> </combo_box> - <spinner label="Prix : L$" name="Edit Cost"/> + <spinner label="Prix : L$" name="Edit Cost"/> </panel> <panel name="button_panel"> <button label="Annuler" name="cancel_btn"/> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index f8da908cff..1204d3325a 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -196,6 +196,7 @@ <string name="TooltipMustSingleDrop"> Impossible de faire glisser plus d'un objet ici </string> + <string name="TooltipPrice" value="[AMOUNT] L$ :"/> <string name="TooltipHttpUrl"> Cliquez pour afficher cette page web </string> @@ -248,7 +249,6 @@ Cliquez pour exécuter la commande secondlife:// command </string> <string name="CurrentURL" value=" URL actuelle : [CurrentURL]"/> - <string name="TooltipPrice" value="[AMOUNT]L$: "/> <string name="SLurlLabelTeleport"> Me téléporter vers </string> @@ -415,7 +415,7 @@ image targa </string> <string name="trash"> - Poubelle + Corbeille </string> <string name="jpeg image"> image jpeg @@ -541,7 +541,7 @@ Va te faire voir ! </string> <string name="anim_express_kiss"> - Baiser + Envoyer un baiser </string> <string name="anim_laugh_short"> Rire @@ -663,6 +663,9 @@ <string name="worldmap_offline"> Hors ligne </string> + <string name="worldmap_item_tooltip_format"> + [AREA] m² [PRICE] L$ + </string> <string name="worldmap_results_none_found"> Aucun résultat. </string> @@ -906,12 +909,57 @@ <string name="invalid_not_worn"> non valide </string> + <string name="create_new_shape"> + Créer une nouvelle silhouette + </string> + <string name="create_new_skin"> + Créer une nouvelle peau + </string> + <string name="create_new_hair"> + Créer de nouveaux cheveux + </string> + <string name="create_new_eyes"> + Créer de nouveaux yeux + </string> + <string name="create_new_shirt"> + Créer une nouvelle chemise + </string> + <string name="create_new_pants"> + Créer un nouveau pantalon + </string> + <string name="create_new_shoes"> + Créer de nouvelles chaussures + </string> + <string name="create_new_socks"> + Créer de nouvelles chaussettes + </string> + <string name="create_new_jacket"> + Créer une nouvelle veste + </string> + <string name="create_new_gloves"> + Créer de nouveaux gants + </string> + <string name="create_new_undershirt"> + Créer un nouveau débardeur + </string> + <string name="create_new_underpants"> + Créer un nouveau caleçon + </string> + <string name="create_new_skirt"> + Créer une nouvelle jupe + </string> + <string name="create_new_alpha"> + Créer un nouvel alpha + </string> + <string name="create_new_tattoo"> + Créer un nouveau tatouage + </string> + <string name="create_new_invalid"> + non valide + </string> <string name="NewWearable"> Nouv. [WEARABLE_ITEM] </string> - <string name="CreateNewWearable"> - Créer [WEARABLE_TYPE] - </string> <string name="next"> Suivant </string> @@ -1016,6 +1064,7 @@ <string name="AnimFlagStop" value=" Arrêter l'animation :"/> <string name="AnimFlagStart" value=" Démarrer l'animation :"/> <string name="Wave" value=" Faire signe"/> + <string name="GestureActionNone" value="Aucune"/> <string name="HelloAvatar" value=" Bonjour, avatar !"/> <string name="ViewAllGestures" value=" Tout afficher >>"/> <string name="GetMoreGestures" value="Plus >>"/> @@ -1078,7 +1127,7 @@ Parties du corps </string> <string name="InvFolder Trash"> - Poubelle + Corbeille </string> <string name="InvFolder Photo Album"> Albums photo @@ -1101,6 +1150,9 @@ <string name="InvFolder Current Outfit"> Tenue actuelle </string> + <string name="InvFolder Initial Outfits"> + Tenues initiales + </string> <string name="InvFolder My Outfits"> Mes tenues </string> @@ -1420,11 +1472,12 @@ <string name="SummaryForTheWeek" value="Récapitulatif de la semaine, début le "/> <string name="NextStipendDay" value="Prochaine prime le "/> <string name="GroupIndividualShare" value=" Groupe Part individuelle"/> + <string name="GroupColumn" value="Groupe"/> <string name="Balance"> Solde </string> <string name="Credits"> - Remerciements + Crédits </string> <string name="Debits"> Débits @@ -1745,7 +1798,7 @@ Solde </string> <string name="GroupMoneyCredits"> - Remerciements + Crédits </string> <string name="GroupMoneyDebits"> Débits @@ -3634,6 +3687,9 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE]. <string name="group_role_owners"> Propriétaires </string> + <string name="group_member_status_online"> + En ligne + </string> <string name="uploading_abuse_report"> Chargement en cours... @@ -3687,9 +3743,15 @@ de l'infraction signalée <string name="Invalid Wearable"> Objet à porter non valide </string> + <string name="New Gesture"> + Nouveau geste + </string> <string name="New Script"> Nouveau script </string> + <string name="New Note"> + Nouvelle note + </string> <string name="New Folder"> Nouveau dossier </string> @@ -3718,7 +3780,7 @@ de l'infraction signalée Homme - Demander pardon </string> <string name="Male - Get lost"> - Homme - Dire d'aller au diable + Homme - Get lost </string> <string name="Male - Blow kiss"> Homme - Envoyer un baiser @@ -3747,11 +3809,20 @@ de l'infraction signalée <string name="Male - Wow"> Homme - Ouah ! </string> + <string name="Female - Chuckle"> + Femme - Glousser + </string> + <string name="Female - Cry"> + Femme - Pleurer + </string> + <string name="Female - Embarrassed"> + Femme - Gêne + </string> <string name="Female - Excuse me"> Femme - Demander pardon </string> <string name="Female - Get lost"> - Femme - Dire d'aller au diable + Femme - Get lost </string> <string name="Female - Blow kiss"> Femme - Envoyer un baiser @@ -3765,9 +3836,21 @@ de l'infraction signalée <string name="Female - Hey"> Femme - Hé ! </string> + <string name="Female - Hey baby"> + Femme - Hey baby + </string> <string name="Female - Laugh"> Femme - Rire </string> + <string name="Female - Looking good"> + Femme - Looking good + </string> + <string name="Female - Over here"> + Femme - Over here + </string> + <string name="Female - Please"> + Femme - Please + </string> <string name="Female - Repulsed"> Femme - Dégoût </string> @@ -3817,4 +3900,46 @@ de l'infraction signalée <string name="dateTimePM"> PM </string> + <string name="LocalEstimateUSD"> + [AMOUNT] US$ + </string> + <string name="Membership"> + Inscription + </string> + <string name="Roles"> + Rôles + </string> + <string name="Group Identity"> + Identité du groupe + </string> + <string name="Parcel Management"> + Gestion des parcelles + </string> + <string name="Parcel Identity"> + Identité des parcelles + </string> + <string name="Parcel Settings"> + Paramètres des parcelles + </string> + <string name="Parcel Powers"> + Pouvoirs sur les parcelles + </string> + <string name="Parcel Access"> + Accès aux parcelles + </string> + <string name="Parcel Content"> + Contenu des parcelles + </string> + <string name="Object Management"> + Gestion des objets + </string> + <string name="Accounting"> + Comptabilité + </string> + <string name="Notices"> + Notices + </string> + <string name="Chat"> + Chat + </string> </strings> diff --git a/indra/newview/skins/default/xui/it/floater_camera.xml b/indra/newview/skins/default/xui/it/floater_camera.xml index f524bf9874..3fdf4f48a2 100644 --- a/indra/newview/skins/default/xui/it/floater_camera.xml +++ b/indra/newview/skins/default/xui/it/floater_camera.xml @@ -22,6 +22,35 @@ Vedi oggetto </floater.string> <panel name="controls"> + <panel name="preset_views_list"> + <panel_camera_item name="front_view"> + <panel_camera_item.text name="front_view_text"> + Visuale frontale + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="group_view"> + <panel_camera_item.text name="side_view_text"> + Visuale laterale + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="rear_view"> + <panel_camera_item.text name="rear_view_text"> + Visuale posteriore + </panel_camera_item.text> + </panel_camera_item> + </panel> + <panel name="camera_modes_list"> + <panel_camera_item name="object_view"> + <panel_camera_item.text name="object_view_text"> + Visuale oggetto + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="mouselook_view"> + <panel_camera_item.text name="mouselook_view_text"> + Visuale soggettiva + </panel_camera_item.text> + </panel_camera_item> + </panel> <panel name="zoom" tool_tip="Avvicina la telecamera nell'inquadratura"> <joystick_rotate name="cam_rotate_stick" tool_tip="Ruota la visuale intorno al punto focale"/> <slider_bar name="zoom_slider" tool_tip="Zoom verso il centro focale"/> diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture.xml index cc9d42b3cb..7e29db6336 100644 --- a/indra/newview/skins/default/xui/it/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/it/floater_preview_gesture.xml @@ -30,19 +30,24 @@ <text name="trigger_label"> Parole chiave: </text> - <text left="208" name="replace_text" tool_tip="Sostituisci le parole chiave con questi termini. Per esempio, sostituire la parola chiave 'salve' con 'ciao' modificherà la chat 'Volevo solo dire salve' in 'Volevo solo dire ciao' e avvierà la gesture!"> + <text name="replace_text" tool_tip="Sostituisci le parole chiave con questi termini. Per esempio, sostituire la parola chiave 'salve' con 'ciao' modificherà la chat 'Volevo solo dire salve' in 'Volevo solo dire ciao' e avvierà la gesture!"> Sostituisci con: </text> <line_editor name="replace_editor" tool_tip="Sostituisci le parole chiave con questi termini. Per esempio, sostituire la parola chiave 'salve' con 'ciao' modificherà la chat 'Volevo solo dire salve' in 'Volevo solo dire ciao' e avvierà la gesture!"/> <text name="key_label"> Scorciatoia da tastiera: </text> - <combo_box label="Nessuno" left="156" name="modifier_combo" width="76"/> - <combo_box label="Nessuno" left_delta="80" name="key_combo" width="76"/> + <combo_box label="Nessuno" name="modifier_combo" /> + <combo_box label="Nessuno" name="key_combo" /> <text name="library_label"> Libreria: </text> - <scroll_list name="library_list"/> + <scroll_list name="library_list"> + <scroll_list.rows name="action_animation" value="Animazione"/> + <scroll_list.rows name="action_sound" value="Suono"/> + <scroll_list.rows name="action_chat" value="Chat"/> + <scroll_list.rows name="action_wait" value="Attendi"/> + </scroll_list> <button label="Aggiungi >>" name="add_btn"/> <text name="steps_label"> Fasi: @@ -57,9 +62,9 @@ <radio_item label="Attiva" name="start"/> <radio_item label="Ferma" name="stop"/> </radio_group> - <check_box label="finché le animazioni sono eseguite" left="226" name="wait_anim_check"/> + <check_box label="finché le animazioni sono eseguite" name="wait_anim_check"/> <check_box label="durata in secondi:" name="wait_time_check"/> - <line_editor left_delta="114" name="wait_time_editor"/> + <line_editor name="wait_time_editor"/> <text name="help_label"> Tutte le fasi avvengono contemporaneamente, a meno che non aggiungi fasi di attesa. </text> diff --git a/indra/newview/skins/default/xui/it/floater_world_map.xml b/indra/newview/skins/default/xui/it/floater_world_map.xml index a6bd4ffbaf..8da17a4034 100644 --- a/indra/newview/skins/default/xui/it/floater_world_map.xml +++ b/indra/newview/skins/default/xui/it/floater_world_map.xml @@ -19,12 +19,12 @@ <text name="land_sale_label"> Vendita terreno </text> - <text name="by_owner_label"> - da parte del proprietario - </text> <text name="auction_label"> asta di terreni </text> + <text name="by_owner_label"> + da parte del proprietario + </text> <button name="Go Home" tool_tip="Teleport a casa"/> <text name="Home_label"> Home @@ -35,7 +35,7 @@ <text name="pg_label"> Generale </text> - <check_box name="events_mature_chk"/> + <check_box initial_value="true" name="events_mature_chk"/> <text name="events_mature_label"> Moderato </text> @@ -58,6 +58,9 @@ <search_editor label="Regioni secondo il nome" name="location" tool_tip="Digita il nome di una regione"/> <button label="Trova" name="DoSearch" tool_tip="Cerca la regione"/> <button name="Clear" tool_tip="Elimina le linee di monitoraggio e reimposta la mappa"/> + <text name="events_label"> + Luogo: + </text> <button label="Teleport" name="Teleport" tool_tip="Teleport al luogo selezionato"/> <button label="Copia SLurl" name="copy_slurl" tool_tip="Copia la posizione attuale come un SLurl da usare nel Web."/> <button label="Mostra la selezione" name="Show Destination" tool_tip="Centra la mappa sul luogo selezionato"/> diff --git a/indra/newview/skins/default/xui/it/language_settings.xml b/indra/newview/skins/default/xui/it/language_settings.xml index 82cf789a6b..312b8e21aa 100644 --- a/indra/newview/skins/default/xui/it/language_settings.xml +++ b/indra/newview/skins/default/xui/it/language_settings.xml @@ -17,6 +17,7 @@ datetimeToCodes["month"] = "%B"; // August datetimeToCodes["mthnum"] = "%m"; // 08 datetimeToCodes["day"] = "%d"; // 31 + datetimeToCodes["sday"] = "%-d"; // 9 datetimeToCodes["hour24"] = "%H"; // 14 datetimeToCodes["hour"] = "%H"; // 14 datetimeToCodes["hour12"] = "%I"; // 02 diff --git a/indra/newview/skins/default/xui/it/menu_inventory.xml b/indra/newview/skins/default/xui/it/menu_inventory.xml index 0f879ad9cc..f2eb8b1bf7 100644 --- a/indra/newview/skins/default/xui/it/menu_inventory.xml +++ b/indra/newview/skins/default/xui/it/menu_inventory.xml @@ -61,7 +61,7 @@ <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="Rimuovi link" name="Remove 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"/> diff --git a/indra/newview/skins/default/xui/it/menu_inventory_add.xml b/indra/newview/skins/default/xui/it/menu_inventory_add.xml index 05f53f44ba..5e61625f84 100644 --- a/indra/newview/skins/default/xui/it/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/it/menu_inventory_add.xml @@ -5,6 +5,7 @@ <menu_item_call label="Suono ([COST]L$)..." name="Upload Sound"/> <menu_item_call label="Animazione ([COST]L$)..." name="Upload Animation"/> <menu_item_call label="In blocco ([COST]L$ per file)..." name="Bulk Upload"/> + <menu_item_call label="Definisci diritti di caricamento predefiniti" name="perm prefs"/> </menu> <menu_item_call label="Nuova cartella" name="New Folder"/> <menu_item_call label="Nuovo script" name="New Script"/> diff --git a/indra/newview/skins/default/xui/it/menu_object.xml b/indra/newview/skins/default/xui/it/menu_object.xml index 237b6b3a0e..81f27ab8fa 100644 --- a/indra/newview/skins/default/xui/it/menu_object.xml +++ b/indra/newview/skins/default/xui/it/menu_object.xml @@ -1,6 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Object Pie"> - <menu_item_call label="Tocca" name="Object Touch"/> + <menu_item_call label="Tocca" name="Object Touch"> + <on_enable parameter="Tocca" name="EnableTouch"/> + </menu_item_call> <menu_item_call label="Modifica" name="Edit..."/> <menu_item_call label="Costruisci" name="Build"/> <menu_item_call label="Apri" name="Open"/> diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml index 44b8211bdb..474bdca55f 100644 --- a/indra/newview/skins/default/xui/it/notifications.xml +++ b/indra/newview/skins/default/xui/it/notifications.xml @@ -2749,7 +2749,7 @@ Avatar '[NAME]' è partito completamente caricato. </notification> <notification name="AvatarRezSelfBakeNotification"> ( in esistenza da [EXISTENCE] secondi ) -Hai caricato una texture [RESOLUTION] completata per '[BODYREGION]' dopo [TIME] secondi. +Effettuata l'azione: [ACTION] di una texture [RESOLUTION] completata per '[BODYREGION]' dopo [TIME] secondi. </notification> <notification name="ConfirmLeaveCall"> Sei sicuro di volere uscire dalla chiamata? @@ -2787,4 +2787,7 @@ Se continui ad avere problemi, visita la pagina [SUPPORT_SITE]. Se sei proprietario di un appezzamento di terreno, puoi definirlo come la tua posizione iniziale. In alternativa, puoi guardare sulla mappa e trovare luoghi segnalati come "Infohub". </global> + <global name="You died and have been teleported to your home location"> + Sei deceduto e sei stato teleportato a casa tua. + </global> </notifications> diff --git a/indra/newview/skins/default/xui/it/panel_group_notices.xml b/indra/newview/skins/default/xui/it/panel_group_notices.xml index 8dd945830e..2e2f0dc7b0 100644 --- a/indra/newview/skins/default/xui/it/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/it/panel_group_notices.xml @@ -19,7 +19,7 @@ Massimo 200 per gruppo al giorno <text name="notice_list_none_found"> Nessuno trovato </text> - <button label="Crea un nuovo avviso" label_selected="Crea una nuova notice" name="create_new_notice" tool_tip="Crea un nuovo avviso"/> + <button label="Nuovo avviso" label_selected="Crea una nuova notice" name="create_new_notice" tool_tip="Crea un nuovo avviso"/> <button label="Aggiorna" label_selected="Aggiorna l'elenco" name="refresh_notices" tool_tip="Aggiorna la lista degli avvisi"/> <panel label="Crea una nuova notice" name="panel_create_new_notice"> <text name="lbl"> diff --git a/indra/newview/skins/default/xui/it/panel_group_roles.xml b/indra/newview/skins/default/xui/it/panel_group_roles.xml index 1769ef748d..478b35e628 100644 --- a/indra/newview/skins/default/xui/it/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/it/panel_group_roles.xml @@ -13,6 +13,9 @@ Seleziona più membri tenendo premuto il tasto Ctrl e cliccando sui loro nomi. </panel.string> + <panel.string name="donation_area"> + [AREA] m² + </panel.string> <filter_editor label="Filtra Membri" name="filter_input"/> <name_list name="member_list"> <name_list.columns label="Socio" name="name"/> @@ -66,21 +69,15 @@ in questo gruppo. C'è una vasta gamma di abilità. <text name="static"> Nome del ruolo </text> - <line_editor name="role_name"> - Addetti - </line_editor> + <line_editor name="role_name"/> <text name="static3"> Titolo del ruolo </text> - <line_editor name="role_title"> - (attendi) - </line_editor> + <line_editor name="role_title"/> <text name="static2"> Descrizione </text> - <text_editor name="role_description"> - (attendi) - </text_editor> + <text_editor name="role_description"/> <text name="static4"> Ruoli assegnati </text> @@ -91,9 +88,6 @@ in questo gruppo. C'è una vasta gamma di abilità. <scroll_list name="role_allowed_actions" tool_tip="Per i dettagli di ogni abilità consentita vedi la scheda abilità."/> </panel> <panel name="actions_footer"> - <text name="static"> - Descrizione abilità - </text> <text_editor name="action_description"> Questa abilità è 'Espelli i membri dal gruppo'. Solo un Capogruppo puo espellere un'altro Capogruppo. </text_editor> diff --git a/indra/newview/skins/default/xui/it/panel_nearby_media.xml b/indra/newview/skins/default/xui/it/panel_nearby_media.xml index 01e21d520a..40312f76b4 100644 --- a/indra/newview/skins/default/xui/it/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/it/panel_nearby_media.xml @@ -23,6 +23,12 @@ <button label="Più >>" label_selected="Meno <<" name="less_btn" tool_tip="Opzioni avanzate"/> </panel> <panel name="nearby_media_panel"> + <text name="nearby_media_title"> + Multimedia vicini + </text> + <text name="show_text"> + Mostra: + </text> <combo_box name="show_combo"> <combo_box.item label="Tutto" name="All"/> <combo_box.item label="In questo lotto" name="WithinParcel"/> @@ -36,7 +42,7 @@ <scroll_list.columns label="Nome" name="media_name"/> <scroll_list.columns label="Debug" name="media_debug"/> </scroll_list> - <panel> + <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> <button name="stop_btn" tool_tip="Interrompi supporto selezionato"/> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml index 9f8a13fedc..2ddb226020 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml @@ -11,8 +11,8 @@ <check_box label="Abilitato" name="enable_media"/> <slider label="Chat vocale" name="Voice Volume"/> <check_box label="Abilitato" name="enable_voice_check"/> - <check_box label="Consenti riproduzione multimediale automatica" name="media_auto_play_btn" tool_tip="Seleziona qui per consentire la riproduzione multimediale automatica"/> - <check_box label="Riproduci media in uso da altri avatar" name="media_show_on_others_btn" tool_tip="Deseleziona qui per nascondere i media in uso dagli altri avatar nei dintorni"/> + <check_box label="Consenti riproduzione multimediale automatica" name="media_auto_play_btn" tool_tip="Seleziona qui per consentire la riproduzione multimediale automatica" value="true"/> + <check_box label="Riproduci media in uso da altri avatar" name="media_show_on_others_btn" tool_tip="Deseleziona qui per nascondere i media in uso dagli altri avatar nei dintorni" value="true"/> <text name="voice_chat_settings"> Impostazioni Chat vocale </text> @@ -28,6 +28,12 @@ <panel.string name="default_text"> Predefinito </panel.string> + <panel.string name="default system device"> + Dispositivo di sistema predefinito + </panel.string> + <panel.string name="no device"> + Nessun dispositivo + </panel.string> <text name="Input"> Input </text> diff --git a/indra/newview/skins/default/xui/it/panel_teleport_history.xml b/indra/newview/skins/default/xui/it/panel_teleport_history.xml index 85f8f87e68..f4fa59babe 100644 --- a/indra/newview/skins/default/xui/it/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/it/panel_teleport_history.xml @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="Teleport History"> <accordion name="history_accordion"> + <no_matched_tabs_text name="no_matched_teleports_msg" value="Non riesci a trovare quello che cerchi? Prova [secondlife:///app/search/places/[SEARCH_TERM] Cerca]."/> + <no_visible_tabs_text name="no_teleports_msg" value="La cronologia dei teleport è vuota. Prova [secondlife:///app/search/places/ Cerca]."/> <accordion_tab name="today" title="Oggi"/> <accordion_tab name="yesterday" title="Ieri"/> <accordion_tab name="2_days_ago" title="2 giorni fa"/> - 5 <accordion_tab name="3_days_ago" title="3 giorni fa"/> <accordion_tab name="4_days_ago" title="4 giorni fa"/> <accordion_tab name="5_days_ago" title="5 giorni fa"/> diff --git a/indra/newview/skins/default/xui/it/sidepanel_item_info.xml b/indra/newview/skins/default/xui/it/sidepanel_item_info.xml index d0ec943e67..6f650ea55d 100644 --- a/indra/newview/skins/default/xui/it/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/it/sidepanel_item_info.xml @@ -23,7 +23,7 @@ </panel.string> <text name="title" value="Profilo articolo"/> <text name="origin" value="(Inventario)"/> - <panel label=""> + <panel label="" name="item_profile"> <text name="LabelItemNameTitle"> Nome: </text> diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index 52fbd87420..fb479b4653 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -190,6 +190,7 @@ <string name="TooltipMustSingleDrop"> Solo un singolo oggetto può essere creato qui </string> + <string name="TooltipPrice" value="L$ [AMOUNT]:"/> <string name="TooltipHttpUrl"> Clicca per visitare questa pagina web </string> @@ -242,7 +243,6 @@ Clicca per avviare il comando secondlife:// </string> <string name="CurrentURL" value="URL attuale: [CurrentURL]"/> - <string name="TooltipPrice" value="L$[AMOUNT]: "/> <string name="SLurlLabelTeleport"> Teleportati a </string> @@ -651,6 +651,9 @@ <string name="worldmap_offline"> Offline </string> + <string name="worldmap_item_tooltip_format"> + L$ [PRICE] - [AREA] m² + </string> <string name="worldmap_results_none_found"> Nessun risultato. </string> @@ -891,12 +894,57 @@ <string name="invalid_not_worn"> non valido </string> + <string name="create_new_shape"> + Crea nuova figura corporea + </string> + <string name="create_new_skin"> + Crea nuova pelle + </string> + <string name="create_new_hair"> + Crea nuovi capelli + </string> + <string name="create_new_eyes"> + Crea nuovi occhi + </string> + <string name="create_new_shirt"> + Crea nuova camicia + </string> + <string name="create_new_pants"> + Crea nuovi pantaloni + </string> + <string name="create_new_shoes"> + Crea nuove scarpe + </string> + <string name="create_new_socks"> + Crea nuove calze + </string> + <string name="create_new_jacket"> + Crea nuova giacca + </string> + <string name="create_new_gloves"> + Crea nuovi guanti + </string> + <string name="create_new_undershirt"> + Crea nuova maglietta intima + </string> + <string name="create_new_underpants"> + Crea nuovi slip + </string> + <string name="create_new_skirt"> + Crea nuova gonna + </string> + <string name="create_new_alpha"> + Crea nuovo Alpha + </string> + <string name="create_new_tattoo"> + Crea un nuovo tatuaggio + </string> + <string name="create_new_invalid"> + non valido + </string> <string name="NewWearable"> Nuovo [WEARABLE_ITEM] </string> - <string name="CreateNewWearable"> - Crea [WEARABLE_TYPE] - </string> <string name="next"> Avanti </string> @@ -995,6 +1043,7 @@ <string name="AnimFlagStop" value="Ferma l'animazione :"/> <string name="AnimFlagStart" value="Inizia l'animazione :"/> <string name="Wave" value="Saluta con la mano"/> + <string name="GestureActionNone" value="Nessuna"/> <string name="HelloAvatar" value="Ciao, avatar!"/> <string name="ViewAllGestures" value="Visualizza tutto >>"/> <string name="GetMoreGestures" value="Altre >>"/> @@ -1080,6 +1129,9 @@ <string name="InvFolder Current Outfit"> Abbigliamento attuale </string> + <string name="InvFolder Initial Outfits"> + Vestiario iniziale + </string> <string name="InvFolder My Outfits"> Il mio vestiario </string> @@ -1399,6 +1451,7 @@ <string name="SummaryForTheWeek" value="Riassunto della settimana, partendo dal"/> <string name="NextStipendDay" value="Il prossimo giorno di stipendio è"/> <string name="GroupIndividualShare" value="Gruppo Dividendi individuali"/> + <string name="GroupColumn" value="Gruppo"/> <string name="Balance"> Saldo </string> @@ -3538,6 +3591,9 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="group_role_owners"> Proprietari </string> + <string name="group_member_status_online"> + Online + </string> <string name="uploading_abuse_report"> Caricamento in corso... @@ -3591,9 +3647,15 @@ Segnala abuso <string name="Invalid Wearable"> Capo da indossare non valido </string> + <string name="New Gesture"> + Nuova gesture + </string> <string name="New Script"> Nuovo script </string> + <string name="New Note"> + Nuovo appunto + </string> <string name="New Folder"> Nuova cartella </string> @@ -3651,6 +3713,15 @@ Segnala abuso <string name="Male - Wow"> Maschio - Accipicchia </string> + <string name="Female - Chuckle"> + Femmina - Risatina + </string> + <string name="Female - Cry"> + Femmina - Pianto + </string> + <string name="Female - Embarrassed"> + Femmina - Imbarazzata + </string> <string name="Female - Excuse me"> Femmina - Chiedere scusa </string> @@ -3669,9 +3740,21 @@ Segnala abuso <string name="Female - Hey"> Femmina - Ehi </string> + <string name="Female - Hey baby"> + Femmina - Ehi tu + </string> <string name="Female - Laugh"> Femmina - Ridere </string> + <string name="Female - Looking good"> + Femmina - Sei in forma + </string> + <string name="Female - Over here"> + Femmina - Per di qua + </string> + <string name="Female - Please"> + Femmina - Per cortesia + </string> <string name="Female - Repulsed"> Femmina - Disgustata </string> @@ -3721,4 +3804,46 @@ Segnala abuso <string name="dateTimePM"> pomeridiane </string> + <string name="LocalEstimateUSD"> + US$ [AMOUNT] + </string> + <string name="Membership"> + Abbonamento + </string> + <string name="Roles"> + Ruoli + </string> + <string name="Group Identity"> + Identità gruppo + </string> + <string name="Parcel Management"> + Gestione lotto + </string> + <string name="Parcel Identity"> + Identità lotto + </string> + <string name="Parcel Settings"> + Impostazioni lotto + </string> + <string name="Parcel Powers"> + Poteri lotto + </string> + <string name="Parcel Access"> + Accesso al lotto + </string> + <string name="Parcel Content"> + Contenuto lotto + </string> + <string name="Object Management"> + Gestione oggetti + </string> + <string name="Accounting"> + Contabilità + </string> + <string name="Notices"> + Avvisi + </string> + <string name="Chat"> + Chat + </string> </strings> diff --git a/indra/newview/skins/default/xui/ja/floater_camera.xml b/indra/newview/skins/default/xui/ja/floater_camera.xml index ec5c2a64a5..71a20c8e18 100644 --- a/indra/newview/skins/default/xui/ja/floater_camera.xml +++ b/indra/newview/skins/default/xui/ja/floater_camera.xml @@ -22,6 +22,35 @@ オブジェクトを見る </floater.string> <panel name="controls"> + <panel name="preset_views_list"> + <panel_camera_item name="front_view"> + <panel_camera_item.text name="front_view_text"> + 前方視界 + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="group_view"> + <panel_camera_item.text name="side_view_text"> + グループ視界 + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="rear_view"> + <panel_camera_item.text name="rear_view_text"> + 後方視界 + </panel_camera_item.text> + </panel_camera_item> + </panel> + <panel name="camera_modes_list"> + <panel_camera_item name="object_view"> + <panel_camera_item.text name="object_view_text"> + オブジェクト視点 + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="mouselook_view"> + <panel_camera_item.text name="mouselook_view_text"> + 一人称視点 + </panel_camera_item.text> + </panel_camera_item> + </panel> <panel name="zoom" tool_tip="向いている方法にカメラをズーム"> <joystick_rotate name="cam_rotate_stick" tool_tip="自分を軸にカメラを回す"/> <slider_bar name="zoom_slider" tool_tip="向いている方向にカメラをズーム"/> diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml index 88e67862c8..59ce36b022 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml @@ -42,7 +42,12 @@ <text name="library_label"> ライブラリ: </text> - <scroll_list name="library_list"/> + <scroll_list name="library_list"> + <scroll_list.rows name="action_animation" value="アニメーション"/> + <scroll_list.rows name="action_sound" value="サウンド"/> + <scroll_list.rows name="action_chat" value="チャット"/> + <scroll_list.rows name="action_wait" value="待機"/> + </scroll_list> <button label="追加>>" name="add_btn"/> <text name="steps_label"> 手順: diff --git a/indra/newview/skins/default/xui/ja/floater_world_map.xml b/indra/newview/skins/default/xui/ja/floater_world_map.xml index 62670251d6..cc07596adc 100644 --- a/indra/newview/skins/default/xui/ja/floater_world_map.xml +++ b/indra/newview/skins/default/xui/ja/floater_world_map.xml @@ -22,12 +22,12 @@ <text name="land_sale_label"> 土地販売 </text> - <text name="by_owner_label"> - 所有者の販売 - </text> <text name="auction_label"> 土地オークション </text> + <text name="by_owner_label"> + 所有者の販売 + </text> <button label="ホームへ" label_selected="ホームへ" name="Go Home" tool_tip="「ホーム」にテレポートします"/> <text name="Home_label"> ホーム @@ -67,6 +67,9 @@ <scroll_list.columns label="" name="icon"/> <scroll_list.columns label="" name="sim_name"/> </scroll_list> + <text name="events_label"> + 場所: + </text> <button label="テレポート" label_selected="テレポート" name="Teleport" tool_tip="選択した場所にテレポートします"/> <button label="SLurl をコピー" name="copy_slurl" tool_tip="現在地の SLurl をコピーして Web で使用します"/> <button label="選択を表示する" label_selected="目的地を表示" name="Show Destination" tool_tip="選択した場所を地図の中心に表示します"/> diff --git a/indra/newview/skins/default/xui/ja/language_settings.xml b/indra/newview/skins/default/xui/ja/language_settings.xml index 72382417d9..a6023f9b56 100644 --- a/indra/newview/skins/default/xui/ja/language_settings.xml +++ b/indra/newview/skins/default/xui/ja/language_settings.xml @@ -17,6 +17,7 @@ datetimeToCodes["month"] = "%B"; // August datetimeToCodes["mthnum"] = "%m"; // 08 datetimeToCodes["day"] = "%d"; // 31 + datetimeToCodes["sday"] = "%-d"; // 9 datetimeToCodes["hour24"] = "%H"; // 14 datetimeToCodes["hour"] = "%H"; // 14 datetimeToCodes["hour12"] = "%I"; // 02 diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml index ceae7f7d9c..6999f9a3f3 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml @@ -61,7 +61,7 @@ <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="Remove Link"/> <menu_item_call label="削除" name="Delete"/> <menu_item_call label="システムフォルダを削除する" name="Delete System Folder"/> <menu_item_call label="コンファレンスチャットを開始する" name="Conference Chat Folder"/> diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_add.xml b/indra/newview/skins/default/xui/ja/menu_inventory_add.xml index 14ad7900e1..42dcd06a07 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory_add.xml @@ -5,6 +5,7 @@ <menu_item_call label="サウンド (L$[COST] )..." name="Upload Sound"/> <menu_item_call label="アニメーション (L$ [COST] )..." name="Upload Animation"/> <menu_item_call label="一括 (ファイルにつき L$[COST] )..." name="Bulk Upload"/> + <menu_item_call label="デフォルトのアップロード権限を設定" name="perm prefs"/> </menu> <menu_item_call label="新規フォルダ" name="New Folder"/> <menu_item_call label="新規スクリプト" name="New Script"/> diff --git a/indra/newview/skins/default/xui/ja/menu_object.xml b/indra/newview/skins/default/xui/ja/menu_object.xml index e59a500534..be25a2932e 100644 --- a/indra/newview/skins/default/xui/ja/menu_object.xml +++ b/indra/newview/skins/default/xui/ja/menu_object.xml @@ -1,6 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Object Pie"> - <menu_item_call label="触る" name="Object Touch"/> + <menu_item_call label="触る" name="Object Touch"> + <on_enable parameter="触る" name="EnableTouch"/> + </menu_item_call> <menu_item_call label="編集" name="Edit..."/> <menu_item_call label="制作" name="Build"/> <menu_item_call label="開く" name="Open"/> diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index 7c4912fa07..f6476857d2 100644 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -94,7 +94,7 @@ <menu_item_call label="スクリプトを実行停止にする" name="Set Scripts to Not Running"/> </menu> <menu label="オプション" name="Options"> - <menu_item_call label="デフォルトのアップロード権限を設定する" name="perm prefs"/> + <menu_item_call label="デフォルトのアップロード権限を設定" name="perm prefs"/> <menu_item_check label="権限の詳細を表示する" name="DebugPermissions"/> <menu_item_check label="私のオブジェクトだけを選択する" name="Select Only My Objects"/> <menu_item_check label="動的オブジェクトだけを選択する" name="Select Only Movable Objects"/> diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index 8fceaa2817..709797cb58 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -2800,8 +2800,8 @@ M キーを押して変更します。 アバター「 NAME 」が完全に読み込まれました。 </notification> <notification name="AvatarRezSelfBakeNotification"> - (作成後[EXISTENCE]秒経過) -'[BODYREGION]'の[RESOLUTION]のベークドテクスチャは[TIME]秒後にアップロードされました。 + ( 作成後[EXISTENCE]秒経過) +'[BODYREGION]' の[RESOLUTION]のベークドテクスチャは[TIME]秒後に[ACTION]されました。 </notification> <notification name="ConfirmLeaveCall"> このコールから抜けますか? @@ -2839,4 +2839,7 @@ M キーを押して変更します。 自分の土地をお持ちの場合、「ホーム」に設定できます。 お持ちでない場合は、地図で「インフォハブ」をお探しください。 </global> + <global name="You died and have been teleported to your home location"> + 死んでしまったので、ホームにテレポートされました。 + </global> </notifications> diff --git a/indra/newview/skins/default/xui/ja/panel_group_notices.xml b/indra/newview/skins/default/xui/ja/panel_group_notices.xml index 0b508bd79d..96e0382975 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_notices.xml @@ -21,7 +21,7 @@ <text name="notice_list_none_found"> 見つかりませんでした </text> - <button label="新しい通知を作成" label_selected="新しい通知を作成" name="create_new_notice" tool_tip="新しい通知を作成します"/> + <button label="新しい通知" label_selected="新しい通知を作成" name="create_new_notice" tool_tip="新しい通知を作成します"/> <button label="更新" label_selected="リスト更新" name="refresh_notices" tool_tip="通知リストを更新します"/> <panel label="新しい通知を作成" name="panel_create_new_notice"> <text name="lbl"> diff --git a/indra/newview/skins/default/xui/ja/panel_group_roles.xml b/indra/newview/skins/default/xui/ja/panel_group_roles.xml index 8a629be910..be203b0761 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_roles.xml @@ -13,6 +13,9 @@ Ctrl キーを押しながらメンバー名をクリックすると 複数の人を選択できます。 </panel.string> + <panel.string name="donation_area"> + [AREA] 平方メートル + </panel.string> <filter_editor label="メンバーを選別" name="filter_input"/> <name_list name="member_list"> <name_list.columns label="メンバー" name="name"/> diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_media.xml b/indra/newview/skins/default/xui/ja/panel_nearby_media.xml index d0e423bd18..07293e6c79 100644 --- a/indra/newview/skins/default/xui/ja/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/ja/panel_nearby_media.xml @@ -23,6 +23,12 @@ <button label="詳細 >>" label_selected="簡易 <<" name="less_btn" tool_tip="アドバンスコントロール"/> </panel> <panel name="nearby_media_panel"> + <text name="nearby_media_title"> + 近くのメディア + </text> + <text name="show_text"> + 表示: + </text> <combo_box name="show_combo"> <combo_box.item label="すべて" name="All"/> <combo_box.item label="この区画内" name="WithinParcel"/> @@ -36,7 +42,7 @@ <scroll_list.columns label="名前" name="media_name"/> <scroll_list.columns label="デバッグ" name="media_debug"/> </scroll_list> - <panel> + <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> <button name="stop_btn" tool_tip="選択したメディアを停止"/> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml index abbd29286b..4f29ae7b44 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml @@ -28,6 +28,12 @@ <panel.string name="default_text"> デフォルト </panel.string> + <panel.string name="default system device"> + デフォルトのシステム機器 + </panel.string> + <panel.string name="no device"> + 機器が設定されていません + </panel.string> <text name="Input"> 入力 </text> diff --git a/indra/newview/skins/default/xui/ja/panel_teleport_history.xml b/indra/newview/skins/default/xui/ja/panel_teleport_history.xml index c1bf81f7e7..58e396877c 100644 --- a/indra/newview/skins/default/xui/ja/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/ja/panel_teleport_history.xml @@ -1,6 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="Teleport History"> <accordion name="history_accordion"> + <no_matched_tabs_text name="no_matched_teleports_msg" value="お探しのものは見つかりましたか?[secondlife:///app/search/places/[SEARCH_TERM]をお試しください。"/> + <no_visible_tabs_text name="no_teleports_msg" value="テレポートの履歴には何も情報がありません。[secondlife:///app/search/places/ Search]をお試しください。"/> <accordion_tab name="today" title="今日"/> <accordion_tab name="yesterday" title="昨日"/> <accordion_tab name="2_days_ago" title="2日前"/> diff --git a/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml b/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml index fdabe88362..519b69799b 100644 --- a/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml @@ -23,7 +23,7 @@ </panel.string> <text name="title" value="アイテムのプロフィール"/> <text name="origin" value="(持ち物)"/> - <panel label=""> + <panel label="" name="item_profile"> <text name="LabelItemNameTitle"> 名前: </text> @@ -58,20 +58,20 @@ <text name="GroupLabel"> グループ: </text> - <check_box label="共有" name="CheckShareWithGroup" tool_tip="設定したグループのメンバー全員にこのオブジェクトの修正権限を与えます。 譲渡しない限り、役割制限を有効にはできません。"/> + <check_box label="共有" name="CheckShareWithGroup" tool_tip="設定したグループのメンバー全員にこのオブジェクトの修正権限を与えます。譲渡しない限り、役割制限を有効にはできません。"/> <text name="NextOwnerLabel"> 次の所有者: </text> <check_box label="修正" name="CheckNextOwnerModify"/> <check_box label="コピー" name="CheckNextOwnerCopy"/> - <check_box label="再販・プレゼント" name="CheckNextOwnerTransfer" tool_tip="次の所有者はこのオブジェクトを他人にあげたり再販することができます"/> + <check_box label="再販・プレゼント" name="CheckNextOwnerTransfer" tool_tip="次の所有者はこのオブジェクトを他人にあげたり再販できます"/> </panel> - <check_box label="販売する" name="CheckPurchase"/> + <check_box label="販売中" name="CheckPurchase"/> <combo_box name="combobox sale copy"> <combo_box.item label="コピー" name="Copy"/> <combo_box.item label="オリジナル" name="Original"/> </combo_box> - <spinner label="価格: L$" name="Edit Cost"/> + <spinner label="価格:L$" name="Edit Cost"/> </panel> <panel name="button_panel"> <button label="キャンセル" name="cancel_btn"/> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index 3ed110df4d..b68b68a4f8 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -196,6 +196,7 @@ <string name="TooltipMustSingleDrop"> アイテムは 1 つだけここにドラッグできます </string> + <string name="TooltipPrice" value="L$[AMOUNT]:"/> <string name="TooltipHttpUrl"> クリックしてこの Web ページを見ます </string> @@ -248,7 +249,6 @@ クリックして secondlife:// コマンドを出します </string> <string name="CurrentURL" value=" 現在の URL: [CurrentURL]"/> - <string name="TooltipPrice" value="L$[AMOUNT]: "/> <string name="SLurlLabelTeleport"> テレポート </string> @@ -663,6 +663,9 @@ <string name="worldmap_offline"> オフライン </string> + <string name="worldmap_item_tooltip_format"> + [AREA] 平方メートル L$[PRICE] + </string> <string name="worldmap_results_none_found"> 見つかりませんでした。 </string> @@ -906,12 +909,57 @@ <string name="invalid_not_worn"> 無効 </string> + <string name="create_new_shape"> + 新しいシェイプを作成 + </string> + <string name="create_new_skin"> + 新しいスキンを作成 + </string> + <string name="create_new_hair"> + 新しい髪を作成 + </string> + <string name="create_new_eyes"> + 新しい目を作成 + </string> + <string name="create_new_shirt"> + 新しいシャツを作成 + </string> + <string name="create_new_pants"> + 新しいパンツを作成 + </string> + <string name="create_new_shoes"> + 新しい靴を作成 + </string> + <string name="create_new_socks"> + 新しい靴下を作成 + </string> + <string name="create_new_jacket"> + 新しい上着を作成 + </string> + <string name="create_new_gloves"> + 新しい手袋を作成 + </string> + <string name="create_new_undershirt"> + 新しい下着シャツを作成 + </string> + <string name="create_new_underpants"> + 新しい下着パンツを作成 + </string> + <string name="create_new_skirt"> + 新しいスカートを作成 + </string> + <string name="create_new_alpha"> + 新しいアルファを作成 + </string> + <string name="create_new_tattoo"> + 新しいタトゥを作成 + </string> + <string name="create_new_invalid"> + 無効 + </string> <string name="NewWearable"> 新しい [WEARABLE_ITEM] </string> - <string name="CreateNewWearable"> - [WEARABLE_TYPE]を作成 - </string> <string name="next"> 次へ </string> @@ -1016,6 +1064,7 @@ <string name="AnimFlagStop" value=" アニメーションを停止:"/> <string name="AnimFlagStart" value=" アニメーションを開始:"/> <string name="Wave" value=" 手を振る"/> + <string name="GestureActionNone" value="なし"/> <string name="HelloAvatar" value=" やあ、アバター!"/> <string name="ViewAllGestures" value=" すべて表示 >>"/> <string name="GetMoreGestures" value="ショッピング >>"/> @@ -1101,6 +1150,9 @@ <string name="InvFolder Current Outfit"> 着用中のアウトフィット </string> + <string name="InvFolder Initial Outfits"> + 最初のアウトフィット + </string> <string name="InvFolder My Outfits"> マイ アウトフィット </string> @@ -1420,6 +1472,7 @@ <string name="SummaryForTheWeek" value="今週のまとめ。開始日は"/> <string name="NextStipendDay" value="です。次回のお小遣い支給日:"/> <string name="GroupIndividualShare" value=" グループ 個人の割り当て"/> + <string name="GroupColumn" value="グループの設定"/> <string name="Balance"> 残高 </string> @@ -1640,10 +1693,10 @@ メッセージを送った住人は、誰にも邪魔をされたくないため現在「取り込み中」モードです。 あなたのメッセージは、あとで確認できるように IM パネルに表示されます。 </string> <string name="NoOutfits"> - アウトフィットがまだありません。[secondlife:///app/search/all/ 検索]をお試しください。 + アウトフィットがまだありません。[secondlife:///app/search/all/ Search]をお試しください </string> <string name="NoOutfitsTabsMatched"> - お探しのものは見つかりましたか?[secondlife:///app/search/all/[SEARCH_TERM] 検索]をお試しください。 + お探しのものは見つかりましたか?[secondlife:///app/search/all/[SEARCH_TERM]をお試しください。 </string> <string name="MuteByName"> (名称別) @@ -3634,6 +3687,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="group_role_owners"> オーナー </string> + <string name="group_member_status_online"> + オンライン + </string> <string name="uploading_abuse_report"> アップロード中... @@ -3687,9 +3743,15 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="Invalid Wearable"> 無効な着用物 </string> + <string name="New Gesture"> + ジェスチャー + </string> <string name="New Script"> 新規スクリプト </string> + <string name="New Note"> + ノート + </string> <string name="New Folder"> 新規フォルダ </string> @@ -3747,6 +3809,15 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="Male - Wow"> 男性 - Wow </string> + <string name="Female - Chuckle"> + 女性 – クスクス + </string> + <string name="Female - Cry"> + 女性 – 泣く + </string> + <string name="Female - Embarrassed"> + 女性 – 恥ずかしい + </string> <string name="Female - Excuse me"> 女性 – すみません </string> @@ -3765,9 +3836,21 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="Female - Hey"> 女性 - Hey </string> + <string name="Female - Hey baby"> + 女性 – ヘイ、ベィビー! + </string> <string name="Female - Laugh"> 女性 - 笑う </string> + <string name="Female - Looking good"> + 女性 – いい感じ + </string> + <string name="Female - Over here"> + 女性 – こっちよ + </string> + <string name="Female - Please"> + 女性 – プリーズ + </string> <string name="Female - Repulsed"> 女性 - 拒絶 </string> @@ -3817,4 +3900,46 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="dateTimePM"> PM </string> + <string name="LocalEstimateUSD"> + US$ [AMOUNT] + </string> + <string name="Membership"> + 会員 + </string> + <string name="Roles"> + 役割 + </string> + <string name="Group Identity"> + グループの識別情報 + </string> + <string name="Parcel Management"> + 区画の管理 + </string> + <string name="Parcel Identity"> + 区画の識別情報 + </string> + <string name="Parcel Settings"> + 区画の設定 + </string> + <string name="Parcel Powers"> + 区画の権限 + </string> + <string name="Parcel Access"> + 区画へのアクセス + </string> + <string name="Parcel Content"> + 区画のコンテンツ + </string> + <string name="Object Management"> + オブジェクトの管理 + </string> + <string name="Accounting"> + 会計 + </string> + <string name="Notices"> + 通知 + </string> + <string name="Chat"> + チャット + </string> </strings> diff --git a/indra/newview/skins/default/xui/nl/language_settings.xml b/indra/newview/skins/default/xui/nl/language_settings.xml index dc4663705f..53501d5dcb 100644 --- a/indra/newview/skins/default/xui/nl/language_settings.xml +++ b/indra/newview/skins/default/xui/nl/language_settings.xml @@ -17,6 +17,7 @@ datetimeToCodes["month"] = "%B"; // August datetimeToCodes["mthnum"] = "%m"; // 08 datetimeToCodes["day"] = "%d"; // 31 + datetimeToCodes["sday"] = "%-d"; // 9 datetimeToCodes["hour24"] = "%H"; // 14 datetimeToCodes["hour"] = "%H"; // 14 datetimeToCodes["hour12"] = "%I"; // 02 diff --git a/indra/newview/skins/default/xui/pl/floater_about_land.xml b/indra/newview/skins/default/xui/pl/floater_about_land.xml index d0521fefc3..c68e1c72ce 100644 --- a/indra/newview/skins/default/xui/pl/floater_about_land.xml +++ b/indra/newview/skins/default/xui/pl/floater_about_land.xml @@ -327,7 +327,7 @@ Jedynie większe posiadłości mogą być umieszczone w bazie wyszukiwarki. <check_box label="Wszyscy" name="edit objects check"/> <check_box label="Grupa" name="edit group objects check"/> <text name="allow_label3"> - Nowe Obiekty: + Nowe obiekty: </text> <check_box label="Wszyscy" name="all object entry check"/> <check_box label="Grupa" name="group object entry check"/> @@ -380,7 +380,7 @@ Jedynie większe posiadłości mogą być umieszczone w bazie wyszukiwarki. Punkt Lądowania: [LANDING] </text> <button label="Ustaw" label_selected="Ustaw" name="Set" tool_tip="Ustal miejsce lądowania dla przybywających gości. Używa położenia Twojego awatara na tej posiadłości."/> - <button label="Nowy" label_selected="Nowy" name="Clear" tool_tip="Clear the landing point."/> + <button label="Nowy" label_selected="Nowy" name="Clear" tool_tip="Usuń dotychczasowe miejsce lądowania."/> <text name="Teleport Routing: "> Trasa teleportacji: </text> @@ -399,7 +399,7 @@ Jedynie większe posiadłości mogą być umieszczone w bazie wyszukiwarki. URL mediów: </text> <button label="Ustaw" name="set_media_url"/> - <check_box label="Ukryj URL mediów" name="hide_media_url" tool_tip="Wybranie tej opcji, zablokuje widok adresu do medów wszystkim nieautoryzowanym Użytkownikom. Nie dotyczy to jednak typów HTML."/> + <check_box label="Ukryj URL mediów" name="hide_media_url" tool_tip="Wybranie tej opcji, zablokuje widok adresu do medów wszystkim nieautoryzowanym Rezydentom. Nie dotyczy to jednak typów HTML."/> <text name="Description:"> Opis: </text> @@ -431,14 +431,14 @@ Mediów: <check_box label="Ukryj URL muzyki" name="hide_music_url" tool_tip="Wybranie tej opcji, zablokuje widok adresu do medów muzycznych w posiadłości wszystkim nieautoryzowanym Użytkownikom"/> <check_box label="Rozmowy dozwolone" name="parcel_enable_voice_channel"/> <check_box label="Rozmowy dozwolone (ustawione przez Majątek)" name="parcel_enable_voice_channel_is_estate_disabled"/> - <check_box label="Ogranicz komunikację głosową w tej posiadłości." name="parcel_enable_voice_channel_local"/> + <check_box label="Ogranicz komunikację głosową w tej Posiadłości." name="parcel_enable_voice_channel_local"/> </panel> <panel label="DOSTĘP" name="land_access_panel"> <panel.string name="access_estate_defined"> (Zdefiniowane przez Majątek) </panel.string> <panel.string name="allow_public_access"> - Udostępnij dostęp publiczny ([MATURITY]) + Udostępnij publicznie ([MATURITY]) </panel.string> <panel.string name="estate_override"> Jedna lub więcej z tych opcji ustawiona jest z poziomu Posiadłości diff --git a/indra/newview/skins/default/xui/pl/floater_animation_preview.xml b/indra/newview/skins/default/xui/pl/floater_animation_preview.xml index d8ae185687..3402d8d31f 100644 --- a/indra/newview/skins/default/xui/pl/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/pl/floater_animation_preview.xml @@ -26,7 +26,7 @@ Maksymalna długość pliku animacji wynosi [MAX_LENGTH] sekund. Plik BVH nie może zostać otworzony. </floater.string> <floater.string name="E_ST_NO_HIER"> - Niewłaściwy nagłówek HIERARCHI. + Niewłaściwy nagłówek HIERARCHII. </floater.string> <floater.string name="E_ST_NO_JOINT"> ROOT oraz JOINT nieodnalezione. @@ -104,7 +104,7 @@ Maksymalna długość pliku animacji wynosi [MAX_LENGTH] sekund. Brak otrzymania wartości morfizacji. </floater.string> <floater.string name="E_ST_NO_XLT_EMOTE"> - Niemożliwość przeczytania nazwy emocji. + Nie można odczytać nazwy emocji. </floater.string> <floater.string name="E_ST_BAD_ROOT"> Nieprawidłowa nazwa, użyj "hip". @@ -120,7 +120,7 @@ Maksymalna długość pliku animacji wynosi [MAX_LENGTH] sekund. <spinner label="Od(%)" name="loop_in_point" tool_tip="Wybierz punkt, od którego chcesz zacząć powtarzać animację"/> <spinner label="Do(%)" name="loop_out_point" tool_tip="Wybierz punkt, od którego chcesz zakończyć powtarzanie animacji"/> <text name="hand_label"> - Pozycja Ręki + Pozycja ręki </text> <combo_box label="" name="hand_pose_combo" tool_tip="Kontroluje co robi ręka podczas animacji"> <combo_box.item label="Rozciągaj" name="Spread"/> @@ -128,14 +128,14 @@ Maksymalna długość pliku animacji wynosi [MAX_LENGTH] sekund. <combo_box.item label="Wskazuj" name="PointBoth"/> <combo_box.item label="Pięść" name="Fist"/> <combo_box.item label="Lewa-Odpocznij" name="RelaxedLeft"/> - <combo_box.item label="Wskazuj Lewą" name="PointLeft"/> - <combo_box.item label="Zaciśnij Lewą" name="FistLeft"/> - <combo_box.item label="Prawa-Odpocznij" name="RelaxedRight"/> - <combo_box.item label="Wskazuj Prawą" name="PointRight"/> - <combo_box.item label="Zaciśnij Prawą" name="FistRight"/> - <combo_box.item label="Salutuj Prawą" name="SaluteRight"/> + <combo_box.item label="Wskazuj lewą" name="PointLeft"/> + <combo_box.item label="Zaciśnij lewą" name="FistLeft"/> + <combo_box.item label="Prawa-odpocznij" name="RelaxedRight"/> + <combo_box.item label="Wskazuj prawą" name="PointRight"/> + <combo_box.item label="Zaciśnij prawą" name="FistRight"/> + <combo_box.item label="Salutuj prawą" name="SaluteRight"/> <combo_box.item label="Pisz" name="Typing"/> - <combo_box.item label="Prawa-Pokój" name="PeaceRight"/> + <combo_box.item label="Prawa-pokój" name="PeaceRight"/> </combo_box> <text name="emote_label"> Ekspresja @@ -145,18 +145,18 @@ Maksymalna długość pliku animacji wynosi [MAX_LENGTH] sekund. <item label="Aaaaah" name="Aaaaah" value="Aaaaah"/> <item label="Obawa" name="Afraid" value="Obawa"/> <item label="Złość" name="Angry" value="Złość"/> - <item label="Duży Uśmiech" name="BigSmile" value="Duży uśmiech"/> + <item label="Duży uśmiech" name="BigSmile" value="Duży uśmiech"/> <item label="Znudzenie" name="Bored" value="Znudzenie"/> <item label="Płacz" name="Cry" value="Płacz"/> <item label="Wzgarda" name="Disdain" value="Wzgarda"/> <item label="Zakłopotanie" name="Embarrassed" value="Zakłopotanie"/> - <item label="Marszczenie Brwi" name="Frown" value="Marszczenie brwi"/> + <item label="Marszczenie brwi" name="Frown" value="Marszczenie brwi"/> <item label="Pocałunek" name="Kiss" value="Pocałunek"/> <item label="Śmiech" name="Laugh" value="Śmiech"/> <item label="Plllppt" name="Plllppt" value="Plllppt"/> <item label="Odrzucenie" name="Repulsed" value="Odrzucenie"/> <item label="Smutek" name="Sad" value="Smutek"/> - <item label="Wzruszenie Ramionami" name="Shrug" value="Wzruszenie ramionami"/> + <item label="Wzruszenie ramionami" name="Shrug" value="Wzruszenie ramionami"/> <item label="Uśmiech" name="Smile" value="Uśmiech"/> <item label="Niespodzianka" name="Surprise" value="Niespodzianka"/> <item label="Mrugnięcie" name="Wink" value="Mrugnięcie"/> @@ -175,7 +175,7 @@ Maksymalna długość pliku animacji wynosi [MAX_LENGTH] sekund. <spinner label="Złagodzić na zewnątrz (sekund)" name="ease_out_time" tool_tip="Ilość Czasu (w sekundach), w których animacje oddzielają się"/> <button label="" name="play_btn" tool_tip="Odtwarzaj animację"/> <button name="pause_btn" tool_tip="Zatrzymaj animację"/> - <button label="" name="stop_btn" tool_tip="Stop animation playback"/> + <button label="" name="stop_btn" tool_tip="Zakończ odtwarzanie animacji"/> <slider label="" name="playback_slider"/> <text name="bad_animation_text"> Brak możliwości wczytania pliku animacji. diff --git a/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml b/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml index 5c623e251f..45b9e066e9 100644 --- a/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml @@ -6,8 +6,7 @@ <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> <text name="label"> - Baked -Textures + Tekstury bakowane </text> <text name="composite_label"> Tekstury kompozytowe diff --git a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml index f4721b05d8..0f49061002 100644 --- a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml @@ -18,8 +18,8 @@ <icon name="icon_bodypart" tool_tip="Części Ciała"/> <check_box label="Ubranie" name="check_clothing"/> <icon name="icon_clothing" tool_tip="Ubranie"/> - <check_box label="Gestury" name="check_gesture"/> - <icon name="icon_gesture" tool_tip="Gestury"/> + <check_box label="Gesturki" name="check_gesture"/> + <icon name="icon_gesture" tool_tip="Gesturki"/> <check_box label="Noty" name="check_notecard"/> <icon name="icon_notecard" tool_tip="Noty"/> <check_box label="Obiekty" name="check_object"/> @@ -48,7 +48,7 @@ </text> <check_box label="Modyfikuje" name="next_owner_modify"/> <check_box label="Kopiuje" name="next_owner_copy"/> - <check_box initial_value="true" label="Oddaj/Sprzedaj" name="next_owner_transfer" tool_tip="Następny właściciel może oddać lub sprzedać ten obiekt."/> + <check_box initial_value="true" label="Oddaj/Sprzedaj" name="next_owner_transfer" tool_tip="Następny Właściciel może oddać lub sprzedać ten obiekt."/> <button label="OK" name="apply"/> <button label="Anuluj" name="close"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_camera.xml b/indra/newview/skins/default/xui/pl/floater_camera.xml index b11da91b5b..5b9dd47616 100644 --- a/indra/newview/skins/default/xui/pl/floater_camera.xml +++ b/indra/newview/skins/default/xui/pl/floater_camera.xml @@ -16,12 +16,41 @@ W prawo lub w lewo </floater.string> <floater.string name="presets_mode_title"> - Preset Views + Ustaw widok </floater.string> <floater.string name="free_mode_title"> Zobacz obiekt </floater.string> <panel name="controls"> + <panel name="preset_views_list"> + <panel_camera_item name="front_view"> + <panel_camera_item.text name="front_view_text"> + Widok z przodu + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="group_view"> + <panel_camera_item.text name="side_view_text"> + Podgląd grupy + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="rear_view"> + <panel_camera_item.text name="rear_view_text"> + Widok z tyłu + </panel_camera_item.text> + </panel_camera_item> + </panel> + <panel name="camera_modes_list"> + <panel_camera_item name="object_view"> + <panel_camera_item.text name="object_view_text"> + Widok obiektu + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="mouselook_view"> + <panel_camera_item.text name="mouselook_view_text"> + Widok panoramiczny + </panel_camera_item.text> + </panel_camera_item> + </panel> <panel name="zoom" tool_tip="Najedź kamerą w kierunku obiektu"> <joystick_rotate name="cam_rotate_stick" tool_tip="Obracaj kamerę wokoł osi"/> <slider_bar name="zoom_slider" tool_tip="Przybliż kamerę do ogniskowej"/> @@ -29,7 +58,7 @@ </panel> </panel> <panel name="buttons"> - <button label="" name="presets_btn" tool_tip="Preset Views"/> + <button label="" name="presets_btn" tool_tip="Ustaw widok"/> <button label="" name="pan_btn" tool_tip="Kamera horyzontalna"/> <button label="" name="avatarview_btn" tool_tip="Ustawienia"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/floater_customize.xml b/indra/newview/skins/default/xui/pl/floater_customize.xml index dd1d5cf684..373e74ffe0 100644 --- a/indra/newview/skins/default/xui/pl/floater_customize.xml +++ b/indra/newview/skins/default/xui/pl/floater_customize.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater customize" title="WYGLĄD"> <tab_container name="customize tab container"> - <text label="Części Ciała" name="body_parts_placeholder"> + <text label="Części ciała" name="body_parts_placeholder"> Części ciała </text> <panel label="Kształt" name="Shape"> @@ -157,7 +157,7 @@ <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/> <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> - <button label="Nowa Koszula" label_selected="Nowa Koszula" name="Create New"/> + <button label="Nowa koszula" label_selected="Nowa Koszula" name="Create New"/> <button label="Zapisz" label_selected="Zapisz" name="Save"/> <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> <button label="Wróć" label_selected="Wróć" name="Revert"/> @@ -183,7 +183,7 @@ Nie posiadasz prawa do modyfikowania tej koszuli. </text> <text name="Item Action Label"> - Koszulka: + Koszula: </text> </panel> <panel label="Spodnie" name="Pants"> @@ -504,7 +504,7 @@ <text name="not worn instructions"> Załóż nową maskę alpha poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną z plików roboczych. </text> - <button label="Stwórz nową Alpha" label_selected="Utwórz Nową Alpha" name="Create New"/> + <button label="Stwórz nową Alpha" label_selected="Utwórz nową Alpha" name="Create New"/> <text name="no modify instructions"> Nie posiadasz uprawnień do modyfikowania tych ubrań/części ciała. </text> diff --git a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml index e7f73faca7..f3929df3e3 100644 --- a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Day Cycle Floater" title="EDYTOR CYKLU DNIA"> <tab_container name="Day Cycle Tabs"> - <panel label="Cykl Dnia" name="Day Cycle"> + <panel label="Cykl dnia" name="Day Cycle"> <button label="?" name="WLDayCycleHelp"/> <multi_slider label="" name="WLTimeSlider"/> <multi_slider label="" name="WLDayCycleKeys"/> diff --git a/indra/newview/skins/default/xui/pl/floater_event.xml b/indra/newview/skins/default/xui/pl/floater_event.xml index 7588493464..80862bfd2f 100644 --- a/indra/newview/skins/default/xui/pl/floater_event.xml +++ b/indra/newview/skins/default/xui/pl/floater_event.xml @@ -16,7 +16,7 @@ Adult </floater.string> <floater.string name="general"> - PG + General </floater.string> <floater.string name="unknown"> Nieznana @@ -62,8 +62,8 @@ </expandable_text> </layout_panel> <layout_panel name="button_panel"> - <button name="create_event_btn" tool_tip="Stwórz Imprezę"/> - <button name="god_delete_event_btn" tool_tip="Skasuj Imprezę"/> + <button name="create_event_btn" tool_tip="Stwórz imprezę"/> + <button name="god_delete_event_btn" tool_tip="Skasuj imprezę"/> <button label="Zawiadom mnie" name="notify_btn"/> <button label="Teleportuj" name="teleport_btn"/> <button label="Mapa" name="map_btn"/> diff --git a/indra/newview/skins/default/xui/pl/floater_gesture.xml b/indra/newview/skins/default/xui/pl/floater_gesture.xml index 750a9e4a66..0c27e4d0bb 100644 --- a/indra/newview/skins/default/xui/pl/floater_gesture.xml +++ b/indra/newview/skins/default/xui/pl/floater_gesture.xml @@ -18,8 +18,8 @@ <panel label="bottom_panel" name="bottom_panel"> <menu_button name="gear_btn" tool_tip="Więcej opcji"/> <button name="new_gesture_btn" tool_tip="Stwórz nową gesturę"/> - <button name="activate_btn" tool_tip="Aktywuj/Dezaktywuj wybrany gest"/> - <button name="del_btn" tool_tip="Usuń gest"/> + <button name="activate_btn" tool_tip="Aktywuj/Dezaktywuj wybraną gesturę"/> + <button name="del_btn" tool_tip="Usuń gesturę"/> </panel> <button label="Edytuj" name="edit_btn"/> <button label="Odtwarzaj" name="play_btn"/> diff --git a/indra/newview/skins/default/xui/pl/floater_god_tools.xml b/indra/newview/skins/default/xui/pl/floater_god_tools.xml index 1f4502b9a4..828898de54 100644 --- a/indra/newview/skins/default/xui/pl/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/pl/floater_god_tools.xml @@ -10,16 +10,16 @@ </text> <line_editor left="115" name="region name" width="178"/> <check_box label="Wstęp" name="check prelude" tool_tip="Set this to make the region a prelude"/> - <check_box label="Korekta Słońca" name="check fixed sun" tool_tip="Skorektuj ustawienia pozycji słońca."/> + <check_box label="Korekta słońca" name="check fixed sun" tool_tip="Skoryguj ustawienia pozycji słońca."/> <check_box height="32" label="Zresetuj pozycję Miejsca Startowego" name="check reset home" tool_tip="Zresetuj miejsce startu Rezydentów po teleportacji"/> <check_box bottom_delta="-32" label="Widoczny" name="check visible" tool_tip="Wybierz tą opcję by ustawić region widocznym dla wszystkich."/> <check_box label="Zniszczenia" name="check damage" tool_tip="Wybierz tę opcję by uruchomić opcję zniszczeń w regionie."/> - <check_box label="Zablokuj Monitorowanie Trafficu" name="block dwell" tool_tip="Wybierz tą opcję by zablokować monitorowanie trafficu w regionie."/> - <check_box label="Zablokuj Terraformowanie" name="block terraform" tool_tip="Wybierz tą opcję by zablokować terraforming w regionie"/> + <check_box label="Zablokuj monitorowanie trafficu" name="block dwell" tool_tip="Wybierz tą opcję by zablokować monitorowanie trafficu w regionie."/> + <check_box label="Zablokuj terraformowanie" name="block terraform" tool_tip="Wybierz tą opcję by zablokować terraforming w regionie"/> <check_box label="Piaskownica" name="is sandbox" tool_tip="Toggle whether this is a sandbox region"/> <button label="Ustal teren" label_selected="Ustal teren" name="Bake Terrain" tool_tip="Zapamiętaj obecny teren jako początkowy dla cofnięcia modyfikacji terenu." width="138"/> <button label="Cofnięcie modyfikacji" label_selected="Cofnięcie modyfikacji" name="Revert Terrain" tool_tip="Przywróć ustawienia domyślne Regionu." width="138"/> - <button label="Zamień teren" label_selected="Zamień teren" name="Swap Terrain" tool_tip="Swap current terrain with default" width="138"/> + <button label="Zamień teren" label_selected="Zamień teren" name="Swap Terrain" tool_tip="Zmień bieżący teren domyślnie" width="138"/> <text name="estate id"> ID Regionu: </text> @@ -46,8 +46,8 @@ L$/m²: </text> <spinner name="land cost"/> - <button label="Odśwież" label_selected="Odśwież" name="Refresh" tool_tip="Click here to refresh the above information"/> - <button label="Zastosuj" label_selected="Zastosuj" name="Apply" tool_tip="Click here to apply any changes from above"/> + <button label="Odśwież" label_selected="Odśwież" name="Refresh" tool_tip="Kliknij tutaj aby odswieżyć powyższe informacje"/> + <button label="Zastosuj" label_selected="Zastosuj" name="Apply" tool_tip="Kliknij tutaj aby zastosować powyższe zmiany"/> <button label="Wybierz Region" label_selected="Wybierz Region" left="156" name="Select Region" tool_tip="Wybierz cały Region za pomocą narzędzi edycji terenu" width="150"/> <button label="Automatyczne zapisanie" label_selected="Automatyczne zapisanie" left="156" name="Autosave now" tool_tip="Save gzipped state to autosave directory" width="150"/> </panel> @@ -58,17 +58,17 @@ <text left_delta="110" name="region name"> Welsh </text> - <check_box label="Wyłącz skrypty" name="disable scripts" tool_tip="Set this to disable all scripts in this region"/> + <check_box label="Wyłącz skrypty" name="disable scripts" tool_tip="Wybierz aby wyłączyć skrypty w tym Regionie"/> <check_box label="Deaktywuj kolizje" name="disable collisions" tool_tip="Set this to disable non-agent collisions in this region"/> - <check_box label="Wylącz fizykę" name="disable physics" tool_tip="Set this to disable all physics in this region"/> - <button label="Zastosuj" label_selected="Zastosuj" name="Apply" tool_tip="Click here to apply any changes from above"/> - <button label="Ustaw Cel" label_selected="Set Target" name="Set Target" tool_tip="Set the target avatar for object deletion"/> + <check_box label="Wylącz fizykę" name="disable physics" tool_tip="Wybierz aby wyłączyć fizykę w tym Regionie"/> + <button label="Zastosuj" label_selected="Zastosuj" name="Apply" tool_tip="Kliknij tu aby zastosować powyższe zmiany"/> + <button label="Ustaw cel" label_selected="Ustaw cel" name="Set Target" tool_tip="Ustaw docelowego awatara w celu skasowania obiektów"/> <text name="target_avatar_name"> (brak) </text> - <button label="Usuń cel z oskryptowanych obiektów na innych posiadłościach" label_selected="Usuń cel 's skryptowane obiekty na innych posiadłościach" name="Delete Target's Scripted Objects On Others Land" tool_tip="Delete all scripted objects owned by the target on land not owned by the target. (no copy) objects will be returned."/> - <button label="Usuń cel z oskryptowanych obiektów na jakichkolwiek posiadłościach" label_selected="Usuń cel 's skryptowane obiekty na jakichkolwiek posiadłościach" name="Delete Target's Scripted Objects On *Any* Land" tool_tip="Delete all scripted objects owned by the target in this region. (no copy) objects will be returned."/> - <button label="Usuń wszystkie cele i obiekty" label_selected="Usuń wszystkie cele i obiekty" name="Delete *ALL* Of Target's Objects" tool_tip="Delete all objects owned by the target in this region. (no copy) objects will be returned."/> + <button label="Usuń cel z oskryptowanych obiektów na innych posiadłościach" label_selected="Usuń cel 's skryptowane obiekty na innych posiadłościach" name="Delete Target's Scripted Objects On Others Land" tool_tip="Skasuj wszystkie oskryptowane obiekty posiadane przez cel na Posiadłości, której nie jest właścicielem. (obiekty bez praw kopiowania zostaną zwrócone)"/> + <button label="Usuń cel z oskryptowanych obiektów na jakichkolwiek posiadłościach" label_selected="Usuń cel 's skryptowane obiekty na jakichkolwiek posiadłościach" name="Delete Target's Scripted Objects On *Any* Land" tool_tip="Skasuj wszystkie oksryptowane obiekty posiadane przez cel w tym Regionie. (obiekty bez praw kopiowania zostaną zwrócone)"/> + <button label="Usuń wszystkie cele i obiekty" label_selected="Usuń wszystkie cele i obiekty" name="Delete *ALL* Of Target's Objects" tool_tip="Skasuj wszystkie obiekty posiadane przez cel w tym Regionie. (obiekty bez praw kopiowania zostaną zwrócone)"/> <button label="Główne kolizje" label_selected="Główne kolizje" name="Get Top Colliders" tool_tip="Gets list of objects experiencing the most narrowphase callbacks"/> <button label="Główne skrypty" label_selected="Główne skrypty" name="Get Top Scripts" tool_tip="Gets list of objects spending the most time running scripts"/> <button label="Treść skryptów" label_selected="Treść skryptów" name="Scripts digest" tool_tip="Wyświetla listę wszystkich skryptów i liczbę ich zastosowań."/> diff --git a/indra/newview/skins/default/xui/pl/floater_image_preview.xml b/indra/newview/skins/default/xui/pl/floater_image_preview.xml index 6b0770af84..ba9724ff9a 100644 --- a/indra/newview/skins/default/xui/pl/floater_image_preview.xml +++ b/indra/newview/skins/default/xui/pl/floater_image_preview.xml @@ -12,12 +12,12 @@ <combo_box label="Rodzaj Ubrania" name="clothing_type_combo"> <item label="Obraz" name="Image" value="Tekstura"/> <item label="Włosy" name="Hair" value="Włosy"/> - <item label="Damska głowa" name="FemaleHead" value="Głowa kobiety"/> - <item label="Damska górna część ciała" name="FemaleUpperBody" value="Górna część ciała kobiety"/> - <item label="Damska górna część ciała" name="FemaleLowerBody" value="Dolna część ciała kobiety"/> - <item label="Męska głowa" name="MaleHead" value="Głowa mężczyzny"/> - <item label="Męska górna część ciała" name="MaleUpperBody" value="Górna część ciała mężczyzny"/> - <item label="Męska dolna część ciała" name="MaleLowerBody" value="Dolna część ciała mężczyzny"/> + <item label="Głowa kobiety" name="FemaleHead" value="Głowa kobiety"/> + <item label="Górna część ciała kobiety" name="FemaleUpperBody" value="Górna część ciała kobiety"/> + <item label="Dolna część ciała kobiety" name="FemaleLowerBody" value="Dolna część ciała kobiety"/> + <item label="Głowa mężczyzny" name="MaleHead" value="Głowa mężczyzny"/> + <item label="Górna część ciała mężczyzny" name="MaleUpperBody" value="Górna część ciała mężczyzny"/> + <item label="Dona część ciała mężczyzny" name="MaleLowerBody" value="Dolna część ciała mężczyzny"/> <item label="Spódnica" name="Skirt" value="Spódnica"/> <item label="Prim sculptowy" name="SculptedPrim" value="Prim sculptowy"/> </combo_box> diff --git a/indra/newview/skins/default/xui/pl/floater_inventory.xml b/indra/newview/skins/default/xui/pl/floater_inventory.xml index 0dc4d5b96d..c42f57fb55 100644 --- a/indra/newview/skins/default/xui/pl/floater_inventory.xml +++ b/indra/newview/skins/default/xui/pl/floater_inventory.xml @@ -7,7 +7,7 @@ MOJA SZAFA (Dostarczanie [ITEM_COUNT] obiektów...) [FILTER] </floater.string> <floater.string name="TitleCompleted"> - MOJA SZAFA ([ITEM_COUNT] Obiektów) [FILTER] + MOJA SZAFA ([ITEM_COUNT] obiektów) [FILTER] </floater.string> <floater.string name="Fetched"> Dostarczono diff --git a/indra/newview/skins/default/xui/pl/floater_pay.xml b/indra/newview/skins/default/xui/pl/floater_pay.xml index dccb7ed2bb..c9243fda65 100644 --- a/indra/newview/skins/default/xui/pl/floater_pay.xml +++ b/indra/newview/skins/default/xui/pl/floater_pay.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Give Money" title=""> <string name="payee_group"> - Zapłać Grupie + Zapłać grupie </string> <string name="payee_resident"> Zapłać Rezydentowi diff --git a/indra/newview/skins/default/xui/pl/floater_pay_object.xml b/indra/newview/skins/default/xui/pl/floater_pay_object.xml index d0c69a6c21..19032b3e5d 100644 --- a/indra/newview/skins/default/xui/pl/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/pl/floater_pay_object.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Give Money" title=""> <string halign="left" name="payee_group" width="100"> - Zapłać Grupie + Zapłać grupie </string> <string halign="left" name="payee_resident" width="120"> Zapłać Rezydentowi @@ -11,7 +11,7 @@ [FIRST] [LAST] </text> <text halign="left" left="5" name="object_name_label" width="95"> - Poprzez Obiekt: + Poprzez obiekt: </text> <icon name="icon_object" tool_tip="Obiekt"/> <text left="105" name="object_name_text"> diff --git a/indra/newview/skins/default/xui/pl/floater_post_process.xml b/indra/newview/skins/default/xui/pl/floater_post_process.xml index a3515915bf..e3dce84933 100644 --- a/indra/newview/skins/default/xui/pl/floater_post_process.xml +++ b/indra/newview/skins/default/xui/pl/floater_post_process.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Post-Process Floater" title="USTAWIENIA PRZETWARZANIA KOŃCOWEGO"> <tab_container name="Post-Process Tabs"> - <panel label="Kolor Filtru" name="wmiColorFilterPanel"> + <panel label="Kolor filtra" name="wmiColorFilterPanel"> <check_box label="Udostępnij" name="wmiColorFilterToggle" /> <text name="wmiColorFilterBrightnessText"> Jasność diff --git a/indra/newview/skins/default/xui/pl/floater_postcard.xml b/indra/newview/skins/default/xui/pl/floater_postcard.xml index 095974aa61..fe796c6fa0 100644 --- a/indra/newview/skins/default/xui/pl/floater_postcard.xml +++ b/indra/newview/skins/default/xui/pl/floater_postcard.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Postcard" title="WYŚLIJ POCZTÓWKĘ (EMAIL)"> <text name="to_label"> - Email Odbiorcy: + Email odbiorcy: </text> <text name="from_label"> - Twój Email: + Twój email: </text> <text name="name_label"> - Twoje Dane: + Twoje dane: </text> <text name="subject_label"> Temat: @@ -20,7 +20,7 @@ Wpisz treść swojej wiadomości tutaj </text_editor> <text name="fine_print"> - Jeżeli Odbiorca tej pocztówki dołączy do [SECOND_LIFE], otrzymasz bonus. + Jeżeli odbiorca tej pocztówki dołączy do [SECOND_LIFE], otrzymasz bonus. </text> <button label="Anuluj" name="cancel_btn"/> <button label="Wyślij" name="send_btn"/> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml index 2756f5e850..8171225666 100644 --- a/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml @@ -42,7 +42,12 @@ <text name="library_label"> Zbiór: </text> - <scroll_list name="library_list"/> + <scroll_list name="library_list"> + <scroll_list.rows name="action_animation" value="Animacja"/> + <scroll_list.rows name="action_sound" value="Dźwięk"/> + <scroll_list.rows name="action_chat" value="Czat"/> + <scroll_list.rows name="action_wait" value="Wstrzymaj"/> + </scroll_list> <button label="Dodaj >>" name="add_btn"/> <text name="steps_label"> Etapy: @@ -62,7 +67,7 @@ <text name="help_label"> Wszystkie etapy nastąpią razem, chyba, że dodasz pauzy. </text> - <check_box label="Aktywny" name="active_check" tool_tip="Aktywne gesty można włączać używając przypisanej frazy w czacie albo używając przypisanego klawisza skrótowego. W przypaku konfliktu przypisań gesty zazwyczaj nie będą działać."/> + <check_box label="Aktywna" name="active_check" tool_tip="Aktywne gesturki można włączać używając przypisanej frazy w czacie albo używając przypisanego klawisza skrótowego. W przypaku konfliktu przypisań gesty zazwyczaj nie będą działać."/> <button label="Pokaż" name="preview_btn"/> <button label="Zapisz" name="save_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml index d31cada96d..a041472f68 100644 --- a/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="GEST"/> +<floater name="Gesture" title="GESTURKI"/> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml index d33b799476..9692fca9cd 100644 --- a/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="GESTY"> +<floater name="Gesture" title="GESTURKI"> <text name="trigger_label"> Czat: </text> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml index 6592d9dad0..a041472f68 100644 --- a/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="GESTY"/> +<floater name="Gesture" title="GESTURKI"/> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_sound.xml b/indra/newview/skins/default/xui/pl/floater_preview_sound.xml index d02b3ca75e..3825fe742e 100644 --- a/indra/newview/skins/default/xui/pl/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_sound.xml @@ -7,5 +7,5 @@ Opis: </text> <button label="Odtwarzaj" label_selected="Odtwarzaj" left_delta="-136" name="Sound play btn" tool_tip="Dźwięk będzie słyszalny przez wszystkich." width="130"/> - <button label="Odtwarzaj Lokalnie" label_selected="Odtwarzaj lokalnie" name="Sound audition btn" tool_tip="Dźwięk będzie słyszalny tylko dla Ciebie."/> + <button label="Odtwarzaj lokalnie" label_selected="Odtwarzaj lokalnie" name="Sound audition btn" tool_tip="Dźwięk będzie słyszalny tylko dla Ciebie."/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml index a6f8ba6c11..a5b96601b8 100644 --- a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml @@ -27,7 +27,7 @@ </text> <button label="" label_selected="" name="pick_btn" tool_tip="Wybór obiektu - wybierz obiekt, którego dotyczy raport"/> <text name="object_name_label"> - Nazwa Obiektu: + Nazwa obiektu: </text> <text name="object_name"> Consetetur Sadipscing @@ -67,8 +67,8 @@ <combo_box.item label="Prześladowanie > Znieważanie Słowne" name="Harassment__Verbal_abuse"/> <combo_box.item label="Nieprzyzwoitość > Obraźliwa treść lub postępowanie" name="Indecency__Broadly_offensive_content_or_conduct"/> <combo_box.item label="Nieprzyzwoitość > Niestosowne imię awatara" name="Indecency__Inappropriate_avatar_name"/> - <combo_box.item label="Nieprzyzwoitość > Obraźliwa treść i postępowanie w Regionie 'PG'" name="Indecency__Mature_content_in_PG_region"/> - <combo_box.item label="Nieprzyzwoitość > Obraźliwa treść i postępowanie w Regionie 'Mature'" name="Indecency__Inappropriate_content_in_Mature_region"/> + <combo_box.item label="Nieprzyzwoitość > Obraźliwa treść i postępowanie w Regionie 'General'" name="Indecency__Mature_content_in_PG_region"/> + <combo_box.item label="Nieprzyzwoitość > Obraźliwa treść i postępowanie w Regionie 'Moderate'" name="Indecency__Inappropriate_content_in_Mature_region"/> <combo_box.item label="Naruszenie własności intelektualnej > usunięcie treści" name="Intellectual_property_infringement_Content_Removal"/> <combo_box.item label="Naruszenie własności intelektualnej > CopyBot albo nadużycie przywilejów" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/> <combo_box.item label="Nietolerancja" name="Intolerance"/> diff --git a/indra/newview/skins/default/xui/pl/floater_script_search.xml b/indra/newview/skins/default/xui/pl/floater_script_search.xml index cb010daee4..901d61a137 100644 --- a/indra/newview/skins/default/xui/pl/floater_script_search.xml +++ b/indra/newview/skins/default/xui/pl/floater_script_search.xml @@ -3,7 +3,7 @@ <check_box label="CapsLoock nieaktywny" name="case_text"/> <button label="Szukaj" label_selected="Szukaj" name="search_btn"/> <button label="Zamień" label_selected="Zamień" name="replace_btn"/> - <button label="Zamień Wszystko" label_selected="Zamień wszystko" name="replace_all_btn"/> + <button label="Zamień wszystko" label_selected="Zamień wszystko" name="replace_all_btn"/> <text name="txt"> Szukaj </text> diff --git a/indra/newview/skins/default/xui/pl/floater_sell_land.xml b/indra/newview/skins/default/xui/pl/floater_sell_land.xml index eb1ed74797..528e5a416b 100644 --- a/indra/newview/skins/default/xui/pl/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/pl/floater_sell_land.xml @@ -15,13 +15,13 @@ [AREA] m² </text> <text name="info_action"> - Aby sprzedać tą Posiadłość: + Aby sprzedać tą posiadłość: </text> <text name="price_label"> 1. Ustal cenę: </text> <text name="price_text"> - Wybierz właściwą cenę za tą Posiadłość. + Wybierz właściwą cenę za tą posiadłość. </text> <text name="price_ld"> L$ @@ -33,7 +33,7 @@ (L$[PER_METER] za m²) </text> <text name="sell_to_label"> - 2. Sprzedaj Posiadłość: + 2. Sprzedaj posiadłość: </text> <text name="sell_to_text"> Wybierz sprzedaż dla kogokolwiek albo dla wybranego kupca. @@ -45,14 +45,14 @@ </combo_box> <button label="Wybierz" name="sell_to_select_agent"/> <text name="sell_objects_label"> - 3. Obiekty sprzedawane razem z Posiadłością? + 3. Obiekty sprzedawane razem z posiadłością? </text> <text name="sell_objects_text"> - Przekazywalne obiekty właściciela Posiadłości zmienią właściciela. + Przekazywalne obiekty właściciela posiadłości zmienią właściciela. </text> <radio_group name="sell_objects"> <radio_item label="Nie, zatrzymaj obiekty" name="no"/> - <radio_item label="Tak, sprzedaj obiekty razem z Posiadłością" name="yes"/> + <radio_item label="Tak, sprzedaj obiekty razem z posiadłością" name="yes"/> </radio_group> <button label="Pokaż Obiekty" name="show_objects"/> <text name="nag_message_label"> diff --git a/indra/newview/skins/default/xui/pl/floater_stats.xml b/indra/newview/skins/default/xui/pl/floater_stats.xml index ee5fba4d63..886a30e5d9 100644 --- a/indra/newview/skins/default/xui/pl/floater_stats.xml +++ b/indra/newview/skins/default/xui/pl/floater_stats.xml @@ -30,18 +30,18 @@ <stat_bar label="Tesktura" name="texturekbitstat"/> <stat_bar label="Asset" name="assetkbitstat"/> <stat_bar label="Podkład" name="layerskbitstat"/> - <stat_bar label="Aktualna Ilość Wewnętrzna" name="actualinkbitstat"/> - <stat_bar label="Aktualna Ilość Zewnętrzna" name="actualoutkbitstat"/> + <stat_bar label="Aktualna ilość wewnętrzna" name="actualinkbitstat"/> + <stat_bar label="Aktualna ilość zewnętrzna" name="actualoutkbitstat"/> <stat_bar label="VFS Pending Ops" name="vfspendingoperations"/> </stat_view> </stat_view> <stat_view label="Symulator" name="sim"> - <stat_bar label="Czas Rozszerzenia" name="simtimedilation"/> - <stat_bar label="Ilość Obrazów/Sec na Symulatorze (Sim FPS)" name="simfps"/> - <stat_bar label="Fizyka Obrazów/Sec" name="simphysicsfps"/> - <stat_view label="Szczegóły Fizyki" name="physicsdetail"> + <stat_bar label="Czas rozszerzenia" name="simtimedilation"/> + <stat_bar label="Ilość obrazów/Sec na symulatorze (Sim FPS)" name="simfps"/> + <stat_bar label="Fizyka obrazów/Sec" name="simphysicsfps"/> + <stat_view label="Szczegóły fizyki" name="physicsdetail"> <stat_bar label="Pinned objects" name="physicspinnedtasks"/> - <stat_bar label="Niskie LOD Obiektów" name="physicslodtasks"/> + <stat_bar label="Niskie LOD obiektów" name="physicslodtasks"/> <stat_bar label="Alokacja pamięci" name="physicsmemoryallocated"/> <stat_bar label="Aktualizacja agentów/Sek" name="simagentups"/> <stat_bar label="Główni agenci" name="simmainagents"/> diff --git a/indra/newview/skins/default/xui/pl/floater_tools.xml b/indra/newview/skins/default/xui/pl/floater_tools.xml index 7e97297bca..817a72efd9 100644 --- a/indra/newview/skins/default/xui/pl/floater_tools.xml +++ b/indra/newview/skins/default/xui/pl/floater_tools.xml @@ -22,7 +22,7 @@ Kliknij in-world by zacząć budować </floater.string> <floater.string name="status_selectland"> - Edytowanie Terenu: + Edytowanie terenu: </floater.string> <floater.string name="grid_screen_text"> Widok @@ -71,7 +71,7 @@ <text label="Rozciągnij 2 strony" name="checkbox uniform label"> Rozciągnij 2 strony </text> - <check_box initial_value="true" label="Rozciągnij Teksturę" name="checkbox stretch textures"/> + <check_box initial_value="true" label="Rozciągnij teksturę" name="checkbox stretch textures"/> <check_box initial_value="true" label="Użyj siatki" name="checkbox snap to grid"/> <combo_box name="combobox grid mode" tool_tip="Wybierz rodzaj linijki siatki dla pozycjonowania obiektu"> <combo_box.item label="Świat" name="World"/> @@ -218,11 +218,11 @@ <check_box label="Przesuń" name="checkbox allow everyone move"/> <check_box label="Kopiuj" name="checkbox allow everyone copy"/> <text name="Next owner can:"> - Następny Właściciel: + Następny właściciel: </text> <check_box label="Zmienia" name="checkbox next owner can modify"/> <check_box label="Kopiuje" name="checkbox next owner can copy"/> - <check_box label="Oddaje/Sprzedaje" name="checkbox next owner can transfer" tool_tip="Następny Właściciel może oddawać lub sprzedawać ten obiekt"/> + <check_box label="Oddaje/Sprzedaje" name="checkbox next owner can transfer" tool_tip="Następny właściciel może oddawać lub sprzedawać ten obiekt"/> <text name="B:"> B: </text> @@ -299,7 +299,7 @@ <spinner name="Scale 1"/> <spinner name="Skew"/> <text name="Hollow Shape"> - Kształt Wydrążenia + Kształt wydrążenia </text> <combo_box name="hole"> <combo_box.item label="Domyślny" name="Default"/> @@ -399,7 +399,7 @@ <texture_picker label="Tekstura" name="texture control" tool_tip="Kliknij by wybrać obraz"/> <color_swatch label="Kolor" name="colorswatch" tool_tip="Kliknij aby wybrać kolor"/> <text left="170" name="color trans" width="99"> - Przezroczystość% + Przezroczystość % </text> <spinner left="170" name="ColorTrans"/> <text left="170" name="glow label"> @@ -431,9 +431,9 @@ <combo_box.item label="Najjaśniejsza" name="Brightness"/> <combo_box.item label="Najciemniejsza" name="Darkness"/> <combo_box.item label="Drewniano-ziarnista" name="woodgrain"/> - <combo_box.item label="Kory Drzewa" name="bark"/> + <combo_box.item label="Kory drzewa" name="bark"/> <combo_box.item label="Cegieł" name="bricks"/> - <combo_box.item label="Planszy Szachowej" name="checker"/> + <combo_box.item label="Planszy szachowej" name="checker"/> <combo_box.item label="Betonu" name="concrete"/> <combo_box.item label="Płytki/Kafelki" name="crustytile"/> <combo_box.item label="Kamienia" name="cutstone"/> @@ -441,7 +441,7 @@ <combo_box.item label="Żwiru" name="gravel"/> <combo_box.item label="Skamieliny" name="petridish"/> <combo_box.item label="Brzegu" name="siding"/> - <combo_box.item label="Płytki Kamiennej" name="stonetile"/> + <combo_box.item label="Płytki kamiennej" name="stonetile"/> <combo_box.item label="Stucco" name="stucco"/> <combo_box.item label="Suction" name="suction"/> <combo_box.item label="Fali" name="weave"/> @@ -478,7 +478,7 @@ </tab_container> <panel name="land info panel"> <text name="label_parcel_info"> - Informacje o Posiadłości + Informacje o posiadłości </text> <text name="label_area_price"> Cena: L$[PRICE] za [AREA] m² @@ -487,16 +487,16 @@ Obszar: [AREA] m² </text> <button label="O Posiadłości" label_selected="O Posiadłości" name="button about land"/> - <check_box label="Pokaż Właścicieli" name="checkbox show owners" tool_tip="Pokoloruj Posiadłości zgodnie z przynależnością do Właściciela: Zielony = Twoja Posiadłość Morski = Posiadłość Twojej Grupy Czerwony = Posiadłości innych Żółty = Na sprzedaż Fioletowy = Na aukcję Szary = Publiczna"/> + <check_box label="Pokaż właścicieli" name="checkbox show owners" tool_tip="Pokoloruj posiadłości zgodnie z przynależnością do właściciela: Zielony = Twoja posiadłość Morski = posiadłość Twojej grupy Czerwony = posiadłości innych Żółty = Na sprzedaż Fioletowy = Na aukcję Szary = Publiczna"/> <text name="label_parcel_modify"> - Modyfikuj Posiadłość + Modyfikuj posiadłość </text> <button label="Podziel" label_selected="Podziel" name="button subdivide land"/> <button label="Złącz" label_selected="Złącz" name="button join land"/> <text name="label_parcel_trans"> - Transakcje na Posiadłości + Transakcje na posiadłości </text> - <button label="Kup Posiadłość" label_selected="Kup Posiadłość" name="button buy land"/> - <button label="Porzuć Posiadłość" label_selected="Porzuć Posiadłość" name="button abandon land"/> + <button label="Kup posiadłość" label_selected="Kup posiadłość" name="button buy land"/> + <button label="Porzuć posiadłość" label_selected="Porzuć posiadłość" name="button abandon land"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_top_objects.xml b/indra/newview/skins/default/xui/pl/floater_top_objects.xml index 6afbce7e10..2b06ae9f78 100644 --- a/indra/newview/skins/default/xui/pl/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/pl/floater_top_objects.xml @@ -10,7 +10,7 @@ Czas </floater.string> <floater.string name="scripts_mono_time_label"> - Mono Time + Czas Mono </floater.string> <floater.string name="top_colliders_title"> Główne kolizje @@ -33,7 +33,7 @@ <scroll_list.columns label="Właściciel" name="owner"/> <scroll_list.columns label="Miejsce" name="location"/> <scroll_list.columns label="Czas" name="time"/> - <scroll_list.columns label="Mono Time" name="mono_time"/> + <scroll_list.columns label="Czas Mono" name="mono_time"/> <scroll_list.columns label="URL" name="URLs"/> </scroll_list> <text name="id_text"> @@ -51,6 +51,6 @@ <button label="Odśwież" name="refresh_btn"/> <button label="Zwróć wybrane" name="return_selected_btn"/> <button label="Zwróć wszystko" name="return_all_btn"/> - <button label="Deaktywuj wybrane" name="disable_selected_btn"/> - <button label="Deaktywuj wszystko" name="disable_all_btn"/> + <button label="Dezaktywuj wybrane" name="disable_selected_btn"/> + <button label="Dezaktywuj wszystko" name="disable_all_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml index 49e523fae8..930e904464 100644 --- a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml @@ -77,7 +77,7 @@ </panel> <panel label="ŚWIATŁO" name="Lighting"> <text name="SLCText"> - Kolor słońca/księżyca + Kolor Słońca/Księżyca </text> <button label="?" name="WLSunlightColorHelp"/> <text name="BHText"> @@ -97,7 +97,7 @@ <slider label="" name="WLSunlightB"/> <slider label="" name="WLSunlightI"/> <text name="TODText"> - Pozycja słońca/księżyca + Pozycja Słońca/Księżyca </text> <button label="?" name="WLTimeOfDayHelp"/> <slider label="" name="WLSunAngle"/> @@ -127,7 +127,7 @@ <button label="?" name="WLEastAngleHelp"/> <slider label="" name="WLEastAngle"/> <text name="SunGlowText"> - Blask słońca + Blask Słońca </text> <button label="?" name="WLSunGlowHelp"/> <slider label="Ostrość" name="WLGlowB"/> diff --git a/indra/newview/skins/default/xui/pl/floater_world_map.xml b/indra/newview/skins/default/xui/pl/floater_world_map.xml index 3e62393e7a..4f53337365 100644 --- a/indra/newview/skins/default/xui/pl/floater_world_map.xml +++ b/indra/newview/skins/default/xui/pl/floater_world_map.xml @@ -17,13 +17,13 @@ Infohub </text> <text name="land_sale_label"> - Sprzedaż Posiadłości - </text> - <text name="by_owner_label"> - przez Właściciela + Sprzedaż posiadłości </text> <text name="auction_label"> - aukcja Posiadłości + Aukcja posiadłości + </text> + <text name="by_owner_label"> + przez właściciela </text> <button name="Go Home" tool_tip="Teleportuj do mojego Miejsca Startowego"/> <text name="Home_label"> @@ -33,11 +33,11 @@ Wydarzenia: </text> <text name="pg_label"> - Ogólne + General </text> - <check_box name="events_mature_chk"/> + <check_box initial_value="true" name="events_mature_chk"/> <text name="events_mature_label"> - Moderuj + Moderate </text> <text name="events_adult_label"> Adult @@ -49,15 +49,18 @@ </text> </panel> <panel name="layout_panel_4"> - <combo_box label="Dostępni Znajomi" name="friend combo" tool_tip="Pokaż znajomych na mapie"> - <combo_box.item label="Moi Dostępni Znajomi" name="item1"/> + <combo_box label="Dostępni znajomi" name="friend combo" tool_tip="Pokaż znajomych na mapie"> + <combo_box.item label="Moi dostępni znajomi" name="item1"/> </combo_box> - <combo_box label="Zapisane Miejsca" name="landmark combo" tool_tip="Pokaż zapisane miejsce na mapie"> - <combo_box.item label="Zapisane Miejsca" name="item1"/> + <combo_box label="Zapisane miejsca" name="landmark combo" tool_tip="Pokaż zapisane miejsce na mapie"> + <combo_box.item label="Zapisane miejsca" name="item1"/> </combo_box> - <search_editor label="Regiony Według Nazwy" name="location" tool_tip="Wpisz nazwę regionu"/> + <search_editor label="Regiony według nazwy" name="location" tool_tip="Wpisz nazwę regionu"/> <button label="Znajdź" name="DoSearch" tool_tip="Szukaj regionu"/> <button name="Clear" tool_tip="Wyczyść zapamiętane linie oraz zresetuj mapę"/> + <text name="events_label"> + Lokalizacja: + </text> <button label="Teleportuj" name="Teleport" tool_tip="Teleportuj do wybranego miejsca"/> <button label="Kopiuj SLurl" name="copy_slurl" tool_tip="Kopie obecnego miejsca jako SLurl mogą zostać użyte na stronie internetowej."/> <button label="Pokaż wybrane" name="Show Destination" tool_tip="Wyśrodkuj mapę w wybranym miejscu"/> diff --git a/indra/newview/skins/default/xui/pl/inspect_avatar.xml b/indra/newview/skins/default/xui/pl/inspect_avatar.xml index 3ee0b976eb..778e500bc0 100644 --- a/indra/newview/skins/default/xui/pl/inspect_avatar.xml +++ b/indra/newview/skins/default/xui/pl/inspect_avatar.xml @@ -10,8 +10,8 @@ <string name="Details"> [SL_PROFILE] </string> - <slider name="volume_slider" tool_tip="Posiom Głośności" value="0.5"/> - <button label="Dodaj Znajomość" name="add_friend_btn"/> + <slider name="volume_slider" tool_tip="Poziom głośności" value="0.5"/> + <button label="Dodaj znajomość" name="add_friend_btn"/> <button label="IM" name="im_btn"/> <button label="Profil" name="view_profile_btn"/> <panel name="moderator_panel"> diff --git a/indra/newview/skins/default/xui/pl/inspect_group.xml b/indra/newview/skins/default/xui/pl/inspect_group.xml index 0a2a62ce74..63c79acc8c 100644 --- a/indra/newview/skins/default/xui/pl/inspect_group.xml +++ b/indra/newview/skins/default/xui/pl/inspect_group.xml @@ -18,5 +18,5 @@ </string> <button label="Dołącz" name="join_btn"/> <button label="Opuść" name="leave_btn"/> - <button label="Zobacz Profil" name="view_profile_btn"/> + <button label="Zobacz profil" name="view_profile_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/inspect_object.xml b/indra/newview/skins/default/xui/pl/inspect_object.xml index 4217731ef7..23d8ce7700 100644 --- a/indra/newview/skins/default/xui/pl/inspect_object.xml +++ b/indra/newview/skins/default/xui/pl/inspect_object.xml @@ -8,7 +8,7 @@ Przez [CREATOR] </string> <string name="CreatorAndOwner"> - Kreator [CREATOR] + Twórca [CREATOR] Właściciel [OWNER] </string> <string name="Price"> diff --git a/indra/newview/skins/default/xui/pl/language_settings.xml b/indra/newview/skins/default/xui/pl/language_settings.xml index debc451a33..681b38e9cf 100644 --- a/indra/newview/skins/default/xui/pl/language_settings.xml +++ b/indra/newview/skins/default/xui/pl/language_settings.xml @@ -17,6 +17,7 @@ datetimeToCodes["month"] = "%B"; // August datetimeToCodes["mthnum"] = "%m"; // 08 datetimeToCodes["day"] = "%d"; // 31 + datetimeToCodes["sday"] = "%-d"; // 9 datetimeToCodes["hour24"] = "%H"; // 14 datetimeToCodes["hour"] = "%H"; // 14 datetimeToCodes["hour12"] = "%I"; // 02 diff --git a/indra/newview/skins/default/xui/pl/menu_attachment_other.xml b/indra/newview/skins/default/xui/pl/menu_attachment_other.xml index 8a3269a923..aacdad97e3 100644 --- a/indra/newview/skins/default/xui/pl/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/pl/menu_attachment_other.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!-- *NOTE: See also menu_avatar_other.xml --> <context_menu name="Avatar Pie"> - <menu_item_call label="Zobacz Profil" name="Profile..."/> - <menu_item_call label="Dodaj Znajomość" name="Add Friend"/> + <menu_item_call label="Zobacz profil" name="Profile..."/> + <menu_item_call label="Dodaj znajomość" name="Add Friend"/> <menu_item_call label="IM" name="Send IM..."/> <menu_item_call label="Zadzwoń" name="Call"/> - <menu_item_call label="Zaproś do Grupy" name="Invite..."/> + <menu_item_call label="Zaproś do grupy" name="Invite..."/> <menu_item_call label="Zablokuj" name="Avatar Mute"/> <menu_item_call label="Raport" name="abuse"/> <menu_item_call label="Unieruchom" name="Freeze..."/> diff --git a/indra/newview/skins/default/xui/pl/menu_attachment_self.xml b/indra/newview/skins/default/xui/pl/menu_attachment_self.xml index 39fe83ad2f..cdc01f286c 100644 --- a/indra/newview/skins/default/xui/pl/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/pl/menu_attachment_self.xml @@ -7,9 +7,9 @@ <menu_item_call label="Zmień strój" name="Change Outfit"/> <menu_item_call label="Edytuj mój strój" name="Edit Outfit"/> <menu_item_call label="Edytuj mój kształt" name="Edit My Shape"/> - <menu_item_call label="Moi Znajomi" name="Friends..."/> - <menu_item_call label="Moje Grupy" name="Groups..."/> - <menu_item_call label="Mój Profil" name="Profile..."/> + <menu_item_call label="Moi znajomi" name="Friends..."/> + <menu_item_call label="Moje grupy" name="Groups..."/> + <menu_item_call label="Mój profil" name="Profile..."/> <menu_item_call label="Debugowanie tekstur" name="Debug..."/> <menu_item_call label="Opuść" name="Drop"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_icon.xml b/indra/newview/skins/default/xui/pl/menu_avatar_icon.xml index c9ad275a26..e8d2b14231 100644 --- a/indra/newview/skins/default/xui/pl/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/pl/menu_avatar_icon.xml @@ -2,6 +2,6 @@ <menu name="Avatar Icon Menu"> <menu_item_call label="Profil" name="Show Profile"/> <menu_item_call label="Czat/IM..." name="Send IM"/> - <menu_item_call label="Dodaj Znajomość..." name="Add Friend"/> + <menu_item_call label="Dodaj znajomość..." name="Add Friend"/> <menu_item_call label="Usuń..." name="Remove Friend"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_other.xml b/indra/newview/skins/default/xui/pl/menu_avatar_other.xml index 9a1603e212..dcf7921bad 100644 --- a/indra/newview/skins/default/xui/pl/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/pl/menu_avatar_other.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!-- *NOTE: See also menu_attachment_other.xml --> <context_menu name="Avatar Pie"> - <menu_item_call label="Zobacz Profil" name="Profile..."/> - <menu_item_call label="Dodaj Znajomość" name="Add Friend"/> + <menu_item_call label="Zobacz profil" name="Profile..."/> + <menu_item_call label="Dodaj znajomość" name="Add Friend"/> <menu_item_call label="IM" name="Send IM..."/> <menu_item_call label="Zadzwoń" name="Call"/> - <menu_item_call label="Zaproś do Grupy" name="Invite..."/> + <menu_item_call label="Zaproś do grupy" name="Invite..."/> <menu_item_call label="Zablokuj" name="Avatar Mute"/> <menu_item_call label="Raport" name="abuse"/> <menu_item_call label="Unieruchom" name="Freeze..."/> diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_self.xml b/indra/newview/skins/default/xui/pl/menu_avatar_self.xml index aa415db6ea..1091eaa7fb 100644 --- a/indra/newview/skins/default/xui/pl/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/pl/menu_avatar_self.xml @@ -3,7 +3,7 @@ <menu_item_call label="Wstań" name="Stand Up"/> <context_menu label="Zdejmij ▶" name="Take Off >"> <context_menu label="Ubrania ▶" name="Clothes >"> - <menu_item_call label="Koszulkę" name="Shirt"/> + <menu_item_call label="Koszulę" name="Shirt"/> <menu_item_call label="Spodnie" name="Pants"/> <menu_item_call label="Spódnicę" name="Skirt"/> <menu_item_call label="Buty" name="Shoes"/> @@ -13,18 +13,18 @@ <menu_item_call label="Podkoszulek" name="Self Undershirt"/> <menu_item_call label="Bieliznę" name="Self Underpants"/> <menu_item_call label="Tatuaż" name="Self Tattoo"/> - <menu_item_call label="Ubranie Przezroczyste" name="Self Alpha"/> + <menu_item_call label="Ubranie alpha" name="Self Alpha"/> <menu_item_call label="Wszystko" name="All Clothes"/> </context_menu> <context_menu label="HUD ▶" name="Object Detach HUD"/> <context_menu label="Odłącz ▶" name="Object Detach"/> - <menu_item_call label="Odłącz Wszystko" name="Detach All"/> + <menu_item_call label="Odłącz wszystko" name="Detach All"/> </context_menu> <menu_item_call label="Zmień strój" name="Chenge Outfit"/> <menu_item_call label="Edytuj mój strój" name="Edit Outfit"/> <menu_item_call label="Edytuj mój kształt" name="Edit My Shape"/> - <menu_item_call label="Moi Znajomi" name="Friends..."/> - <menu_item_call label="Moje Grupy" name="Groups..."/> - <menu_item_call label="Mój Profil" name="Profile..."/> + <menu_item_call label="Moi znajomi" name="Friends..."/> + <menu_item_call label="Moje grupy" name="Groups..."/> + <menu_item_call label="Mój profil" name="Profile..."/> <menu_item_call label="Debugowanie tekstur" name="Debug..."/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_bottomtray.xml b/indra/newview/skins/default/xui/pl/menu_bottomtray.xml index 7e1b37f2dd..a4a6ea484d 100644 --- a/indra/newview/skins/default/xui/pl/menu_bottomtray.xml +++ b/indra/newview/skins/default/xui/pl/menu_bottomtray.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="hide_camera_move_controls_menu"> - <menu_item_check label="Przycisk Gestur" name="ShowGestureButton"/> - <menu_item_check label="Przycisk Ruchu" name="ShowMoveButton"/> - <menu_item_check label="Przycisk Widoku" name="ShowCameraButton"/> - <menu_item_check label="Przycisk Zdjęć" name="ShowSnapshotButton"/> + <menu_item_check label="Przycisk gesturki" name="ShowGestureButton"/> + <menu_item_check label="Przycisk ruchu" name="ShowMoveButton"/> + <menu_item_check label="Przycisk widoku" name="ShowCameraButton"/> + <menu_item_check label="Przycisk zdjęć" name="ShowSnapshotButton"/> <menu_item_check label="Schowek" name="ShowSidebarButton"/> <menu_item_check label="Buduj" name="ShowBuildButton"/> <menu_item_check label="Szukaj" name="ShowSearchButton"/> diff --git a/indra/newview/skins/default/xui/pl/menu_cof_gear.xml b/indra/newview/skins/default/xui/pl/menu_cof_gear.xml index e8aaa2cf82..9fba39be1a 100644 --- a/indra/newview/skins/default/xui/pl/menu_cof_gear.xml +++ b/indra/newview/skins/default/xui/pl/menu_cof_gear.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="Gear COF"> - <menu label="Nowe Ubranie" name="COF.Gear.New_Clothes"/> + <menu label="Nowe ubranie" name="COF.Gear.New_Clothes"/> <menu label="Nowe części ciała" name="COF.Geear.New_Body_Parts"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_favorites.xml b/indra/newview/skins/default/xui/pl/menu_favorites.xml index cbacaf4beb..7310ff5c27 100644 --- a/indra/newview/skins/default/xui/pl/menu_favorites.xml +++ b/indra/newview/skins/default/xui/pl/menu_favorites.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="Popup"> <menu_item_call label="Teleportuj" name="Teleport To Landmark"/> - <menu_item_call label="Zobacz/Edytuj Ulubione Miejsce" name="Landmark Open"/> + <menu_item_call label="Zobacz/Edytuj Ulubione miejsce" name="Landmark Open"/> <menu_item_call label="Kopiuj SLurl" name="Copy slurl"/> <menu_item_call label="Pokaż na mapie" name="Show On Map"/> <menu_item_call label="Kopiuj" name="Landmark Copy"/> diff --git a/indra/newview/skins/default/xui/pl/menu_group_plus.xml b/indra/newview/skins/default/xui/pl/menu_group_plus.xml index 9d3859081e..83be4d38c5 100644 --- a/indra/newview/skins/default/xui/pl/menu_group_plus.xml +++ b/indra/newview/skins/default/xui/pl/menu_group_plus.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_group_plus"> - <menu_item_call label="Dołącz do Grupy..." name="item_join"/> - <menu_item_call label="Nowa Grupa..." name="item_new"/> + <menu_item_call label="Dołącz do grupy..." name="item_join"/> + <menu_item_call label="Nowa grupa..." name="item_new"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml index c53f72c043..2b9a362123 100644 --- a/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml +++ b/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="IMChiclet Group Menu"> - <menu_item_call label="O Grupie" name="Show Profile"/> + <menu_item_call label="O grupie" name="Show Profile"/> <menu_item_call label="Pokaż sesję" name="Chat"/> <menu_item_call label="Zakończ rozmowę" name="End Session"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml index c0c812c0a7..8924d6db3e 100644 --- a/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml +++ b/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="IMChiclet P2P Menu"> - <menu_item_call label="Zobacz Profil" name="Show Profile"/> - <menu_item_call label="Dodaj Znajomość" name="Add Friend"/> + <menu_item_call label="Zobacz profil" name="Show Profile"/> + <menu_item_call label="Dodaj znajomość" name="Add Friend"/> <menu_item_call label="Pokaż sesję" name="Send IM"/> <menu_item_call label="Zakończ rozmowę" name="End Session"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml index 9a102e1416..5c27d53d90 100644 --- a/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml +++ b/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <menu name="Gear Menu"> - <menu_item_call label="Zobacz Profil" name="view_profile"/> - <menu_item_call label="Dodaj Znajomość" name="add_friend"/> + <menu_item_call label="Zobacz profil" name="view_profile"/> + <menu_item_call label="Dodaj znajomość" name="add_friend"/> <menu_item_call label="IM" name="im"/> <menu_item_call label="Zadzwoń" name="call"/> <menu_item_call label="Teleportuj" name="teleport"/> - <menu_item_call label="Zaproś do Grupy" name="invite_to_group"/> + <menu_item_call label="Zaproś do grupy" name="invite_to_group"/> <menu_item_call label="Zablokuj" name="block"/> <menu_item_call label="Odblokuj" name="unblock"/> <menu_item_call label="Raport" name="report"/> diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml index 2ea3702663..6d6377dbc3 100644 --- a/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml +++ b/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml @@ -2,8 +2,8 @@ <menu name="Gear Menu"> <menu_item_call label="Wstań" name="stand_up"/> <menu_item_call label="Zmień strój" name="change_outfit"/> - <menu_item_call label="Mój Profil" name="my_profile"/> - <menu_item_call label="Moi Znajomi" name="my_friends"/> - <menu_item_call label="Moje Grupy" name="my_groups"/> + <menu_item_call label="Mój profil" name="my_profile"/> + <menu_item_call label="Moi znajomi" name="my_friends"/> + <menu_item_call label="Moje grupy" name="my_groups"/> <menu_item_call label="Debugowanie tekstur" name="Debug..."/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_inventory.xml b/indra/newview/skins/default/xui/pl/menu_inventory.xml index f26bc10c26..e47ffa0e18 100644 --- a/indra/newview/skins/default/xui/pl/menu_inventory.xml +++ b/indra/newview/skins/default/xui/pl/menu_inventory.xml @@ -8,13 +8,13 @@ <menu_item_call label="Zmień nazwę" name="Task Rename"/> <menu_item_call label="Usuń" name="Task Remove"/> <menu_item_call label="Opróżnij Kosz" name="Empty Trash"/> - <menu_item_call label="Opróżnij Folder Zgubione i Odnalezione" name="Empty Lost And Found"/> + <menu_item_call label="Opróżnij Folder Zgubione i odnalezione" name="Empty Lost And Found"/> <menu_item_call label="Nowy folder" name="New Folder"/> <menu_item_call label="Nowy skrypt" name="New Script"/> <menu_item_call label="Nowa nota" name="New Note"/> - <menu_item_call label="Nowy gest" name="New Gesture"/> + <menu_item_call label="Nowa gesturka" name="New Gesture"/> <menu label="Nowe Ubranie" name="New Clothes"> - <menu_item_call label="Nowa koszulka" name="New Shirt"/> + <menu_item_call label="Nowa koszula" name="New Shirt"/> <menu_item_call label="Nowe spodnie" name="New Pants"/> <menu_item_call label="Nowe buty" name="New Shoes"/> <menu_item_call label="Nowe skarpety" name="New Socks"/> @@ -23,7 +23,7 @@ <menu_item_call label="Nowe rękawiczki" name="New Gloves"/> <menu_item_call label="Nowy podkoszulek" name="New Undershirt"/> <menu_item_call label="Nowa bielizna" name="New Underpants"/> - <menu_item_call label="Nowa maska Alpha" name="New Alpha Mask"/> + <menu_item_call label="Nowa maska alpha" name="New Alpha Mask"/> <menu_item_call label="Nowy tatuaż" name="New Tattoo"/> </menu> <menu label="Nowa Część Ciała" name="New Body Parts"> @@ -39,7 +39,7 @@ <menu_item_call label="Spodnie" name="Pants"/> <menu_item_call label="Kształt" name="Shape"/> <menu_item_call label="Buty" name="Shoes"/> - <menu_item_call label="Koszulka" name="Shirt"/> + <menu_item_call label="Koszula" name="Shirt"/> <menu_item_call label="Spódnica" name="Skirt"/> <menu_item_call label="Bielizna" name="Underpants"/> <menu_item_call label="Podkoszulek" name="Undershirt"/> @@ -59,8 +59,9 @@ <menu_item_call label="Kopiuj" name="Copy"/> <menu_item_call label="Wklej" name="Paste"/> <menu_item_call label="Wklej jako link" name="Paste As Link"/> + <menu_item_call label="Usuń" name="Remove Link"/> <menu_item_call label="Usuń" name="Delete"/> - <menu_item_call label="Skasuj Folder Systemu" name="Delete System Folder"/> + <menu_item_call label="Skasuj folder systemu" name="Delete System Folder"/> <menu_item_call label="Rozpocznij konferencję czatową" name="Conference Chat Folder"/> <menu_item_call label="Odtwarzaj" name="Sound Play"/> <menu_item_call label="O Miejscu" name="About Landmark"/> @@ -75,7 +76,7 @@ <menu_item_call label="Odłącz od siebie" name="Detach From Yourself"/> <menu_item_call label="Załóż" name="Wearable And Object Wear"/> <menu label="Dołącz do" name="Attach To"/> - <menu label="Dołącz do Załączników HUD" name="Attach To HUD"/> + <menu label="Dołącz do załączników HUD" name="Attach To HUD"/> <menu_item_call label="Edytuj" name="Wearable Edit"/> <menu_item_call label="Dodaj" name="Wearable Add"/> <menu_item_call label="Zdejmij" name="Take Off"/> diff --git a/indra/newview/skins/default/xui/pl/menu_inventory_add.xml b/indra/newview/skins/default/xui/pl/menu_inventory_add.xml index b4d85c2c5c..4a56586aaf 100644 --- a/indra/newview/skins/default/xui/pl/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/pl/menu_inventory_add.xml @@ -5,13 +5,14 @@ <menu_item_call label="dźwięk (L$[COST])..." name="Upload Sound"/> <menu_item_call label="animację (L$[COST])..." name="Upload Animation"/> <menu_item_call label="zbiór plików (L$[COST] za jeden plik)..." name="Bulk Upload"/> + <menu_item_call label="Ustaw domyślne pozwolenia ładowania" name="perm prefs"/> </menu> <menu_item_call label="Nowy folder" name="New Folder"/> <menu_item_call label="Nowy skrypt" name="New Script"/> <menu_item_call label="Nowa nota" name="New Note"/> - <menu_item_call label="Nowy gest" name="New Gesture"/> + <menu_item_call label="Nowa gesturka" name="New Gesture"/> <menu label="Nowe Ubranie" name="New Clothes"> - <menu_item_call label="Nowa koszulka" name="New Shirt"/> + <menu_item_call label="Nowa koszula" name="New Shirt"/> <menu_item_call label="Nowe spodnie" name="New Pants"/> <menu_item_call label="Nowe buty" name="New Shoes"/> <menu_item_call label="Nowe skarpetki" name="New Socks"/> @@ -20,7 +21,7 @@ <menu_item_call label="Nowe rękawiczki" name="New Gloves"/> <menu_item_call label="Nowy podkoszulek" name="New Undershirt"/> <menu_item_call label="Nowa bielizna" name="New Underpants"/> - <menu_item_call label="Nowe ubranie Przezroczyste" name="New Alpha"/> + <menu_item_call label="Nowa maska alpha" name="New Alpha"/> <menu_item_call label="Nowy tatuaż" name="New Tattoo"/> </menu> <menu label="Nowa Część Ciała" name="New Body Parts"> diff --git a/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml index 382a7506cc..d110a2f02e 100644 --- a/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml @@ -6,7 +6,7 @@ <menu_item_call label="Pokaż filtry" name="show_filters"/> <menu_item_call label="Zresetuj filtry" name="reset_filters"/> <menu_item_call label="Zamknij wszystkie foldery" name="close_folders"/> - <menu_item_call label="Opróżnij Zagubione i Odnalezione" name="empty_lostnfound"/> + <menu_item_call label="Opróżnij Zagubione i odnalezione" name="empty_lostnfound"/> <menu_item_call label="Zapisz teksturę jako" name="Save Texture As"/> <menu_item_call label="Udostępnij" name="Share"/> <menu_item_call label="Znajdź oryginał" name="Find Original"/> diff --git a/indra/newview/skins/default/xui/pl/menu_land.xml b/indra/newview/skins/default/xui/pl/menu_land.xml index 1e1ce73089..cbfecaee56 100644 --- a/indra/newview/skins/default/xui/pl/menu_land.xml +++ b/indra/newview/skins/default/xui/pl/menu_land.xml @@ -2,7 +2,7 @@ <context_menu name="Land Pie"> <menu_item_call label="O Posiadłości" name="Place Information..."/> <menu_item_call label="Usiądź tutaj" name="Sit Here"/> - <menu_item_call label="Kup Posiadłość" name="Land Buy"/> + <menu_item_call label="Kup posiadłość" name="Land Buy"/> <menu_item_call label="Kup przepustkę" name="Land Buy Pass"/> <menu_item_call label="Buduj" name="Create"/> <menu_item_call label="Edytuj teren" name="Edit Terrain"/> diff --git a/indra/newview/skins/default/xui/pl/menu_login.xml b/indra/newview/skins/default/xui/pl/menu_login.xml index 810862dfd9..0dd6117b85 100644 --- a/indra/newview/skins/default/xui/pl/menu_login.xml +++ b/indra/newview/skins/default/xui/pl/menu_login.xml @@ -8,7 +8,7 @@ <menu_item_call label="[SECOND_LIFE]: Pomoc" name="Second Life Help"/> <menu_item_call label="O [APP_NAME]" name="About Second Life"/> </menu> - <menu_item_check label="Pokaż Ustawienia Debugowania" name="Show Debug Menu"/> + <menu_item_check label="Pokaż ustawienia debugowania" name="Show Debug Menu"/> <menu label="Debug" name="Debug"> <menu_item_call label="Ustawienia debugowania" name="Debug Settings"/> <menu_item_call label="Ustawienia UI/kolor" name="UI/Color Settings"/> @@ -17,7 +17,7 @@ <menu_item_call label="Wyświetl TOS" name="TOS"/> <menu_item_call label="Wyświetl wiadomość krytyczną" name="Critical"/> <menu_item_call label="Test przeglądarki internetowej" name="Web Browser Test"/> - <menu_item_check label="Pokaż Siatkę" name="Show Grid Picker"/> + <menu_item_check label="Pokaż siatkę" name="Show Grid Picker"/> <menu_item_call label="Pokaż konsolę Zawiadomień" name="Show Notifications Console"/> </menu> </menu_bar> diff --git a/indra/newview/skins/default/xui/pl/menu_navbar.xml b/indra/newview/skins/default/xui/pl/menu_navbar.xml index f38b805ee2..1d434670ee 100644 --- a/indra/newview/skins/default/xui/pl/menu_navbar.xml +++ b/indra/newview/skins/default/xui/pl/menu_navbar.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="Navbar Menu"> <menu_item_check label="Pokaż współrzędne" name="Show Coordinates"/> - <menu_item_check label="Pokaż właściwości Posiadłości" name="Show Parcel Properties"/> - <menu_item_call label="Ulubione Miejsce" name="Landmark"/> + <menu_item_check label="Pokaż właściwości posiadłości" name="Show Parcel Properties"/> + <menu_item_call label="Landmark" name="Landmark"/> <menu_item_call label="Wytnij" name="Cut"/> <menu_item_call label="Kopiuj" name="Copy"/> <menu_item_call label="Wklej" name="Paste"/> diff --git a/indra/newview/skins/default/xui/pl/menu_object.xml b/indra/newview/skins/default/xui/pl/menu_object.xml index 763b120f89..f25495e8e6 100644 --- a/indra/newview/skins/default/xui/pl/menu_object.xml +++ b/indra/newview/skins/default/xui/pl/menu_object.xml @@ -1,6 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Object Pie"> - <menu_item_call label="Dotknij" name="Object Touch"/> + <menu_item_call label="Dotknij" name="Object Touch"> + <on_enable parameter="Dotknij" name="EnableTouch"/> + </menu_item_call> <menu_item_call label="Edytuj" name="Edit..."/> <menu_item_call label="Buduj" name="Build"/> <menu_item_call label="Otwórz" name="Open"/> diff --git a/indra/newview/skins/default/xui/pl/menu_outfit_gear.xml b/indra/newview/skins/default/xui/pl/menu_outfit_gear.xml index ed754e36a7..1a70e76ec7 100644 --- a/indra/newview/skins/default/xui/pl/menu_outfit_gear.xml +++ b/indra/newview/skins/default/xui/pl/menu_outfit_gear.xml @@ -10,10 +10,10 @@ <menu_item_call label="Nowe skarpetki" name="New Socks"/> <menu_item_call label="Nowa kurtka" name="New Jacket"/> <menu_item_call label="Nowa spódnica" name="New Skirt"/> - <menu_item_call label="Nowe rękawiczki" name="New Gloves"/> + <menu_item_call label="Nowe rękawiczki" name="New Gloves"/> <menu_item_call label="Nowa podkoszulka" name="New Undershirt"/> <menu_item_call label="Nowa bielizna" name="New Underpants"/> - <menu_item_call label="Nowe alpha" name="New Alpha"/> + <menu_item_call label="Nowa maska alpha" name="New Alpha"/> <menu_item_call label="Nowy tatuaż" name="New Tattoo"/> </menu> <menu label="Nowe części ciała" name="New Body Parts"> diff --git a/indra/newview/skins/default/xui/pl/menu_participant_list.xml b/indra/newview/skins/default/xui/pl/menu_participant_list.xml index 59b4fec6b0..fd6d4dcc3c 100644 --- a/indra/newview/skins/default/xui/pl/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/pl/menu_participant_list.xml @@ -2,8 +2,8 @@ <context_menu name="Participant List Context Menu"> <menu_item_check label="Sortuj według imienia" name="SortByName"/> <menu_item_check label="Sortuj według ostatniego mówcy" name="SortByRecentSpeakers"/> - <menu_item_call label="Zobacz Profil" name="View Profile"/> - <menu_item_call label="Dodaj Znajomość" name="Add Friend"/> + <menu_item_call label="Zobacz profil" name="View Profile"/> + <menu_item_call label="Dodaj znajomość" name="Add Friend"/> <menu_item_call label="IM" name="IM"/> <menu_item_call label="Zadzwoń" name="Call"/> <menu_item_call label="Udostępnij" name="Share"/> diff --git a/indra/newview/skins/default/xui/pl/menu_people_groups.xml b/indra/newview/skins/default/xui/pl/menu_people_groups.xml index 567482dcda..ace5ebf888 100644 --- a/indra/newview/skins/default/xui/pl/menu_people_groups.xml +++ b/indra/newview/skins/default/xui/pl/menu_people_groups.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_group_plus"> - <menu_item_call label="Zobacz Info" name="View Info"/> + <menu_item_call label="Zobacz info" name="View Info"/> <menu_item_call label="Czat" name="Chat"/> <menu_item_call label="Rozmowa" name="Call"/> <menu_item_call label="Aktywuj" name="Activate"/> diff --git a/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml index 4be60d9b83..c70ea2315f 100644 --- a/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml +++ b/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_group_plus"> - <menu_item_check label="Wyświetlaj ikonki Grupy" name="Display Group Icons"/> - <menu_item_call label="Opuść zaznaczone Grupy" name="Leave Selected Group"/> + <menu_item_check label="Wyświetlaj ikonki grupy" name="Display Group Icons"/> + <menu_item_call label="Opuść zaznaczone grupy" name="Leave Selected Group"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby.xml index afe3a5200b..a8cc6b4a60 100644 --- a/indra/newview/skins/default/xui/pl/menu_people_nearby.xml +++ b/indra/newview/skins/default/xui/pl/menu_people_nearby.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Avatar Context Menu"> - <menu_item_call label="Zobacz Profil" name="View Profile"/> - <menu_item_call label="Dodaj Znajomość" name="Add Friend"/> - <menu_item_call label="Usuń z listy Znajomych" name="Remove Friend"/> + <menu_item_call label="Zobacz profil" name="View Profile"/> + <menu_item_call label="Dodaj znajomość" name="Add Friend"/> + <menu_item_call label="Usuń z listy znajomych" name="Remove Friend"/> <menu_item_call label="IM" name="IM"/> <menu_item_call label="Zadzwoń" name="Call"/> <menu_item_call label="Mapa" name="Map"/> diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml index bc89402a96..c924185c6f 100644 --- a/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml +++ b/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Multi-Selected People Context Menu"> - <menu_item_call label="Dodaj Znajomych" name="Add Friends"/> - <menu_item_call label="Usuń Znajomych" name="Remove Friend"/> + <menu_item_call label="Dodaj znajomych" name="Add Friends"/> + <menu_item_call label="Usuń znajomych" name="Remove Friend"/> <menu_item_call label="IM" name="IM"/> <menu_item_call label="Zadzwoń" name="Call"/> <menu_item_call label="Udostępnij" name="Share"/> diff --git a/indra/newview/skins/default/xui/pl/menu_picks_plus.xml b/indra/newview/skins/default/xui/pl/menu_picks_plus.xml index 8f196612a8..e9c00f51a9 100644 --- a/indra/newview/skins/default/xui/pl/menu_picks_plus.xml +++ b/indra/newview/skins/default/xui/pl/menu_picks_plus.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="picks_plus_menu"> <menu_item_call label="Stwórz" name="create_pick"/> - <menu_item_call label="Nowa Reklama" name="create_classified"/> + <menu_item_call label="Nowa reklama" name="create_classified"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_place.xml b/indra/newview/skins/default/xui/pl/menu_place.xml index 312bfc6bb0..c3b72d6abb 100644 --- a/indra/newview/skins/default/xui/pl/menu_place.xml +++ b/indra/newview/skins/default/xui/pl/menu_place.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="place_overflow_menu"> - <menu_item_call label="Zapisz Landmark" name="landmark"/> + <menu_item_call label="Zapisz landmark" name="landmark"/> <menu_item_call label="Utwórz" name="pick"/> - <menu_item_call label="Kup Przepustkę" name="pass"/> + <menu_item_call label="Kup przepustkę" name="pass"/> <menu_item_call label="Edytuj" name="edit"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_place_add_button.xml b/indra/newview/skins/default/xui/pl/menu_place_add_button.xml index 6175671fb9..3d0c1c87fb 100644 --- a/indra/newview/skins/default/xui/pl/menu_place_add_button.xml +++ b/indra/newview/skins/default/xui/pl/menu_place_add_button.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_folder_gear"> <menu_item_call label="Dodaj folder" name="add_folder"/> - <menu_item_call label="Dodaj do Landmarków" name="add_landmark"/> + <menu_item_call label="Dodaj do landmarków" name="add_landmark"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml index d17b6c1033..65417cef22 100644 --- a/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml +++ b/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_folder_gear"> - <menu_item_call label="Dodaj do Landmarków" name="add_landmark"/> + <menu_item_call label="Dodaj do landmarków" name="add_landmark"/> <menu_item_call label="Dodaj folder" name="add_folder"/> <menu_item_call label="Wytnij" name="cut"/> <menu_item_call label="Kopiuj" name="copy_folder"/> diff --git a/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml index 0720aea8aa..36787dd0aa 100644 --- a/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml +++ b/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml @@ -3,10 +3,10 @@ <menu_item_call label="Teleportuj" name="teleport"/> <menu_item_call label="Więcej informacji" name="more_info"/> <menu_item_call label="Pokaż na mapie" name="show_on_map"/> - <menu_item_call label="Dodaj do Landmarków" name="add_landmark"/> + <menu_item_call label="Dodaj do landmarków" name="add_landmark"/> <menu_item_call label="Dodaj folder" name="add_folder"/> <menu_item_call label="Wytnij" name="cut"/> - <menu_item_call label="Kopiuj Landmark" name="copy_landmark"/> + <menu_item_call label="Kopiuj landmark" name="copy_landmark"/> <menu_item_call label="Kopiuj SLurl" name="copy_slurl"/> <menu_item_call label="Wklej" name="paste"/> <menu_item_call label="Zmień nazwę" name="rename"/> diff --git a/indra/newview/skins/default/xui/pl/menu_slurl.xml b/indra/newview/skins/default/xui/pl/menu_slurl.xml index 719959df6a..862f538aa7 100644 --- a/indra/newview/skins/default/xui/pl/menu_slurl.xml +++ b/indra/newview/skins/default/xui/pl/menu_slurl.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="Popup"> - <menu_item_call label="O Miejscu" name="about_url"/> - <menu_item_call label="Teleportuj do Miejsca" name="teleport_to_url"/> + <menu_item_call label="O miejscu" name="about_url"/> + <menu_item_call label="Teleportuj do miejsca" name="teleport_to_url"/> <menu_item_call label="Mapa" name="show_on_map"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/pl/menu_teleport_history_gear.xml index 2161963a61..0e58592d46 100644 --- a/indra/newview/skins/default/xui/pl/menu_teleport_history_gear.xml +++ b/indra/newview/skins/default/xui/pl/menu_teleport_history_gear.xml @@ -2,5 +2,5 @@ <menu name="Teleport History Gear Context Menu"> <menu_item_call label="Rozwiń wszystkie foldery" name="Expand all folders"/> <menu_item_call label="Schowaj wszystkie foldery" name="Collapse all folders"/> - <menu_item_call label="Wyczyść Historię Teleportacji" name="Clear Teleport History"/> + <menu_item_call label="Wyczyść historię teleportacji" name="Clear Teleport History"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_text_editor.xml b/indra/newview/skins/default/xui/pl/menu_text_editor.xml index 4529246b56..812f87bc1a 100644 --- a/indra/newview/skins/default/xui/pl/menu_text_editor.xml +++ b/indra/newview/skins/default/xui/pl/menu_text_editor.xml @@ -4,5 +4,5 @@ <menu_item_call label="Kopiuj" name="Copy"/> <menu_item_call label="Wklej" name="Paste"/> <menu_item_call label="Usuń" name="Delete"/> - <menu_item_call label="Zaznacz Wszystko" name="Select All"/> + <menu_item_call label="Zaznacz wszystko" name="Select All"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_url_agent.xml b/indra/newview/skins/default/xui/pl/menu_url_agent.xml index 7c90e6582d..db729be725 100644 --- a/indra/newview/skins/default/xui/pl/menu_url_agent.xml +++ b/indra/newview/skins/default/xui/pl/menu_url_agent.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Pokaż Profil Rezydenta" name="show_agent"/> + <menu_item_call label="Pokaż profil Rezydenta" name="show_agent"/> <menu_item_call label="Kopiuj nazwę do schowka" name="url_copy_label"/> <menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_url_group.xml b/indra/newview/skins/default/xui/pl/menu_url_group.xml index 109f96e562..f340b3296a 100644 --- a/indra/newview/skins/default/xui/pl/menu_url_group.xml +++ b/indra/newview/skins/default/xui/pl/menu_url_group.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Pokaż szczegóły o Grupie" name="show_group"/> - <menu_item_call label="Kopiuj Grupę do schowka" name="url_copy_label"/> + <menu_item_call label="Pokaż szczegóły o grupie" name="show_group"/> + <menu_item_call label="Kopiuj grupę do schowka" name="url_copy_label"/> <menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_url_inventory.xml b/indra/newview/skins/default/xui/pl/menu_url_inventory.xml index ce3309cba0..e36fa0dd2b 100644 --- a/indra/newview/skins/default/xui/pl/menu_url_inventory.xml +++ b/indra/newview/skins/default/xui/pl/menu_url_inventory.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Pokaż obiekt w Szafie" name="show_item"/> + <menu_item_call label="Pokaż obiekt w szafie" name="show_item"/> <menu_item_call label="Kopiuj nazwę do schowka" name="url_copy_label"/> <menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_url_parcel.xml b/indra/newview/skins/default/xui/pl/menu_url_parcel.xml index 43b945b8be..1b8dd62137 100644 --- a/indra/newview/skins/default/xui/pl/menu_url_parcel.xml +++ b/indra/newview/skins/default/xui/pl/menu_url_parcel.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Pokaż szczegóły o Miejscu" name="show_parcel"/> + <menu_item_call label="Pokaż szczegóły o miejscu" name="show_parcel"/> <menu_item_call label="Pokaż na mapie" name="show_on_map"/> <menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_url_slurl.xml b/indra/newview/skins/default/xui/pl/menu_url_slurl.xml index 456146d8e5..4d4a5b4c4d 100644 --- a/indra/newview/skins/default/xui/pl/menu_url_slurl.xml +++ b/indra/newview/skins/default/xui/pl/menu_url_slurl.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Pokaż szczegóły o Miejscu" name="show_place"/> + <menu_item_call label="Pokaż szczegóły o miejscu" name="show_place"/> <menu_item_call label="Pokaż na mapie" name="show_on_map"/> <menu_item_call label="Teleportuj do miejsca" name="teleport_to_location"/> <menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/> diff --git a/indra/newview/skins/default/xui/pl/menu_url_teleport.xml b/indra/newview/skins/default/xui/pl/menu_url_teleport.xml index 7376fb3afc..e225546930 100644 --- a/indra/newview/skins/default/xui/pl/menu_url_teleport.xml +++ b/indra/newview/skins/default/xui/pl/menu_url_teleport.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> <menu_item_call label="Teleportuj do tego miejsca" name="teleport"/> - <menu_item_call label="Pokaż na Mapie" name="show_on_map"/> + <menu_item_call label="Pokaż na mapie" name="show_on_map"/> <menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml index 5907e6b3f4..a71961ada7 100644 --- a/indra/newview/skins/default/xui/pl/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml @@ -2,49 +2,49 @@ <menu_bar name="Main Menu"> <menu label="Ja" name="Me"> <menu_item_call label="Ustawienia" name="Preferences"/> - <menu_item_call label="Moja Tablica" name="Manage My Account"/> + <menu_item_call label="Dashboard" name="Manage My Account"/> <menu_item_call label="Kup L$" name="Buy and Sell L$"/> <menu_item_call label="Mój Profil" name="Profile"/> <menu_item_call label="Zmień strój" name="ChangeOutfit"/> <menu_item_check label="Moja Szafa" name="Inventory"/> <menu_item_check label="Moja Szafa" name="ShowSidetrayInventory"/> - <menu_item_check label="Moje Gesty" name="Gestures"/> + <menu_item_check label="Moje gesturki" name="Gestures"/> <menu_item_check label="Mój głos" name="ShowVoice"/> <menu label="Mój Status" name="Status"> - <menu_item_call label="Tryb Oddalenia" name="Set Away"/> - <menu_item_call label="Tryb Pracy" name="Set Busy"/> + <menu_item_call label="Tryb oddalenia" name="Set Away"/> + <menu_item_call label="Tryb pracy" name="Set Busy"/> </menu> - <menu_item_call label="Zażądaj Statusu Administratora" name="Request Admin Options"/> - <menu_item_call label="Wyłącz Status Administratora" name="Leave Admin Options"/> + <menu_item_call label="Zażądaj statusu administratora" name="Request Admin Options"/> + <menu_item_call label="Wyłącz atatus administratora" name="Leave Admin Options"/> <menu_item_call label="Wyłącz [APP_NAME]" name="Quit"/> </menu> <menu label="Komunikacja" name="Communicate"> <menu_item_call label="Znajomi" name="My Friends"/> <menu_item_call label="Grupy" name="My Groups"/> - <menu_item_check label="Czat Lokalny" name="Nearby Chat"/> - <menu_item_call label="Osoby w Pobliżu" name="Active Speakers"/> + <menu_item_check label="Czat lokalny" name="Nearby Chat"/> + <menu_item_call label="Osoby w pobliżu" name="Active Speakers"/> </menu> <menu label="Świat" name="World"> <menu_item_check label="Mini-Mapa" name="Mini-Map"/> <menu_item_check label="Mapa Świata" name="World Map"/> - <menu_item_call label="Zrób Zdjęcie" name="Take Snapshot"/> - <menu_item_call label="Zapamiętaj to Miejsce" name="Create Landmark Here"/> + <menu_item_call label="Zrób zdjęcie" name="Take Snapshot"/> + <menu_item_call label="Zapamiętaj to miejsce (LM)" name="Create Landmark Here"/> <menu label="Miejsce" name="Land"> <menu_item_call label="Profil miejsca" name="Place Profile"/> - <menu_item_call label="O Posiadłości" name="About Land"/> + <menu_item_call label="O posiadłości" name="About Land"/> <menu_item_call label="Region/Majątek" name="Region/Estate"/> </menu> - <menu_item_call label="Kup Posiadłość" name="Buy Land"/> - <menu_item_call label="Moje Posiadłości" name="My Land"/> + <menu_item_call label="Kup posiadłość" name="Buy Land"/> + <menu_item_call label="Moje posiadłości" name="My Land"/> <menu label="Pokaż" name="LandShow"> - <menu_item_check label="Ustawienia Ruchu" name="Movement Controls"/> - <menu_item_check label="Zobacz Ustawienia" name="Camera Controls"/> - <menu_item_check label="Linie Bana" name="Ban Lines"/> + <menu_item_check label="Ustawienia ruchu" name="Movement Controls"/> + <menu_item_check label="Zobacz ustawienia" name="Camera Controls"/> + <menu_item_check label="Linie bana" name="Ban Lines"/> <menu_item_check label="Emitery" name="beacons"/> - <menu_item_check label="Granice Posiadłości" name="Property Lines"/> - <menu_item_check label="Właściciele Posiadłości" name="Land Owners"/> + <menu_item_check label="Granice posiadłości" name="Property Lines"/> + <menu_item_check label="Właściciele posiadłości" name="Land Owners"/> <menu_item_check label="Współrzędne" name="Coordinates"/> - <menu_item_check label="Właściwości Posiadłości" name="Parcel Properties"/> + <menu_item_check label="Właściwości posiadłości" name="Parcel Properties"/> </menu> <menu_item_call label="Teleportuj do Miejsca Startu" name="Teleport Home"/> <menu_item_call label="Ustaw Miejsce Startu" name="Set Home to Here"/> @@ -53,57 +53,57 @@ <menu_item_call label="Południe" name="Noon"/> <menu_item_call label="Zachód Słońca" name="Sunset"/> <menu_item_call label="Północ" name="Midnight"/> - <menu_item_call label="Używaj Czasu Regionu" name="Revert to Region Default"/> - <menu_item_call label="Edytor Środowiska" name="Environment Editor"/> + <menu_item_call label="Używaj czasu Regionu" name="Revert to Region Default"/> + <menu_item_call label="Edytor środowiska" name="Environment Editor"/> </menu> </menu> <menu label="Buduj" name="BuildTools"> <menu_item_check label="Buduj" name="Show Build Tools"/> - <menu label="Wybierz Narzędzie Budowania" name="Select Tool"> - <menu_item_call label="Narzędzie Ogniskowej" name="Focus"/> - <menu_item_call label="Narzędzie Ruchu" name="Move"/> - <menu_item_call label="Narzędzie Edycji" name="Edit"/> - <menu_item_call label="Stwórz Narzędzie" name="Create"/> - <menu_item_call label="Narzędzie Posiadłości" name="Land"/> + <menu label="Wybierz narzędzie budowania" name="Select Tool"> + <menu_item_call label="Narzędzie ogniskowej" name="Focus"/> + <menu_item_call label="Narzędzie ruchu" name="Move"/> + <menu_item_call label="Narzędzie edycji" name="Edit"/> + <menu_item_call label="Stwórz narzędzie" name="Create"/> + <menu_item_call label="Narzędzie posiadłości" name="Land"/> </menu> <menu_item_call label="Linkuj" name="Link"/> <menu_item_call label="Rozlinkuj" name="Unlink"/> - <menu_item_check label="Edytuj Zgrupowane Obiekty" name="Edit Linked Parts"/> - <menu label="Wybierz Zlinkowane Części" name="Select Linked Parts"> - <menu_item_call label="Wybierz Następną Część" name="Select Next Part"/> - <menu_item_call label="Zaznacz Poprzednią Część" name="Select Previous Part"/> - <menu_item_call label="Uwzględnij Następną Część" name="Include Next Part"/> - <menu_item_call label="Uwzględnij Poprzednią Część" name="Include Previous Part"/> + <menu_item_check label="Edytuj zlinkowane obiekty" name="Edit Linked Parts"/> + <menu label="Wybierz zlinkowane części" name="Select Linked Parts"> + <menu_item_call label="Wybierz następną część" name="Select Next Part"/> + <menu_item_call label="Zaznacz poprzednią część" name="Select Previous Part"/> + <menu_item_call label="Uwzględnij następną część" name="Include Next Part"/> + <menu_item_call label="Uwzględnij poprzednią część" name="Include Previous Part"/> </menu> - <menu_item_call label="Ogniskowa Selekcji" name="Focus on Selection"/> - <menu_item_call label="Przybliż do Selekcji" name="Zoom to Selection"/> + <menu_item_call label="Ogniskowa selekcji" name="Focus on Selection"/> + <menu_item_call label="Przybliż do selekcji" name="Zoom to Selection"/> <menu label="Obiekt" name="Object"> <menu_item_call label="Kup" name="Menu Object Buy"/> <menu_item_call label="Weź" name="Menu Object Take"/> - <menu_item_call label="Weź Kopię" name="Take Copy"/> - <menu_item_call label="Zapisz Obiekt do Szafy" name="Save Object Back to My Inventory"/> - <menu_item_call label="Zapisz do Treści Obiektu" name="Save Object Back to Object Contents"/> + <menu_item_call label="Weź kopię" name="Take Copy"/> + <menu_item_call label="Zapisz obiekt do Szafy" name="Save Object Back to My Inventory"/> + <menu_item_call label="Zapisz do treści obiektu" name="Save Object Back to Object Contents"/> </menu> <menu label="Skrypty" name="Scripts"> - <menu_item_call label="Zrekompiluj Skrypt w Selekcji (Mono)" name="Mono"/> - <menu_item_call label="Zrekompiluj Skrypty" name="LSL"/> - <menu_item_call label="Reset Skryptów" name="Reset Scripts"/> - <menu_item_call label="Ustaw Uruchamienie Skryptów" name="Set Scripts to Running"/> - <menu_item_call label="Wstrzymaj Działanie Skryptów w Selekcji" name="Set Scripts to Not Running"/> + <menu_item_call label="Zrekompiluj skrypt w selekcji (Mono)" name="Mono"/> + <menu_item_call label="Zrekompiluj skrypty" name="LSL"/> + <menu_item_call label="Reset skryptów" name="Reset Scripts"/> + <menu_item_call label="Ustaw uruchamienie skryptów" name="Set Scripts to Running"/> + <menu_item_call label="Wstrzymaj działanie skryptów w selekcji" name="Set Scripts to Not Running"/> </menu> <menu label="Opcje" name="Options"> - <menu_item_call label="Ustaw Domyślne Pozwolenia Ładowania" name="perm prefs"/> - <menu_item_check label="Pokaż Zaawansowane Pozwolenia" name="DebugPermissions"/> - <menu_item_check label="Wybierz Tylko Moje Obiekty" name="Select Only My Objects"/> - <menu_item_check label="Wybierz Tylko Obiekty Przesuwalne" name="Select Only Movable Objects"/> - <menu_item_check label="Wybierz przez Otoczenie" name="Select By Surrounding"/> - <menu_item_check label="Zobacz Ukrytą Selekcję" name="Show Hidden Selection"/> - <menu_item_check label="Pokaż Promień Emitera dla Selekcji" name="Show Light Radius for Selection"/> - <menu_item_check label="Pokaż Emiter Selekcji" name="Show Selection Beam"/> - <menu_item_check label="Uruchom Siatkę" name="Snap to Grid"/> - <menu_item_call label="Przeciągnij Obiekt do Siatki" name="Snap Object XY to Grid"/> - <menu_item_call label="Wybierz Zaznaczenie Siatki" name="Use Selection for Grid"/> - <menu_item_call label="Opcje Siatki" name="Grid Options"/> + <menu_item_call label="Ustaw domyślne pozwolenia ładowania" name="perm prefs"/> + <menu_item_check label="Pokaż zaawansowane pozwolenia" name="DebugPermissions"/> + <menu_item_check label="Wybierz tylko moje obiekty" name="Select Only My Objects"/> + <menu_item_check label="Wybierz tylko obiekty przesuwalne" name="Select Only Movable Objects"/> + <menu_item_check label="Wybierz przez otoczenie" name="Select By Surrounding"/> + <menu_item_check label="Zobacz ukrytą selekcję" name="Show Hidden Selection"/> + <menu_item_check label="Pokaż promień emitera dla selekcji" name="Show Light Radius for Selection"/> + <menu_item_check label="Pokaż emiter selekcji" name="Show Selection Beam"/> + <menu_item_check label="Uruchom siatkę" name="Snap to Grid"/> + <menu_item_call label="Przeciągnij obiekt do siatki" name="Snap Object XY to Grid"/> + <menu_item_call label="Wybierz zaznaczenie siatki" name="Use Selection for Grid"/> + <menu_item_call label="Opcje siatki" name="Grid Options"/> </menu> <menu label="Załaduj" name="Upload"> <menu_item_call label="teksturę (L$[COST])..." name="Upload Image"/> @@ -115,39 +115,39 @@ <menu label="Pomoc" name="Help"> <menu_item_call label="[SECOND_LIFE] Portal Pomocy" name="Second Life Help"/> <menu_item_call label="Złóż Raport o Nadużyciu" name="Report Abuse"/> - <menu_item_call label="Zgłoś Błędy Klienta" name="Report Bug"/> + <menu_item_call label="Zgłoś błędy klienta" name="Report Bug"/> <menu_item_call label="O [APP_NAME]" name="About Second Life"/> </menu> <menu label="Zaawansowane" name="Advanced"> <menu_item_check label="Pokaż menu Zaawansowane" name="Show Advanced Menu"/> - <menu_item_call label="Zatrzymaj Wszystkie Animacje" name="Stop Animating My Avatar"/> - <menu_item_call label="Odswież Wyświetlanie Tekstur" name="Rebake Texture"/> - <menu_item_call label="Domyślne Ustawienia Rozmiaru Interfejsu" name="Set UI Size to Default"/> - <menu_item_call label="Ustaw Rozmiar Interfejsu..." name="Set Window Size..."/> - <menu_item_check label="Ogranicz Dystans Selekcji" name="Limit Select Distance"/> - <menu_item_check label="Wyłącz Ograniczenia Zasięgu Kamery" name="Disable Camera Distance"/> - <menu_item_check label="Wysoka Rozdzielczość Zdjęć" name="HighResSnapshot"/> - <menu_item_check label="Zapisuj Zdjęcia na Dysk Twardy bez Efektu Dźwiękowego" name="QuietSnapshotsToDisk"/> - <menu_item_check label="Skompresuj Zdjęcie na Dysk Twardy" name="CompressSnapshotsToDisk"/> + <menu_item_call label="Zatrzymaj wszystkie animacje" name="Stop Animating My Avatar"/> + <menu_item_call label="Odswież wyświetlanie tekstur" name="Rebake Texture"/> + <menu_item_call label="Domyślne ustawienia rozmiaru interfejsu" name="Set UI Size to Default"/> + <menu_item_call label="Ustaw rozmiar interfejsu..." name="Set Window Size..."/> + <menu_item_check label="Ogranicz dystans selekcji" name="Limit Select Distance"/> + <menu_item_check label="Wyłącz ograniczenia zasięgu kamery" name="Disable Camera Distance"/> + <menu_item_check label="Wysoka rozdzielczość zdjęć" name="HighResSnapshot"/> + <menu_item_check label="Zapisuj zdjęcia na dysk twardy bez efektu dźwiękowego" name="QuietSnapshotsToDisk"/> + <menu_item_check label="Skompresuj zdjęcie na dysk twardy" name="CompressSnapshotsToDisk"/> <menu label="Narzędzia" name="Performance Tools"> - <menu_item_call label="Pomiar Lagów" name="Lag Meter"/> + <menu_item_call label="Pomiar lagów" name="Lag Meter"/> <menu_item_check label="Statystyki" name="Statistics Bar"/> - <menu_item_check label="Pokaż Wartość Renderowania Awatara" name="Avatar Rendering Cost"/> + <menu_item_check label="Pokaż wartość renderowania awatara" name="Avatar Rendering Cost"/> </menu> - <menu label="Podkreślanie i Widoczność" name="Highlighting and Visibility"> - <menu_item_check label="Efekt Emiterów" name="Cheesy Beacon"/> - <menu_item_check label="Ukryj Cząsteczki" name="Hide Particles"/> - <menu_item_check label="Ukryj Zaznaczone" name="Hide Selected"/> - <menu_item_check label="Pokaż Przeźroczyste Obiekty" name="Highlight Transparent"/> - <menu_item_check label="Pokaż Załączniki HUD" name="Show HUD Attachments"/> - <menu_item_check label="Pokaż Celownik Myszki" name="ShowCrosshairs"/> + <menu label="Podkreślanie i widoczność" name="Highlighting and Visibility"> + <menu_item_check label="Efekt emiterów" name="Cheesy Beacon"/> + <menu_item_check label="Ukryj cząsteczki" name="Hide Particles"/> + <menu_item_check label="Ukryj zaznaczone" name="Hide Selected"/> + <menu_item_check label="Pokaż przeźroczyste obiekty" name="Highlight Transparent"/> + <menu_item_check label="Pokaż załączniki HUD" name="Show HUD Attachments"/> + <menu_item_check label="Pokaż celownik myszki" name="ShowCrosshairs"/> </menu> - <menu label="Rodzaje Renderowania" name="Rendering Types"> + <menu label="Rodzaje renderowania" name="Rendering Types"> <menu_item_check label="Podstawowe" name="Simple"/> - <menu_item_check label="Maska Przezroczysta" name="Alpha"/> + <menu_item_check label="Maska alpha" name="Alpha"/> <menu_item_check label="Drzewo" name="Tree"/> <menu_item_check label="Awatary" name="Character"/> - <menu_item_check label="Płaszczyzna Powierzchni" name="SurfacePath"/> + <menu_item_check label="Płaszczyzna powierzchni" name="SurfacePath"/> <menu_item_check label="Niebo" name="Sky"/> <menu_item_check label="Woda" name="Water"/> <menu_item_check label="Ziemia" name="Ground"/> @@ -157,163 +157,163 @@ <menu_item_check label="Cząsteczki" name="Particles"/> <menu_item_check label="Zderzenie" name="Bump"/> </menu> - <menu label="Opcje Renderowania" name="Rendering Features"> + <menu label="Opcje renderowania" name="Rendering Features"> <menu_item_check label="UI" name="UI"/> <menu_item_check label="Zaznaczone" name="Selected"/> <menu_item_check label="Podświetlenie" name="Highlighted"/> - <menu_item_check label="Tekstury Dynamiczne" name="Dynamic Textures"/> - <menu_item_check label="Cień Stopy" name="Foot Shadows"/> + <menu_item_check label="Tekstury dynamiczne" name="Dynamic Textures"/> + <menu_item_check label="Cień stopy" name="Foot Shadows"/> <menu_item_check label="Mgła" name="Fog"/> - <menu_item_check label="Obiekty Elastyczne" name="Flexible Objects"/> + <menu_item_check label="Obiekty elastyczne" name="Flexible Objects"/> </menu> - <menu_item_check label="Uruchom Wiele Wątków" name="Run Multiple Threads"/> - <menu_item_check label="Use Plugin Read Thread" name="Use Plugin Read Thread"/> - <menu_item_call label="Wyczyść Bufor Danych Grupy" name="ClearGroupCache"/> - <menu_item_check label="Wygładzanie Ruchu Myszki" name="Mouse Smoothing"/> + <menu_item_check label="Uruchom wiele wątków" name="Run Multiple Threads"/> + <menu_item_check label="Użyj plugin Read Thread" name="Use Plugin Read Thread"/> + <menu_item_call label="Wyczyść bufor danych grupy" name="ClearGroupCache"/> + <menu_item_check label="Wygładzanie ruchu myszki" name="Mouse Smoothing"/> <menu label="Skróty" name="Shortcuts"> <menu_item_call label="Obraz (L$[COST])..." name="Upload Image"/> <menu_item_check label="Szukaj" name="Search"/> - <menu_item_call label="Zwolnij Klawisze" name="Release Keys"/> - <menu_item_call label="Domyślne Ustawienia Rozmiaru Interfejsu" name="Set UI Size to Default"/> + <menu_item_call label="Zwolnij klawisze" name="Release Keys"/> + <menu_item_call label="Domyślne ustawienia rozmiaru interfejsu" name="Set UI Size to Default"/> <menu_item_check label="Pokaż menu Zaawansowane" name="Show Advanced Menu - legacy shortcut"/> <menu_item_check label="Biegnij" name="Always Run"/> - <menu_item_check label="Zacznij Latać" name="Fly"/> - <menu_item_call label="Zamknij Okno" name="Close Window"/> - <menu_item_call label="Zamknij Wszystkie Okna" name="Close All Windows"/> - <menu_item_call label="Zapisz Zdjęcie na Dysk Twardy" name="Snapshot to Disk"/> - <menu_item_call label="Widok Panoramiczny" name="Mouselook"/> - <menu_item_check label="Wolna Kamera" name="Joystick Flycam"/> - <menu_item_call label="Reset Widoku" name="Reset View"/> - <menu_item_call label="Zobacz Ostatniego Rozmówcę" name="Look at Last Chatter"/> - <menu label="Wybierz Narzędzie Budowania" name="Select Tool"> - <menu_item_call label="Narzędzie Ogniskowej" name="Focus"/> - <menu_item_call label="Narzędzie Ruchu" name="Move"/> - <menu_item_call label="Narzędzie Edycji" name="Edit"/> - <menu_item_call label="Stwórz Narzędzie" name="Create"/> - <menu_item_call label="Narzędzia Posiadłości" name="Land"/> + <menu_item_check label="Zacznij latać" name="Fly"/> + <menu_item_call label="Zamknij okno" name="Close Window"/> + <menu_item_call label="Zamknij wszystkie okna" name="Close All Windows"/> + <menu_item_call label="Zapisz zdjęcie na dysk twardy" name="Snapshot to Disk"/> + <menu_item_call label="Widok panoramiczny" name="Mouselook"/> + <menu_item_check label="Wolna kamera" name="Joystick Flycam"/> + <menu_item_call label="Reset widoku" name="Reset View"/> + <menu_item_call label="Zobacz ostatniego rozmówcę" name="Look at Last Chatter"/> + <menu label="Wybierz narzędzie budowania" name="Select Tool"> + <menu_item_call label="Narzędzie ogniskowej" name="Focus"/> + <menu_item_call label="Narzędzie ruchu" name="Move"/> + <menu_item_call label="Narzędzie edycji" name="Edit"/> + <menu_item_call label="Stwórz narzędzie" name="Create"/> + <menu_item_call label="Narzędzia posiadłości" name="Land"/> </menu> <menu_item_call label="Przybliż" name="Zoom In"/> - <menu_item_call label="Domyślne Przybliżenie" name="Zoom Default"/> + <menu_item_call label="Domyślne przybliżenie" name="Zoom Default"/> <menu_item_call label="Oddal" name="Zoom Out"/> </menu> - <menu_item_call label="Pokaż Ustawienia Debugowania" name="Debug Settings"/> - <menu_item_check label="Pokaż Menu Progresu" name="Debug Mode"/> + <menu_item_call label="Pokaż ustawienia debugowania" name="Debug Settings"/> + <menu_item_check label="Pokaż menu progresu" name="Debug Mode"/> </menu> - <menu label="Postęp..." name="Develop"> + <menu label="Rozwinięcie..." name="Develop"> <menu label="Konsola" name="Consoles"> - <menu_item_check label="Konsola Tekstur" name="Texture Console"/> - <menu_item_check label="Debugowanie Zdarzeń Konsoli" name="Debug Console"/> - <menu_item_call label="Konsola Powiadomień" name="Notifications"/> - <menu_item_check label="Konsola Rozmiaru Tekstury" name="Texture Size"/> - <menu_item_check label="Konsola Kategorii Tekstur" name="Texture Category"/> - <menu_item_check label="Szybkie Timery" name="Fast Timers"/> + <menu_item_check label="Konsola tekstur" name="Texture Console"/> + <menu_item_check label="Debugowanie zdarzeń konsoli" name="Debug Console"/> + <menu_item_call label="Konsola powiadomień" name="Notifications"/> + <menu_item_check label="Konsola rozmiaru tekstury" name="Texture Size"/> + <menu_item_check label="Konsola kategorii tekstur" name="Texture Category"/> + <menu_item_check label="Szybkie timery" name="Fast Timers"/> <menu_item_check label="Pamięć" name="Memory"/> - <menu_item_call label="Info Regionu do Debugowania Konsoli" name="Region Info to Debug Console"/> + <menu_item_call label="Info Regionu do debugowania konsoli" name="Region Info to Debug Console"/> <menu_item_check label="Kamera" name="Camera"/> <menu_item_check label="Wiatr" name="Wind"/> <menu_item_check label="Znak" name="Badge"/> </menu> - <menu label="Pokaż Informacje" name="Display Info"> - <menu_item_check label="Pokaż Czas" name="Show Time"/> - <menu_item_check label="Pokaż Informacje o Renderowaniu" name="Show Render Info"/> - <menu_item_check label="Pokaż Kolor pod Kursorem" name="Show Color Under Cursor"/> - <menu_item_check label="Pokaż Aktualizacje Obiektów" name="Show Updates"/> + <menu label="Pokaż informacje" name="Display Info"> + <menu_item_check label="Pokaż czas" name="Show Time"/> + <menu_item_check label="Pokaż informacje o renderowaniu" name="Show Render Info"/> + <menu_item_check label="Pokaż kolor pod kursorem" name="Show Color Under Cursor"/> + <menu_item_check label="Pokaż aktualizacje obiektów" name="Show Updates"/> </menu> - <menu label="Reset Błędu" name="Force Errors"> - <menu_item_call label="Aktywacja Punktu Załamania" name="Force Breakpoint"/> - <menu_item_call label="Reset Błędów LL" name="Force LLError And Crash"/> - <menu_item_call label="Reset Błędów Pamięci" name="Force Bad Memory Access"/> - <menu_item_call label="Reset Pętli" name="Force Infinite Loop"/> - <menu_item_call label="Reset Sterowników" name="Force Driver Carsh"/> - <menu_item_call label="Wyjątek Programu" name="Force Software Exception"/> - <menu_item_call label="Uruchom Rozłączenie" name="Force Disconnect Viewer"/> - <menu_item_call label="Symulacja Wycieku Pamięci" name="Memory Leaking Simulation"/> + <menu label="Reset błędu" name="Force Errors"> + <menu_item_call label="Aktywacja punktu załamania" name="Force Breakpoint"/> + <menu_item_call label="Reset błędów LL" name="Force LLError And Crash"/> + <menu_item_call label="Reset błędów pamięci" name="Force Bad Memory Access"/> + <menu_item_call label="Reset pętli" name="Force Infinite Loop"/> + <menu_item_call label="Reset sterowników" name="Force Driver Carsh"/> + <menu_item_call label="Wyjątek programu" name="Force Software Exception"/> + <menu_item_call label="Uruchom rozłączenie" name="Force Disconnect Viewer"/> + <menu_item_call label="Symulacja wycieku pamięci" name="Memory Leaking Simulation"/> </menu> - <menu label="Test Renderowania" name="Render Tests"> - <menu_item_check label="Kamera Poza Zasiegiem" name="Camera Offset"/> - <menu_item_check label="Losowa Ilość Klatek" name="Randomize Framerate"/> - <menu_item_check label="Test Klatki Obrazu" name="Frame Test"/> + <menu label="Test renderowania" name="Render Tests"> + <menu_item_check label="Kamera poza zasiegiem" name="Camera Offset"/> + <menu_item_check label="Losowa ilość klatek" name="Randomize Framerate"/> + <menu_item_check label="Test klatki obrazu" name="Frame Test"/> </menu> <menu label="Renderowanie" name="Rendering"> <menu_item_check label="Osie" name="Axes"/> - <menu_item_check label="Tryb Obrazu Szkieletowego" name="Wireframe"/> - <menu_item_check label="Globalne Oświetlenie" name="Global Illumination"/> - <menu_item_check label="Tekstury Animacji" name="Animation Textures"/> - <menu_item_check label="Wyłącz Tekstury" name="Disable Textures"/> - <menu_item_check label="Renderowania Załączonego Światła" name="Render Attached Lights"/> - <menu_item_check label="Renderowanie Załączonych Cząsteczek" name="Render Attached Particles"/> - <menu_item_check label="Wyświetlaj Obiekty Odblaskowe" name="Hover Glow Objects"/> + <menu_item_check label="Tryb obrazu szkieletowego" name="Wireframe"/> + <menu_item_check label="Globalne oświetlenie" name="Global Illumination"/> + <menu_item_check label="Tekstury animacji" name="Animation Textures"/> + <menu_item_check label="Wyłącz tekstury" name="Disable Textures"/> + <menu_item_check label="Renderowania załączonego światła" name="Render Attached Lights"/> + <menu_item_check label="Renderowanie załączonych cząsteczek" name="Render Attached Particles"/> + <menu_item_check label="Wyświetlaj obiekty odblaskowe" name="Hover Glow Objects"/> </menu> <menu label="Sieć" name="Network"> - <menu_item_check label="Zatrzymaj Awatara" name="AgentPause"/> - <menu_item_call label="Upuść Pakiet Pamięci" name="Drop a Packet"/> + <menu_item_check label="Zatrzymaj awatara" name="AgentPause"/> + <menu_item_call label="Upuść pakiet pamięci" name="Drop a Packet"/> </menu> - <menu_item_call label="Zderzenia, Popchnięcia & Uderzenia" name="Bumps, Pushes &amp; Hits"/> + <menu_item_call label="Zderzenia, popchnięcia & uderzenia" name="Bumps, Pushes &amp; Hits"/> <menu label="Świat" name="World"> - <menu_item_check label="Domyślne Ustawienia Środowiska Regionu" name="Sim Sun Override"/> - <menu_item_check label="Efekty Emiterów" name="Cheesy Beacon"/> - <menu_item_check label="Ustalona Pogoda" name="Fixed Weather"/> - <menu_item_call label="Zachowaj Bufor Pamięci Obiektów Regionu" name="Dump Region Object Cache"/> + <menu_item_check label="Domyślne ustawienia środowiska Regionu" name="Sim Sun Override"/> + <menu_item_check label="Efekty emiterów" name="Cheesy Beacon"/> + <menu_item_check label="Ustalona pogoda" name="Fixed Weather"/> + <menu_item_call label="Zachowaj bufor pamięci obiektów regionu" name="Dump Region Object Cache"/> </menu> <menu label="UI" name="UI"> - <menu_item_call label="Test Przeglądarki Internetowej" name="Web Browser Test"/> - <menu_item_call label="Drukuj Zaznaczone Informacje o Obiekcie" name="Print Selected Object Info"/> - <menu_item_call label="Statystyki Pamięci" name="Memory Stats"/> - <menu_item_check label="Kliknij Podójnie by Uruchomić Auto-Pilota" name="Double-ClickAuto-Pilot"/> - <menu_item_check label="Debugowanie Zdarzeń Klikania" name="Debug Clicks"/> - <menu_item_check label="Debugowanie Zdarzeń Myszy" name="Debug Mouse Events"/> + <menu_item_call label="Test przeglądarki internetowej" name="Web Browser Test"/> + <menu_item_call label="Drukuj zaznaczone informacje o obiekcie" name="Print Selected Object Info"/> + <menu_item_call label="Statystyki pamięci" name="Memory Stats"/> + <menu_item_check label="Kliknij podójnie by uruchomić auto-pilota" name="Double-ClickAuto-Pilot"/> + <menu_item_check label="Debugowanie zdarzeń klikania" name="Debug Clicks"/> + <menu_item_check label="Debugowanie zdarzeń myszy" name="Debug Mouse Events"/> </menu> <menu label="XUI" name="XUI"> - <menu_item_call label="Załaduj Ustawienia Koloru" name="Reload Color Settings"/> - <menu_item_call label="Pokaż Test Czcionki" name="Show Font Test"/> + <menu_item_call label="Załaduj ustawienia koloru" name="Reload Color Settings"/> + <menu_item_call label="Pokaż test czcionki" name="Show Font Test"/> <menu_item_call label="Załaduj z XML" name="Load from XML"/> <menu_item_call label="Zapisz jako XML" name="Save to XML"/> - <menu_item_check label="Pokaż Nazwy XUI" name="Show XUI Names"/> - <menu_item_call label="Wyślij Wiadomość (IM) Testową" name="Send Test IMs"/> + <menu_item_check label="Pokaż nazwy XUI" name="Show XUI Names"/> + <menu_item_call label="Wyślij wiadomość (IM) testową" name="Send Test IMs"/> </menu> <menu label="Awatar" name="Character"> - <menu label="Grab Baked Texture" name="Grab Baked Texture"> - <menu_item_call label="Tęczówka Oka" name="Iris"/> + <menu label="Przesuń bakowaną teksturę" name="Grab Baked Texture"> + <menu_item_call label="Tęczówka oka" name="Iris"/> <menu_item_call label="Głowa" name="Head"/> - <menu_item_call label="Górna Część Ciała" name="Upper Body"/> - <menu_item_call label="Dolna Część Ciała" name="Lower Body"/> + <menu_item_call label="Górna część ciała" name="Upper Body"/> + <menu_item_call label="Dolna część ciała" name="Lower Body"/> <menu_item_call label="Spódnica" name="Skirt"/> </menu> - <menu label="Testy Postaci" name="Character Tests"> - <menu_item_call label="Przesuń Geometrię Postaci" name="Toggle Character Geometry"/> - <menu_item_check label="Pozwól na Zaznaczanie Awatarów" name="Allow Select Avatar"/> + <menu label="Testy postaci" name="Character Tests"> + <menu_item_call label="Przesuń geometrię postaci" name="Toggle Character Geometry"/> + <menu_item_check label="Pozwól na zaznaczanie awatarów" name="Allow Select Avatar"/> </menu> - <menu_item_call label="Powrót do Domyślnych Parametrów" name="Force Params to Default"/> - <menu_item_check label="Info o Animacji" name="Animation Info"/> - <menu_item_check label="Wolne Animacje" name="Slow Motion Animations"/> - <menu_item_check label="Wyłącz Poziom Detalu" name="Disable LOD"/> - <menu_item_check label="Pokaż Szczegóły Kolizji" name="Show Collision Skeleton"/> - <menu_item_check label="Wyświetl Cel Aganta" name="Display Agent Target"/> - <menu_item_call label="Debugowanie Tekstur Awatara" name="Debug Avatar Textures"/> + <menu_item_call label="Powrót do domyślnych parametrów" name="Force Params to Default"/> + <menu_item_check label="Info o animacji" name="Animation Info"/> + <menu_item_check label="Wolne animacje" name="Slow Motion Animations"/> + <menu_item_check label="Wyłącz poziom detalu" name="Disable LOD"/> + <menu_item_check label="Pokaż szczegóły kolizji" name="Show Collision Skeleton"/> + <menu_item_check label="Wyświetl cel agenta" name="Display Agent Target"/> + <menu_item_call label="Debugowanie tekstur awatara" name="Debug Avatar Textures"/> </menu> <menu_item_check label="Tekstury HTTP" name="HTTP Textures"/> <menu_item_check label="Aktywacja okna konsoli podczas następnego uruchomienia" name="Console Window"/> - <menu_item_check label="Pokaż Menu Administratora" name="View Admin Options"/> - <menu_item_call label="Uzyskaj Status Administratora" name="Request Admin Options"/> - <menu_item_call label="Opuść Status Administratora" name="Leave Admin Options"/> + <menu_item_check label="Pokaż menu administratora" name="View Admin Options"/> + <menu_item_call label="Uzyskaj status administratora" name="Request Admin Options"/> + <menu_item_call label="Opuść status administratora" name="Leave Admin Options"/> </menu> <menu label="Administrator" name="Admin"> <menu label="Object"> - <menu_item_call label="Weź Kopię" name="Take Copy"/> - <menu_item_call label="Reset Właściciela" name="Force Owner To Me"/> - <menu_item_call label="Reset Przyzwolenia Właściciela" name="Force Owner Permissive"/> + <menu_item_call label="Weź kopię" name="Take Copy"/> + <menu_item_call label="Reset właściciela" name="Force Owner To Me"/> + <menu_item_call label="Reset przyzwolenia właściciela" name="Force Owner Permissive"/> <menu_item_call label="Usuń" name="Delete"/> <menu_item_call label="Zablokuj" name="Lock"/> </menu> <menu label="Posiadłość" name="Parcel"> - <menu_item_call label="Reset Właściciela" name="Owner To Me"/> - <menu_item_call label="Ustawienia Treści Lindenów" name="Set to Linden Content"/> - <menu_item_call label="Odzyskaj Posiadłość Publiczną" name="Claim Public Land"/> + <menu_item_call label="Reset właściciela" name="Owner To Me"/> + <menu_item_call label="Ustawienia treści Lindenów" name="Set to Linden Content"/> + <menu_item_call label="Odzyskaj posiadłość publiczną" name="Claim Public Land"/> </menu> <menu label="Region" name="Region"> - <menu_item_call label="Zachowaj Tymczasowo Bazę Asset" name="Dump Temp Asset Data"/> - <menu_item_call label="Zachowaj Ustawienie Regionu" name="Save Region State"/> + <menu_item_call label="Zachowaj tymczasowo bazę asset" name="Dump Temp Asset Data"/> + <menu_item_call label="Zachowaj ustawienie Regionu" name="Save Region State"/> </menu> - <menu_item_call label="Boskie Nadzędzia" name="God Tools"/> + <menu_item_call label="Boskie narzędzia" name="God Tools"/> </menu> </menu_bar> diff --git a/indra/newview/skins/default/xui/pl/mime_types_mac.xml b/indra/newview/skins/default/xui/pl/mime_types_mac.xml index ae860249bb..7213b26165 100644 --- a/indra/newview/skins/default/xui/pl/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/pl/mime_types_mac.xml @@ -19,7 +19,7 @@ To miejsce posiada zawartość filmową </tooltip> <playtip name="movie_playtip"> - Oglądaj Film + Oglądaj film </playtip> </widgetset> <widgetset name="image"> @@ -46,7 +46,7 @@ </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> - Synchroniczne Strumienie Medialne + Synchroniczne strumienie mediów </label> </scheme> <mimetype name="blank"> @@ -111,7 +111,7 @@ </mimetype> <mimetype name="application/xhtml+xml"> <label name="application/xhtml+xml_label"> - Strona Internetowa (XHTML) + Strona internetowa (XHTML) </label> </mimetype> <mimetype name="application/x-director"> @@ -171,7 +171,7 @@ </mimetype> <mimetype name="text/html"> <label name="text/html_label"> - Strona Internetowa + Strona internetowa </label> </mimetype> <mimetype name="text/plain"> diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml index 58ca77411d..7fcd7b5e04 100644 --- a/indra/newview/skins/default/xui/pl/notifications.xml +++ b/indra/newview/skins/default/xui/pl/notifications.xml @@ -67,8 +67,8 @@ Szczegóły błędu: Błąd o nazwie '[_NAME]' nie został odnaleziony [MESSAGE] <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Tak"/> </notification> - <notification name="BadInstallation"> - Podczas aktualizacji [APP_NAME] wystąpił błąd. Proszę odwiedzić stronę [http://get.secondlife.com download the latest version] by ściągnąć najnowszą wersje klienta. + <notification name="BadInstallation"> + Podczas aktualizacji [APP_NAME] wystąpił błąd. Proszę odwiedzić stronę [http://get.secondlife.com pobierz najnowsza wersję] aby ściągnąć ostatnią wersję klienta. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="LoginFailedNoNetwork"> @@ -78,7 +78,7 @@ Sprawdź stan swojego połączenia sieciowego. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="MessageTemplateNotFound"> - Wzór komunikatu dla [PATH] nie odnaleziony. + Wzór komunikatu dla [PATH] nie został odnaleziony. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="WearableSave"> @@ -103,7 +103,7 @@ Wybierz pojedynczy obiekt i spróbuj jeszcze raz. </notification> <notification name="SaveClothingBodyChanges"> Zapisać wszystkie zmiany dotyczące ubrania/cześci ciała? - <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie Zapisuj" yestext="Zapisz"/> + <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie zapisuj" yestext="Zapisz"/> </notification> <notification name="FriendsAndGroupsOnly"> Osoby spoza listy znajomych, których rozmowy głosowe i IM są ignorowane, nie wiedzą o tym. @@ -128,14 +128,14 @@ Czy chcesz dać prawa modyfikacji wybranym osobom? <usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/> </notification> <notification name="UnableToCreateGroup"> - Założenie grupy niemożliwe. + Założenie grupy nie jest możliwe. [MESSAGE] <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="PanelGroupApply"> [NEEDS_APPLY_MESSAGE] [WANT_APPLY_MESSAGE] - <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Ignoruj Zmiany" yestext="Zastosuj Zmiany"/> + <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Ignoruj zmiany" yestext="Zastosuj zmiany"/> </notification> <notification name="MustSpecifyGroupNoticeSubject"> Aby wysłać ogłoszenie do grupy musisz nadać mu tytuł. @@ -181,7 +181,7 @@ Chcesz kontynuować? <notification name="JoinGroupNoCost"> Dołączasz do grupy [NAME]. Czy chcesz kontynuować? - <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Zaakceptuj"/> + <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Akceptuj"/> </notification> <notification name="JoinGroupCannotAfford"> Członkostwo w tej grupie kosztuje [COST]L$ @@ -272,7 +272,7 @@ Skrypty muszą pozostać aktywne dla prawidłowego działania broni. <notification name="MultipleFacesSelected"> Obecnie zaznaczono wiele powierzchni. Jeśli działanie będzie kontynuowane, oddzielne media będą ustawione na wielu powierzchniach obiektu. -W celu umieszczenia mediów tylko na jednej powierzchni skorzystaj z Wybierz Powierzchnię i kliknij na wybranej powierzchni obiektu oraz kliknij Dodaj. +W celu umieszczenia mediów tylko na jednej powierzchni skorzystaj z Wybierz powierzchnię i kliknij na wybranej powierzchni obiektu oraz kliknij Dodaj. <usetemplate ignoretext="Media zostaną ustawione na wielu zaznaczonych powierzchniach" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="MustBeInParcel"> @@ -343,11 +343,11 @@ Czy na pewno chcesz kontynuować? <usetemplate ignoretext="Potwierdź przed usunięciem mediów z obiektu" name="okcancelignore" notext="Nie" yestext="Tak"/> </notification> <notification name="ClassifiedSave"> - Zapisać zmiany w Reklamie [NAME]? + Zapisać zmiany w reklamie [NAME]? <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie Zapisuj" yestext="Zapisz"/> </notification> <notification name="ClassifiedInsufficientFunds"> - Nie posiadasz wystarczających środków aby dodać Reklamę. + Nie posiadasz wystarczających środków aby dodać reklamę. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="DeleteAvatarPick"> @@ -355,7 +355,7 @@ Czy na pewno chcesz kontynuować? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="DeleteOutfits"> - Czy usunąć wybrany strój? + Skasować wybrane stroje? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="PromptGoToEventsPage"> @@ -386,27 +386,27 @@ Pamiętaj: Opcja ta wyczyszcza bufor danych. <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="SaveChanges"> - Zapisać Zmiany? - <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie Zapisuj" yestext="Zapisz"/> + Zapisać zmiany? + <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie zapisuj" yestext="Zapisz"/> </notification> <notification name="GestureSaveFailedTooManySteps"> - Nie można zapisać gestu. -Ten gest ma zbyt wiele etapów. + Nie można zapisać gesturki. +Ta gesturka ma zbyt wiele etapów. Usuń kilka etapów i zapisz jeszcze raz. </notification> <notification name="GestureSaveFailedTryAgain"> - Zapis gestu nie powiódł się. Spróbuj jeszcze raz za kilka minut. + Zapis gesturki nie powiódł się. Spróbuj jeszcze raz za kilka minut. </notification> <notification name="GestureSaveFailedObjectNotFound"> - Nie można zapisać gestu ponieważ obiekt lub szafa powiązanego obiektu nie został znaleziony. + Nie można zapisać gesturki ponieważ obiekt lub szafa powiązanego obiektu nie został znaleziony. Obiekt może znajdować się zbyt daleko albo został usunięty. </notification> <notification name="GestureSaveFailedReason"> - Nie można zapisać gestu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz później. + Nie można zapisać gesturki z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz później. </notification> <notification name="SaveNotecardFailObjectNotFound"> Nie można zapisać notki ponieważ obiekt lub szafa powiązanego obiektu nie został znaleziony. -Obiekt może znajdować się zbyt daleko albo został usuniety. +Obiekt może znajdować się zbyt daleko albo został usunięty. </notification> <notification name="SaveNotecardFailReason"> Nie można zapisać notki z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz później. @@ -422,19 +422,19 @@ Czy chcesz załadować ostatnią wersję zapisaną na serwerze? </notification> <notification name="SaveScriptFailObjectNotFound"> Nie można zapisać skryptu ponieważ obiekt w którym się zawiera nie został znaleziony. -Obiekt może znajdować się zbyt daleko albo został usuniety. +Obiekt może znajdować się zbyt daleko albo został usunięty. </notification> <notification name="SaveBytecodeFailReason"> Nie można zapisać skompilowanego skryptu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz póżniej. </notification> <notification name="StartRegionEmpty"> Oops, Twoje miejsce startu nie zostało określone. -Wpisz proszę nazwę regionu w lokalizację startu w polu Lokalizacja Startu lub wybierz Moja Ostatnia Lokalizacja albo Miejsce Startu. +Wpisz proszę nazwę regionu w lokalizację startu w polu Lokalizacja Startu lub wybierz Moja ostatnia lokalizacja albo Miejsce Startu. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="CouldNotStartStopScript"> Nie można uruchomić lub zatrzymać skryptu ponieważ obiekt w którym się zawiera nie został znaleziony. -Obiekt może znajdować się zbyt daleko albo został usuniety. +Obiekt może znajdować się zbyt daleko albo został usunięty. </notification> <notification name="CannotDownloadFile"> Nie można załadować pliku @@ -453,7 +453,7 @@ Po więcej info, odwiedź stronę [_URL] . </notification> <notification name="UnknownGPU"> Twój system jest wyposażony w kartę graficzną, która nie jest rozpoznana przez [APP_NAME]. -Zdarza się to częstow w przypadku nowego sprzętu, który nie był testowany z [APP_NAME]. Prawdopodobnie wystarczy dostosowanie ustawień grafiki aby działanie było poprawne. +Zdarza się to często w przypadku nowego sprzętu, który nie był testowany z [APP_NAME]. Prawdopodobnie wystarczy dostosowanie ustawień grafiki aby działanie było poprawne. (Ja > Właściwości > Grafika). <form name="form"> <ignore name="ignore" text="Karta graficzna nie została zidentyfikowana."/> @@ -461,7 +461,7 @@ Zdarza się to częstow w przypadku nowego sprzętu, który nie był testowany z </notification> <notification name="DisplaySettingsNoShaders"> [APP_NAME] zawiesił się podczas inicjalizacji sterowników graficznych. -Jakość grafiki została zmniejszona - może pomoże. +Jakość grafiki została zmniejszona - może to pomóc. Pewne funkcje graficzne zostały wyłączone. Zalecamy aktualizcje sterowników graficznych. Możesz podnieść jakość grafiki pod Ustawienia > Grafika. </notification> @@ -972,7 +972,7 @@ ze wszystkich posiadłości w tym symulatorze? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="BlankClassifiedName"> - Musisz nadać tytuł Twojej Reklamie. + Musisz nadać tytuł Twojej reklamie. </notification> <notification name="MinClassifiedPrice"> Minimalna cena za publikację wynosi [MIN_PRICE]L$. @@ -1106,7 +1106,7 @@ Możesz normalnie używać [SECOND_LIFE], inni użytkownicy będą Cię widzieli Jeżeli używasz [SECOND_LIFE] po raz pierwszy to musisz stworzyć konto żeby móc się zalogować. Czy chcesz przejść na stronę [http://join.secondlife.com secondlife.com] żeby stworzyć nowe konto? - <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Nowe Konto..."/> + <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Nowe konto..."/> </notification> <notification name="LoginPacketNeverReceived"> Problemy z połączeniem. Problem może być spowodowany Twoim połączeniem z Internetem albo może istnieć po stronie [SECOND_LIFE_GRID]. @@ -1223,14 +1223,14 @@ Zamień teksturę [TEXTURE_NUM] na 24-o bitową teksturę o wymiarze 512x512 lub [MAX_AGENTS] [LIST_TYPE] limit przekroczony o [NUM_EXCESS]. </notification> <notification name="MaxAllowedGroupsOnRegion"> - Możesz mieć maksymalnie [MAX_GROUPS] Dozwolonych Grup. + Możesz mieć maksymalnie [MAX_GROUPS] dozwolonych grup. <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Ustal"/> </notification> <notification name="MaxManagersOnRegion"> - Możesz mieć maksymalnie [MAX_MANAGER] Zarządców Majątku. + Możesz mieć maksymalnie [MAX_MANAGER] zarządców Majątku. </notification> <notification name="OwnerCanNotBeDenied"> - Nie możesz dodać właściciela majątku do listy 'Nieporządanych Rezydentów (banów)' majątku. + Nie możesz dodać właściciela majątku do listy 'Niepożądanych Rezydentów (banów)' majątku. </notification> <notification name="CanNotChangeAppearanceUntilLoaded"> Nie możesz zmienić wyglądu podczas ładowania ubrań i kształtów. @@ -1239,7 +1239,7 @@ Zamień teksturę [TEXTURE_NUM] na 24-o bitową teksturę o wymiarze 512x512 lub Tytuł Twojej reklamy musi zaczynać się od litery (A-Z) albo cyfry. Znaki przestankowe są niedozwolone. </notification> <notification name="CantSetBuyObject"> - Nie możesz wybrać Kup Obiekt ponieważ obiekt nie jest na sprzedaż. + Nie możesz wybrać Kup obiekt ponieważ obiekt nie jest na sprzedaż. Wybierz obiekt na sprzedaż i spróbuj jeszcze raz. </notification> <notification name="FinishedRawDownload"> @@ -1307,7 +1307,7 @@ Pobrać i zapisać w folderze Aplikacji? <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Załaduj"/> </notification> <notification name="DeedObjectToGroup"> - Przekazanie tego obiektu spowoduje, że Grupa: + Przekazanie tego obiektu spowoduje, że grupa: * Otrzyma L$ zapłacone temu obiektowi <usetemplate ignoretext="Proszę potwierdzić decyzję przed przepisaniem obiektu do grupy" name="okcancelignore" notext="Anuluj" yestext="Przekaż"/> </notification> @@ -1329,15 +1329,15 @@ Pobrać i zapisać w folderze Aplikacji? </notification> <notification name="WebLaunchPublicIssue"> Odwiedź [SECOND_LIFE] katalog publicznych problemów, gdzie możesz zgłaszać błędy i inne problemy. - <usetemplate ignoretext="Uruchom przeglądarkę internetową by wysłać Błędy Klienta" name="okcancelignore" notext="Anuluj" yestext="OK"/> + <usetemplate ignoretext="Uruchom przeglądarkę internetową by wysłać Błędy klienta" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="WebLaunchSupportWiki"> Otwórz oficjalny blog Lindenów żeby zobaczyć nowe wiadomości i informacje. <usetemplate ignoretext="Uruchom przeglądarkę internetową by zobaczyć blog" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="WebLaunchLSLGuide"> - Czy chcesz otworzyć samouczek Języka Skryptowania? - <usetemplate ignoretext="Uruchom przeglądarkę internetową by samouczek Języka Skryptowania" name="okcancelignore" notext="Anuluj" yestext="OK"/> + Czy chcesz otworzyć samouczek Języka skryptowania? + <usetemplate ignoretext="Uruchom przeglądarkę internetową by samouczek Języka skryptowania" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="WebLaunchLSLWiki"> Czy napewno chcesz odwiedzić portal LSL Portal? @@ -1385,7 +1385,7 @@ Chcesz opuścić grupę? Tryb Pracy jest włączony. Czat i IM będą ukryte. Wysłane IM będą otrzymywały Twoją odpowiedź Trybu Pracy. Propozycje teleportacji będą odrzucone. Dodatkowo, wszystkie podarowane dla Ciebie obiekty będą automatycznie zapisywane w folderze "Kosz" w Twojej szafie. - <usetemplate ignoretext="Status zmieniony na Tryb Pracy" name="okignore" yestext="OK"/> + <usetemplate ignoretext="Status zmieniony na Tryb pracy" name="okignore" yestext="OK"/> </notification> <notification name="JoinedTooManyGroupsMember"> Należysz już do maksymalnej ilości grup. Opuść proszę przynajmniej jedną grupę żeby przyjąć członkostwo w tej grupie, albo odmów. @@ -1466,7 +1466,7 @@ Dodatkowo, wszystkie podarowane dla Ciebie obiekty będą automatycznie zapisywa </notification> <notification name="TeleportToClassified"> Teleportuj do [CLASSIFIED]? - <usetemplate ignoretext="Potwierdź, że chcesz teleportować się do lokalizacji z Reklamy" name="okcancelignore" notext="Anuluj" yestext="Teleportuj"/> + <usetemplate ignoretext="Potwierdź, że chcesz teleportować się do lokalizacji z reklamy" name="okcancelignore" notext="Anuluj" yestext="Teleportuj"/> </notification> <notification name="TeleportToHistoryEntry"> Teleportuj do [HISTORY_ENTRY]? @@ -1489,7 +1489,7 @@ Kontynuować? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification label="Zmiana Dostępu do Majątku Lindenów" name="ChangeLindenAccess"> - Dokonujesz zmiany w liście dostępu Regionu Głównego należącego do Lindenów (Regiony Główne, Teen Grid, Orientacja). + Dokonujesz zmiany w liście dostępu Regionu głównego należącego do Lindenów (Regiony Główne, Teen Grid, Orientacja). Żądana operacja jest wyjątkowo niebezpieczna dla wszystkich Rezydentów przebywających w regionie i powinna być używana wyłącznie w celu zablokowania opcji pozwalającej na przeniesienie obiektów/L$ do/z sieci. Dodatkowo, zmiany dokonane w Regionie Głównym mogą spowodować problemy przestrzeni serwerowej innych regionów. @@ -1560,7 +1560,7 @@ Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostęp W celu uzyskania dostępu do tego regiony zmień proszę swój status ustawień wieku. Będziesz mógł/mogła szukać i mieć dostęp do treści [REGIONMATURITY]. W celu cofnięcia zmian wybierz z menu Ja > Ustawienia > Ogólne. <form name="form"> - <button name="OK" text="Zmień Ustawienia"/> + <button name="OK" text="Zmień ustawienia"/> <button default="true" name="Cancel" text="Zamknij"/> <ignore name="ignore" text="Moje ustawienia wieku nie dopuszczają do regionu"/> </form> @@ -1693,7 +1693,7 @@ Wybierz pojedynczy obiekt i spróbuj jeszcze raz. Zostaniesz właścicielem tego obiektu z następującymi prawami: Modyfikacje: [MODIFYPERM] Kopiowanie: [COPYPERM] - Odsprzedawanie i Oddawanie: [RESELLPERM] + Odsprzedawanie i oddawanie: [RESELLPERM] <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="BuyOriginalNoOwner"> @@ -1701,7 +1701,7 @@ Zostaniesz właścicielem tego obiektu z następującymi prawami: Zostaniesz właścicielem tego obiektu z następującymi prawami: Modyfikacje: [MODIFYPERM] Kopiowanie: [COPYPERM] - Odsprzedawanie i Oddawanie: [RESELLPERM] + Odsprzedawanie i oddawanie: [RESELLPERM] <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="BuyCopy"> @@ -1709,7 +1709,7 @@ Zostaniesz właścicielem tego obiektu z następującymi prawami: Obiekt zostanie skopiowany do Twojej szafy z następującymi prawami: Modyfikacje: [MODIFYPERM] Kopiowanie: [COPYPERM] - Odsprzedawanie i Oddawanie: [RESELLPERM] + Odsprzedawanie i oddawanie: [RESELLPERM] <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="BuyCopyNoOwner"> @@ -1717,7 +1717,7 @@ Obiekt zostanie skopiowany do Twojej szafy z następującymi prawami: Obiekt zostanie skopiowany do Twojej szafy z następującymi prawami: Modyfikacje: [MODIFYPERM] Kopiowanie: [COPYPERM] - Odsprzedawanie i Oddawanie: [RESELLPERM] + Odsprzedawanie i oddawanie: [RESELLPERM] <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="BuyContents"> @@ -1770,7 +1770,7 @@ Przenieść obiekty szafy? <usetemplate ignoretext="Uprzedź przed przeniesieniem zawartości niekopiowalnej z obiektu, która może uszkodzić skrypty obiektu" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="ClickActionNotPayable"> - Uwaga: Opcja Zapłać Obiektowi została wybrana, ale żeby ta opcja działała musi być dodany skrypt z funkcją money(). + Uwaga: Opcja Zapłać obiektowi została wybrana, ale żeby ta opcja działała musi być dodany skrypt z funkcją money(). <form name="form"> <ignore name="ignore" text="Opcja Zapłać Obiektowi została aktywowana podczas budowania obiektów bez skryptu z funkcją money()."/> </form> @@ -1836,18 +1836,18 @@ Linden Lab Chcesz go zamienić na wybrany obiekt? <form name="form"> <ignore name="ignore" save_option="true" text="Obecnie masz już dołączony obiekt do tej części Twojego ciała.Chcesz go zamienić na wybrany obiekt?"/> - <button ignore="Zamień Automatycznie" name="Yes" text="OK"/> - <button ignore="Nie Zamieniaj" name="No" text="Anuluj"/> + <button ignore="Zamień automatycznie" name="Yes" text="OK"/> + <button ignore="Nie zamieniaj" name="No" text="Anuluj"/> </form> </notification> <notification label="Ostrzeżenie Trybu Pracy" name="BusyModePay"> - Jesteś w Trybie Pracy co oznacza, że nie dostaniesz żadnych obiektów w zamian za tą opłatę. + Jesteś w Trybie pracy co oznacza, że nie dostaniesz żadnych obiektów w zamian za tą opłatę. -Chcesz wyłączyć Tryb Pracy przed zakończeniem tej tranzakcji? +Chcesz wyłączyć Tryb pracy przed zakończeniem tej tranzakcji? <form name="form"> <ignore name="ignore" save_option="true" text="Jesteś w Trybie Pracy co oznacza, że nie dostaniesz żadnych obiektów w zamian za tą opłatę. Chcesz wyłączyć Tryb Pracy przed zakończeniem tej transakcji?"/> - <button ignore="Zawsz wyłączaj Tryb Pracy" name="Yes" text="OK"/> - <button ignore="Nie wyłączaj Trybu Pracy" name="No" text="Anuluj"/> + <button ignore="Zawsz wyłączaj tryb pracy" name="Yes" text="OK"/> + <button ignore="Nie wyłączaj trybu pracy" name="No" text="Anuluj"/> </form> </notification> <notification name="ConfirmDeleteProtectedCategory"> @@ -1871,8 +1871,8 @@ Chcesz wyłączyć Tryb Pracy przed zakończeniem tej tranzakcji? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Tak"/> </notification> <notification name="ConfirmEmptyLostAndFound"> - Na pewno chcesz permanentnie usunąć zawartość Twojego foldera Zgubione i Odnalezione? - <usetemplate ignoretext="Potwierdź przed usunięciem zawartości foldera Zagubione i Odnalezione" name="okcancelignore" notext="Nie" yestext="Tak"/> + Na pewno chcesz permanentnie usunąć zawartość Twojego foldera Zgubione i odnalezione? + <usetemplate ignoretext="Potwierdź przed usunięciem zawartości foldera Zagubione i odnalezione" name="okcancelignore" notext="Nie" yestext="Tak"/> </notification> <notification name="CopySLURL"> Następujący link SLURL został skopiowany do schowka: @@ -1898,14 +1898,14 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t Ten plik cyklu dziennego używa brakującego pliku nieba: [SKY]. </notification> <notification name="PPSaveEffectAlert"> - Efekt Post-Procesu już istnieje. Chcesz zapisać nowy na jego miejsce? + Efekt post-procesu już istnieje. Chcesz zapisać nowy na jego miejsce? <usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/> </notification> <notification name="NewSkyPreset"> Nazwij nowe niebo. <form name="form"> <input name="message"> - Nowe Ustawienie + Nowe ustawienie </input> <button name="OK" text="OK"/> <button name="Cancel" text="Anuluj"/> @@ -1918,7 +1918,7 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t Nazwij nowe ustawienie wody. <form name="form"> <input name="message"> - Nowe Ustawienie + Nowe ustawienie </input> <button name="OK" text="OK"/> <button name="Cancel" text="Anuluj"/> @@ -1987,10 +1987,10 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t Anulowane </notification> <notification name="CancelledSit"> - Siadanie Anulowane + Siadanie anulowane </notification> <notification name="CancelledAttach"> - Dołączenie Anulowane + Dołączenie anulowane </notification> <notification name="ReplacedMissingWearable"> Barkujące ubranie/części ciała zastąpiono domyślnymi obiektami. @@ -2027,7 +2027,7 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t Gesturka [NAME] nie znaleziony w bazie danych. </notification> <notification name="UnableToLoadGesture"> - Ładowanie gestu [NAME] nie powiodło się. + Ładowanie gesturki [NAME] nie powiodło się. </notification> <notification name="LandmarkMissing"> Miejsce (LM) nie znalezione w bazie danych. @@ -2041,7 +2041,7 @@ Spróbuj jeszcze raz. Ponieważ to ma wpływ na wpisywane hasło, możesz chcieć go wyłączyć. </notification> <notification name="NotecardMissing"> - Notka nie znaleziona w bazie danych. + Notka nie została znaleziona w bazie danych. </notification> <notification name="NotecardNoPermissions"> Nie masz pozwolenia na zobaczenie notki. @@ -2131,7 +2131,7 @@ Spróbuj wybrać mniejszy obszar. Pewne frazy podczas wyszukiwania zostały usunięte w związku z restrykcjami zawartymi w Standardach Społecznościowych (Community Standards). </notification> <notification name="NoContentToSearch"> - Proszę wybrać przynajmiej jeden z podanych rodzajów treści jaką zawiera region podczas wyszukiwania ('PG', 'Mature', lub 'Adult'). + Proszę wybrać przynajmiej jeden z podanych rodzajów treści jaką zawiera region podczas wyszukiwania ('General', 'Moderate', lub 'Adult'). </notification> <notification name="GroupVote"> [NAME] zaprasza do głosowania nad propozycją: @@ -2148,7 +2148,7 @@ Spróbuj wybrać mniejszy obszar. [MESSAGE] </notification> <notification name="EventNotification"> - Zawiadomienie o Imprezie: + Zawiadomienie o imprezie: [NAME] [DATE] @@ -2167,12 +2167,12 @@ Spróbuj wybrać mniejszy obszar. </form> </notification> <notification name="DeactivatedGesturesTrigger"> - Zablokowane gesty z jednakowym aktywowaniem: + Zablokowane gesturki z jednakowym aktywowaniem: [NAMES] </notification> <notification name="NoQuickTime"> Wygląda na to, że QuickTime z Apple nie jest zainstalowany na Twoim komputerze. -Jeżeli chcesz odtwarzać media na tej posiadłości które używają QuickTime idź do [http://www.apple.com/quicktime QuickTime site] i zainstaluj odtwarzacz. +Jeżeli chcesz odtwarzać media na tej posiadłości które używają QuickTime idź do [http://www.apple.com/quicktime strona QuickTime] i zainstaluj odtwarzacz. </notification> <notification name="NoPlugin"> Nie znaleziono wtyczki mediów dla "[MIME_TYPE]" typu mime. Media tego typu będą niedostępne. @@ -2584,7 +2584,7 @@ Wybierz Zaakceptuj żeby zacząć czat albo Odmów żeby nie przyjąć zaproszen Nie masz dostępu do posiadłości, nie należysz do właściwej grupy. </notification> <notification name="Cannot enter parcel: banned"> - Masz wzbroniny dostęp to tej posiadłości (ban). + Masz wzbroniony wstęp na tą posiadłości (ban). </notification> <notification name="Cannot enter parcel: not on access list"> Nie masz dostępu do posiadłości, nie jesteś na liście dostępu. @@ -2720,8 +2720,8 @@ Proszę sprawdź swoją sieć i ustawienia firewall. Awatar '[NAME]' pozostał w pełni załadowany. </notification> <notification name="AvatarRezSelfBakeNotification"> - ( [EXISTENCE] sekund w Second Life) -Załadowano [RESOLUTION] teksturę dla '[BODYREGION]' po [TIME] sekundach. + ( [EXISTENCE] sekund w Second Life ) +You [ACTION] a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME] seconds. </notification> <notification name="ConfirmLeaveCall"> Czy jestes pewien/pewna, że chcesz zakończyć rozmowę? @@ -2758,4 +2758,7 @@ Jeżeli wciąż masz problemy sprawdź: [SUPPORT_SITE]. Jeśli jesteś właścicielem posiadłości, możesz ustawić na niej miejsce startu. W innym przypadku możesz poszukać na mapie miejsca oznaczone jako "Infohub". </global> + <global name="You died and have been teleported to your home location"> + Nastąpiła śmierć i teleportacja do Miejsca Startu. + </global> </notifications> diff --git a/indra/newview/skins/default/xui/pl/panel_active_object_row.xml b/indra/newview/skins/default/xui/pl/panel_active_object_row.xml index 57dc8a3dd7..ab1d8d7007 100644 --- a/indra/newview/skins/default/xui/pl/panel_active_object_row.xml +++ b/indra/newview/skins/default/xui/pl/panel_active_object_row.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_activeim_row"> <string name="unknown_obj"> - Nieznany Obiekt + Nieznany obiekt </string> <text name="object_name"> - Nienazwany Obiekt + Nienazwany obiekt </text> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml index 6cd47c6ce7..ba0c85e4ef 100644 --- a/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml +++ b/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml @@ -5,10 +5,10 @@ <button label="Dzwoń" name="call_btn"/> </layout_panel> <layout_panel name="end_call_btn_panel"> - <button label="Zakończ Rozmowe" name="end_call_btn"/> + <button label="Zakończ rozmowę" name="end_call_btn"/> </layout_panel> <layout_panel name="voice_ctrls_btn_panel"> - <button label="Przełączniki Głosu" name="voice_ctrls_btn"/> + <button label="Przełączniki głosu" name="voice_ctrls_btn"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_audio_device.xml b/indra/newview/skins/default/xui/pl/panel_audio_device.xml index fa8dde77eb..9074296bd5 100644 --- a/indra/newview/skins/default/xui/pl/panel_audio_device.xml +++ b/indra/newview/skins/default/xui/pl/panel_audio_device.xml @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="device_settings"> <text name="Audio Devices"> - Urządzenia Audio + Urządzenia audio </text> <text name="Input device (microphone):"> - Urządzenia Wejściowe (mikrofon): + Urządzenia wejściowe (mikrofon): </text> <text name="Output device (speakers):"> - Urządzenia Wyjściowe (głośniki): + Urządzenia wyjściowe (głośniki): </text> <text name="Input level:"> - Poziom Wejścia + Poziom wejścia </text> <text_editor name="voice_intro_text1"> - Użyj suwaka by dostosować jak głośno Cię słychać dla innych Rezydentów. W celu przetestowania poziomu wejścia, zacznij mówić do mikrofonu. + Za pomocą suwaka ustaw poziom głośności Twojego mówienia dla innych Rezydentów. W celu przetestowania poziomu wejścia, zacznij mówić do mikrofonu. </text_editor> <volume_slider name="mic_volume_slider" tool_tip="By zmienić poziom głośności użyj suwaka" /> diff --git a/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml index 122d834bdd..62cb392ba7 100644 --- a/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="block_list_panel"> <text name="title_text"> - Lista Blokad + Lista blokad </text> - <scroll_list name="blocked" tool_tip="Lista Zablokowanych Osób"/> + <scroll_list name="blocked" tool_tip="Lista zablokowanych osób"/> <button label="Zablokuj Rezydenta..." label_selected="Zablokuj Rezydenta..." name="Block resident..." tool_tip="Wybierz Rezydenta aby zablokować"/> <button label="Zablokuj obiekt według nazwy..." label_selected="Zablokuj obiekt według nazwy..." name="Block object by name..."/> - <button label="Odblokuj" label_selected="Odblokuj" name="Unblock" tool_tip="Usuń Rezydenta lub Obiekt z Listy Zablokowanych"/> + <button label="Odblokuj" label_selected="Odblokuj" name="Unblock" tool_tip="Usuń Rezydenta lub obiekt z listy zablokowanych"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_bottomtray.xml b/indra/newview/skins/default/xui/pl/panel_bottomtray.xml index cf73ae53dd..a0f4eb5244 100644 --- a/indra/newview/skins/default/xui/pl/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/pl/panel_bottomtray.xml @@ -9,22 +9,22 @@ </talk_button> </layout_panel> <layout_panel name="gesture_panel"> - <gesture_combo_list label="Gestury" name="Gesture" tool_tip="Pokazuje/Ukrywa gestury"/> + <gesture_combo_list label="Gesturki" name="Gesture" tool_tip="Pokazuje/Ukrywa gesturki"/> </layout_panel> <layout_panel name="movement_panel"> - <button label="Ruch" name="movement_btn" tool_tip="Pokaż/Ukryj Ustawienia Ruchu"/> + <button label="Ruch" name="movement_btn" tool_tip="Pokaż/Ukryj ustawienia ruchu"/> </layout_panel> <layout_panel name="cam_panel"> - <button label="Widok" name="camera_btn" tool_tip="Pokaż/Ukryj Ustawienia Kamery"/> + <button label="Widok" name="camera_btn" tool_tip="Pokaż/Ukryj ustawienia kamery"/> </layout_panel> <layout_panel name="snapshot_panel"> - <button label="" name="snapshots" tool_tip="Zrób Zdjęcie"/> + <button label="" name="snapshots" tool_tip="Zrób zdjęcie"/> </layout_panel> <layout_panel name="sidebar_btn_panel"> - <button label="Schowek" name="sidebar_btn" tool_tip="Pokazuje/ukrywa Schowek"/> + <button label="Schowek" name="sidebar_btn" tool_tip="Pokazuje/ukrywa schowek"/> </layout_panel> <layout_panel name="build_btn_panel"> - <button label="Buduj" name="build_btn" tool_tip="Pokazuje/ukrywa Narzędzia Budowania"/> + <button label="Buduj" name="build_btn" tool_tip="Pokazuje/ukrywa narzędzia budowania"/> </layout_panel> <layout_panel name="search_btn_panel"> <button label="Szukaj" name="search_btn" tool_tip="Pokazuje/ukrywa Szukaj"/> diff --git a/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml index 77d2e86b7e..e32c12a8ee 100644 --- a/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml +++ b/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml @@ -2,7 +2,7 @@ <panel name="bottom_tray_lite"> <layout_stack name="toolbar_stack_lite"> <layout_panel name="gesture_panel"> - <gesture_combo_list label="Gest" name="Gest" tool_tip="Pokaż/ukryj gestury"/> + <gesture_combo_list label="Gesturki" name="Gesturki" tool_tip="Pokaż/ukryj gesturki"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml b/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml index ac2739633e..a22d4b0482 100644 --- a/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml +++ b/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_alpha_panel"> <panel name="avatar_alpha_color_panel"> - <texture_picker label="Alpha Dolnej Części Ciała" name="Lower Alpha" tool_tip="Kliknij aby wybrać teksturę"/> - <texture_picker label="Alpha Górnej Części Ciała" name="Upper Alpha" tool_tip="Kliknij aby wybrać teksturę"/> - <texture_picker label="Alpha Głowy" name="Head Alpha" tool_tip="Kliknij aby wybrać teksturę"/> - <texture_picker label="Alpha Oka" name="Eye Alpha" tool_tip="Kliknij aby wybrać teksturę"/> - <texture_picker label="Alpha Włosów" name="Hair Alpha" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Alpha dolnej części ciała" name="Lower Alpha" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Alpha górnej części ciała" name="Upper Alpha" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Alpha głowy" name="Head Alpha" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Alpha oka" name="Eye Alpha" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Alpha włosów" name="Hair Alpha" tool_tip="Kliknij aby wybrać teksturę"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_classified.xml b/indra/newview/skins/default/xui/pl/panel_edit_classified.xml index 6395d5c59a..07f9b3a13f 100644 --- a/indra/newview/skins/default/xui/pl/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/pl/panel_edit_classified.xml @@ -10,7 +10,7 @@ Zapisz </string> <text name="title"> - Edytuj Reklamę + Edytuj reklamę </text> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> @@ -31,10 +31,10 @@ </text> <button label="Ustaw na bieżącą lokalizację" name="set_to_curr_location_btn"/> <text name="category_label" value="Kategoria:"/> - <text name="content_type_label" value="Typ Zawartości:"/> - <icons_combo_box label="Treść Ogólna" name="content_type"> - <icons_combo_box.item label="Moderuj Treść" name="mature_ci" value="Mature"/> - <icons_combo_box.item label="Treść Ogólna" name="pg_ci" value="PG"/> + <text name="content_type_label" value="Typ zawartości:"/> + <icons_combo_box label="Treść General" name="content_type"> + <icons_combo_box.item label="Treść Moderate" name="mature_ci" value="Mature"/> + <icons_combo_box.item label="Treść General" name="pg_ci" value="PG"/> </icons_combo_box> <text name="price_for_listing_label" value="Cena za wyświetlenie:"/> <spinner label="L$" name="price_for_listing" tool_tip="Cena za umieszczenie reklamy." value="50"/> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml index edd7415751..c9790f5eba 100644 --- a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml @@ -33,8 +33,8 @@ WWW: </text> <check_box label="Pokaż w wyszukiwarce" name="show_in_search_checkbox"/> - <text name="title_acc_status_text" value="Moje Konto:"/> - <text name="my_account_link" value="[[URL] idź do Dashboard]"/> + <text name="title_acc_status_text" value="Moje konto:"/> + <text name="my_account_link" value="[[URL] idź do dashboard]"/> <text name="acc_status_text" value="Rezydent. Brak danych konta."/> <text name="title_partner_text" value="Partner:"/> <text name="partner_edit_link" value="[[URL] Edytuj]"/> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml b/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml index 194b26a97e..da2c26f02b 100644 --- a/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml @@ -40,7 +40,7 @@ Edycja bielizny </string> <string name="edit_alpha_title"> - Edycja maski Alpha + Edycja maski alpha </string> <string name="edit_tattoo_title"> Edycja tatuażu @@ -73,7 +73,7 @@ Kurtka: </string> <string name="skirt_desc_text"> - spódnica: + Spódnica: </string> <string name="gloves_desc_text"> Rękawiczki: @@ -85,13 +85,13 @@ Bielizna: </string> <string name="alpha_desc_text"> - Maska Alpha: + Maska alpha: </string> <string name="tattoo_desc_text"> Tatuaż: </string> <labeled_back_button label="Zapisz" name="back_btn" tool_tip="Powrót do edycji stroju"/> - <text name="edit_wearable_title" value="Edycja Kształtu"/> + <text name="edit_wearable_title" value="Edycja kształtu"/> <panel label="Koszula" name="wearable_type_panel"> <text name="description_text" value="Kształt:"/> <radio_group name="sex_radio"> diff --git a/indra/newview/skins/default/xui/pl/panel_friends.xml b/indra/newview/skins/default/xui/pl/panel_friends.xml index fca0dad380..9d8dc69a35 100644 --- a/indra/newview/skins/default/xui/pl/panel_friends.xml +++ b/indra/newview/skins/default/xui/pl/panel_friends.xml @@ -3,11 +3,11 @@ <string name="Multiple"> Znajomi </string> - <scroll_list name="friend_list" tool_tip="By wybrać wielu znajomych za jednym razem przetrzymaj klawisz shift lub control"> + <scroll_list name="friend_list" tool_tip="Aby wybrać wielu znajomych za jednym razem przetrzymaj klawisz Shift lub Control"> <column name="icon_online_status" tool_tip="Status dostępności"/> <column label="Imię" name="friend_name" tool_tip="Imię"/> <column name="icon_visible_online" tool_tip="Ta osoba może widzieć czy jesteś w Second Life"/> - <column name="icon_visible_map" tool_tip="Ta osoba może zlokalizować Cię na mapie"/> + <column name="icon_visible_map" tool_tip="Ta osoba może zlokalizować Ciebie na mapie"/> <column name="icon_edit_mine" tool_tip="Ta osoba może edytować, usunąć lub wziąć Twoje obiekty"/> <column name="icon_edit_theirs" tool_tip="Możesz edytować obiekty tej osoby"/> </scroll_list> diff --git a/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml index b57ec8f2e6..4e373cdf8f 100644 --- a/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml @@ -8,10 +8,10 @@ <button label="Dzwoń" name="call_btn"/> </layout_panel> <layout_panel name="end_call_btn_panel"> - <button label="Zakończ Rozmowę" name="end_call_btn"/> + <button label="Zakończ rozmowę" name="end_call_btn"/> </layout_panel> <layout_panel name="voice_ctrls_btn_panel"> - <button label="Przełączniki Głosu" name="voice_ctrls_btn"/> + <button label="Przełączniki głosu" name="voice_ctrls_btn"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_group_general.xml b/indra/newview/skins/default/xui/pl/panel_group_general.xml index 43f0103ab7..a4d76badf0 100644 --- a/indra/newview/skins/default/xui/pl/panel_group_general.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_general.xml @@ -23,7 +23,7 @@ By otrzymać pomoc i dodatkowe wskazówki przesuń kursor na przyciski. <button label="DOŁĄCZ TERAZ!" name="btn_join"/> </panel> <text_editor name="charter"> - Status Grupy + Status grupy </text_editor> <name_list name="visible_members"> <name_list.columns label="Członek" name="name"/> @@ -34,7 +34,7 @@ By otrzymać pomoc i dodatkowe wskazówki przesuń kursor na przyciski. ja </text> <text name="active_title_label"> - Mój Aktywny Tytuł: + Mój aktywny tytuł: </text> <combo_box name="active_title" tool_tip="Ustaw tytuł który wyświetla się kiedy grupa jest aktywna."/> <check_box label="Otrzymuj grupowe ogłoszenia" name="receive_notices" tool_tip="Zaznacz jeżeli chcesz otrzymywać ogłoszenia z tej grupy. Anuluj z zaznaczenia, jeżeli nie chcesz otrzymywać żadnych ogłoszeń z tej grupy."/> @@ -50,8 +50,8 @@ By otrzymać pomoc i dodatkowe wskazówki przesuń kursor na przyciski. <combo_item name="select_mature"> - Wybierz klasyfikację wieku - </combo_item> - <combo_box.item label="Treść 'Mature'" name="mature"/> - <combo_box.item label="Treść 'PG'" name="pg"/> + <combo_box.item label="Treść 'Moderate'" name="mature"/> + <combo_box.item label="Treść 'General'" name="pg"/> </combo_box> <check_box initial_value="true" label="Wyświetlaj w wyszukiwarce" name="show_in_group_list" tool_tip="Udostępnij info o grupie w wyszukiwarce"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml index 509c2893cf..e637588cf0 100644 --- a/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml @@ -27,9 +27,9 @@ </layout_panel> <layout_panel name="button_row"> <button label="Czat" name="btn_chat"/> - <button label="Konferencja Głosowa" name="btn_call" tool_tip="Konferencja Głosowa"/> + <button label="Konferencja głosowa" name="btn_call" tool_tip="Konferencja głosowa"/> <button label="Zapisz" label_selected="Zapisz" name="btn_apply"/> - <button label="Stwórz nową Grupę" name="btn_create" tool_tip="Stwórz nową Grupę"/> + <button label="Stwórz nową grupę" name="btn_create" tool_tip="Stwórz nową grupę"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_group_invite.xml b/indra/newview/skins/default/xui/pl/panel_group_invite.xml index e520c06944..1822551e86 100644 --- a/indra/newview/skins/default/xui/pl/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_invite.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Zaproszenie do Grupy" name="invite_panel"> <panel.string name="confirm_invite_owner_str"> - Jesteś pewny, że chcesz wybrać nowych właścieli grupy? Ta decyzja jest ostateczna! + Jesteś pewny/a, że chcesz wybrać nowych właścieli grupy? Ta decyzja jest ostateczna! </panel.string> <panel.string name="loading"> (ładowanie...) @@ -18,10 +18,10 @@ <text name="role_text"> Wybierz rolę dla nowego członka: </text> - <combo_box name="role_name" tool_tip="Wybierz z listy Role, które możesz przypisać Członkom"/> + <combo_box name="role_name" tool_tip="Wybierz z listy Role, które możesz przypisać członkom"/> <button label="Wyślij Zaproszenia" name="ok_button"/> <button label="Anuluj" name="cancel_button"/> <string name="GroupInvitation"> - Zaproszenie do Grupy + Zaproszenie do grupy </string> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_group_land_money.xml b/indra/newview/skins/default/xui/pl/panel_group_land_money.xml index acceb88711..d29393de2d 100644 --- a/indra/newview/skins/default/xui/pl/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_land_money.xml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Posiadłości i L$" name="land_money_tab"> <panel.string name="help_text"> - Ostrzeżenie pojawia się kiedy Łączna Powierzchnia Posiadłości jest mniejsza lub = Kontrybucjom + Ostrzeżenie pojawia się kiedy łączna powierzchnia posiadłości jest mniejsza lub = Kontrybucjom </panel.string> <panel.string name="cant_view_group_land_text"> - Nie masz pozwolenia na oglądanie Posiadłości Grupy. + Nie masz pozwolenia na oglądanie posiadłości grupy. </panel.string> <panel.string name="epmty_view_group_land_text"> Brak wstępu </panel.string> <panel.string name="cant_view_group_accounting_text"> - Nie masz dostępu do konta, finansów Grupy. + Nie masz dostępu do konta, finansów grupy. </panel.string> <panel.string name="loading_txt"> Ładowanie... @@ -33,19 +33,19 @@ </text> <button label="Mapa" label_selected="Mapa" name="map_button"/> <text name="total_land_in_use_label"> - Używane Posiadłości: + Używane posiadłości: </text> <text name="total_land_in_use_value"> [AREA] m² </text> <text name="land_available_label"> - Dostępne Posiadłości: + Dostępne posiadłości: </text> <text name="land_available_value"> [AREA] m² </text> <text name="your_contribution_label"> - Twoje Kontrybucje: + Twoje kontrybucje: </text> <text name="your_contribution_units"> m² @@ -54,10 +54,10 @@ ([AMOUNT] max) </text> <text name="group_over_limit_text"> - Należy zwięszyć kredyt na używanie Posiadłości. + Należy zwięszyć kredyt na używanie posiadłości. </text> <text name="group_money_heading"> - L$ Grupy + L$ grupy </text> </panel> <tab_container name="group_money_tab_container"> diff --git a/indra/newview/skins/default/xui/pl/panel_group_notices.xml b/indra/newview/skins/default/xui/pl/panel_group_notices.xml index 1d727148e9..5b62d13880 100644 --- a/indra/newview/skins/default/xui/pl/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_notices.xml @@ -19,11 +19,11 @@ Limit dzienny ogłoszeń dla grupy wynosi 200. <text name="notice_list_none_found"> Nie znaleziono </text> - <button label="Stwórz Ogłoszenie" label_selected="Stwórz Nowe Ogłoszenie" name="create_new_notice" tool_tip="Stwórz Ogłoszenie"/> + <button label="Stwórz Ogłoszenie" label_selected="Stwórz nowe ogłoszenie" name="create_new_notice" tool_tip="Stwórz ogłoszenie"/> <button label="Odśwież" label_selected="Odśwież Listę" name="refresh_notices" tool_tip="Użyj Odśwież by zobaczyć czy nowe ogłoszenia zostały wysłane."/> - <panel label="Stwórz Nowe Ogłoszenie" name="panel_create_new_notice"> + <panel label="Stwórz nowe ogłoszenie" name="panel_create_new_notice"> <text name="lbl"> - Stwórz Ogłoszenie + Stwórz ogłoszenie </text> <text name="lbl3"> Temat: @@ -55,6 +55,6 @@ Limit dzienny ogłoszeń dla grupy wynosi 200. <text name="lbl4"> Treść: </text> - <button label="Otwórz Załącznik" label_selected="Otwórz Załącznik" name="open_attachment"/> + <button label="Otwórz załącznik" label_selected="Otwórz załącznik" name="open_attachment"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_group_notify.xml b/indra/newview/skins/default/xui/pl/panel_group_notify.xml index d81c3f68f2..d27a81217a 100644 --- a/indra/newview/skins/default/xui/pl/panel_group_notify.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_notify.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="instant_message" name="panel_group_notify"> <panel label="header" name="header"> - <text name="title" value="Imię Nadawcy / Nazwa Grupy"/> + <text name="title" value="Imię nadawcy / Nazwa grupy"/> </panel> <text name="attachment" value="Załącznik"/> <button label="OK" name="btn_ok"/> diff --git a/indra/newview/skins/default/xui/pl/panel_group_roles.xml b/indra/newview/skins/default/xui/pl/panel_group_roles.xml index 8a422e2586..9e9c79d26a 100644 --- a/indra/newview/skins/default/xui/pl/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_roles.xml @@ -9,17 +9,20 @@ <tab_container name="roles_tab_container"> <panel label="CZŁONKOWIE" name="members_sub_tab" tool_tip="Członkowie"> <panel.string name="help_text"> - Możesz dodawać i usuwać Funkcje przypisane do Członków. -Możesz wybrać wielu Członków naciskając Ctrl i klikając na ich imionach. + Możesz dodawać i usuwać funkcje przypisane do członków. +Możesz wybrać wielu członków naciskając Ctrl i klikając na ich imionach. </panel.string> - <filter_editor label="Filtruj Członków" name="filter_input"/> + <panel.string name="donation_area"> + [AREA] m² + </panel.string> + <filter_editor label="Filtruj członków" name="filter_input"/> <name_list name="member_list"> <name_list.columns label="Członek" name="name"/> <name_list.columns label="Dotacje" name="donated"/> <name_list.columns label="Status" name="online"/> </name_list> - <button label="Zaproś do Grupy" name="member_invite"/> - <button label="Usuń z Grupy" name="member_eject"/> + <button label="Zaproś do grupy" name="member_invite"/> + <button label="Usuń z grupy" name="member_eject"/> </panel> <panel label="FUNKCJE" name="roles_sub_tab"> <panel.string name="help_text"> @@ -34,22 +37,22 @@ jedną lub wiele funkcji. Każda grupa może posiadać maksymalnie 10 funkcji, <panel.string name="power_folder_icon"> Inv_FolderClosed </panel.string> - <filter_editor label="Filtruj Funkcje" name="filter_input"/> + <filter_editor label="Filtruj funkcje" name="filter_input"/> <scroll_list name="role_list"> <scroll_list.columns label="Funkcja" name="name"/> <scroll_list.columns label="Tytuł" name="title"/> <scroll_list.columns label="#" name="members"/> </scroll_list> - <button label="Stwórz Nową Funkcję" name="role_create"/> - <button label="Usuń Funkcję" name="role_delete"/> + <button label="Stwórz nową funkcję" name="role_create"/> + <button label="Usuń funkcję" name="role_delete"/> </panel> <panel label="PRZYWILEJE" name="actions_sub_tab" tool_tip="Możesz sprawdzić szczegóły dotyczące dangego przywileju oraz jakie funkcje oraz jacy członkowie posiadają prawo korzystania z niego."> <panel.string name="help_text"> - Przywileje pozwalają Członkom przypisanym do Funkcji na wykonywanie różnych zadań. -Istnieje wiele Przywilei. + Przywileje pozwalają członkom przypisanym do funkcji na wykonywanie różnych zadań. +Istnieje wiele przywilejów. </panel.string> - <filter_editor label="Filtruj Przywileje" name="filter_input"/> - <scroll_list name="action_list" tool_tip="Wybierz przywilej by zobaczyć szczegóły"> + <filter_editor label="Filtruj przywileje" name="filter_input"/> + <scroll_list name="action_list" tool_tip="Wybierz przywilej aby zobaczyć szczegóły"> <scroll_list.columns label="" name="icon"/> <scroll_list.columns label="" name="action"/> </scroll_list> @@ -66,49 +69,40 @@ Istnieje wiele Przywilei. <text name="static2"> Przywileje </text> - <scroll_list name="member_allowed_actions" tool_tip="By zobaczyć szczegóły, wybierz zakładkę Przywileje"> + <scroll_list name="member_allowed_actions" tool_tip="Aby zobaczyć szczegóły, wybierz zakładkę Przywileje"> <scroll_list.columns label="" name="icon"/> <scroll_list.columns label="" name="action"/> </scroll_list> </panel> <panel name="roles_footer"> <text name="static"> - Nazwa Funkcji + Nazwa funkcji </text> - <line_editor name="role_name"> - Liczba - </line_editor> + <line_editor name="role_name"/> <text name="static3"> - Nazwa Funkcji + Nazwa funkcji </text> - <line_editor name="role_title"> - (proszę czekać) - </line_editor> + <line_editor name="role_title"/> <text name="static2"> Opis </text> - <text_editor name="role_description"> - (proszę czekać) - </text_editor> + <text_editor name="role_description"/> <text name="static4"> - Przypisane Funkcje + Przypisane funkcje </text> - <check_box label="Opcja widoczności jest aktywna" name="role_visible_in_list" tool_tip="Opcja ta pozwala określić widoczność członków pełniących tę funkcję dla ludzi spoza Grupy."/> + <check_box label="Opcja widoczności jest aktywna" name="role_visible_in_list" tool_tip="Opcja ta pozwala określić widoczność członków pełniących tę funkcję dla ludzi spoza grupy."/> <text name="static5" tool_tip="Przywileje przypisane do wybranej Funkcji."> - Przypisane Przywileje + Przypisane przywileje </text> - <scroll_list name="role_allowed_actions" tool_tip="By zobaczyć szczegóły dozwolonych przywilejów wybierz zakładkę Przywileje"> + <scroll_list name="role_allowed_actions" tool_tip="Aby zobaczyć szczegóły dozwolonych przywilejów wybierz zakładkę Przywileje"> <scroll_list.columns label="" name="icon"/> <scroll_list.columns label="" name="checkbox"/> <scroll_list.columns label="" name="action"/> </scroll_list> </panel> <panel name="actions_footer"> - <text name="static"> - Opis Przywileju - </text> <text_editor name="action_description"> - Przywilej 'Usuń Członka z Grupy'. Tylko Właściciel może usunąć innego Właściciela. + Przywilej 'Usuń członka z grupy'. Tylko właściciel może usunąć innego właściciela. </text_editor> <text name="static2"> Funkcje z tym przywilejem diff --git a/indra/newview/skins/default/xui/pl/panel_groups.xml b/indra/newview/skins/default/xui/pl/panel_groups.xml index 9df90fc797..671d8fd2f0 100644 --- a/indra/newview/skins/default/xui/pl/panel_groups.xml +++ b/indra/newview/skins/default/xui/pl/panel_groups.xml @@ -10,7 +10,7 @@ Należysz do [COUNT] grup (maksimum to [MAX]). </text> <button label="Czat/IM" name="IM" tool_tip="Rozpocznij sesję czatu (IM)" /> - <button label="O Grupie" name="Info" /> + <button label="O grupie" name="Info" /> <button label="Wybierz" name="Activate" /> <button label="Opuść" name="Leave" /> <button label="Stwórz..." name="Create" /> diff --git a/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml index 84d1982440..4aadd3b93b 100644 --- a/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml @@ -23,7 +23,7 @@ <button label="Zakończ rozmowę" name="end_call_btn"/> </layout_panel> <layout_panel name="voice_ctrls_btn_panel"> - <button label="Przełączniki Głosu" name="voice_ctrls_btn"/> + <button label="Przełączniki głosu" name="voice_ctrls_btn"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_landmark_info.xml b/indra/newview/skins/default/xui/pl/panel_landmark_info.xml index 64479176fa..3370f6f58e 100644 --- a/indra/newview/skins/default/xui/pl/panel_landmark_info.xml +++ b/indra/newview/skins/default/xui/pl/panel_landmark_info.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="landmark_info"> - <string name="title_create_landmark" value="Zapamiętaj Miejsce"/> - <string name="title_edit_landmark" value="Edytuj Zapamiętane Miejsce"/> - <string name="title_landmark" value="Zapamiętane Miejsce (LM)"/> + <string name="title_create_landmark" value="Zapamiętaj miejsce (LM)"/> + <string name="title_edit_landmark" value="Edytuj landmarki"/> + <string name="title_landmark" value="Landmarki (LM)"/> <string name="not_available" value="(N\A)"/> <string name="unknown" value="(nieznane)"/> <string name="public" value="(publiczne)"/> @@ -19,7 +19,7 @@ [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] </string> <button name="back_btn" tool_tip="Cofnij"/> - <text name="title" value="Profil Miejsca"/> + <text name="title" value="Profil miejsca"/> <scroll_container name="place_scroll"> <panel name="scrolling_panel"> <text name="maturity_value" value="nieznany"/> diff --git a/indra/newview/skins/default/xui/pl/panel_login.xml b/indra/newview/skins/default/xui/pl/panel_login.xml index 7447efe667..b5899f1009 100644 --- a/indra/newview/skins/default/xui/pl/panel_login.xml +++ b/indra/newview/skins/default/xui/pl/panel_login.xml @@ -12,19 +12,27 @@ Użytkownik: </text> <line_editor label="Użytkownik" name="username_edit" tool_tip="[SECOND_LIFE] Użytkownik"/> - <check_box label="Zapamiętaj Hasło" name="remember_check"/> + <text name="password_text"> + Hasło: + </text> + <check_box label="Zapamiętaj hasło" name="remember_check"/> <button label="Połącz" name="connect_btn"/> <text name="start_location_text"> Rozpocznij w: </text> <combo_box name="start_location_combo"> + <combo_box.item label="Ostatnie Miejsce" name="MyLastLocation"/> <combo_box.item label="Moje Miejsce Startu" name="MyHome"/> + <combo_box.item label="<Wpisz Region>" name="Typeregionname"/> </combo_box> </layout_panel> <layout_panel name="links"> <text name="create_new_account_text"> Utwórz nowe konto </text> + <text name="forgot_password_text"> + Nie pamiętasz hasła? + </text> <text name="login_help"> Potrzebujesz pomocy z logowaniem się? </text> diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml index 03b063ddfe..914a2aee73 100644 --- a/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml +++ b/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml @@ -1,24 +1,24 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Ogólne" name="Media Settings General"> <text name="home_label"> - Strona Domowa: + Strona domowa: </text> <text name="home_fails_whitelist_label"> - (ta strona nie została zaakceptowana przez filtr listy dostępowej) + (ta strona nie została zaakceptowana przez filtr listy dostępowej (Biała Lista) </text> <line_editor name="home_url" tool_tip="Strona domowa dla źródla mediów"/> <text name="preview_label"> Pokaż </text> <text name="current_url_label"> - Obecna Strona: + Obecna strona: </text> <text name="current_url" tool_tip="The current page for this media source" value=""/> <button label="Zresetuj" name="current_url_reset_btn"/> <check_box initial_value="false" label="Pętla" name="auto_loop"/> - <check_box initial_value="false" label="Interakcja Kliknięcia" name="first_click_interact"/> + <check_box initial_value="false" label="Interakcja kliknięcia" name="first_click_interact"/> <check_box initial_value="false" label="Autopowiększenie" name="auto_zoom"/> - <check_box initial_value="false" label="Automatyczne Odtwarzanie Mediów" name="auto_play"/> + <check_box initial_value="false" label="Automatyczne odtwarzanie mediów" name="auto_play"/> <text name="media_setting_note"> Pamiętaj: Rezydenci mogą zmienić to ustawienie </text> diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml index 6b93981acc..a87c29d7b3 100644 --- a/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml +++ b/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml @@ -15,15 +15,15 @@ Właściciel </text> <check_box initial_value="false" label="Pozwól na nawigację & interaktywność" name="perms_owner_interact"/> - <check_box initial_value="false" label="Pokaż Pasek Kontroli" name="perms_owner_control"/> + <check_box initial_value="false" label="Pokaż pasek kontroli" name="perms_owner_control"/> <text name="group_label"> Grupa: </text> - <check_box initial_value="false" label="Pozwól na nawigację & Interaktywność" name="perms_group_interact"/> - <check_box initial_value="false" label="Pokaż Pasek Kontroli" name="perms_group_control"/> + <check_box initial_value="false" label="Pozwól na nawigację & interaktywność" name="perms_group_interact"/> + <check_box initial_value="false" label="Pokaż pasek kontroli" name="perms_group_control"/> <text name="anyone_label"> Każdy </text> <check_box initial_value="false" label="Pozwól na nawigację & interaktywność" name="perms_anyone_interact"/> - <check_box initial_value="false" label="Pokaż Pasek Kontroli" name="perms_anyone_control"/> + <check_box initial_value="false" label="Pokaż pasek kontroli" name="perms_anyone_control"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_my_profile.xml b/indra/newview/skins/default/xui/pl/panel_my_profile.xml index 7ca762b825..fefab15af0 100644 --- a/indra/newview/skins/default/xui/pl/panel_my_profile.xml +++ b/indra/newview/skins/default/xui/pl/panel_my_profile.xml @@ -10,11 +10,11 @@ <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> <panel name="second_life_image_panel"> - <icon label="" name="2nd_life_edit_icon" tool_tip="Kliknij przycisk Edytuj Profil by zmienić zdjęcie"/> + <icon label="" name="2nd_life_edit_icon" tool_tip="Kliknij przycisk Edytuj profil by zmienić zdjęcie"/> <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/> </panel> <panel name="first_life_image_panel"> - <icon label="" name="real_world_edit_icon" tool_tip="Kliknij przycisk Edytuj Profil by zmienić zdjęcie"/> + <icon label="" name="real_world_edit_icon" tool_tip="Kliknij przycisk Edytuj profil by zmienić zdjęcie"/> <text name="title_rw_descr_text" value="Życie#1:"/> </panel> <text name="title_member_text" value="Urodziny:"/> @@ -28,8 +28,8 @@ </scroll_container> </layout_panel> <layout_panel name="profile_me_buttons_panel"> - <button label="Edytuj Profil" name="edit_profile_btn" tool_tip="Edytuj swoje dane"/> - <button label="Edytuj Wygląd" name="edit_appearance_btn" tool_tip="Stwórz/edytuj swój wygląd: dane fizyczne, ubrania itp."/> + <button label="Edytuj profil" name="edit_profile_btn" tool_tip="Edytuj swoje dane"/> + <button label="Edytuj wygląd" name="edit_appearance_btn" tool_tip="Stwórz/edytuj swój wygląd: dane fizyczne, ubrania itp."/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml index 2d1decd960..63cf96b571 100644 --- a/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml +++ b/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml @@ -7,5 +7,5 @@ 320 </string> <line_editor label="Kliknij tutaj aby rozmawiać." name="chat_box" tool_tip="Naciśnij Enter aby mówić, Ctrl + Enter aby krzyknąć"/> - <button name="show_nearby_chat" tool_tip="Pokazuje/ukrywa pobliski Czat"/> + <button name="show_nearby_chat" tool_tip="Pokazuje/ukrywa pobliski czat"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_media.xml b/indra/newview/skins/default/xui/pl/panel_nearby_media.xml index cc023a12bf..c9f951f7c6 100644 --- a/indra/newview/skins/default/xui/pl/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/pl/panel_nearby_media.xml @@ -7,10 +7,10 @@ <empty> </string> <string name="parcel_media_name"> - Strumień Mediów Posiadłości + Strumień mediów posiadłości </string> <string name="parcel_audio_name"> - Strumień Audio Posiadłości + Strumień audio posiadłości </string> <string name="playing_suffix"> (odtwarzanie) @@ -23,10 +23,16 @@ <button label="Więcej >>" label_selected="Mniej <<" name="less_btn" tool_tip="Zaawansowane"/> </panel> <panel name="nearby_media_panel"> + <text name="nearby_media_title"> + Media w pobliżu + </text> + <text name="show_text"> + Pokaż: + </text> <combo_box name="show_combo"> <combo_box.item label="Wszystkie" name="All"/> - <combo_box.item label="Na obecnej Parceli" name="WithinParcel"/> - <combo_box.item label="Poza Posiadłością" name="OutsideParcel"/> + <combo_box.item label="Na obecnej posiadłości" name="WithinParcel"/> + <combo_box.item label="Poza posiadłością" name="OutsideParcel"/> <combo_box.item label="Na innych awatarach" name="OnOthers"/> </combo_box> <scroll_list name="media_list"> @@ -36,10 +42,10 @@ <scroll_list.columns label="Nazwa" name="media_name"/> <scroll_list.columns label="Debugowanie" name="media_debug"/> </scroll_list> - <panel> + <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> - <button name="stop_btn" tool_tip="Wyłącz wybrane media"/> + <button name="stop_btn" tool_tip="Zatrzymaj wybrane media"/> </layout_panel> <layout_panel name="play"> <button name="play_btn" tool_tip="Włącz wybrane media"/> @@ -51,13 +57,13 @@ <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Głośność audio dla wybranych mediów"/> </layout_panel> <layout_panel name="mute"> - <button name="mute_btn" tool_tip="Wycisz audio dla wybranych mediów"/> + <button name="mute_btn" tool_tip="Wycisz audio wybranych mediów"/> </layout_panel> <layout_panel name="zoom"> <button name="zoom_btn" tool_tip="Przybliż wybrane media"/> </layout_panel> <layout_panel name="unzoom"> - <button name="unzoom_btn" tool_tip="Oddal wybrane media"/> + <button name="unzoom_btn" tool_tip="Oddal od wybranych mediów"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml b/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml index 2c5e2a3f61..31502cccba 100644 --- a/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml @@ -30,7 +30,7 @@ <button label="Dodaj..." name="show_add_wearables_btn" tool_tip="Otwórz/Zamknij"/> </layout_panel> <layout_panel name="filter_panel"> - <filter_editor label="Filtruj częśći stroju w Szafie" name="look_item_filter"/> + <filter_editor label="Filtruj części stroju w Szafie" name="look_item_filter"/> </layout_panel> </layout_stack> </layout_panel> diff --git a/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml index 5b77c390ca..2f8c008f98 100644 --- a/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_gear_default"> - <menu_item_call label="Zastąp Obecne Ubranie" name="wear"/> - <menu_item_call label="Dodaj do Obecnego Ubrania" name="add"/> - <menu_item_call label="Usuń z Obecnego Ubrania" name="remove"/> + <menu_item_call label="Zastąp obecny strój" name="wear"/> + <menu_item_call label="Dodaj do obecnego stroju" name="add"/> + <menu_item_call label="Usuń z obecnego stroju" name="remove"/> <menu_item_call label="Zmień nazwę" name="rename"/> - <menu_item_call label="Usuń Link" name="remove_link"/> - <menu_item_call label="Usuń Ubranie" name="delete"/> + <menu_item_call label="Usuń link" name="remove_link"/> + <menu_item_call label="Usuń strój" name="delete"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/panel_people.xml b/indra/newview/skins/default/xui/pl/panel_people.xml index 50fc0ba8af..19df36c9ee 100644 --- a/indra/newview/skins/default/xui/pl/panel_people.xml +++ b/indra/newview/skins/default/xui/pl/panel_people.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!-- Side tray panel --> <panel label="Ludzie" name="people_panel"> - <string name="no_recent_people" value="Brak ostatnich rozmówców. Chcesz spotkać ludzi? Spróbuj [secondlife:///app/search/people Search] or the [secondlife:///app/worldmap Mapa Świata]."/> + <string name="no_recent_people" value="Brak ostatnich rozmówców. Chcesz spotkać ludzi? Spróbuj [secondlife:///app/search/people Szukaj] or the [secondlife:///app/worldmap Mapa Świata]."/> <string name="no_filtered_recent_people" value="Nie znaleziono tego czego szukasz? Spróbuj [secondlife:///app/search/groups/[SEARCH_TERM] Szukaj]."/> - <string name="no_one_near" value="Nie ma nikogo w pobliżu. Chcesz spotkać ludzi? Spróbuj[secondlife:///app/search/people Search] lub [secondlife:///app/worldmap Mapa Świata]."/> + <string name="no_one_near" value="Nie ma nikogo w pobliżu. Chcesz spotkać ludzi? Spróbuj [secondlife:///app/search/people Szukaj] lub [secondlife:///app/worldmap Mapa Świata]."/> <string name="no_one_filtered_near" value="Nie znaleziono tego czego szukasz? Spróbuj [secondlife:///app/search/groups/[SEARCH_TERM] Szukaj]."/> - <string name="no_friends_online" value="Brak dostępnych Znajomych"/> - <string name="no_friends" value="Brak Znajomych"/> + <string name="no_friends_online" value="Brak dostępnych znajomych"/> + <string name="no_friends" value="Brak znajomych"/> <string name="no_friends_msg"> Wyszukaj znajomych [secondlife:///app/search/people Szukaj] lub kliknij prawym przyciskiem na Rezydenta aby zaproponować mu znajomość. Chcesz spotkać ludzi? Spróbuj [secondlife:///app/worldmap Mapa Świata]. @@ -14,8 +14,8 @@ Chcesz spotkać ludzi? Spróbuj [secondlife:///app/worldmap Mapa Świata]. <string name="no_filtered_friends_msg"> Nie znaleziono tego czego szukasz? Spróbuj [secondlife:///app/search/groups/[SEARCH_TERM] Szukaj]. </string> - <string name="people_filter_label" value="Filtruj Ludzi"/> - <string name="groups_filter_label" value="Filtruj Grupy"/> + <string name="people_filter_label" value="Filtruj ludzi"/> + <string name="groups_filter_label" value="Filtruj grupy"/> <string name="no_filtered_groups_msg" value="Nie znaleziono tego czego szukasz? Spróbuj [secondlife:///app/search/groups/[SEARCH_TERM] Szukaj]."/> <string name="no_groups_msg" value="Chcesz dołączyć do grup? Spróbuj [secondlife:///app/search/groups Szukaj]."/> <filter_editor label="Filtr" name="filter_input"/> @@ -23,7 +23,7 @@ Chcesz spotkać ludzi? Spróbuj [secondlife:///app/worldmap Mapa Świata]. <panel label="W POBLIŻU" name="nearby_panel"> <panel label="bottom_panel" name="bottom_panel"> <button name="nearby_view_sort_btn" tool_tip="Opcje"/> - <button name="add_friend_btn" tool_tip="Dodaj wybranego Rezydenta do Znajomych"/> + <button name="add_friend_btn" tool_tip="Dodaj wybranego Rezydenta do znajomych"/> </panel> </panel> <panel label="ZNAJOMI" name="friends_panel"> @@ -47,7 +47,7 @@ Chcesz spotkać ludzi? Spróbuj [secondlife:///app/worldmap Mapa Świata]. <panel label="OSTATNIE" name="recent_panel"> <panel label="bottom_panel" name="bottom_panel"> <button name="recent_viewsort_btn" tool_tip="Opcje"/> - <button name="add_friend_btn" tool_tip="Dodaj wybranego Rezydenta do Znajomych"/> + <button name="add_friend_btn" tool_tip="Dodaj wybranego Rezydenta do znajomych"/> </panel> </panel> </tab_container> @@ -59,6 +59,6 @@ Chcesz spotkać ludzi? Spróbuj [secondlife:///app/worldmap Mapa Świata]. <button label="Teleportuj" name="teleport_btn" tool_tip="Zaproponuj teleportację" width="70"/> <button label="Profil grupy" name="group_info_btn" tool_tip="Pokaż informacje o grupie" width="69"/> <button label="Konferencja Grupowa" name="chat_btn" tool_tip="Rozpocznij konferencę" width="124"/> - <button label="Rozmowa Głosowa" name="group_call_btn" tool_tip="Rozmowa Głosowa w tej Grupie" width="108"/> + <button label="Rozmowa Głosowa" name="group_call_btn" tool_tip="Rozmowa głosowa w tej grupie" width="108"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_place_profile.xml b/indra/newview/skins/default/xui/pl/panel_place_profile.xml index 3714a141db..7a71a10034 100644 --- a/indra/newview/skins/default/xui/pl/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/pl/panel_place_profile.xml @@ -11,8 +11,8 @@ <string name="unknown" value="(nieznany)"/> <string name="public" value="(publiczny)"/> <string name="none_text" value="(żaden)"/> - <string name="sale_pending_text" value="(Sprzedaż w Toku Realizacji)"/> - <string name="group_owned_text" value="(Własność Grupy)"/> + <string name="sale_pending_text" value="(Sprzedaż w toku realizacji)"/> + <string name="group_owned_text" value="(Własność grupy)"/> <string name="price_text" value="L$"/> <string name="area_text" value="m²"/> <string name="all_residents_text" value="Każdemu"/> @@ -52,7 +52,7 @@ <panel name="parcel_characteristics_panel"> <text name="rating_label" value="Rodzaj:"/> <text name="rating_value" value="nieznane"/> - <text name="voice_label" value="Komunikacja Głosowa:"/> + <text name="voice_label" value="Komunikacja głosowa:"/> <text name="voice_value" value="Włączone"/> <text name="fly_label" value="Lataj:"/> <text name="fly_value" value="Włączone"/> @@ -92,7 +92,7 @@ <text name="covenant_label" value="Umowa:"/> </panel> </accordion_tab> - <accordion_tab name="sales_tab" title="Na Sprzedaż"> + <accordion_tab name="sales_tab" title="Na sprzedaż"> <panel name="sales_panel"> <text name="sales_price_label" value="Cena:"/> <text name="area_label" value="Powierzchnia:"/> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml index de4fa10b73..b267610d33 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml @@ -16,9 +16,9 @@ <check_box initial_value="prawda" label="Schowek" name="appearance_sidebar_positioning" tool_tip="Użyj automatycznego pozycjonowania kamery dla schowka"/> <check_box label="Pokaż w trybie widoku panoramicznego" name="first_person_avatar_visible"/> <check_box label="Aktywacja klawiszy strzałek do poruszania awatarem" name="arrow_keys_move_avatar_check"/> - <check_box label="kliknij-kliknij-przytrzymaj, aby uruchomić" name="tap_tap_hold_to_run"/> + <check_box label="Kliknij-kliknij-przytrzymaj, aby uruchomić" name="tap_tap_hold_to_run"/> <check_box label="Poruszaj ustami awatara kiedy używana jest komunikacja głosowa" name="enable_lip_sync"/> - <check_box label="Czat Chmurkowy" name="bubble_text_chat"/> + <check_box label="Czat chmurkowy" name="bubble_text_chat"/> <slider label="Intensywność" name="bubble_chat_opacity"/> <color_swatch name="background" tool_tip="Wybierz kolor czatu w chmurce"/> <text name="UI Size:"> @@ -31,7 +31,7 @@ </radio_group> <check_box label="Włącz/Wyłącz głos:" name="push_to_talk_toggle_check" tool_tip="Jeżeli jesteś w trybie mówienia, w celu aktywacji lub deaktywacji swojego mikrofonu wybierz i wyłącz przycisk Mów tylko raz. Jeżeli nie jesteś w trybie mówienia, mikrofon przesyła Twój głos tylko w momencie aktywacji pełnej przycisku Mów."/> <line_editor label="Naciśnij Mów by rozpocząć komunikację głosową" name="modifier_combo"/> - <button label="wybierz Klawisz" name="set_voice_hotkey_button"/> - <button label="Środkowy Przycisk Myszki" name="set_voice_middlemouse_button" tool_tip="Zresetuj do środkowego przycisku myszy"/> + <button label="Wybierz klawisz" name="set_voice_hotkey_button"/> + <button label="Środkowy przycisk myszki" name="set_voice_middlemouse_button" tool_tip="Zresetuj do środkowego przycisku myszy"/> <button label="Inne urządzenia" name="joystick_setup_button"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml index e843342aa2..d53a99e8c1 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml @@ -4,7 +4,7 @@ Powiadom mnie: </text> <check_box label="Kiedy wydaję lub otrzymuję L$" name="notify_money_change_checkbox"/> - <check_box label="Kiedy moi Znajomi zalogowują się i wylogowują" name="friends_online_notify_checkbox"/> + <check_box label="Kiedy moi znajomi zalogowują się i wylogowują" name="friends_online_notify_checkbox"/> <text name="show_label"> Zawsze pokazuj: </text> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml index e7134f23c3..69686bcdbc 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml @@ -24,16 +24,16 @@ </text> <text name="maturity_desired_textbox"/> <combo_box name="maturity_desired_combobox"> - <combo_box.item label="'PG', 'Mature' oraz 'Adult'" name="Desired_Adult"/> - <combo_box.item label="'PG' i 'Mature'" name="Desired_Mature"/> - <combo_box.item label="'PG'" name="Desired_PG"/> + <combo_box.item label="'General', 'Mature' oraz 'Adult'" name="Desired_Adult"/> + <combo_box.item label="'General' i 'Mature'" name="Desired_Mature"/> + <combo_box.item label="'General'" name="Desired_PG"/> </combo_box> <text name="start_location_textbox"> Miejsce Startu: </text> <combo_box name="start_location_combo"> - <combo_box.item label="Ostatnie Miejsce" name="MyLastLocation" tool_tip="Domyślnie loguj mnie do ostatnio odwiedzonego miejsca."/> - <combo_box.item label="Mój Start" name="MyHome" tool_tip="Domyślnie loguj mnie do mojego miejsca startu."/> + <combo_box.item label="Ostatnie Miejsce" name="MyLastLocation" tool_tip="Domyślnie loguj mnie w ostatnio odwiedzonym miejscu."/> + <combo_box.item label="Mój Start" name="MyHome" tool_tip="Domyślnie loguj mnie w moim Miejscu Startu."/> </combo_box> <check_box initial_value="true" label="Pokaż przy zalogowaniu" name="show_location_checkbox"/> <text name="name_tags_textbox"> @@ -45,8 +45,8 @@ <radio_item label="Pokaż w skrócie" name="radio3" value="2"/> </radio_group> <check_box label="Wyświetl moje imię:" name="show_my_name_checkbox1"/> - <check_box initial_value="true" label="Używaj Małych Imion Awatarów" name="small_avatar_names_checkbox"/> - <check_box label="Wyświetl Tytuł Grupowy" name="show_all_title_checkbox1"/> + <check_box initial_value="true" label="Używaj małych imion awatarów" name="small_avatar_names_checkbox"/> + <check_box label="Wyświetl tytuł grupowy" name="show_all_title_checkbox1"/> <text name="effects_color_textbox"> Kolor moich efektów: </text> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml index 99b3074fcb..e60d540066 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml @@ -26,23 +26,23 @@ <text name="ShadersText"> Cieniowanie pixeli (shadery): </text> - <check_box initial_value="true" label="Mapowanie Wypukłości i Połysk" name="BumpShiny"/> - <check_box initial_value="true" label="Podstawowe Shadery" name="BasicShaders" tool_tip="Wyłączenie tej opcji może naprawić błędy niektórych sterowników graficznych."/> - <check_box initial_value="true" label="Shadery Atmosfery" name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="Mapowanie wypukłości i połysk" name="BumpShiny"/> + <check_box initial_value="true" label="Podstawowe shadery" name="BasicShaders" tool_tip="Wyłączenie tej opcji może naprawić błędy niektórych sterowników graficznych."/> + <check_box initial_value="true" label="Shadery atmosfery" name="WindLightUseAtmosShaders"/> <check_box initial_value="true" label="Refleksy w wodzie" name="Reflections"/> <text name="ReflectionDetailText"> Ustawienia refleksów: </text> <radio_group name="ReflectionDetailRadio"> <radio_item label="Teren i drzewa" name="0"/> - <radio_item label="Obiekty Statyczne" name="1"/> - <radio_item label="Awatary i Obiekty" name="2"/> + <radio_item label="Obiekty statyczne" name="1"/> + <radio_item label="Awatary i obiekty" name="2"/> <radio_item label="Wszystko" name="3"/> </radio_group> <text name="AvatarRenderingText"> Rendering awatarów </text> - <check_box initial_value="true" label="Impostoryzacja Awatarowa" name="AvatarImpostors"/> + <check_box initial_value="true" label="Impostoryzacja awatarowa" name="AvatarImpostors"/> <check_box initial_value="true" label="Rendering awatara przez GPU" name="AvatarVertexProgram"/> <check_box initial_value="true" label="Oddzielne warstwy ubrań" name="AvatarCloth"/> <slider label="Pole widzenia:" name="DrawDistance"/> @@ -51,7 +51,7 @@ </text> <slider label="Liczba cząsteczek:" name="MaxParticleCount"/> <slider label="Max. # awatarów bez impostoryzacji:" name="MaxNumberAvatarDrawn"/> - <slider label="Jakość Post-Procesu:" name="RenderPostProcess"/> + <slider label="Jakość post-procesu:" name="RenderPostProcess"/> <text name="MeshDetailText"> Szczególy obiektów: </text> @@ -87,7 +87,7 @@ </text> <radio_group name="LightingDetailRadio"> <radio_item label="Tylko Słońce i Księżyc" name="SunMoon" value="0"/> - <radio_item label="Tylko Bliskie Światła" name="LocalLights" value="1"/> + <radio_item label="Tylko bliskie światła" name="LocalLights" value="1"/> </radio_group> <text name="TerrainDetailText"> Szczegóły terenu: diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml index 9504019f79..fd9cdd6ff0 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml @@ -10,7 +10,7 @@ <check_box label="Mój status online jest dostępny tylko dla znajomych i grup do których należę" name="online_visibility"/> <check_box label="Możliwość wysyłania wiadomości prywatnej (IM) oraz rozmowy głosowej tylko dla znajomych i grup do których należę" name="voice_call_friends_only_check"/> <check_box label="Wyłącz mikrofon po zakończeniu rozmowy głosowej" name="auto_disengage_mic_check"/> - <check_box label="Akceptuj Ciasteczka" name="cookies_enabled"/> + <check_box label="Akceptuj ciasteczka" name="cookies_enabled"/> <text name="Logs:"> Logi: </text> @@ -21,5 +21,5 @@ Lokalizacja zapisu: </text> <button label="Przeglądaj" label_selected="Przeglądaj" name="log_path_button"/> - <button label="Lista Zablokowanych" name="block_list"/> + <button label="Lista zablokowanych" name="block_list"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml index 98fdffeb50..b6578d21ca 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Ustawienia" name="Input panel"> - <button label="Ustawienia Joysticka" name="joystick_setup_button"/> + <button label="Ustawienia joysticka" name="joystick_setup_button"/> <text name="Mouselook:"> Widok panoramiczny: </text> <text name=" Mouse Sensitivity"> - Czułość Myszki + Czułość myszki </text> <slider name="mouse_sensitivity"/> <check_box label="Zmień klawisze myszki" name="invert_mouse"/> @@ -41,9 +41,9 @@ <check_box label="Zezwalaj na wtyczki" name="browser_plugins_enabled"/> <check_box label="Akceptuj ciasteczka z Internetu" name="cookies_enabled"/> <check_box label="Zezwalaj na Javascript" name="browser_javascript_enabled"/> - <check_box label="Używaj Serwera Proxy" name="web_proxy_enabled"/> + <check_box label="Używaj serwera proxy" name="web_proxy_enabled"/> <text name="Proxy location"> - Lokalizacja Proxy: + Lokalizacja proxy: </text> <line_editor name="web_proxy_editor" tool_tip="Nazwa lub IP proxy, którego chcesz użyć"/> <spinner label="Numer portu:" name="web_proxy_port"/> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml index 6ab5be77d8..eaf9ae809b 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Dźwięki" name="Preference Media panel"> <slider label="Główny" name="System Volume"/> - <check_box label="Wycisz podczas minimalizacji" name="mute_when_minimized"/> + <check_box initial_value="true" label="Wycisz podczas minimalizacji" name="mute_when_minimized"/> <slider label="Interfejs" name="UI Volume"/> <slider label="Otoczenie" name="Wind Volume"/> <slider label="Efekty dźwiękowe" name="SFX Volume"/> @@ -9,25 +9,31 @@ <check_box label="Odtwarzaj media audio" name="music_enabled"/> <slider label="Media" name="Media Volume"/> <check_box label="Odtwarzaj media" name="enable_media"/> - <slider label="Komunikacja Głosowa" name="Voice Volume"/> + <slider label="Komunikacja głosowa" name="Voice Volume"/> <check_box label="Pozwól na rozmowy głosowe" name="enable_voice_check"/> - <check_box label="Automatycznie odtwarzaj media" name="media_auto_play_btn" tool_tip="Zaznacz tę funkcję by uruchomić automatyczne uruchamianie mediów"/> - <check_box label="Uruchom media załączone do innych awatarów" name="media_show_on_others_btn" tool_tip="Odznacz tę funkcję by ukryć media załączone to awatarów w publiżu"/> + <check_box label="Automatycznie odtwarzaj media" name="media_auto_play_btn" tool_tip="Zaznacz tę funkcję aby uruchomić automatyczne uruchamianie mediów" value="true"/> + <check_box label="Uruchom media załączone do innych awatarów" name="media_show_on_others_btn" tool_tip="Odznacz tę funkcję by ukryć media załączone to awatarów w publiżu" value="true"/> <text name="voice_chat_settings"> - Ustawienia Komunikacji Głosowej + Ustawienia komunikacji głosowej </text> <text name="Listen from"> Odtwarzaj z: </text> <radio_group name="ear_location"> - <radio_item label="Pozycji kamery" name="0"/> - <radio_item label="Pozycji Awatara" name="1"/> + <radio_item label="pozycji kamery" name="0"/> + <radio_item label="pozycji awatara" name="1"/> </radio_group> - <button label="Wejściowe/Wyjściowe Urządzenia" name="device_settings_btn"/> - <panel label="Ustawienia Sprzętowe" name="device_settings_panel"> + <button label="Wejściowe/Wyjściowe urządzenia" name="device_settings_btn"/> + <panel label="Ustawienia sprzętowe" name="device_settings_panel"> <panel.string name="default_text"> Domyślne </panel.string> + <panel.string name="default system device"> + Domyślne ustawienia sprzętowe + </panel.string> + <panel.string name="no device"> + Brak sprzętu + </panel.string> <text name="Input"> Wejściowe </text> diff --git a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml index f10ce5ea4d..a1a9be9242 100644 --- a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml @@ -25,7 +25,7 @@ <button name="fwd_btn" tool_tip="Przejdź do następnego"/> </layout_panel> <layout_panel name="home"> - <button name="home_btn" tool_tip="Strona Domowa"/> + <button name="home_btn" tool_tip="Strona domowa"/> </layout_panel> <layout_panel name="media_stop"> <button name="media_stop_btn" tool_tip="Zatrzymaj media"/> @@ -37,13 +37,13 @@ <button name="stop_btn" tool_tip="Zatrzymaj wczytywanie"/> </layout_panel> <layout_panel name="play"> - <button name="play_btn" tool_tip="Odtwarzaj Media"/> + <button name="play_btn" tool_tip="Odtwarzaj media"/> </layout_panel> <layout_panel name="pause"> <button name="pause_btn" tool_tip="Wstrzymaj media"/> </layout_panel> <layout_panel name="media_address"> - <line_editor name="media_address_url" tool_tip="URL Mediów"/> + <line_editor name="media_address_url" tool_tip="URL mediów"/> <layout_stack name="media_address_url_icons"> <layout_panel> <icon name="media_whitelist_flag" tool_tip="Biała Lista aktywna"/> @@ -63,14 +63,14 @@ <button name="skip_forward_btn" tool_tip="Przewiń do przodu"/> </layout_panel> <layout_panel name="media_volume"> - <button name="media_mute_button" tool_tip="Wycisz Media"/> - <slider name="volume_slider" tool_tip="Głośność Mediów"/> + <button name="media_mute_button" tool_tip="Wycisz media"/> + <slider name="volume_slider" tool_tip="Głośność mediów"/> </layout_panel> <layout_panel name="zoom_frame"> <button name="zoom_frame_btn" tool_tip="Przybliż do mediów"/> </layout_panel> <layout_panel name="close"> - <button name="close_btn" tool_tip="Oddal"/> + <button name="close_btn" tool_tip="Oddal od mediów"/> </layout_panel> <layout_panel name="new_window"> <button name="new_window_btn" tool_tip="Otwórz URL w przeglądarce"/> diff --git a/indra/newview/skins/default/xui/pl/panel_profile.xml b/indra/newview/skins/default/xui/pl/panel_profile.xml index 766ed94822..97c2fdd417 100644 --- a/indra/newview/skins/default/xui/pl/panel_profile.xml +++ b/indra/newview/skins/default/xui/pl/panel_profile.xml @@ -34,8 +34,8 @@ <button label="▼" name="overflow_btn" tool_tip="Zapłać lub udostępnij obiekty Rezydentowi"/> </layout_panel> <layout_panel name="profile_me_buttons_panel"> - <button label="Edytuj Profil" name="edit_profile_btn" tool_tip="Edytuj swoje dane"/> - <button label="Edytuj Wygląd" name="edit_appearance_btn" tool_tip="Stwórz/edytuj swój wygląd: dane fizyczne, ubranie..."/> + <button label="Edytuj profil" name="edit_profile_btn" tool_tip="Edytuj swoje dane"/> + <button label="Edytuj wygląd" name="edit_appearance_btn" tool_tip="Stwórz/edytuj swój wygląd: dane fizyczne, ubranie..."/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_region_covenant.xml b/indra/newview/skins/default/xui/pl/panel_region_covenant.xml index 2b37dd96b7..932e3631ab 100644 --- a/indra/newview/skins/default/xui/pl/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/pl/panel_region_covenant.xml @@ -19,7 +19,7 @@ Umowa: </text> <text name="covenant_timestamp_text"> - Ostatnia Modyfikacja Wed Dec 31 16:00:00 1969 + Ostatnia modyfikacja Wed Dec 31 16:00:00 1969 </text> <button label="?" name="covenant_help"/> <text_editor name="covenant_editor"> diff --git a/indra/newview/skins/default/xui/pl/panel_region_estate.xml b/indra/newview/skins/default/xui/pl/panel_region_estate.xml index a796274738..1b64827725 100644 --- a/indra/newview/skins/default/xui/pl/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/pl/panel_region_estate.xml @@ -29,10 +29,10 @@ <check_box label="Rezydenci, którzy dokonali weryfikacji wieku" name="limit_age_verified" tool_tip="Zbanuj Rezydentów, którzy nie zweryfikowali swojego wieku. Odwiedź stronę [SUPPORT_SITE] po więcej informacji."/> <check_box label="Rozmowy dozwolone" name="voice_chat_check"/> <button label="?" name="voice_chat_help"/> - <check_box label="Teleportacja Dozwolona" name="allow_direct_teleport"/> + <check_box label="Teleportacja dozwolona" name="allow_direct_teleport"/> <button label="?" name="allow_direct_teleport_help"/> <text name="abuse_email_text"> - Email reporty o nadużyciach do: + Wysyłaj (email) reporty o nadużyciach do: </text> <line_editor name="abuse_email_address"/> <string name="email_unsupported"> @@ -41,7 +41,7 @@ <button label="?" name="abuse_email_address_help"/> <button label="Zastosuj" name="apply_btn"/> <button label="Wyrzuć Rezydenta z Majątku..." name="kick_user_from_estate_btn"/> - <button label="Wyślij Wiadomość do Majątku..." name="message_estate_btn"/> + <button label="Wyślij wiadomość do Majątku..." name="message_estate_btn"/> <text name="estate_manager_label"> Zarządcy Majątku: </text> @@ -57,7 +57,7 @@ <button label="Usuń..." name="remove_allowed_avatar_btn"/> <button label="Dodaj..." name="add_allowed_avatar_btn"/> <text name="allow_group_label"> - Dozwolone Grupy: + Dozwolone grupy: </text> <button label="?" name="allow_group_help"/> <name_list name="allowed_group_name_list"/> diff --git a/indra/newview/skins/default/xui/pl/panel_region_general.xml b/indra/newview/skins/default/xui/pl/panel_region_general.xml index 1410a2a882..601571f62e 100644 --- a/indra/newview/skins/default/xui/pl/panel_region_general.xml +++ b/indra/newview/skins/default/xui/pl/panel_region_general.xml @@ -25,15 +25,15 @@ <check_box label="Odsprzedaż dozwolona" name="allow_land_resell_check"/> <check_box label="Łączenie/Dzielenie dozwolone" name="allow_parcel_changes_check"/> <check_box label="Zablokuj wyszukiwanie" name="block_parcel_search_check" tool_tip="Pozwól na wyświetlanie nazwy regionu i posiadłości w wynikach wyszukiwania"/> - <spinner label="Limit Gości" name="agent_limit_spin"/> + <spinner label="Limit gości" name="agent_limit_spin"/> <spinner label="Ekstra obiekty" name="object_bonus_spin"/> <text label="Ograniczenia wieku" name="access_text"> Rodzaj: </text> <icons_combo_box label="'Mature'" name="access_combo"> <icons_combo_box.item label="'Adult'" name="Adult" value="42"/> - <icons_combo_box.item label="'Mature'" name="Mature" value="21"/> - <icons_combo_box.item label="'PG'" name="PG" value="13"/> + <icons_combo_box.item label="'Moderate'" name="Mature" value="21"/> + <icons_combo_box.item label="'General'" name="PG" value="13"/> </icons_combo_box> <button label="Zastosuj" name="apply_btn"/> <button label="Teleportuj do Miejsca Startu jednego Rezydenta..." name="kick_btn"/> diff --git a/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml b/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml index ffa8f1e18a..84d7d7ab62 100644 --- a/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml +++ b/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml @@ -25,15 +25,15 @@ <check_box label="Odsprzedaż dozwolona" name="allow_land_resell_check"/> <check_box label="Łączenie/Dzielenie dozwolone" name="allow_parcel_changes_check"/> <check_box label="Zablokuj wyszukiwanie" name="block_parcel_search_check" tool_tip="Pozwól na wyświetlanie nazwy Regionu i Posiadłości w wynikach wyszukiwania"/> - <spinner label="Limit Gości" name="agent_limit_spin"/> + <spinner label="Limit gości" name="agent_limit_spin"/> <spinner label="Ekstra obiekty" name="object_bonus_spin"/> <text label="Restrykcje wieku" name="access_text"> Rodzaj: </text> <combo_box label="Moderuj" name="access_combo"> <combo_box.item label="Adult" name="Adult"/> - <combo_box.item label="Moderuj" name="Mature"/> - <combo_box.item label="Ogólne" name="PG"/> + <combo_box.item label="Moderate" name="Mature"/> + <combo_box.item label="General" name="PG"/> </combo_box> <button label="Zastosuj" name="apply_btn"/> <button label="Teleportuj do Miejsca Startu jednego Rezydenta..." name="kick_btn"/> diff --git a/indra/newview/skins/default/xui/pl/panel_region_terrain.xml b/indra/newview/skins/default/xui/pl/panel_region_terrain.xml index 917ae91774..f22b4a5989 100644 --- a/indra/newview/skins/default/xui/pl/panel_region_terrain.xml +++ b/indra/newview/skins/default/xui/pl/panel_region_terrain.xml @@ -19,12 +19,12 @@ <slider label="Pora doby" name="sun_hour_slider" /> <button label="Zastosuj" name="apply_btn" /> <button label="Zapisz surowy teren..." name="download_raw_btn" - tool_tip="Dostępne tylko dla Właścicieli Majątku, nie dla Zarządców" /> + tool_tip="Dostępne tylko dla właścicieli Majątku, nie dla zarządców" /> <button label="?" name="download_raw_help" /> <button label="Załaduj surowy teren..." name="upload_raw_btn" - tool_tip="Dostępne tylko dla Właścicieli Majątku, nie dla Zarządców" /> + tool_tip="Dostępne tylko dla właścicieli Majątku, nie dla zarządców" /> <button label="?" name="upload_raw_help" /> - <button label="Ustal Teren" name="bake_terrain_btn" + <button label="Ustal teren" name="bake_terrain_btn" tool_tip="Zapamiętaj obecny teren jako punkt odniesienia dla limitów podnoszenia i opuszczania" /> <button label="?" name="bake_terrain_help" /> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_region_texture.xml b/indra/newview/skins/default/xui/pl/panel_region_texture.xml index 156f3db63f..c6ed2457f1 100644 --- a/indra/newview/skins/default/xui/pl/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/pl/panel_region_texture.xml @@ -7,7 +7,7 @@ brak danych </text> <text name="detail_texture_text"> - Tekstury Terenu (24-bitowe 512x512 pliki .tga wymagane) + Tekstury terenu (24-bitowe 512x512 pliki .tga wymagane) </text> <text name="height_text_lbl"> 1 (Dół) @@ -22,7 +22,7 @@ 4 (Góra) </text> <text name="height_text_lbl5"> - Zakres Poziomów dla Tekstury + Zakres poziomów dla tekstury </text> <text name="height_text_lbl6"> Północny-Zachód diff --git a/indra/newview/skins/default/xui/pl/panel_script_ed.xml b/indra/newview/skins/default/xui/pl/panel_script_ed.xml index 09c3d8ad04..fa89a3f727 100644 --- a/indra/newview/skins/default/xui/pl/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/pl/panel_script_ed.xml @@ -27,11 +27,11 @@ </menu> <menu label="Edytuj" name="Edit"> <menu_item_call label="Cofnij" name="Undo"/> - <menu_item_call label="Do Przodu" name="Redo"/> + <menu_item_call label="Do przodu" name="Redo"/> <menu_item_call label="Wytnij" name="Cut"/> <menu_item_call label="Kopiuj" name="Copy"/> <menu_item_call label="Wklej" name="Paste"/> - <menu_item_call label="Wybierz Wszystko" name="Select All"/> + <menu_item_call label="Wybierz wszystko" name="Select All"/> <menu_item_call label="Odznacz" name="Deselect"/> <menu_item_call label="Znajdź / Zamień..." name="Search / Replace..."/> </menu> diff --git a/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml index e1863517a2..a52d8aed3d 100644 --- a/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml +++ b/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="MÓJ AWATAR" name="script_limits_my_avatar_panel"> <text name="script_memory"> - Zużycie Skryptów przez Awatara + Zużycie skryptów przez awatara </text> <text name="loading_text"> Ładowanie... @@ -9,7 +9,7 @@ <scroll_list name="scripts_list"> <scroll_list.columns label="Rozmiar (kb)" name="size"/> <scroll_list.columns label="URL" name="urls"/> - <scroll_list.columns label="Nazwa Obiektu" name="name"/> + <scroll_list.columns label="Nazwa obiektu" name="name"/> <scroll_list.columns label="Lokalizacja" name="location"/> </scroll_list> <button label="Odśwież listę" name="refresh_list_btn"/> diff --git a/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml index 1419a9c9f6..070f025087 100644 --- a/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml +++ b/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="PAMIĘĆ REGIONU" name="script_limits_region_memory_panel"> <text name="script_memory"> - Pamięć Skryptu Parceli + Pamięć skryptu na posiadłości </text> <text name="loading_text"> Ładowanie... @@ -9,7 +9,7 @@ <scroll_list name="scripts_list"> <scroll_list.columns label="Rozmiar (kb)" name="size"/> <scroll_list.columns label="URL" name="urls"/> - <scroll_list.columns label="Nazwa Obiektu" name="name"/> + <scroll_list.columns label="Nazwa obiektu" name="name"/> <scroll_list.columns label="Właściciel" name="owner"/> <scroll_list.columns label="Parcela" name="parcel"/> <scroll_list.columns label="Lokalizacja" name="location"/> diff --git a/indra/newview/skins/default/xui/pl/panel_side_tray.xml b/indra/newview/skins/default/xui/pl/panel_side_tray.xml index f34fd0e108..ff4ca23a4d 100644 --- a/indra/newview/skins/default/xui/pl/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/pl/panel_side_tray.xml @@ -2,7 +2,7 @@ <!-- Side tray cannot show background because it is always partially on screen to hold tab buttons. --> <side_tray name="sidebar"> - <sidetray_tab description="Przełącz Panel Boczny" name="sidebar_openclose" tab_title="Przełącz Panel Boczny"/> + <sidetray_tab description="Przełącz schowek" name="sidebar_openclose" tab_title="Przełącz schowek"/> <sidetray_tab description="Miejsce Startu." name="sidebar_home" tab_title="Home"> <panel label="miejsce startu" name="panel_home"/> </sidetray_tab> @@ -24,6 +24,6 @@ <panel label="Edytuj Szafę" name="sidepanel_inventory"/> </sidetray_tab> <sidetray_tab description="Zmień swój obecny wygląd i ubranie." name="sidebar_appearance" tab_title="My Appearance"> - <panel label="Edytuj Wygląd" name="sidepanel_appearance"/> + <panel label="Edytuj wygląd" name="sidepanel_appearance"/> </sidetray_tab> </side_tray> diff --git a/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml index 0f99f3911c..9f7f7f1238 100644 --- a/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml +++ b/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!-- Width and height of this panel should be synchronized with "panel_modes" in the floater_moveview.xml--> <panel name="panel_stand_stop_flying"> - <button label="Wstań" name="stand_btn" tool_tip="Kliknij tutaj by wstać."/> + <button label="Wstań" name="stand_btn" tool_tip="Kliknij tutaj aby wstać."/> <button label="Zatrzymaj latanie" name="stop_fly_btn" tool_tip="Zatrzymaj latanie"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_status_bar.xml b/indra/newview/skins/default/xui/pl/panel_status_bar.xml index 241848c280..5e97dd8961 100644 --- a/indra/newview/skins/default/xui/pl/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/pl/panel_status_bar.xml @@ -25,9 +25,9 @@ <text name="balance" tool_tip="Mój bilans" value="L$20"/> <button label="Kup L$" name="buyL" tool_tip="Kliknij aby kupić więcej L$"/> </panel> - <text name="TimeText" tool_tip="Obecny Czas (Pacyficzny)"> + <text name="TimeText" tool_tip="Obecny czas (Pacyficzny)"> 24:00 AM PST </text> - <button name="media_toggle_btn" tool_tip="Start/Stop Wszystkie Media (Muzyka, Video, WWW)"/> - <button name="volume_btn" tool_tip="Regulacja Głośności"/> + <button name="media_toggle_btn" tool_tip="Start/Stop wszystkie media (Muzyka, Video, WWW)"/> + <button name="volume_btn" tool_tip="Regulacja głośności"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_teleport_history.xml b/indra/newview/skins/default/xui/pl/panel_teleport_history.xml index d143843eaf..b43bd96536 100644 --- a/indra/newview/skins/default/xui/pl/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/pl/panel_teleport_history.xml @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="Teleport History"> <accordion name="history_accordion"> + <no_matched_tabs_text name="no_matched_teleports_msg" value="Nie znaleziono tego czego szukasz? Spróbuj [secondlife:///app/search/places/[SEARCH_TERM] Szukaj]."/> + <no_visible_tabs_text name="no_teleports_msg" value="Historia teleportacji jest pusta. Spróbuj [secondlife:///app/search/places/ Szukaj]."/> <accordion_tab name="today" title="Dzisiaj"/> <accordion_tab name="yesterday" title="Wczoraj"/> <accordion_tab name="2_days_ago" title="2 dni temu"/> - 5 <accordion_tab name="3_days_ago" title="3 dni temu"/> <accordion_tab name="4_days_ago" title="4 dni temu"/> <accordion_tab name="5_days_ago" title="5 dni temu"/> diff --git a/indra/newview/skins/default/xui/pl/role_actions.xml b/indra/newview/skins/default/xui/pl/role_actions.xml index ccfa5f222e..53530fff5e 100644 --- a/indra/newview/skins/default/xui/pl/role_actions.xml +++ b/indra/newview/skins/default/xui/pl/role_actions.xml @@ -1,27 +1,27 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <role_actions> - <action_set description="Przywileje pozwajające na dodawanie i usuwanie Członków oraz pozwalają nowym Członkom na dodawanie się bez zaproszenia." name="Membership"> - <action description="Zapraszanie do Grupy" longdescription="Zapraszanie nowych Ludzi do Grupy używając przycisku 'Zaproś' w sekcji Ról > Członkowie" name="member invite"/> - <action description="Usuwanie z Grupy" longdescription="Usuwanie Członków z Grupy używając 'Usuń z Grupy'; pod Członkowie > Członkowie. Właściciel może usunąć każdego za wyjątkiem innego Właściciela. Jeżeli nie jesteś Właścicielem możesz tylko usuwać Członków w Funkcji Każdy i tylko wtedy kiedy nie mają żadnej innej Funkcji. Aby odebrać Członkowi Funkcję musisz mieć Przywilej 'Odbieranie Funkcji'." name="member eject"/> + <action_set description="Przywileje pozwajające na dodawanie i usuwanie członków oraz pozwalają nowym członkom na dodawanie się bez zaproszenia." name="Membership"> + <action description="Zapraszanie do grupy" longdescription="Zapraszanie nowych ludzi do grupy używając przycisku 'Zaproś' w sekcji Ról > Członkowie" name="member invite"/> + <action description="Usuwanie z grupy" longdescription="Usuwanie członków z grupy używając 'Usuń z Grupy'; pod Członkowie > Członkowie. Właściciel może usunąć każdego za wyjątkiem innego Właściciela. Jeżeli nie jesteś Właścicielem możesz tylko usuwać Członków w Funkcji Każdy i tylko wtedy kiedy nie mają żadnej innej Funkcji. Aby odebrać Członkowi Funkcję musisz mieć Przywilej 'Odbieranie Funkcji'." name="member eject"/> <action description="Selekcja opcji 'Wolne Zapisy' i wybór 'Opłaty Wstępnej'" longdescription="Selekcja opcji 'Wolne Zapisy' (pozwala nowym Członkom na dodawanie się bez zaproszenia) i wybór 'Opłaty Wstępnej' w Ustawieniach Grupy w sekcji Ogólne." name="member options"/> </action_set> - <action_set description="Przywileje pozwalające na dodawanie, usuwanie i edycję Funkcji w Grupie, oraz na nadawanie i odbieranie Funkcji, oraz na przypisywanie Przywilejów do Funkcji." name="Roles"> - <action description="Dodawanie Funkcji" longdescription="Dodawanie nowych Funkcji pod Członkowie > Funkcje." name="role create"/> - <action description="Usuwanie Funkcji" longdescription="Usuń Funkcje w zakładce Funkcje > Funkcje" name="role delete"/> - <action description="Zmiany nazw Funkcji, Tytułów i Opisów i widoczność Członków w Informacjach o Grupie" longdescription="Zmiany nazw Funkcji, Tytułów i Opisów i wybór czy Członkowie z daną Rolą są widoczni Informacji o Grupie w dolnej części sekcji Funkcji > Funkcje po wybraniu Funkcje." name="role properties"/> - <action description="Przypisywanie Członków do posiadanych Funkcji" longdescription="Przypisywanie Członków do Funkcji w sekcji Przypisane Funkcje pod Członkowie > Członkowie. Członek z tym Przywilejem może dodawać Członków do Funkcji które sam już posiada." name="role assign member limited"/> - <action description="Przypisywanie Członków do wszystkich Funkcji" longdescription="Przypisywanie Członków do wszystkich Funkcji w sekcji Przypisane Funkcje pod Członkowie > Członkowie. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać siebie i innych Członków nie będących Właścicielami do Funkcji dających więcej Przywilejów niż posiadane obecnie potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role assign member"/> - <action description="Odbieranie Funkcji" longdescription="Odbieranie Funkcji w sekcji Przypisane Funkcje pod Członkowie > Członkowie. Funkcja Właściciela nie może być odebrana." name="role remove member"/> - <action description="Dodawanie i Usuwanie Przywilejów z Funkcji" longdescription="Dodawanie i Usuwanie Przywilejów z Funkcji w sekcji Przwileje pod Członkowie > Funkcje. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać sobie i innym Członkom nie będącym Właścicielami wszystkie Przywileje potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role change actions"/> + <action_set description="Przywileje pozwalające na dodawanie, usuwanie i edycję funkcji w grupie, oraz na nadawanie i odbieranie funkcji, oraz na przypisywanie Przywilejów do Funkcji." name="Roles"> + <action description="Dodawanie funkcji" longdescription="Dodawanie nowych funkcji pod Członkowie > Funkcje." name="role create"/> + <action description="Usuwanie funkcji" longdescription="Usuń Funkcje w zakładce Funkcje > Funkcje" name="role delete"/> + <action description="Zmiany nazw funkcji, tytułów i opisów i widoczność członków w informacjach o grupie" longdescription="Zmiany nazw Funkcji, Tytułów i Opisów i wybór czy Członkowie z daną Rolą są widoczni Informacji o Grupie w dolnej części sekcji Funkcji > Funkcje po wybraniu Funkcje." name="role properties"/> + <action description="Przypisywanie członków do posiadanych funkcji" longdescription="Przypisywanie Członków do Funkcji w sekcji Przypisane Funkcje pod Członkowie > Członkowie. Członek z tym Przywilejem może dodawać Członków do Funkcji które sam już posiada." name="role assign member limited"/> + <action description="Przypisywanie członków do wszystkich funkcji" longdescription="Przypisywanie Członków do wszystkich Funkcji w sekcji Przypisane Funkcje pod Członkowie > Członkowie. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać siebie i innych Członków nie będących Właścicielami do Funkcji dających więcej Przywilejów niż posiadane obecnie potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role assign member"/> + <action description="Odbieranie funkcji" longdescription="Odbieranie Funkcji w sekcji Przypisane Funkcje pod Członkowie > Członkowie. Funkcja Właściciela nie może być odebrana." name="role remove member"/> + <action description="Dodawanie i usuwanie przywilejów z funkcji" longdescription="Dodawanie i Usuwanie Przywilejów z Funkcji w sekcji Przwileje pod Członkowie > Funkcje. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać sobie i innym Członkom nie będącym Właścicielami wszystkie Przywileje potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role change actions"/> </action_set> <action_set description="Przywileje pozwalające na edycję atrybutów Grupy takich jak widoczność w wyszukiwarce, status i insygnia." name="Group Identity"> - <action description="Zmiany Statusu Grupy, Insygniów, 'Widoczność w Wyszukiwarce' i widoczność Członków w Informacjach o Grupie." longdescription="Zmiany Statusu Grupy, Insygniów, i Widoczność w Wyszukiwarce. Dostęp poprzez ustawienia Ogólne." name="group change identity"/> + <action description="Zmiany statusu grupy, insygniów, 'Widoczność w Wyszukiwarce' i widoczność Członków w Informacjach o Grupie." longdescription="Zmiany Statusu Grupy, Insygniów, i Widoczność w Wyszukiwarce. Dostęp poprzez ustawienia Ogólne." name="group change identity"/> </action_set> - <action_set description="Przywileje pozwalające na przypisywanie, modyfikacje i sprzedaż Posiadłości Grupy. Aby zobaczyć okno O Posiadłości wybierz grunt prawym klawiszem myszki i wybierz 'O Posiadłości' albo wybierz ikonę 'i' w głównym menu." name="Parcel Management"> - <action description="Przypisywanie i kupowanie Posiadłości dla Grupy" longdescription="Przypisywanie i kupowanie Posiadłości dla Grupy. Dostęp poprzez O Posiadlości > ustawienia Ogólne." name="land deed"/> - <action description="Oddawanie Posiadłości do Linden Lab" longdescription="Oddawanie Posiadłości do Linden Lab. *UWAGA* Członek w Funkcji z tym Przywilejem może porzucać Posiadlości Grupy poprzez O Posiadlości > ustawienia Ogólne oddając Posiadłości za darmo do Linden Labs! Udzielaj tego Przywileju z rozwagą." name="land release"/> - <action description="Sprzedaż Posiadłości" longdescription="Sprzedaż Posiadłości. *UWAGA* Członek w Funkcji z tym Przywilejem może sprzedawać Posiadlości Grupy poprzez O Posiadlości > ustawienia Ogólne! Udzielaj tego Przywileju z rozwagą." name="land set sale info"/> - <action description="Podział i Łączenie Posiadłości" longdescription="Podział i Łączenie Posiadłości. Dostęp poprzez wybranie gruntu prawym klawiszem myszki, 'Edycja Terenu', i przesuwanie myszką po gruncie wybierając obszar. Aby podzielić wybierz obszar i naciśnij 'Podziel'. Aby połączyć wybierz dwie albo więcej sąsiadujące Posiadłości i naciśnij 'Połącz'." name="land divide join"/> + <action_set description="Przywileje pozwalające na przypisywanie, modyfikacje i sprzedaż posiadłości grupy. Aby zobaczyć okno O Posiadłości wybierz grunt prawym klawiszem myszki i wybierz 'O Posiadłości' albo wybierz ikonę 'i' w głównym menu." name="Parcel Management"> + <action description="Przypisywanie i kupowanie posiadłości dla grupy" longdescription="Przypisywanie i kupowanie Posiadłości dla Grupy. Dostęp poprzez O Posiadlości > ustawienia Ogólne." name="land deed"/> + <action description="Oddawanie posiadłości do Linden Lab" longdescription="Oddawanie Posiadłości do Linden Lab. *UWAGA* Członek w Funkcji z tym Przywilejem może porzucać Posiadlości Grupy poprzez O Posiadlości > ustawienia Ogólne oddając Posiadłości za darmo do Linden Labs! Udzielaj tego Przywileju z rozwagą." name="land release"/> + <action description="Sprzedaż posiadłości" longdescription="Sprzedaż Posiadłości. *UWAGA* Członek w Funkcji z tym Przywilejem może sprzedawać Posiadlości Grupy poprzez O Posiadlości > ustawienia Ogólne! Udzielaj tego Przywileju z rozwagą." name="land set sale info"/> + <action description="Podział i łączenie posiadłości" longdescription="Podział i Łączenie Posiadłości. Dostęp poprzez wybranie gruntu prawym klawiszem myszki, 'Edycja Terenu', i przesuwanie myszką po gruncie wybierając obszar. Aby podzielić wybierz obszar i naciśnij 'Podziel'. Aby połączyć wybierz dwie albo więcej sąsiadujące Posiadłości i naciśnij 'Połącz'." name="land divide join"/> </action_set> <action_set description="Przywileje pozwalające na zmianę nazwy Posiadłości, widoczność w wyszukiwarce, widoczność w wyszukiwarce, wybór miejsce lądowania i zmianę ustawień teleportacji (TP)." name="Parcel Identity"> <action description="Selekcja opcji 'Pokazuj w szukaniu miejsc' i wybór kategorii" longdescription="Selekcja opcji 'Pokazuj w szukaniu miejsc' i wybór kategorii Posiadłości pod O Posiadłości > Opcje." name="land find places"/> @@ -33,44 +33,44 @@ <action description="Selekcja opcji 'Edycja Terenu'" longdescription="Selekcja opcji 'Edycja Terenu'. *UWAGA* O Posiadłości > Opcje > Edycja Terenu pozwala każdemu na formowanie gruntów Twojej Posiadłości oraz na przemieszczanie roślin z Linden Labs. Udzielaj tego Przywileju z rozwagą. Selekcja opcji Edycji Terenu jest dostępna poprzez O Posiadłości > Opcje." name="land edit"/> <action description="Dodatkowe ustawienia O Posiadłości > Opcje" longdescription="Selekcja opcji 'Bezpieczeństwo (brak uszkodzeń)' 'Latanie', opcje dla innych Rezydentów: 'Tworzenie Obiektów'; 'Edycja Terenu', 'Zapamiętywanie Miejsca (LM)', i 'Skrypty' na Posiadłościach Grupy pod O Posiadłości > Opcje." name="land options"/> </action_set> - <action_set description="Przywileje pozwalające Członkom na omijanie ograniczeń na Posiadłościach Grupy." name="Parcel Powers"> - <action description="Pozwól na Edycję Terenu" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze edytować teren na Posiadłościach Grupy." name="land allow edit land"/> - <action description="Pozwól na Latanie" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze latać na Posiadłościach Grupy." name="land allow fly"/> - <action description="Pozwól na Tworzenie Obiektów" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze tworzyć obiekty na Posiadłościach Grupy." name="land allow create"/> - <action description="Pozwól na Zapamiętywanie Miejsc (LM)" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze zapamiętywać miejsca (LM) na Posiadłościach Grupy." name="land allow landmark"/> - <action description="Pozwól na wybór Miejsca Startu na Posiadłościach Grupy" longdescription="Członkowie w Funkcji z tym Przywilejem mogą używać menu Świat > Zapamiętaj Miejsce > Miejsce Startu na Posiadłości przypisanej Grupie." name="land allow set home"/> + <action_set description="Przywileje pozwalające członkom na omijanie ograniczeń na Posiadłościach Grupy." name="Parcel Powers"> + <action description="Pozwól na edycję terenu" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze edytować teren na Posiadłościach Grupy." name="land allow edit land"/> + <action description="Pozwól na latanie" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze latać na Posiadłościach Grupy." name="land allow fly"/> + <action description="Pozwól na tworzenie obiektów" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze tworzyć obiekty na Posiadłościach Grupy." name="land allow create"/> + <action description="Pozwól na zapamiętywanie miejsc (LM)" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze zapamiętywać miejsca (LM) na Posiadłościach Grupy." name="land allow landmark"/> + <action description="Pozwól na wybór Miejsca Startu na posiadłościach grupy" longdescription="Członkowie w Funkcji z tym Przywilejem mogą używać menu Świat > Zapamiętaj Miejsce > Miejsce Startu na Posiadłości przypisanej Grupie." name="land allow set home"/> </action_set> <action_set description="Przywileje pozwalające na dawanie i odbieranie dostępu do Posiadłości Grupy zawierające możliwości unieruchomiania i wyrzucania Rezydentów." name="Parcel Access"> - <action description="Zarządzanie Listą Dostępu do Posiadłości" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości > Dostęp." name="land manage allowed"/> - <action description="Zarządzanie Listą Usuniętych z Posiadłości (Bany)" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości > Dostęp." name="land manage banned"/> + <action description="Zarządzanie listą dostępu do posiadłości" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości > Dostęp." name="land manage allowed"/> + <action description="Zarządzanie listą usuniętych z posiadłości (Bany)" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości > Dostęp." name="land manage banned"/> <action description="Selekcja opcji 'Wstęp Płatny'" longdescription="Selekcja opcji 'Wstęp Płatny'; pod O Posiadłości > Dostęp." name="land manage passes"/> - <action description="Wyrzucanie i unieruchamianie Rezydentów na Posiadłościach" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wpływać na niepożądanych na Posiadłościach Grupy Rezydentów wybierając ich prawym klawiszem myszki i wybierając ';Wyrzuć' albo 'Unieruchom'." name="land admin"/> + <action description="Wyrzucanie i unieruchamianie Rezydentów na posiadłościach" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wpływać na niepożądanych na Posiadłościach Grupy Rezydentów wybierając ich prawym klawiszem myszki i wybierając ';Wyrzuć' albo 'Unieruchom'." name="land admin"/> </action_set> <action_set description="Przywileje pozwalające na odsyłanie obiektów i przemieszczanie roślin z Linden Lab. Użyteczne przy porządkowaniu i przemieszczaniu roślinności. *UWAGA* Odsyłanie obiektów jest nieodwracalne." name="Parcel Content"> - <action description="Odsyłanie obiektów należących do Grupy" longdescription="Odsyłanie obiektów należących do Grupy pod O Posiadłości > Obiekty." name="land return group owned"/> - <action description="Odsyłanie obiektów przypisanych do Grupy" longdescription="Odsyłanie obiektów przypisanych do Grupy pod O Posiadłości > Obiekty." name="land return group set"/> - <action description="Odsyłanie obiektów nie przypisanych do Grupy" longdescription="Odsyłanie obiektów nie przypisanych do Grupy pod O Posiadłości > Obiekty." name="land return non group"/> + <action description="Odsyłanie obiektów należących do grupy" longdescription="Odsyłanie obiektów należących do Grupy pod O Posiadłości > Obiekty." name="land return group owned"/> + <action description="Odsyłanie obiektów przypisanych do grupy" longdescription="Odsyłanie obiektów przypisanych do Grupy pod O Posiadłości > Obiekty." name="land return group set"/> + <action description="Odsyłanie obiektów nie przypisanych do grupy" longdescription="Odsyłanie obiektów nie przypisanych do Grupy pod O Posiadłości > Obiekty." name="land return non group"/> <action description="Ogrodnictwo używając roślin z Linden Lab" longdescription="Możliwość przemieszczenia roślin z Linden Lab. Obiekty te mogą zostać odnalezione w Twojej Szafie, w folderze Biblioteka > Folderze Obiektów lub mogą zostać stworzone dzięki aktywacji Narzędzi Edycji." name="land gardening"/> </action_set> <action_set description="Przywileje pozwalające na odsyłanie obiektów i przemieszczenia roślin z Linden Lab. Użyteczne przy porządkowaniu i przemieszczenia roślinności. *UWAGA* Odsyłanie obiektów jest nieodwracalne." name="Object Management"> - <action description="Przypisywanie obiektów do Grupy" longdescription="Przypisywanie obiektów do Grupy w Narzędziach Edycji > Ogólne" name="object deed"/> + <action description="Przypisywanie obiektów do grupy" longdescription="Przypisywanie obiektów do Grupy w Narzędziach Edycji > Ogólne" name="object deed"/> <action description="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy" longdescription="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy w Narzędziach Edycji > Ogólne" name="object manipulate"/> - <action description="Sprzedaż obiektów należących do Grupy" longdescription="Sprzedaż obiektów należących do Grupy pod Narzędzia Edycji > Ogólne." name="object set sale"/> + <action description="Sprzedaż obiektów należących do grupy" longdescription="Sprzedaż obiektów należących do Grupy pod Narzędzia Edycji > Ogólne." name="object set sale"/> </action_set> <action_set description="Przywileje pozwalające na wybór opłat grupowych, otrzymywanie dochodu i ograniczanie dostępu do historii konta grupy." name="Accounting"> <action description="Opłaty grupowe i dochód grupowy" longdescription="Członkowie w Funkcji z tym Przywilejem będą automatycznie wnosić opłaty grupowe i będą otrzymywać dochód grupowy. Tzn. będą codziennie otrzymywać część dochodu ze sprzedaży Posiadłości Grupy oraz będą partycypować w kosztach ogłoszeń itp." name="accounting accountable"/> </action_set> <action_set description="Przywileje pozwalające na wysyłanie, odbieranie i czytanie Notek Grupy." name="Notices"> - <action description="Wysyłanie Notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wysyłać Notki wybierając O Grupie > Notek." name="notices send"/> - <action description="Odbieranie Notek i dostęp do dawniejszych Notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą odbierać nowe i czytać dawniejsze Notki wybierając O Grupie > Notki." name="notices receive"/> + <action description="Wysyłanie notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wysyłać Notki wybierając O Grupie > Notek." name="notices send"/> + <action description="Odbieranie notek i dostęp do dawniejszych notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą odbierać nowe i czytać dawniejsze Notki wybierając O Grupie > Notki." name="notices receive"/> </action_set> <action_set description="Przywileje pozwalające na zgłaszanie Propozycji, głosowanie nad Propozycjami i śledzenie historii głosowania." name="Proposals"> - <action description="Zgłaszanie Propozycji" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zgłaszać Propozycje do głosowania wybierając O Grupie > Propozycje." name="proposal start"/> - <action description="Głosowanie nad Propozycjami" longdescription="Członkowie w Funkcji z tym Przywilejem mogą głosować nad Propozycjami zgłoszonymi do głosowania wybierając O Grupie > Propozycje." name="proposal vote"/> + <action description="Zgłaszanie propozycji" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zgłaszać Propozycje do głosowania wybierając O Grupie > Propozycje." name="proposal start"/> + <action description="Głosowanie nad propozycjami" longdescription="Członkowie w Funkcji z tym Przywilejem mogą głosować nad Propozycjami zgłoszonymi do głosowania wybierając O Grupie > Propozycje." name="proposal vote"/> </action_set> <action_set description="Przywileje kontrolujące czat i rozmowy grupowe." name="Chat"> - <action description="Dostęp do Czatu Grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w czacie i rozmowach grupowych." name="join group chat"/> - <action description="Dostęp do Rozmów Grupowych" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w rozmowach grupowych. UWAGA: Dostęp do Czatu Grupowego jest wymagany dla rozmów grupowych." name="join voice chat"/> - <action description="Moderator Czatu Grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą kontrolować dostęp do czatu i rozmów grupowych." name="moderate group chat"/> + <action description="Dostęp do czatu grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w czacie i rozmowach grupowych." name="join group chat"/> + <action description="Dostęp do rozmów grupowych" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w rozmowach grupowych. UWAGA: Dostęp do Czatu Grupowego jest wymagany dla rozmów grupowych." name="join voice chat"/> + <action description="Moderator czatu grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą kontrolować dostęp do czatu i rozmów grupowych." name="moderate group chat"/> </action_set> </role_actions> diff --git a/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml b/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml index 2fc07aaaca..cea903769c 100644 --- a/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Ubrania" name="appearance panel"> - <string name="No Outfit" value="Bez Ubrania"/> + <string name="No Outfit" value="Bez stroju"/> <string name="Unsaved Changes" value="Zmiany niezachowane"/> <string name="Now Wearing" value="Obecnie założone..."/> <string name="Changing outfits" value="Zmiana stroju"/> @@ -12,5 +12,5 @@ </text> <button label="" name="edit_outfit_btn" tool_tip="Edytuj ten strój"/> </panel> - <filter_editor label="Przeglądaj Ubrania" name="Filter"/> + <filter_editor label="Przeglądaj stroje" name="Filter"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml index 2f43e0c215..e39bbd75c5 100644 --- a/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml @@ -23,7 +23,7 @@ </panel.string> <text name="title" value="Profil obiektu"/> <text name="origin" value="(Szafa)"/> - <panel label=""> + <panel label="" name="item_profile"> <text name="LabelItemNameTitle"> Nazwa: </text> @@ -44,10 +44,10 @@ <text name="LabelAcquiredDate"/> <panel name="perms_inv"> <text name="perm_modify"> - Ty możesz: + Możesz: </text> <check_box label="Zmienia" name="CheckOwnerModify"/> - <check_box label="Kopiuje" name="CheckOwnerCopy"/> + <check_box label="Kopiuj" name="CheckOwnerCopy"/> <check_box label="Sprzedaje/Oddaje" name="CheckOwnerTransfer"/> <text name="AnyoneLabel"> Każdy: @@ -56,18 +56,18 @@ <text name="GroupLabel"> Grupa: </text> - <check_box label="Udostępnij" name="CheckShareWithGroup" tool_tip="Pozwól wszystkim członkom ustawionej grupy na dzielenie prawa do modyfikacji dla tego obiektu. Musisz Przypisać aby aktywować ograniczenia wynikające z roli."/> + <check_box label="Udostępnij" name="CheckShareWithGroup" tool_tip="Pozwól wszystkim członkom ustawionej grupy na dzielenie prawa do modyfikacji dla tego obiektu. Musisz przypisać obiekt grupie aby aktywować ograniczenia wynikające z roli."/> <text name="NextOwnerLabel"> - Następny Właściciel: + Następny właściciel: </text> <check_box label="Modyfikuje" name="CheckNextOwnerModify"/> <check_box label="Kopiuje" name="CheckNextOwnerCopy"/> - <check_box label="Sprzedaje/Oddaje" name="CheckNextOwnerTransfer" tool_tip="Następny właściciel może oddać lub sprzedać ten obiekt"/> + <check_box label="Sprzedaje/Oddaje" name="CheckNextOwnerTransfer" tool_tip="Następny właściciel może oddawać lub sprzedawać ten obiekt"/> </panel> - <check_box label="Na Sprzedaż" name="CheckPurchase"/> + <check_box label="Na sprzedaż" name="CheckPurchase"/> <combo_box name="combobox sale copy"> - <combo_box.item label="Kopia" name="Copy"/> - <combo_box.item label="Originał" name="Original"/> + <combo_box.item label="Kopiuje" name="Copy"/> + <combo_box.item label="Oryginalny" name="Original"/> </combo_box> <spinner label="Cena: L$" name="Edit Cost"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml index 84b5471e49..d8cf456c64 100644 --- a/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml @@ -83,7 +83,7 @@ <check_box label="Kopiuj" name="checkbox allow everyone copy"/> <check_box label="Przesuń" name="checkbox allow everyone move"/> <text name="GroupLabel"> - Groupie: + Grupie: </text> <check_box label="Udostępnij" name="checkbox share with group" tool_tip="Udostępnij prawa do modyfikacji tego obiektu wszystkim członkom, którzy posiadają przywilej modyfikacji obiektów grupy. By ograniczyć, przypisz obiekt do grupy."/> <text name="NextOwnerLabel"> diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml index 4a21b1447b..e2689720bf 100644 --- a/indra/newview/skins/default/xui/pl/strings.xml +++ b/indra/newview/skins/default/xui/pl/strings.xml @@ -50,7 +50,7 @@ Ładowanie świata... </string> <string name="LoginInitializingBrowser"> - Inicjalizacja Przeglądarki Internetu... + Inicjalizacja przeglądarki internetowej... </string> <string name="LoginInitializingMultimedia"> Inicjalizacja multimediów... @@ -62,22 +62,22 @@ Weryfikacja bufora danych na dysku (może trwać od 60 do 90 sekund)... </string> <string name="LoginProcessingResponse"> - Przetwarzanie Odpowiedzi... + Przetwarzanie odpowiedzi... </string> <string name="LoginInitializingWorld"> - Inicjalizacja świata... + Inicjacja świata... </string> <string name="LoginDecodingImages"> Przetwarzanie obrazów... </string> <string name="LoginInitializingQuicktime"> - Inicjalizacja QuickTime... + Inicjacja QuickTime... </string> <string name="LoginQuicktimeNotFound"> - QuickTime nie został znaleziony - inicjalizacja przerwana. + QuickTime nie został znaleziony - inicjacja przerwana. </string> <string name="LoginQuicktimeOK"> - QuickTime zainicjalizowany. + QuickTime zainicjowany. </string> <string name="LoginWaitingForRegionHandshake"> Oczekiwanie na połączenie z regionem... @@ -113,7 +113,7 @@ Logowanie nie powiodło się. </string> <string name="Quit"> - Wyłącz Program + Wyłącz program </string> <string name="AgentLostConnection"> Ten region może mieć problemy. Sprawdź podłączenie do Internetu. @@ -152,28 +152,28 @@ (Grupa) </string> <string name="TooltipForSaleL$"> - Na Sprzedaż: L$[AMOUNT] + Na sprzedaż: L$[AMOUNT] </string> <string name="TooltipFlagGroupBuild"> - Budowanie Grupowe + Budowanie grupowe </string> <string name="TooltipFlagNoBuild"> - Budowanie Zabronione + Budowanie zabronione </string> <string name="TooltipFlagNoEdit"> - Edycja Zabroniona + Edycja zabroniona </string> <string name="TooltipFlagNotSafe"> - Niebezpieczny Obszar + Niebezpieczny obszar </string> <string name="TooltipFlagNoFly"> - Latanie Zabronione + Latanie zabronione </string> <string name="TooltipFlagGroupScripts"> - Skrypty Grupowe + Skrypty grupowe </string> <string name="TooltipFlagNoScripts"> - Skrypty Zabronione + Skrypty zabronione </string> <string name="TooltipLand"> Posiadłość: @@ -181,11 +181,12 @@ <string name="TooltipMustSingleDrop"> Tylko pojedynczy obiekt może być tutaj przeciągnięty </string> + <string name="TooltipPrice" value="L$[AMOUNT]:"/> <string name="TooltipHttpUrl"> - Kliknij by zobaczyć zawartość tej strony internetowej + Kliknij aby zobaczyć zawartość tej strony internetowej </string> <string name="TooltipSLURL"> - Kliknij by zobaczyć szczegóły tego miejsca + Kliknij aby zobaczyć szczegóły tego miejsca </string> <string name="TooltipAgentUrl"> Kliknij aby zobaczyc profil Rezydenta @@ -209,36 +210,35 @@ Kliknij aby wysłać temu Rezydentowi zaproszenie do Znajomych </string> <string name="TooltipGroupUrl"> - Kliknij by zobaczyć opis tej grupy + Kliknij aby zobaczyć opis tej grupy </string> <string name="TooltipEventUrl"> - Klinij by zobaczyć szczegóły tego wydarzenia + Klinij aby zobaczyć szczegóły tego wydarzenia </string> <string name="TooltipClassifiedUrl"> - Kliknij by zobaczyć tę reklamę + Kliknij aby zobaczyć tę reklamę </string> <string name="TooltipParcelUrl"> - Kliknij by zobaczyć opis tej posiadłości + Kliknij aby zobaczyć opis tej posiadłości </string> <string name="TooltipTeleportUrl"> - Kliknij by teleportować się do tego miejsca + Kliknij aby teleportować się do tego miejsca </string> <string name="TooltipObjectIMUrl"> - Kliknij by zobaczyć opis tego obiektu + Kliknij aby zobaczyć opis tego obiektu </string> <string name="TooltipMapUrl"> - Kliknij by zobaczyć to miejsce na mapie + Kliknij aby zobaczyć to miejsce na mapie </string> <string name="TooltipSLAPP"> - Kliknij by uruchomić secondlife:// command + Kliknij aby uruchomić secondlife:// command </string> <string name="CurrentURL" value=" Obecny Adres: [CurrentURL]"/> - <string name="TooltipPrice" value="L$[AMOUNT]: "/> <string name="SLurlLabelTeleport"> Teleportuj do </string> <string name="SLurlLabelShowOnMap"> - Pokaż na Mapie + Pokaż na mapie </string> <string name="SLappAgentMute"> Zablokuj @@ -286,13 +286,13 @@ Wyszukiwanie... </string> <string name="NoneFound"> - Nieodnaleziono. + Nie odnaleziono. </string> <string name="RetrievingData"> Odzyskiwanie danych... </string> <string name="ReleaseNotes"> - O Tej Wersji + O tej wersji </string> <string name="RELEASE_NOTES_BASE_URL"> http://wiki.secondlife.com/wiki/Release_Notes/ @@ -310,7 +310,7 @@ (brak danych) </string> <string name="AvalineCaller"> - Avaline Caller [ORDER] + Avaline [ORDER] </string> <string name="AssetErrorNone"> OK @@ -322,7 +322,7 @@ Pobieranie danych: brak pliku </string> <string name="AssetErrorNotInDatabase"> - Pobieranie danych: dane nie znalezione w bazie danych + Pobieranie danych: dane nie zostały znalezione w bazie danych </string> <string name="AssetErrorEOF"> Koniec pliku @@ -364,22 +364,22 @@ ubrania </string> <string name="object"> - obieku + obiek </string> <string name="note card"> notatki </string> <string name="folder"> - folderu + folder </string> <string name="root"> podstawy </string> <string name="lsl2 script"> - skryptu LSL2 + skrypt LSL2 </string> <string name="lsl bytecode"> - kodu LSL + kod LSL </string> <string name="tga texture"> tekstury typu tga @@ -391,22 +391,22 @@ zdjęcia </string> <string name="lost and found"> - Zgubione i Odnalezione + Zgubione i odnalezione </string> <string name="targa image"> - obrau typu targa + obraz typu targa </string> <string name="trash"> Kosz </string> <string name="jpeg image"> - obrazu typu jpeg + obraz typu jpg </string> <string name="animation"> - animacji + animacja </string> <string name="gesture"> - gesturki + gesturka </string> <string name="simstate"> simstate @@ -442,16 +442,16 @@ Salto </string> <string name="anim_express_laugh"> - Śmiech do Rozpuku + Śmiech do rozpuku </string> <string name="anim_express_toothsmile"> - Wielki Uśmiech + Wielki uśmiech </string> <string name="anim_blowkiss"> Całusek </string> <string name="anim_express_bored"> - Ale Nudy! + Ale nudy! </string> <string name="anim_bow"> Ukłon @@ -460,7 +460,7 @@ Oklaski </string> <string name="anim_courtbow"> - Dworski Ukłon + Dworski ukłon </string> <string name="anim_express_cry"> Płacz @@ -499,10 +499,10 @@ Zakłopotanie </string> <string name="anim_angry_fingerwag"> - Grożenie Paluszkiem + Grożenie paluszkiem </string> <string name="anim_fist_pump"> - Udało sie! + Udało się! </string> <string name="anim_yoga_float"> Yoga @@ -517,7 +517,7 @@ Radocha </string> <string name="anim_kissmybutt"> - Pocałuj Mnie Gdzieś + Pocałuj mnie gdzieś </string> <string name="anim_express_kiss"> Pocałunek @@ -538,40 +538,40 @@ Nie-nie-nie </string> <string name="anim_punch_onetwo"> - Za Ciosem Cios + Za ciosem cios </string> <string name="anim_express_open_mouth"> - Szczęka Opada + Szczęka opada </string> <string name="anim_peace"> Pokój </string> <string name="anim_point_you"> - Wskazuj na Innych + Wskazuj na innych </string> <string name="anim_point_me"> - Wskazuj na Siebie + Wskazuj na siebie </string> <string name="anim_punch_l"> - Uderz z Lewej + Uderz z lewej </string> <string name="anim_punch_r"> - Uderz z Prawej + Uderz z prawej </string> <string name="anim_rps_countdown"> - KPN Licz + KPN licz </string> <string name="anim_rps_paper"> - KPN Papier + KPN papier </string> <string name="anim_rps_rock"> - KPN Kamień + KPN kamień </string> <string name="anim_rps_scissors"> - KPN Nożyce + KPN nożyce </string> <string name="anim_express_repulsed"> - Odrzuca Mnie + Odrzuca mnie </string> <string name="anim_kick_roundhouse_r"> Kopniak @@ -586,7 +586,7 @@ Krzycz </string> <string name="anim_express_shrug"> - Wzrusz Ramionami + Wzrusz ramionami </string> <string name="anim_express_smile"> Uśmiechaj się @@ -595,22 +595,22 @@ Pal </string> <string name="anim_smoke_inhale"> - Pal i Zaciągaj się + Pal i zaciągaj się </string> <string name="anim_smoke_throw_down"> - Rzuć Papierosa + Rzuć papierosa </string> <string name="anim_express_surprise"> Zaskoczenie </string> <string name="anim_sword_strike_r"> - Uderz Mieczem + Uderz mieczem </string> <string name="anim_angry_tantrum"> Wściekłość </string> <string name="anim_express_tongue_out"> - Pokaż Język + Pokaż język </string> <string name="anim_hello"> Pomachaj @@ -622,10 +622,10 @@ Zagwiżdż </string> <string name="anim_express_wink"> - Puść Oko + Puść oko </string> <string name="anim_wink_hollywood"> - Puść Oko (Hollywood) + Puść oko (Hollywood) </string> <string name="anim_express_worry"> Zmartwienie @@ -640,10 +640,13 @@ Ładowanie... </string> <string name="worldmap_offline"> - Mapa Świata jest Niedostępna + Mapa Świata jest niedostępna + </string> + <string name="worldmap_item_tooltip_format"> + [AREA] m² L$[PRICE] </string> <string name="worldmap_results_none_found"> - Miejsce Nieodnalezione. + Miejsce nieodnalezione. </string> <string name="Ok"> OK @@ -661,7 +664,7 @@ krzyczy: </string> <string name="ringing"> - Łączenie z rozmowami głosem w świecie... + Łączenie z rozmowami głosem w Świecie... </string> <string name="connected"> Połączenie uzyskane. @@ -700,7 +703,7 @@ Usuń prawo własności (zmień na publiczne) </string> <string name="LinkAndDelink"> - Łącz / odłącz z innymi obiektów + Łącz / rozłącz z innymi obiektami </string> <string name="AddAndRemoveJoints"> Dodaj / usuń połączenia z innymi obiektami @@ -715,10 +718,10 @@ Kontroluj kamerę </string> <string name="SIM_ACCESS_PG"> - 'PG' + 'General' </string> <string name="SIM_ACCESS_MATURE"> - 'Mature' + 'Moderate' </string> <string name="SIM_ACCESS_ADULT"> 'Adult' @@ -739,7 +742,7 @@ Mainland / Region </string> <string name="all_files"> - Wszystkie Pliki + Wszystkie pliki </string> <string name="sound_files"> Dźwięki @@ -757,16 +760,16 @@ Załaduj </string> <string name="targa_image_files"> - Obrazy Targa + Obrazy targa </string> <string name="bitmap_image_files"> - Obrazy Bitmap + Obrazy bitmap </string> <string name="avi_movie_file"> Pliki filmowe AVI </string> <string name="xaf_animation_file"> - Plik Animacji XAF + Plik animacji XAF </string> <string name="xml_file"> Plik XML @@ -775,13 +778,13 @@ Plik RAW </string> <string name="compressed_image_files"> - Obrazy Skomprensowane + Obrazy skomprensowane </string> <string name="load_files"> Załaduj pliki </string> <string name="choose_the_directory"> - Wybierz Katalog + Wybierz katalog </string> <string name="AvatarSetNotAway"> Ustaw Nie Śpij @@ -835,7 +838,7 @@ Spódnica </string> <string name="alpha"> - Ubranie Przezroczyste + Ubranie Alpha </string> <string name="tattoo"> Tatuaż @@ -847,47 +850,92 @@ żadne </string> <string name="shirt_not_worn"> - Koszula niezałożona + Koszula nie jest założona </string> <string name="pants_not_worn"> - Spodnie niezałożone + Spodnie nie są założone </string> <string name="shoes_not_worn"> - Buty niezałożone + Buty nie są założone </string> <string name="socks_not_worn"> - Skarpetki niezałożone + Skarpetki nie są założone </string> <string name="jacket_not_worn"> - Kurtka niezałożona + Kurtka nie jest założona </string> <string name="gloves_not_worn"> - Rękawiczki niezałożone + Rękawiczki nie są założone </string> <string name="undershirt_not_worn"> - Podkoszulek niezałożony + Podkoszulek nie jest założony </string> <string name="underpants_not_worn"> - Bielizna niezałożona + Bielizna nie jest założona </string> <string name="skirt_not_worn"> - Spódnica niezałożona + Spódnica nie jest założona </string> <string name="alpha_not_worn"> - Alpha niezałożone + Alpha nie jest założone </string> <string name="tattoo_not_worn"> - Tatuaż niezałożony + Tatuaż nie jest założony </string> <string name="invalid_not_worn"> nieważny </string> + <string name="create_new_shape"> + Nowy kształt + </string> + <string name="create_new_skin"> + Nowa skórka + </string> + <string name="create_new_hair"> + Nowe włosy + </string> + <string name="create_new_eyes"> + Nowe oczy + </string> + <string name="create_new_shirt"> + Nowa koszula + </string> + <string name="create_new_pants"> + Nowe spodnie + </string> + <string name="create_new_shoes"> + Nowe buty + </string> + <string name="create_new_socks"> + Nowe skarpetki + </string> + <string name="create_new_jacket"> + Nowa kurtka + </string> + <string name="create_new_gloves"> + Nowe rękawiczki + </string> + <string name="create_new_undershirt"> + Nowy podkoszulek + </string> + <string name="create_new_underpants"> + Nowa bielizna + </string> + <string name="create_new_skirt"> + Nowa spódnica + </string> + <string name="create_new_alpha"> + Nowe alpha + </string> + <string name="create_new_tattoo"> + Nowy tatuaż + </string> + <string name="create_new_invalid"> + nieważny + </string> <string name="NewWearable"> Nowa [WEARABLE_ITEM] </string> - <string name="CreateNewWearable"> - Stwórz [WEARABLE_TYPE] - </string> <string name="next"> Następne </string> @@ -895,10 +943,10 @@ OK </string> <string name="GroupNotifyGroupNotice"> - Ogłoszenie Grupowe + Ogłoszenie grupowe </string> <string name="GroupNotifyGroupNotices"> - Ogłoszenia Grupowe + Ogłoszenia grupowe </string> <string name="GroupNotifySentBy"> Wysłane przez @@ -907,40 +955,40 @@ Załączone: </string> <string name="GroupNotifyViewPastNotices"> - Zobacz poprzednie zawiadomienia lub otrzymanen wiadomości tutaj. + Zobacz poprzednie zawiadomienia lub otrzymane wiadomości tutaj. </string> <string name="GroupNotifyOpenAttachment"> - Otwórz Załącznik + Otwórz załącznik </string> <string name="GroupNotifySaveAttachment"> - Zapisz Załącznik + Zapisz załącznik </string> <string name="TeleportOffer"> Oferta teleportacji </string> <string name="StartUpNotifications"> - Nowe zawiadomienia zostały wysłane kiedy byłeś w trybie oddalenia... + Nowe zawiadomienia zostały wysłane kiedy byłeś/byłaś w trybie oddalenia... </string> <string name="OverflowInfoChannelString"> Masz jeszcze [%d] powiadomień </string> <string name="BodyPartsRightArm"> - Prawe Ramię + Prawe ramię </string> <string name="BodyPartsHead"> Głowa </string> <string name="BodyPartsLeftArm"> - Lewe Ramię + Lewe ramię </string> <string name="BodyPartsLeftLeg"> - Lewa Noga + Lewa noga </string> <string name="BodyPartsTorso"> Tułów </string> <string name="BodyPartsRightLeg"> - Prawa Noga + Prawa noga </string> <string name="GraphicsQualityLow"> Niska @@ -952,7 +1000,7 @@ Wysoka </string> <string name="LeaveMouselook"> - Wybierz ESC by powrócić do trybu widoku normalne + Wybierz ESC aby powrócić do trybu widoku normalnego </string> <string name="InventoryNoMatchingItems"> Nie znaleziono tego czego szukasz? Spróbuj [secondlife:///app/search/all/[SEARCH_TERM] Szukaj]. @@ -983,17 +1031,18 @@ <string name="Chat" value=" Czat :"/> <string name="Sound" value=" Dźwięk :"/> <string name="Wait" value=" --- Zaczekaj :"/> - <string name="AnimFlagStop" value=" Zatrzymaj Animację :"/> - <string name="AnimFlagStart" value=" Rozpocznij Animację :"/> + <string name="AnimFlagStop" value=" Zatrzymaj animację :"/> + <string name="AnimFlagStart" value=" Rozpocznij animację :"/> <string name="Wave" value=" Wave"/> + <string name="GestureActionNone" value="Żadne"/> <string name="HelloAvatar" value=" Witaj, Awatarze!"/> - <string name="ViewAllGestures" value=" Zobacz Wszystkie >>"/> + <string name="ViewAllGestures" value=" Zobacz wszystkie >>"/> <string name="GetMoreGestures" value="Więcej gesturek >>"/> <string name="Animations" value=" Animacje,"/> <string name="Calling Cards" value=" Wizytówki,"/> <string name="Clothing" value=" Ubrania,"/> <string name="Gestures" value=" Gesturki,"/> - <string name="Landmarks" value=" Ulubione Miejsca,"/> + <string name="Landmarks" value=" Ulubione miejsca,"/> <string name="Notecards" value=" Notki,"/> <string name="Objects" value=" Obiekty,"/> <string name="Scripts" value=" Skrypty,"/> @@ -1006,7 +1055,7 @@ Moja Szafa </string> <string name="InvFolder My Favorites"> - Moje Ulubione + Moje ulubione </string> <string name="InvFolder Library"> Biblioteka @@ -1021,7 +1070,7 @@ Wizytówki </string> <string name="InvFolder Landmarks"> - Ulubione Miejsca + Landmarki </string> <string name="InvFolder Scripts"> Skrypty @@ -1036,28 +1085,28 @@ Noty </string> <string name="InvFolder New Folder"> - Nowy Folder + Nowy folder </string> <string name="InvFolder Inventory"> Szafa </string> <string name="InvFolder Uncompressed Images"> - Nieskompresowane Obrazy + Nieskompresowane obrazy </string> <string name="InvFolder Body Parts"> - Części Ciała + Części ciała </string> <string name="InvFolder Trash"> Kosz </string> <string name="InvFolder Photo Album"> - Album ze Zdjęciami + Album ze zdjęciami </string> <string name="InvFolder Lost And Found"> - Zagubione i Odnalezione + Zagubione i odnalezione </string> <string name="InvFolder Uncompressed Sounds"> - Nieskompresowane Dźwięki + Nieskompresowane dźwięki </string> <string name="InvFolder Animations"> Animacje @@ -1066,10 +1115,13 @@ Gesturki </string> <string name="InvFolder Current Outfit"> - Obecne Ubranie + Obecny strój + </string> + <string name="InvFolder Initial Outfits"> + Początkowe stroje </string> <string name="InvFolder My Outfits"> - Moje Ubranie + Moje stroje </string> <string name="InvFolder Accessories"> Akcesoria @@ -1117,34 +1169,34 @@ Ctrl </string> <string name="Chest"> - Klatka Piersiowa + Klatka piersiowa </string> <string name="Skull"> Czaszka </string> <string name="Left Shoulder"> - Lewe Ramię + Lewe ramię </string> <string name="Right Shoulder"> - Prawe Ramię + Prawe ramię </string> <string name="Left Hand"> - Lewa Dłoń + Lewa dłoń </string> <string name="Right Hand"> - Prawa Dłoń + Prawa dłoń </string> <string name="Left Foot"> - Lewa Stopa + Lewa stopa </string> <string name="Right Foot"> - Prawa Stopa + Prawa stopa </string> <string name="Spine"> Kręgosłup </string> <string name="Pelvis"> - Mednica + Miednica </string> <string name="Mouth"> Usta @@ -1153,16 +1205,16 @@ Szczęka </string> <string name="Left Ear"> - Lewe Ucho + Lewe ucho </string> <string name="Right Ear"> - Prawe Ucho + Prawe ucho </string> <string name="Left Eyeball"> - Lewe Oko + Lewe oko </string> <string name="Right Eyeball"> - Prawe Oko + Prawe oko </string> <string name="Nose"> Nos @@ -1171,40 +1223,40 @@ P Ramię </string> <string name="R Forearm"> - P Przedramię + P przedramię </string> <string name="L Upper Arm"> - L Ramię + L ramię </string> <string name="L Forearm"> - L Przedramię + L przedramię </string> <string name="Right Hip"> - Prawe Biodro + Prawe biodro </string> <string name="R Upper Leg"> - P Udo + P udo </string> <string name="R Lower Leg"> - P Dolna Noga + P dolna noga </string> <string name="Left Hip"> - Lewe Biodro + Lewe biodro </string> <string name="L Upper Leg"> - L Udo + L udo </string> <string name="L Lower Leg"> - L Dolna Noga + L dolna noga </string> <string name="Stomach"> Brzuch </string> <string name="Left Pec"> - Left Pec + Lewy Pec </string> <string name="Right Pec"> - Right Pec + Prawy Pec </string> <string name="YearsMonthsOld"> [AGEYEARS] [AGEMONTHS] @@ -1276,49 +1328,49 @@ Proces </string> <string name="AcctTypeCharterMember"> - Wyróżniony Członek + Wyróżniony członek </string> <string name="AcctTypeEmployee"> Pracownik Linden Lab </string> <string name="PaymentInfoUsed"> - Dane Konta Używane + Dane konta używane </string> <string name="PaymentInfoOnFile"> - Dane Płatnicze na Koncie + Dane płatnicze na koncie </string> <string name="NoPaymentInfoOnFile"> - Brak Danych na Koncie + Brak danych na koncie </string> <string name="AgeVerified"> - Weryfikacja Wieku Przeprowadzona + Weryfikacja wieku przeprowadzona </string> <string name="NotAgeVerified"> - Brak Weryfikacji Wieku + Brak weryfikacji wieku </string> <string name="Center 2"> Środek 2 </string> <string name="Top Right"> - Prawa Góra + Prawa góra </string> <string name="Top"> Góra </string> <string name="Top Left"> - Lewa Góra + Lewa góra </string> <string name="Center"> Środek </string> <string name="Bottom Left"> - Lewy Dół + Lewy dół </string> <string name="Bottom"> Dół </string> <string name="Bottom Right"> - Prawy Dół + Prawy dół </string> <string name="CompileQueueDownloadedCompiling"> Pobieranie zakończone, rozpoczęcie kompilacji @@ -1339,7 +1391,7 @@ Nieznany błąd podczas próby pobierania </string> <string name="CompileQueueTitle"> - Postęp Rekompilacji + Postęp rekompilacji </string> <string name="CompileQueueStart"> rekompiluj @@ -1351,13 +1403,13 @@ zresetuj </string> <string name="RunQueueTitle"> - Ustaw Uruchomiaj Progres + Ustaw uruchomiaj progres </string> <string name="RunQueueStart"> ustaw uruchom </string> <string name="NotRunQueueTitle"> - Ustaw Nie Uruchamiaj Progres + Ustaw nie uruchamiaj progres </string> <string name="NotRunQueueStart"> ustaw nie uruchamiaj @@ -1375,7 +1427,7 @@ Skrypt (obiekt poza zasięgiem) </string> <string name="GodToolsObjectOwnedBy"> - Obiekt [OBJECT] należący [OWNER] + Obiekt [OBJECT] należący do [OWNER] </string> <string name="GroupsNone"> żadne @@ -1387,6 +1439,7 @@ <string name="SummaryForTheWeek" value="Podsumowanie dla tego tygodnia, począwszy od "/> <string name="NextStipendDay" value="Następna wypłata będzie w "/> <string name="GroupIndividualShare" value=" Groupa Udziały Indywidualne"/> + <string name="GroupColumn" value="Grupa"/> <string name="Balance"> Stan </string> @@ -1430,10 +1483,10 @@ Grupy mające dostęp: ([ALLOWEDGROUPS], max [MAXACCESS]) </string> <string name="ScriptLimitsParcelScriptMemory"> - Pamięć Skryptów Parceli + Pamięć skryptów Posiadłości </string> <string name="ScriptLimitsParcelsOwned"> - Parcele: [PARCELS] + Posiadłości: [PARCELS] </string> <string name="ScriptLimitsMemoryUsed"> Pamięć wykorzystana: [COUNT] kb z [MAX] kb; [AVAILABLE] kb pozostało @@ -1442,7 +1495,7 @@ Pamięć wykorzystana: [COUNT] kb </string> <string name="ScriptLimitsParcelScriptURLs"> - Skrypty URL Parceli + Skrypty URL Posiadłości </string> <string name="ScriptLimitsURLsUsed"> URL: [COUNT] z [MAX]; [AVAILABLE] dostępne @@ -1463,7 +1516,7 @@ Wyszukiwanie informacji... </string> <string name="ScriptLimitsRequestDontOwnParcel"> - Nie masz pozwolenia na sprawdzenie parceli. + Nie masz pozwolenia na sprawdzenie pasiadłości. </string> <string name="SITTING_ON"> Usiądź na @@ -1475,22 +1528,22 @@ Głowa </string> <string name="ATTACH_LSHOULDER"> - Lewe Ramię + Lewe ramię </string> <string name="ATTACH_RSHOULDER"> - Ramię Prawe + Prawe ramię </string> <string name="ATTACH_LHAND"> - Ręka Lewa + Lewa ręka </string> <string name="ATTACH_RHAND"> - Prawa Ręka + Prawa ręka </string> <string name="ATTACH_LFOOT"> - Lewa Stopa + Lewa stopa </string> <string name="ATTACH_RFOOT"> - Stopa Prawa + Prawa stopa </string> <string name="ATTACH_BACK"> Plecy @@ -1505,22 +1558,22 @@ Podbródek </string> <string name="ATTACH_LEAR"> - Ucho Lewe + Ucho lewe </string> <string name="ATTACH_REAR"> - Prawe Ucho + Prawe ucho </string> <string name="ATTACH_LEYE"> - Lewe Oko + Lewe oko </string> <string name="ATTACH_REYE"> - Prawe Oko + Prawe oko </string> <string name="ATTACH_NOSE"> Nos </string> <string name="ATTACH_RUARM"> - Ramię P Górne + Prawe górne ramię </string> <string name="ATTACH_RLARM"> Prawe dolne ramię @@ -1535,19 +1588,19 @@ Biodro prawe </string> <string name="ATTACH_RULEG"> - P Górna Noga + Prawa górna noga </string> <string name="ATTACH_RLLEG"> - Noga P Dolna + Prawa dolna noga </string> <string name="ATTACH_LHIP"> - Biodro Lewe + Biodro lewe </string> <string name="ATTACH_LULEG"> - L Górna Noga + Lewa gorna noga </string> <string name="ATTACH_LLLEG"> - Noga L Dolna + Lewa dolna noga </string> <string name="ATTACH_BELLY"> Brzuch @@ -1559,28 +1612,28 @@ Lewa klatka </string> <string name="ATTACH_HUD_CENTER_2"> - HUD Środek 2 + HUD środek 2 </string> <string name="ATTACH_HUD_TOP_RIGHT"> - HUD P Górny + HUD prawy górny </string> <string name="ATTACH_HUD_TOP_CENTER"> - HUD Środek Górny + HUD środek górny </string> <string name="ATTACH_HUD_TOP_LEFT"> - HUD L Góra + HUD lewa gora </string> <string name="ATTACH_HUD_CENTER_1"> - HUD Środek 1 + HUD środek 1 </string> <string name="ATTACH_HUD_BOTTOM_LEFT"> - HUD Dolna L Strona + HUD lewa dolna strona </string> <string name="ATTACH_HUD_BOTTOM"> - HUD Dolny + HUD dolny </string> <string name="ATTACH_HUD_BOTTOM_RIGHT"> - HUD Dolna P Strona + HUD prawa dolna strona </string> <string name="Bad attachment point"> Nieprawidłowy punkt załączenia @@ -1595,13 +1648,13 @@ Zawartość obiektu </string> <string name="PanelContentsNewScript"> - Nowy Skrypt + Nowy skrypt </string> <string name="BusyModeResponseDefault"> - Rezydent, do którego wysłałeś wiadomość prywatną znajduje się w trybie pracy. Oznacza to, iż Twoja wiadomość zostanie zapisana do przeglądnięcia poźniej. + Rezydent, do którego wysłałeś wiadomość prywatną znajduje się w trybie pracy. Oznacza to, iż Twoja wiadomość zostanie zapisana do przejrzenia poźniej. </string> <string name="NoOutfits"> - Nie posiadasz żadnych strojów. Spróbuj [secondlife:///app/search/all/ Szukaj] + Nie posiadasz jeszcze żadnych strojów. Spróbuj [secondlife:///app/search/all/ Szukaj] </string> <string name="NoOutfitsTabsMatched"> Nie znaleziono tego czego szukasz? Spróbuj [secondlife:///app/search/all/[SEARCH_TERM] Szukaj]. @@ -1625,13 +1678,13 @@ Brak umowy dla tego majątku. </string> <string name="RegionNoCovenantOtherOwner"> - Brak umowy dla tego majątku. Każda posiadłość w tym majątku została sprzedana przez Właściciela majątku nie Linden Lab. Skontaktuj się z właścicielem majątku w celu uzuskania szczegółów sprzedaży. + Brak umowy dla tego majątku. Każda posiadłość w tym majątku została sprzedana przez właściciela majątku nie Linden Lab. Skontaktuj się z właścicielem majątku w celu uzuskania szczegółów sprzedaży. </string> <string name="covenant_last_modified" value="Ostatnio modyfikowano:"/> <string name="none_text" value=" (żadne) "/> <string name="never_text" value=" (nigdy) "/> <string name="GroupOwned"> - Własność Grupy + Własność grupy </string> <string name="Public"> Publiczny @@ -1715,7 +1768,7 @@ Zawartość </string> <string name="AcquiredItems"> - Zdobyte Obiekty + Zdobyte obiekty </string> <string name="Cancel"> Anuluj @@ -1761,7 +1814,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Shift+ </string> <string name="FileSaved"> - Zapisane Pliki + Zapisane pliki </string> <string name="Receiving"> Otrzymane @@ -1779,13 +1832,13 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh PDT </string> <string name="Forward"> - Do Przodu + Do przodu </string> <string name="Left"> - W Lewo + W lewo </string> <string name="Right"> - W Prawo + W prawo </string> <string name="Back"> Wróć @@ -1803,10 +1856,10 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Wschód </string> <string name="Up"> - W Górę + W górę </string> <string name="Down"> - W Dół + W dół </string> <string name="Any Category"> Każda Kategoria @@ -1815,7 +1868,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Zakupy </string> <string name="Land Rental"> - Wynajem Ziemi + Wynajem ziemi </string> <string name="Property Rental"> Wynajem Posiadłości @@ -1824,7 +1877,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Specjalne Oferty </string> <string name="New Products"> - Nowe Produkty + Nowe produkty </string> <string name="Employment"> Praca @@ -1842,7 +1895,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Żadne </string> <string name="Linden Location"> - Linden Lokacja + Linden Lokalizacja </string> <string name="Adult"> 'Adult' @@ -1866,7 +1919,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Przyjazne dla nowych </string> <string name="Parks&Nature"> - Park i Natura + Parki i Natura </string> <string name="Residential"> Mieszkalna @@ -1884,10 +1937,10 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Ty </string> <string name="Multiple Media"> - Multi Media + Multimedia </string> <string name="Play Media"> - Uruchom/Zatrzymaj Media + Uruchom/Zatrzymaj media </string> <string name="MBCmdLineError"> Podczas realizacji podanej komendy, wystąpił błąd. @@ -1905,14 +1958,14 @@ Jeżeli nadal otrzymujesz ten komunikat, uruchom swój komputer ponownie. Jeżeli problem nadal występuje, proponujemy całkowite odinstalowanie aplikacji [APP_NAME] oraz ponowną jej instalację. </string> <string name="MBFatalError"> - Błąd Krytyczny + Błąd krytyczny </string> <string name="MBRequiresAltiVec"> Aplikacja [APP_NAME] wymaga procesora z AltiVec (wersja G4 lub starsza). </string> <string name="MBAlreadyRunning"> Aplikacja [APP_NAME] została już uruchomiona. -Sprawdź czy Twój pasek aplikacji nie ma zminimaliwoanych okien programu. +Sprawdź czy Twój pasek aplikacji nie ma zminimalizowanych okien programu. Jeżeli nadal otrzymujesz ten komunikat, uruchom swój komputer ponownie. </string> <string name="MBFrozenCrashed"> @@ -1924,7 +1977,7 @@ Czy chcesz wysłać raport na temat zawieszenia? </string> <string name="MBNoDirectX"> Aplikacja [APP_NAME] nie wykryła oprogramowania DirectX 9.0b lub wersji nowszej. -[APP_NAME] używa oprogramowaniau DirectX w celu detekcji dysku twardego i/lub nieaktualizowanych dysków twardych, które mogą przyczynić się do obniżenia stabilności, wydajności systemoweu oraz zawieszeń. Jeżeli chcesz uruchomić aplikację [APP_NAME] bez problemów, doradzamy korzystanie z uruchomionym oprogramowaniem min. DirectX 9.0b. +[APP_NAME] używa oprogramowaniau DirectX w celu wykrycia dysku twardego i/lub nieaktualizowanych dysków twardych, które mogą przyczynić się do obniżenia stabilności, wydajności systemowej oraz zawieszeń. Jeżeli chcesz uruchomić aplikację [APP_NAME] bez problemów, doradzamy korzystanie z uruchomionym oprogramowaniem min. DirectX 9.0b. Czy chcesz kontynuować? </string> @@ -1942,7 +1995,7 @@ Prosimy o pobranie najnowszej wersji ze strony internetowej: www.secondlife.com. Błąd </string> <string name="MBFullScreenErr"> - Niemożliwość uruchomienia trybu pełnoekranowego w proporcji [WIDTH] x [HEIGHT]. + Nie można uruchomić trybu pełnoekranowego w proporcji [WIDTH] x [HEIGHT]. Uruchomione w oknie. </string> <string name="MBDestroyWinFailed"> @@ -1961,11 +2014,11 @@ Uruchomione w oknie. Brak otrzymania formatu pikselowego opisu </string> <string name="MBTrueColorWindow"> - Aplikacja [APP_NAME] wymaga ustawienia Koloru na (32-bit) do uruchomienia. + Aplikacja [APP_NAME] wymaga ustawienia koloru na (32-bit) do uruchomienia. Sprawdź swoje ustawienia dla wyświetlacza i ustaw tryb koloru na 32-bity. </string> <string name="MBAlpha"> - Aplikacja [APP_NAME] nie może zostać uruchomiona z powodu niemożliwości dostania się na kanał 8 bitowy alpha. Najcześciej jest to spowodowane błędami sterowników karty video. + Aplikacja [APP_NAME] nie może zostać uruchomiona, ponieważ nie jest możliwe dostanie się na kanał 8 bitowy alpha. Najcześciej jest to spowodowane błędami sterowników karty video. Upewnij się, że posiadasz najnowsze aktualizacje sterowników karty video. Dodatkowo, sprawdź czy Twój monitor posiada poprawną konfigurację koloru (32-bity) w Panelu Kontroli > Display > Ustawienia. Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. @@ -2015,34 +2068,34 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Pasemka </string> <string name="Beady Eyes"> - Oczy Załzawione + Oczy załzawione </string> <string name="Belly Size"> - Rozmiar Brzucha + Rozmiar brzucha </string> <string name="Big"> Duży </string> <string name="Big Butt"> - Duży Pośladek + Duży pośladek </string> <string name="Big Hair Back"> - Duże Włosy: z tyłu + Duże włosy: z tyłu </string> <string name="Big Hair Front"> - Duże Włosy: z przodu + Duże włosy: z przodu </string> <string name="Big Hair Top"> - Duże Włosy: z góry + Duże włosy: z góry </string> <string name="Big Head"> - Duża Głowa + Duża głowa </string> <string name="Big Pectorals"> - Duże Mięśnie Piersiowe + Duże mięśnie piersiowe </string> <string name="Big Spikes"> - Duże Kolce + Duże kolce </string> <string name="Black"> Czarne @@ -2051,7 +2104,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Blond </string> <string name="Blonde Hair"> - Włosy Blond + Włosy blond </string> <string name="Blush"> Rumieniec @@ -2072,10 +2125,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Piegi </string> <string name="Body Thick"> - Zagęszczenie Ciała + Zagęszczenie ciała </string> <string name="Body Thickness"> - Grubość Ciała + Grubość ciała </string> <string name="Body Thin"> Szczupłość @@ -2102,25 +2155,25 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Rozmiar czoła </string> <string name="Bug Eyes"> - Bug Eyes + Wytrzeszcz oczu </string> <string name="Bugged Eyes"> - Bugged Eyes + Wytrzeszczone oczy </string> <string name="Bulbous"> Bulwiasty </string> <string name="Bulbous Nose"> - Bulwiasty Nos + Bulwiasty nos </string> <string name="Bushy Eyebrows"> - Bujne Brwi + Bujne brwi </string> <string name="Bushy Hair"> - Bujne Włosy + Bujne włosy </string> <string name="Butt Size"> - Rozmiar Pośladków + Rozmiar pośladków </string> <string name="bustle skirt"> Bustle Skirt @@ -2171,7 +2224,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Rozszczepienie </string> <string name="Close Set Eyes"> - Close Set Eyes + Oczy blisko ustawione </string> <string name="Closed"> Zamknięte @@ -2183,10 +2236,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Zamknięte z przodu </string> <string name="Closed Left"> - Lewe Oko zamknięte + Lewe oko zamknięte </string> <string name="Closed Right"> - Prawe Oko zamknięte + Prawe oko zamknięte </string> <string name="Coin Purse"> Coin Purse @@ -2198,10 +2251,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Kołnierz z przodu </string> <string name="Corner Down"> - Corner Down + Kącik w dół </string> <string name="Corner Up"> - Corner Up + Kącik w górę </string> <string name="Creased"> Pognieciony @@ -2210,7 +2263,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Skrzywienie nosa </string> <string name="Cuff Flare"> - Cuff Flare + Szeroki rękaw </string> <string name="Dark"> Ciemne @@ -2225,7 +2278,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Glębokie </string> <string name="Default Heels"> - Domyślne Buty na Obcasie + Domyślne buty na obcasie </string> <string name="Dense"> Gęstość @@ -2294,13 +2347,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Długość rzęs </string> <string name="Eyeliner"> - Eyeliner + Kredka do oczu </string> <string name="Eyeliner Color"> - Kolor Eyeliner'a + Kolor kredki do oczu'a </string> <string name="Eyes Bugged"> - Eyes Bugged + Wytrzeszczone oczy </string> <string name="Face Shear"> Usunięcie twarzy @@ -2309,7 +2362,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Detale twarzy </string> <string name="Far Set Eyes"> - Far Set Eyes + Oczy szeroko rozstawione </string> <string name="Fat Lips"> Grube usta @@ -2318,7 +2371,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Kobieta </string> <string name="Fingerless"> - Fingerless + Bez palców </string> <string name="Fingers"> Palce @@ -2351,7 +2404,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Piegi </string> <string name="Front Fringe"> - Przednia Grzywka + Przednia grzywka </string> <string name="Full Back"> Gęstość włosów po bokach @@ -2444,13 +2497,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Wysokie obcasy </string> <string name="High Jaw"> - High Jaw + Wysoka szczęka </string> <string name="High Platforms"> - High Platforms + Wysokie obcasy </string> <string name="High and Tight"> - High and Tight + Wysokie i wąskie </string> <string name="Higher"> Wyżej @@ -2471,7 +2524,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Wewnętrzna intensywność cienia </string> <string name="Inner Eye Corner"> - Wenwętrzny bok oka + Wewnętrzny bok oka </string> <string name="Inner Eye Shadow"> Wewnętrzny cień oka @@ -2486,25 +2539,25 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Zmarszczki na kurtce </string> <string name="Jaw Angle"> - Jaw Angle + Kąt szczęki </string> <string name="Jaw Jut"> - Jaw Jut + Wystająca szczęka </string> <string name="Jaw Shape"> - Jaw Shape + Kształt szczęki </string> <string name="Join"> Złącz </string> <string name="Jowls"> - Jowls + Dolna część policzka </string> <string name="Knee Angle"> Kąt kolana </string> <string name="Knock Kneed"> - Knock Kneed + Iksowate nogi </string> <string name="Large"> Duże @@ -2513,7 +2566,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Duże dłonie </string> <string name="Left Part"> - Left Part + Lewa część </string> <string name="Leg Length"> Długość nogi @@ -2531,13 +2584,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Less Curtains </string> <string name="Less Freckles"> - Mniej Piegów + Mniej piegów </string> <string name="Less Full"> - Mniej Pełne + Mniej pełne </string> <string name="Less Gravity"> - Mniej Ciężaru + Mniej ciężaru </string> <string name="Less Love"> Less Love @@ -2549,7 +2602,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Mniej umięśnienia </string> <string name="Less Rosy"> - Less Rosy + Mniej zaróżowione </string> <string name="Less Round"> Mniej zaaokrąglone @@ -2570,7 +2623,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Lżejsze </string> <string name="Lip Cleft"> - Szerokość Rozszczepienia górnej wargi + Szerokość rozszczepienia górnej wargi </string> <string name="Lip Cleft Depth"> Głębokość rozszczepienia górnej wargi @@ -2648,7 +2701,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Niska szczęka </string> <string name="Low Platforms"> - Low Platforms + Niskie obcasy </string> <string name="Low and Loose"> Niskie i luźne @@ -2657,10 +2710,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Niżej </string> <string name="Lower Bridge"> - Lower Bridge + Dolny mostek </string> <string name="Lower Cheeks"> - Lower Cheeks + Niższe policzki </string> <string name="Male"> Mężczyzna @@ -2672,7 +2725,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Więcej </string> <string name="More Blush"> - More Blush + Bardziej zarumienione </string> <string name="More Body Fat"> Więcej zawartości tkanki tłuszczowej @@ -2681,13 +2734,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. More Curtains </string> <string name="More Eyeshadow"> - More Eyeshadow + Ciemniejszy cień oczu </string> <string name="More Freckles"> Więcej piegów </string> <string name="More Full"> - More Full + Bardziej pełne </string> <string name="More Gravity"> Więcej ciężaru @@ -2708,7 +2761,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Więcej umięśnienia </string> <string name="More Rosy"> - More Rosy + Bardziej zaróżowione </string> <string name="More Round"> Więcej zaokrąglenia @@ -2717,7 +2770,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. More Saddle </string> <string name="More Sloped"> - More Sloped + Bardziej spadziste </string> <string name="More Square"> Więcej kwadratowy @@ -2726,7 +2779,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Więcej górnej wargi </string> <string name="More Vertical"> - More Vertical + Bardziej pionowe </string> <string name="More Volume"> Więcej objętości @@ -2738,10 +2791,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Wąsy </string> <string name="Mouth Corner"> - Kąciki Ust + Kąciki ust </string> <string name="Mouth Position"> - Pozycja Ust + Pozycja ust </string> <string name="Mowhawk"> Mowhawk @@ -2762,13 +2815,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Wąskie </string> <string name="Narrow Back"> - Wąski Tył + Wąski tył </string> <string name="Narrow Front"> - Wąski Przód + Wąski przód </string> <string name="Narrow Lips"> - Wąskie Usta + Wąskie usta </string> <string name="Natural"> Naturalne @@ -2780,10 +2833,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Grubość karku </string> <string name="No Blush"> - No Blush + Brak rumieńca </string> <string name="No Eyeliner"> - Brak Eyeliner's + Brak kredki do oczu's </string> <string name="No Eyeshadow"> Brak cienia pod powieką @@ -2885,7 +2938,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Zewnętrzny cień </string> <string name="Overbite"> - Overbite + Przodozgryz górny </string> <string name="Package"> Package @@ -2894,13 +2947,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Pomalowane paznokcie </string> <string name="Pale"> - Pale + Blady </string> <string name="Pants Crotch"> Krocze spodni </string> <string name="Pants Fit"> - Pants Fit + Dopasowanie spodni </string> <string name="Pants Length"> Długość spodni @@ -2915,7 +2968,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Część </string> <string name="Part Bangs"> - Part Bangs + Część grzywki </string> <string name="Pectorals"> Mięśnie klatki piersiowej @@ -2924,7 +2977,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Pigment </string> <string name="Pigtails"> - Pigtails + Warkocz </string> <string name="Pink"> Różowe @@ -2933,16 +2986,16 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Róż </string> <string name="Platform Height"> - Platform Height + Wysokie obcasy </string> <string name="Platform Width"> - Platform Width + Szerokie obcasy </string> <string name="Pointy"> Pointy </string> <string name="Pointy Heels"> - Pointy Heels + Obcasy pointy </string> <string name="Ponytail"> Kucyk @@ -2951,22 +3004,22 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Poofy Skirt </string> <string name="Pop Left Eye"> - Pop Left Eye + Wybałuszone lewe oko </string> <string name="Pop Right Eye"> - Pop Right Eye + Wybałuszone prawe oko </string> <string name="Puffy"> - Puffy + Opuchnięty </string> <string name="Puffy Eyelids"> - Spuchnięte Powieki + Spuchnięte powieki </string> <string name="Rainbow Color"> - Kolor Tęczy + Kolor tęczy </string> <string name="Red Hair"> - Czerwone Włosy + Czerwone włosy </string> <string name="Regular"> Regularne @@ -2987,13 +3040,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Rudy </string> <string name="Rumpled Hair"> - Włosy w Nieładzie + Włosy w nieładzie </string> <string name="Saddle Bags"> Saddle Bags </string> <string name="Scrawny Leg"> - Scrawny Leg + Koścista noga </string> <string name="Separate"> Odzielne @@ -3032,13 +3085,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Przesuń w prawo </string> <string name="Shirt Bottom"> - Dolna Część Koszulki + Dolna część koszuli </string> <string name="Shirt Fit"> - Shirt Fit + Dopasowanie koszuli </string> <string name="Shirt Wrinkles"> - Zmarszczki na koszulce + Zmarszczki na koszuli </string> <string name="Shoe Height"> Wysokość buta @@ -3056,13 +3109,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Krótki kark </string> <string name="Short Pigtails"> - Short Pigtails + Krótkie warkoczyki </string> <string name="Short Ponytail"> - Krótki Kucyk + Krótki kucyk </string> <string name="Short Sideburns"> - Krótkie Baczki + Krótkie baczki </string> <string name="Short Torso"> Krótki tułów @@ -3080,19 +3133,19 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Baczki </string> <string name="Sides Hair"> - Boczne Włosy + Boczne włosy </string> <string name="Sides Hair Down"> - Boczne Włosy w Dół + Boczne włosy w dół </string> <string name="Sides Hair Up"> - Boczne Włosy do Góry + Boczne włosy do góry </string> <string name="Skinny Neck"> - Smukły Kark + Smukły kark </string> <string name="Skirt Fit"> - Skirt Fit + Dopasowanie spódnicy </string> <string name="Skirt Length"> Długość spódnicy @@ -3104,19 +3157,19 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Długość rękawów </string> <string name="Sleeve Looseness"> - Luźność rękawów + Luźne rękawy </string> <string name="Slit Back"> - Slit: Back + Rozcięcie: tył </string> <string name="Slit Front"> - Slit: Front + Rozcięcie: przód </string> <string name="Slit Left"> - Slit: Left + Rozcięcie: po prawej </string> <string name="Slit Right"> - Slit: Right + Rozcięcie: po lewej </string> <string name="Small"> Małe @@ -3137,13 +3190,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Długość skarpetek </string> <string name="Soulpatch"> - Soulpatch + Zarost na dolnej wardze </string> <string name="Sparse"> - Sparse + Rzadki </string> <string name="Spiked Hair"> - Kolczaste Włosy + Kolczaste włosy </string> <string name="Square"> Kwadratowe @@ -3158,13 +3211,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Rozciągnięta głowa </string> <string name="Sunken"> - Sunken + Zapadnięte </string> <string name="Sunken Chest"> - Sunken Chest + Zapadnięta klatka piersiowa </string> <string name="Sunken Eyes"> - Sunken Eyes + Zapadnięte oczy </string> <string name="Sweep Back"> Sweep Back @@ -3176,10 +3229,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Wysokość </string> <string name="Taper Back"> - Taper Back + Zwężenie do przodu </string> <string name="Taper Front"> - Taper Front + Zwężenie do tyłu </string> <string name="Thick Heels"> Grube obcasy @@ -3242,7 +3295,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Uncreased </string> <string name="Underbite"> - Underbite + Przodozgryz </string> <string name="Unnatural"> Nienaturalne @@ -3269,7 +3322,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Wysokość talii </string> <string name="Well-Fed"> - Well-Fed + Dobrze odżywiony </string> <string name="White Hair"> Białe włosy @@ -3293,10 +3346,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Zmarszczki </string> <string name="LocationCtrlAddLandmarkTooltip"> - Dodaj do Zapisanych Miejsc + Dodaj do landmarków </string> <string name="LocationCtrlEditLandmarkTooltip"> - Edytuj Zapisane Miejsca + Edytuj Landmarki </string> <string name="LocationCtrlInfoBtnTooltip"> Zobacz więcej szczegółów na temat obecnej lokalizacji @@ -3392,7 +3445,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Rozmowa głosowa... </string> <string name="connected-im"> - Połączono, kliknij Zakończ Rozmowe aby się rozłączyć + Połączono, kliknij Zakończ rozmowę aby się rozłączyć </string> <string name="hang_up-im"> Rozmowa głosowa zakończona @@ -3464,7 +3517,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. [SOURCES] powiedział/a coś nowego </string> <string name="session_initialization_timed_out_error"> - Inicjalizacja sesji wygasła + Inicjacja sesji wygasła </string> <string name="voice_morphing_url"> http://secondlife.com/landing/voicemorphing @@ -3485,7 +3538,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Zapłacono [AMOUNT]L$ [REASON]. </string> <string name="for a parcel of land"> - za posiadłość + za Posiadłość </string> <string name="for a land access pass"> za przepustkę na Posiadłość @@ -3526,6 +3579,9 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. <string name="group_role_owners"> Właściciele </string> + <string name="group_member_status_online"> + Obecnie w SL + </string> <string name="uploading_abuse_report"> Pobieranie... @@ -3571,7 +3627,7 @@ Raport o Nadużyciu Nowa spódnica </string> <string name="New Alpha"> - Nowa Alpha + Nowa alpha </string> <string name="New Tattoo"> Nowy tatuaż @@ -3579,9 +3635,15 @@ Raport o Nadużyciu <string name="Invalid Wearable"> Nieaktualne ubranie/część ciała </string> + <string name="New Gesture"> + Nowa gesturka + </string> <string name="New Script"> Nowy skrypt </string> + <string name="New Note"> + Stwórz nowe ogłoszenie + </string> <string name="New Folder"> Nowy folder </string> @@ -3613,7 +3675,7 @@ Raport o Nadużyciu Mężczyzna - Get lost </string> <string name="Male - Blow kiss"> - Mężczyzna - Blow kiss + Mężczyzna - Całusek </string> <string name="Male - Boo"> Mężczyzna - Boo @@ -3639,6 +3701,15 @@ Raport o Nadużyciu <string name="Male - Wow"> Mężczyzna - Wow </string> + <string name="Female - Chuckle"> + Kobieta - Chichot + </string> + <string name="Female - Cry"> + Kobieta - Płacze + </string> + <string name="Female - Embarrassed"> + Kobieta - Zakłopotana + </string> <string name="Female - Excuse me"> Kobieta - Excuse me </string> @@ -3646,7 +3717,7 @@ Raport o Nadużyciu Kobieta - Get lost </string> <string name="Female - Blow kiss"> - Kobieta - Blow kiss + Kobieta - Całusek </string> <string name="Female - Boo"> Kobieta - Boo @@ -3657,9 +3728,21 @@ Raport o Nadużyciu <string name="Female - Hey"> Kobieta - Hey </string> + <string name="Female - Hey baby"> + Kobieta - Hey baby + </string> <string name="Female - Laugh"> Kobieta - Śmiech </string> + <string name="Female - Looking good"> + Kobieta - Looking good + </string> + <string name="Female - Over here"> + Kobieta - Over here + </string> + <string name="Female - Please"> + Kobieta - Please + </string> <string name="Female - Repulsed"> Kobieta - Odrzucenie </string> @@ -3709,4 +3792,46 @@ Raport o Nadużyciu <string name="dateTimePM"> PM </string> + <string name="LocalEstimateUSD"> + US$ [AMOUNT] + </string> + <string name="Membership"> + Członkostwo + </string> + <string name="Roles"> + Funkcje + </string> + <string name="Group Identity"> + Status grupy + </string> + <string name="Parcel Management"> + Parcel Management + </string> + <string name="Parcel Identity"> + Parcel Identity + </string> + <string name="Parcel Settings"> + Parcel Settings + </string> + <string name="Parcel Powers"> + Parcel Powers + </string> + <string name="Parcel Access"> + Dostęp do posiadłości + </string> + <string name="Parcel Content"> + Parcel Content + </string> + <string name="Object Management"> + Object Management + </string> + <string name="Accounting"> + Accounting + </string> + <string name="Notices"> + Ogłoszenia + </string> + <string name="Chat"> + Czat + </string> </strings> diff --git a/indra/newview/skins/default/xui/pl/teleport_strings.xml b/indra/newview/skins/default/xui/pl/teleport_strings.xml index 6c4723dd7e..57fb55bf4c 100644 --- a/indra/newview/skins/default/xui/pl/teleport_strings.xml +++ b/indra/newview/skins/default/xui/pl/teleport_strings.xml @@ -2,12 +2,12 @@ <teleport_messages> <message_set name="errors"> <message name="invalid_tport"> - Przepraszamy, ale pojawił się błąd podczas Twojej próby teleportacji. By ponowić teleportację, wyloguj się i zaloguj ponownie. -Jeżeli nadal otrzymujesz komunikat błędu teleportacji, sprawdź [SUPPORT_SITE]. + Przepraszamy, ale pojawił się błąd podczas Twojej próby teleportacji. Aby ponowić teleportację, wyloguj się i zaloguj ponownie. +Jeżeli nadal otrzymujesz komunikat o błędzie teleportacji, sprawdź [SUPPORT_SITE]. </message> <message name="invalid_region_handoff"> - Przepraszamy, ale pojawił się błąd podczas próby zmiany regionu. By ponowić próbę przejścia na drugi region, wyloguj się i zaloguj ponownie. -Jeżeli nadal otrzymujesz komunikat błędu podczas przejścia na drugi region, sprawdź [SUPPORT_SITE]. + Przepraszamy, ale pojawił się błąd podczas próby zmiany regionu. Aby ponowić próbę przejścia na drugi region, wyloguj się i zaloguj ponownie. +Jeżeli nadal otrzymujesz komunikat o błędzie podczas przejścia na drugi region, sprawdź [SUPPORT_SITE]. </message> <message name="blocked_tport"> Przepraszamy, teleportacja jest chwilowo niedostępna. Spróbuj jeszcze raz. @@ -26,7 +26,7 @@ Jeśli nadal nie możesz się teleportować wyloguj się i ponownie zaloguj. Czekamy na Twoje akcesoria. Możesz poczekać kilka minut lub zrobić relog przed następną próbą teleportacji. </message> <message name="too_many_uploads_tport"> - Obecnie ten region ma problemy z ładowaniem obiektów w związku z czym teleportacja bardzo sie opóznia. + Obecnie ten region ma problemy z ładowaniem obiektów, w związku z czym teleportacja bardzo sie opóźnia. Spróbuj jeszcze raz za kilka minut albo teleportuj się do mniej zatłoczonego miejsca. </message> <message name="expired_tport"> @@ -36,7 +36,7 @@ Spróbuj jeszcze raz za kilka minut albo teleportuj się do mniej zatłoczonego Przepraszamy, ale nie udało się przeprowadzić zmiany regionu wystarczająco szybko. Spróbuj jeszcze raz za kilka minut. </message> <message name="no_host"> - Nie możemy znaleść miejsca docelowego. To miejsce może być chwilowo nieosiągalne albo przestało istnieć. + Nie możemy znaleźć miejsca docelowego. To miejsce może być chwilowo nieosiągalne albo przestało istnieć. Spróbuj jeszcze raz za kilka minut. </message> <message name="no_inventory_host"> @@ -57,7 +57,7 @@ Spróbuj jeszcze raz za kilka minut. Wysyłanie do miejsca startu. </message> <message name="sending_landmark"> - Lokalizowanie zapamiętanego miejsca (LM). + Lokalizowanie landmarka(LM). </message> <message name="completing"> Finalizowanie teleportacji. 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 56ffcbdece..1767a31496 100644 --- a/indra/newview/skins/default/xui/pt/floater_about_land.xml +++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml @@ -427,7 +427,17 @@ Mídia: <check_box label="Repetir mídia" name="media_loop" tool_tip="Executar a mídia repetidamente. Quando a mídia chegar ao fim, ela recomeça."/> </panel> <panel label="SOM" name="land_audio_panel"> + <text name="MusicURL:"> + URL de música: + </text> <check_box label="Ocultar URL" name="hide_music_url" tool_tip="Selecionar esta opção oculta o URL de música a visitantes não autorizados aos dados do terreno."/> + <text name="Sound:"> + Som: + </text> + <check_box label="Limitar sons de gestos e objetos a esta parcela" name="check sound local"/> + <text name="Voice settings:"> + Voz: + </text> <check_box label="Ativar voz" name="parcel_enable_voice_channel"/> <check_box label="Ativar voz (definições do terreno)" name="parcel_enable_voice_channel_is_estate_disabled"/> <check_box label="Limitar bate-papo de voz a este lote" name="parcel_enable_voice_channel_local"/> diff --git a/indra/newview/skins/default/xui/pt/floater_camera.xml b/indra/newview/skins/default/xui/pt/floater_camera.xml index 7343bd9aa8..4f3729c623 100644 --- a/indra/newview/skins/default/xui/pt/floater_camera.xml +++ b/indra/newview/skins/default/xui/pt/floater_camera.xml @@ -22,6 +22,35 @@ Visualizar objeto </floater.string> <panel name="controls"> + <panel name="preset_views_list"> + <panel_camera_item name="front_view"> + <panel_camera_item.text name="front_view_text"> + Vista frontal + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="group_view"> + <panel_camera_item.text name="side_view_text"> + Vista lateral + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="rear_view"> + <panel_camera_item.text name="rear_view_text"> + Vista de trás + </panel_camera_item.text> + </panel_camera_item> + </panel> + <panel name="camera_modes_list"> + <panel_camera_item name="object_view"> + <panel_camera_item.text name="object_view_text"> + Vista de objetos + </panel_camera_item.text> + </panel_camera_item> + <panel_camera_item name="mouselook_view"> + <panel_camera_item.text name="mouselook_view_text"> + Vista do mouse + </panel_camera_item.text> + </panel_camera_item> + </panel> <panel name="zoom" tool_tip="Aproximar a Câmera in direção ao Foco"> <joystick_rotate name="cam_rotate_stick" tool_tip="Girar câmera ao redor do foco"/> <slider_bar name="zoom_slider" tool_tip="Zoom de câmera para focalizar"/> diff --git a/indra/newview/skins/default/xui/pt/floater_land_holdings.xml b/indra/newview/skins/default/xui/pt/floater_land_holdings.xml index 2b0d6790f2..7475bdd5b8 100644 --- a/indra/newview/skins/default/xui/pt/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/pt/floater_land_holdings.xml @@ -7,28 +7,28 @@ <column label="Área" name="area"/> </scroll_list> <button label="Teletransporte" label_selected="Teletransporte" name="Teleport" tool_tip="Teletransportar para o centro do terreno."/> - <button label="Mapa" label_selected="Mapa" name="Show on Map" tool_tip="Mostrar terreno na mápa-mundi" width="130"/> + <button label="Mostrar no mapa" label_selected="Mapa" name="Show on Map" tool_tip="Mostrar terreno no mápa-mundi" width="130"/> <text name="contrib_label"> - Contribuições para os seus grupos: + Contribuições de grupos: </text> <scroll_list name="grant list"> <column label="Grupo" name="group"/> <column label="Área" name="area"/> </scroll_list> <text name="allowed_label" width="380"> - Propriedades de terreno permitidas com o plano de pagamento atual: + Metragem permitida com o plano atual: </text> <text left_delta="390" name="allowed_text"> [AREA] m² </text> <text name="current_label"> - Propriedades de terrenos atuais: + Metragem atual: </text> <text left_delta="390" name="current_text"> [AREA] m² </text> <text name="available_label"> - Disponível para compra de terras: + Metragem disponível para compra: </text> <text left_delta="390" name="available_text"> [AREA] m² diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml index a01bee94a1..80bdbb0fb4 100644 --- a/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml @@ -42,7 +42,12 @@ <text name="library_label"> Biblioteca: </text> - <scroll_list name="library_list" width="84"/> + <scroll_list name="library_list" width="84"> + <scroll_list.rows name="action_animation" value="Animação"/> + <scroll_list.rows name="action_sound" value="Som"/> + <scroll_list.rows name="action_chat" value="Bate-papo"/> + <scroll_list.rows name="action_wait" value="Espere"/> + </scroll_list> <button label="Incluir" left="118" name="add_btn" width="87"/> <text name="steps_label"> Passos: diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml index e70bd0575e..67d8e35cf2 100644 --- a/indra/newview/skins/default/xui/pt/floater_tools.xml +++ b/indra/newview/skins/default/xui/pt/floater_tools.xml @@ -342,9 +342,9 @@ <text name="text revolutions"> Revoluções </text> - <texture_picker label="Texture de Escultura" name="sculpt texture control" tool_tip="Click to choose a picture"/> - <check_box label="Espelho" name="sculpt mirror control" tool_tip="Flips sculpted prim along the X axis"/> - <check_box label="De dentro para fora" name="sculpt invert control" tool_tip="Inverts the sculpted prims normals, making it appear inside-out"/> + <texture_picker label="Textura de escultura" name="sculpt texture control" tool_tip="Selecionar imagem"/> + <check_box label="Espelho" name="sculpt mirror control" tool_tip="Inverte o prim esculpido no eixo X"/> + <check_box label="De dentro para fora" name="sculpt invert control" tool_tip="Inverte o prim esculpido normals, making it appear inside-out"/> <text name="label sculpt type"> Tipo costura </text> @@ -361,9 +361,9 @@ Selecione apenas um prim para editar suas características. </text> <text name="edit_object"> - Editar características do Objeto: + Editar características do objeto: </text> - <check_box label="Flexíbilidade" name="Flexible1D Checkbox Ctrl" tool_tip="Allows object to flex about the Z axis (Client-side only)"/> + <check_box label="Flexibilidade" name="Flexible1D Checkbox Ctrl" tool_tip="Allows object to flex about the Z axis (Client-side only)"/> <spinner label="Suavidade" name="FlexNumSections"/> <spinner label="Gravidade" name="FlexGravity"/> <spinner label="Arrastar" name="FlexFriction"/> @@ -438,17 +438,17 @@ <combo_box.item label="Weave" name="weave"/> </combo_box> <text name="tex scale"> - Repeats / Face + Repetições/Face </text> <spinner label="Horizontal (U)" name="TexScaleU"/> - <check_box label="Flip" name="checkbox flip s"/> + <check_box label="Inverter" name="checkbox flip s"/> <spinner label="Vertical (V)" name="TexScaleV"/> - <check_box label="Flip" name="checkbox flip t"/> - <spinner label="Rotation˚" name="TexRot"/> - <spinner label="Repeats / Meter" name="rptctrl"/> + <check_box label="Inverter" name="checkbox flip t"/> + <spinner label="Rotação˚" name="TexRot"/> + <spinner label="Repetições/Metro" name="rptctrl"/> <button label="Aplicar" label_selected="Aplicar" name="button apply"/> <text name="tex offset"> - Texture Offset + Offset de textura </text> <spinner label="Horizontal (U)" name="TexOffsetU"/> <spinner label="Vertical (V)" name="TexOffsetV"/> @@ -463,13 +463,13 @@ </panel> </panel> <panel label="Conteúdo" name="Contents"> - <button label="Novo Script" label_selected="Novo script" name="button new script"/> + <button label="Novo script" label_selected="Novo script" name="button new script"/> <button label="Autorizações" name="button permissions"/> </panel> </tab_container> <panel name="land info panel"> <text name="label_parcel_info"> - Informações do Lote + Informações do lote </text> <text name="label_area_price"> Preço: L$[PRICE] por [AREA] m² diff --git a/indra/newview/skins/default/xui/pt/floater_world_map.xml b/indra/newview/skins/default/xui/pt/floater_world_map.xml index 77d0c787e7..490a975e80 100644 --- a/indra/newview/skins/default/xui/pt/floater_world_map.xml +++ b/indra/newview/skins/default/xui/pt/floater_world_map.xml @@ -6,7 +6,7 @@ </text> </panel> <panel name="layout_panel_2"> - <button font="SansSerifSmall" label="Mostra minha localização" label_selected="Mostra minha localização" left_delta="91" name="Show My Location" tool_tip="Centrar o mapa na localização do meu avatar" /> + <button font="SansSerifSmall" label="Mostra minha localização" label_selected="Mostra minha localização" left_delta="91" name="Show My Location" tool_tip="Centrar o mapa na localização do meu avatar"/> <text name="me_label"> Eu </text> @@ -22,12 +22,12 @@ <text name="land_sale_label"> Terreno à venda </text> - <text name="by_owner_label"> - pelo dono - </text> <text name="auction_label"> leilão </text> + <text name="by_owner_label"> + pelo dono + </text> <button label="Voltar ao meu início" label_selected="Voltar ao meu início" name="Go Home" tool_tip="Teletransportar para meu início"/> <text name="Home_label"> Início @@ -39,7 +39,7 @@ <text name="pg_label"> Geral </text> - <check_box label="Mature" name="events_mature_chk"/> + <check_box initial_value="true" label="Mature" name="events_mature_chk"/> <text name="events_mature_label"> Moderado </text> @@ -63,6 +63,9 @@ <search_editor label="Regiões por nome" name="location" tool_tip="Digite o nome da região"/> <button label="Buscar" name="DoSearch" tool_tip="Buscar região"/> <button name="Clear" tool_tip="Limpar linhas e redefinir mapa"/> + <text name="events_label"> + Local: + </text> <button font="SansSerifSmall" label="Teletransportar" label_selected="Teletransporte" name="Teleport" tool_tip="Teletransportar para o lugar selecionado"/> <button font="SansSerifSmall" label="Copiar SLurl" name="copy_slurl" tool_tip="Copia a localização atual como um SLurl para usar na web."/> <button font="SansSerifSmall" label="Mostrar seleção" label_selected="Mostrar Destino" left_delta="91" name="Show Destination" tool_tip="Centrar mapa no local selecionado" width="135"/> diff --git a/indra/newview/skins/default/xui/pt/language_settings.xml b/indra/newview/skins/default/xui/pt/language_settings.xml index f25e77574d..e1de6ffea7 100644 --- a/indra/newview/skins/default/xui/pt/language_settings.xml +++ b/indra/newview/skins/default/xui/pt/language_settings.xml @@ -17,6 +17,7 @@ datetimeToCodes["month"] = "%B"; // August datetimeToCodes["mthnum"] = "%m"; // 08 datetimeToCodes["day"] = "%d"; // 31 + datetimeToCodes["sday"] = "%-d"; // 9 datetimeToCodes["hour24"] = "%H"; // 14 datetimeToCodes["hour"] = "%H"; // 14 datetimeToCodes["hour12"] = "%I"; // 02 diff --git a/indra/newview/skins/default/xui/pt/menu_inventory.xml b/indra/newview/skins/default/xui/pt/menu_inventory.xml index 1ee197ce30..1b1efd3270 100644 --- a/indra/newview/skins/default/xui/pt/menu_inventory.xml +++ b/indra/newview/skins/default/xui/pt/menu_inventory.xml @@ -61,7 +61,7 @@ <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="Remover link" name="Remove 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"/> diff --git a/indra/newview/skins/default/xui/pt/menu_inventory_add.xml b/indra/newview/skins/default/xui/pt/menu_inventory_add.xml index fc40384891..2723f39287 100644 --- a/indra/newview/skins/default/xui/pt/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/pt/menu_inventory_add.xml @@ -5,6 +5,7 @@ <menu_item_call label="Som (L$[COST])..." name="Upload Sound"/> <menu_item_call label="Animação (L$[COST])..." name="Upload Animation"/> <menu_item_call label="Volume (L$[COST] per file)..." name="Bulk Upload"/> + <menu_item_call label="Autorizações de upload padrão" name="perm prefs"/> </menu> <menu_item_call label="Nova pasta" name="New Folder"/> <menu_item_call label="Novo script" name="New Script"/> diff --git a/indra/newview/skins/default/xui/pt/menu_object.xml b/indra/newview/skins/default/xui/pt/menu_object.xml index a5969cacc3..cd1a72b896 100644 --- a/indra/newview/skins/default/xui/pt/menu_object.xml +++ b/indra/newview/skins/default/xui/pt/menu_object.xml @@ -1,6 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Object Pie"> - <menu_item_call label="Tocar" name="Object Touch"/> + <menu_item_call label="Tocar" name="Object Touch"> + <on_enable parameter="Tocar" name="EnableTouch"/> + </menu_item_call> <menu_item_call label="Editar" name="Edit..."/> <menu_item_call label="Construir" name="Build"/> <menu_item_call label="Abrir" name="Open"/> diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml index d9ff847647..33fccbedcc 100644 --- a/indra/newview/skins/default/xui/pt/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml @@ -94,7 +94,7 @@ <menu_item_call label="Scripts em modo não execução" name="Set Scripts to Not Running"/> </menu> <menu label="Opções" name="Options"> - <menu_item_call label="Definir permissões padrão de upload" name="perm prefs"/> + <menu_item_call label="Autorizações de upload padrão" name="perm prefs"/> <menu_item_check label="Mostrar permissões avançadas" name="DebugPermissions"/> <menu_item_check label="Só selecionar meus objetos" name="Select Only My Objects"/> <menu_item_check label="Só selecionar objetos móveis" name="Select Only Movable Objects"/> diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml index 5ab5de59d9..a6645d8b13 100644 --- a/indra/newview/skins/default/xui/pt/notifications.xml +++ b/indra/newview/skins/default/xui/pt/notifications.xml @@ -2729,7 +2729,7 @@ Avatar '[NAME]' saiu totalmente carregado. </notification> <notification name="AvatarRezSelfBakeNotification"> ( [EXISTENCE] segundos de vida ) -Você carregou uma textura com [RESOLUTION] para o(a) '[BODYREGION]' em [TIME] segundos. +[ACTION] de textura com [RESOLUTION] para o(a) '[BODYREGION]' em [TIME] segundos. </notification> <notification name="ConfirmLeaveCall"> Tem certeza de que quer sair desta ligação? @@ -2767,4 +2767,7 @@ Se você continuar a receber esta mensagem, consulte o [SUPPORT_SITE]. Se você tem um terreno, seu terreno pode ser seu início. Outra opção é procurar por lugares com a tag 'Infohub' no mapa. </global> + <global name="You died and have been teleported to your home location"> + Você morreu e foi reenviado ao seu início. + </global> </notifications> diff --git a/indra/newview/skins/default/xui/pt/panel_group_notices.xml b/indra/newview/skins/default/xui/pt/panel_group_notices.xml index 9ccb85cdf6..21136d06fb 100644 --- a/indra/newview/skins/default/xui/pt/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/pt/panel_group_notices.xml @@ -18,7 +18,7 @@ Cada grupo pode enviar no máximo 200 avisos/dia <text name="notice_list_none_found"> Nenhum resultado foi encontrado. </text> - <button label="Criar um novo aviso" label_selected="Criar nova notícia" name="create_new_notice" tool_tip="Criar um novo aviso"/> + <button label="Novo aviso" label_selected="Criar nova notícia" name="create_new_notice" tool_tip="Criar um novo aviso"/> <button label="Atualizar" label_selected="Atualizar lista" name="refresh_notices" tool_tip="Atualizar lista de avisos"/> <panel label="Criar nova notícia" name="panel_create_new_notice"> <text name="lbl"> diff --git a/indra/newview/skins/default/xui/pt/panel_group_roles.xml b/indra/newview/skins/default/xui/pt/panel_group_roles.xml index 9c3792ec43..c861e29624 100644 --- a/indra/newview/skins/default/xui/pt/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/pt/panel_group_roles.xml @@ -11,6 +11,9 @@ <panel.string name="help_text"> Você pode adicionar ou remover as funções designadas aos membros. Selecione vários membros, segurando a tecla Ctrl e clicando em seus nomes. </panel.string> + <panel.string name="donation_area"> + [AREA] m² + </panel.string> <filter_editor label="Filtrar por membro" name="filter_input"/> <name_list bottom_delta="-105" height="104" name="member_list"> <name_list.columns label="Membro" name="name"/> @@ -63,21 +66,15 @@ Há uma grande variedade de habilidades. <text name="static"> Nome da função </text> - <line_editor name="role_name"> - Empregados - </line_editor> + <line_editor name="role_name"/> <text name="static3"> Título da função </text> - <line_editor name="role_title"> - (esperando) - </line_editor> + <line_editor name="role_title"/> <text name="static2"> Descrição </text> - <text_editor name="role_description"> - (esperando) - </text_editor> + <text_editor name="role_description"/> <text name="static4"> Cargos desempenhados </text> @@ -88,9 +85,6 @@ Há uma grande variedade de habilidades. <scroll_list name="role_allowed_actions" tool_tip="Clique na guia Funções para ver mais detalhes"/> </panel> <panel name="actions_footer"> - <text name="static"> - Descrição da função - </text> <text_editor name="action_description"> Essa habilidade permite tirar alguem do grupo. Somente o dono do grupo poderá retirar outro dono do grupo. </text_editor> diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_media.xml b/indra/newview/skins/default/xui/pt/panel_nearby_media.xml index 8d08177eed..7d1b48ad76 100644 --- a/indra/newview/skins/default/xui/pt/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/pt/panel_nearby_media.xml @@ -23,6 +23,12 @@ <button label="Mais >>" label_selected="Menos <<" name="less_btn" tool_tip="Controles avançados"/> </panel> <panel name="nearby_media_panel"> + <text name="nearby_media_title"> + Mídia por perto + </text> + <text name="show_text"> + Mostrar: + </text> <combo_box name="show_combo"> <combo_box.item label="Tudo" name="All"/> <combo_box.item label="Neste lote" name="WithinParcel"/> @@ -36,7 +42,7 @@ <scroll_list.columns label="Nome" name="media_name"/> <scroll_list.columns label="Depurar" name="media_debug"/> </scroll_list> - <panel> + <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> <button name="stop_btn" tool_tip="Parar mídia selecionada"/> diff --git a/indra/newview/skins/default/xui/pt/panel_place_profile.xml b/indra/newview/skins/default/xui/pt/panel_place_profile.xml index 554c4d897d..af6c9ea346 100644 --- a/indra/newview/skins/default/xui/pt/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/pt/panel_place_profile.xml @@ -7,7 +7,7 @@ <string name="allocated" value="alocados"/> <string name="title_place" value="Perfil da região"/> <string name="title_teleport_history" value="Teletransportes"/> - <string name="not_available" value="(N\A)"/> + <string name="not_available" value="(N/A)"/> <string name="unknown" value="(Desconhecido)"/> <string name="public" value="(público)"/> <string name="none_text" value="(nenhum)"/> @@ -56,7 +56,7 @@ <text name="voice_value" value="Ligado"/> <text name="fly_label" value="Voar:"/> <text name="fly_value" value="Ligado"/> - <text name="push_label" value="Empurrar:"/> + <text name="push_label" value="Empurrões:"/> <text name="push_value" value="Desligado"/> <text name="build_label" value="Construir:"/> <text name="build_value" value="Ligado"/> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml index 43c970841a..5be07f4d1f 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml @@ -11,8 +11,8 @@ <check_box label="Ativado" name="enable_media"/> <slider label="Bate-papo de voz" name="Voice Volume"/> <check_box label="Ativado" name="enable_voice_check"/> - <check_box label="Autorizar auto-play de mídias" name="media_auto_play_btn" tool_tip="Marque esta opção para auto-executar mídias, se elas quiserem"/> - <check_box label="Tocar mídia anexada em outros avatares" name="media_show_on_others_btn" tool_tip="Desmarque esta opção para ocultar mídias anexadas em avatares por perto"/> + <check_box label="Autorizar auto-play de mídias" name="media_auto_play_btn" tool_tip="Marque esta opção para auto-executar mídias, se elas quiserem" value="true"/> + <check_box label="Tocar mídia anexada em outros avatares" name="media_show_on_others_btn" tool_tip="Desmarque esta opção para ocultar mídias anexadas em avatares por perto" value="true"/> <text name="voice_chat_settings"> Configuração de bate-papo de voz </text> @@ -28,6 +28,12 @@ <panel.string name="default_text"> Padrão </panel.string> + <panel.string name="default system device"> + Dispositivo padrão do sistema + </panel.string> + <panel.string name="no device"> + Nenhum + </panel.string> <text name="Input"> Entrada </text> diff --git a/indra/newview/skins/default/xui/pt/panel_region_general.xml b/indra/newview/skins/default/xui/pt/panel_region_general.xml index d1a5eaa11e..e06f3c74bf 100644 --- a/indra/newview/skins/default/xui/pt/panel_region_general.xml +++ b/indra/newview/skins/default/xui/pt/panel_region_general.xml @@ -18,26 +18,26 @@ <text name="region_type"> desconhecido </text> - <check_box label="Bloquear Terraform" name="block_terraform_check"/> - <check_box label="Bloquear Vôo" name="block_fly_check"/> - <check_box label="Permitir Dano" name="allow_damage_check"/> - <check_box label="Restringir Empurrar" name="restrict_pushobject"/> - <check_box label="Permitir Revenda de Terra" name="allow_land_resell_check"/> - <check_box label="Permitir Unir/Dividir Terra" name="allow_parcel_changes_check"/> - <check_box label="Bloquear Mostrar Terra na Busca" name="block_parcel_search_check" tool_tip="Permitir que as pessoas vejam esta região e seus lotes nos resultados de busca"/> - <spinner label="Limit do Agente" name="agent_limit_spin"/> - <spinner label="Objeto Bonus" name="object_bonus_spin"/> + <check_box label="Bloquear terraplenagem" name="block_terraform_check"/> + <check_box label="Bloquear voos" name="block_fly_check"/> + <check_box label="Permitir dano" name="allow_damage_check"/> + <check_box label="Restringir empurrões" name="restrict_pushobject"/> + <check_box label="Permitir revenda do terreno" name="allow_land_resell_check"/> + <check_box label="Permitir junção/divisão do terreno" name="allow_parcel_changes_check"/> + <check_box label="Bloquear exibição do terreno na busca" name="block_parcel_search_check" tool_tip="Permitir que as pessoas vejam esta região e seus lotes nos resultados de busca"/> + <spinner label="Limite do agente" name="agent_limit_spin"/> + <spinner label="Bônus de objetos" name="object_bonus_spin"/> <text label="Maturidade" name="access_text"> Classificação: </text> <icons_combo_box label="Mature" name="access_combo"> - <icons_combo_box.item label="Adult" name="Adult" value="42"/> - <icons_combo_box.item label="Mature" name="Mature" value="21"/> - <icons_combo_box.item label="PG" name="PG" value="13"/> + <icons_combo_box.item label="Adulto" name="Adult" value="42"/> + <icons_combo_box.item label="Moderado" name="Mature" value="21"/> + <icons_combo_box.item label="Geral" name="PG" value="13"/> </icons_combo_box> <button label="Aplicar" name="apply_btn"/> <button label="Teletransportar um residente para início..." name="kick_btn"/> <button label="Teletransportar todos para início..." name="kick_all_btn"/> - <button label="Enviar Mensagem para a Região..." name="im_btn"/> - <button label="Gerenciar Telehub..." name="manage_telehub_btn"/> + <button label="Enviar mensagem para a região..." name="im_btn"/> + <button label="Gerenciar telehub..." name="manage_telehub_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_teleport_history.xml b/indra/newview/skins/default/xui/pt/panel_teleport_history.xml index ba83fee7ba..b77064a1ff 100644 --- a/indra/newview/skins/default/xui/pt/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/pt/panel_teleport_history.xml @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="Teleport History"> <accordion name="history_accordion"> + <no_matched_tabs_text name="no_matched_teleports_msg" value="Não encontrou o que procura? Tente fazer uma [secondlife:///app/search/groups/[SEARCH_TERM] Busca]."/> + <no_visible_tabs_text name="no_teleports_msg" value="Histórico de teletransportes vazio. Tente fazer uma [secondlife:///app/search/groups Busca]."/> <accordion_tab name="today" title="Hoje"/> <accordion_tab name="yesterday" title="Ontem"/> <accordion_tab name="2_days_ago" title="2 dias atrás"/> - 5 <accordion_tab name="3_days_ago" title="3 dias atrás"/> <accordion_tab name="4_days_ago" title="4 dias atrás"/> <accordion_tab name="5_days_ago" title="5 dias atrás"/> diff --git a/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml index 8e880588e9..5af3a73d3d 100644 --- a/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml @@ -23,7 +23,7 @@ </panel.string> <text name="title" value="Perfil do item"/> <text name="origin" value="(Inventário)"/> - <panel label=""> + <panel label="" name="item_profile"> <text name="LabelItemNameTitle"> Nome: </text> diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index 9d9f33fdc8..4bf2bda248 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -184,6 +184,7 @@ <string name="TooltipMustSingleDrop"> Apenas um item único pode ser arrastado para este local </string> + <string name="TooltipPrice" value="L$[AMOUNT]"/> <string name="TooltipHttpUrl"> Clique para ver a página web </string> @@ -236,7 +237,6 @@ Clique para ativar no secondlife:// comando </string> <string name="CurrentURL" value="URL atual: [CurrentURL]"/> - <string name="TooltipPrice" value="L$[AMOUNT]: "/> <string name="SLurlLabelTeleport"> Teletransportar para </string> @@ -645,6 +645,9 @@ <string name="worldmap_offline"> Offline </string> + <string name="worldmap_item_tooltip_format"> + L$[PRICE] por [AREA] m² + </string> <string name="worldmap_results_none_found"> Nenhum encontrado. </string> @@ -885,12 +888,57 @@ <string name="invalid_not_worn"> inválido </string> + <string name="create_new_shape"> + Criar novo físico + </string> + <string name="create_new_skin"> + Criar pele nova + </string> + <string name="create_new_hair"> + Criar cabelo novo + </string> + <string name="create_new_eyes"> + Criar olhos novos + </string> + <string name="create_new_shirt"> + Criar camisa nova + </string> + <string name="create_new_pants"> + Criar calças novas + </string> + <string name="create_new_shoes"> + Criar sapatos novos + </string> + <string name="create_new_socks"> + Criar meias novas + </string> + <string name="create_new_jacket"> + Criar jaqueta nova + </string> + <string name="create_new_gloves"> + Criar luvas novas + </string> + <string name="create_new_undershirt"> + Criar camiseta nova + </string> + <string name="create_new_underpants"> + Criar roupa de baixo nova + </string> + <string name="create_new_skirt"> + Criar saia nova + </string> + <string name="create_new_alpha"> + Criar Alpha novo + </string> + <string name="create_new_tattoo"> + Criar nova tatuagem + </string> + <string name="create_new_invalid"> + inválido + </string> <string name="NewWearable"> Novo [WEARABLE_ITEM] </string> - <string name="CreateNewWearable"> - Criar [WEARABLE_TYPE] - </string> <string name="next"> Próximo </string> @@ -989,6 +1037,7 @@ <string name="AnimFlagStop" value="Parar animação"/> <string name="AnimFlagStart" value="Iniciar animação"/> <string name="Wave" value="Acenar"/> + <string name="GestureActionNone" value="Nenhum"/> <string name="HelloAvatar" value="Olá, avatar!"/> <string name="ViewAllGestures" value="Ver todos>>"/> <string name="GetMoreGestures" value="Mais >>"/> @@ -1074,6 +1123,9 @@ <string name="InvFolder Current Outfit"> Look atual </string> + <string name="InvFolder Initial Outfits"> + Looks iniciais + </string> <string name="InvFolder My Outfits"> Meus looks </string> @@ -1393,6 +1445,7 @@ <string name="SummaryForTheWeek" value="Resumo para esta semana, com início em"/> <string name="NextStipendDay" value="Próximo dia de salário é"/> <string name="GroupIndividualShare" value="Grupo Divisão individualI"/> + <string name="GroupColumn" value="Grupo"/> <string name="Balance"> Balanço </string> @@ -1607,10 +1660,10 @@ O residente para o qual escreveu está no modo 'ocupado', ou seja, ele prefere não receber nada no momento. Sua mensagem será exibida como uma MI mais tarde. </string> <string name="NoOutfits"> - Você ainda não tem nenhum look. Tente fazer uma [secondlife:///app/search/groups Busca]. + Você ainda não tem nenhum look. Tente encontrar um na [secondlife:///app/search/groups Busca]. </string> <string name="NoOutfitsTabsMatched"> - Não encontrou o que procura? Tente buscar no [secondlife:///app/search/people/[SEARCH_TERM] Search]. + Não encontrou o que procura? Tente fazer uma [secondlife:///app/search/people/[SEARCH_TERM] Busca]. </string> <string name="MuteByName"> (por nome) @@ -3531,6 +3584,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="group_role_owners"> Proprietários </string> + <string name="group_member_status_online"> + Conectado + </string> <string name="uploading_abuse_report"> Carregando... @@ -3584,9 +3640,15 @@ Denunciar abuso <string name="Invalid Wearable"> Item inválido </string> + <string name="New Gesture"> + Novo gesto + </string> <string name="New Script"> Novo script </string> + <string name="New Note"> + Nova nota + </string> <string name="New Folder"> Nova pasta </string> @@ -3644,6 +3706,15 @@ Denunciar abuso <string name="Male - Wow"> Wow - masculino </string> + <string name="Female - Chuckle"> + Engraçado - Feminino + </string> + <string name="Female - Cry"> + Chorar - Feminino + </string> + <string name="Female - Embarrassed"> + Com vergonha - Feminino + </string> <string name="Female - Excuse me"> Perdão - fem </string> @@ -3662,9 +3733,21 @@ Denunciar abuso <string name="Female - Hey"> Ôpa - feminino </string> + <string name="Female - Hey baby"> + E aí, beliza? - Feminino + </string> <string name="Female - Laugh"> Risada - feminina </string> + <string name="Female - Looking good"> + Que chique - Feminino + </string> + <string name="Female - Over here"> + Acenar - Feminino + </string> + <string name="Female - Please"> + Por favor - Feminino + </string> <string name="Female - Repulsed"> Quero distância! - feminino </string> @@ -3714,4 +3797,46 @@ Denunciar abuso <string name="dateTimePM"> PM </string> + <string name="LocalEstimateUSD"> + US$ [AMOUNT] + </string> + <string name="Membership"> + Plano + </string> + <string name="Roles"> + Cargos + </string> + <string name="Group Identity"> + Identidade do lote + </string> + <string name="Parcel Management"> + Gestão do lote + </string> + <string name="Parcel Identity"> + ID do lote + </string> + <string name="Parcel Settings"> + Configurações do lote + </string> + <string name="Parcel Powers"> + Poderes do lote + </string> + <string name="Parcel Access"> + Acesso ao lote + </string> + <string name="Parcel Content"> + Conteúdo do lote + </string> + <string name="Object Management"> + Gestão de objetos + </string> + <string name="Accounting"> + Contabilidade + </string> + <string name="Notices"> + Avisos + </string> + <string name="Chat"> + Bate-papo + </string> </strings> diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp index 1c29feec5f..347a5e8ab8 100644 --- a/indra/newview/tests/lllogininstance_test.cpp +++ b/indra/newview/tests/lllogininstance_test.cpp @@ -226,6 +226,16 @@ S32 LLNotification::getSelectedOption(const LLSD& notification, const LLSD& resp return response.asInteger(); } +//----------------------------------------------------------------------------- +#include "../llmachineid.h" +unsigned char gMACAddress[MAC_ADDRESS_BYTES] = {77,21,46,31,89,2}; + +S32 LLMachineID::getUniqueID(unsigned char *unique_id, size_t len) +{ + memcpy(unique_id, gMACAddress, len); + return 1; +} +//----------------------------------------------------------------------------- // misc std::string xml_escape_string(const std::string& in) { diff --git a/indra/newview/tests/llmediadataclient_test.cpp b/indra/newview/tests/llmediadataclient_test.cpp index 33d413bd21..05e178653b 100644 --- a/indra/newview/tests/llmediadataclient_test.cpp +++ b/indra/newview/tests/llmediadataclient_test.cpp @@ -70,8 +70,8 @@ #define MEDIA_DATA "\ <array> \ -<string>foo</string> \ -<string>bar</string> \ +<string>http://foo.example.com</string> \ +<string>http://bar.example.com</string> \ <string>baz</string> \ </array>" @@ -167,6 +167,8 @@ public: { return mRep["media_data"].size(); } virtual LLSD getMediaDataLLSD(U8 index) const { return mRep["media_data"][(LLSD::Integer)index]; } + virtual bool isCurrentMediaUrl(U8 index, const std::string &url) const + { return (mRep["media_data"][(LLSD::Integer)index].asString() == url); } virtual LLUUID getID() const { return mRep["uuid"]; } virtual void mediaNavigateBounceBack(U8 index) @@ -567,38 +569,39 @@ namespace tut mdc->fetchMedia(o2); mdc->fetchMedia(o3); mdc->fetchMedia(o4); + + ensure("is in queue 1", mdc->isInQueue(o1)); + ensure("is in queue 2", mdc->isInQueue(o2)); + ensure("is in queue 3", mdc->isInQueue(o3)); + ensure("is in queue 4", mdc->isInQueue(o4)); + ensure("post records", gPostRecords->size(), 0); - // and mark the second and fourth ones dead. + // and mark the second and fourth ones dead. Call removeFromQueue when marking dead, since this is what LLVOVolume will do. dynamic_cast<LLMediaDataClientObjectTest*>(static_cast<LLMediaDataClientObject*>(o2))->markDead(); + mdc->removeFromQueue(o2); dynamic_cast<LLMediaDataClientObjectTest*>(static_cast<LLMediaDataClientObject*>(o4))->markDead(); + mdc->removeFromQueue(o4); + // The removeFromQueue calls should remove the second and fourth ones ensure("is in queue 1", mdc->isInQueue(o1)); - ensure("is in queue 2", mdc->isInQueue(o2)); + ensure("is not in queue 2", !mdc->isInQueue(o2)); ensure("is in queue 3", mdc->isInQueue(o3)); - ensure("is in queue 4", mdc->isInQueue(o4)); + ensure("is not in queue 4", !mdc->isInQueue(o4)); ensure("post records", gPostRecords->size(), 0); ::pump_timers(); - // The first tick should remove the first one + // The first tick should process the first item ensure("is not in queue 1", !mdc->isInQueue(o1)); - ensure("is in queue 2", mdc->isInQueue(o2)); + ensure("is not in queue 2", !mdc->isInQueue(o2)); ensure("is in queue 3", mdc->isInQueue(o3)); - ensure("is in queue 4", mdc->isInQueue(o4)); + ensure("is not in queue 4", !mdc->isInQueue(o4)); ensure("post records", gPostRecords->size(), 1); ::pump_timers(); - // The second tick should skip the second and remove the third - ensure("is not in queue 2", !mdc->isInQueue(o2)); + // The second tick should process the third, emptying the queue ensure("is not in queue 3", !mdc->isInQueue(o3)); - ensure("is in queue 4", mdc->isInQueue(o4)); - ensure("post records", gPostRecords->size(), 2); - - ::pump_timers(); - - // The third tick should skip the fourth one and empty the queue. - ensure("is not in queue 4", !mdc->isInQueue(o4)); ensure("post records", gPostRecords->size(), 2); ensure("queue empty", mdc->isEmpty()); @@ -709,7 +712,7 @@ namespace tut // queue up all 4 objects. The first two should be in the sorted // queue [2 1], the second in the round-robin queue. The queues // are serviced interleaved, so we should expect: - // 2, 4, 1, 3 + // 2, 3, 1, 4 mdc->fetchMedia(o1); mdc->fetchMedia(o2); mdc->fetchMedia(o3); @@ -728,8 +731,8 @@ namespace tut ++tick_num; // 1 The first tick should remove object 2 - ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2)); ensure(STR(tick_num) + ". is in queue 1", mdc->isInQueue(o1)); + ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2)); ensure(STR(tick_num) + ". is in queue 3", mdc->isInQueue(o3)); ensure(STR(tick_num) + ". is in queue 4", mdc->isInQueue(o4)); ensure(STR(tick_num) + ". post records", gPostRecords->size(), 1); @@ -738,22 +741,21 @@ namespace tut ::pump_timers(); ++tick_num; - // 2 The second tick should send object 4, but it will still be - // "in the queue" - ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2)); + // 2 The second tick should send object 3 ensure(STR(tick_num) + ". is in queue 1", mdc->isInQueue(o1)); - ensure(STR(tick_num) + ". is in queue 3", mdc->isInQueue(o3)); + ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2)); + ensure(STR(tick_num) + ". is not in queue 3", !mdc->isInQueue(o3)); ensure(STR(tick_num) + ". is in queue 4", mdc->isInQueue(o4)); ensure(STR(tick_num) + ". post records", gPostRecords->size(), 2); - ensure(STR(tick_num) + ". post object id", (*gPostRecords)[1]["body"][LLTextureEntry::OBJECT_ID_KEY].asUUID(), LLUUID(VALID_OBJECT_ID_4)); + ensure(STR(tick_num) + ". post object id", (*gPostRecords)[1]["body"][LLTextureEntry::OBJECT_ID_KEY].asUUID(), LLUUID(VALID_OBJECT_ID_3)); ::pump_timers(); ++tick_num; // 3 The third tick should remove object 1 - ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2)); ensure(STR(tick_num) + ". is not in queue 1", !mdc->isInQueue(o1)); - ensure(STR(tick_num) + ". is in queue 3", mdc->isInQueue(o3)); + ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2)); + ensure(STR(tick_num) + ". is not in queue 3", !mdc->isInQueue(o3)); ensure(STR(tick_num) + ". is in queue 4", mdc->isInQueue(o4)); ensure(STR(tick_num) + ". post records", gPostRecords->size(), 3); ensure(STR(tick_num) + ". post object id", (*gPostRecords)[2]["body"][LLTextureEntry::OBJECT_ID_KEY].asUUID(), LLUUID(VALID_OBJECT_ID_1)); @@ -761,22 +763,20 @@ namespace tut ::pump_timers(); ++tick_num; - // 4 The fourth tick should send object 3, but it will still be - // "in the queue" - ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2)); + // 4 The fourth tick should send object 4 ensure(STR(tick_num) + ". is not in queue 1", !mdc->isInQueue(o1)); - ensure(STR(tick_num) + ". is in queue 3", mdc->isInQueue(o3)); - ensure(STR(tick_num) + ". is in queue 4", mdc->isInQueue(o4)); + ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2)); + ensure(STR(tick_num) + ". is not in queue 3", !mdc->isInQueue(o3)); + ensure(STR(tick_num) + ". is not in queue 4", !mdc->isInQueue(o4)); ensure(STR(tick_num) + ". post records", gPostRecords->size(), 4); - ensure(STR(tick_num) + ". post object id", (*gPostRecords)[3]["body"][LLTextureEntry::OBJECT_ID_KEY].asUUID(), LLUUID(VALID_OBJECT_ID_3)); + ensure(STR(tick_num) + ". post object id", (*gPostRecords)[3]["body"][LLTextureEntry::OBJECT_ID_KEY].asUUID(), LLUUID(VALID_OBJECT_ID_4)); ::pump_timers(); ++tick_num; - // 5 The fifth tick should now identify objects 3 and 4 as no longer - // needing "updating", and remove them from the queue - ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2)); + // 5 The fifth tick should not change the state of anything. ensure(STR(tick_num) + ". is not in queue 1", !mdc->isInQueue(o1)); + ensure(STR(tick_num) + ". is not in queue 2", !mdc->isInQueue(o2)); ensure(STR(tick_num) + ". is not in queue 3", !mdc->isInQueue(o3)); ensure(STR(tick_num) + ". is not in queue 4", !mdc->isInQueue(o4)); ensure(STR(tick_num) + ". post records", gPostRecords->size(), 4); @@ -926,7 +926,7 @@ namespace tut // But, we need to clear the queue, or else we won't destroy MDC... // this is a strange interplay between the queue timer and the MDC - ensure("o2 couldn't be removed from queue", mdc->removeFromQueue(o2)); + mdc->removeFromQueue(o2); // tick ::pump_timers(); } @@ -935,4 +935,41 @@ namespace tut ensure("refcount of o3", o3->getNumRefs(), 1); ensure("refcount of o4", o4->getNumRefs(), 1); } + + template<> template<> + void mediadataclient_object_t::test<13>() + { + // + // Test supression of redundant navigates. + // + LOG_TEST(13); + + LLMediaDataClientObject::ptr_t o1 = new LLMediaDataClientObjectTest(_DATA(VALID_OBJECT_ID_1,"1.0","true")); + { + LLPointer<LLObjectMediaNavigateClient> mdc = new LLObjectMediaNavigateClient(NO_PERIOD,NO_PERIOD); + const char *TEST_URL = "http://foo.example.com"; + const char *TEST_URL_2 = "http://example.com"; + mdc->navigate(o1, 0, TEST_URL); + mdc->navigate(o1, 1, TEST_URL); + mdc->navigate(o1, 0, TEST_URL_2); + mdc->navigate(o1, 1, TEST_URL_2); + + // This should add two requests to the queue, one for face 0 of the object and one for face 1. + + ensure("before pump: 1 is in queue", mdc->isInQueue(o1)); + + ::pump_timers(); + + ensure("after first pump: 1 is in queue", mdc->isInQueue(o1)); + + ::pump_timers(); + + ensure("after second pump: 1 is not in queue", !mdc->isInQueue(o1)); + + ensure("first post has correct url", (*gPostRecords)[0]["body"][LLMediaEntry::CURRENT_URL_KEY].asString(), std::string(TEST_URL_2)); + ensure("second post has correct url", (*gPostRecords)[1]["body"][LLMediaEntry::CURRENT_URL_KEY].asString(), std::string(TEST_URL_2)); + + } + } + } diff --git a/indra/newview/tests/llsecapi_test.cpp b/indra/newview/tests/llsecapi_test.cpp index caa1461987..8f2f299fc4 100644 --- a/indra/newview/tests/llsecapi_test.cpp +++ b/indra/newview/tests/llsecapi_test.cpp @@ -35,6 +35,7 @@ #include "../llviewernetwork.h" #include "../test/lltut.h" #include "../llsecapi.h" +#include "../llsechandler_basic.h" #include "../../llxml/llcontrol.h" @@ -56,82 +57,21 @@ std::string LLControlGroup::getString(const std::string& name) LLControlGroup gSavedSettings("test"); -class LLSecAPIBasicHandler : public LLSecAPIHandler -{ -protected: - LLPointer<LLCertificateChain> mCertChain; - LLPointer<LLCertificate> mCert; - LLPointer<LLCertificateStore> mCertStore; - LLSD mLLSD; - -public: - LLSecAPIBasicHandler() {} - - virtual ~LLSecAPIBasicHandler() {} - - // instantiate a certificate from a pem string - virtual LLPointer<LLCertificate> getCertificate(const std::string& pem_cert) - { - return mCert; - } - - - // instiate a certificate from an openssl X509 structure - virtual LLPointer<LLCertificate> getCertificate(X509* openssl_cert) - { - return mCert; - } - - - // instantiate a chain from an X509_STORE_CTX - virtual LLPointer<LLCertificateChain> getCertificateChain(const X509_STORE_CTX* chain) - { - return mCertChain; - } - - // instantiate a cert store given it's id. if a persisted version - // exists, it'll be loaded. If not, one will be created (but not - // persisted) - virtual LLPointer<LLCertificateStore> getCertificateStore(const std::string& store_id) - { - return mCertStore; - } - - // persist data in a protected store - virtual void setProtectedData(const std::string& data_type, - const std::string& data_id, - const LLSD& data) {} - - // retrieve protected data - virtual LLSD getProtectedData(const std::string& data_type, - const std::string& data_id) - { - return mLLSD; - } - - virtual void deleteProtectedData(const std::string& data_type, - const std::string& data_id) - { - } - - virtual LLPointer<LLCredential> createCredential(const std::string& grid, - const LLSD& identifier, - const LLSD& authenticator) - { - LLPointer<LLCredential> cred = NULL; - return cred; - } - - virtual LLPointer<LLCredential> loadCredential(const std::string& grid) - { - LLPointer<LLCredential> cred = NULL; - return cred; - } - - virtual void saveCredential(LLPointer<LLCredential> cred, bool save_authenticator) {} - - virtual void deleteCredential(LLPointer<LLCredential> cred) {} -}; + +LLSecAPIBasicHandler::LLSecAPIBasicHandler() {} +void LLSecAPIBasicHandler::init() {} +LLSecAPIBasicHandler::~LLSecAPIBasicHandler() {} +LLPointer<LLCertificate> LLSecAPIBasicHandler::getCertificate(const std::string& pem_cert) { return NULL; } +LLPointer<LLCertificate> LLSecAPIBasicHandler::getCertificate(X509* openssl_cert) { return NULL; } +LLPointer<LLCertificateChain> LLSecAPIBasicHandler::getCertificateChain(const X509_STORE_CTX* chain) { return NULL; } +LLPointer<LLCertificateStore> LLSecAPIBasicHandler::getCertificateStore(const std::string& store_id) { return NULL; } +void LLSecAPIBasicHandler::setProtectedData(const std::string& data_type, const std::string& data_id, const LLSD& data) {} +LLSD LLSecAPIBasicHandler::getProtectedData(const std::string& data_type, const std::string& data_id) { return LLSD(); } +void LLSecAPIBasicHandler::deleteProtectedData(const std::string& data_type, const std::string& data_id) {} +LLPointer<LLCredential> LLSecAPIBasicHandler::createCredential(const std::string& grid, const LLSD& identifier, const LLSD& authenticator) { return NULL; } +LLPointer<LLCredential> LLSecAPIBasicHandler::loadCredential(const std::string& grid) { return NULL; } +void LLSecAPIBasicHandler::saveCredential(LLPointer<LLCredential> cred, bool save_authenticator) {} +void LLSecAPIBasicHandler::deleteCredential(LLPointer<LLCredential> cred) {} // ------------------------------------------------------------------------------------------- // TUT diff --git a/indra/newview/tests/llslurl_test.cpp b/indra/newview/tests/llslurl_test.cpp index 803020dc7a..4db7efa090 100644 --- a/indra/newview/tests/llslurl_test.cpp +++ b/indra/newview/tests/llslurl_test.cpp @@ -79,6 +79,11 @@ LLSD LLControlGroup::getLLSD(const std::string& name) return LLSD(); } +LLPointer<LLControlVariable> LLControlGroup::getControl(const std::string& name) +{ + ctrl_name_table_t::iterator iter = mNameTable.find(name); + return iter == mNameTable.end() ? LLPointer<LLControlVariable>() : iter->second; +} LLControlGroup gSavedSettings("test"); diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp index 5fba5eb69c..98e4c994b0 100644 --- a/indra/newview/tests/llviewernetwork_test.cpp +++ b/indra/newview/tests/llviewernetwork_test.cpp @@ -79,6 +79,11 @@ LLSD LLControlGroup::getLLSD(const std::string& name) return LLSD(); } +LLPointer<LLControlVariable> LLControlGroup::getControl(const std::string& name) +{ + ctrl_name_table_t::iterator iter = mNameTable.find(name); + return iter == mNameTable.end() ? LLPointer<LLControlVariable>() : iter->second; +} LLControlGroup gSavedSettings("test"); diff --git a/indra/win_crash_logger/llcrashloggerwindows.cpp b/indra/win_crash_logger/llcrashloggerwindows.cpp index 2884231299..01c750487e 100644 --- a/indra/win_crash_logger/llcrashloggerwindows.cpp +++ b/indra/win_crash_logger/llcrashloggerwindows.cpp @@ -145,7 +145,7 @@ void LLCrashLoggerWindows::ProcessCaption(HWND hWnd) TCHAR header[MAX_STRING]; std::string final; GetWindowText(hWnd, templateText, sizeof(templateText)); - final = llformat(ll_convert_wide_to_string(templateText).c_str(), gProductName.c_str()); + final = llformat(ll_convert_wide_to_string(templateText, CP_ACP).c_str(), gProductName.c_str()); ConvertLPCSTRToLPWSTR(final.c_str(), header); SetWindowText(hWnd, header); } @@ -158,7 +158,7 @@ void LLCrashLoggerWindows::ProcessDlgItemText(HWND hWnd, int nIDDlgItem) TCHAR header[MAX_STRING]; std::string final; GetDlgItemText(hWnd, nIDDlgItem, templateText, sizeof(templateText)); - final = llformat(ll_convert_wide_to_string(templateText).c_str(), gProductName.c_str()); + final = llformat(ll_convert_wide_to_string(templateText, CP_ACP).c_str(), gProductName.c_str()); ConvertLPCSTRToLPWSTR(final.c_str(), header); SetDlgItemText(hWnd, nIDDlgItem, header); } @@ -201,7 +201,7 @@ bool handle_button_click(WORD button_id) wbuffer, // pointer to buffer for text 20000 // maximum size of string ); - std::string user_text(ll_convert_wide_to_string(wbuffer)); + std::string user_text(ll_convert_wide_to_string(wbuffer, CP_ACP)); // Activate and show the window. ShowWindow(gHwndProgress, SW_SHOW); // Try doing this second to make the progress window go frontmost. |