diff options
| -rw-r--r-- | doc/LICENSE-source.txt | 36 | ||||
| -rw-r--r-- | indra/llimage/llimagej2c.cpp | 160 | ||||
| -rw-r--r-- | indra/llimage/llimagej2c.h | 7 | ||||
| -rw-r--r-- | indra/llimagej2coj/llimagej2coj.cpp | 356 | ||||
| -rw-r--r-- | indra/llimagej2coj/llimagej2coj.h | 29 | ||||
| -rw-r--r-- | indra/llui/llbutton.h | 3 | ||||
| -rw-r--r-- | indra/llui/lliconctrl.h | 1 | ||||
| -rw-r--r-- | indra/llui/llscrollcontainer.h | 1 | ||||
| -rw-r--r-- | indra/llui/llslider.h | 2 | ||||
| -rw-r--r-- | indra/llui/llspinctrl.h | 1 | ||||
| -rw-r--r-- | indra/llui/lltextbox.h | 2 | ||||
| -rw-r--r-- | indra/llui/lltexteditor.h | 1 | ||||
| -rw-r--r-- | indra/llui/llviewborder.h | 1 | ||||
| -rw-r--r-- | indra/newview/llfloatertos.cpp | 17 | ||||
| -rw-r--r-- | indra/newview/llviewerprecompiledheaders.h | 16 | ||||
| -rw-r--r-- | indra/newview/llviewertexteditor.h | 1 | 
16 files changed, 610 insertions, 24 deletions
| diff --git a/doc/LICENSE-source.txt b/doc/LICENSE-source.txt new file mode 100644 index 0000000000..200803bca8 --- /dev/null +++ b/doc/LICENSE-source.txt @@ -0,0 +1,36 @@ +Source code +======== +The license for the source code in this distribution should be clearly +marked on each source file.  Unless otherwise specified, the source +code in this distribution ("Source Code") is provided by Linden Lab to +you under the terms of the GNU General Public License, version 2.0 +("GPL"), unless you have obtained a separate licensing agreement +("Other License"), formally executed by you and Linden Lab.  Terms of +the GPL can be found in doc/GPL-license.txt in this distribution, or +online at http://secondlife.com/developers/opensource/gplv2 + +There are special exceptions to the terms and conditions of the GPL as +it is applied to this Source Code. View the full text of the exception +in the file doc/FLOSS-exception.txt in this software distribution, or +online at http://secondlife.com/developers/opensource/flossexception + +By copying, modifying or distributing this software, you acknowledge +that you have read and understood your obligations described above, +and agree to abide by those obligations. + +ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +COMPLETENESS OR PERFORMANCE. + +Logos and trademarks +============== + +"Second Life" and "Linden Lab" are registered trademarks of Linden +Research, Inc.  Other trademarks include (but are not limited to): the +names Linden and Linden Research, as well as the Linden Lab Hexagon +Design and the Second Life Hand Design logos. + +Use of logos and trademarks are subject to the Linden Lab trademark +policy, available at: + +http://secondlife.com/corporate/trademark/ diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp index ad07700a37..d4c08ca377 100644 --- a/indra/llimage/llimagej2c.cpp +++ b/indra/llimage/llimagej2c.cpp @@ -4,38 +4,172 @@   * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc.   * $License$   */ -  #include "linden_common.h" -#ifndef LL_USE_KDU -#define LL_USE_KDU 1 -#endif // LL_USE_KDU +#include <apr-1/apr_pools.h> +#include <apr-1/apr_dso.h> +#include "lldir.h"  #include "llimagej2c.h"  #include "llmemory.h" -#if LL_USE_KDU -#include "llimagej2ckdu.h" + +typedef LLImageJ2CImpl* (*CreateLLImageJ2CFunction)(); +typedef void (*DestroyLLImageJ2CFunction)(LLImageJ2CImpl*); + +//some "private static" variables so we only attempt to load +//dynamic libaries once +CreateLLImageJ2CFunction j2cimpl_create_func; +DestroyLLImageJ2CFunction j2cimpl_destroy_func; +apr_pool_t *j2cimpl_dso_memory_pool; +apr_dso_handle_t *j2cimpl_dso_handle; + +//Declare the prototype for theses functions here, their functionality +//will be implemented in other files which define a derived LLImageJ2CImpl +//but only ONE static library which has the implementation for this +//function should ever be included +LLImageJ2CImpl* fallbackCreateLLImageJ2CImpl(); +void fallbackDestroyLLImageJ2CImpl(LLImageJ2CImpl* impl); + +//static +//Loads the required "create" and "destroy" functions needed +void LLImageJ2C::openDSO() +{ +	//attempt to load a DSO and get some functions from it +	std::string dso_name; +	std::string dso_path; + +	bool all_functions_loaded = false; +	apr_status_t rv; + +#if LL_WINDOWS +	dso_name = "llkdu.dll"; +#elif LL_DARWIN +	dso_name = "libllkdu.dylib"; +#else +	dso_name = "libllkdu.so";  #endif -#include "llimagej2coj.h" +	dso_path = gDirUtilp->findFile(dso_name, +								   gDirUtilp->getAppRODataDir(), +								   gDirUtilp->getExecutableDir()); + +	j2cimpl_dso_handle      = NULL; +	j2cimpl_dso_memory_pool = NULL; +	//attempt to load the shared library +	apr_pool_create(&j2cimpl_dso_memory_pool, NULL); +	rv = apr_dso_load(&j2cimpl_dso_handle, +					  dso_path.c_str(), +					  j2cimpl_dso_memory_pool); + +	//now, check for success +	if ( rv == APR_SUCCESS ) +	{ +		//found the dynamic library +		//now we want to load the functions we're interested in +		CreateLLImageJ2CFunction  create_func = NULL; +		DestroyLLImageJ2CFunction dest_func = NULL; + +		rv = apr_dso_sym((apr_dso_handle_sym_t*)&create_func, +						 j2cimpl_dso_handle, +						 "createLLImageJ2CKDU"); +		if ( rv == APR_SUCCESS ) +		{ +			//we've loaded the create function ok +			//we need to delete via the DSO too +			//so lets check for a destruction function +			rv = apr_dso_sym((apr_dso_handle_sym_t*)&dest_func, +							 j2cimpl_dso_handle, +							 "destroyLLImageJ2CKDU"); +			if ( rv == APR_SUCCESS ) +			{ +				//k, everything is loaded alright +				j2cimpl_create_func  = create_func; +				j2cimpl_destroy_func = dest_func; +				all_functions_loaded = true; +			} +		} +	} + +	if ( !all_functions_loaded ) +	{ +		//something went wrong with the DSO or function loading.. +		//fall back onto our satefy impl creation function + +#if 0 +		// precious verbose debugging, sadly we can't use our +		// 'llinfos' stream etc. this early in the initialisation seq. +		char errbuf[256]; +		fprintf(stderr, "failed to load syms from DSO %s (%s)\n", +			dso_name.c_str(), dso_path.c_str()); +		apr_strerror(rv, errbuf, sizeof(errbuf)); +		fprintf(stderr, "error: %d, %s\n", rv, errbuf); +		apr_dso_error(j2cimpl_dso_handle, errbuf, sizeof(errbuf)); +		fprintf(stderr, "dso-error: %d, %s\n", rv, errbuf); +#endif + +		if ( j2cimpl_dso_handle ) +		{ +			apr_dso_unload(j2cimpl_dso_handle); +			j2cimpl_dso_handle = NULL; +		} + +		if ( j2cimpl_dso_memory_pool ) +		{ +			apr_pool_destroy(j2cimpl_dso_memory_pool); +			j2cimpl_dso_memory_pool = NULL; +		} +	} +} + +//static +void LLImageJ2C::closeDSO() +{ +	if ( j2cimpl_dso_handle ) apr_dso_unload(j2cimpl_dso_handle); +	if (j2cimpl_dso_memory_pool) apr_pool_destroy(j2cimpl_dso_memory_pool); +}  LLImageJ2C::LLImageJ2C() : 	LLImageFormatted(IMG_CODEC_J2C),  							mMaxBytes(0),  							mRawDiscardLevel(-1),  							mRate(0.0f)  { -#if LL_USE_KDU -	mImpl = new LLImageJ2CKDU(); -#else -	mImpl = new LLImageJ2COJ(); -#endif +	//We assume here that if we wanted to destory via +	//a dynamic library that the approriate open calls were made +	//before any calls to this constructor. + +	//Therefore, a NULL creation function pointer here means +	//we either did not want to create using functions from the dynamic +	//library or there were issues loading it, either way +	//use our fall back +	if ( !j2cimpl_create_func ) +	{ +		j2cimpl_create_func = fallbackCreateLLImageJ2CImpl; +	} + +	mImpl = j2cimpl_create_func();  }  // virtual  LLImageJ2C::~LLImageJ2C()  { -	delete mImpl; +	//We assume here that if we wanted to destory via +	//a dynamic library that the approriate open calls were made +	//before any calls to this destructor. + +	//Therefore, a NULL creation function pointer here means +	//we either did not want to destroy using functions from the dynamic +	//library or there were issues loading it, either way +	//use our fall back +	if ( !j2cimpl_destroy_func ) +	{ +		j2cimpl_destroy_func = fallbackDestroyLLImageJ2CImpl; +	} + +	if ( mImpl ) +	{ +		j2cimpl_destroy_func(mImpl); +	}  }  // virtual diff --git a/indra/llimage/llimagej2c.h b/indra/llimage/llimagej2c.h index ee73612bc7..4a3b017a55 100644 --- a/indra/llimage/llimagej2c.h +++ b/indra/llimage/llimagej2c.h @@ -13,7 +13,6 @@  #include "llassettype.h"  class LLImageJ2CImpl; -  class LLImageJ2C : public LLImageFormatted  {  protected: @@ -46,6 +45,9 @@ public:  	static S32 calcHeaderSizeJ2C();  	static S32 calcDataSizeJ2C(S32 w, S32 h, S32 comp, S32 discard_level, F32 rate = 0.f); + +	static void openDSO(); +	static void closeDSO();  protected:  	friend class LLImageJ2CImpl; @@ -63,8 +65,9 @@ protected:  // Derive from this class to implement JPEG2000 decoding  class LLImageJ2CImpl  { -protected: +public:  	virtual ~LLImageJ2CImpl(); +protected:  	virtual BOOL getMetadata(LLImageJ2C &base) = 0;  	virtual BOOL decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decode_time, S32 first_channel, S32 max_channel_count) = 0;  	virtual BOOL encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, const char* comment_text, F32 encode_time=0.0) = 0; diff --git a/indra/llimagej2coj/llimagej2coj.cpp b/indra/llimagej2coj/llimagej2coj.cpp new file mode 100644 index 0000000000..823d2a8dd4 --- /dev/null +++ b/indra/llimagej2coj/llimagej2coj.cpp @@ -0,0 +1,356 @@ +/**  + * @file llimagej2coj.cpp + * @brief This is an implementation of JPEG2000 encode/decode using OpenJPEG. + * + * Copyright (c) 2006-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#include "linden_common.h" +#include "llimagej2coj.h" + +#include "openjpeg/openjpeg.h" + +#include "lltimer.h" +#include "llmemory.h" + +LLImageJ2CImpl* fallbackCreateLLImageJ2CImpl() +{ +	return new LLImageJ2COJ(); +} + +void fallbackDestroyLLImageJ2CImpl(LLImageJ2CImpl* impl) +{ +	delete impl; +	impl = NULL; +} + +/** +sample error callback expecting a FILE* client object +*/ +void error_callback(const char *msg, void *client_data) { +	FILE *stream = (FILE*)client_data; +	fprintf(stream, "[ERROR] %s", msg); +} +/** +sample warning callback expecting a FILE* client object +*/ +void warning_callback(const char *msg, void *client_data) { +	FILE *stream = (FILE*)client_data; +	fprintf(stream, "[WARNING] %s", msg); +} +/** +sample debug callback expecting no client object +*/ +void info_callback(const char *msg, void *client_data) { +	fprintf(stdout, "[INFO] %s", msg); +} + + +LLImageJ2COJ::LLImageJ2COJ() : LLImageJ2CImpl() +{ +} + + +LLImageJ2COJ::~LLImageJ2COJ() +{ +} + + +BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decode_time, S32 first_channel, S32 max_channel_count) +{ +	// +	// FIXME: Get the comment field out of the texture +	// + +	LLTimer decode_timer; + +	opj_dparameters_t parameters;	/* decompression parameters */ +	opj_event_mgr_t event_mgr;		/* event manager */ +	opj_image_t *image = NULL; + +	opj_dinfo_t* dinfo = NULL;	/* handle to a decompressor */ +	opj_cio_t *cio = NULL; + + +	/* configure the event callbacks (not required) */ +	memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); +	event_mgr.error_handler = error_callback; +	event_mgr.warning_handler = warning_callback; +	event_mgr.info_handler = info_callback; + +	/* set decoding parameters to default values */ +	opj_set_default_decoder_parameters(¶meters); + +	parameters.cp_reduce = base.getRawDiscardLevel(); + +	/* decode the code-stream */ +	/* ---------------------- */ + +	/* JPEG-2000 codestream */ + +	/* get a decoder handle */ +	dinfo = opj_create_decompress(CODEC_J2K); + +	/* catch events using our callbacks and give a local context */ +	opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);			 + +	/* setup the decoder decoding parameters using user parameters */ +	opj_setup_decoder(dinfo, ¶meters); + +	/* open a byte stream */ +	cio = opj_cio_open((opj_common_ptr)dinfo, base.getData(), base.getDataSize()); + +	/* decode the stream and fill the image structure */ +	image = opj_decode(dinfo, cio); +	if(!image) +	{ +		fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n"); +		opj_destroy_decompress(dinfo); +		opj_cio_close(cio); +		return 1; +	} + +	/* close the byte stream */ +	opj_cio_close(cio); + + +	/* free remaining structures */ +	if(dinfo) { +		opj_destroy_decompress(dinfo); +	} + +	// Copy image data into our raw image format (instead of the separate channel format +	S32 width = 0; +	S32 height = 0; + +	S32 img_components = image->numcomps; +	S32 channels = img_components - first_channel; +	if( channels > max_channel_count ) +	{ +		channels = max_channel_count; +	} +	width = image->x1 - image->x0; +	height = image->y1 - image->y0; +	raw_image.resize(width, height, channels); +	U8 *rawp = raw_image.getData(); + +	for (S32 comp = first_channel; comp < first_channel + channels; comp++) +	{ +		S32 offset = comp; +		for (S32 y = (height - 1); y >= 0; y--) +		{ +			for (S32 x = 0; x < width; x++) +			{ +				rawp[offset] = image->comps[comp].data[y*width + x]; +				offset += channels; +			} +		} +	} + +	/* free image data structure */ +	opj_image_destroy(image); + +	base.setDecodingDone(); +	return TRUE; +} + + +BOOL LLImageJ2COJ::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, const char* comment_text, F32 encode_time) +{ +	const S32 MAX_COMPS = 5; +	opj_cparameters_t parameters;	/* compression parameters */ +	opj_event_mgr_t event_mgr;		/* event manager */ + + +	/*  +	configure the event callbacks (not required) +	setting of each callback is optional  +	*/ +	memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); +	event_mgr.error_handler = error_callback; +	event_mgr.warning_handler = warning_callback; +	event_mgr.info_handler = info_callback; + +	/* set encoding parameters to default values */ +	opj_set_default_encoder_parameters(¶meters); +	parameters.tcp_rates[0] = 0; +	parameters.tcp_numlayers++; +	parameters.cp_disto_alloc = 1; +	parameters.cod_format = 0; +	if (!comment_text) +	{ +		parameters.cp_comment = ""; +	} +	else +	{ +		// Awful hacky cast, too lazy to copy right now. +		parameters.cp_comment = (char *)comment_text; +	} + +	// +	// Fill in the source image from our raw image +	// +	OPJ_COLOR_SPACE color_space = CLRSPC_SRGB; +	opj_image_cmptparm_t cmptparm[MAX_COMPS]; +	opj_image_t * image = NULL; +	S32 numcomps = raw_image.getComponents(); +	S32 width = raw_image.getWidth(); +	S32 height = raw_image.getHeight(); + +	memset(&cmptparm[0], 0, MAX_COMPS * sizeof(opj_image_cmptparm_t)); +	for(S32 c = 0; c < numcomps; c++) { +		cmptparm[c].prec = 8; +		cmptparm[c].bpp = 8; +		cmptparm[c].sgnd = 0; +		cmptparm[c].dx = parameters.subsampling_dx; +		cmptparm[c].dy = parameters.subsampling_dy; +		cmptparm[c].w = width; +		cmptparm[c].h = height; +	} + +	/* create the image */ +	image = opj_image_create(numcomps, &cmptparm[0], color_space); + +	image->x1 = width; +	image->y1 = height; + +	S32 i = 0; +	const U8 *src_datap = raw_image.getData(); +	for (S32 y = height - 1; y >= 0; y--) +	{ +		for (S32 x = 0; x < width; x++) +		{ +			const U8 *pixel = src_datap + (y*width + x) * numcomps; +			for (S32 c = 0; c < numcomps; c++) +			{ +				image->comps[c].data[i] = *pixel; +				pixel++; +			} +			i++; +		} +	} + + + +	/* encode the destination image */ +	/* ---------------------------- */ + +	int codestream_length; +	opj_cio_t *cio = NULL; + +	/* get a J2K compressor handle */ +	opj_cinfo_t* cinfo = opj_create_compress(CODEC_J2K); + +	/* catch events using our callbacks and give a local context */ +	opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);			 + +	/* setup the encoder parameters using the current image and using user parameters */ +	opj_setup_encoder(cinfo, ¶meters, image); + +	/* open a byte stream for writing */ +	/* allocate memory for all tiles */ +	cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0); + +	/* encode the image */ +	bool bSuccess = opj_encode(cinfo, cio, image, parameters.index); +	if (!bSuccess) { +		opj_cio_close(cio); +		fprintf(stderr, "failed to encode image\n"); +		return FALSE; +	} +	codestream_length = cio_tell(cio); + +	base.copyData(cio->buffer, codestream_length); + +	/* close and free the byte stream */ +	opj_cio_close(cio); + +	/* free remaining compression structures */ +	opj_destroy_compress(cinfo); + + +	/* free user parameters structure */ +	if(parameters.cp_matrice) free(parameters.cp_matrice); + +	/* free image data */ +	opj_image_destroy(image); +	return TRUE; +} + +BOOL LLImageJ2COJ::getMetadata(LLImageJ2C &base) +{ +	// +	// FIXME: We get metadata by decoding the ENTIRE image. +	// + +	// Update the raw discard level +	base.updateRawDiscardLevel(); + +	opj_dparameters_t parameters;	/* decompression parameters */ +	opj_event_mgr_t event_mgr;		/* event manager */ +	opj_image_t *image = NULL; + +	opj_dinfo_t* dinfo = NULL;	/* handle to a decompressor */ +	opj_cio_t *cio = NULL; + + +	/* configure the event callbacks (not required) */ +	memset(&event_mgr, 0, sizeof(opj_event_mgr_t)); +	event_mgr.error_handler = error_callback; +	event_mgr.warning_handler = warning_callback; +	event_mgr.info_handler = info_callback; + +	/* set decoding parameters to default values */ +	opj_set_default_decoder_parameters(¶meters); + +	//parameters.cp_reduce = mRawDiscardLevel; + +	/* decode the code-stream */ +	/* ---------------------- */ + +	/* JPEG-2000 codestream */ + +	/* get a decoder handle */ +	dinfo = opj_create_decompress(CODEC_J2K); + +	/* catch events using our callbacks and give a local context */ +	opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);			 + +	/* setup the decoder decoding parameters using user parameters */ +	opj_setup_decoder(dinfo, ¶meters); + +	/* open a byte stream */ +	cio = opj_cio_open((opj_common_ptr)dinfo, base.getData(), base.getDataSize()); + +	/* decode the stream and fill the image structure */ +	image = opj_decode(dinfo, cio); +	if(!image) +	{ +		fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n"); +		opj_destroy_decompress(dinfo); +		opj_cio_close(cio); +		return 1; +	} + +	/* close the byte stream */ +	opj_cio_close(cio); + + +	/* free remaining structures */ +	if(dinfo) { +		opj_destroy_decompress(dinfo); +	} + +	// Copy image data into our raw image format (instead of the separate channel format +	S32 width = 0; +	S32 height = 0; + +	S32 img_components = image->numcomps; +	width = image->x1 - image->x0; +	height = image->y1 - image->y0; +	base.setSize(width, height, img_components); + +	/* free image data structure */ +	opj_image_destroy(image);	return TRUE; +} diff --git a/indra/llimagej2coj/llimagej2coj.h b/indra/llimagej2coj/llimagej2coj.h new file mode 100644 index 0000000000..9391ab4f70 --- /dev/null +++ b/indra/llimagej2coj/llimagej2coj.h @@ -0,0 +1,29 @@ +/**  + * @file llimagej2coj.h + * @brief This is an implementation of JPEG2000 encode/decode using OpenJPEG. + * + * Copyright (c) 2006-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#ifndef LL_LLIMAGEJ2COJ_H +#define LL_LLIMAGEJ2COJ_H + +#include "llimagej2c.h" + +class LLImageJ2COJ : public LLImageJ2CImpl +{	 +public: +	LLImageJ2COJ(); +	virtual ~LLImageJ2COJ(); + +protected: +	/*virtual*/ BOOL getMetadata(LLImageJ2C &base); +	/*virtual*/ BOOL decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decode_time, S32 first_channel, S32 max_channel_count); +	/*virtual*/ BOOL encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, const char* comment_text, F32 encode_time=0.0); + +	// Temporary variables for in-progress decodes... +	LLImageRaw *mRawImagep; +}; + +#endif diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h index 0a4e41b017..1982c2e36f 100644 --- a/indra/llui/llbutton.h +++ b/indra/llui/llbutton.h @@ -33,6 +33,9 @@ extern S32	BTN_HEIGHT;  // All button widths should be rounded up to this size  extern S32	BTN_GRID; + +class LLUICtrlFactory; +  //  // Classes  // diff --git a/indra/llui/lliconctrl.h b/indra/llui/lliconctrl.h index ea762982a2..21796396fa 100644 --- a/indra/llui/lliconctrl.h +++ b/indra/llui/lliconctrl.h @@ -16,6 +16,7 @@  #include "llimagegl.h"  class LLTextBox; +class LLUICtrlFactory;  //  // Classes diff --git a/indra/llui/llscrollcontainer.h b/indra/llui/llscrollcontainer.h index 5f23be4628..b63e3ffc07 100644 --- a/indra/llui/llscrollcontainer.h +++ b/indra/llui/llscrollcontainer.h @@ -29,6 +29,7 @@  class LLScrollbar;  class LLViewBorder; +class LLUICtrlFactory;  class LLScrollableContainerView : public LLUICtrl diff --git a/indra/llui/llslider.h b/indra/llui/llslider.h index a437cf2886..d88da42064 100644 --- a/indra/llui/llslider.h +++ b/indra/llui/llslider.h @@ -12,6 +12,8 @@  #include "lluictrl.h"  #include "v4color.h" +class LLUICtrlFactory; +  class LLSlider : public LLUICtrl  {  public: diff --git a/indra/llui/llspinctrl.h b/indra/llui/llspinctrl.h index d6ccd4d6bf..4fe1a26f5d 100644 --- a/indra/llui/llspinctrl.h +++ b/indra/llui/llspinctrl.h @@ -31,6 +31,7 @@ class LLFontGL;  class LLButton;  class LLTextBox;  class LLLineEditor; +class LLUICtrlFactory;  class LLSpinCtrl diff --git a/indra/llui/lltextbox.h b/indra/llui/lltextbox.h index 0c09ae26b4..56c00eb8b3 100644 --- a/indra/llui/lltextbox.h +++ b/indra/llui/lltextbox.h @@ -15,6 +15,8 @@  #include "llfontgl.h"  #include "lluistring.h" +class LLUICtrlFactory; +  class LLTextBox  :	public LLUICtrl diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h index bebf2b31f2..ce85e35fe3 100644 --- a/indra/llui/lltexteditor.h +++ b/indra/llui/lltexteditor.h @@ -25,6 +25,7 @@ class LLScrollbar;  class LLViewBorder;  class LLKeywordToken;  class LLTextCmd; +class LLUICtrlFactory;  //  // Constants diff --git a/indra/llui/llviewborder.h b/indra/llui/llviewborder.h index 984eee6e60..946c6b9f74 100644 --- a/indra/llui/llviewborder.h +++ b/indra/llui/llviewborder.h @@ -18,6 +18,7 @@  #include "llxmlnode.h"  class LLUUID; +class LLUICtrlFactory;  class LLViewBorder : public LLView diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp index c9aa9edebd..e2fa576fa9 100644 --- a/indra/newview/llfloatertos.cpp +++ b/indra/newview/llfloatertos.cpp @@ -105,7 +105,22 @@ BOOL LLFloaterTOS::postBuild()  	childSetAction("Continue", onContinue, this);  	childSetAction("Cancel", onCancel, this);  	childSetCommitCallback("tos_agreement", updateAgree, this); -	 + +	// this displays the critical message +	if ( mType != TOS_TOS ) +	{ +		LLTextEditor *Editor = LLUICtrlFactory::getTextEditorByName(this, "tos_text"); +		if (Editor) +		{ +			Editor->setHandleEditKeysDirectly( TRUE ); +			Editor->setEnabled( FALSE ); +			Editor->setReadOnlyFgColor(LLColor4::white); +			Editor->setWordWrap(TRUE); +			Editor->setFocus(TRUE); +		} +		childSetValue("tos_text", LLSD(mMessage));	 +	}; +  	// this displays the critical message  	if ( mType != TOS_TOS )  	{ diff --git a/indra/newview/llviewerprecompiledheaders.h b/indra/newview/llviewerprecompiledheaders.h index 76efdb8595..a2ef97fc6b 100644 --- a/indra/newview/llviewerprecompiledheaders.h +++ b/indra/newview/llviewerprecompiledheaders.h @@ -102,19 +102,19 @@  #include "u64.h"  // Library includes from llimage -#include "kdc_flow_control.h" -#include "kde_flow_control.h" -#include "kdu_image.h" -#include "kdu_image_local.h" -#include "llblockdata.h" -#include "llblockdecoder.h" -#include "llblockencoder.h" +//#include "kdc_flow_control.h" +//#include "kde_flow_control.h" +//#include "kdu_image.h" +//#include "kdu_image_local.h" +//#include "llblockdata.h" +//#include "llblockdecoder.h" +//#include "llblockencoder.h"  #include "llimage.h"  #include "llimagebmp.h"  #include "llimagej2c.h"  #include "llimagejpeg.h"  #include "llimagetga.h" -#include "llkdumem.h" +//#include "llkdumem.h"  #include "llmapimagetype.h"  // Library includes from llmath project diff --git a/indra/newview/llviewertexteditor.h b/indra/newview/llviewertexteditor.h index b537d07ffa..99e971b33c 100644 --- a/indra/newview/llviewertexteditor.h +++ b/indra/newview/llviewertexteditor.h @@ -12,6 +12,7 @@  #include "lltexteditor.h"  class LLInventoryItem; +class LLEmbeddedItems;  // | 
