diff options
Diffstat (limited to 'indra')
297 files changed, 7207 insertions, 5050 deletions
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/llstring.cpp b/indra/llcommon/llstring.cpp index 1561bda201..2693c0e22b 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; 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/stdenums.h b/indra/llcommon/stdenums.h index 1a5678dde1..e0565204d4 100644 --- a/indra/llcommon/stdenums.h +++ b/indra/llcommon/stdenums.h @@ -119,8 +119,8 @@ enum EObjectPropertiesExtraID  enum EAddPosition  {  	ADD_TOP, -	ADD_SORTED, -	ADD_BOTTOM +	ADD_BOTTOM, +	ADD_DEFAULT  };  enum LLGroupChange diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index 36874a5d48..ac50411de8 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -364,13 +364,6 @@ U32 LLCurl::Easy::report(CURLcode code)  		responseCode = 499;  		responseReason = strerror(code) + " : " + mErrorBuffer;  	} -		 -	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)  	{	 @@ -469,6 +462,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(); @@ -1061,3 +1061,4 @@ void LLCurl::cleanupClass()  	curl_global_cleanup();  } +const unsigned int LLCurl::MAX_REDIRECTS = 5; diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h index b6a637ae5b..20ca87c87b 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 6eb5e0eff4..849318ccee 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) @@ -276,6 +280,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]; @@ -292,8 +305,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))  		{ @@ -313,7 +331,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; @@ -338,11 +367,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(); @@ -946,37 +983,43 @@ LLFontGL::VAlign LLFontGL::vAlignFromName(const std::string& name)  //static  LLFontGL* LLFontGL::getFontMonospace()  { -	return getFont(LLFontDescriptor("Monospace","Monospace",0)); +	static LLFontGL* fontp = getFont(LLFontDescriptor("Monospace","Monospace",0)); +	return fontp;  }  //static  LLFontGL* LLFontGL::getFontSansSerifSmall()  { -	return getFont(LLFontDescriptor("SansSerif","Small",0)); +	static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Small",0)); +	return fontp;  }  //static  LLFontGL* LLFontGL::getFontSansSerif()  { -	return getFont(LLFontDescriptor("SansSerif","Medium",0)); +	static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Medium",0)); +	return fontp;  }  //static  LLFontGL* LLFontGL::getFontSansSerifBig()  { -	return getFont(LLFontDescriptor("SansSerif","Large",0)); +	static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Large",0)); +	return fontp;  }  //static   LLFontGL* LLFontGL::getFontSansSerifHuge()  { -	return getFont(LLFontDescriptor("SansSerif","Huge",0)); +	static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Large",0)); +	return fontp;  }  //static   LLFontGL* LLFontGL::getFontSansSerifBold()  { -	return getFont(LLFontDescriptor("SansSerif","Medium",BOLD)); +	static LLFontGL* fontp = getFont(LLFontDescriptor("SansSerif","Medium",BOLD)); +	return fontp;  }  //static @@ -1091,95 +1134,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..236594d602 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -1122,7 +1122,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 +1170,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 +1206,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..c4f5d91e1a 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" @@ -241,7 +241,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 e22f8d2ddc..1a48c8a06c 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)  			{ diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 5597b23c69..eb2c54198d 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -851,9 +851,9 @@ void LLRender::translateUI(F32 x, F32 y, F32 z)  		llerrs << "Need to push a UI translation frame before offsetting" << llendl;  	} -	mUIOffset.front().mV[0] += x; -	mUIOffset.front().mV[1] += y; -	mUIOffset.front().mV[2] += z; +	mUIOffset.back().mV[0] += x; +	mUIOffset.back().mV[1] += y; +	mUIOffset.back().mV[2] += z;  }  void LLRender::scaleUI(F32 x, F32 y, F32 z) @@ -863,27 +863,27 @@ void LLRender::scaleUI(F32 x, F32 y, F32 z)  		llerrs << "Need to push a UI transformation frame before scaling." << llendl;  	} -	mUIScale.front().scaleVec(LLVector3(x,y,z)); +	mUIScale.back().scaleVec(LLVector3(x,y,z));  }  void LLRender::pushUIMatrix()  {  	if (mUIOffset.empty())  	{ -		mUIOffset.push_front(LLVector3(0,0,0)); +		mUIOffset.push_back(LLVector3(0,0,0));  	}  	else  	{ -		mUIOffset.push_front(mUIOffset.front()); +		mUIOffset.push_back(mUIOffset.back());  	}  	if (mUIScale.empty())  	{ -		mUIScale.push_front(LLVector3(1,1,1)); +		mUIScale.push_back(LLVector3(1,1,1));  	}  	else  	{ -		mUIScale.push_front(mUIScale.front()); +		mUIScale.push_back(mUIScale.back());  	}  } @@ -893,26 +893,26 @@ void LLRender::popUIMatrix()  	{  		llerrs << "UI offset stack blown." << llendl;  	} -	mUIOffset.pop_front(); -	mUIScale.pop_front(); +	mUIOffset.pop_back(); +	mUIScale.pop_back();  }  LLVector3 LLRender::getUITranslation()  {  	if (mUIOffset.empty())  	{ -		llerrs << "UI offset stack empty." << llendl; +		return LLVector3::zero;  	} -	return mUIOffset.front(); +	return mUIOffset.back();  }  LLVector3 LLRender::getUIScale()  {  	if (mUIScale.empty())  	{ -		llerrs << "UI scale stack empty." << llendl; +		return LLVector3(1.f, 1.f, 1.f);  	} -	return mUIScale.front(); +	return mUIScale.back();  } @@ -922,8 +922,8 @@ void LLRender::loadUIIdentity()  	{  		llerrs << "Need to push UI translation frame before clearing offset." << llendl;  	} -	mUIOffset.front().setVec(0,0,0); -	mUIScale.front().setVec(1,1,1); +	mUIOffset.back().setVec(0,0,0); +	mUIScale.back().setVec(1,1,1);  }  void LLRender::setColorMask(bool writeColor, bool writeAlpha) @@ -1210,18 +1210,79 @@ void LLRender::vertex3f(const GLfloat& x, const GLfloat& y, const GLfloat& z)  	}  	else  	{ -		LLVector3 vert = (LLVector3(x,y,z)+mUIOffset.front()).scaledVec(mUIScale.front()); +		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)  	{ -		mVerticesp[mCount] = mVerticesp[mCount-1]; -		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)  {  	vertex3f((GLfloat) x, (GLfloat) y, 0);	 diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h index f6c87aa1db..0fa503182e 100644 --- a/indra/llrender/llrender.h +++ b/indra/llrender/llrender.h @@ -317,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); @@ -373,8 +377,8 @@ private:  	F32				mMaxAnisotropy; -	std::list<LLVector3> mUIOffset; -	std::list<LLVector3> mUIScale; +	std::vector<LLVector3> mUIOffset; +	std::vector<LLVector3> mUIScale;  }; 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..f26a380e5f 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(); @@ -140,6 +141,8 @@ public:  	const LLAccordionCtrlTab* getSelectedTab() const { return mSelectedTab; } +	bool getFitParent() const {return mFitParent;} +  private:  	void	initNoTabsWidget(const LLTextBox::Params& tb_params);  	void	updateNoTabsHelpTextVisibility(); diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp index 0cccd4e6de..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" @@ -372,9 +373,11 @@ LLAccordionCtrlTab::LLAccordionCtrlTab(const LLAccordionCtrlTab::Params&p)  	mHeader = LLUICtrlFactory::create<LLAccordionCtrlTabHeader>(headerParams);  	addChild(mHeader, 1); -	if (mSelectionEnabled) +	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); @@ -599,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;  @@ -699,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; @@ -710,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);  } diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h index 1344ce0a30..00fb276f19 100644 --- a/indra/llui/llaccordionctrltab.h +++ b/indra/llui/llaccordionctrltab.h @@ -220,6 +220,7 @@ protected:  	LLView* findContainerView	();  	void selectOnFocusReceived(); +	void deselectOnFocusLost();  private: 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/llflatlistview.cpp b/indra/llui/llflatlistview.cpp index 90c6f15d23..70558f8eb8 100644 --- a/indra/llui/llflatlistview.cpp +++ b/indra/llui/llflatlistview.cpp @@ -615,7 +615,7 @@ void LLFlatListView::onItemMouseClick(item_pair_t* item_pair, MASK mask)  	//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); +	selectItemPair(item_pair, select_item);  	else  		selectItemPair(item_pair, true);  } @@ -1078,25 +1078,6 @@ 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(!visible);  		mNoItemsCommentTextbox->setVisible(visible);  	} diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 39a6855273..22d6f6ca52 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()  { diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 3ea035777c..42f422f91c 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(); 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..12007f7b52 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -218,6 +218,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 +928,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 )  { 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/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..9ab2cfef4b 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -541,23 +541,7 @@ BOOL LLScrollListCtrl::addItem( LLScrollListItem* item, EAddPosition pos, BOOL r  			setNeedsSort();  			break; -		case ADD_SORTED: -			{ -				// sort by column 0, in ascending order -				std::vector<sort_column_t> single_sort_column; -				single_sort_column.push_back(std::make_pair(0, TRUE)); - -				mItemList.push_back(item); -				std::stable_sort( -					mItemList.begin(),  -					mItemList.end(),  -					SortScrollListItem(single_sort_column,mSortCallback)); -				 -				// ADD_SORTED just sorts by first column... -				// this might not match user sort criteria, so flag list as being in unsorted state -				setNeedsSort(); -				break; -			}	 +		case ADD_DEFAULT:  		case ADD_BOTTOM:  			mItemList.push_back(item);  			setNeedsSort(); @@ -2762,9 +2746,10 @@ LLScrollListColumn* LLScrollListCtrl::getColumn(const std::string& name)  	return NULL;  } - +LLFastTimer::DeclareTimer FTM_ADD_SCROLLLIST_ELEMENT("Add Scroll List Item");  LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& element, EAddPosition pos, void* userdata)  { +	LLFastTimer _(FTM_ADD_SCROLLLIST_ELEMENT);  	LLScrollListItem::Params item_params;  	LLParamSDParser::instance().readSD(element, item_params);  	item_params.userdata = userdata; @@ -2773,12 +2758,14 @@ LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& element, EAddPosition  LLScrollListItem* LLScrollListCtrl::addRow(const LLScrollListItem::Params& item_p, EAddPosition pos)  { +	LLFastTimer _(FTM_ADD_SCROLLLIST_ELEMENT);  	LLScrollListItem *new_item = new LLScrollListItem(item_p);  	return addRow(new_item, item_p, pos);  }  LLScrollListItem* LLScrollListCtrl::addRow(LLScrollListItem *new_item, const LLScrollListItem::Params& item_p, EAddPosition pos)  { +	LLFastTimer _(FTM_ADD_SCROLLLIST_ELEMENT);  	if (!item_p.validateBlock() || !new_item) return NULL;  	new_item->setNumColumns(mColumns.size()); diff --git a/indra/llui/llsdparam.cpp b/indra/llui/llsdparam.cpp index 4bb45a3065..7d37127584 100644 --- a/indra/llui/llsdparam.cpp +++ b/indra/llui/llsdparam.cpp @@ -43,33 +43,16 @@ LLParamSDParser::LLParamSDParser()  {  	using boost::bind; -	registerParserFuncs<S32>(bind(&LLParamSDParser::readTypedValue<S32>, this, _1, &LLSD::asInteger), -							bind(&LLParamSDParser::writeTypedValue<S32>, this, _1, _2)); -	registerParserFuncs<U32>(bind(&LLParamSDParser::readTypedValue<U32>, this, _1, &LLSD::asInteger), -							bind(&LLParamSDParser::writeU32Param, this, _1, _2)); -	registerParserFuncs<F32>(bind(&LLParamSDParser::readTypedValue<F32>, this, _1, &LLSD::asReal), -							bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2)); -	registerParserFuncs<F64>(bind(&LLParamSDParser::readTypedValue<F64>, this, _1, &LLSD::asReal), -							bind(&LLParamSDParser::writeTypedValue<F64>, this, _1, _2)); -	registerParserFuncs<bool>(bind(&LLParamSDParser::readTypedValue<F32>, this, _1, &LLSD::asBoolean), -							bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2)); -	registerParserFuncs<std::string>(bind(&LLParamSDParser::readTypedValue<std::string>, this, _1, &LLSD::asString), -							bind(&LLParamSDParser::writeTypedValue<std::string>, this, _1, _2)); -	registerParserFuncs<LLUUID>(bind(&LLParamSDParser::readTypedValue<LLUUID>, this, _1, &LLSD::asUUID), -							bind(&LLParamSDParser::writeTypedValue<LLUUID>, this, _1, _2)); -	registerParserFuncs<LLDate>(bind(&LLParamSDParser::readTypedValue<LLDate>, this, _1, &LLSD::asDate), -							bind(&LLParamSDParser::writeTypedValue<LLDate>, this, _1, _2)); -	registerParserFuncs<LLURI>(bind(&LLParamSDParser::readTypedValue<LLURI>, this, _1, &LLSD::asURI), -							bind(&LLParamSDParser::writeTypedValue<LLURI>, this, _1, _2)); -	registerParserFuncs<LLSD>(bind(&LLParamSDParser::readSDParam, this, _1), -							bind(&LLParamSDParser::writeTypedValue<LLSD>, this, _1, _2)); -} - -bool LLParamSDParser::readSDParam(void* value_ptr) -{ -	if (!mCurReadSD) return false; -	*((LLSD*)value_ptr) = *mCurReadSD; -	return true; +	registerParserFuncs<S32>(readS32, bind(&LLParamSDParser::writeTypedValue<S32>, this, _1, _2)); +	registerParserFuncs<U32>(readU32, bind(&LLParamSDParser::writeU32Param, this, _1, _2)); +	registerParserFuncs<F32>(readF32, bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2)); +	registerParserFuncs<F64>(readF64, bind(&LLParamSDParser::writeTypedValue<F64>, this, _1, _2)); +	registerParserFuncs<bool>(readBool, bind(&LLParamSDParser::writeTypedValue<F32>, this, _1, _2)); +	registerParserFuncs<std::string>(readString, bind(&LLParamSDParser::writeTypedValue<std::string>, this, _1, _2)); +	registerParserFuncs<LLUUID>(readUUID, bind(&LLParamSDParser::writeTypedValue<LLUUID>, this, _1, _2)); +	registerParserFuncs<LLDate>(readDate, bind(&LLParamSDParser::writeTypedValue<LLDate>, this, _1, _2)); +	registerParserFuncs<LLURI>(readURI, bind(&LLParamSDParser::writeTypedValue<LLURI>, this, _1, _2)); +	registerParserFuncs<LLSD>(readSD, bind(&LLParamSDParser::writeTypedValue<LLSD>, this, _1, _2));  }  // special case handling of U32 due to ambiguous LLSD::assign overload @@ -148,3 +131,82 @@ LLSD* LLParamSDParser::getSDWriteNode(const parser_t::name_stack_t& name_stack)  	return mWriteSD;  } +bool LLParamSDParser::readS32(Parser& parser, void* val_ptr) +{ +	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser); + +    *((S32*)val_ptr) = self.mCurReadSD->asInteger(); +    return true; +} + +bool LLParamSDParser::readU32(Parser& parser, void* val_ptr) +{ +	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser); + +    *((U32*)val_ptr) = self.mCurReadSD->asInteger(); +    return true; +} + +bool LLParamSDParser::readF32(Parser& parser, void* val_ptr) +{ +	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser); + +    *((F32*)val_ptr) = self.mCurReadSD->asReal(); +    return true; +} + +bool LLParamSDParser::readF64(Parser& parser, void* val_ptr) +{ +	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser); + +    *((F64*)val_ptr) = self.mCurReadSD->asReal(); +    return true; +} + +bool LLParamSDParser::readBool(Parser& parser, void* val_ptr) +{ +	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser); + +    *((bool*)val_ptr) = self.mCurReadSD->asBoolean(); +    return true; +} + +bool LLParamSDParser::readString(Parser& parser, void* val_ptr) +{ +	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser); + +	*((std::string*)val_ptr) = self.mCurReadSD->asString(); +    return true; +} + +bool LLParamSDParser::readUUID(Parser& parser, void* val_ptr) +{ +	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser); + +	*((LLUUID*)val_ptr) = self.mCurReadSD->asUUID(); +    return true; +} + +bool LLParamSDParser::readDate(Parser& parser, void* val_ptr) +{ +	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser); + +	*((LLDate*)val_ptr) = self.mCurReadSD->asDate(); +    return true; +} + +bool LLParamSDParser::readURI(Parser& parser, void* val_ptr) +{ +	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser); + +	*((LLURI*)val_ptr) = self.mCurReadSD->asURI(); +    return true; +} + +bool LLParamSDParser::readSD(Parser& parser, void* val_ptr) +{ +	LLParamSDParser& self = static_cast<LLParamSDParser&>(parser); + +	*((LLSD*)val_ptr) = *self.mCurReadSD; +    return true; +} diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h index 12f28f876f..71b0a45630 100644 --- a/indra/llui/llsdparam.h +++ b/indra/llui/llsdparam.h @@ -79,9 +79,19 @@ private:  	LLSD* getSDWriteNode(const parser_t::name_stack_t& name_stack); -	bool readSDParam(void* value_ptr);  	bool writeU32Param(const void* value_ptr, const parser_t::name_stack_t& name_stack); +	static bool readS32(Parser& parser, void* val_ptr); +	static bool readU32(Parser& parser, void* val_ptr); +	static bool readF32(Parser& parser, void* val_ptr); +	static bool readF64(Parser& parser, void* val_ptr); +	static bool readBool(Parser& parser, void* val_ptr); +	static bool readString(Parser& parser, void* val_ptr); +	static bool readUUID(Parser& parser, void* val_ptr); +	static bool readDate(Parser& parser, void* val_ptr); +	static bool readURI(Parser& parser, void* val_ptr); +	static bool readSD(Parser& parser, void* val_ptr); +  	Parser::name_stack_t	mNameStack;  	const LLSD*				mCurReadSD;  	LLSD*					mWriteSD; diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 617c496d6a..cde08c7b19 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1012,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(); @@ -1490,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;  } @@ -1642,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()) @@ -1725,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; @@ -1756,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); @@ -1771,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);  	} @@ -1795,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;  @@ -1807,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; @@ -1815,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);  } @@ -2269,6 +2303,7 @@ 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(); @@ -2675,6 +2710,30 @@ 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); +	mStyle = mNormalStyle; +	return result; +} + +/*virtual*/ +BOOL LLOnHoverChangeableTextSegment::handleHover(S32 x, S32 y, MASK mask) +{ +	mStyle = mHoveredStyle; +	return LLNormalTextSegment::handleHover(x, y, mask); +} +  //  // LLInlineViewSegment diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 86f0e55a1d..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 @@ -443,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  @@ -486,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: diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 6781c23416..482a53e4af 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -461,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/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.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/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp index a46d961709..c5bd6c7fce 100644 --- a/indra/llui/lluictrlfactory.cpp +++ b/indra/llui/lluictrlfactory.cpp @@ -99,10 +99,11 @@ void LLUICtrlFactory::loadWidgetTemplate(const std::string& widget_tag, LLInitPa  	std::string filename = std::string("widgets") + gDirUtilp->getDirDelimiter() + widget_tag + ".xml";  	LLXMLNodePtr root_node; -	if (LLUICtrlFactory::getLayeredXMLNode(filename, root_node)) +	std::string full_filename = gDirUtilp->findSkinnedFilename(LLUI::getXUIPaths().front(), filename); +	if (!full_filename.empty())  	{ -		LLUICtrlFactory::instance().pushFileName(filename); -		LLXUIParser::instance().readXUI(root_node, block, filename); +		LLUICtrlFactory::instance().pushFileName(full_filename); +		LLSimpleXUIParser::instance().readXUI(full_filename, block);  		LLUICtrlFactory::instance().popFileName();  	}  } diff --git a/indra/llui/lluistring.cpp b/indra/llui/lluistring.cpp index ac9e71665f..e343df0063 100644 --- a/indra/llui/lluistring.cpp +++ b/indra/llui/lluistring.cpp @@ -40,7 +40,7 @@ LLFastTimer::DeclareTimer FTM_UI_STRING("UI String");  LLUIString::LLUIString(const std::string& instring, const LLStringUtil::format_map_t& args)  :	mOrig(instring), -	mArgs(args) +	mArgs(new LLStringUtil::format_map_t(args))  {  	dirty();  } @@ -54,7 +54,7 @@ void LLUIString::assign(const std::string& s)  void LLUIString::setArgList(const LLStringUtil::format_map_t& args)  { -	mArgs = args; +	getArgs() = args;  	dirty();  } @@ -74,7 +74,7 @@ void LLUIString::setArgs(const LLSD& sd)  void LLUIString::setArg(const std::string& key, const std::string& replacement)  { -	mArgs[key] = replacement; +	getArgs()[key] = replacement;  	dirty();  } @@ -135,14 +135,14 @@ void LLUIString::updateResult() const  	mResult = mOrig;  	// get the defailt args + local args -	if (mArgs.empty()) +	if (!mArgs || mArgs->empty())  	{  		LLStringUtil::format(mResult, LLTrans::getDefaultArgs());  	}  	else  	{  		LLStringUtil::format_map_t combined_args = LLTrans::getDefaultArgs(); -		combined_args.insert(mArgs.begin(), mArgs.end()); +		combined_args.insert(mArgs->begin(), mArgs->end());  		LLStringUtil::format(mResult, combined_args);  	}  } @@ -153,3 +153,12 @@ void LLUIString::updateWResult() const  	mWResult = utf8str_to_wstring(getUpdatedResult());  } + +LLStringUtil::format_map_t& LLUIString::getArgs() +{ +	if (!mArgs) +	{ +		mArgs = new LLStringUtil::format_map_t; +	} +	return *mArgs; +} diff --git a/indra/llui/lluistring.h b/indra/llui/lluistring.h index 32cfc0d9cd..3f91856e26 100644 --- a/indra/llui/lluistring.h +++ b/indra/llui/lluistring.h @@ -64,9 +64,9 @@ class LLUIString  public:  	// These methods all perform appropriate argument substitution  	// and modify mOrig where appropriate -        LLUIString() : mNeedsResult(false), mNeedsWResult(false) {} +        LLUIString() : mArgs(NULL), mNeedsResult(false), mNeedsWResult(false) {}  	LLUIString(const std::string& instring, const LLStringUtil::format_map_t& args); -	LLUIString(const std::string& instring) { assign(instring); } +	LLUIString(const std::string& instring) : mArgs(NULL) { assign(instring); }  	void assign(const std::string& instring);  	LLUIString& operator=(const std::string& s) { assign(s); return *this; } @@ -86,7 +86,7 @@ public:  	S32 length() const { return getUpdatedWResult().size(); }  	void clear(); -	void clearArgs() { mArgs.clear(); } +	void clearArgs() { if (mArgs) mArgs->clear(); }  	// These utility functions are included for text editing.  	// They do not affect mOrig and do not perform argument substitution @@ -105,11 +105,12 @@ private:  	// do actual work of updating strings (non-inlined)  	void updateResult() const;  	void updateWResult() const; +	LLStringUtil::format_map_t& getArgs();  	std::string mOrig;  	mutable std::string mResult;  	mutable LLWString mWResult; // for displaying -	LLStringUtil::format_map_t mArgs; +	LLStringUtil::format_map_t* mArgs;  	// controls lazy evaluation  	mutable bool	mNeedsResult; diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index e075699a6e..17d211fb36 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"); +} +  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 394ec957d5..4d3708302b 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; @@ -2784,6 +2785,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 8e705ed701..37f5232f91 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/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h index b645c4be7c..9890bacea4 100644 --- a/indra/llxuixml/llinitparam.h +++ b/indra/llxuixml/llinitparam.h @@ -40,6 +40,7 @@ f * @file llinitparam.h  #include <boost/function.hpp>  #include <boost/bind.hpp>  #include <boost/type_traits/is_convertible.hpp> +#include <boost/unordered_map.hpp>  #include "llregistry.h"  #include "llmemory.h" @@ -202,7 +203,7 @@ namespace LLInitParam  		typedef std::pair<name_stack_t::const_iterator, name_stack_t::const_iterator>	name_stack_range_t;  		typedef std::vector<std::string>							possible_values_t; -		typedef boost::function<bool (void*)>															parser_read_func_t; +		typedef bool (*parser_read_func_t)(Parser& parser, void* output);  		typedef boost::function<bool (const void*, const name_stack_t&)>								parser_write_func_t;  		typedef boost::function<void (const name_stack_t&, S32, S32, const possible_values_t*)>	parser_inspect_func_t; @@ -221,7 +222,7 @@ namespace LLInitParam  		    parser_read_func_map_t::iterator found_it = mParserReadFuncs.find(&typeid(T));  		    if (found_it != mParserReadFuncs.end())  		    { -			    return found_it->second((void*)¶m); +			    return found_it->second(*this, (void*)¶m);  		    }  		    return false;  	    } @@ -386,7 +387,7 @@ namespace LLInitParam  		void aggregateBlockData(BlockDescriptor& src_block_data);  	public: -		typedef std::map<const std::string, ParamDescriptor*> param_map_t; // references param descriptors stored in mAllParams +		typedef boost::unordered_map<const std::string, ParamDescriptor*> param_map_t; // references param descriptors stored in mAllParams  		typedef std::vector<ParamDescriptor*> param_list_t;   		typedef std::list<ParamDescriptor> all_params_list_t;// references param descriptors stored in mAllParams diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp index dbc20a5a1e..d856efb008 100644 --- a/indra/llxuixml/llxuiparser.cpp +++ b/indra/llxuixml/llxuiparser.cpp @@ -35,11 +35,16 @@  #include "llxuiparser.h"  #include "llxmlnode.h" +#include "expat/expat.h"  #include <fstream>  #include <boost/tokenizer.hpp> +//#include <boost/spirit/include/qi.hpp> +#include <boost/spirit/include/classic_core.hpp>  #include "lluicolor.h" +using namespace BOOST_SPIRIT_CLASSIC_NS; +  const S32 MAX_STRING_ATTRIBUTE_SIZE = 40;  // @@ -370,34 +375,20 @@ LLXUIParser::LLXUIParser()  :	mLastWriteGeneration(-1),  	mCurReadDepth(0)  { -	registerParserFuncs<bool>(boost::bind(&LLXUIParser::readBoolValue, this, _1), -								boost::bind(&LLXUIParser::writeBoolValue, this, _1, _2)); -	registerParserFuncs<std::string>(boost::bind(&LLXUIParser::readStringValue, this, _1), -								boost::bind(&LLXUIParser::writeStringValue, this, _1, _2)); -	registerParserFuncs<U8>(boost::bind(&LLXUIParser::readU8Value, this, _1), -								boost::bind(&LLXUIParser::writeU8Value, this, _1, _2)); -	registerParserFuncs<S8>(boost::bind(&LLXUIParser::readS8Value, this, _1), -								boost::bind(&LLXUIParser::writeS8Value, this, _1, _2)); -	registerParserFuncs<U16>(boost::bind(&LLXUIParser::readU16Value, this, _1), -								boost::bind(&LLXUIParser::writeU16Value, this, _1, _2)); -	registerParserFuncs<S16>(boost::bind(&LLXUIParser::readS16Value, this, _1), -								boost::bind(&LLXUIParser::writeS16Value, this, _1, _2)); -	registerParserFuncs<U32>(boost::bind(&LLXUIParser::readU32Value, this, _1), -								boost::bind(&LLXUIParser::writeU32Value, this, _1, _2)); -	registerParserFuncs<S32>(boost::bind(&LLXUIParser::readS32Value, this, _1), -								boost::bind(&LLXUIParser::writeS32Value, this, _1, _2)); -	registerParserFuncs<F32>(boost::bind(&LLXUIParser::readF32Value, this, _1), -								boost::bind(&LLXUIParser::writeF32Value, this, _1, _2)); -	registerParserFuncs<F64>(boost::bind(&LLXUIParser::readF64Value, this, _1), -								boost::bind(&LLXUIParser::writeF64Value, this, _1, _2)); -	registerParserFuncs<LLColor4>(boost::bind(&LLXUIParser::readColor4Value, this, _1), -								boost::bind(&LLXUIParser::writeColor4Value, this, _1, _2)); -	registerParserFuncs<LLUIColor>(boost::bind(&LLXUIParser::readUIColorValue, this, _1), -								boost::bind(&LLXUIParser::writeUIColorValue, this, _1, _2)); -	registerParserFuncs<LLUUID>(boost::bind(&LLXUIParser::readUUIDValue, this, _1), -								boost::bind(&LLXUIParser::writeUUIDValue, this, _1, _2)); -	registerParserFuncs<LLSD>(boost::bind(&LLXUIParser::readSDValue, this, _1), -								boost::bind(&LLXUIParser::writeSDValue, this, _1, _2)); +	registerParserFuncs<bool>(readBoolValue, boost::bind(&LLXUIParser::writeBoolValue, this, _1, _2)); +	registerParserFuncs<std::string>(readStringValue, boost::bind(&LLXUIParser::writeStringValue, this, _1, _2)); +	registerParserFuncs<U8>(readU8Value, boost::bind(&LLXUIParser::writeU8Value, this, _1, _2)); +	registerParserFuncs<S8>(readS8Value, boost::bind(&LLXUIParser::writeS8Value, this, _1, _2)); +	registerParserFuncs<U16>(readU16Value, boost::bind(&LLXUIParser::writeU16Value, this, _1, _2)); +	registerParserFuncs<S16>(readS16Value, boost::bind(&LLXUIParser::writeS16Value, this, _1, _2)); +	registerParserFuncs<U32>(readU32Value, boost::bind(&LLXUIParser::writeU32Value, this, _1, _2)); +	registerParserFuncs<S32>(readS32Value, boost::bind(&LLXUIParser::writeS32Value, this, _1, _2)); +	registerParserFuncs<F32>(readF32Value, boost::bind(&LLXUIParser::writeF32Value, this, _1, _2)); +	registerParserFuncs<F64>(readF64Value, boost::bind(&LLXUIParser::writeF64Value, this, _1, _2)); +	registerParserFuncs<LLColor4>(readColor4Value, boost::bind(&LLXUIParser::writeColor4Value, this, _1, _2)); +	registerParserFuncs<LLUIColor>(readUIColorValue, boost::bind(&LLXUIParser::writeUIColorValue, this, _1, _2)); +	registerParserFuncs<LLUUID>(readUUIDValue, boost::bind(&LLXUIParser::writeUUIDValue, this, _1, _2)); +	registerParserFuncs<LLSD>(readSDValue, boost::bind(&LLXUIParser::writeSDValue, this, _1, _2));  }  static LLFastTimer::DeclareTimer FTM_PARSE_XUI("XUI Parsing"); @@ -621,10 +612,11 @@ LLXMLNodePtr LLXUIParser::getNode(const name_stack_t& stack)  } -bool LLXUIParser::readBoolValue(void* val_ptr) +bool LLXUIParser::readBoolValue(Parser& parser, void* val_ptr)  {  	S32 value; -	bool success = mCurReadNode->getBoolValue(1, &value); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	bool success = self.mCurReadNode->getBoolValue(1, &value);  	*((bool*)val_ptr) = (value != FALSE);  	return success;  } @@ -640,9 +632,10 @@ bool LLXUIParser::writeBoolValue(const void* val_ptr, const name_stack_t& stack)  	return false;  } -bool LLXUIParser::readStringValue(void* val_ptr) +bool LLXUIParser::readStringValue(Parser& parser, void* val_ptr)  { -	*((std::string*)val_ptr) = mCurReadNode->getSanitizedValue(); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	*((std::string*)val_ptr) = self.mCurReadNode->getSanitizedValue();  	return true;  } @@ -677,9 +670,10 @@ bool LLXUIParser::writeStringValue(const void* val_ptr, const name_stack_t& stac  	return false;  } -bool LLXUIParser::readU8Value(void* val_ptr) +bool LLXUIParser::readU8Value(Parser& parser, void* val_ptr)  { -	return mCurReadNode->getByteValue(1, (U8*)val_ptr); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	return self.mCurReadNode->getByteValue(1, (U8*)val_ptr);  }  bool LLXUIParser::writeU8Value(const void* val_ptr, const name_stack_t& stack) @@ -693,10 +687,11 @@ bool LLXUIParser::writeU8Value(const void* val_ptr, const name_stack_t& stack)  	return false;  } -bool LLXUIParser::readS8Value(void* val_ptr) +bool LLXUIParser::readS8Value(Parser& parser, void* val_ptr)  { +	LLXUIParser& self = static_cast<LLXUIParser&>(parser);  	S32 value; -	if(mCurReadNode->getIntValue(1, &value)) +	if(self.mCurReadNode->getIntValue(1, &value))  	{  		*((S8*)val_ptr) = value;  		return true; @@ -715,10 +710,11 @@ bool LLXUIParser::writeS8Value(const void* val_ptr, const name_stack_t& stack)  	return false;  } -bool LLXUIParser::readU16Value(void* val_ptr) +bool LLXUIParser::readU16Value(Parser& parser, void* val_ptr)  { +	LLXUIParser& self = static_cast<LLXUIParser&>(parser);  	U32 value; -	if(mCurReadNode->getUnsignedValue(1, &value)) +	if(self.mCurReadNode->getUnsignedValue(1, &value))  	{  		*((U16*)val_ptr) = value;  		return true; @@ -737,10 +733,11 @@ bool LLXUIParser::writeU16Value(const void* val_ptr, const name_stack_t& stack)  	return false;  } -bool LLXUIParser::readS16Value(void* val_ptr) +bool LLXUIParser::readS16Value(Parser& parser, void* val_ptr)  { +	LLXUIParser& self = static_cast<LLXUIParser&>(parser);  	S32 value; -	if(mCurReadNode->getIntValue(1, &value)) +	if(self.mCurReadNode->getIntValue(1, &value))  	{  		*((S16*)val_ptr) = value;  		return true; @@ -759,9 +756,10 @@ bool LLXUIParser::writeS16Value(const void* val_ptr, const name_stack_t& stack)  	return false;  } -bool LLXUIParser::readU32Value(void* val_ptr) +bool LLXUIParser::readU32Value(Parser& parser, void* val_ptr)  { -	return mCurReadNode->getUnsignedValue(1, (U32*)val_ptr); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	return self.mCurReadNode->getUnsignedValue(1, (U32*)val_ptr);  }  bool LLXUIParser::writeU32Value(const void* val_ptr, const name_stack_t& stack) @@ -775,9 +773,10 @@ bool LLXUIParser::writeU32Value(const void* val_ptr, const name_stack_t& stack)  	return false;  } -bool LLXUIParser::readS32Value(void* val_ptr) +bool LLXUIParser::readS32Value(Parser& parser, void* val_ptr)  { -	return mCurReadNode->getIntValue(1, (S32*)val_ptr); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	return self.mCurReadNode->getIntValue(1, (S32*)val_ptr);  }  bool LLXUIParser::writeS32Value(const void* val_ptr, const name_stack_t& stack) @@ -791,9 +790,10 @@ bool LLXUIParser::writeS32Value(const void* val_ptr, const name_stack_t& stack)  	return false;  } -bool LLXUIParser::readF32Value(void* val_ptr) +bool LLXUIParser::readF32Value(Parser& parser, void* val_ptr)  { -	return mCurReadNode->getFloatValue(1, (F32*)val_ptr); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	return self.mCurReadNode->getFloatValue(1, (F32*)val_ptr);  }  bool LLXUIParser::writeF32Value(const void* val_ptr, const name_stack_t& stack) @@ -807,9 +807,10 @@ bool LLXUIParser::writeF32Value(const void* val_ptr, const name_stack_t& stack)  	return false;  } -bool LLXUIParser::readF64Value(void* val_ptr) +bool LLXUIParser::readF64Value(Parser& parser, void* val_ptr)  { -	return mCurReadNode->getDoubleValue(1, (F64*)val_ptr); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	return self.mCurReadNode->getDoubleValue(1, (F64*)val_ptr);  }  bool LLXUIParser::writeF64Value(const void* val_ptr, const name_stack_t& stack) @@ -823,10 +824,11 @@ bool LLXUIParser::writeF64Value(const void* val_ptr, const name_stack_t& stack)  	return false;  } -bool LLXUIParser::readColor4Value(void* val_ptr) +bool LLXUIParser::readColor4Value(Parser& parser, void* val_ptr)  { +	LLXUIParser& self = static_cast<LLXUIParser&>(parser);  	LLColor4* colorp = (LLColor4*)val_ptr; -	if(mCurReadNode->getFloatValue(4, colorp->mV) >= 3) +	if(self.mCurReadNode->getFloatValue(4, colorp->mV) >= 3)  	{  		return true;  	} @@ -846,11 +848,12 @@ bool LLXUIParser::writeColor4Value(const void* val_ptr, const name_stack_t& stac  	return false;  } -bool LLXUIParser::readUIColorValue(void* val_ptr) +bool LLXUIParser::readUIColorValue(Parser& parser, void* val_ptr)  { +	LLXUIParser& self = static_cast<LLXUIParser&>(parser);  	LLUIColor* param = (LLUIColor*)val_ptr;  	LLColor4 color; -	bool success =  mCurReadNode->getFloatValue(4, color.mV) >= 3; +	bool success =  self.mCurReadNode->getFloatValue(4, color.mV) >= 3;  	if (success)  	{  		param->set(color); @@ -874,11 +877,12 @@ bool LLXUIParser::writeUIColorValue(const void* val_ptr, const name_stack_t& sta  	return false;  } -bool LLXUIParser::readUUIDValue(void* val_ptr) +bool LLXUIParser::readUUIDValue(Parser& parser, void* val_ptr)  { +	LLXUIParser& self = static_cast<LLXUIParser&>(parser);  	LLUUID temp_id;  	// LLUUID::set is destructive, so use temporary value -	if (temp_id.set(mCurReadNode->getSanitizedValue())) +	if (temp_id.set(self.mCurReadNode->getSanitizedValue()))  	{  		*(LLUUID*)(val_ptr) = temp_id;  		return true; @@ -897,9 +901,10 @@ bool LLXUIParser::writeUUIDValue(const void* val_ptr, const name_stack_t& stack)  	return false;  } -bool LLXUIParser::readSDValue(void* val_ptr) +bool LLXUIParser::readSDValue(Parser& parser, void* val_ptr)  { -	*((LLSD*)val_ptr) = LLSD(mCurReadNode->getSanitizedValue()); +	LLXUIParser& self = static_cast<LLXUIParser&>(parser); +	*((LLSD*)val_ptr) = LLSD(self.mCurReadNode->getSanitizedValue());  	return true;  } @@ -968,3 +973,411 @@ void LLXUIParser::parserError(const std::string& message)  	Parser::parserError(message);  #endif  } + + +// +// LLSimpleXUIParser +// + +struct ScopedFile +{ +	ScopedFile( const std::string& filename, const char* accessmode ) +	{ +		mFile = LLFile::fopen(filename, accessmode); +	} + +	~ScopedFile() +	{ +		fclose(mFile); +		mFile = NULL; +	} + +	S32 getRemainingBytes() +	{ +		if (!isOpen()) return 0; + +		S32 cur_pos = ftell(mFile); +		fseek(mFile, 0L, SEEK_END); +		S32 file_size = ftell(mFile); +		fseek(mFile, cur_pos, SEEK_SET); +		return file_size - cur_pos; +	} + +	bool isOpen() { return mFile != NULL; } + +	LLFILE* mFile; +}; + +LLSimpleXUIParser::LLSimpleXUIParser() +:	mLastWriteGeneration(-1), +	mCurReadDepth(0) +{ +	registerParserFuncs<bool>(readBoolValue, NULL); +	registerParserFuncs<std::string>(readStringValue, NULL); +	registerParserFuncs<U8>(readU8Value, NULL); +	registerParserFuncs<S8>(readS8Value, NULL); +	registerParserFuncs<U16>(readU16Value, NULL); +	registerParserFuncs<S16>(readS16Value, NULL); +	registerParserFuncs<U32>(readU32Value, NULL); +	registerParserFuncs<S32>(readS32Value, NULL); +	registerParserFuncs<F32>(readF32Value, NULL); +	registerParserFuncs<F64>(readF64Value, NULL); +	registerParserFuncs<LLColor4>(readColor4Value, NULL); +	registerParserFuncs<LLUIColor>(readUIColorValue, NULL); +	registerParserFuncs<LLUUID>(readUUIDValue, NULL); +	registerParserFuncs<LLSD>(readSDValue, NULL); +} + +LLSimpleXUIParser::~LLSimpleXUIParser() +{ +} + + +bool LLSimpleXUIParser::readXUI(const std::string& filename, LLInitParam::BaseBlock& block, bool silent) +{ +	LLFastTimer timer(FTM_PARSE_XUI); + +	mParser = XML_ParserCreate(NULL); +	XML_SetUserData(mParser, this); +	XML_SetElementHandler(			mParser,	startElementHandler, endElementHandler); +	XML_SetCharacterDataHandler(	mParser,	characterDataHandler); + +	mBlock = █ +	mNameStack.clear(); +	mCurFileName = filename; +	mCurReadDepth = 0; +	setParseSilently(silent); + +	ScopedFile file(filename, "rb"); +	if( !file.isOpen() ) +	{ +		LL_WARNS("ReadXUI") << "Unable to open file " << filename << LL_ENDL; +		return false; +	} + +	S32 bytes_read = 0; +	 +	S32 buffer_size = file.getRemainingBytes(); +	void* buffer = XML_GetBuffer(mParser, buffer_size); +	if( !buffer )  +	{ +		LL_WARNS("ReadXUI") << "Unable to allocate XML buffer while reading file " << filename << LL_ENDL; +		XML_ParserFree( mParser ); +		return false; +	} + +	bytes_read = (S32)fread(buffer, 1, buffer_size, file.mFile); +	if( bytes_read <= 0 ) +	{ +		LL_WARNS("ReadXUI") << "Error while reading file  " << filename << LL_ENDL; +		XML_ParserFree( mParser ); +		return false; +	} +	 +	if( !XML_ParseBuffer(mParser, bytes_read, TRUE ) ) +	{ +		LL_WARNS("ReadXUI") << "Error while parsing file  " << filename << LL_ENDL; +		XML_ParserFree( mParser ); +		return false; +	} + +	XML_ParserFree( mParser ); +	return true; +} + +void LLSimpleXUIParser::startElementHandler(void *userData, const char *name, const char **atts) +{ +	LLSimpleXUIParser* self = reinterpret_cast<LLSimpleXUIParser*>(userData); +	self->startElement(name, atts); +} + +void LLSimpleXUIParser::endElementHandler(void *userData, const char *name) +{ +	LLSimpleXUIParser* self = reinterpret_cast<LLSimpleXUIParser*>(userData); +	self->endElement(name); +} + +void LLSimpleXUIParser::characterDataHandler(void *userData, const char *s, int len) +{ +	LLSimpleXUIParser* self = reinterpret_cast<LLSimpleXUIParser*>(userData); +	self->characterData(s, len); +} + +void LLSimpleXUIParser::startElement(const char *name, const char **atts) +{ +	typedef boost::tokenizer<boost::char_separator<char> > tokenizer; +	boost::char_separator<char> sep("."); + +	mCurReadDepth++; +	S32 num_tokens_pushed = 0; +	std::string child_name(name); + +	if (mCurReadDepth > 1) +	{ +		// for non "dotted" child nodes	check to see if child node maps to another widget type +		// and if not, treat as a child element of the current node +		// e.g. <button><rect left="10"/></button> will interpret <rect> as "button.rect" +		// since there is no widget named "rect" +		if (child_name.find(".") == std::string::npos)  +		{ +			mNameStack.push_back(std::make_pair(child_name, newParseGeneration())); +			num_tokens_pushed++; +			mScope.push_back(child_name); +		} +		else +		{ +			// parse out "dotted" name into individual tokens +			tokenizer name_tokens(child_name, sep); + +			tokenizer::iterator name_token_it = name_tokens.begin(); +			if(name_token_it == name_tokens.end())  +			{ +				return; +			} + +			// check for proper nesting +			if(!mScope.empty() && *name_token_it != mScope.back()) +			{ +				return; +			} + +			// now ignore first token +			++name_token_it;  + +			// copy remaining tokens on to our running token list +			for(tokenizer::iterator token_to_push = name_token_it; token_to_push != name_tokens.end(); ++token_to_push) +			{ +				mNameStack.push_back(std::make_pair(*token_to_push, newParseGeneration())); +				num_tokens_pushed++; +			} +			mScope.push_back(mNameStack.back().first); +		} +	} +	else +	{ +		mScope.push_back(child_name); +	} + +	mTokenSizeStack.push_back(num_tokens_pushed); +	readAttributes(atts); +} + +bool LLSimpleXUIParser::readAttributes(const char **atts) +{ +	typedef boost::tokenizer<boost::char_separator<char> > tokenizer; +	boost::char_separator<char> sep("."); + +	bool any_parsed = false; +	for(S32 i = 0; atts[i] && atts[i+1]; i += 2 ) +	{ +		std::string attribute_name(atts[i]); +		mCurAttributeValueBegin = atts[i+1]; +		 +		S32 num_tokens_pushed = 0; +		tokenizer name_tokens(attribute_name, sep); +		// copy remaining tokens on to our running token list +		for(tokenizer::iterator token_to_push = name_tokens.begin(); token_to_push != name_tokens.end(); ++token_to_push) +		{ +			mNameStack.push_back(std::make_pair(*token_to_push, newParseGeneration())); +			num_tokens_pushed++; +		} + +		// child nodes are not necessarily valid attributes, so don't complain once we've recursed +		bool silent = mCurReadDepth > 1; +		any_parsed |= mBlock->submitValue(mNameStack, *this, silent); +		 +		while(num_tokens_pushed-- > 0) +		{ +			mNameStack.pop_back(); +		} +	} +	return any_parsed; +} + + +void LLSimpleXUIParser::endElement(const char *name) +{ +	if (!mTextContents.empty()) +	{ +		LLStringUtil::trim(mTextContents); +		if (!mTextContents.empty()) +		{ +			mNameStack.push_back(std::make_pair(std::string("value"), newParseGeneration())); +			mCurAttributeValueBegin = mTextContents.c_str(); +			mBlock->submitValue(mNameStack, *this, false); +			mNameStack.pop_back(); +			mTextContents.clear(); +		} +	} +	mCurReadDepth--; +	S32 num_tokens_to_pop = mTokenSizeStack.back(); +	mTokenSizeStack.pop_back(); +	while(num_tokens_to_pop-- > 0) +	{ +		mNameStack.pop_back(); +	} +	mScope.pop_back(); +} + +void LLSimpleXUIParser::characterData(const char *s, int len) +{ +	mTextContents += std::string(s, len); +} + + +/*virtual*/ std::string LLSimpleXUIParser::getCurrentElementName() +{ +	std::string full_name; +	for (name_stack_t::iterator it = mNameStack.begin();	 +		it != mNameStack.end(); +		++it) +	{ +		full_name += it->first + "."; // build up dotted names: "button.param.nestedparam." +	} + +	return full_name; +} + +const S32 LINE_NUMBER_HERE = 0; + +void LLSimpleXUIParser::parserWarning(const std::string& message) +{ +#ifdef LL_WINDOWS +	// use Visual Studo friendly formatting of output message for easy access to originating xml +	llutf16string utf16str = utf8str_to_utf16str(llformat("%s(%d):\t%s", mCurFileName.c_str(), LINE_NUMBER_HERE, message.c_str()).c_str()); +	utf16str += '\n'; +	OutputDebugString(utf16str.c_str()); +#else +	Parser::parserWarning(message); +#endif +} + +void LLSimpleXUIParser::parserError(const std::string& message) +{ +#ifdef LL_WINDOWS +	llutf16string utf16str = utf8str_to_utf16str(llformat("%s(%d):\t%s", mCurFileName.c_str(), LINE_NUMBER_HERE, message.c_str()).c_str()); +	utf16str += '\n'; +	OutputDebugString(utf16str.c_str()); +#else +	Parser::parserError(message); +#endif +} + +bool LLSimpleXUIParser::readBoolValue(Parser& parser, void* val_ptr) +{ +	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser); +	if (!strcmp(self.mCurAttributeValueBegin, "true"))  +	{ +		*((bool*)val_ptr) = true; +		return true; +	} +	else if (!strcmp(self.mCurAttributeValueBegin, "false")) +	{ +		*((bool*)val_ptr) = false; +		return true; +	} + +	return false; +} + +bool LLSimpleXUIParser::readStringValue(Parser& parser, void* val_ptr) +{ +	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser); +	*((std::string*)val_ptr) = self.mCurAttributeValueBegin; +	return true; +} + +bool LLSimpleXUIParser::readU8Value(Parser& parser, void* val_ptr) +{ +	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser); +	return parse(self.mCurAttributeValueBegin, uint_p[assign_a(*(U8*)val_ptr)]).full; +} + +bool LLSimpleXUIParser::readS8Value(Parser& parser, void* val_ptr) +{ +	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser); +	return parse(self.mCurAttributeValueBegin, int_p[assign_a(*(S8*)val_ptr)]).full; +} + +bool LLSimpleXUIParser::readU16Value(Parser& parser, void* val_ptr) +{ +	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser); +	return parse(self.mCurAttributeValueBegin, uint_p[assign_a(*(U16*)val_ptr)]).full; +} + +bool LLSimpleXUIParser::readS16Value(Parser& parser, void* val_ptr) +{ +	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser); +	return parse(self.mCurAttributeValueBegin, int_p[assign_a(*(S16*)val_ptr)]).full; +} + +bool LLSimpleXUIParser::readU32Value(Parser& parser, void* val_ptr) +{ +	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser); +	return parse(self.mCurAttributeValueBegin, uint_p[assign_a(*(U32*)val_ptr)]).full; +} + +bool LLSimpleXUIParser::readS32Value(Parser& parser, void* val_ptr) +{ +	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser); +	return parse(self.mCurAttributeValueBegin, int_p[assign_a(*(S32*)val_ptr)]).full; +} + +bool LLSimpleXUIParser::readF32Value(Parser& parser, void* val_ptr) +{ +	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser); +	return parse(self.mCurAttributeValueBegin, real_p[assign_a(*(F32*)val_ptr)]).full; +} + +bool LLSimpleXUIParser::readF64Value(Parser& parser, void* val_ptr) +{ +	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser); +	return parse(self.mCurAttributeValueBegin, real_p[assign_a(*(F64*)val_ptr)]).full; +} +	 +bool LLSimpleXUIParser::readColor4Value(Parser& parser, void* val_ptr) +{ +	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser); +	LLColor4 value; + +	if (parse(self.mCurAttributeValueBegin, real_p[assign_a(value.mV[0])] >> real_p[assign_a(value.mV[1])] >> real_p[assign_a(value.mV[2])] >> real_p[assign_a(value.mV[3])], space_p).full) +	{ +		*(LLColor4*)(val_ptr) = value; +		return true; +	} +	return false; +} + +bool LLSimpleXUIParser::readUIColorValue(Parser& parser, void* val_ptr) +{ +	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser); +	LLColor4 value; +	LLUIColor* colorp = (LLUIColor*)val_ptr; + +	if (parse(self.mCurAttributeValueBegin, real_p[assign_a(value.mV[0])] >> real_p[assign_a(value.mV[1])] >> real_p[assign_a(value.mV[2])] >> real_p[assign_a(value.mV[3])], space_p).full) +	{ +		colorp->set(value); +		return true; +	} +	return false; +} + +bool LLSimpleXUIParser::readUUIDValue(Parser& parser, void* val_ptr) +{ +	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser); +	LLUUID temp_id; +	// LLUUID::set is destructive, so use temporary value +	if (temp_id.set(std::string(self.mCurAttributeValueBegin))) +	{ +		*(LLUUID*)(val_ptr) = temp_id; +		return true; +	} +	return false; +} + +bool LLSimpleXUIParser::readSDValue(Parser& parser, void* val_ptr) +{ +	LLSimpleXUIParser& self = static_cast<LLSimpleXUIParser&>(parser); +	*((LLSD*)val_ptr) = LLSD(self.mCurAttributeValueBegin); +	return true; +} diff --git a/indra/llxuixml/llxuiparser.h b/indra/llxuixml/llxuiparser.h index 884f4f7578..eb7147f49e 100644 --- a/indra/llxuixml/llxuiparser.h +++ b/indra/llxuixml/llxuiparser.h @@ -120,26 +120,24 @@ public:  	void writeXUI(LLXMLNodePtr node, const LLInitParam::BaseBlock& block, const LLInitParam::BaseBlock* diff_block = NULL);  private: -	typedef std::list<std::pair<std::string, bool> >	token_list_t; -  	bool readXUIImpl(LLXMLNodePtr node, const std::string& scope, LLInitParam::BaseBlock& block);  	bool readAttributes(LLXMLNodePtr nodep, LLInitParam::BaseBlock& block);  	//reader helper functions -	bool readBoolValue(void* val_ptr); -	bool readStringValue(void* val_ptr); -	bool readU8Value(void* val_ptr); -	bool readS8Value(void* val_ptr); -	bool readU16Value(void* val_ptr); -	bool readS16Value(void* val_ptr); -	bool readU32Value(void* val_ptr); -	bool readS32Value(void* val_ptr); -	bool readF32Value(void* val_ptr); -	bool readF64Value(void* val_ptr); -	bool readColor4Value(void* val_ptr); -	bool readUIColorValue(void* val_ptr); -	bool readUUIDValue(void* val_ptr); -	bool readSDValue(void* val_ptr); +	static bool readBoolValue(Parser& parser, void* val_ptr); +	static bool readStringValue(Parser& parser, void* val_ptr); +	static bool readU8Value(Parser& parser, void* val_ptr); +	static bool readS8Value(Parser& parser, void* val_ptr); +	static bool readU16Value(Parser& parser, void* val_ptr); +	static bool readS16Value(Parser& parser, void* val_ptr); +	static bool readU32Value(Parser& parser, void* val_ptr); +	static bool readS32Value(Parser& parser, void* val_ptr); +	static bool readF32Value(Parser& parser, void* val_ptr); +	static bool readF64Value(Parser& parser, void* val_ptr); +	static bool readColor4Value(Parser& parser, void* val_ptr); +	static bool readUIColorValue(Parser& parser, void* val_ptr); +	static bool readUUIDValue(Parser& parser, void* val_ptr); +	static bool readSDValue(Parser& parser, void* val_ptr);  	//writer helper functions  	bool writeBoolValue(const void* val_ptr, const name_stack_t&); @@ -173,5 +171,74 @@ private:  	std::string						mCurFileName;  }; +// LLSimpleXUIParser is a streamlined SAX-based XUI parser that does not support localization  +// or parsing of a tree of independent param blocks, such as child widgets. +// Use this for reading non-localized files that only need a single param block as a result. +// +// NOTE: In order to support nested block parsing, we need callbacks for start element that +// push new blocks contexts on the mScope stack. +// NOTE: To support localization without building a DOM, we need to enforce consistent  +// ordering of child elements from base file to localized diff file.  Then we can use a pair +// of coroutines to perform matching of xml nodes during parsing.  Not sure if the overhead +// of coroutines would offset the gain from SAX parsing + +class LLSimpleXUIParser : public LLInitParam::Parser, public LLSingleton<LLSimpleXUIParser> +{ +LOG_CLASS(LLSimpleXUIParser); + +protected: +	LLSimpleXUIParser(); +	virtual ~LLSimpleXUIParser(); +	friend class LLSingleton<LLSimpleXUIParser>; +public: +	typedef LLInitParam::Parser::name_stack_t name_stack_t; + +	/*virtual*/ std::string getCurrentElementName(); +	/*virtual*/ void parserWarning(const std::string& message); +	/*virtual*/ void parserError(const std::string& message); + +	bool readXUI(const std::string& filename, LLInitParam::BaseBlock& block, bool silent=false); +	void setBlock(LLInitParam::BaseBlock* block); + +private: +	//reader helper functions +	static bool readBoolValue(Parser&, void* val_ptr); +	static bool readStringValue(Parser&, void* val_ptr); +	static bool readU8Value(Parser&, void* val_ptr); +	static bool readS8Value(Parser&, void* val_ptr); +	static bool readU16Value(Parser&, void* val_ptr); +	static bool readS16Value(Parser&, void* val_ptr); +	static bool readU32Value(Parser&, void* val_ptr); +	static bool readS32Value(Parser&, void* val_ptr); +	static bool readF32Value(Parser&, void* val_ptr); +	static bool readF64Value(Parser&, void* val_ptr); +	static bool readColor4Value(Parser&, void* val_ptr); +	static bool readUIColorValue(Parser&, void* val_ptr); +	static bool readUUIDValue(Parser&, void* val_ptr); +	static bool readSDValue(Parser&, void* val_ptr); + +private: +	static void startElementHandler(void *userData, const char *name, const char **atts); +	static void endElementHandler(void *userData, const char *name); +	static void characterDataHandler(void *userData, const char *s, int len); + +	void startElement(const char *name, const char **atts); +	void endElement(const char *name); +	void characterData(const char *s, int len); +	bool readAttributes(const char **atts); + +	LLInitParam::BaseBlock*			mBlock; +	Parser::name_stack_t			mNameStack; +	struct XML_ParserStruct*		mParser; +	S32								mLastWriteGeneration; +	LLXMLNodePtr					mLastWrittenChild; +	S32								mCurReadDepth; +	std::string						mCurFileName; +	std::string						mTextContents; +	const char*						mCurAttributeValueBegin; +	std::vector<S32>				mTokenSizeStack; +	std::vector<std::string>		mScope; +}; +  #endif //LLXUIPARSER_H diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index fa7343ed62..bbf3f4fc75 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -35,17 +35,6 @@        <key>Value</key>        <integer>0</integer>      </map> -    <key>AddWearableSortOrder</key> -    <map> -      <key>Comment</key> -      <string>Specifies sort order for add wearable panel (0 = name, 1 = date, 2 = by type)</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>U32</string> -      <key>Value</key> -      <integer>0</integer> -    </map>      <key>AgentPause</key>      <map>        <key>Comment</key> @@ -7339,7 +7328,7 @@      <key>Value</key>      <integer>0</integer>    </map> -   +    <key>RenderDeferredGI</key>    <map>      <key>Comment</key> @@ -8032,7 +8021,7 @@        <integer>2</integer>      </map> -  <key>RenderReflectionRes</key> +    <key>RenderReflectionRes</key>      <map>        <key>Comment</key>        <string>Reflection map resolution.</string> 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 53b7febba7..e85d108bb2 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -3079,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; @@ -3548,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 1ef9e34f87..4dc78e9a1d 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -941,7 +941,7 @@ void LLAgentCamera::cameraZoomIn(const F32 fraction)  		*/  	} -	if( cameraCustomizeAvatar() ) +	if(cameraCustomizeAvatar())  	{  		new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM );  	} diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index d2449abf08..63315ce2ae 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())  	{ @@ -2699,6 +2703,21 @@ BOOL LLAppearanceMgr::getIsInCOF(const LLUUID& obj_id) const  	return gInventory.isObjectDescendentOf(obj_id, getCOF());  } +// static +bool LLAppearanceMgr::isLinkInCOF(const LLUUID& obj_id) +{ +	 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  {  	if (!getIsInCOF(obj_id)) return FALSE; @@ -2726,3 +2745,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..9f554dbdef 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -223,6 +223,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 +247,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; -}; +typedef boost::function<void ()> nullary_func_t; +typedef boost::function<bool ()> bool_func_t; -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; -}; +// Call a given callable once in idle loop. +void doOnIdleOneTime(nullary_func_t callable); -template <typename T> -void doOnIdleRepeating(T callable) -{ -	OnIdleCallbackRepeating<T>* cb_functor = new OnIdleCallbackRepeating<T>(callable); -	gIdleCallbacks.addFunction(&OnIdleCallbackRepeating<T>::onIdle,cb_functor); -} +// Repeatedly call a callable in idle loop until it returns true. +void doOnIdleRepeating(bool_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; -}; +// Invoke a given callable after category contents are fully fetched. +void callAfterCategoryFetch(const LLUUID& cat_id, nullary_func_t cb); -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; -}; - -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 21766a731d..d222d94ec6 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -357,7 +357,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(); 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/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..7c33923f04 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"); diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index 35a1ad747b..6648bd7e57 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -163,7 +163,7 @@ public:  	}  protected: -	static void replaceWearable(const LLUUID& item_id) +	static void replaceWearable()  	{  		// *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->onReplaceMenuItemClicked(item_id); +			panel_outfit_edit->showAddWearablesPanel(true);  		}  	} @@ -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, selected_id)); +		registrar.add("Clothing.Replace", boost::bind(replaceWearable));  		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::onReplaceMenuItemClicked, panel_oe, selected_id)); +		registrar.add("BodyPart.Replace", boost::bind(&LLPanelOutfitEdit::onReplaceBodyPartMenuItemClicked, 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,8 +396,7 @@ void LLCOFWearables::refresh()  		return;  	} -	// BAP - removed check; does not detect item name changes. -	//if (mCOFVersion == catp->getVersion()) return; +	if (mCOFVersion == catp->getVersion()) return;  	mCOFVersion = catp->getVersion();  	typedef std::vector<LLSD> values_vector_t; @@ -514,10 +516,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); @@ -543,8 +545,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;  } @@ -559,7 +561,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;  } @@ -605,7 +607,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);  	}  } @@ -652,20 +654,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 7ebcef943e..3d40358ce5 100644 --- a/indra/newview/llcurrencyuimanager.cpp +++ b/indra/newview/llcurrencyuimanager.cpp @@ -412,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; @@ -442,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)  @@ -471,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/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp index c423473740..bb4e6c7a3e 100644 --- a/indra/newview/lldynamictexture.cpp +++ b/indra/newview/lldynamictexture.cpp @@ -167,6 +167,10 @@ void LLViewerDynamicTexture::postRender(BOOL success)  			{  				generateGLTexture() ;  			} +			if(!mGLTexturep->getHasGLTexture()) +			{ +				generateGLTexture() ; +			}  			llcallstacks << "class type: " << (S32)getType() << llcallstacksendl ;  			success = mGLTexturep->setSubImageFromFrameBuffer(0, 0, mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight); diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index 8ccc5fb248..8c6265fbc2 100644 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -141,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/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp index f14e64e3e4..1169093d42 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 0fa536dfad..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"); @@ -245,16 +251,21 @@ void LLFloaterCamera::resetCameraMode()  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.) -	floater_camera->childSetEnabled("preset_views_list", !editing); -	floater_camera->childSetEnabled("presets_btn", !editing); +	getChildView("preset_views_list")->setEnabled(!editing); +	getChildView("presets_btn")->setEnabled(!editing);  	//camera modes (object view, mouselook view) -	floater_camera->childSetEnabled("camera_modes_list", !editing); -	floater_camera->childSetEnabled("avatarview_btn", !editing); +	getChildView("camera_modes_list")->setEnabled(!editing); +	getChildView("avatarview_btn")->setEnabled(!editing);  }  void LLFloaterCamera::update() @@ -349,6 +360,9 @@ BOOL LLFloaterCamera::postBuild()  	update(); +	// ensure that appearance mode is handled while building. See EXT-7796. +	handleAvatarEditingAppearance(sAppearanceEditing); +  	return LLDockableFloater::postBuild();  } @@ -371,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())  	{ @@ -484,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 c5f8cd6db5..737bd17e72 100644 --- a/indra/newview/llfloatercamera.h +++ b/indra/newview/llfloatercamera.h @@ -124,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 3952c54670..8558345efa 100644 --- a/indra/newview/llfloatergroups.cpp +++ b/indra/newview/llfloatergroups.cpp @@ -98,7 +98,7 @@ BOOL LLFloaterGroupPicker::postBuild()  	setDefaultBtn("OK"); -	childEnable("OK"); +	getChildView("OK")->setEnabled(TRUE);  	return TRUE;  } @@ -179,8 +179,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(); @@ -190,8 +190,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) @@ -231,25 +231,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());  } @@ -347,11 +347,10 @@ void LLPanelGroups::onGroupList(LLUICtrl* ctrl, void* userdata)  	if(self) self->enableButtons();  } -void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 powers_mask) +void init_group_list(LLScrollListCtrl* group_list, const LLUUID& highlight_id, U64 powers_mask)  {  	S32 count = gAgent.mGroups.count();  	LLUUID id; -	LLCtrlListInterface *group_list = ctrl->getListInterface();  	if (!group_list) return;  	group_list->operateOnAll(LLCtrlListInterface::OP_DELETE); @@ -375,10 +374,12 @@ void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 pow  			element["columns"][0]["font"]["name"] = "SANSSERIF";  			element["columns"][0]["font"]["style"] = style; -			group_list->addElement(element, ADD_SORTED); +			group_list->addElement(element);  		}  	} +	group_list->sortOnce(0, TRUE); +  	// add "none" to list at top  	{  		std::string style = "NORMAL"; diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp index 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 8a20712ea8..aa5cb47a78 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..19e28720ae 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) @@ -2448,7 +2440,7 @@ void LLPanelLandAccess::refresh()  					suffix.append(" " + parent_floater->getString("Remaining") + ")");  				}  				if (mListAccess) -					mListAccess->addNameItem(entry.mID, ADD_SORTED, TRUE, suffix); +					mListAccess->addNameItem(entry.mID, ADD_DEFAULT, TRUE, suffix);  			}  		} @@ -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) @@ -2489,7 +2481,7 @@ void LLPanelLandAccess::refresh()  					}  					suffix.append(" " + parent_floater->getString("Remaining") + ")");  				} -				mListBanned->addNameItem(entry.mID, ADD_SORTED, TRUE, suffix); +				mListBanned->addNameItem(entry.mID, ADD_DEFAULT, TRUE, suffix);  			}  		} @@ -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..12d27b8790 100644 --- a/indra/newview/llfloaterlandholdings.cpp +++ b/indra/newview/llfloaterlandholdings.cpp @@ -75,10 +75,9 @@ BOOL LLFloaterLandHoldings::postBuild()  	childSetAction("Show on Map", onClickMap, this);  	// Grant list -	getChild<LLScrollListCtrl>("grant list")->setDoubleClickCallback(onGrantList, this); - -	LLCtrlListInterface *list = childGetListInterface("grant list"); -	if (!list) return TRUE; +	LLScrollListCtrl* grant_list = getChild<LLScrollListCtrl>("grant list"); +	grant_list->sortByColumnIndex(0, TRUE); +	grant_list->setDoubleClickCallback(onGrantList, this);  	S32 count = gAgent.mGroups.count();  	for(S32 i = 0; i < count; ++i) @@ -97,7 +96,7 @@ BOOL LLFloaterLandHoldings::postBuild()  		element["columns"][1]["value"] = areastr;  		element["columns"][1]["font"] = "SANSSERIF"; -		list->addElement(element, ADD_SORTED); +		grant_list->addElement(element);  	}  	center(); @@ -145,8 +144,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 +333,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..268a0e0b93 100644 --- a/indra/newview/llfloatermediabrowser.cpp +++ b/indra/newview/llfloatermediabrowser.cpp @@ -63,14 +63,38 @@ LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& key)  } +//static  +void LLFloaterMediaBrowser::create(const std::string &url, const std::string& target) +{ +	std::string tag = target; +	 +	if(target.empty() || target == "_blank") +	{ +		// create a unique tag for this instance +		LLUUID id; +		id.generate(); +		tag = id.asString(); +	} +	 +	// TODO: Figure out whether we need to close an existing instance and/or warn the user about the number of instances they have open +	 +	LLFloaterMediaBrowser *browser = dynamic_cast<LLFloaterMediaBrowser*> (LLFloaterReg::showInstance("media_browser", tag)); +	llassert(browser); +	if(browser) +	{ +		// tell the browser instance to load the specified URL +		browser->openMedia(url); +	} +} +  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 +107,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();  } @@ -105,6 +129,7 @@ BOOL LLFloaterMediaBrowser::postBuild()  	mAddressCombo = getChild<LLComboBox>("address");  	mAddressCombo->setCommitCallback(onEnterAddress, this); +	mAddressCombo->sortByName();  	childSetAction("back", onClickBack, this);  	childSetAction("forward", onClickForward, this); @@ -173,8 +198,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) @@ -185,22 +210,16 @@ void LLFloaterMediaBrowser::setCurrentURL(const std::string& url)  	if (mCurrentURL != "about:blank")  	{  		mAddressCombo->remove(mCurrentURL); -		mAddressCombo->add(mCurrentURL, ADD_SORTED); +		mAddressCombo->add(mCurrentURL);  		mAddressCombo->selectByValue(mCurrentURL);  		// Serialize url history  		LLURLHistory::removeURL("browser", mCurrentURL);  		LLURLHistory::addURL("browser", mCurrentURL);  	} -	childSetEnabled("back", mBrowser->canNavigateBack()); -	childSetEnabled("forward", mBrowser->canNavigateForward()); -	childSetEnabled("reload", TRUE); -} - -void LLFloaterMediaBrowser::onOpen(const LLSD& media_url) -{ -	LLFloater::onOpen(media_url); -	openMedia(media_url.asString()); +	getChildView("back")->setEnabled(mBrowser->canNavigateBack()); +	getChildView("forward")->setEnabled(mBrowser->canNavigateForward()); +	getChildView("reload")->setEnabled(TRUE);  }  //static  diff --git a/indra/newview/llfloatermediabrowser.h b/indra/newview/llfloatermediabrowser.h index c315f9e797..1645ed4613 100644 --- a/indra/newview/llfloatermediabrowser.h +++ b/indra/newview/llfloatermediabrowser.h @@ -47,10 +47,11 @@ class LLFloaterMediaBrowser :  public:  	LLFloaterMediaBrowser(const LLSD& key); +	static void create(const std::string &url, const std::string& target); +	  	/*virtual*/ BOOL postBuild();  	/*virtual*/ void onClose(bool app_quitting);  	/*virtual*/ void draw(); -	/*virtual*/ void onOpen(const LLSD& key);  	// inherited from LLViewerMediaObserver  	/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event); 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/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..a4b45e04f2 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. @@ -826,13 +826,11 @@ void LLFloaterPreference::buildPopupLists()  				row["columns"][1]["font"] = "SANSSERIF_SMALL";  				row["columns"][1]["width"] = 360;  			} -			item = disabled_popups.addElement(row, -											  ADD_SORTED); +			item = disabled_popups.addElement(row);  		}  		else  		{ -			item = enabled_popups.addElement(row, -											 ADD_SORTED); +			item = enabled_popups.addElement(row);  		}  		if (item) @@ -930,7 +928,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 +1099,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 +1212,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 +1350,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 +1371,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 +1396,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..a77fc4710a 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; @@ -712,38 +712,44 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)  				}  			} -			LLSD element; +			LLScrollListItem::Params item_params; +			item_params.value = task_id; -			element["id"] = task_id; -			element["columns"][0]["column"] = "size"; -			element["columns"][0]["value"] = llformat("%d", size); -			element["columns"][0]["font"] = "SANSSERIF"; -			element["columns"][1]["column"] = "urls"; -			element["columns"][1]["value"] = llformat("%d", urls); -			element["columns"][1]["font"] = "SANSSERIF"; -			element["columns"][2]["column"] = "name"; -			element["columns"][2]["value"] = name_buf; -			element["columns"][2]["font"] = "SANSSERIF"; -			element["columns"][3]["column"] = "owner"; -			element["columns"][3]["value"] = owner_buf; -			element["columns"][3]["font"] = "SANSSERIF"; -			element["columns"][4]["column"] = "parcel"; -			element["columns"][4]["value"] = parcel_name; -			element["columns"][4]["font"] = "SANSSERIF"; -			element["columns"][5]["column"] = "location"; -			if(has_locations) -			{ -				element["columns"][5]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z); -			} -			else -			{ -				element["columns"][5]["value"] = ""; -			} -			element["columns"][5]["font"] = "SANSSERIF"; +			LLScrollListCell::Params cell_params; +			cell_params.font = LLFontGL::getFontSansSerif(); + +			cell_params.column = "size"; +			cell_params.value = size; +			item_params.columns.add(cell_params); + +			cell_params.column = "urls"; +			cell_params.value = urls; +			item_params.columns.add(cell_params); + +			cell_params.column = "name"; +			cell_params.value = name_buf; +			item_params.columns.add(cell_params); -			list->addElement(element, ADD_SORTED); +			cell_params.column = "owner"; +			cell_params.value = owner_buf; +			item_params.columns.add(cell_params); + +			cell_params.column = "parcel"; +			cell_params.value = parcel_name; +			item_params.columns.add(cell_params); + +			cell_params.column = "location"; +			cell_params.value = has_locations +				? llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z) +				: ""; +			item_params.columns.add(cell_params); + +			list->addRow(item_params); +			LLSD element;  			element["owner_id"] = owner_id; + +			element["id"] = task_id;  			element["local_id"] = local_id;  			mObjectListItems.push_back(element);  		} @@ -818,7 +824,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 +836,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 +847,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 +872,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 +891,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 +920,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 +948,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 +1219,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 +1233,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 +1247,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 +1297,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 +1309,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 565f0619a5..0988588d9c 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) @@ -421,25 +421,25 @@ void LLFloaterTools::refresh()  	LLLocale locale(LLLocale::USER_LOCALE);  	std::string obj_count_string;  	LLResMgr::getInstance()->getIntegerString(obj_count_string, LLSelectMgr::getInstance()->getSelection()->getRootObjectCount()); -	childSetTextArg("obj_count",  "[COUNT]", obj_count_string);	 +	getChild<LLUICtrl>("obj_count")->setTextArg("[COUNT]", obj_count_string);	  	std::string prim_count_string;  	LLResMgr::getInstance()->getIntegerString(prim_count_string, LLSelectMgr::getInstance()->getSelection()->getObjectCount()); -	childSetTextArg("prim_count", "[COUNT]", prim_count_string); +	getChild<LLUICtrl>("prim_count")->setTextArg("[COUNT]", prim_count_string);  	// calculate selection rendering cost  	if (sShowObjectCost)  	{  		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);  	}  	// disable the object and prim counts if nothing selected  	bool have_selection = ! LLSelectMgr::getInstance()->getSelection()->isEmpty(); -	childSetEnabled("obj_count", have_selection); -	childSetEnabled("prim_count", have_selection); -	childSetEnabled("RenderingCost", have_selection && sShowObjectCost); +	getChildView("obj_count")->setEnabled(have_selection); +	getChildView("prim_count")->setEnabled(have_selection); +	getChildView("RenderingCost")->setEnabled(have_selection && sShowObjectCost);  	// Refresh child tabs  	mPanelPermissions->refresh(); @@ -507,8 +507,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 && @@ -533,7 +533,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()); @@ -571,7 +571,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)  	{ @@ -714,17 +714,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);  } @@ -1091,7 +1091,7 @@ void LLFloaterTools::getMediaState()  		  &&first_object->permModify()   	      ))  	{ -		childSetEnabled("Add_Media",  FALSE); +		getChildView("Add_Media")->setEnabled(FALSE);  		media_info->clear();  		clearMediaSettings();  		return; @@ -1102,7 +1102,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; @@ -1194,7 +1194,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 )  	{ @@ -1221,10 +1221,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. @@ -1251,10 +1251,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/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 48095ff200..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(); 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 24e818908a..d3d52e20f7 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -1874,13 +1874,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 +1894,7 @@ BOOL LLFolderView::handleRightMouseDown( S32 x, S32 y, MASK mask )  	}  	else  	{ -		if(menu && menu->getVisible()) +		if (menu && menu->getVisible())  		{  			menu->setVisible(FALSE);  		} @@ -1898,6 +1903,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 ); diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index 3944fa53c9..f1d39a41ae 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; } @@ -291,6 +292,8 @@ protected:  	bool selectFirstItem();  	bool selectLastItem(); +	BOOL addNoOptions(LLMenuGL* menu) const; +  protected:  	LLHandle<LLView>					mPopupMenuHandle; 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..cd35ec5d39 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); @@ -1709,12 +1728,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 +1743,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 +1772,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 +1958,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 +1982,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 0b1408616e..38f3521b2d 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -952,6 +952,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; @@ -963,9 +965,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;  }  // +=================================================+ @@ -2612,12 +2615,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. diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index f20acbd016..303031ab29 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/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..1de9d1c9b0 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.lower_bound(request); +	 +	if(*iter == request) +	{ +		LL_WARNS("LLMediaDataClient") << "Tracking already tracked request: " << *request << LL_ENDL; +	} +	else +	{ +		mUnQueuedRequests.insert(iter, request); +	} +} + +void LLMediaDataClient::stopTrackingRequest(request_ptr_t request) +{ +	request_set_t::iterator iter = mUnQueuedRequests.find(request); +	 +	if(*iter == request) +	{ +		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/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index 63ffb80ff2..8147a97317 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -665,7 +665,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::getCanAddToCOF(mSelectedOutfitUUID);  	}  	if (command_name == "take_off")  	{ @@ -677,6 +688,7 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata)  	if (command_name == "wear_add")  	{ +		// *TODO: do we ever get here?  		if (gAgentWearables.isCOFChangeInProgress())  		{  			return false; @@ -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); diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h index d7cf8a8c08..206854b232 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(); 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 af6214385b..09b718f8b8 100644 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -263,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"); @@ -271,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);  		} @@ -311,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);  } @@ -326,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) @@ -382,7 +382,7 @@ void LLPanelClassifiedInfo::draw()  LLUUID LLPanelClassifiedInfo::getSnapshotId()  { -	return childGetValue("classified_snapshot").asUUID(); +	return getChild<LLUICtrl>("classified_snapshot")->getValue().asUUID();  }  // static @@ -437,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) @@ -687,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 @@ -703,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());  	}  } @@ -735,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); @@ -774,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"));  		}  	}  } @@ -842,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() @@ -883,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() @@ -934,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; @@ -944,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() @@ -991,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() @@ -1154,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/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 094769b8f5..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"); @@ -905,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);  			} @@ -1186,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);  	}  } @@ -1388,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 1c980c207e..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; @@ -115,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 e3503c065b..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) @@ -514,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);  		}  		{ @@ -533,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>  			{ @@ -553,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);  		}  		{ @@ -568,9 +568,9 @@ 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 @@ -584,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 @@ -612,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);  		}  		{ @@ -632,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);  		} @@ -660,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);  		}  		{ @@ -685,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);  		}  		{ @@ -711,14 +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)  			{ -				childSetValue("TexScaleU", 2.0f * childGetValue("TexScaleU").asReal() ); -				childSetValue("TexScaleV", 2.0f * childGetValue("TexScaleV").asReal() ); +				getChild<LLUICtrl>("TexScaleU")->setValue(2.0f * getChild<LLUICtrl>("TexScaleU")->getValue().asReal() ); +				getChild<LLUICtrl>("TexScaleV")->setValue(2.0f * getChild<LLUICtrl>("TexScaleV")->getValue().asReal() );  			}  		} @@ -734,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 @@ -761,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);  			}  		}  	} @@ -792,19 +792,19 @@ void LLPanelFace::getState()  			mColorSwatch->setFallbackImageName("locked_image.j2c" );  			mColorSwatch->setValid(FALSE);  		} -		childSetEnabled("color trans",FALSE); -		childSetEnabled("rpt",FALSE); -		childSetEnabled("tex offset",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);  	}  } @@ -934,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..155e000bb8 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()) @@ -750,7 +746,7 @@ void LLPanelGroupGeneral::updateMembers()  		sSDTime += sd_timer.getElapsedTimeF32();  		element_timer.reset(); -		LLScrollListItem* member_row = mListVisibleMembers->addElement(row);//, ADD_SORTED); +		LLScrollListItem* member_row = mListVisibleMembers->addElement(row);  		if ( member->isOwner() )  		{ diff --git a/indra/newview/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..16d5f8140d 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 )  			{ @@ -528,7 +528,7 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)  			row["columns"][4]["column"] = "hidden";  			row["columns"][4]["value"] = hidden; -			mGroupParcelsp->addElement(row, ADD_SORTED); +			mGroupParcelsp->addElement(row);  		}  	}  } @@ -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..efc797cfe9 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,13 +1625,13 @@ 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();  			row["columns"][2]["font"] = "SANSSERIF_SMALL"; -			LLScrollListItem* member = mMembersList->addElement(row);//, ADD_SORTED); +			LLScrollListItem* member = mMembersList->addElement(row);  			LLUUID id = member->getUUID();  			mHasMatch = TRUE; diff --git a/indra/newview/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..b399e41791 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -718,8 +718,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..58ed01896a 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) @@ -1110,9 +1110,10 @@ void LLPanelLogin::updateServerCombo()  	{  		if (!grid_choice->first.empty())  		{ -			server_choice_combo->add(grid_choice->second, grid_choice->first, ADD_SORTED); +			server_choice_combo->add(grid_choice->second, grid_choice->first);  		}  	} +	server_choice_combo->sortByName();  	server_choice_combo->addSeparator(ADD_TOP); @@ -1173,6 +1174,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 873ac4134c..d7ffdacb70 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -491,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)  	{ @@ -499,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(); @@ -591,7 +591,7 @@ void LLPanelMainInventory::updateItemcountText()  	{  		text = getString("ItemcountUnknown");  	} -	childSetText("ItemcountText",text); +	getChild<LLUICtrl>("ItemcountText")->setValue(text);  }  void LLPanelMainInventory::setFilterTextFromFilter()  @@ -658,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() ) ) @@ -698,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) @@ -721,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));  } @@ -745,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())  	{ @@ -778,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; @@ -849,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) @@ -869,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 @@ -888,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);  }  ////////////////////////////////////////////////////////////////////////////////// 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 7779ac6392..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) diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index a1b3114bb4..aadd14d97a 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -464,17 +464,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); @@ -993,19 +993,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);  		}  	} @@ -1016,27 +1016,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);  		}  	} @@ -1919,15 +1919,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 ca1361c84b..116e5ba4cb 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 6ab7fd6a2b..c7ac4af14c 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -44,6 +44,7 @@  #include "llfilteredwearablelist.h"  #include "llfolderviewitem.h"  #include "llinventory.h" +#include "llinventoryitemslist.h"  #include "llviewercontrol.h"  #include "llui.h"  #include "llfloater.h" @@ -231,9 +232,12 @@ public:  		llassert(flat_list);  		llassert(inventory_panel); -		registrar.add("AddWearable.Gear.Sort", boost::bind(onSort, flat_list, inventory_panel, _2)); -		enable_registrar.add("AddWearable.Gear.Check", boost::bind(onCheck, flat_list, inventory_panel, _2)); -		enable_registrar.add("AddWearable.Gear.Visible", boost::bind(onVisible, inventory_panel, _2)); +		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", @@ -243,10 +247,15 @@ public:  	}  private: -	static void onSort(LLWearableItemsList* flat_list, -					   LLInventoryPanel* inventory_panel, +	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; @@ -261,7 +270,7 @@ private:  		}  		else if ("by_type" == sort_order_str)  		{ -			sort_order = LLWearableItemsList::E_SORT_BY_TYPE; +			sort_order = LLWearableItemsList::E_SORT_BY_TYPE_NAME;  		}  		else  		{ @@ -276,14 +285,18 @@ private:  		else  		{  			flat_list->setSortOrder(sort_order); -			gSavedSettings.setU32("AddWearableSortOrder", sort_order);  		}  	} -	static bool onCheck(LLWearableItemsList* flat_list, -						LLInventoryPanel* inventory_panel, +	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 @@ -320,16 +333,20 @@ private:  			}  			else if ("by_type" == sort_order_str)  			{ -				return LLWearableItemsList::E_SORT_BY_TYPE == sort_order; +				return LLWearableItemsList::E_SORT_BY_TYPE_NAME == sort_order;  			}  			llwarns << "Unrecognized wearable list sort order" << llendl;  		}  		return false;  	} -	static bool onVisible(LLInventoryPanel* inventory_panel, +	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 ) @@ -531,7 +548,6 @@ BOOL LLPanelOutfitEdit::postBuild()  	mWearableItemsList->setCommitOnSelectionChange(true);  	mWearableItemsList->setCommitCallback(boost::bind(&LLPanelOutfitEdit::updatePlusButton, this));  	mWearableItemsList->setDoubleClickCallback(boost::bind(&LLPanelOutfitEdit::onPlusBtnClicked, this)); -	mWearableItemsList->setSortOrder((LLWearableItemsList::ESortOrder)gSavedSettings.getU32("AddWearableSortOrder"));  	mSaveComboBtn.reset(new LLSaveOutfitComboBtn(this));  	return TRUE; @@ -570,35 +586,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)  	{ @@ -746,11 +773,11 @@ void LLPanelOutfitEdit::onAddWearableClicked(void)  	}  } -void LLPanelOutfitEdit::onReplaceMenuItemClicked(LLUUID selected_item_id) +void LLPanelOutfitEdit::onReplaceBodyPartMenuItemClicked(LLUUID selected_item_id)  {  	LLViewerInventoryItem* item = gInventory.getLinkedItem(selected_item_id); -	if (item) +	if (item && item->getType() == LLAssetType::AT_BODYPART)  	{  		showFilteredWearablesListView(item->getWearableType());  	} @@ -777,21 +804,21 @@ void LLPanelOutfitEdit::onShopButtonClicked()  		}  		else  		{ -			if (type == LLWearableType::WT_NONE) -			{ -				type = getCOFWearablesSelectionType(); -			} +		if (type == LLWearableType::WT_NONE) +		{ +			type = getCOFWearablesSelectionType(); +		} -			ESex sex = gAgentAvatarp->getSex(); +		ESex sex = gAgentAvatarp->getSex(); -			// WT_INVALID comes for attachments -			if (type != LLWearableType::WT_INVALID && type != LLWearableType::WT_NONE) -			{ -				url = url_resolver.resolveURL(type, sex); -			} +		// WT_INVALID comes for attachments +		if (type != LLWearableType::WT_INVALID && type != LLWearableType::WT_NONE) +		{ +			url = url_resolver.resolveURL(type, sex); +		} -			if (url.empty()) -			{ +		if (url.empty()) +		{  				url = url_resolver.resolveURL(  						mCOFWearables->getExpandedAccordionAssetType(), sex);  			} @@ -901,7 +928,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); @@ -961,15 +988,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();  		} @@ -1126,7 +1176,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); @@ -1149,6 +1199,18 @@ 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)  {  	LLMenuGL* menu = NULL; @@ -1257,6 +1319,11 @@ void LLPanelOutfitEdit::getSelectedItemsUUID(uuid_vec_t& uuid_list)  //	return selected_id;  } +void LLPanelOutfitEdit::onCOFChanged() +{ +	update(); +} +  void LLPanelOutfitEdit::updateWearablesPanelVerbButtons()  {  	if(mWearablesListViewPanel->getVisible()) @@ -1315,12 +1382,6 @@ void LLPanelOutfitEdit::saveListSelection()  		}  		mInventoryItemsPanel->getRootFolder()->scrollToShowSelection();  	} - -} - -void LLPanelOutfitEdit::onCOFChanged() -{ -	update();  }  // EOF diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h index 93215c5920..0b6926b83e 100644 --- a/indra/newview/llpaneloutfitedit.h +++ b/indra/newview/llpaneloutfitedit.h @@ -64,6 +64,7 @@ class LLMenuGL;  class LLFindNonLinksByMask;  class LLFindWearablesOfType;  class LLSaveOutfitComboBtn; +class LLWearableItemTypeNameComparator;  class LLPanelOutfitEdit : public LLPanel  { @@ -140,12 +141,6 @@ public:  	void showWearablesListView();  	void showWearablesFolderView(); -	/** -	 * Method preserves selection while switching between folder/list view modes -	*/ -	void saveListSelection(); - -	void updateWearablesPanelVerbButtons();  	void updateFiltersVisibility();  	void onFolderViewFilterCommitted(LLUICtrl* ctrl); @@ -170,7 +165,7 @@ public:  	void onRemoveFromOutfitClicked(void);  	void onEditWearableClicked(void);  	void onAddWearableClicked(void); -	void onReplaceMenuItemClicked(LLUUID selected_item_id); +	void onReplaceBodyPartMenuItemClicked(LLUUID selected_item_id);  	void onShopButtonClicked();  	void displayCurrentOutfit(); @@ -188,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, @@ -204,6 +201,13 @@ 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; 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..11b51f4dd4 100644 --- a/indra/newview/llpanelpick.cpp +++ b/indra/newview/llpanelpick.cpp @@ -247,13 +247,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 +306,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 +399,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 +428,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 +511,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 +547,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/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp index 8c1f5d0915..1ca4a048a4 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);  } @@ -185,7 +186,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 +263,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/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 0648d99685..81e805974f 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -1171,7 +1171,7 @@ void LLPanelPrimMediaControls::setCurrentURL()  //	if (media_address_combo && mCurrentURL != "about:blank")  //	{  //		media_address_combo->remove(mCurrentURL); -//		media_address_combo->add(mCurrentURL, ADD_SORTED); +//		media_address_combo->add(mCurrentURL);  //		media_address_combo->selectByValue(mCurrentURL);  //	}  #else   // USE_COMBO_BOX_FOR_MEDIA_URL diff --git a/indra/newview/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/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/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/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 6f9d8a7623..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); 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 7fdc5c8b5f..c1cb386556 100644 --- a/indra/newview/llpreviewtexture.cpp +++ b/indra/newview/llpreviewtexture.cpp @@ -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);  		}  	} @@ -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/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/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 7a7ffb9983..adfd457664 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); @@ -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/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 1ee73034f6..2475870b17 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. @@ -1645,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; 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/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/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 0b02861b75..127e4010ca 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();  } @@ -403,7 +406,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)); @@ -442,12 +445,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)); @@ -524,10 +527,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 )  @@ -544,9 +547,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(); @@ -597,6 +600,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; +		}  	}  } @@ -651,13 +679,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); @@ -730,7 +758,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..dddfed097d 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -290,8 +290,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() @@ -344,6 +344,11 @@ public:   			llwarns << "Worker not found: " << mID << llendl;  		}  	} + +	virtual bool followRedir() +	{ +		return mFollowRedir; +	}  private:  	LLTextureFetch* mFetcher; @@ -351,6 +356,7 @@ private:  	U64 mStartTime;  	S32 mRequestedSize;  	U32 mOffset; +	bool mFollowRedir;  };  ////////////////////////////////////////////////////////////////////////////// @@ -897,7 +903,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 +951,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; 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/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 95c4f01e46..f9e7191b21 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -1561,7 +1561,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/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/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 2d57c16889..a6e8ea032a 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -96,6 +96,7 @@ public:  		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"); @@ -1172,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) @@ -1194,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/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 178d928f57..7a17bfeb46 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) @@ -2823,25 +2826,18 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla  			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, target is \"" << plugin->getClickTarget() << "\", uri is " << plugin->getClickURL() << LL_ENDL;  			// retrieve the event parameters  			std::string url = plugin->getClickURL(); +			std::string target = plugin->getClickTarget();  			U32 target_type = plugin->getClickTargetType(); -			 +  			switch (target_type)  			{ -			case LLPluginClassMedia::TARGET_EXTERNAL: -				// force url to external browser -				LLWeb::loadURLExternal(url); -				break; -			case LLPluginClassMedia::TARGET_BLANK: -				// open in SL media browser or external browser based on user pref -				LLWeb::loadURL(url); -				break;  			case LLPluginClassMedia::TARGET_NONE:  				// ignore this click and let media plugin handle it  				break; -			case LLPluginClassMedia::TARGET_OTHER: -				LL_WARNS("LinkTarget") << "Unsupported link target type" << LL_ENDL; +			default: +				// loadURL now handles distinguishing between _blank, _external, and other named targets. +				LLWeb::loadURL(url, target);  				break; -			default: break;  			}  		};  		break; @@ -2916,14 +2912,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 +2942,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 @@ -3223,7 +3238,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 b3fc0df1bf..a83980dc23 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*); @@ -2403,31 +2406,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*) @@ -5519,27 +5546,27 @@ bool enable_object_stand_up()  	return sitting_on_selection();  } -bool enable_object_sit() +bool enable_object_sit(LLUICtrl* ctrl)  {  	// '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 !sitting_on_sel && is_object_sittable();  } @@ -8087,7 +8114,6 @@ 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.EnableGearSit", boost::bind(&is_object_sittable));  	commit.add("Object.Delete", boost::bind(&handle_object_delete));  	view_listener_t::addMenu(new LLObjectAttachToAvatar(), "Object.AttachToAvatar");  	view_listener_t::addMenu(new LLObjectReturn(), "Object.Return"); @@ -8103,12 +8129,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"); +	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.EnableStandUp", boost::bind(&enable_object_stand_up)); -	enable.add("Object.EnableSit", boost::bind(&enable_object_sit)); +	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 2b6eadcc04..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);  						}  					} @@ -5303,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/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index da240cedbb..004d138221 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -429,7 +429,7 @@ void LLViewerRegion::saveCache()  	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 ); +		llformat("objects_%d_%d.slc", U32(mHandle>>32)/REGION_WIDTH_UNITS, U32(mHandle)/REGION_WIDTH_UNITS );  	LLFILE* fp = LLFile::fopen(filename, "wb");		/* Flawfinder: ignore */  	if (!fp) diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index 59efae4cb2..8bd43bb30c 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 = ""; @@ -567,7 +575,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); @@ -698,7 +706,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; @@ -1019,7 +1027,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 @@ -1053,7 +1061,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));  		} @@ -1065,7 +1073,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 ); @@ -1083,7 +1091,7 @@ BOOL LLViewerTextEditor::openEmbeddedItemAtPos(S32 pos)  } -BOOL LLViewerTextEditor::openEmbeddedItem(LLInventoryItem* item, llwchar wc) +BOOL LLViewerTextEditor::openEmbeddedItem(LLPointer<LLInventoryItem> item, llwchar wc)  {  	switch( item->getType() ) @@ -1151,17 +1159,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);  	}  } @@ -1220,7 +1228,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 e38608bcfc..9d4f6fdd0c 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -2131,7 +2131,7 @@ void LLViewerFetchedTexture::deleteCallbackEntry(const LLLoadedCallbackEntry::so  void LLViewerFetchedTexture::unpauseLoadedCallbacks(const LLLoadedCallbackEntry::source_callback_list_t* callback_list)  {  	if(!callback_list) -	{ +{  		mPauseLoadedCallBacks = FALSE ;  		return ;  	} @@ -2160,7 +2160,7 @@ void LLViewerFetchedTexture::unpauseLoadedCallbacks(const LLLoadedCallbackEntry:  void LLViewerFetchedTexture::pauseLoadedCallbacks(const LLLoadedCallbackEntry::source_callback_list_t* callback_list)  {  	if(!callback_list) -	{ +{  		return ;  	} diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 2f63e7ef01..b36af7d95b 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2482,17 +2482,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(); @@ -4390,7 +4379,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 9353c6daef..6e1a9c61e6 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2005,8 +2005,8 @@ void LLVOAvatar::updateMeshData()  				}  				else  				{ -					facep->mVertexBuffer->resizeBuffer(num_vertices, num_indices) ; -				} +				facep->mVertexBuffer->resizeBuffer(num_vertices, num_indices) ; +			}  			}  			facep->setGeomIndex(0); @@ -3789,11 +3789,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) @@ -4095,9 +4095,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 @@ -4172,10 +4176,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) @@ -4195,7 +4200,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(); @@ -4207,6 +4212,10 @@ void LLVOAvatar::checkTextureLoading()  			if(pause)//pause texture fetching.  			{  				tex->pauseLoadedCallbacks(&mCallbackTextureList) ; + +				//set to terminate texture fetching after MAX_TEXTURE_UPDATE_INTERVAL frames. +				tex->setMaxVirtualSizeResetInterval(MAX_TEXTURE_UPDATE_INTERVAL); +				tex->resetMaxVirtualSizeResetCounter() ;  			}  			else//unpause  			{ @@ -4218,6 +4227,10 @@ void LLVOAvatar::checkTextureLoading()  		}		  	}			 +	if(!pause) +	{ +		updateTextures() ; //refresh texture stats. +	}  	mLoadedCallbacksPaused = pause ;  	return ;  } @@ -4226,12 +4239,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);	 diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 83ca299da1..5de08e8e27 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -623,7 +623,7 @@ private:  public:  	void			setClothesColor(LLVOAvatarDefines::ETextureIndex te, const LLColor4& new_color, BOOL upload_bake);  	LLColor4		getClothesColor(LLVOAvatarDefines::ETextureIndex te); -	static BOOL		teToColorParams(LLVOAvatarDefines::ETextureIndex te, U32 *param_name); +	static BOOL			teToColorParams(LLVOAvatarDefines::ETextureIndex te, U32 *param_name);  	//--------------------------------------------------------------------  	// Global colors @@ -1049,6 +1049,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 8961d2c285..bddde08ca9 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -1148,11 +1148,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,15 +1622,18 @@ 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); @@ -2032,7 +2035,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() ; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 5644e02134..a75ab95622 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -93,8 +93,14 @@ static LLFastTimer::DeclareTimer FTM_GEN_VOLUME("Generate Volumes");  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(); } @@ -119,6 +125,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(); } @@ -193,6 +211,7 @@ LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *re  	mMediaImplList.resize(getNumTEs());  	mLastFetchedMediaVersion = -1;  	mIndexInTex = 0; +	mMDCImplCount = 0;  }  LLVOVolume::~LLVOVolume() @@ -218,9 +237,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++) @@ -2025,12 +2047,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); @@ -2038,7 +2060,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);  	} @@ -2060,14 +2082,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;  			}  		} @@ -2084,9 +2111,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 fbae011ffc..1bd6a0fafe 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -274,6 +274,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); @@ -307,6 +311,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 dfa7ca7136..c5042ca016 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -698,7 +698,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 b614860b74..c9130b56b4 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -465,6 +465,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 +516,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. @@ -505,36 +528,60 @@ bool LLWearableItemTypeNameComparator::doCompare(const LLPanelInventoryListItemB  	if (item_wearable_type1 != item_wearable_type2)  	{ -		// 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; +} -	case LLAssetType::AT_BODYPART: -		return TLO_BODYPART; +bool LLWearableItemTypeNameComparator::sortAssetTypeByName(LLAssetType::EType item_type) const +{ +	wearable_type_order_map_t::const_iterator const_it = mWearableOrder.find(item_type); -	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*/ @@ -550,12 +597,12 @@ bool LLWearableItemCreationDateComparator::doCompare(const LLPanelInventoryListI  	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; @@ -569,7 +616,7 @@ LLWearableItemsList::Params::Params()  LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p)  :	LLInventoryItemsList(p)  { -	setSortOrder(E_SORT_BY_TYPE, false); +	setSortOrder(E_SORT_BY_TYPE_LAYER, false);  	mIsStandalone = p.standalone;  	if (mIsStandalone)  	{ @@ -679,9 +726,15 @@ void LLWearableItemsList::setSortOrder(ESortOrder sort_order, bool sort_now)  	case E_SORT_BY_NAME:  		setComparator(&WEARABLE_NAME_COMPARATOR);  		break; -	case E_SORT_BY_TYPE: +	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 @@ -718,13 +771,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)); @@ -767,6 +818,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; @@ -802,16 +855,21 @@ 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;  	// *TODO: eliminate multiple traversals over the menu items -	setMenuItemVisible(menu, "wear_wear", 			n_already_worn == 0 && n_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",			mask == MASK_CLOTHING && n_worn == 0 && n_already_worn != 0); +	setMenuItemVisible(menu, "wear_add",			mask == MASK_CLOTHING && n_worn == 0 && n_already_worn != 0 && can_be_worn);  	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_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); diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index 55f8996140..81f1cd1b40 100644 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -307,33 +307,76 @@ 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 :      KYES              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;  };  /** @@ -405,7 +448,8 @@ public:  		// Values should be compatible with InventorySortOrder setting.  		E_SORT_BY_NAME			= 0,  		E_SORT_BY_MOST_RECENT	= 1, -		E_SORT_BY_TYPE			= 2, +		E_SORT_BY_TYPE_LAYER	= 2, +		E_SORT_BY_TYPE_NAME 	= 3,  	} ESortOrder;  	virtual ~LLWearableItemsList(); diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index 5c9633c036..b61109d490 100644 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -84,23 +84,23 @@ void LLWeb::initClass()  // static -void LLWeb::loadURL(const std::string& url) +void LLWeb::loadURL(const std::string& url, const std::string& target)  { -	if (gSavedSettings.getBOOL("UseExternalBrowser")) +	if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))  	{  		loadURLExternal(url);  	}  	else  	{ -		loadURLInternal(url); +		loadURLInternal(url, target);  	}  }  // static -void LLWeb::loadURLInternal(const std::string &url) +void LLWeb::loadURLInternal(const std::string &url, const std::string& target)  { -	LLFloaterReg::showInstance("media_browser", url); +	LLFloaterMediaBrowser::create(url, target);  } diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h index 1119b80bb4..20c7391dbf 100644 --- a/indra/newview/llweb.h +++ b/indra/newview/llweb.h @@ -49,11 +49,14 @@ public:  	static void initClass();  	/// Load the given url in the user's preferred web browser -	static void loadURL(const std::string& url); +	static void loadURL(const std::string& url, const std::string& target); +	static void loadURL(const std::string& url) { loadURL(url, LLStringUtil::null); }  	/// Load the given url in the user's preferred web browser	 -	static void loadURL(const char* url) { loadURL( ll_safe_string(url) ); } +	static void loadURL(const char* url, const std::string& target) { loadURL( ll_safe_string(url), target); } +	static void loadURL(const char* url) { loadURL( ll_safe_string(url), LLStringUtil::null ); }  	/// Load the given url in the Second Life internal web browser -	static void loadURLInternal(const std::string &url); +	static void loadURLInternal(const std::string &url, const std::string& target); +	static void loadURLInternal(const std::string &url) { loadURLInternal(url, LLStringUtil::null); }  	/// Load the given url in the operating system's web browser, async if we want to return immediately  	/// before browser has spawned  	static void loadURLExternal(const std::string& url); 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 1dc46a4012..c8f834c7f7 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -635,10 +635,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; @@ -1975,8 +1975,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 @@ -1988,24 +1988,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) @@ -3616,7 +3616,7 @@ void LLPipeline::renderDebug()  			if (i > 3)  			{ //render shadow frusta as volumes  				if (mShadowFrustPoints[i-4].empty()) -				{ +			{  					continue;  				} @@ -3649,22 +3649,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(); @@ -3690,7 +3690,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(); -				} +					}  			} @@ -4315,7 +4315,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)  	{ @@ -4631,8 +4631,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}; @@ -4666,7 +4666,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; @@ -6336,13 +6336,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)  		{ @@ -6387,19 +6387,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); @@ -6501,75 +6501,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(), @@ -7232,7 +7232,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)  		LLPipeline::sUseOcclusion = llmin(occlusion, 1);  		gPipeline.pushRenderTypeMask(); -		 +  		glh::matrix4f projection = glh_get_current_projection();  		glh::matrix4f mat; @@ -7322,24 +7322,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);  							}  						} @@ -7351,15 +7351,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();  			}	 @@ -7663,7 +7663,7 @@ BOOL LLPipeline::getVisiblePointCloud(LLCamera& camera, LLVector3& min, LLVector  	//bounding box line segments  	U32 bs[] =  -	{ +			{  		0,1,  		1,3,  		3,2, @@ -7701,9 +7701,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[] =  	{ @@ -7716,7 +7716,7 @@ BOOL LLPipeline::getVisiblePointCloud(LLCamera& camera, LLVector3& min, LLVector  		5,6,  		6,7,  		7,4, - +	  		0,4,  		1,5,  		2,6, @@ -7725,7 +7725,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) @@ -7748,17 +7748,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] || @@ -7768,24 +7768,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; @@ -8588,141 +8588,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; - -			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]; -					} +	//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];  				}  			}  		} -		 -		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/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/panel_nearby_media.xml b/indra/newview/skins/default/xui/da/panel_nearby_media.xml index 7d25b2af99..a269e35f4b 100644 --- a/indra/newview/skins/default/xui/da/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/da/panel_nearby_media.xml @@ -42,7 +42,7 @@  			<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"/> 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..b1ec2c44df 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,8 @@  	</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> 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 e7886fa149..ef66148902 100644 --- a/indra/newview/skins/default/xui/de/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/de/panel_nearby_media.xml @@ -42,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/sidepanel_item_info.xml b/indra/newview/skins/default/xui/de/sidepanel_item_info.xml index 63e7bce8ae..b9ca969ac5 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,8 @@  	</panel.string>  	<text name="title" value="Objektprofil"/>  	<text name="origin" value="(Inventar)"/> -	<panel label=""> +	<panel label="" +           name="item_profile">  		<text name="LabelItemNameTitle">  			Name:  		</text> 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_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml index c02d607586..18f3b9ab06 100644 --- a/indra/newview/skins/default/xui/en/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml @@ -9,7 +9,7 @@   name="floater_about"   help_topic="floater_about"   save_rect="true" - single_instance="true" + auto_tile="true"   title="MEDIA BROWSER"   width="820">      <floater.string 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/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 b6f00ef6d1..8ec7689819 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.EnableGearSit" /> +     function="Object.EnableSit"/>    </menu_item_call>    <menu_item_call     label="Pay" 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 67b8c81a01..52cf24333f 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -951,17 +951,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"> @@ -1681,7 +1670,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/> @@ -3389,4 +3395,4 @@              </menu>          </menu>      </menu> -</menu_bar>
\ No newline at end of file +</menu_bar> 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_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml index c98213f6c7..17e8d4d2df 100644 --- a/indra/newview/skins/default/xui/en/panel_chat_header.xml +++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml @@ -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_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml index 76f7484c68..1e1d2d18ca 100644 --- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml @@ -60,6 +60,8 @@       left="0"       right="-1"       top="0" +     sort_column="0" +     sort_ascending="true"       name="group_parcel_list"       width="313">          <scroll_list.columns diff --git a/indra/newview/skins/default/xui/en/panel_group_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_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_outfits_list.xml b/indra/newview/skins/default/xui/en/panel_outfits_list.xml index 9833b1dccb..d18f0d57ca 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_list.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_list.xml @@ -14,6 +14,9 @@       background_visible="true"       bg_alpha_color="DkGray2"       bg_opaque_color="DkGray2" +     no_matched_tabs_text.value="Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search]." +     no_matched_tabs_text.v_pad="10" +     no_visible_tabs_text.value="You don't have any outfits yet. Try [secondlife:///app/search/all/ Search]"       follows="all"       height="400"       layout="topleft" @@ -21,13 +24,6 @@       name="outfits_accordion"       top="0"       width="309"> -        <no_matched_tabs_text -         name="no_matched_outfits_msg" -         value="Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search]." -         v_pad="10" /> -        <no_visible_tabs_text -         name="no_outfits_msg" -         value="You don't have any outfits yet. Try [secondlife:///app/search/all/ Search]." />      </accordion>      <panel       background_visible="true" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml index 516457dd93..559df5bec9 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml @@ -57,6 +57,8 @@       left="10"       multi_select="true"       name="enabled_popups" +     sort_column="0" +     sort_ascending="true"        width="495" />  	 <button  	 enabled_control="FirstSelectedDisabledPopups" @@ -103,6 +105,8 @@       height="140"       layout="topleft"       left="10" +     sort_column="0" +     sort_ascending="true"       multi_select="true"       name="disabled_popups"       width="495" /> diff --git a/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml index 9dff00fa0b..c5e8bf5803 100644 --- a/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml +++ b/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml @@ -79,6 +79,8 @@       layout="topleft"       left_delta="0"       multi_select="true" +     sort_column="0" +     sort_ascending="true"       name="scripts_list"       top_delta="16"       width="460"> diff --git a/indra/newview/skins/default/xui/en/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 e5bd549036..9941732c30 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 --> @@ -2102,6 +2103,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> @@ -3022,6 +3024,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> @@ -3141,6 +3146,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... @@ -3165,6 +3171,7 @@ Abuse Report</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> @@ -3235,4 +3242,20 @@ Abuse Report</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> +    </strings> 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 b78ecd0cd0..f03338e4c7 100644 --- a/indra/newview/skins/default/xui/es/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/es/panel_nearby_media.xml @@ -42,7 +42,7 @@  			<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"/> 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..d3b91e7a71 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,8 @@  	</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> 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/menu_object.xml b/indra/newview/skins/default/xui/fr/menu_object.xml index 257c44795f..6492a83e06 100644 --- a/indra/newview/skins/default/xui/fr/menu_object.xml +++ b/indra/newview/skins/default/xui/fr/menu_object.xml @@ -1,9 +1,7 @@  <?xml version="1.0" encoding="utf-8" standalone="yes"?>  <context_menu name="Object Pie"> -	<menu_item_call label="Toucher" name="Object Touch"> -		<on_enable parameter="Toucher" name="EnableTouch"/> -	</menu_item_call> -	<menu_item_call label="Modifier" name="Edit..."/> +	<menu_item_call label="Toucher" name="Object Touch"/> +	<menu_item_call label="Éditer" name="Edit..."/>  	<menu_item_call label="Construire" name="Build"/>  	<menu_item_call label="Ouvrir" name="Open"/>  	<menu_item_call label="M'asseoir ici" name="Object Sit"/> 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 978ca86d62..66bfd01a2a 100644 --- a/indra/newview/skins/default/xui/fr/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/fr/panel_nearby_media.xml @@ -27,7 +27,7 @@  			Médias proches  		</text>  		<text name="show_text"> -			Afficher : +			Voir :  		</text>  		<combo_box name="show_combo">  			<combo_box.item label="Tout" name="All"/> @@ -42,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/sidepanel_item_info.xml b/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml index 0a5680fe06..0350ea5116 100644 --- a/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml @@ -23,7 +23,8 @@  	</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 :  		</text> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 0a269016f5..7aadaed209 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -1472,7 +1472,7 @@  		Solde  	</string>  	<string name="Credits"> -		Remerciements +		Crédits  	</string>  	<string name="Debits">  		Débits @@ -1787,7 +1787,7 @@  		Solde  	</string>  	<string name="GroupMoneyCredits"> -		Remerciements +		Crédits  	</string>  	<string name="GroupMoneyDebits">  		Débits @@ -3859,4 +3859,5 @@ de l'infraction signalée  	<string name="dateTimePM">  		PM  	</string> +	<string name="LocalEstimateUSD">[AMOUNT] US$</string>   </strings> 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 bec36fd427..40312f76b4 100644 --- a/indra/newview/skins/default/xui/it/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/it/panel_nearby_media.xml @@ -42,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/sidepanel_item_info.xml b/indra/newview/skins/default/xui/it/sidepanel_item_info.xml index d0ec943e67..627aeb5cb5 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,8 @@  	</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/ja/panel_nearby_media.xml b/indra/newview/skins/default/xui/ja/panel_nearby_media.xml index b3df3503bb..07293e6c79 100644 --- a/indra/newview/skins/default/xui/ja/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/ja/panel_nearby_media.xml @@ -42,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/sidepanel_item_info.xml b/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml index fdabe88362..414eba0509 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,8 @@  	</panel.string>  	<text name="title" value="アイテムのプロフィール"/>  	<text name="origin" value="(持ち物)"/> -	<panel label=""> +	<panel label="" +           name="item_profile">  		<text name="LabelItemNameTitle">  			名前:  		</text> 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 86c7275e79..926ca806ac 100644 --- a/indra/newview/skins/default/xui/pl/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/pl/panel_nearby_media.xml @@ -42,7 +42,7 @@  			<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"/> 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..0c6169c9c0 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,8 @@  	</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> 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/panel_nearby_media.xml b/indra/newview/skins/default/xui/pt/panel_nearby_media.xml index 672b8e6735..7d1b48ad76 100644 --- a/indra/newview/skins/default/xui/pt/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/pt/panel_nearby_media.xml @@ -42,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/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml index 8e880588e9..d2050f4660 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,8 @@  	</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/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/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.  | 
